在我的应用程序(可能还有许多其他应用程序)中,我想使用本地化。但是,我不知道管理几乎相等字符串的最佳方法是什么。
一些问题:
- 当按钮“编辑”用作菜单名称时,菜单项名称应该创建两个资源字符串(具有相等的值“编辑”)还是只有 1 个?
- 当屏幕上有一个编辑按钮并且我想使用 Alt 键时,字符串需要是“_Edit”,我应该为此创建一个单独的资源字符串吗?
- 如果还有一个显示新页面的按钮,因此(对于我的约定),值应该是“_Edit ...”怎么办?
在我的应用程序(可能还有许多其他应用程序)中,我想使用本地化。但是,我不知道管理几乎相等字符串的最佳方法是什么。
一些问题:
是的,您应该制作单独的资源字符串。您正在使用单词编辑来用英语描述您的应用程序中的不同操作。然而,在另一种语言中,这些动作可能用不同的词来描述(一个可能是“编辑”,另一个可能是“改变”)。因此,您需要能够为菜单和按钮分配不同的字符串。
这不是一个快速回答主题(本地化),但我会尝试至少回答您的问题:
1)是的,即使不是强制性的,最好将每个文本分开。如果您要更改其中一个,则不会冒险更改两者(并且可能由于上下文不同,它们必须用不同的语言翻译)。
2) 绝对是的。想象一下你有这些字符串:_Edit
和_Mark as read
. 例如,在意大利语中,它们将被翻译为_Modifica
and Segna come già letto
。对于两个字符串,您不能为同一个字母添加使用“_”,这是翻译人员应该注意的问题。
3)我建议不。至于 1) 尝试将不同的字符串分开(出于我之前所说的相同原因)。如果您想节省翻译费用(谁不想要?),您可以编写一个程序来预解析字符串以生成“标准化”输出以提供给翻译人员(如果可能,它将删除重复项并合并相似的字符串)。但是你应该让你的程序不知道细节。
To summarize: no, don't try to merge (similar) strings inside your program. If you really need it then it'll be done with an external program (it can even take into account strings from different modules so it'll do a better job) and only when applicable (for case 3 it's possible, for case 1 and 2 absolutely not).
1)你应该支持抽象和解耦:你有两个概念:一个类别“编辑”和一个动作“编辑”,所以有两个单独的字符串是有意义的,因为在英语之外的其他语言中“编辑/编辑”不能作为可接受的。
2)这里你只有一个概念,有两种不同的格式,所以只有一个字符串和一个转换规则(“_”+ myString)有意义。
3)这取决于:这个按钮触发的动作是否与上面的概念完全相同:如果是则使用相同的字符串,如果不是则使用两个。
所有这些都是一般性考虑,您当然应该根据自己的需要进行调整:
如果您确实必须预先支持 n 种语言,请遵循这些指南,它们应该在本地化过程中自然出现
如果您预计在未来的某个地方您可能需要支持除英语之外的另一种语言,并且您现在有很多相同的字符串,那么您可能不会花太多时间尝试完美地做事情,因为有很多机会会一劳永逸,可以花时间更好地增强或添加核心功能。