我如何国际化输入?

时间:2015-02-08 22:50:21

标签: perl translation gettext

我在这个问题上有三种变化,难度越来越大。所有问题都假设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")和{{1}等选项}。用英语我会接受gettext("(A)utomated")。如果用户说俄语,我会接受什么?还是中国人?还是斯瓦希里语?

  3. 我的实际项目涉及将引导菜单从一般格式转换为适用于多个引导加载程序的格式。鉴于对于每个菜单条目,我有一组键值对(菜单文本,热键和其他操作),我看到了三种可能的方式,用我不会说的语言生成菜单。

    1. (简单)翻译整个菜单。优点是文件简单,动作和相关键可以忽略,无需实现。缺点是没有翻译工具可以帮助解决这个问题,语言可能会失去同步。
    2. (medium)添加特定于语言的键值,如menu_fr,hotkey_fr,menu_ch ...优点是它易于实现,一切都在那里。缺点是再次出现同步问题。
    3. (未知)将gettext与主菜单一起使用英文。优点包括大量的翻译工具,已建立的工作流程,菜单条目并不难实现,而且由于我已经使用gettext进行进度消息,因此大多数实现都非常简单。缺点是我不知道如何识别热键。
  4. 什么是最佳解决方案?

1 个答案:

答案 0 :(得分: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") ){
. . .