2

我必须在 Windows Mobile 上构建一个 GUI 应用程序,并希望它能够让用户选择她想要的语言,或者应用程序自动选择语言。我考虑使用仅包含所需资源的多个 dll。

1) 在没有用户干预的情况下,让应用程序自动选择适当的资源语言的首选(默认?)方法是什么?有样品吗?

2) 我有哪些选项可以让用户/应用程序控制它应该显示什么语言?

3)如果可能,我如何创建一个包含多种语言资源的dll,然后动态选择语言?

4

2 回答 2

4

对于 #1,您可以使用GetSystemDefaultLangID函数来获取机器的语言标识符。

对于#2,您可以列出您支持的语言,当用户选择一种语言时,将选择写入文本文件或注册表(Windows Mobile 上是否有注册表?)。启动时,仅当文件或注册表中没有选择时才使用#1 中的功能。

对于#3,我们这样做的方式是为每种语言设置一个资源 DLL,每个 DLL 都包含相同的资源 ID。确定语言后,加载该语言的 DLL,其余的就可以了。

于 2009-01-29T02:46:22.903 回答
3

回复 1:之前的 GetSystemDefuaultLangID 建议是一个很好的建议。

Re 2:您可以在安装的第一步中询问。或者您可以为每种语言打包不同的安装程序。

Re 3: 理论上,上面提到的 DLL 方法听起来不错,但实际上它对我个人来说并不是很好。

更好的方法是使用以下任一方法包围程序中的所有字符串:Localize 或 NoLocalize。

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

Localize 只是一个将您的英文文本转换为所选语言的功能。NoLocalize 什么都不做。

不过,您希望用这些值包围您的字符串,因为您可以用您选择的脚本语言构建几个有用的脚本。

1) 搜索所有 Localize(" 前缀并输出具有 english=otherlangauge 名称值对的 .ini 文件的脚本。如果输出 .ini 文件已经包含映射,则无需再次添加。您永远不会重新创建ini 文件,您的脚本只是在每次运行脚本时添加缺少的文件。

2) 一个搜索所有字符串并确保它们被 Localize(" 或 NoLocalize(" 包围) 的脚本。如果不是,它会告诉您哪些字符串仍然需要本地化。

原因 #2 很重要,因为您需要确保所有字符串实际上都被有意识地标记为是否需要本地化。否则绝对不可能确保您有正确的本地化。

#1 而不是从 DLL 加载的原因是因为维护此解决方案不需要任何工作,并且您可以添加需要即时翻译的新字符串。

您运送随程序输出的 ini 文件。您还可以将这些 ini 文件提供给您的翻译人员,以便他们可以转换english=otherlanguage 对。当他们将其发回给您时,您只需将您签入的 .ini 文件替换为您的翻译提供的文件。如在#1 中提到的那样运行您的脚本将重新添加任何缺失的翻译(如果在翻译时完成了任何翻译)。

于 2009-01-29T03:29:11.740 回答