| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- * Languages.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- namespace Languages
- {
- enum class ELanguages
- {
- CHINESE,
- ENGLISH,
- FRENCH,
- GERMAN,
- KOREAN, // currently has no translations or detection
- POLISH,
- RUSSIAN,
- SPANISH,
- UKRAINIAN,
- // Pseudo-languages, that have no translations but can define H3 encoding to use
- OTHER_CP1250,
- OTHER_CP1251,
- OTHER_CP1252,
- COUNT
- };
- struct Options
- {
- /// string identifier (ascii, lower-case), e.g. "english"
- std::string identifier;
- /// human-readable name of language in English
- std::string nameEnglish;
- /// human-readable name of language in its own language
- std::string nameNative;
- /// encoding that is used by H3 for this language
- std::string encoding;
- /// primary IETF language tag
- std::string tagIETF;
- /// VCMI is capable of detecting H3 install in this language
- bool hasDetection = false;
- /// VCMI supports translations into this language
- bool hasTranslation = false;
- };
- inline const auto & getLanguageList()
- {
- static const std::array<Options, 12> languages
- { {
- { "chinese", "Chinese", "简体中文", "GBK", "zh", true, true }, // Note: actually Simplified Chinese
- { "english", "English", "English", "CP1252", "en", true, true },
- { "french", "French", "Français", "CP1252", "fr", true, true },
- { "german", "German", "Deutsch", "CP1252", "de", true, true },
- { "korean", "Korean", "한국어", "CP949", "ko", false, false },
- { "polish", "Polish", "Polski", "CP1250", "pl", true, true },
- { "russian", "Russian", "Русский", "CP1251", "ru", true, true },
- { "spanish", "Spanish", "Español", "CP1252", "es", false, true },
- { "ukrainian", "Ukrainian", "Українська", "CP1251", "uk", true, true },
- { "other_cp1250", "Other (East European)", "", "CP1251", "", false, false },
- { "other_cp1251", "Other (Cyrillic Script)", "", "CP1250", "", false, false },
- { "other_cp1252", "Other (West European)", "", "CP1252", "", false, false }
- } };
- static_assert(languages.size() == static_cast<size_t>(ELanguages::COUNT), "Languages array is missing a value!");
- return languages;
- }
- inline const Options & getLanguageOptions(ELanguages language)
- {
- assert(language < ELanguages::COUNT);
- return getLanguageList()[static_cast<size_t>(language)];
- }
- inline const Options & getLanguageOptions(const std::string & language)
- {
- for(const auto & entry : getLanguageList())
- if(entry.identifier == language)
- return entry;
- static const Options emptyValue;
- assert(0);
- return emptyValue;
- }
- }
|