问题标签 [xgettext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4806 浏览

internationalization - 如何迭代地使用 xgettext 更新 .po 文件进行翻译

我正在考虑使用xgettext来帮助翻译大型代码库,我有两个问题:

  • 如果我每种语言都有一个 .po 文件,是否有一种简单的方法可以使用代码库的单个 xgettext 扫描来更新它们,或者我必须为每种语言运行一次 xgettext?
  • 如果我使用poedit将目标语言添加到 .po 文件头,xgettext 似乎会用默认头文件覆盖它。我怎样才能阻止这个?

也许我使用了错误的工具,在这种情况下,欢迎提出建议。我想要的是能够扫描代码并使用任何新字符串更新 .po 文件,但保持任何标题信息不变。

编辑:我知道 poedit 可以扫描代码,但我希望找到一个命令行应用程序来执行扫描以更轻松地自动化该过程。

0 投票
1 回答
1025 浏览

python - 将复数形式生成为 .pot 文件

我正在对 python 程序进行国际化,但无法将复数形式放入 .pot 文件中。我已经用 _pl() 标记了需要复数翻译的字符串,例如。

self.write_info(_pl("%(num)d track checked", "%(num)d tracks checked", song_obj.song_count) % {"num" : song_obj.song_count})

然后我正在运行: xgettext --language=Python --keyword=_pl --output=output.pot *.py pot 文件中只生成第一个(单数)字符串。

0 投票
2 回答
1565 浏览

javascript - 基于 Poedit 正则表达式的解析器?

在我们的 JS 文件中,我们使用以下格式进行 Gettext 翻译:

此 JS 文件将使用 PHP 进行解析,解析后的字符串将通过 Zend Framework Zend_Translate 进行翻译。生成的 JS 如下所示:

为了提取要翻译的字符串和翻译我们使用 Poedit 的 PHP 文件,它工作得非常好。
有没有办法'!t[...]'使用 Poedit 解析要翻译的字符串?

解决这个问题的是某种基于正则表达式的 Poedit 解析器。有没有这样的解析器?

作为替代方案,我们可以定义一个基于 xgettext 的源代码解析器,使用语言 PHP 作为参数(您必须这样做,因为 xgettext 不知道 .js 文件,它会将它们视为 C 文件)。然后我们在我们的 JS 文件中使用以下格式:

不用说,为了能够用 Poedit 解析字符串而到处使用看起来像 php 的代码真的很不酷。

0 投票
2 回答
232 浏览

language-agnostic - 在哪里翻译消息字符串 - 在视图中还是在模型中?

我们有一个多语言 (PHP) 应用程序,并为 i18n 使用 gettext。后端/模型中有一些类为 printf() 返回消息或消息格式。

我们使用 xgettext 来提取我们想要翻译的字符串。

我们在前端/视图中应用 gettext 函数 T_() - 这似乎是它所属的地方。到目前为止,我们从 T_() 调用中保持后端清洁,这样我们也可以对消息进行单元测试。

所以在前端我们有类似的东西

或者

这使得无法应用 xgettext 来提取字符串,除非我们在 MyModel 类中放置一些虚拟 T_("my message %s to translate") 调用。

所以这导致了一个更普遍的问题:

你在后端类中应用翻译吗?你在哪里应用翻译,你如何跟踪你必须翻译的字符串?

(我知道Question: poedit workaround for dynamic gettext。)

0 投票
1 回答
2448 浏览

python - “django-admin.py makemessages”或 xgettext 调用中的错误?->“警告:未终止的字符串”

在包装非常长的字符串的情况下,django-admin.py makemessages因错误“警告:未终止的字符串”而死:

这些字符串甚至不需要翻译——例如 sql 查询字符串。当我连接字符串时问题就消失了,但结果看起来很丑陋,加入它们需要时间......

有没有人有这样的问题?你找到解决方法了吗?

我有以下版本的工具:

xgettext-0.17、gettext-0.17、django-1.0.2、python-2.6.2

有一个关于这个问题的,但它被关闭可能是因为错误只出现在某些组件版本的组合中。

编辑:找到问题的根源- xgettext 向 sterr 打印警告消息,django 将它们视为致命错误并退出。

xgettext 调用的返回状态为 0 - “成功”。我想 django 应该将其识别为成功,而不是因为警告而退出。

有趣的是,如果需要翻译,xgettext 仍然会提取反斜杠换行的字符串,但会在 stderr(“未终止的字符串”)和 .po 文件(“国际化消息不应包含 `\r' 转义序列”)中给出警告

xgettext 调用如下:

从 django/core/management/commands/makemessages.py 调用

0 投票
2 回答
1628 浏览

xml - XSLT 的 I18n(或者 XSLT 的 C++ 的 gettext() 和 xgettext 是什么)?

完整的 C++ i18n gettext() “hello world”示例显示了使用 gettext() 在 C++ 程序中处理消息的标准方法。消息目录存储在可移植对象文件中,该文件基于使用 xgettext、msginit 和 msgfmt 直接从 C++ 源代码创建的可移植对象模板文件。XSLT 处理消息的对应方法是什么?

具体来说,要使 C++ hello-world 代码支持 i18n,只需添加两个包含,调用一些设置函数并将字符串包装在对 gettext() 的调用中:

然后从源程序中提取英文文本并转换为可移植对象模板,供翻译人员使用,这些翻译人员使用实用程序创建机器对象消息目录文件供运行时程序使用:xgettext、msginit 和 msgfmt。最后,当调用程序时,会显示用于将运行时语言识别为西班牙语的 Linux shell 命令。

编写一个 hello-world 程序的主要目的是连接所有系统部分,以获得一个几乎无用的示例来运行。因此,正如 C++ 示例在 Linux 环境中针对 C++ 显示的那样,我正在寻找相同的东西,但要寻找 XSLT。

  1. 在 C++ 示例中,有一组链接到 hellogt 的包含文件和目标文件。是否有提供 setlocale、bindtextdomain 和 textdomain 功能的 XSLT 代码?代码如何连接到用户的运行时语言?
  2. 是否有 XSLT 代码通过像 gettext() 这样的消息目录文件提供从英文文本的运行时转换?
  3. 是否有用于从源 XML 文件中提取英语文本以供翻译人员使用的实用程序以及将结果转换为运行时可用的消息目录文件(如 xgettext、msginit 和 msgfmt)的程序?
  4. 如何指定用户运行时语言的标识?

例如,我有一个 Javascript 应用程序Emle,它使用 XSLT 将 XML 处理为 HTML。消息在特定于应用程序的特定语言 XML 文件集合中定义。它们是使用特定于应用程序的 XSLT 代码提取的。尽管这与 #2 相关,但该方法似乎并不适合利用LaunchPad提供的翻译服务。Emle XSLT 文件使用的Emle 英语消息文件示例

0 投票
1 回答
264 浏览

c++ - 使用 xgettextt 和 --extract-all 处理复数

使用--extract-allwithxgettext不适用于复数。使用带有复数的 I18n C++ hello world的答案作为 C++ 代码,这里有两个使用xgettext.

没有--extract-all按预期工作的一个,包括对复数的处理:

--extract-all添加到命令行时,生成的 POT 文件不会。相反,有单独的条目:

直接传递给gettext()类似函数的字符串文字可以正确处理复数消息,如第一个使用xgettext.

对于不直接传递给gettext()类似函数之一的字符串文字,可以使用--extract-allwith选项xgettext在 POT 文件中生成条目。

如何处理不直接传递给gettext()源中类似函数的字符串文字,其中还包含多个字符串文字,这些字符串文字直接传递给gettext()类似函数以产生复数条目:msgid_pluralmsgstr[]

0 投票
4 回答
8433 浏览

php - xgettext 与 gettext

我有几个问题:

我知道gettext是什么。我读过一些他们提到 xgettext 的帖子,并对两者之间的区别感到好奇。

如何在 Windows 上安装 xgettext?

最后,有没有人有关于如何安装库 php-gettext http://savannah.nongnu.org/projects/php-gettext/的教程(这个通常不附带 PHP)我读过它在一篇文章中,但我不确定如何让它在 Windows 中运行。问题是,有时当您进行更改时,您需要重新启动 Apache 以查看带有 PHP 附带的 gettext 的新数据(但使用库您不需要重新启动它)所以我想使用该库进行开发. 谢谢!

0 投票
1 回答
348 浏览

gettext - 在使用 GNU Autotools 的项目中,是否有启动 xgettext 的任务?

概括 :

我有一个使用 GNU Autotools 的项目。我有一个锅文件。我需要更新它。有没有为我运行 xgettext 的神奇“制作”任务(我很懒?)

详细版本:

你好

我正在尝试使用 GNU autotools 和 gettext 设置一个项目。

我正在尝试遵循“懒惰”的路径(即只编写 configure.ac、Makefile.am 等,并让工具尽可能为我生成其余部分)。

我在我的包上使用了一次 gettextize,所以我创建了一个 package.pot 文件,并派生了一个 fr.po 文件(我正在尝试翻译法语)。

我从来没有设法翻译我的代码,但我发现这可能是因为代码不在正确的位置。翻译后的字符串在 lib 而不是 main 中,文档很不清楚在这种情况下我必须做什么。如果我的 main 调用了 lib 中的函数,并且 lib 中的函数正在使用 _()。在这种情况下我应该使用 dgettext 的 gettext 吗?我的库只是为了组织目的而在这里,所以我可以使用相同的域(整个应用程序只有一个 package.pot 文件)。

所以,为了尝试一些更简单的事情,我把我的字符串移到了 main (目前它实际上只是一个 hello world)。所以我需要更新 package.pot 文件,至少,要意识到字符串位置发生了变化,需要吗?在这种情况下,我会手动使用 xgettext(痛苦地将所有有趣的 cpp 文件的列表传递给它,当我有多个文件时,这将是一件很痛苦的事情),还是在某个地方有一个“做任何事情”任务我能跑 ?

这可能看起来很愚蠢,但我一直无法找到它。

此外,欢迎任何有关查找我的代码未翻译原因的帮助任何不在http://www.gnu.org/software/gettext/FAQ.html#integrating_noop中的内容)都是受欢迎的!

谢谢

酸碱度

0 投票
5 回答
7103 浏览

php - 递归xgettext?

如何.po使用带有 PHP 文件的 xgettext 以递归方式编译文件?

我的 PHP 文件存在于层次结构中,直接xgettext命令似乎没有递归挖掘。