TinWoo/source/util/lang.cpp

143 lines
3.6 KiB
C++
Raw Normal View History

2023-09-05 02:06:35 +01:00
#include <iostream>
#include <switch.h>
2023-09-18 01:58:16 +01:00
#include <cstring>
#include <sstream>
2023-09-05 02:06:35 +01:00
#include <filesystem>
#include "util/lang.hpp"
#include "util/config.hpp"
namespace Language {
json lang;
void Load() {
2023-09-18 01:58:16 +01:00
//https://switchbrew.org/wiki/Settings_services#LanguageCode
2023-09-18 07:21:41 +01:00
//Get language from the switch system settings.
2023-09-18 01:58:16 +01:00
SetLanguage ourLang;
u64 lcode = 0;
setInitialize();
setGetSystemLanguage(&lcode);
setMakeLanguage(lcode, &ourLang);
setExit();
2023-09-18 07:21:41 +01:00
int syslang = (int)ourLang;
2023-09-05 02:06:35 +01:00
std::ifstream ifs;
std::string languagePath;
int langInt = inst::config::languageSetting;
2023-09-18 01:58:16 +01:00
if (std::filesystem::exists(inst::config::appDir + "/lang/custom.json")) {
languagePath = (inst::config::appDir + "/lang/custom.json");
}
else {
switch (langInt) {
2023-09-18 20:10:30 +01:00
case 1:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/en.json";
break;
2023-09-18 20:10:30 +01:00
case 2:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/jp.json";
break;
2023-09-18 20:10:30 +01:00
case 3:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/fr.json";
break;
2023-09-18 20:10:30 +01:00
case 4:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/de.json";
break;
2023-09-18 20:10:30 +01:00
case 5:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/it.json";
break;
2023-09-18 20:10:30 +01:00
case 6:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/ru.json";
break;
2023-09-18 20:10:30 +01:00
case 7:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/es.json";
break;
2023-09-18 20:10:30 +01:00
case 8:
2023-09-18 01:58:16 +01:00
languagePath = "romfs:/lang/tw.json";
break;
2023-09-18 20:10:30 +01:00
case 0:
2023-09-18 07:21:41 +01:00
switch (syslang) {
2023-09-29 07:11:48 +01:00
case 0: //Japanese
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/jp.json";
break;
2023-09-29 07:11:48 +01:00
case 1: //AmericanEnglish
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/en.json";
break;
2023-09-29 07:11:48 +01:00
case 2: //French
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/fr.json";
break;
2023-09-29 07:11:48 +01:00
case 3: //German
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/de.json";
break;
2023-09-29 07:11:48 +01:00
case 4: //Italian
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/it.json";
break;
2023-09-29 07:11:48 +01:00
case 5: //Spanish
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/es.json";
break;
2023-09-29 07:11:48 +01:00
case 6: //Chinese
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/tw.json";
break;
2023-09-29 07:11:48 +01:00
case 7: //Korean
languagePath = "romfs:/lang/en.json";
break;
case 8: //Dutch
languagePath = "romfs:/lang/en.json";
break;
case 9: //Portuguese
languagePath = "romfs:/lang/en.json";
break;
case 10: //Russian
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/ru.json";
break;
2023-09-29 07:11:48 +01:00
case 11: //Taiwanese
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/tw.json";
break;
2023-09-29 07:11:48 +01:00
case 12: //BritishEnglish
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/en.json";
break;
2023-09-29 07:11:48 +01:00
case 13: //CanadianFrench
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/fr.json";
break;
2023-09-29 07:11:48 +01:00
case 14: //LatinAmericanSpanish
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/es.json";
break;
2023-09-29 07:11:48 +01:00
case 15: //SimplifiedChinese
languagePath = "romfs:/lang/tw.json";
break;
case 16: //TraditionalChinese
2023-09-28 02:37:58 +01:00
languagePath = "romfs:/lang/tw.json";
break;
2023-09-29 07:11:48 +01:00
case 17: //BrazilianPortuguese
languagePath = "romfs:/lang/en.json";
break;
2023-09-28 02:37:58 +01:00
default:
languagePath = "romfs:/lang/en.json";
break;
2023-09-18 07:21:41 +01:00
}
break;
2023-09-18 01:58:16 +01:00
default:
2023-09-17 17:58:03 +01:00
languagePath = "romfs:/lang/en.json";
2023-09-18 01:58:16 +01:00
break;
2023-09-17 17:58:03 +01:00
}
2023-09-05 02:06:35 +01:00
}
if (std::filesystem::exists(languagePath)) ifs = std::ifstream(languagePath);
else ifs = std::ifstream("romfs:/lang/en.json");
if (!ifs.good()) {
std::cout << "[FAILED TO LOAD LANGUAGE FILE]" << std::endl;
return;
}
lang = json::parse(ifs);
ifs.close();
}
std::string LanguageEntry(std::string key) {
json j = GetRelativeJson(lang, key);
if (j == nullptr) {
return "didn't find: " + key;
}
return j.get<std::string>();
}
std::string GetRandomMsg() {
json j = Language::GetRelativeJson(lang, "inst.finished");
srand(time(NULL));
return(j[rand() % j.size()]);
}
}