我注意到在Ubuntu 14.04機器上運行的Shiny應用程序中出現了gettext
的奇怪行爲。在Shiny應用程序中使用gettext
從?gettext
,我們得知:
如果域爲空或「」,和gettext的或ngettext從功能包的命名空間PKG域設置爲所謂的「R- PKG」。
但是當我開發一個使用gettext
在相關Shiny應用程序中執行國際化的程序包時,並不總是翻譯消息。
我已經開發出一種小型可重複的例子,你可以在Github發現:
devtools::install_github("tutuchan/gettext")
這是一個非常簡單的包,三個功能:
hello()
電話gettext("Hello, world!")
,隱含指定域名爲R-gettext,hello2()
調用gettext("Hello, world!", domain = "R-gettext")
,明確指定域作爲R-gettext的,app()
是一個包裝周圍shiny::runApp()
到啓動應用程序直接
封裝包括用於法語翻譯的.po文件(其要求您在系統上使用「fr_FR.UTF8」語言環境來嘗試)。
如果我打電話app()
,兩個字符串被翻譯:
但如果是我,無論是通過打開文件,並單擊RStudio的運行應用程序按鈕或致電shiny::runApp("inst/app")
直接運行應用程序,只有明確要求域名的消息被翻譯:
我可能誤解了gettext
的幫助,但如果有人能夠澄清這一點,我會很高興。
是否gettext
考慮頂級試圖匹配域時的調用函數?因爲在這種情況下,當調用app()
時,所有消息都會被翻譯,而在調用shiny::runApp()
時,只有那些具有顯式域的會被翻譯(因爲對於隱式域,gettext
會在的名稱空間中查找.po文件包)。 但我想它會尋找實際調用gettext
函數的域。
在這兩種情況下,你有警告: 'LC_MESSAGES存在於Windows中,但不可操作','OS報告將區域設置設置爲「fr_FR.utf8」的請求無法兌現' – HubertL
哦,我忘了提及我在Ubuntu上發佈帖子,會編輯它。 – Tutuchan