我要建立在Windows Mobile GUI应用程序,并希望它能够给用户选择自己想要的语言,或应用程序自动选择语言。我考虑使用仅包含所需的资源多个DLL。

1)什么是首选(默认?)的方式来获得应用程序会自动选择合适的语言资源,而无需用户干预?任何样品?

2)什么是我的选择,允许它应该显示哪些语言用户/应用控制?

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

有帮助吗?

解决方案

有关#1,可以使用 GetSystemDefaultLangID 函数来得到的机器语言标识符

有关#2,你可以列出你支持的语言和当用户选择一个,写选择到一个文本文件或注册表(有没有在Windows Mobile注册表?)。在启动时,使用在#1中的功能仅当存在该文件或注册表中没有选择。

有关#3,我们做事的方式是让每一个语言资源DLL,每一个都包含相同的资源ID。一旦你找出的语言,加载DLL该语言,其余只是工作。

其他提示

<强>重新1:先前GetSystemDefuaultLangID建议是一个很好的

回复2::您可以要求在安装的第一步。或者,你可以为每种语言包不同的安装程序。

<强>重新3: 在理论上面提到的DLL方法听起来不错,但在实践中它并没有在所有对我个人工作得很好。

一个较好的方法是用任一包围在程序中的所有字符串的:本地化或NoLocalize。

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

本地化只是你的英语文本转换成选定语言的功能。 NoLocalize什么也不做。

您想使用这些值,但因为你可以建立几个有用的脚本在您选择的脚本语言包围你的字符串。

1),对于所有的本地化搜索(”前缀并输出一个.ini文件与英文= otherlangauge名称值对的脚本。如果输出.ini文件中已经包含了映射你不重新添加。你永远不重新创建完全ini文件,脚本只是增加了缺少的每次运行脚本的时间。

2),搜索所有的字符串,使脚本确保他们要么通过本地化(“或NoLocalize(”包围。如果没有它会告诉你哪些字符串你仍然需要本地化。

原因#2,重要的是,因为你需要确保所有的字符串实际上是有意识地标记为需要本地化或没有。否则是绝对不可能的,以确保你有适当的定位。

这是一个DLL的理由#1,而不是装载是因为它没有工作,以维持这种解决方案,您可以添加需要在飞行中被翻译新的字符串。

您发货是否与您的程序输出的.ini文件。您也给这些INI文件到您的翻译,使他们能够转换成英语= otherlanguage对。当他们发回给你,你只需更换您的.ini文件中检查与您的翻译给出的一个。如果有的话,而译者是翻译做了运行脚本在#1提到会重新添加任何缺少的翻译。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top