當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。