2010-01-25 163 views
1

我开始改变我的应用程序,它使用的错误,GUI等我考虑这两种方法都硬编码字符串,但让我知道是否有更好的方法:本地化最佳实践

- 将所有字符串放在源文件(.rc)文件中。

- 定义文件中的所有字符串,每种语言一次。使用预处理器定义来决定编译哪些字符串。

这两种方法中的哪一种通常是首选的?

回答

6

将所有的字符串放在资源文件中。一旦你完成了,有几个很好的翻译软件包可用。这些软件包所做的一件有用的事情是允许您通过不编程的人完成翻译。

还要记住,国际化(i18n)是一个很大的课题,需要考虑很多事情。这不仅仅是翻译字符串的问题。做一个网络搜索,至少。你可能想读一本书:我使用国际编程为Windows施密特作为指导。这是微软出版社出版的一本旧书,我必须通过旧书服务才能获得它;大多数更现代的东西似乎是在国际化.NET应用程序。不知道更多关于你的项目(什么样的软件,谁是目标受众,你有什么样的组织,什么样的预算,为什么你有兴趣国际化等),这是关于大部分我都可以告诉你。

+1

+1不仅仅是文本:图像需要文化上正确,表单可能需要重新设计,货币/日期格式需要由代码正确处理等。另外,不要连接字符串 - 使用String.Format,以便翻译人员可以在输出中的正确位置插入变量值。另外:尽可能避免国际化的需要(例如,不要在通用图像可能适用于全球范围的图标上使用“停止”一词) – 2010-01-25 22:43:27

+0

并且不要忘记从右向左的语言 - 从右向左阅读时需要反转一些图像,特别是当它们与文本内联时 – 2010-01-26 02:46:54

0

通常您会看到特定于语言环境的资源文件,其中包含由键引用的字符串。针对不同的语言环境编译不同版本是一个非常严格的解决方案,将成为维护的噩梦。使用资源文件还允许用户拥有备用语言环境。

0

还有另一种方法就是将字符串放入源代码中,并使用诸如tr(“”)之类的字符,并使用其中一个工具将它们除去并转换它们。

它适用于任何工具包/ GUI库。
您可以标记要转换的文本和文本不可更改(如协议字符串或数据库键)。
它使源代码更易于阅读和搜索,而不必查找IDS_MESSAGE34的含义。

资源文件的一个问题,至少在Windows/MFC中是,你不能在对话框中使用字符串表。所以你在stringtabel中有一些文本,而在对话框部分有一些你必须分别进行说明。