这是一个普遍的问题,对意见持开放态度.我一直在努力想出一个很好的方法来设计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对象并进行格式化等.
无论如何,我认为添加我现在的内容以供参考是有用的.