1

完整的 C++ i18n gettext() “hello world”示例显示了使用 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 程序的主要目的是连接所有系统部分,以获得一个几乎无用的示例来运行。因此,正如 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 英语消息文件示例

4

2 回答 2

1

如果可以接受非 XML 工具,那么这个 Perl 工具会生成 XML 数据文件及其翻译的一组 gettext PO 文件并保持同步。

http://po4a.alioth.debian.org/man/man3pm/Locale::Po4a::Xml.3pm.php

于 2009-12-30T20:45:46.573 回答
0

经过一番查看,我发现了这个:http: //xmlguru.cz/2006/10/saxon-gettext 我还没有完全阅读它以查看它是否以及如何回答您的问题,但我提供了链接,希望它有所帮助。

于 2012-06-06T22:39:55.017 回答