日存档: 九月 30, 2008

Zend Translate的使用和设置

Zend Translate的功能不错, 我们使用gettext格式作为我们翻译文件的标准格式,使用POEditor维护翻译文件,处理后的gettext文件是二进制的mo文件. 我们使用ZF的根据目录名(LOCALE_DIRECTORY)自动搜索相关译文功能,同时使用根据mo文件更新的cache提高速度,为了设置translate功能,我们在bootstrap文件有如下代码
$cache = Zend_Cache::factory('Page','File',$frontendOptions,$backendOptions);
Zend_Translate::setCache($cache);
$translate = new Zend_Translate('gettext','../data/locales/','zh',array(
    'scan' =>Zend_Translate::LOCALE_DIRECTORY
));
$translate->setLocale('auto');
Zend_Registry::set('Zend_Translate', $adapter);
Zend_Form::setDefaultTranslator($translate);

注意:在保存到 Zend_Registry 中时,键值必须是 Zend_Translate,否则,得不到应有的结果。

其中,‘scan’ =>Zend_Translate::LOCALE_DIRECTORY设定ZF在指定目录下搜索翻译mo文件。我们的目录结构为:
application
...
data
  ...
  locales
    en
    de
    fr
    zh
...

在ZF的Document中有一个Example,要求设置’auto’格式:
$translate = new Zend_Translate('gettext','path','auto',array('scan' =>Zend_Translate::LOCALE_DIRECTORY));

但是事实上根据我在ZF1.52, 1.6, 1.61中测试,这个代码是有bug的, ‘auto’并不能正确将用户浏览器语言设置为当前语言,而是将最后一个读到的文件设置为默认Locale, 这点从ZF1.61的代码中Zend_Translate_Adapter::addTranslation函数中可以看到。

我们是怎么解决的呢,很简单,第一次读取时设置语言为’zh’, 然后立即设定默认locale为’auto’

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

PO Editor的使用和配置

的translate支持多种格式的翻译文件,从小型项目使用的ini文件,到专业项目使用的tmx, gettext等。google了一下,似乎linux下的gettext速度最快,编译的结果是binary格式的,于是选择了gettext格式。有个很多工具可以用来维护gettext格式,比较有名的有免费的PO Editor下载。这个PO Editor的好处是可以自动搜索某一目录下代码中所有的代码文件中需要翻译的字符串。PHP下如何设置POEditor,对于我们的项目,在”类目”->”设置”下

1. 选择”路径”,将基本路径(basedir)设为d:/xampp/audit/,新建路径”application”;

2. 选择”关键字”,我设置两个,一个是zf默认的translate函数关键字,一个是setlabel用于form的翻译;

3. 还有很关键的一点,修改配置抓取phtml中的关键字:文件->首选->解析器->选择php后->编辑,将扩展名改为:”*.php;*.phtml”,将解析器命令改为:”xgettext –force-po -o %o %C %K %F -L php”;

4. 现在开始可以自动搜索代码中的翻译文件了。

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)