我遇到了同样的问题。
例如我有
在php中
//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data));
当我与 poedit 同步时,它会选择“FORM_HEADER_”,这不是我在代码中(生成)的标识符。
所以我必须解决我给 Poedit 完整标识符的问题,我通过在 php 中执行以下操作解决了这个问题
echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');
更新!
我一直在研究这个问题。我目前放弃了从源头导入。这就是我如何继续,直到我找到更好的解决方案
- 构建应用程序并使用尽可能多的静态标识符。
启用未翻译(动态)标识符的日志记录
protected function _initMyTranslate(){
$date = new Zend_Date();
$fileName = sprintf('/../logs/translation_%1$s.log', $date->toString('dd-MM'));
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $fileName);
$log = new Zend_Log($writer);
// get the translate resource from the ini file and fire it up
$resource = $this->getPluginResource('translate');
$translate = $resource->getTranslate();
// add the log to the translate
$translate->setOptions(
array(
'log' => $log,
'logUntranslated' => true
)
);
// return the translate to get it in the registry and so on
return $translate;
}
使用 Poedit 与源同步并翻译找到的字符串。
- 在测试/调试阶段检查未翻译字符串的日志。
将未翻译的字符串添加到 .po 文件中。
msgid "IDENTIFIER"
msgstr "TRANSLATION STRING"
打开 po 文件并保存以创建 mo 文件(不要与 SOURCE 同步或全部丢失)。
更新 2。
我现在使用文本编辑器(gedit/notepad)为我的手动标识符使用单独的文件。现在我有两个文件:
- 由 poedit 自动生成,名为 <language>.po
- 手动编辑的文件名为 <language>_manual.po
我在 application.ini 中配置了我的翻译以扫描语言目录中的所有文件
resources.translate.adapter = gettext
resources.translate.content = APPLICATION_PATH "/../library/languages/"
resources.translate.locale = auto ;use en to force english or nl for dutch..etc
resources.translate.scan = directory
resources.translate.options.disableNotices = false
如果您想在 poedit do file -> new catalog from POT 文件中翻译成另一种语言,然后开始翻译您手动添加的字符串。