2015-02-08 102 views
1

我有三個這個問題在增加難度的變化。所有問題都假定gettext提示正在尋找單個字母的回覆。我目前正在用perl編寫,但在C中的答案是可以接受的,因爲我已經可以編寫XS模塊。您可以假定沒有輸入法問題,並且區域設置變量設置正確。如何國際化輸入?

  1. 所以,讓我們說,我有一個程序,要求gettext("are you sure you want to do that (Yes/No)?"),它已被翻譯成西班牙語(... (Si/No)?"),法語,valspeak(... (No problemo/Stop right there)?"我怎麼能知道我是從輸入接收信件表示是還是沒有?

  2. 讓我們假設我們有一個問題顯示菜單像gettext("Which install procedure do you want?")與像gettext("(N)ovice")選項,gettext("(I)ntermediate")gettext("(E)xpert")gettext("(A)utomated")。英語我會接受[niea]。我怎麼接受,如果用戶說俄語?或中文?或斯瓦希里語?

  3. 我的實際項目涉及將啓動菜單從一般格式轉換爲適用於多個引導加載程序的格式。鑑於對於每個菜單條目,我都有一組鍵值對(菜單文本,熱鍵和其他動作),我看到了三種用我不會說的語言生成菜單的可能方法。

    1. (簡單)翻譯整個菜單。優點是文件很簡單,動作和相關鍵可以忽略,無需執行。缺點是沒有翻譯工具可以幫助解決這個問題,語言可能會失去同步。
    2. (medium)添加語言特定的鍵值,如menu_fr,hotkey_fr,menu_ch ...優點是它很容易實現,一切都在那裏。缺點是同步問題再次出現。
    3. (unknown)使用gettext和英文主菜單。優點包括大量的翻譯工具,建立的工作流程,菜單條目不難實現,並且由於我已經使用gettext獲取進度消息,因此大部分實現都相當簡單。缺點是我不知道如何識別熱鍵。

什麼是最佳解決方案?

+0

自動翻譯實際上不在您可以將其用作主要機制的地步。不知道#1或#2之間存在什麼差異,或者您的意思是「同步問題」。 – ikegami 2015-02-09 02:15:21

+0

@ikegami gettext不會做機器翻譯,它允許譯員不需要使用代碼。至於同步,當有影響消息的改變時,該消息需要重新轉換。 #1比#2簡單,因爲它只關心布爾答案。 – hildred 2015-02-09 03:05:21

+0

因爲我認爲這是自動翻譯 – ikegami 2015-02-09 03:07:07

回答

0

經過多次閱讀,我相信我已經找到了答案:gettext調用的上下文變體像pgettext

echo gettext("Which install procedure do you want?"); 
echo pgettext("Which install procedure do you want?", "Novice"); 
echo pgettext("Which install procedure do you want?", "Intermediate"); 
echo pgettext("Which install procedure do you want?", "Expert"); 
echo pgettext("Which install procedure do you want?", "Automated"); 
ans=getc(); 
if(ans == pgettext("Which install procedure do you want?|Novice","N")){ 
    do novice; 
}elseif(ans == pgettext("Which install procedure do you want?|Intermediate","I")){ 
. . .