145 lines
3.4 KiB
PHP
145 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);
|
|||
|
}
|
|||
|
}
|