0

我正在使用 ZF2 开发网络应用程序。这是一个多语言网站。我想使用 ZF2 Translator 进行翻译。因为,管理员可以修改语言变量。所以,我打算使用语言文件夹文件。我将在管理员修改语言变量时更新语言文件。任何人都可以提出这个实现的想法吗?谢谢。

4

2 回答 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 回答