运行功能时
stop("m<0", domain=NA)
Run Code Online (Sandbox Code Playgroud)
domain 的默认设置是NULL,但是当您将其设置为 时会发生什么NA?我试图将域更改为此,但它似乎没有做任何不同的事情。报告的错误消息是相同的。
在 R 中,消息被划分为多个域,并且翻译可用于域中的部分或全部消息。您可以通过修改变量来切换语言域LANG:
> Sys.setenv(LANG = "fr")
> 2 + x
Erreur : objet 'x' introuvable
> Sys.setenv(LANG = "en")
> 2 + x
Error: object 'x' not found
Run Code Online (Sandbox Code Playgroud)
> Sys.setenv(LANG = "de")
>
> if((length(nopkgs) > 0) && !missing(lib.loc)) {
+ pkglist <- paste(sQuote(nopkgs), collapse = ", ")
+ msg <- sprintf(ngettext(length(nopkgs),
+ "library %s contains no packages",
+ "libraries %s contain no packages",
+ domain = "R-base"),
+ pkglist)
+ warning(msg)
+ }
Fehler: Objekt 'nopkgs' nicht gefunden
>
Run Code Online (Sandbox Code Playgroud)
...重新启动 R 会话
> Sys.setenv(LANG = "en")
> if((length(nopkgs) > 0) && !missing(lib.loc)) {
+ pkglist <- paste(sQuote(nopkgs), collapse = ", ")
+ msg <- sprintf(ngettext(length(nopkgs),
+ "library %s contains no packages",
+ "libraries %s contain no packages",
+ domain = "R-base"),
+ pkglist)
+ warning(msg)
+ }
Error: object 'nopkgs' not found
>
Run Code Online (Sandbox Code Playgroud)
R 使用以下域。
以这种方式划分消息允许 R 可扩展:加载包时,也可以加载它们的消息翻译目录。
根据当前指定的语言,尽可能具体地按域查找翻译,因此,例如,对于奥地利用户,将优先使用奥地利语 (de_AT) 翻译目录,而不是通用德语 (de)。但是,如果特定翻译目录存在但不包含翻译,则将查阅不太具体的目录。例如,R 具有 en_GB 目录,可将标准消息中的美国用语(例如gray)翻译成英语。
通常可以通过即时重新编码来使用正确语言但错误字符集的翻译。LANGUAGE 变量可以是以冒号分隔的列表,例如 se:de,以优先顺序降序给出一组语言。
如果找不到合适的翻译目录或所选目录中未翻译特定消息,则使用英语。翻译后的目录存储为扩展名为 .mo 的二进制文件。域 R 和 RGui 的目录位于 R_HOME/share/locale 下,特定于包的目录位于已安装包的 po 目录下(因此需要位于源代码中的 inst/po 下)。这些目录包含由语言标识的每种翻译的一个目录,例如se 或de_AT。每个语言目录都有一个子目录 LC_MESSAGES,其中包含每个域的文件。因此 R 安装至少包含文件
share/locale/en/LC_MESSAGES/R.mo
share/locale/en@quot/LC_MESSAGES/R.mo
library/splines/po/en/LC_MESSAGES/R-splines.mo
library/splines/po/en/LC_MESSAGES/splines.mo
Run Code Online (Sandbox Code Playgroud)
(“语言”en@quot 是带有 Unicode 双向引号的英语,用于 UTF-8 语言环境。)
参考: https: //developer.r-project.org/Translations30.html