向C++程序添加多语言支持的最佳方法是什么?
如果可能,应从纯文本文件中读取该语言,该文本文件中包含键/值对(§WelcomeMessage§“Hello%s!”)之类的内容。
我想到的是像添加一个localizedString(key)函数之类的函数,该函数返回已加载的语言文件的字符串。有更好或更有效的方法吗?
//half-pseudo code
//somewhere load the language key value pairs into langfile[]
string localizedString(key)
{
//do something else here with the string like parsing placeholders
return langfile[key];
}
cout << localizedString(§WelcomeMessage§);
最佳答案
没有外部库的最简单方法:
//strings.h
enum
{
LANG_EN_EN,
LANG_EN_AU
};
enum
{
STRING_HELLO,
STRING_DO_SOMETHING,
STRING_GOODBYE
};
//strings.c
char* en_gb[] = {"Well, Hello","Please do something","Goodbye"};
char* en_au[] = {"Morning, Cobber","do somin'","See Ya"};
char** languages[MAX_LANGUAGES] = {en_gb,en_au};
这会给你你想要的。显然,您可以从文件中读取字符串。 IE。
//en_au.lang
STRING_HELLO,"Morning, CObber"
STRING_DO_SOMETHING,"do somin'"
STRING_GOODBYE,"See Ya"
但是您将需要一个字符串名称列表以与字符串标题匹配。 IE。
//parse_strings.c
struct PARSE_STRINGS
{
char* string_name;
int string_id;
}
PARSE_STRINGS[] = {{"STRING_HELLO",STRING_HELLO},
{"STRING_DO_SOMETHING",STRING_DO_SOMETHING},
{"STRING_GOODBYE",STRING_GOODBYE}};
上面的代码在C++中应该稍微容易一些,因为您可以使用枚举类的toString()方法(或者使用它的任何形式-都可以查找它)。
然后,您要做的就是解析语言文件。
我希望这有帮助。
PS:并访问字符串:
languages[current_language][STRING_HELLO]
PPS:对C++ C答案的一半表示歉意。
关于C++,多语言/本地化支持,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5432793/