2013-03-01 57 views
0

我正在寻找关于在Zend 2中处理本地化的首选方法的教程,但到目前为止我还找不到任何。我能找到的最好的是this page,它并没有详细解释实现本地化(特别是应用程序消息)的实际过程,或者说在Zend 2发布之前就已经提出并且现在已经过时的this questionZend 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

你可以定义一点本地化吗?例如,你只是想翻译文本到不同的语言,时间格式,货币格式等...... 虽然我的第一个建议是使用GetText翻译格式,我不会将它存储在数据库中,而是文本文件,我也会为它们设置缓存。 – Diemuzi 2013-03-02 19:53:14

+0

我的意思主要是翻译各种信息,包括表单标签或按钮标题等元素,当然也包括网站上的页面内容,以及日期,时间和货币格式。所讨论的特定网站是一个简单的网站,其中包含一些静态页面以及通过网络应用程序本身进行编辑的可能性。尽管我也很欣赏一些关于如何在较大和更复杂的应用程序中完成这些操作的指针,而不是较小的应用程序。 – Vilinkameni 2013-03-02 20:25:18

回答

5

好吧,对于初学者来说,你需要一个翻译程序,如http://www.poedit.net/

这里是我有我的设置:

在你的模块文件夹中创建名为“语言”的另一个文件夹。

打开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'); ?> 

现在,如果你不想使用textdomains正如我在该module.config.php的例子已经证明,那么所有的翻译将默认使用“默认”文本域。如果你想使用以外的textdomain翻译表单对象(这将输出Priroity作为标签名称)

<?php echo $this->formLabel($this->form->get('prio')); ?> 

:所以,你可以这样做,而不是:

<?php echo $this->translate('text_to_translate_here'); ?> 

这也将为FormLabels工作“默认”,那么你可以到你的view.phtml添加这个现在

$this->formSubmit()->setTranslatorTextDomain('account'); 

您提交FormLabels将使用textdomain而不是默认的textdomain。对于任何其他类型的表单对象也是如此。只需用元素类型替换formSubmit即可。

让我知道如果这有助于或如果我失去了什么。

+1

看着你的答案,唯一没有马上清楚的是如何处理动态文本(用户可编辑页面的内容)。这需要动态完成,我想象的是Gettext(或不是?)的边界之外,因为网站的管理员需要能够提供和编辑多种语言的页面可编辑部分的翻译飞。在提供不同语言的简历时,可以在Linked.in上看到类似概念的示例。如果我在本地化页面的静态部分时遇到问题,我会提供更新。 – Vilinkameni 2013-03-02 21:27:27

相关问题