这是一个普遍的问题,对于意见开放。我一直在想出一种设计Windows MFC应用程序和相关实用程序的字符串资源本地化的好方法。我的心愿是:设计字符串本地化的最佳方法
- 必须在代码中保存字符串(而不是与宏的#define资源ID的替换),以使这些信息仍然可读的内联
- 必须允许本地化的字符串资源(杜)
- 不得强加额外的运行时环境的限制(例如:依赖于.NET等)
- 应该有最小的obtrusion到现有的代码(改动较小越好)
- 应该是调试的
- 应该生成可由常用工具编辑的资源文件(例如:通用格式)
- 不应该使用复制/粘贴注释块来保留代码中的文字字符串或其他任何可能导致不同步的文件
- 会很高兴允许静态(编译时)检查每个“注释”字符串是否在资源文件中
- 允许跨语言资源字符串池(适用于各种语言的组件,例如:native C++和.NET)
我有一种方式,除了静态检查,在一定程度上满足我所有的愿望,但我有h广告来开发一些自定义代码来实现它(并且它有局限性)。我想知道是否有人以特别好的方式解决了这个问题。
编辑: 的解决方案,我目前有看起来像这样:
ShowMessage(RESTRING(_T("Some string")));
ShowMessage(RESTRING(_T("Some string with variable %1"), sNonTranslatedStringVariable));
然后我有一个自定义工具从“RESTRING”块中解析出字符串,把它们放到一个.resx文件本地化以及一个单独的C#COM对象,以便从具有后备功能的本地化资源文件加载它们。如果C#对象不可用(或无法加载),我将回退到代码中的字符串。宏展开为一个模板类,它调用COM对象并进行格式化等。
无论如何,我认为添加我现在可以参考的内容会很有用。
你有没有想办法做到这一点,而不用代码中的资源ID替换字符串?你所描述的听起来像口语方法,这当然可以工作,但并不真正在寻找什么。 – Nick 2008-10-08 23:19:19
不,我们不会将字符串硬编码到我们的应用程序中。我们所看到的是一个与资源ID相关的描述性常量。 – BoltBait 2008-10-08 23:26:16