提问人:Pekka 提问时间:11/20/2010 最后编辑:Arnaud MeuretPekka 更新时间:8/9/2013 访问量:2006
为什么人们使用简单的英语作为翻译占位符?
Why do people use plain english as translation placeholders?
问:
这可能是一个愚蠢的问题,但这里是。
我见过几个项目使用一些翻译库(例如 gettext)使用简单的英语占位符。例如:
_("Please enter your name");
而不是抽象的占位符(这一直是我的本能偏好)
_("error_please_enter_name");
我已经看到关于 SO 使用前一种方法的各种建议,但我不明白为什么。我不明白的是,如果你需要改变英文措辞,你会怎么做?因为如果将实际文本用作所有现有翻译的键,您也必须编辑所有翻译,并更改每个键。或者不是吗?
这不是很麻烦吗?为什么这是行业标准?
这样做绝对不是正确的规范化。这种方法有我没有看到的巨大优势吗?
答:
有趣的问题。我认为主要原因是您在开发过程中不必关心翻译或本地化文件,因为主要语言在代码本身中。
评论
- 主要语言已经存在:您不需要翻译它。
- 与模糊的占位符相比,译者对真实句子的上下文更好。
- 占位符只是键,仍然可以通过为其创建翻译来更改原始语言。因为当翻译不存在时,它使用占位符作为翻译文本。
评论
是的,您必须更改现有的翻译文件,这是一件好事。
如果更改英文措辞,翻译可能也需要更改。即使他们不这样做,您也需要会说另一种语言的人来检查。
您准备一个新版本,QA 流程的一部分是检查翻译。如果英文措辞发生了变化,没有人检查翻译,它就会像拇指酸痛一样突出,并且会得到修复。
评论
msgid
.PO
嗯,这可能只是它更容易阅读,更容易翻译。我认为你的方式最适合可扩展性,但它确实需要额外的努力,一些开发人员可能认为不值得......对于某些项目来说,情况可能并非如此。
我喜欢你的第二种方法。在翻译文本时,您总是会遇到同音异义词的问题。就像“打开”一样,可以表示窗口的状态,也可以表示执行动作的动词。在其他语言中,这些同音异义词可能不存在。这就是为什么您应该能够为占位符添加含义的原因。最好的方法是将此含义放在文本库中。如果这在您使用的框架平台上是不可能的,那么定义“开发语言”可能是个好主意。这种语言将为文本条目添加含义,例如:“action_open”和“state_open”。当然,您将不得不付出额外的努力,我将这种语言翻译成简单的英语(或您开发的语言)。我已经将这一理念融入了一些大型项目中,从长远来看,这节省了一些时间(和麻烦)。
在我看来,最好的方法是将含义分开,因此,如果您开发自己的翻译库或您使用的翻译库支持它,则可以执行以下操作:
_(i18n("Please enter your name", "error_please_enter_name"));
哪里:
i18n(text, meaning)
评论
gettext
有一个回退层次结构,从最具体的区域设置到源代码中的未本地化版本。
因此,法国的法语可能有以下回退路线:
- fr_FR
- 法国
- 未本地化。源代码。
因此,在源代码中拥有适当的英语句子可以确保如果步骤 (1) 或 (2) 中没有提供特定的翻译,您至少会得到一个正确可理解的句子,而不是像“error_file_not_found”这样的随机程序员垃圾。
另外,如果它是一个格式字符串:“对不起,但%s不存在”,你会怎么做?更糟糕的是:“将 %s 个条目写入 %s,总大小:%d”?
评论
我们使用抽象占位符已经有一段时间了,在创建新函数时必须将所有内容写入两次非常烦人。当英语是占位符时,你只需用英语编写代码,你从一开始就有有意义的输出,而不必考虑命名占位符。
因此,我的理由是减少开发人员的工作量。
评论
这是一个很古老的问题,但我还没有在答案中看到另一个原因:
您最终可能会得到不必要的占位符,从而为翻译人员带来更多的工作量,并可能造成不一致的翻译。但是,像 Poedit 或 Gtranslator 这样的优秀编辑器可能会对此有所帮助。
坚持你的榜样: 文本“请输入您的姓名”可能会出现在不同模板的不同上下文中(开发人员很可能不知道,也不需要)。例如,它不能用作错误,而是用作提示,例如输入字段的占位符。
如果您使用
_("Please enter your name");
它是可重用的,开发人员可能不知道错误消息的现有密钥,而只是直观地使用相同的文本。
但是,如果您使用
_("error_please_enter_name");
在以前的模板中,开发人员不一定会意识到这一点,并且会组成第二个密钥(很可能是根据预定义的措辞方案,以免最终陷入完全混乱),例如
_("prompt_please_enter_name");
然后必须再次翻译。
所以我认为这不能很好地扩展。预先商定的后缀/前缀措辞方案,例如上下文,我认为永远不可能像文本本身那样精确(要么太冗长,要么太笼统,事先你不知道,之后很难改变)并且对于开发人员来说是更多的工作,恕我直言,这不值得。
有人同意/不同意吗?
评论