我正在寻找关于在Zend 2中处理本地化的首选方法的教程,但到目前为止我还没有找到任何方法。我能找到的最好的是this page,它没有详细解释实现本地化(特别是应用程序消息)的实际过程,或者this question,这是在Zend 2发布之前提出的,并且是现在已经过时了。
如果在该页面上给出了选择,请说我选择GNU Gettext作为翻译格式。在这种情况下是否有关于本地化ZF2应用程序的教程?
或者说,我将网站上的页面文本存储在数据库表中,例如
CREATE TABLE `page` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`body` blob,
`locale` int(11) NOT NULL,
`creator` int(11) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `pagecreatorfk_idx` (`creator`),
CONSTRAINT `pagecreatorfk` FOREIGN KEY (`creator`)
REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
那么如何提供本地化消息?
答案 0 :(得分:5)
好的,对于初学者,您需要一个翻译程序,例如http://www.poedit.net/
以下是我的设置:
在Module文件夹中,创建另一个名为“language”的文件夹。
打开你的module.config.php并添加以下内容:
'translator' => array(
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
'text_domain' => 'account'
)
)
)
让我感到轻松的是创建一个language.php文件并添加如下行:
echo _('text_to_translate_here');
配置PoEdit时,您将扫描此文件,该文件会将翻译ID添加到PoEdit。现在您可以添加要显示的真实文本,保存后它将输出2个文件,如account.mo和account.po。您需要上传到语言文件夹的唯一文件是account.mo
由于我在我的应用程序中使用翻译,因此我将工厂添加到我的global.php文件中:
return array(
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
)
)
);
在我的view.phtml文件中,我现在可以翻译:
<?php echo $this->translate('text_to_translate_here', 'account'); ?>
现在,如果您不想使用我在module.config.php示例中显示的textdomains,则默认情况下所有翻译都将使用“default”textdomain。所以你可以这样做:
<?php echo $this->translate('text_to_translate_here'); ?>
这也适用于FormLabel :(这将输出Priroity作为标签名称)
<?php echo $this->formLabel($this->form->get('prio')); ?>
如果您想使用“默认”以外的文本域翻译Form对象,则可以将其添加到view.phtml
$this->formSubmit()->setTranslatorTextDomain('account');
现在,您提交的FormLabel将使用该textdomain而不是默认的textdomain。任何其他类型的表单对象也是如此。只需将formSubmit替换为元素类型。
请告诉我这是否有所帮助,或者我是否遗漏了什么。