Vil*_*eni 0 localization zend-framework2
我正在寻找关于在Zend 2中处理本地化的首选方法的教程,但到目前为止我还没有找到任何方法.我能找到的最好的是这个页面,它没有详细解释实现本地化(特别是应用程序消息)的实际过程,或者这个问题,这个问题在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
Run Code Online (Sandbox Code Playgroud)
那么如何提供本地化的消息呢?
好吧,对于初学者,你需要一个翻译程序,如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'
)
)
)
Run Code Online (Sandbox Code Playgroud)
让事情变得简单的是创建一个language.php文件并添加如下行:
echo _('text_to_translate_here');
Run Code Online (Sandbox Code Playgroud)
配置PoEdit时,您将扫描此文件,该文件会将翻译ID添加到PoEdit.现在您可以添加要显示的真实文本,保存后它将输出2个文件,如account.mo和account.po.您需要上传到语言文件夹的唯一文件是account.mo
由于我在我的应用程序中使用翻译,我已将工厂添加到我的global.php文件中:
return array(
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
)
)
);
Run Code Online (Sandbox Code Playgroud)
在我的view.phtml文件中,我现在可以翻译:
<?php echo $this->translate('text_to_translate_here', 'account'); ?>
Run Code Online (Sandbox Code Playgroud)
现在,如果您不想使用我在module.config.php示例中显示的textdomains,则默认情况下所有翻译都将使用"default"textdomain.所以你可以这样做:
<?php echo $this->translate('text_to_translate_here'); ?>
Run Code Online (Sandbox Code Playgroud)
这也适用于FormLabels :(这将输出Priroity作为标签名称)
<?php echo $this->formLabel($this->form->get('prio')); ?>
Run Code Online (Sandbox Code Playgroud)
如果要使用"default"以外的textdomain翻译Form对象,则可以将其添加到view.phtml中
$this->formSubmit()->setTranslatorTextDomain('account');
Run Code Online (Sandbox Code Playgroud)
现在,您提交的FormLabel将使用该textdomain而不是默认的textdomain.任何其他类型的表单对象也是如此.只需将formSubmit替换为元素类型即可.
让我知道这是否有所帮助,或者我是否遗漏了任何东西.
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |