144 lines
3.4 KiB
PHP
144 lines
3.4 KiB
PHP
<?php namespace ProcessWire;
|
||
|
||
/**
|
||
* A type of Page that represents a single Language in ProcessWire
|
||
*
|
||
* ProcessWire 3.x, Copyright 2023 by Ryan Cramer
|
||
* https://processwire.com
|
||
*
|
||
* @property LanguageTranslator $translator Get instance of LanguageTranslator for this language
|
||
* @property bool $isDefault Is this the default language?
|
||
* @property bool $isCurrent Is this the current language?
|
||
* @property Pagefiles $language_files Language translation files for /wire/ (language pack)
|
||
* @property Pagefiles $language_files_site Language translation files for /site/ (custom translations per site)
|
||
*
|
||
*/
|
||
|
||
class Language extends Page {
|
||
|
||
/**
|
||
* Whether this Language represents the default
|
||
*
|
||
*/
|
||
protected $isDefaultLanguage = false;
|
||
|
||
/**
|
||
* Construct a new Language instance
|
||
*
|
||
* @param Template $tpl
|
||
*
|
||
*/
|
||
public function __construct(Template $tpl = null) {
|
||
parent::__construct($tpl);
|
||
if(!$tpl) $this->template = $this->wire()->templates->get('language');
|
||
}
|
||
|
||
/**
|
||
* Wired to API
|
||
*
|
||
*/
|
||
public function wired() {
|
||
parent::wired();
|
||
$template = $this->wire()->templates->get('language');
|
||
if($template !== $this->template && (!$this->template || $this->template->name === 'language')) $this->template = $template;
|
||
}
|
||
|
||
/**
|
||
* Get a value from the language page (intercepting translator and isDefault)
|
||
*
|
||
* #pw-internal
|
||
*
|
||
* @param string $key
|
||
* @return mixed
|
||
*
|
||
*/
|
||
public function get($key) {
|
||
if($key == 'translator') return $this->translator();
|
||
if($key == 'isDefault' || $key == 'isDefaultLanguage') return $this->isDefaultLanguage;
|
||
if($key == 'isCurrent') return $this->isCurrent();
|
||
return parent::get($key);
|
||
}
|
||
|
||
/**
|
||
* Return an instance of the LanguageTranslator object prepared for this language
|
||
*
|
||
* #pw-internal
|
||
*
|
||
* @return LanguageTranslator
|
||
*
|
||
*/
|
||
public function translator() {
|
||
return $this->wire()->languages->translator($this);
|
||
}
|
||
|
||
/**
|
||
* Targets this as the default language
|
||
*
|
||
* #pw-internal
|
||
*
|
||
*/
|
||
public function setIsDefaultLanguage() {
|
||
$this->isDefaultLanguage = true;
|
||
}
|
||
|
||
/**
|
||
* Returns whether or not this is the default language
|
||
*
|
||
* @return bool
|
||
*
|
||
*/
|
||
public function isDefault() {
|
||
return $this->isDefaultLanguage || $this->name == 'default';
|
||
}
|
||
|
||
/**
|
||
* Returns whether or not this is the current user’s language
|
||
*
|
||
* @return bool
|
||
*
|
||
*/
|
||
public function isCurrent() {
|
||
return $this->id == $this->wire()->user->language->id;
|
||
}
|
||
|
||
/**
|
||
* Return the API variable used for managing pages of this type
|
||
*
|
||
* #pw-internal
|
||
*
|
||
* @return Languages
|
||
*
|
||
*/
|
||
public function getPagesManager() {
|
||
return $this->wire()->languages;
|
||
}
|
||
|
||
/**
|
||
* Get locale for this language
|
||
*
|
||
* See the `Languages::getLocale()` method for full details.
|
||
*
|
||
* @param int $category Optional category (default=LC_ALL)
|
||
* @return string|bool
|
||
* @see Languages::setLocale()
|
||
*
|
||
*/
|
||
public function getLocale($category = LC_ALL) {
|
||
return $this->wire()->languages->getLocale($category, $this);
|
||
}
|
||
|
||
/**
|
||
* Set the current locale to use settings defined for this language
|
||
*
|
||
* See the `Languages::setLocale()` method for full details.
|
||
*
|
||
* @param int $category Optional category (default=LC_ALL)
|
||
* @return string|bool Returns the locale that was set or boolean false if requested locale cannot be set.
|
||
* @see Languages::setLocale()
|
||
*
|
||
*
|
||
*/
|
||
public function setLocale($category = LC_ALL) {
|
||
return $this->wire()->languages->setLocale($category, $this);
|
||
}
|
||
}
|