【问题标题】:Localization in Visual Basic 6Visual Basic 6 中的本地化
【发布时间】:2016-04-01 17:18:53
【问题描述】:

是否有本地化语言设置的最佳方法?假设情况是您已经有一个可用的应用程序,例如法语,并希望将其完全本地化为英语。

那么有什么方法可以轻松本地化应用程序,同时最大限度地减少对应用程序代码的影响,我的意思是代码本身不能有任何重大更改,但添加一些就足够了。我听说在 VB6 中使用资源文件,但它的字体似乎有问题,特别是在日文字符中,它特别在标签上抛出了一个垃圾字符。现在,在不对应用程序代码进行太多更改的情况下更改应用程序字符集的最佳方法是什么。

这个应用程序有一个遗留代码,我必须处理它。

【问题讨论】:

  • 有可能。当您使用支持多种语言的第三方应用程序时,您希望确保 Excel 根据每个人的语言设置工作,而不是搞砸它。你能再澄清一点吗?您要更改 Excel 工作表和表格还是要更改 VB6 表格?
  • 你的意思是vb6,还是VBA?他们不是同一个环境......
  • ops 抱歉,它应该是 vb6 而不是 vba 我的错。
  • 您是否尝试过使用 unicode 字符串。 VB6 运行时支持 unicode 字符。注意:VB6 IDE 不支持 unicode。
  • 你看过这个SO question答案引用了迈克尔卡普兰的书,这是一个令人费解的主题中更好的参考资料之一

标签: unicode localization vb6


【解决方案1】:

我使用资源文件,并且(几乎)用 ID 替换了代码库和 UI 中的每个字符串。 每当我显示一个字符串时,我都会调用一个函数,该函数接受一个像 {#1234} 这样的字符串并加载字符串 ID 1234(使用 LoadString() 并返回它。 对于 UI,我枚举窗体上的每个控件并将可见字符串传递给同一个函数。

这意味着在每个表单的 Load 事件中对 Localise Me 进行一次调用,并在我动态设置/显示某些内容时调用 TranslateString("{#1234}", "name", Name)

有关字体,请参阅 Visual Basic 程序员指南中的 this example。我在每个控件上调用它作为Localise 方法的一部分。

不要忘记,不同的字体和语言对相同的文本占用不同的垂直空间。表单布局也需要调整以考虑到这一点,或者动态重排(将控件对齐到最长的标签,向下移动以允许更长的全宽文本等)

【讨论】:

  • @Deanna - 您是否自动化了替换代码库中字符串的过程?如果有,怎么做?
  • @pingu 不,抱歉。这是一个非常手动的过程,包括添加代码以调整每个对话框的布局以考虑其他语言规则。不要忘记,不同语言的相同文本可能具有非常不同的物理长度。
【解决方案2】:

关于问题的“同时尽量减少对应用程序代码的影响”部分,我建议将与资源查找相关的功能封装到它自己的一个类中,公开获取字符串的方法(通过传递文化说明符论据)。

然后,大部分工作是将您的代码从可能是硬编码的字符串转换为方法调用以检索适当的字符串。实现此答案的变体:Implementing String.Format() in VB6,如果您还封装“文化”的概念并在此StringFormat 中引入一些 cultureInfo 参数,可以大大简化您的生活方法的签名(也许叫它StringFormatLocal)。

关键是,如果当前应用没有本地化,它可能不关心本地化;将其本地化意味着引入一个新的关注,因此为了尽可能少地影响遗留代码,您需要在整个代码库中寻找并销毁“魔术字符串”和“魔术格式”(以及如果您的 UI 有硬编码的设计时标题和图像,请同时删除它们),用对本地化 API 的调用替换它们 - 保持本地化关注点分开。

我想在这里看到另一个答案,其中包含有关存储、加载和特别是使用非 ANSI 字符串资源的更多详细信息...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多