Я создаю сайт, который будет переведен на x языков.
Все строки должны быть локализованы.
В некоторых случаях мне нужно отобразить название языка, название страны илидругая информация, которая была получена из базы данных.Данные, которые обрабатываются таким образом, редко меняются - как указано выше, я говорю об именах языков, странах и т. Д.
В этом примере я использую массив, содержащий языки, на которых пользовательский интерфейс сайтабыл переведен.Чтобы разрешить перевод имен (используется для текста заголовка при наведении флага / ссылки «изменить язык»), у меня есть массив типа *:
Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
Я использую их, чтобы получить соответствующую строку имени дляданный язык.
В настоящее время я использую глобальный массив:
$global_langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
Использование:
global $global_langNames;
echo $global_langNames[$code]; // $code = 'zh_CN'
Вывод (locale = en_GB):
Китайский упрощенный
Вывод (locale = zh_CN):
简体 中文
Я бы с большим удовольствием объявил этои другие) постоянные массивы как частные члены класса, но, похоже, PHP не желает:
class constants_lang{
private static $langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
static function getLangName($code){
return self::$langNames($code);
}
}
Результат:
Parse error: syntax error, unexpected '(', expecting ')' in /site/http/includes/classes/constants/lang.php on line 20
Должен ли я опустить голову и уйтивернуться к глобальному массиву, или есть другой, лучший способ для меня использовать «постоянный» массив, который будет использоваться таким образом?
* Ключи массива взяты из таблицы базы данных, хранящей языковые коды, и можем ли мыесть перевод интерфейса:
code ui translation
zh_CN 1
en_GB 1
zh_TW 0
....
Решение
class constants{
private $langNamesFromCode;
function __construct()
{
$this->langNamesFromCode = $this->initLangNamesFromCode();
}
/* INIT */
private static function initLangNamesFromCode()
{
return Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
}
/* GETTERS */
public static function getLangNameFromCode($code)
{
if(self::isStatic()){
$langNamesFromCode = self::initLangNamesFromCode();
return $langNamesFromCode[$code];
}
else{
return $this->langNamesFromCode[$code];
}
}
/* UTILITY */
private static function isStatic()
{
return !(isset($this) && get_class($this) == __CLASS__);
}
}