【问题标题】:Multilingual C++ program多语言 C++ 程序
【发布时间】:2022-01-06 16:45:58
【问题描述】:

如何向 C++ 程序添加多语言支持?我想让用户在打开应用程序时在 2 种语言之间进行选择。没有任何外部库的最简单方法是什么?

【问题讨论】:

  • 实际上,C++ 程序上的 i18n 是一项艰巨的工作。可能需要外部库才能做到这一点,我们不在这里推荐任何东西。
  • C++ 标准没有提供该问题的答案。无需使用任何外部库,您就可以编写自己的本地化工具集。
  • 在 Windows 上你可以使用资源字符串 -> stackoverflow.com/questions/6276284/…
  • 如果您使用的是 Linux/Mac,这可能会有所帮助 -> stackoverflow.com/questions/11789615/…
  • 您可以创建一个字典,其中键是表示单词的枚举,然后值可以是包含该语言和该语言的实际字符串的结构。示例:(伪代码)字典:- WORD1_ENUM => structure[LANGUAGE1_ENUM, WORD_IN_LANGUAGE1], structure[LANGUAGE2_ENUM, WORD_IN_LANGUAGE2]

标签: c++ graphics internationalization project


【解决方案1】:

回复我的评论, “您可以制作一个字典,其中键是表示单词的枚举,然后值可以是包含该语言和该语言的实际字符串的结构数组。示例:(伪代码)字典:- WORD1_ENUM => structure[LANGUAGE1_ENUM , WORD_IN_LANGUAGE1], 结构[LANGUAGE2_ENUM, WORD_IN_LANGUAGE2]", 您可以制作一个字典,根据所选语言检索您的世界。

#include <initializer_list>
#include <string>
#include <vector>
#include <iostream>


enum STRINGS
{
    HELLO_WORLD,
    GOODBYE_WORLD
};

#define SELECTED_LANGUAGE SLOVENIAN
#define NOT_FOUND_STR  "Not Found"
enum LANGUAGE
{
    ENGLISH,
    SLOVENIAN
};


struct DICTIONARY_VAL
{
    LANGUAGE lang;
    std::string text;
};

struct DICTIONARY_BLOCK_t{
    STRINGS key;
    std::vector<DICTIONARY_VAL> values;
};


class DICTIONARY_t
{
private:
    std::vector<DICTIONARY_BLOCK_t> data;
public:
    DICTIONARY_t (std::initializer_list<DICTIONARY_BLOCK_t> var)
    {
        for (DICTIONARY_BLOCK_t val : var)
        {
            data.push_back(val);
        }
    }

    std::string get_value(STRINGS key, LANGUAGE lang)
    {
        std::string l_ret = NOT_FOUND_STR;
        for (uint32_t i = 0; i < data.size() ; i++)
        {
            if (data[i].key == key)
            {
                for (uint32_t j = 0; j < data[i].values.size(); j++)
                {
                    if (data[i].values[j].lang == lang)
                    {
                        l_ret = data[i].values[j].text;
                        break;
                    }
                }
                break;
            }
        }
        return l_ret;
    }

};

DICTIONARY_t dict = 
{
    {HELLO_WORLD,   { {ENGLISH, "Hello World"},   {SLOVENIAN, "Zivjo svet"     }  }},
    {GOODBYE_WORLD, { {ENGLISH, "Goodbye World"}, {SLOVENIAN, "Nasvidenje svet"}  }}
};



int main()
{
    LANGUAGE selected_language;
    std::cout << "Select your lanugage\n0.) ENGLISH\n1.) Slovenian" << std::endl;
    int tmp;
    std::cin >> tmp;
    selected_language = (LANGUAGE) tmp;

    
    std::cout << dict.get_value(HELLO_WORLD, selected_language) << std::endl;


    return 0;
}

【讨论】:

  • 这是我从事过的许多嵌入式系统中使用的一种方法。我正在使用的当前系统有超过 30 个短语和超过 15 种语言需要支持。
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多