2012-05-26 111 views
9

是否可以使用gettext等翻譯R腳本。如果是這樣,怎麼樣?如果沒有,我還有什麼其他選擇?使用gettext翻譯R腳本

+0

你是什麼意思的「翻譯」? – Subs

+0

我的意思是我有字符串,用英文寫成。我需要以某種方式標記它們,提取到單獨的文件,將它們翻譯爲俄語。通過使用一個參數運行腳本 - 它會顯示英文消息,並與其他 - 俄文。就像gettext的工作:) – Shark

+1

看看'?gettext' – Andrie

回答

10

您可以使用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()
  • 停止()消息(),警告()和packupStartupMessage()也被xgettext2pot檢測到的命名空間。還有一個gettextf()函數可用作gettext()的類sprintf變體。
  • 由於標準的xgettext實用程序似乎不支持R語法,並且由於必須使用tools :: xgettext2pot,所以標準方法會忽略一些內容,如消息上下文(pgettext()),flags表示類似printf的字符串,並且可以在不用手修改.pot文件的情況下爲翻譯人員編寫代碼註釋(由xgettext -c提取)。
+0

如果我用'sys.getlocale(「LC_All」,「fr」)將我的語言環境設置爲法語I只是沒有得到翻譯後的'msstr'。還是全部你好。這是爲什麼? –