【发布时间】:2013-09-18 19:17:17
【问题描述】:
我遵循此处指定的翻译方法: http://framework.zend.com/manual/2.2/en/modules/zend.i18n.translating.html#setting-a-locale
因为我的大部分字符串已经存在于数据库中并且我不想将它们传输到 POEdit,所以我正在生成一堆 PHP 数组文件,例如 en_US.php、de_DE.php 等。
在 module/Application/config/module.config.php 中,模式定义为:
array(
'type' => 'phparray',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.php',
),
在module/Applicaation/Module.php中这样设置翻译器:
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 时是否需要传递更多参数?
更多调查 查看从标头返回的内容有所不同:
$locale = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
var_dump($locale);
将打印字符串(2) "zh" zh
var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);
将打印字符串(5) "zh-tw"
所以也许我应该使用以下内容,但这绝对不是文档中指定的内容
->setLocale($_SERVER['HTTP_ACCEPT_LANGUAGE'])
【问题讨论】:
标签: localization zend-framework2 language-translation