#include "stdinclude.hpp" #include "i18nData/strings_en.hpp" #include "i18nData/strings_ja.hpp" #include "i18nData/strings_zh-rCN.hpp" namespace GkmsGUII18n { const LANGID localLanguage = GetUserDefaultUILanguage(); std::unordered_set sChineseLangIds{ { 0x0004, 0x0804, 0x1004 } }; // zh-Hans, zh-CN, zh-SG // std::unordered_set tChineseLangIds{ { 0x0404, 0x0c04, 0x1404, 0x048E } }; // zh-TW, zh-HK, zh-MO, zh-yue-HK std::unordered_set jpnLangIds{ { 0x0011, 0x0411 } }; // ja, ja-JP std::unordered_map GetI18nData() { if (sChineseLangIds.contains(localLanguage)) { return I18nData::i18nData_zh_rCN; } else if (jpnLangIds.contains(localLanguage)) { return I18nData::i18nData_ja; } else { return I18nData::i18nData_default; } } const char* ts(const std::string& key) { static std::unordered_map i18nData = GetI18nData(); if (auto it = i18nData.find(key); it != i18nData.end()) { return it->second.c_str(); } if (auto it = I18nData::i18nData_default.find(key); it != I18nData::i18nData_default.end()) { return it->second.c_str(); } static std::unordered_map fallbackMap; auto [iter, inserted] = fallbackMap.emplace(key, key); return iter->second.c_str(); } }