Chr*_*isB 4 vb6 excel vba localization
在标题为VB6中的优化字符串处理 - 第 I部分的文章“在 .res 文件中存储字符串”小节下,作者讨论了将字符串存储在 .res 文件中,与字符串的 2 个字节相比,每个字符只需要 1 个字节VB6中的文字。
这篇文章是关于 VB6 的,但我正在研究它在 VBA(基于 VB6)中的应用。
你不能 -无论如何不能直接。在 VB6 中,.res 文件是您可以添加到项目中的各种组件类型之一,但在 VBA 中,精简的 IDE 没有资源编辑器功能(不确定它的实际名称,已经有一段时间了..),毫无疑问是现代 Visual Studio 中 .resx 设计器的直接祖先。
从技术上讲,您可以在 VBA 项目中使用 .res 文件,但是您也可以使用更现代的 .resx 格式,从技术上讲,MSXML应该能够使用这种格式......尽管,即使在 .NET 中,我们通常也不会操作.resx 文件,并且有一个代码生成器涉及将每个资源键转换为生成的类的属性 - 这就是这样:
<data name="SelectAll_Button" xml:space="preserve">
<value>Select All</value>
</data>
Run Code Online (Sandbox Code Playgroud)
...自动变成这样:
/// <summary>
/// Looks up a localized string similar to Select All.
/// </summary>
public static string SelectAll_Button {
get {
return ResourceManager.GetString("SelectAll_Button", resourceCulture);
}
}
Run Code Online (Sandbox Code Playgroud)
从一开始就为您的资源字符串使用 .res/.resx 文件的优势,即使您的应用程序“只需要 en-US 字符串”,也主要是关注点分离:资源字符串不是代码,它们是数据,而数据不属于代码。
现在,在 VBA-land 中,分发带有 .resx 文件的 Excel 工作簿是……嗯。.res/.resx 只是一种数据格式,重要的是它解决的问题:资源键的存储。在 Excel 中托管的 VBA-land 中,这很容易成为一些隐藏工作表上的表格。
然后ResourceManager可以是一个 VBA 类,其职责是进入该隐藏表(可能将内容缓存到某个字典中以避免重复访问工作表)并获取给定区域性键的给定字符串(“en-US”,“ fr-CA”、“de-DE”等),尽管LCID代码可能使事情更容易在 COM域中集成(例如,使用此类 ID 的本机/Win32 API)。
想象一下,您正在构建一个复杂的内部应用程序,并从一开始就这样做:您将可显示的字符串内容与代码分开,然后以这种方式构建所有内容。有一天,公司在西班牙收购了一家公司,或者在德国开设了办事处,突然间您的应用程序需要翻译。
因为本地化一直是一个问题,你所要做的就是翻译资源字符串,噗!,应用程序知道隐藏表中有一个新列,因此有一种新语言可供选择,一切都“正常工作”,生活很棒。您可以取消隐藏工作表并按原样连同说明一起发送。
如果本地化是事后的想法……我真诚的同情……这不会很有趣。#BTDT