使用gettext翻译R脚本

时间:2012-05-26 09:20:37

标签: r localization internationalization gettext

是否可以使用类似gettext的内容来翻译R脚本。如果是这样,怎么样?如果没有,我还有其他选择吗?

1 个答案:

答案 0 :(得分:11)

您可以使用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文件{{ 1}}。如果您的语言环境是法语,myFunction()现在应该打印“Bonjour”而不是“Hello”。

其他几点:

  • 似乎xgettext2pot假设您的项目是标准R包,并且只查看R /子目录中的* .R文件。
  • /my/translation/dir/fr/LC_MESSAGES/R-myProgram.mo参数默认情况下是调用gettext()
  • 的函数的名称空间 xgettext2pot也检测到
  • stop(),message(),warning()和packupStartupMessage()。还有一个gettextf()函数可用作gettext()的类似sprintf的变体。
  • 由于标准xgettext实用程序似乎不支持R语法,并且由于必须使用tools :: xgettext2pot,因此标准方法会遗漏一些事情,例如消息上下文(pgettext()),标志指示类似printf的字符串以及为翻译者编写代码内注释的可能性(由xgettext -c提取)而无需手动修改.pot文件。