【发布时间】:2009-07-09 05:25:39
【问题描述】:
Complete C++ i18n gettext() “hello world” example 展示了使用 gettext() 在 C++ 程序中处理消息的标准方法。消息目录存储在可移植对象文件中,该文件基于使用 xgettext、msginit 和 msgfmt 直接从 C++ 源代码创建的可移植对象模板文件。 XSLT处理消息的对应方法是什么?
具体来说,要使 C++ hello-world 代码支持 i18n,只需添加两个包含,调用一些设置函数并将字符串包装在对 gettext() 的调用中:
#include <libintl.h>
#include <locale.h>
..
setlocale(LC_ALL, "");
bindtextdomain("hellogt", ".");
textdomain( "hellogt");
std::cout << gettext("hello, world!") << std::endl;
...
然后从源程序中提取英文文本并转换为可移植对象模板供翻译人员使用,这些翻译人员使用实用程序创建机器对象消息目录文件供运行时程序使用:xgettext、msginit 和 msgfmt。 最后,在调用程序时,会显示用于将运行时语言识别为西班牙语的 Linux shell 命令。
编写一个 hello-world 程序的主要目的是连接所有系统部分,以使一个几乎无用的示例运行。因此,正如 Linux 环境中的 C++ 示例所示,我正在寻找相同的东西,但要寻找 XSLT。
- 在 C++ 示例中,有一组链接到 hellogt 的包含文件和目标文件。是否有提供 setlocale、bindtextdomain 和 textdomain 功能的 XSLT 代码?代码如何连接到用户的运行时语言?
- 是否有 XSLT 代码通过像 gettext() 这样的消息目录文件提供从英文文本的运行时转换?
- 是否有实用程序用于从源 XML 文件中提取英语文本以供翻译人员使用,以及将结果转换为运行时可用的消息目录文件(如 xgettext、msginit 和 msgfmt)的程序吗?
- 如何指定用户运行时语言的标识?
例如,我有一个 Javascript 应用程序 Emle,它使用 XSLT 将 XML 处理为 HTML。消息在特定于应用程序的特定语言 XML 文件集合中定义。它们是使用特定于应用程序的 XSLT 代码提取的。尽管这与 #2 相关,但该方法似乎并不适合利用 LaunchPad 提供的翻译服务。 Emle XSLT file使用的示例Emle English message file
【问题讨论】:
-
您是否正在寻找一种通用方法来将诸如 misc-all-fireFoxOnly 之类的给定消息从源文件映射到相应目标 HTML 文件的所有实例中目标,仅使用 XSLT?因此,您从一个恰好包含 misc-all-fireFoxOnly 的文件开始,最后得到一个使用 misc-all-fireFoxOnly 的 HTML 文件,而无需实际从源映射到目标 - 我的理解对吗?跨度>
-
我正在寻找 XSLT 代码以添加到我的代码中以及用于处理消息的支持实用程序。我在问题中添加了更多细节。
标签: xml xslt internationalization gettext xgettext