artabro/wire/modules/LanguageSupport/Language.php

145 lines
3.4 KiB
PHP
Raw Normal View History

2024-08-27 11:35:37 +02:00
<?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 users 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);
}
}