首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态gettext的poedit解决方法

动态gettext的poedit解决方法
EN

Stack Overflow用户
提问于 2009-05-16 18:36:01
回答 4查看 4K关注 0票数 7

我已经开始使用gettext来翻译我发送给用户的文本和消息。我正在使用poedit作为编辑器,但我正在努力处理动态消息。

例如,我有像登录这样的东西,其中我有一个变量来告诉错误的类型。

代码语言:javascript
复制
$this->translate('page-error-' . $error);

当我从poedit自动更新时,它读起来像"page-error-“。我所做的就是创建一个文件,在这个文件中,我使用所有可能的键对翻译方法进行虚拟调用,以便在自动更新时将它们添加到我的poedit中。

我不是特别喜欢这种情况。你们是怎么做到的。

感谢您的点子

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-17 12:17:37

不,这是不可能的,因为编辑器(和gettext工具)正在读取您的源代码,而不是执行您的程序。您必须自己保留虚拟调用或将密钥添加到转换文件中。

票数 5
EN

Stack Overflow用户

发布于 2009-05-17 11:44:11

你在尝试像这样的东西吗?

代码语言:javascript
复制
$this->translate(sprintf('page-error-%s', $error));
票数 2
EN

Stack Overflow用户

发布于 2012-06-13 16:55:52

我遇到了同样的问题。

例如,我有

在php中

代码语言:javascript
复制
//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data)); 

当我与poedit同步时,它将拾取'FORM_HEADER_‘,这不是我在代码中(生成)的标识符。

所以我必须修复我给Poedit的完整标识符的问题,我通过在php中执行以下操作解决了这个问题

代码语言:javascript
复制
echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');

更新!

我一直在研究这个问题。我现在放弃了从源码导入。这就是我如何继续下去,直到我找到一个更好的解决方案

  1. 构建应用程序并使用与未转换(动态)标识符的possible.
  2. Enable日志记录一样多的静态标识符

受保护函数_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;}

  • 使用Poedit与源同步并翻译找到的字符串。

  • 在测试/调试阶段检查日志中是否有未翻译的字符串。

  • 将未翻译的字符串添加到.po文件。

msgid "IDENTIFIER“msgstr "TRANSLATION”

  • 打开po文件并保存以创建mo文件(不与源同步,否则全部丢失)。

更新2。

通过使用文本编辑器(gedit/notepad),我现在使用一个单独的文件作为我的手动标识符。现在我有两个文件:

  1. 由名为.po
  2. 的poedit手动编辑的名为_manual.po

的文件自动生成

我在application.ini中将翻译配置为扫描语言目录中的所有文件

代码语言:javascript
复制
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文件->新目录,并开始翻译你手动添加的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/873017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档