2016-12-29 74 views
2

我注意到在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(),兩個字符串被翻譯:

app

但如果是我,無論是通過打開文件,並單擊RStudio的運行應用程序按鈕或致電shiny::runApp("inst/app")直接運行應用程序,只有明確要求域名的消息被翻譯:

enter image description here

我可能誤解了gettext的幫助,但如果有人能夠澄清這一點,我會很高興。

是否gettext考慮頂級試圖匹配域時的調用函數?因爲在這種情況下,當調用app()時,所有消息都會被翻譯,而在調用shiny::runApp()時,只有那些具有顯式域的會被翻譯(因爲對於隱式域,gettext會在的名稱空間中查找.po文件包)。 但我想它會尋找實際調用gettext函數的域。

+0

在這兩種情況下,你有警告: 'LC_MESSAGES存在於Windows中,但不可操作','OS報告將區域設置設置爲「fr_FR.utf8」的請求無法兌現' – HubertL

+0

哦,我忘了提及我在Ubuntu上發佈帖子,會編輯它。 – Tutuchan

回答

1

看起來像gettext確實在頂級函數的名稱空間中看起來確實沒有指定域時的翻譯文件。

我創建了another package,其中包含翻譯文件並從我的gettext包中調用該應用程序。當gettextpo::app()被稱爲(它調用gettext::app()內部,翻譯時域是隱含在gettextpo包的命名空間被發現,而不是gettext的

enter image description here

相關問題