0

我想不出一种方法来自动提取要在文件中翻译的字符串。

例如,你有你的布局和视图echo $this->translate('my_string');,我想用比较数组创建文件 'en_US.php'、'fr_FR.php'、'es_ES.php':

<?php return array('my_string' => 'translation of my string'); ?>

是否可以 ?

谢谢。

4

3 回答 3

1

是的。

放入您的application.ini

resources.translate.adapter = Array
resources.translate.locale = fr_FR
resources.translate.disableNotices = true
resources.translate.data = APPLICATION_PATH "/data"

并将文件fr_FR.php放在您的APPLICATION_PATH "/data"目录中。它应该工作。

该文件必须是这样的:

return array (
   'Good day' => 'Bojour',
);
于 2011-03-19T20:24:13.540 回答
1

查看 Zend_Translate 适配器并选择一个。我热烈推荐 gettext 适配器。

以下是如何在 Zend Framework 应用程序中实现 i18n:

  1. 在引导期间设置翻译适配器
  2. 使用 Zend_Registry::set('Zend_Translate', $translate); 将适配器对象存储在注册表中
  3. 将所有文本换成 $translate->translate('This is translatable text');
  4. 在您的开发机器上安装“gettext”。
  5. 安装和设置 poEdit。poEdit 将扫描您的应用程序并找到所有可翻译的字符串。然后它将它们存储在一个 .po 文件中,您可以对其进行编辑和乘以其他语言。
  6. 完成后,保存它,poEdit 存储创建 .mo 文件。Zend_Translate gettext 适配器需要这些。
于 2011-03-19T20:45:18.787 回答
0

使用 PHP 翻译项目对于小型项目来说很方便,因此您不需要此类工具。

gettext有这样的工具,比如poedit,它将解析您的项目并搜索给定的函数/方法 ( translate())。POedit 将生成 .po 文件,该文件基本上由纯/文本文件组成,如下所示:

#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""

如果您确实需要使用 PHP 文件进行翻译,您可以尝试一些grep, sed, awk, 类似这样的东西应该给出一个起点(未经测试):

echo "return array(" > mytranslation.php | \
grep "translate(" * | \
cut -f1 | \
sed -r 's@.*translate\((.*)\).*@\1 => "Not translated yet",@' >> mytranslation.php && \
echo ");" >> mytranslation.php 
于 2011-03-19T19:14:46.417 回答