向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/

10-11 22:54
查看更多