当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R xgettext 从包中的 R 文件中提取可翻译消息


R语言 xgettext 位于 tools 包(package)。

说明

对于“中的每个文件R的目录(包括系统特定的子目录)资源包,提取传递给这些“message generating”调用的唯一参数;

对于xgettext()

stopwarningmessagepackageStartupMessagegettextgettextf

对于xngettext()

ngettext

xgettext2pot() 调用 xgettext() 然后调用 xngettext()

用法

xgettext(dir, verbose = FALSE, asCall = TRUE)

xngettext(dir, verbose = FALSE)

xgettext2pot(dir, potFile, name = "R", version, bugs)

参数

dir

源码包的目录,即带有‘./R’子目录。

verbose

逻辑:每个文件在处理时是否应该列出?

asCall

逻辑:如果TRUE每个参数都转换为字符串并返回整个,否则每个参数中的字符串文字将被提取(递归)。请参阅示例。

potFile

的名字po要生成的模板文件。默认为‘R-软件包名称。锅' 在哪里软件包名称是‘的基本名称目录’。

name , version , bugs

正如模板文件中记录的那样:version默认当前运行的版本号R, 和bugs"bugs.r-project.org".

细节

前导和尾随空白(空格、制表符和换行符(又名换行符,即“⁠\n⁠’)) 对于通过以下方式提取的所有调用均被删除xgettext(),请参阅上面的“说明”,因为它是通过内部代码传递字符串进行翻译的。

我们查看是否使用 domain = NA 调用了匹配的函数。如果是这样,当 asCall 为 true 时,整个调用将被省略。请注意,调用可能包含对 gettext (或 warning 等)的嵌套调用,如果 asCall 为 false,则其字符串将可见。

xgettext2pot 依次调用 xgettextxngettext ,并写入 PO 模板文件(写入 potFile )以与 GNU Gettext 工具一起使用。这确保了简单翻译的字符串在文件中是唯一的(如 GNU Gettext 所要求的),但对于 ngettext 调用则不然(Gettext 手册中没有说明规则,但 msgfmt 会抱怨如果存在是集合之间的重复。)。

如果应用到base包,这也会出现在‘.R' 文件在'base Rhome/分享/R’。

对于 xgettext ,类 "xgettext" 的对象列表(具有 print 方法),每个包含潜在可翻译字符串的源文件一个。

对于 xngettext ,类 "xngettext" 的对象列表,它们本身就是长度为 2 的字符向量列表。

例子

## Not run: ## in a source-directory build (not typical!) of R;
## otherwise, download and unpack the R sources, and replace
## R.home()  by  "<my_path_to_source_R>" :
xgettext(file.path(R.home(), "src", "library", "splines"))

## End(Not run)

## Create source package-like  <tmp>/R/foo.R  and get text from it:
tmpPkg <- tempdir()
tmpRDir <- file.path(tmpPkg, "R")
dir.create(tmpRDir, showWarnings = FALSE)
fnChar <- paste(sep = "\n",
  "foo <- function(x) {",
  "  if (x < -1)  stop('too small')",
  "  # messages unduplicated (not so for ngettext)",
  "  if (x < -.5) stop('too small')",
  "  if (x < 0) {",
  "    warning(",
  "      'sqrt(x) is', sqrt(as.complex(x)),",
  "      ', which may be too small'",
  "    )",
  "  }",
  "  # calls with domain=NA are skipped",
  "  if (x == 0) cat(gettext('x is 0!\n', domain=NA))",
  "  # gettext strings may be ignored due to 'outer' domain=NA",
  "  if (x > 10) warning('x is ', gettextf('%.2f', x), domain=NA)",
  "  # using a custom condition class",
  "  if (x == 42)",
  "    stop(errorCondition(gettext('needs Deep Thought'), class='myError'))",
  "  x",
  "}")

writeLines(fnChar, con = file.path(tmpRDir, "foo.R"))

## [[1]] : suppressing (tmpfile) name to make example Rdiff-able
xgettext(tmpPkg, asCall=TRUE )[[1]] # default; shows calls
xgettext(tmpPkg, asCall=FALSE)[[1]] # doesn't ; but then ' %.2f '

unlink(tmpRDir, recursive=TRUE)

也可以看看

update_pkg_po() 调用 xgettext2pot()

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Extract Translatable Messages from R Files in a Package。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。