- 必须保留代码中的字符串字面值(而不是替换为宏 #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对象并执行格式化等操作。
总之,我认为这对参考很有用。