如何在C#/ WPF中管理看起来相似的本地化字符串?

时间:2012-12-15 14:28:58

标签: c# wpf string localization

在我的应用程序中(可能在很多其他应用程序中)我想使用本地化。 但是,我不知道管理几乎相同的字符串的最佳方法是什么。

有些问题:

  1. 当按钮'编辑'用作菜单名称时,菜单项名称应该是两个资源字符串(等值“编辑”)还是只有1?
  2. 当屏幕上有一个编辑按钮并且我想使用Alt键时,字符串必须是“_Edit”,我应该为此创建一个单独的资源字符串吗?
  3. 如果还有一个显示新页面的按钮,那么(对于我的约定),该值应该是“_Edit ...”?

3 个答案:

答案 0 :(得分:3)

是的,你应该制作单独的资源字符串。您正在使用单词edit来用英语描述应用程序中的不同操作。但是,在另一种语言中,这些动作可能用不同的词来形容(一个可能是“编辑”而另一个可能是“改变”)。 因此,您需要为菜单和按钮指定不同的字符串。

答案 1 :(得分:3)

这不是一个快速回答主题(本地化),但我会尽量回答你的问题:

1)是的,即使不是强制性的,最好将每个文本分开。如果你改变其中一个,你就不会有改变它们的风险(也许在不同的语言中,由于它们的背景,它们必须被翻译成不同的东西)。

2)绝对是的。想象一下,你有这些字符串:_Edit_Mark as read。例如,在意大利语中,它们将被翻译为_ModificaSegna come già letto。对于这两个字符串,您不能为同一个字母添加“_”,这是翻译人员应该注意的问题。

3)我建议不。至于1)尝试保持不同的字符串分开(出于我之前说过的相同的原因)。如果你想节省翻译费用(谁不想要?)你可以编写一个程序来预解析字符串以产生一个“规范化”的输出来提供给翻译者(如果可能的话,它会删除重复数据并合并相似的字符串) )。但是你应该让你的程序不知道细节。

总结:不,不要尝试在程序中合并(类似)字符串。如果你真的需要它,那么它将完成一个外部程序(它甚至可以考虑来自不同模块的字符串,这样它会做得更好)并且仅在适用时(对于案例3,它可以用于案例1和绝对没有。)

答案 2 :(得分:2)

1)您应该支持抽象脱钩:您有两个概念类别“版本”还有一个动作“编辑”,所以有两个单独的字符串是有道理的,因为在其他语言中,“编辑/编辑”不能被接受。

2)这里你只有一个概念有两种不同的格式,所以只有一个字符串和一个转换规则(“_”+ myString)才有意义。

3)这取决于:此按钮触发的动作与上面的动作完全相同:如果是,则使用相同的字符串,如果不使用两个。

所有这些都是一般考虑因素,您当然应该根据自己的需要进行调整:

  • 如果你真的必须提前支持n种语言,那么请遵循这些指南,它们应该在本地化过程中自然出现

  • 如果您预计将来某个地方 >现在你可能不会花费太多时间来完美地完成任务,因为它有很多机会一无所有,时间可以用来更好地增强或增加核心功能。< / p>