Yii和PHP Gettext

时间:2013-11-28 12:56:08

标签: yii internationalization gettext poedit

我想让我的yii app多语言。要做到这一点,我想使用gettext(因为它比yii消息简单得多)。

为此,我使用了this yii extension,我配置了PO文件,我进行了翻译等。

最大的问题:什么都没发生。什么都没有翻译。

2 个答案:

答案 0 :(得分:1)

我可以告诉你这个令人敬畏的多语言扩展!

http://www.yiiframework.com/extension/tstranslation/

答案 1 :(得分:1)

要使用没有任何扩展名的gettext,请按照这些步骤操作。在config/main.php设置这样的目标语言:

'language' = 'ru',

messages组件设置为使用CGettextMessageSource

'messages' => array(
    'class' => 'CGettextMessageSource',
),

messages.po文件夹中创建protected/messages/ru文件(注意:文件夹名称与语言代码相同)。如果使用poedit messages.po文件必须具有相应的标头。例如:

msgid ""
msgstr ""
"Project-Id-Version: FOO BAR 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-11 11:11+0300\n"
"PO-Revision-Date: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-KeywordsList: _ngettext:1,2;t:1c,2\n"
"X-Poedit-SearchPath-0: ../..\n"

注意t:1c,2。这意味着,函数Yii::app()中的第一个参数将用作上下文(请参阅msgctx),其次将用作要翻译的实际字符串。如果没有这个,你的i18n就行不通了!

现在只需在poedit中打开messages.poUpdate→翻译→Save。 并且Yii将创建并使用messages.mo文件。

对于您的语言复数字符串,请参阅gettext help