【发布时间】:2012-04-08 20:35:34
【问题描述】:
我希望我的 C# (winforms) 应用程序是多语言的。我的想法是:
- 我会将我的翻译保存在一些文本文件中,每个“句子”或短语都有唯一的 ID(整数)
- 在应用程序启动时,我将遍历应用程序中所有表单上的所有控件(我想这应该在每个表单的 'Load' 事件处理程序中完成)并且我将测试对其类型的控制
- 即如果它是一个按钮或菜单项,我将读取它的默认 'Text' 属性,在一个文本文件中找到这个短语,读取它的唯一 ID,然后通过这个 ID 将翻译的短语定位在(其他)文本文件
- 然后我将用翻译后的短语覆盖控件的 'Text' 属性
这使我能够拥有单独的文本文件,其中包含每种语言的短语(将来易于维护单独的翻译 - 只有 1 个 txt 文件)
- 如果有更好/更简单/更快/更“专业”的方法来实现这一点,我想听听您的意见 - 专业人士。
- 我应该使用什么格式的翻译文本文件(纯文本、XML、ini....) - 它应该是人类可读的。我不知道在 C# 中查找 XML 中的短语是否比在纯文本文件中逐行搜索给定的短语/字符串...?
- 编辑 - 我希望用户(社区)能够将我的应用程序翻译成他们的母语,而无需我的交互(这意味着微软的资源已被淘汰)
非常感谢您。
已关闭 - 我的解决方案: 看起来我停留在我原来的概念 - 每个短语都将在纯文本文件的单独行中 - Unicode编码(以及行开头的ID)。我也在考虑删除 ID 并只使用行号,但它需要高级文本编辑器(记事本不显示行号),如果有人不小心点击了“删除行”的快捷方式并且没有注意到,整个应用程序会发疯:)
//sample of my translation text file for one language
0001:Text of my first button
0002:Text of my first label
0003:MessageBox title text
...etc etc
【问题讨论】:
-
请注意,您可能还需要根据语言调整标签和按钮的位置,因为与原始文本相比,某些翻译可能会非常长。 (标准的翻译方法已经满足了)
-
是的,我知道。但出于我的目的,可以不时打开应用程序,切换到每种语言并检查外观。我只有几个表格。如果某些内容太长,我将编辑视觉对象并重新编译。这对我来说比每次有人向我发送新短语时都重新编译要少。但无论如何,谢谢 - 非常好!
标签: c# winforms forms multilingual