【发布时间】:2009-09-14 01:36:01
【问题描述】:
我想本地化我已经编写的程序。它相当大(几乎 50k 行),理想情况下,我想要一个允许我(程序员)做尽可能少的工作的系统,并且不需要对程序 - 如果可能的话,根本没有。
我查看了 gettext() 并非常喜欢它,但我不清楚它如何翻译诸如此类的字符串:
const char *Colors[] = {
{ "Red" },
{ "Blue" },
{ "Yellow" },
....
};
这在我的程序中非常很常见。这里用 gettext("Red") 替换 "Red" 显然是行不通的。
所以我想我会做类似的事情,OutputFunction(gettext(Colors[Id])),但是我怎样才能获得要本地化的字符串列表呢?我怀疑任何程序都足够聪明,能够从本地化列表中静态地获取“红色”、“蓝色”、“黄色”。
由于它基本上是一个服务器,因此无需重新编译就无需更改语言(我可以为每种支持的语言编译它而没有任何重大问题或烦恼),我想到了 C++0x 的 constexpr,它是完美的!它可以在数组/等中工作,我很容易在编译时获得一个要本地化的字符串列表。太糟糕了,还没有编译器实现它。
将所有字符串更改为 ID 不是一种选择,因为这需要我做大量工作,尤其是为每个新字符串创建一个新 ID 会非常烦人。这同样适用于将上述所有数组转换为其他数组。
那么,有什么想法吗? :/
【问题讨论】:
-
并不是说这对您有帮助,但顺便说一句,即使
constexpr可用,我怀疑它会对您有所帮助。constexpr仅在函数本身可以在编译时评估时才有效,因此如果您修改的gettext是基于打开和读取本地化文件,那么您将无法使其成为constexpr无论如何(因为打开 &无法在编译时读取文件)。鉴于大多数此类系统都是以这种方式为基础的,我怀疑constexpr是否真的会有那么大的帮助。
标签: c++ localization gettext