这是一个笼统的问题,欢迎发表意见。我一直在尝试想出一种好方法来设计用于 Windows MFC 应用程序和相关实用程序的字符串资源本地化。我的愿望清单是:
- 必须在代码中保留字符串文字(而不是用宏 #define 资源 ID 替换),以便消息仍然可以内联读取
- 必须允许本地化字符串资源(duh)
- 不得施加额外的运行时环境限制(例如:对 .NET 的依赖等)
- 对现有代码的干扰应该最小(修改越少越好)
- 应该是可调试的
- 应生成可用常用工具编辑的资源文件(即:常用格式)
- 不应使用复制/粘贴注释块来保留代码中的文字字符串或任何其他可能导致去同步的内容
- 允许静态(编译时)检查每个“注释”字符串是否在资源文件中会很好
- 允许跨语言资源字符串池会很好(适用于各种语言的组件,例如:本机 C++ 和 .NET)
除了静态检查之外,我有一种方法可以在某种程度上满足我的所有愿望,但我不得不开发一些自定义代码来实现它(并且它有局限性)。我想知道是否有人以特别好的方式解决了这个问题。
编辑:我目前拥有的解决方案如下所示:
ShowMessage( RESTRING( _T("Some string") ) );
ShowMessage( RESTRING( _T("Some string with variable %1"), sNonTranslatedStringVariable ) );
然后,我有一个自定义实用程序来解析“RESTRING”块中的字符串并将它们放入一个 .resx 文件中以进行本地化,并使用一个单独的 C# COM 对象从本地化资源文件中加载它们并返回。如果 C# 对象不可用(或无法加载),我会回退到代码中的字符串。该宏扩展为一个模板类,该类调用 COM 对象并进行格式化等。
无论如何,我认为添加我现在的参考资料会很有用。