【发布时间】:2015-04-08 15:13:09
【问题描述】:
我有这个问题的三个变体,难度越来越大。所有问题都假定 gettext 提示寻找单个字母响应。我目前正在用 perl 编写,但是 C 中的答案是可以接受的,因为我有并且可以编写 XS 模块。您可以假设没有输入法问题,并且语言环境变量设置正确。
所以,假设我有一个程序询问
gettext("are you sure you want to do that (Yes/No)?"),它已被翻译成西班牙语 (... (Si/No)?")、法语和 valspeak (... (No problemo/Stop right there)?"从输入接收是或否?假设我们正在显示一个菜单,其中包含
gettext("Which install procedure do you want?")之类的问题以及gettext("(N)ovice")、gettext("(I)ntermediate")、gettext("(E)xpert")和gettext("(A)utomated")等选项。用英语我会接受[niea]。如果用户说俄语,我应该接受什么?还是中国人?还是斯瓦希里语?-
我的实际项目涉及将引导菜单从一般格式转换为可与多个引导加载程序一起使用的格式。鉴于对于每个菜单条目,我都有一组键值对(菜单文本、热键和操作等),我看到了三种可能的以我不会说的语言生成菜单的方法。
- (简单)翻译整个菜单。优点是文件简单,动作和相关键可以忽略,不需要实现。缺点是没有翻译工具可以帮助解决这个问题,并且语言可能会不同步。
- (中)添加特定语言的键值,例如 menu_fr、hotkey_fr、menu_ch... 优点是它易于实现并且一切都在那里。缺点还是会出现同步问题。
- (未知)在英语主菜单中使用 gettext。优点包括大量的翻译工具、已建立的工作流程、菜单条目不难实现,并且由于我已经使用 gettext 来获取进度消息,因此大多数实现都相当简单。缺点是我不知道如何识别热键。
什么是最好的解决方案?
【问题讨论】:
-
自动翻译确实不是您可以将其用作主要机制的地步。不知道 #1 或 #2 之间存在什么差异,或者您所说的“同步问题”是什么意思。
-
@ikegami gettext 不进行机器翻译,它允许翻译人员无需处理代码。至于同步,当发生影响消息的更改时,需要重新翻译该消息。 #1 比 #2 更简单,因为它只关心布尔答案。
-
我从不理解 #1 和 #2 到不理解 #3,因为我认为那是自动翻译
-
实际上没有办法完全自动化您正在尝试做的事情。一种粗略的方法是要求您的翻译人员使用某种格式,然后您可以对其进行解析以检查答案。例如:“继续 [y/N] ?”可能变成“继续 [\\1y/\\0N] ?”并且您必须知道 \\1 之后的字母是 yes 而 \\0 之后的字母是 no 来解析字符串。是的,我同意这很丑陋,需要翻译人员的一些合作,但没有太多选择。此外,使用多字节语言时必须小心。
标签: perl translation gettext