我已经开始使用gettext来翻译我发送给用户的文本和消息。我正在使用poedit作为编辑器,但我正在努力处理动态消息。
例如,我有像登录这样的东西,其中我有一个变量来告诉错误的类型。
$this->translate('page-error-' . $error);当我从poedit自动更新时,它读起来像"page-error-“。我所做的就是创建一个文件,在这个文件中,我使用所有可能的键对翻译方法进行虚拟调用,以便在自动更新时将它们添加到我的poedit中。
我不是特别喜欢这种情况。你们是怎么做到的。
感谢您的点子
发布于 2009-05-17 12:17:37
不,这是不可能的,因为编辑器(和gettext工具)正在读取您的源代码,而不是执行您的程序。您必须自己保留虚拟调用或将密钥添加到转换文件中。
发布于 2009-05-17 11:44:11
你在尝试像这样的东西吗?
$this->translate(sprintf('page-error-%s', $error));发布于 2012-06-13 16:55:52
我遇到了同样的问题。
例如,我有
在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');更新!
我一直在研究这个问题。我现在放弃了从源码导入。这就是我如何继续下去,直到我找到一个更好的解决方案
受保护函数_initMyTranslate(){ $date = new Zend_Date();$fileName =$fileName(‘/../logs/translation_%1$s.log’,$date->toString('dd-MM'));$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH .$fileName);$log =新的Zend_Log($writer);//从ini文件中获取翻译资源并启动$resource = $this->getPluginResource(' translate ');$translate = $ resource ->getTranslate();//将日志添加到翻译$ translate ->setOptions( $writer( ' log‘=> $log,'logUntranslated’=> true ) );//返回翻译将其放入注册表,依此类推返回$translate;}
msgid "IDENTIFIER“msgstr "TRANSLATION”
更新2。
通过使用文本编辑器(gedit/notepad),我现在使用一个单独的文件作为我的手动标识符。现在我有两个文件:
的文件自动生成
我在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中翻译成另一种语言,从POT文件->新目录,并开始翻译你手动添加的字符串。
https://stackoverflow.com/questions/873017
复制相似问题