Я создаю сайт, который будет переведен на x языков.Назначение Gettext String классу Member
Все строки должны быть локализованы.
Бывают случаи, когда мне нужно отобразить имя языка, название страны или другую информацию, полученную из базы данных. Данные, которые рассматриваются таким образом, редко будут изменены - как выше, я говорю об именах языков, странах и т. Д.
В этом примере я использую массив, содержащий языки, на которых пользовательский интерфейс сайта был в переводе. Чтобы разрешить перевод имен (используется для текста заголовка, когда «смена языка» флаг/ссылка колебались), у меня есть массив, как *:
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'
Output (локаль = EN_GB):
китайский упрощенный
ОУ tput (локалите = 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
Должен ли я повесить голову низко и идти ба ck в глобальный массив, или есть другой, лучший способ для меня иметь «постоянный» массив, который будет использоваться таким образом?
* Ключи массива являются из языковых кодов хранения таблиц базы данных и есть ли у нас перевод интерфейса:
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__);
}
}
См. [Этот вопрос] [1] для альтернативы. YMMV. [1]: http://stackoverflow.com/questions/693691/php-how-to-initialize-static-variables – johndodo