我正在使用ZF2开发Web应用程序。这是一个多语言的网站。我想使用ZF2 Translator进行翻译。因为,admin可以修改语言变量。所以,我打算使用语言文件夹文件。我将在管理员修改语言变量时更新语言文件。有人可以提出这个实现的想法吗?感谢。
答案 0 :(得分: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'); ?>
答案 1 :(得分:0)
SkeletonApp内置了翻译支持。但是,有关如何使用它的更多详细信息也可以在手册中找到 - &gt; http://zf2.readthedocs.org/en/latest/modules/zend.i18n.translating.html
我个人将所有语言文件保存在名为/ language
的文件夹中在您的观看中,您也可以直接致电
$this->translate('text_you_want_to_translate');