Я после способ перевода, указанный здесь: http://framework.zend.com/manual/2.2/en/modules/zend.i18n.translating.html#setting-a-localeZF2 Локализация Переводчик
Поскольку большинство моих строк уже существует в БД, и я не хотел, чтобы передать их PoEdit, я генерируя связка PHP массива файлов, таких как en_US.php, de_DE.php и т.д.
В модуле/Application/Config/module.config.php картина определяется как:
array(
'type' => 'phparray',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.php',
),
Установка переводчика, как это в модуле/Application/Module.ph р:
public function onBootstrap($e)
{
// ...snip...
$sm = $e->getApplication()->getServiceManager();
$sm->get('translator')
->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']))
->setFallbackLocale('en_US');
// ...snip...
}
И выполняя в Справочники зрения, как:
<th><?= $this->translate('Date Created'); ?></th>
Все работает, кроме ... традиционный и упрощенный китайский. Если я правильно читаю документы, zh_CN.php должен быть выбран для пользователей с упрощенным китайским языком в качестве их настроек, а zh_HK следует подбирать для пользователей с традиционным китайским языком. Но это не работает. Он только поднимает zh.php, и я теряю свои вариации.
Я нахожусь на Mac, поэтому, чтобы проверить, я просто меняю свои системные настройки и перезапускаю свой браузер. Все мои западные языки (en_US.php, fr_FR.php, it_IT.php, nl_NL.php и т. Д.) Работают должным образом. Но для японцев я должен был назвать свой файл ja.php, и я не могу заставить китайцев использовать разные коды стран.
Любые идеи? Как я могу исключить, является ли проблема в моем соглашении об именах, дополнительным параметром (неправильный шаблон) или мне нужно передать больше параметров при вызове translate?
MORE РАССЛЕДОВАНИЕ Глядя на то, что возвращается из заголовков есть разница:
$locale = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
var_dump($locale);
напечатает строку (2) "ж" ж
var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);
напечатает строку (5) «zh-tw»
Так что, возможно, я должен использовать нижеследующее, но это абсолютно не то, что указано в документах
->setLocale($_SERVER['HTTP_ACCEPT_LANGUAGE'])
+1 для объяснения о 'acceptFromHttp()' part. Другой модуль, который следует принять во внимание, я предполагаю;) – Sam
Это был прекрасный ответ! Спасибо за информацию. Дополнительный модуль больше, чем мне нужно, поскольку у нас есть только очень определенное количество переводов, поэтому возвращение к английскому языку будет в порядке. Я не ожидаю, что кто-то, кто первым выбирает, - это упрощенный китайский, чем голландский, как следующий вариант. Языки, которые мы поддерживаем, не имеют большого количества вариантов, кроме китайского. – manisha
О, и к вашему первому вопросу, -> setLocale (\ Locale :: acceptFromHttp ($ _ SERVER ['HTTP_ACCEPT_LANGUAGE])), как это записано в примере docs, на что я ссылался. Он работает, пока вы не доберетесь до региональных вариантов. – manisha