我正在使用 ZF2 开发网络应用程序。这是一个多语言网站。我想使用 ZF2 Translator 进行翻译。因为,管理员可以修改语言变量。所以,我打算使用语言文件夹文件。我将在管理员修改语言变量时更新语言文件。任何人都可以提出这个实现的想法吗?谢谢。
问问题
1743 次
2 回答
1
基于用户输入的翻译可能会有点混乱。现在没有简单的方法可以做到这一点,因为当前支持的格式都是文件格式:带有数组的 php 文件、gettext .po 文件或 Tmx/Xliff 文件。为了最简单的访问,您可能会将翻译存储在数据库中。
因此,您需要编写自己的加载器,从数据库加载翻译。另一种方法是您将翻译写入 php 数组并将其导出到文件中,但我不建议这样做。对于数据库加载器,您必须实现RemoteLoaderInterface
. 用非常简单的话来说:
use My\DbTable;
use Zend\I18n\Translator\Loader\RemoteLoaderInterface;
Zend\I18n\Translator\TextDoamin;
class DbLoader implements RemoteLoaderInterface
{
protected $table;
public function __construct(DbTable $table)
{
$this->table = $table;
}
public function load($locale, $textDomain)
{
$data = $this->table->loadFromLocale($locale);
// process $data into $messages
// $messages is array(key=>value) with key translation key
$domain = new TextDomain($messages);
return $domain;
}
}
db 表在您指定的语言环境中加载消息。如果您使用文本域,也请传递它。然后你需要配置你的Translator
这样它也使用这个加载器来加载消息。那么其他一切都应该没问题。在您的视图中,您可以创建如下翻译:
<?php echo $this->translate('my original text'); ?>
于 2013-01-11T21:51:33.733 回答
0
SkeletonApp 内置了翻译支持。然而,关于如何使用它的更多细节也可以在手册中找到 - > http://zf2.readthedocs.org/en/latest/modules/zend.i18n.translating.html
我个人将所有语言文件保存在一个名为 /language 的文件夹中
在您看来,您也可以简单地调用
$this->translate('text_you_want_to_translate');
于 2013-01-11T18:25:09.533 回答