language.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. // Copyright 2019 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "core/hle/service/ns/language.h"
  5. #include "core/hle/service/set/set.h"
  6. namespace Service::NS {
  7. constexpr ApplicationLanguagePriorityList priority_list_american_english = {{
  8. ApplicationLanguage::AmericanEnglish,
  9. ApplicationLanguage::BritishEnglish,
  10. ApplicationLanguage::LatinAmericanSpanish,
  11. ApplicationLanguage::CanadianFrench,
  12. ApplicationLanguage::French,
  13. ApplicationLanguage::German,
  14. ApplicationLanguage::Spanish,
  15. ApplicationLanguage::Italian,
  16. ApplicationLanguage::Dutch,
  17. ApplicationLanguage::Portuguese,
  18. ApplicationLanguage::Russian,
  19. ApplicationLanguage::Japanese,
  20. ApplicationLanguage::SimplifiedChinese,
  21. ApplicationLanguage::TraditionalChinese,
  22. ApplicationLanguage::Korean,
  23. }};
  24. constexpr ApplicationLanguagePriorityList priority_list_british_english = {{
  25. ApplicationLanguage::BritishEnglish,
  26. ApplicationLanguage::AmericanEnglish,
  27. ApplicationLanguage::French,
  28. ApplicationLanguage::German,
  29. ApplicationLanguage::Spanish,
  30. ApplicationLanguage::Italian,
  31. ApplicationLanguage::Dutch,
  32. ApplicationLanguage::Portuguese,
  33. ApplicationLanguage::Russian,
  34. ApplicationLanguage::LatinAmericanSpanish,
  35. ApplicationLanguage::CanadianFrench,
  36. ApplicationLanguage::Japanese,
  37. ApplicationLanguage::SimplifiedChinese,
  38. ApplicationLanguage::TraditionalChinese,
  39. ApplicationLanguage::Korean,
  40. }};
  41. constexpr ApplicationLanguagePriorityList priority_list_japanese = {{
  42. ApplicationLanguage::Japanese,
  43. ApplicationLanguage::AmericanEnglish,
  44. ApplicationLanguage::BritishEnglish,
  45. ApplicationLanguage::LatinAmericanSpanish,
  46. ApplicationLanguage::CanadianFrench,
  47. ApplicationLanguage::French,
  48. ApplicationLanguage::German,
  49. ApplicationLanguage::Spanish,
  50. ApplicationLanguage::Italian,
  51. ApplicationLanguage::Dutch,
  52. ApplicationLanguage::Portuguese,
  53. ApplicationLanguage::Russian,
  54. ApplicationLanguage::SimplifiedChinese,
  55. ApplicationLanguage::TraditionalChinese,
  56. ApplicationLanguage::Korean,
  57. }};
  58. constexpr ApplicationLanguagePriorityList priority_list_french = {{
  59. ApplicationLanguage::French,
  60. ApplicationLanguage::CanadianFrench,
  61. ApplicationLanguage::BritishEnglish,
  62. ApplicationLanguage::AmericanEnglish,
  63. ApplicationLanguage::German,
  64. ApplicationLanguage::Spanish,
  65. ApplicationLanguage::Italian,
  66. ApplicationLanguage::Dutch,
  67. ApplicationLanguage::Portuguese,
  68. ApplicationLanguage::Russian,
  69. ApplicationLanguage::LatinAmericanSpanish,
  70. ApplicationLanguage::Japanese,
  71. ApplicationLanguage::SimplifiedChinese,
  72. ApplicationLanguage::TraditionalChinese,
  73. ApplicationLanguage::Korean,
  74. }};
  75. constexpr ApplicationLanguagePriorityList priority_list_german = {{
  76. ApplicationLanguage::German,
  77. ApplicationLanguage::BritishEnglish,
  78. ApplicationLanguage::AmericanEnglish,
  79. ApplicationLanguage::French,
  80. ApplicationLanguage::Spanish,
  81. ApplicationLanguage::Italian,
  82. ApplicationLanguage::Dutch,
  83. ApplicationLanguage::Portuguese,
  84. ApplicationLanguage::Russian,
  85. ApplicationLanguage::LatinAmericanSpanish,
  86. ApplicationLanguage::CanadianFrench,
  87. ApplicationLanguage::Japanese,
  88. ApplicationLanguage::SimplifiedChinese,
  89. ApplicationLanguage::TraditionalChinese,
  90. ApplicationLanguage::Korean,
  91. }};
  92. constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish = {{
  93. ApplicationLanguage::LatinAmericanSpanish,
  94. ApplicationLanguage::Spanish,
  95. ApplicationLanguage::AmericanEnglish,
  96. ApplicationLanguage::BritishEnglish,
  97. ApplicationLanguage::Portuguese,
  98. ApplicationLanguage::CanadianFrench,
  99. ApplicationLanguage::French,
  100. ApplicationLanguage::Italian,
  101. ApplicationLanguage::German,
  102. ApplicationLanguage::Dutch,
  103. ApplicationLanguage::Russian,
  104. ApplicationLanguage::Japanese,
  105. ApplicationLanguage::SimplifiedChinese,
  106. ApplicationLanguage::TraditionalChinese,
  107. ApplicationLanguage::Korean,
  108. }};
  109. constexpr ApplicationLanguagePriorityList priority_list_spanish = {{
  110. ApplicationLanguage::Spanish,
  111. ApplicationLanguage::LatinAmericanSpanish,
  112. ApplicationLanguage::BritishEnglish,
  113. ApplicationLanguage::AmericanEnglish,
  114. ApplicationLanguage::French,
  115. ApplicationLanguage::German,
  116. ApplicationLanguage::Italian,
  117. ApplicationLanguage::Dutch,
  118. ApplicationLanguage::Portuguese,
  119. ApplicationLanguage::Russian,
  120. ApplicationLanguage::CanadianFrench,
  121. ApplicationLanguage::Japanese,
  122. ApplicationLanguage::SimplifiedChinese,
  123. ApplicationLanguage::TraditionalChinese,
  124. ApplicationLanguage::Korean,
  125. }};
  126. constexpr ApplicationLanguagePriorityList priority_list_italian = {{
  127. ApplicationLanguage::Italian,
  128. ApplicationLanguage::BritishEnglish,
  129. ApplicationLanguage::AmericanEnglish,
  130. ApplicationLanguage::French,
  131. ApplicationLanguage::German,
  132. ApplicationLanguage::Spanish,
  133. ApplicationLanguage::Dutch,
  134. ApplicationLanguage::Portuguese,
  135. ApplicationLanguage::Russian,
  136. ApplicationLanguage::LatinAmericanSpanish,
  137. ApplicationLanguage::CanadianFrench,
  138. ApplicationLanguage::Japanese,
  139. ApplicationLanguage::SimplifiedChinese,
  140. ApplicationLanguage::TraditionalChinese,
  141. ApplicationLanguage::Korean,
  142. }};
  143. constexpr ApplicationLanguagePriorityList priority_list_dutch = {{
  144. ApplicationLanguage::Dutch,
  145. ApplicationLanguage::BritishEnglish,
  146. ApplicationLanguage::AmericanEnglish,
  147. ApplicationLanguage::French,
  148. ApplicationLanguage::German,
  149. ApplicationLanguage::Spanish,
  150. ApplicationLanguage::Italian,
  151. ApplicationLanguage::Portuguese,
  152. ApplicationLanguage::Russian,
  153. ApplicationLanguage::LatinAmericanSpanish,
  154. ApplicationLanguage::CanadianFrench,
  155. ApplicationLanguage::Japanese,
  156. ApplicationLanguage::SimplifiedChinese,
  157. ApplicationLanguage::TraditionalChinese,
  158. ApplicationLanguage::Korean,
  159. }};
  160. constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{
  161. ApplicationLanguage::CanadianFrench,
  162. ApplicationLanguage::French,
  163. ApplicationLanguage::AmericanEnglish,
  164. ApplicationLanguage::BritishEnglish,
  165. ApplicationLanguage::LatinAmericanSpanish,
  166. ApplicationLanguage::Spanish,
  167. ApplicationLanguage::German,
  168. ApplicationLanguage::Italian,
  169. ApplicationLanguage::Dutch,
  170. ApplicationLanguage::Portuguese,
  171. ApplicationLanguage::Russian,
  172. ApplicationLanguage::Japanese,
  173. ApplicationLanguage::SimplifiedChinese,
  174. ApplicationLanguage::TraditionalChinese,
  175. ApplicationLanguage::Korean,
  176. }};
  177. constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{
  178. ApplicationLanguage::Portuguese,
  179. ApplicationLanguage::BritishEnglish,
  180. ApplicationLanguage::AmericanEnglish,
  181. ApplicationLanguage::French,
  182. ApplicationLanguage::German,
  183. ApplicationLanguage::Spanish,
  184. ApplicationLanguage::Italian,
  185. ApplicationLanguage::Dutch,
  186. ApplicationLanguage::Russian,
  187. ApplicationLanguage::LatinAmericanSpanish,
  188. ApplicationLanguage::CanadianFrench,
  189. ApplicationLanguage::Japanese,
  190. ApplicationLanguage::SimplifiedChinese,
  191. ApplicationLanguage::TraditionalChinese,
  192. ApplicationLanguage::Korean,
  193. }};
  194. constexpr ApplicationLanguagePriorityList priority_list_russian = {{
  195. ApplicationLanguage::Russian,
  196. ApplicationLanguage::BritishEnglish,
  197. ApplicationLanguage::AmericanEnglish,
  198. ApplicationLanguage::French,
  199. ApplicationLanguage::German,
  200. ApplicationLanguage::Spanish,
  201. ApplicationLanguage::Italian,
  202. ApplicationLanguage::Dutch,
  203. ApplicationLanguage::Portuguese,
  204. ApplicationLanguage::LatinAmericanSpanish,
  205. ApplicationLanguage::CanadianFrench,
  206. ApplicationLanguage::Japanese,
  207. ApplicationLanguage::SimplifiedChinese,
  208. ApplicationLanguage::TraditionalChinese,
  209. ApplicationLanguage::Korean,
  210. }};
  211. constexpr ApplicationLanguagePriorityList priority_list_korean = {{
  212. ApplicationLanguage::Korean,
  213. ApplicationLanguage::AmericanEnglish,
  214. ApplicationLanguage::BritishEnglish,
  215. ApplicationLanguage::LatinAmericanSpanish,
  216. ApplicationLanguage::CanadianFrench,
  217. ApplicationLanguage::French,
  218. ApplicationLanguage::German,
  219. ApplicationLanguage::Spanish,
  220. ApplicationLanguage::Italian,
  221. ApplicationLanguage::Dutch,
  222. ApplicationLanguage::Portuguese,
  223. ApplicationLanguage::Russian,
  224. ApplicationLanguage::Japanese,
  225. ApplicationLanguage::SimplifiedChinese,
  226. ApplicationLanguage::TraditionalChinese,
  227. }};
  228. constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{
  229. ApplicationLanguage::TraditionalChinese,
  230. ApplicationLanguage::SimplifiedChinese,
  231. ApplicationLanguage::AmericanEnglish,
  232. ApplicationLanguage::BritishEnglish,
  233. ApplicationLanguage::Japanese,
  234. ApplicationLanguage::LatinAmericanSpanish,
  235. ApplicationLanguage::CanadianFrench,
  236. ApplicationLanguage::French,
  237. ApplicationLanguage::German,
  238. ApplicationLanguage::Spanish,
  239. ApplicationLanguage::Italian,
  240. ApplicationLanguage::Dutch,
  241. ApplicationLanguage::Portuguese,
  242. ApplicationLanguage::Russian,
  243. ApplicationLanguage::Korean,
  244. }};
  245. constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{
  246. ApplicationLanguage::SimplifiedChinese,
  247. ApplicationLanguage::TraditionalChinese,
  248. ApplicationLanguage::AmericanEnglish,
  249. ApplicationLanguage::BritishEnglish,
  250. ApplicationLanguage::Japanese,
  251. ApplicationLanguage::LatinAmericanSpanish,
  252. ApplicationLanguage::CanadianFrench,
  253. ApplicationLanguage::French,
  254. ApplicationLanguage::German,
  255. ApplicationLanguage::Spanish,
  256. ApplicationLanguage::Italian,
  257. ApplicationLanguage::Dutch,
  258. ApplicationLanguage::Portuguese,
  259. ApplicationLanguage::Russian,
  260. ApplicationLanguage::Korean,
  261. }};
  262. const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList(
  263. const ApplicationLanguage lang) {
  264. switch (lang) {
  265. case ApplicationLanguage::AmericanEnglish:
  266. return &priority_list_american_english;
  267. case ApplicationLanguage::BritishEnglish:
  268. return &priority_list_british_english;
  269. case ApplicationLanguage::Japanese:
  270. return &priority_list_japanese;
  271. case ApplicationLanguage::French:
  272. return &priority_list_french;
  273. case ApplicationLanguage::German:
  274. return &priority_list_german;
  275. case ApplicationLanguage::LatinAmericanSpanish:
  276. return &priority_list_latin_american_spanish;
  277. case ApplicationLanguage::Spanish:
  278. return &priority_list_spanish;
  279. case ApplicationLanguage::Italian:
  280. return &priority_list_italian;
  281. case ApplicationLanguage::Dutch:
  282. return &priority_list_dutch;
  283. case ApplicationLanguage::CanadianFrench:
  284. return &priority_list_canadian_french;
  285. case ApplicationLanguage::Portuguese:
  286. return &priority_list_portuguese;
  287. case ApplicationLanguage::Russian:
  288. return &priority_list_russian;
  289. case ApplicationLanguage::Korean:
  290. return &priority_list_korean;
  291. case ApplicationLanguage::TraditionalChinese:
  292. return &priority_list_traditional_chinese;
  293. case ApplicationLanguage::SimplifiedChinese:
  294. return &priority_list_simplified_chinese;
  295. default:
  296. return nullptr;
  297. }
  298. }
  299. std::optional<ApplicationLanguage> ConvertToApplicationLanguage(
  300. const Set::LanguageCode language_code) {
  301. switch (language_code) {
  302. case Set::LanguageCode::EN_US:
  303. return ApplicationLanguage::AmericanEnglish;
  304. case Set::LanguageCode::EN_GB:
  305. return ApplicationLanguage::BritishEnglish;
  306. case Set::LanguageCode::JA:
  307. return ApplicationLanguage::Japanese;
  308. case Set::LanguageCode::FR:
  309. return ApplicationLanguage::French;
  310. case Set::LanguageCode::DE:
  311. return ApplicationLanguage::German;
  312. case Set::LanguageCode::ES_419:
  313. return ApplicationLanguage::LatinAmericanSpanish;
  314. case Set::LanguageCode::ES:
  315. return ApplicationLanguage::Spanish;
  316. case Set::LanguageCode::IT:
  317. return ApplicationLanguage::Italian;
  318. case Set::LanguageCode::NL:
  319. return ApplicationLanguage::Dutch;
  320. case Set::LanguageCode::FR_CA:
  321. return ApplicationLanguage::CanadianFrench;
  322. case Set::LanguageCode::PT:
  323. return ApplicationLanguage::Portuguese;
  324. case Set::LanguageCode::RU:
  325. return ApplicationLanguage::Russian;
  326. case Set::LanguageCode::KO:
  327. return ApplicationLanguage::Korean;
  328. case Set::LanguageCode::ZH_TW:
  329. case Set::LanguageCode::ZH_HANT:
  330. return ApplicationLanguage::TraditionalChinese;
  331. case Set::LanguageCode::ZH_CN:
  332. case Set::LanguageCode::ZH_HANS:
  333. return ApplicationLanguage::SimplifiedChinese;
  334. default:
  335. return std::nullopt;
  336. }
  337. }
  338. std::optional<Set::LanguageCode> ConvertToLanguageCode(const ApplicationLanguage lang) {
  339. switch (lang) {
  340. case ApplicationLanguage::AmericanEnglish:
  341. return Set::LanguageCode::EN_US;
  342. case ApplicationLanguage::BritishEnglish:
  343. return Set::LanguageCode::EN_GB;
  344. case ApplicationLanguage::Japanese:
  345. return Set::LanguageCode::JA;
  346. case ApplicationLanguage::French:
  347. return Set::LanguageCode::FR;
  348. case ApplicationLanguage::German:
  349. return Set::LanguageCode::DE;
  350. case ApplicationLanguage::LatinAmericanSpanish:
  351. return Set::LanguageCode::ES_419;
  352. case ApplicationLanguage::Spanish:
  353. return Set::LanguageCode::ES;
  354. case ApplicationLanguage::Italian:
  355. return Set::LanguageCode::IT;
  356. case ApplicationLanguage::Dutch:
  357. return Set::LanguageCode::NL;
  358. case ApplicationLanguage::CanadianFrench:
  359. return Set::LanguageCode::FR_CA;
  360. case ApplicationLanguage::Portuguese:
  361. return Set::LanguageCode::PT;
  362. case ApplicationLanguage::Russian:
  363. return Set::LanguageCode::RU;
  364. case ApplicationLanguage::Korean:
  365. return Set::LanguageCode::KO;
  366. case ApplicationLanguage::TraditionalChinese:
  367. return Set::LanguageCode::ZH_HANT;
  368. case ApplicationLanguage::SimplifiedChinese:
  369. return Set::LanguageCode::ZH_HANS;
  370. default:
  371. return std::nullopt;
  372. }
  373. }
  374. } // namespace Service::NS