是否有本地化语言设置的最佳方法?假设情况是您已经有一个可用的应用程序,例如法语,并希望将其完全本地化为英语。
那么有什么方法可以轻松本地化应用程序,同时尽量减少对应用程序代码的影响,我的意思是代码本身不能有任何重大更改,但添加一些就足够了。我听说在 VB6 中使用资源文件,但它的字体似乎有问题,特别是在日文字符中,它特别在标签上抛出了一个垃圾字符。现在,在不对应用程序代码进行太多更改的情况下更改应用程序字符集的最佳方法是什么。
这个应用程序有一个遗留代码,我必须处理它。
是否有本地化语言设置的最佳方法?假设情况是您已经有一个可用的应用程序,例如法语,并希望将其完全本地化为英语。
那么有什么方法可以轻松本地化应用程序,同时尽量减少对应用程序代码的影响,我的意思是代码本身不能有任何重大更改,但添加一些就足够了。我听说在 VB6 中使用资源文件,但它的字体似乎有问题,特别是在日文字符中,它特别在标签上抛出了一个垃圾字符。现在,在不对应用程序代码进行太多更改的情况下更改应用程序字符集的最佳方法是什么。
这个应用程序有一个遗留代码,我必须处理它。
我使用资源文件,并用 ID 替换(几乎)代码库和 UI 中的每个字符串。每当我显示一个字符串时,我都会调用一个函数,该函数接受一个类似字符串{#1234}
并加载字符串 ID 1234(使用LoadString()
并返回它。对于 UI,我枚举表单上的每个控件并将可见字符串传递给同一个函数。
这意味着在每个表单Localise Me
的事件中以及每当我动态设置/显示某些内容时都会调用一次。Load
TranslateString("{#1234}", "name", Name)
有关字体,请参见Visual Basic Programmer's Guide 中的此示例。作为Localise
方法的一部分,我在每个控件上调用它。
不要忘记不同的字体和语言对相同的文本占用不同的垂直空间。表单布局也需要调整以考虑到这一点,或者动态重排(将控件对齐到最长的标签,向下移动以允许更长的全宽文本等)
关于问题的“同时尽量减少对应用程序代码的影响”部分,我建议将与资源查找相关的功能封装到它自己的一个类中,公开获取字符串的方法(通过传递文化说明符参数)。
然后大部分工作是将您的代码从可能是硬编码的字符串转换为方法调用以检索适当的字符串。实现这个答案的一个变体:在 VB6 中实现 String.Format()如果您还封装“文化”的概念并在此方法的签名中引入一些文化信息参数(可能称为它) ,可以大大简化您的生活。StringFormat
StringFormatLocal
关键是,如果当前的应用程序没有本地化,它可能不关心本地化;本地化它意味着引入一个新的问题,因此为了尽可能少地影响遗留代码,您需要在整个代码库中寻找并销毁“魔术字符串”和“魔术格式”(如果您的 UI 已硬编码设计时标题和图像,也删除它们),用对本地化 API 的调用替换它们 - 保持本地化问题分开。
我想在这里看到另一个答案,其中包含有关存储、加载和特别是使用非 ANSI 字符串资源的更多详细信息......