10

是否可以使用 gettext 之类的东西来翻译 R 脚本。如果是这样,怎么做?如果没有,我还有什么其他选择?

4

1 回答 1

12

您可以使用 base::gettext/ngettext、base::bindtextdomain 和 tools::xgettext2pot 函数。
例如:

myFunction <- function()
{  
  bindtextdomain("R-myProgram","/my/translation/dir")
  gettext("Hello",domain="R-myProgram")
}

然后,假设这个函数在一个路径为“/my/dir/R/myfile.R”的文件中,使用:tools::xgettext2pot("/my/dir", "/my/translation/dir/pot/R-myProgram.pot")然后使用msginit、msgfmt等创建一个.mo文件/my/translation/dir/fr/LC_MESSAGES/R-myProgram.mo。如果您的语言环境是法语,myFunction() 现在应该打印“Bonjour”而不是“Hello”。

其他几点:

  • 似乎 xgettext2pot 假定您的项目是标准 R 包,并且仅在 R/ 子目录中查找 *.R 文件。
  • 默认情况下,该domain参数似乎是调用 gettext() 的函数的命名空间
  • xgettext2pot 也检测到 stop()、message()、warning() 和 packupStartupMessage()。还有一个 gettextf() 函数可用作 gettext() 的类似 sprintf 的变体。
  • 由于标准的 xgettext 实用程序似乎不支持 R 语法,并且由于必须使用 tools::xgettext2pot,因此标准方法会遗漏一些东西,例如消息上下文 (pgettext())、指示 printf- 的标志像字符串一样,并且可以为翻译器编写代码内注释(由 xgettext -c 提取),而无需手动修改 .pot 文件。
于 2012-07-22T22:32:57.200 回答