【问题标题】:Possible to add a translation to a gettext (*.po) catalog using PHP?可以使用 PHP 将翻译添加到 gettext (*.po) 目录吗?
【发布时间】:2011-12-05 13:39:00
【问题描述】:

我正在向网站添加本地化。如果我可以简单地通过 PHP 将翻译添加到 .po 文件,这个过程可以完全自动化,但我似乎找不到允许这样做的库(例如 POEdit 的 PHP 版本)。

我一直在做的,因为 HTML 在整个过程中基本上遵循相同的格式,通过我编写的一个类来运行每个 phtml 文件(如果有区别,它们实际上是 Zend Framework 视图)以隔离原始英文文本,为其分配一个索引(page.block.1),并编写一个<?php echo _('page.block.1'); ?> 函数,同时将原始文本包装在 HTML cmets 中。然后我手动打开 POEdit,检查要翻译的新字符串,并将 phtml 文件中的注释文本剪切/粘贴到 POEdit。

这非常耗时。假设我可以使用 PHP 库添加新的翻译,我已经准备好索引和字符串,因此它不仅可以消除人为错误,而且可以在几秒钟而不是几小时内完成任务。

对于 PHP 甚至 python/perl 是否存在这样的类?我好像找不到。

【问题讨论】:

  • 它不存在。解析 .po 文件没什么大不了的。但是 gettext isn't used widely enough 对于 PHP 应用程序,所以没有人费心去写一个修改库。最好的方法仍然是通过调用 xgettext 来更新模板 .pot。
  • @mario - 谢谢,这太糟糕了,但我明白。我想也许我只是不知道该寻找什么。

标签: php gettext


【解决方案1】:

有更简单的方法,特别是如果您使用的是Zend_Translate gettext adapter

您可以像这样在 .phtml 文件中直接使用翻译功能:

<label><?php echo $this->translate('some fancy text'); ?><label>

然后使用xgettext 实用程序从您的.phtml 文件创建.po 文件。 xgettext 的调用将是这样的:

xgettext -o nameOfTheGeneratedPOFile.po --keyword=translate -L php

然后您可以使用 POEdit 翻译 .po 文件并使用msgfmt 创建 .mo 文件。

查看Zend_Translate documentation 了解有关如何使用它的更多信息。

【讨论】:

  • 尽管这不允许自动化,但它可能是我将得到的最佳答案。下次我选择为主要由静态 HTML 组成的大型网站进行本地化时,我会更好地研究我的选择。不喜欢ctrl+xctrl+v 6 小时..
  • 从这种方法中获得的最高自动化水平是创建一个脚本,它将遍历所有 .phtml 文件,创建一个新的 .po 文件并将其与现有的 .po 文件合并。跨度>
  • 没错,这就是我所做的。如果它不是基于密钥的 PO 文件(而不是英文文本作为密钥),那也不会那么糟糕。如果我们更新英文文本,我们不想破坏其他翻译,考虑到多种语言的技术翻译是多么昂贵!所以这为我提供了一个包含数千个键('section.page.head.block1')的 PO 文件,需要通过 POEdit 用英文文本填写。
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多