Browse Source

[common, hle] add new updates Polish+Thai languages

Signed-off-by: lizzie <lizzie@eden-emu.dev>
pull/3587/head
lizzie 2 weeks ago
committed by crueter
parent
commit
20a00eb74d
  1. 2
      src/common/settings_enums.h
  2. 45
      src/core/file_sys/control_metadata.cpp
  3. 170
      src/core/file_sys/control_metadata.h
  4. 86
      src/core/hle/service/ns/language.cpp
  5. 2
      src/core/hle/service/ns/language.h
  6. 4
      src/core/hle/service/set/settings_types.h
  7. 2
      src/qt_common/config/shared_translation.cpp

2
src/common/settings_enums.h

@ -120,7 +120,7 @@ ENUM(AudioMode, Mono, Stereo, Surround);
ENUM(Language, Japanese, EnglishAmerican, French, German, Italian, Spanish, Chinese, Korean, Dutch, ENUM(Language, Japanese, EnglishAmerican, French, German, Italian, Spanish, Chinese, Korean, Dutch,
Portuguese, Russian, Taiwanese, EnglishBritish, FrenchCanadian, SpanishLatin, Portuguese, Russian, Taiwanese, EnglishBritish, FrenchCanadian, SpanishLatin,
ChineseSimplified, ChineseTraditional, PortugueseBrazilian, Serbian);
ChineseSimplified, ChineseTraditional, PortugueseBrazilian, Serbian, Polish, Thai);
ENUM(Region, Japan, Usa, Europe, Australia, China, Korea, Taiwan); ENUM(Region, Japan, Usa, Europe, Australia, China, Korea, Taiwan);
ENUM(TimeZone, Auto, Default, Cet, Cst6Cdt, Cuba, Eet, Egypt, Eire, Est, Est5Edt, Gb, GbEire, Gmt, ENUM(TimeZone, Auto, Default, Cet, Cst6Cdt, Cuba, Eet, Egypt, Eire, Est, Est5Edt, Gb, GbEire, Gmt,
GmtPlusZero, GmtMinusZero, GmtZero, Greenwich, Hongkong, Hst, Iceland, Iran, Israel, Jamaica, GmtPlusZero, GmtMinusZero, GmtZero, Greenwich, Hongkong, Hst, Iceland, Iran, Israel, Jamaica,

45
src/core/file_sys/control_metadata.cpp

@ -12,6 +12,7 @@
#include <zlib.h> #include <zlib.h>
#include "common/settings.h" #include "common/settings.h"
#include "common/settings_enums.h"
#include "common/string_util.h" #include "common/string_util.h"
#include "common/swap.h" #include "common/swap.h"
#include "core/file_sys/control_metadata.h" #include "core/file_sys/control_metadata.h"
@ -19,7 +20,7 @@
namespace FileSys { namespace FileSys {
const std::array<const char*, 16> LANGUAGE_NAMES{{
const std::array<const char*, size_t(Language::Count)> LANGUAGE_NAMES{{
"AmericanEnglish", "AmericanEnglish",
"BritishEnglish", "BritishEnglish",
"Japanese", "Japanese",
@ -36,6 +37,8 @@ const std::array<const char*, 16> LANGUAGE_NAMES{{
"TraditionalChinese", "TraditionalChinese",
"SimplifiedChinese", "SimplifiedChinese",
"BrazilianPortuguese", "BrazilianPortuguese",
"Polish",
"Thai",
}}; }};
namespace { namespace {
@ -106,16 +109,14 @@ void DecodePackedLanguageEntries(RawNACP& raw) {
} // namespace } // namespace
std::string LanguageEntry::GetApplicationName() const { std::string LanguageEntry::GetApplicationName() const {
return Common::StringFromFixedZeroTerminatedBuffer(application_name.data(),
application_name.size());
return Common::StringFromFixedZeroTerminatedBuffer(application_name.data(), application_name.size());
} }
std::string LanguageEntry::GetDeveloperName() const { std::string LanguageEntry::GetDeveloperName() const {
return Common::StringFromFixedZeroTerminatedBuffer(developer_name.data(),
developer_name.size());
return Common::StringFromFixedZeroTerminatedBuffer(developer_name.data(), developer_name.size());
} }
constexpr std::array<Language, 18> language_to_codes = {{
constexpr std::array<Language, 20> language_to_codes = {{
Language::Japanese, Language::Japanese,
Language::AmericanEnglish, Language::AmericanEnglish,
Language::French, Language::French,
@ -134,6 +135,8 @@ constexpr std::array<Language, 18> language_to_codes = {{
Language::SimplifiedChinese, Language::SimplifiedChinese,
Language::TraditionalChinese, Language::TraditionalChinese,
Language::BrazilianPortuguese, Language::BrazilianPortuguese,
Language::Polish,
Language::Thai,
}}; }};
NACP::NACP() = default; NACP::NACP() = default;
@ -146,20 +149,40 @@ NACP::NACP(VirtualFile file) {
NACP::~NACP() = default; NACP::~NACP() = default;
const LanguageEntry& NACP::GetLanguageEntry() const { const LanguageEntry& NACP::GetLanguageEntry() const {
Language language =
language_to_codes[static_cast<s32>(Settings::values.language_index.GetValue())];
auto const language = []{
switch (Settings::values.language_index.GetValue()) {
case Settings::Language::Chinese: return Language::SimplifiedChinese;
case Settings::Language::ChineseSimplified: return Language::SimplifiedChinese;
case Settings::Language::ChineseTraditional: return Language::TraditionalChinese;
case Settings::Language::Dutch: return Language::Dutch;
case Settings::Language::EnglishAmerican: return Language::AmericanEnglish;
case Settings::Language::EnglishBritish: return Language::BritishEnglish;
case Settings::Language::French: return Language::French;
case Settings::Language::FrenchCanadian: return Language::CanadianFrench;
case Settings::Language::German: return Language::German;
case Settings::Language::Italian: return Language::Italian;
case Settings::Language::Korean: return Language::Korean;
case Settings::Language::Japanese: return Language::Japanese;
case Settings::Language::Portuguese: return Language::Portuguese;
case Settings::Language::PortugueseBrazilian: return Language::BrazilianPortuguese;
case Settings::Language::Russian: return Language::Russian;
case Settings::Language::Serbian: return Language::Russian;
case Settings::Language::Spanish: return Language::Spanish;
case Settings::Language::SpanishLatin: return Language::LatinAmericanSpanish;
case Settings::Language::Taiwanese: return Language::SimplifiedChinese;
case Settings::Language::Thai: return Language::Thai;
case Settings::Language::Polish: return Language::Polish;
}
}();
{ {
const auto& language_entry = raw.language_entries.at(static_cast<u8>(language)); const auto& language_entry = raw.language_entries.at(static_cast<u8>(language));
if (!language_entry.GetApplicationName().empty()) if (!language_entry.GetApplicationName().empty())
return language_entry; return language_entry;
} }
for (const auto& language_entry : raw.language_entries) { for (const auto& language_entry : raw.language_entries) {
if (!language_entry.GetApplicationName().empty()) if (!language_entry.GetApplicationName().empty())
return language_entry; return language_entry;
} }
return raw.language_entries.at(static_cast<u8>(Language::AmericanEnglish)); return raw.language_entries.at(static_cast<u8>(Language::AmericanEnglish));
} }

170
src/core/file_sys/control_metadata.h

@ -25,7 +25,132 @@ struct LanguageEntry {
std::string GetApplicationName() const; std::string GetApplicationName() const;
std::string GetDeveloperName() const; std::string GetDeveloperName() const;
}; };
static_assert(sizeof(LanguageEntry) == 0x300, "LanguageEntry has incorrect size.");
static_assert(sizeof(LanguageEntry) == 0x300);
struct ApplicationNeighborDetectionGroupConfiguration {
u64 group_id; ///< GroupId
std::array<u8, 0x10> key;
};
static_assert(sizeof(ApplicationNeighborDetectionGroupConfiguration) == 0x18);
// NeighborDetectionClientConfiguration
struct NeighborDetectionClientConfiguration {
ApplicationNeighborDetectionGroupConfiguration send_group_configuration; ///< SendGroupConfiguration
std::array<ApplicationNeighborDetectionGroupConfiguration, 0x10> receivable_group_configurations; ///< ReceivableGroupConfigurations
};
static_assert(sizeof(NeighborDetectionClientConfiguration) == 0x198);
enum class ApparentPlatform : u8 {
NX = 0,
Ounce = 1,
Count = 2
};
enum class JitConfigurationFlag : u64 {
None = 0,
IsEnabled = 1,
};
struct JitConfiguration {
JitConfigurationFlag jit_configuration_flag;
u64 memory_size;
};
static_assert(sizeof(JitConfiguration) == 0x10);
enum RequiredAddOnContentsSetDescriptorFlag : u16 {
None = 0,
Continue = 1
};
struct RequiredAddOnContentsSetDescriptor {
u16 index : 15;
RequiredAddOnContentsSetDescriptorFlag flag : 1;
};
static_assert(sizeof(RequiredAddOnContentsSetDescriptor) == 0x2);
struct RequiredAddOnContentsSetBinaryDescriptor {
RequiredAddOnContentsSetDescriptor descriptors[0x20];
};
static_assert(sizeof(RequiredAddOnContentsSetBinaryDescriptor) == 0x40);
enum class PlayReportPermission : u8 {
None = 0,
TargetMarketing = 1,
};
enum class CrashScreenshotForProd : u8 {
Deny = 0,
Allow = 1,
};
enum class CrashScreenshotForDev : u8 {
Deny = 0,
Allow = 1,
};
enum class ContentsAvailabilityTransitionPolicy : u8 {
NoPolicy = 0,
Stable = 1,
Changeable = 2,
};
struct AccessibleLaunchRequiredVersion {
std::array<u64, 8> application_id;
};
static_assert(sizeof(AccessibleLaunchRequiredVersion) == 0x40);
struct ApplicationControlDataConditionData {
u8 priority;
INSERT_PADDING_BYTES(7);
u16 aoc_index;
INSERT_PADDING_BYTES(6);
};
static_assert(sizeof(ApplicationControlDataConditionData) == 0x10);
#pragma pack(push, 1)
struct ApplicationControlDataCondition {
u64 type;
std::array<ApplicationControlDataConditionData, 0x8> data;
u8 count;
};
#pragma pack(pop)
static_assert(sizeof(ApplicationControlDataCondition) == 0x89);
// A language on the NX. These are for names and icons.
#define NACP_LANGUAGE_LIST \
NACP_LANGUAGE_ELEM(AmericanEnglish, 0) \
NACP_LANGUAGE_ELEM(BritishEnglish, 1) \
NACP_LANGUAGE_ELEM(Japanese, 2) \
NACP_LANGUAGE_ELEM(French, 3) \
NACP_LANGUAGE_ELEM(German, 4) \
NACP_LANGUAGE_ELEM(LatinAmericanSpanish, 5) \
NACP_LANGUAGE_ELEM(Spanish, 6) \
NACP_LANGUAGE_ELEM(Italian, 7) \
NACP_LANGUAGE_ELEM(Dutch, 8) \
NACP_LANGUAGE_ELEM(CanadianFrench, 9) \
NACP_LANGUAGE_ELEM(Portuguese, 10) \
NACP_LANGUAGE_ELEM(Russian, 11) \
NACP_LANGUAGE_ELEM(Korean, 12) \
NACP_LANGUAGE_ELEM(TraditionalChinese, 13) \
NACP_LANGUAGE_ELEM(SimplifiedChinese, 14) \
NACP_LANGUAGE_ELEM(BrazilianPortuguese, 15) \
NACP_LANGUAGE_ELEM(Polish, 16) \
NACP_LANGUAGE_ELEM(Thai, 17) \
enum class Language : u8 {
#define NACP_LANGUAGE_ELEM(X, N) X = N,
NACP_LANGUAGE_LIST
#undef NACP_LANGUAGE_ELEM
Count = 18,
Default = 255,
};
// Yes it's duplicated, why? Bits i guess
enum class SupportedLanguage : u32 {
#define NACP_LANGUAGE_ELEM(X, N) X = 1ULL << N,
NACP_LANGUAGE_LIST
#undef NACP_LANGUAGE_ELEM
};
#undef NACP_LANGUAGE_LIST
// The raw file format of a NACP file. // The raw file format of a NACP file.
struct RawNACP { struct RawNACP {
@ -35,7 +160,7 @@ struct RawNACP {
u8 user_account_switch_lock; u8 user_account_switch_lock;
u8 addon_content_registration_type; u8 addon_content_registration_type;
u32_le application_attribute; u32_le application_attribute;
u32_le supported_languages;
SupportedLanguage supported_languages;
u32_le parental_control; u32_le parental_control;
bool screenshot_enabled; bool screenshot_enabled;
u8 video_capture_mode; u8 video_capture_mode;
@ -71,11 +196,20 @@ struct RawNACP {
u16_le cache_storage_max_index; u16_le cache_storage_max_index;
INSERT_PADDING_BYTES(0x8B); INSERT_PADDING_BYTES(0x8B);
u8 app_error_code_prefix; u8 app_error_code_prefix;
INSERT_PADDING_BYTES(1);
u8 title_compression;
u8 acd_index; u8 acd_index;
u8 apparent_platform;
INSERT_PADDING_BYTES(0x22F);
std::array<u8, 0x89> app_control_data_condition;
ApparentPlatform apparent_platform;
// NeighborDetectionClientConfiguration neighbor_detection_client_configuration;
// JitConfiguration jit_configuration;
// RequiredAddOnContentsSetBinaryDescriptor required_add_on_contents_set_binary_descriptor;
// PlayReportPermission play_report_permission;
// CrashScreenshotForProd crash_screenshot_for_prod;
// CrashScreenshotForDev crash_screenshot_for_dev;
// ContentsAvailabilityTransitionPolicy contents_availability_transition_policy;
// SupportedLanguage supported_language_copy; ///< TODO: add to XML generation.
INSERT_PADDING_BYTES(0x1EF);
AccessibleLaunchRequiredVersion accessible_launch_required_version;
ApplicationControlDataCondition application_control_data_condition; ///< Used for Switch 2 upgrade packs, which are distributed as AddOnContent titles
u8 initial_program_index; u8 initial_program_index;
INSERT_PADDING_BYTES(2); INSERT_PADDING_BYTES(2);
u32_le accessible_program_index_flags; u32_le accessible_program_index_flags;
@ -90,29 +224,7 @@ struct RawNACP {
}; };
static_assert(sizeof(RawNACP) == 0x4000, "RawNACP has incorrect size."); static_assert(sizeof(RawNACP) == 0x4000, "RawNACP has incorrect size.");
// A language on the NX. These are for names and icons.
enum class Language : u8 {
AmericanEnglish = 0,
BritishEnglish = 1,
Japanese = 2,
French = 3,
German = 4,
LatinAmericanSpanish = 5,
Spanish = 6,
Italian = 7,
Dutch = 8,
CanadianFrench = 9,
Portuguese = 10,
Russian = 11,
Korean = 12,
TraditionalChinese = 13,
SimplifiedChinese = 14,
BrazilianPortuguese = 15,
Default = 255,
};
extern const std::array<const char*, 16> LANGUAGE_NAMES;
extern const std::array<const char*, size_t(Language::Count)> LANGUAGE_NAMES;
// A class representing the format used by NX metadata files, typically named Control.nacp. // A class representing the format used by NX metadata files, typically named Control.nacp.
// These store application name, dev name, title id, and other miscellaneous data. // These store application name, dev name, title id, and other miscellaneous data.

86
src/core/hle/service/ns/language.cpp

@ -22,6 +22,8 @@ constexpr ApplicationLanguagePriorityList priority_list_american_english = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_british_english = {{ constexpr ApplicationLanguagePriorityList priority_list_british_english = {{
@ -40,6 +42,8 @@ constexpr ApplicationLanguagePriorityList priority_list_british_english = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_japanese = {{ constexpr ApplicationLanguagePriorityList priority_list_japanese = {{
@ -58,6 +62,8 @@ constexpr ApplicationLanguagePriorityList priority_list_japanese = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_french = {{ constexpr ApplicationLanguagePriorityList priority_list_french = {{
@ -76,6 +82,8 @@ constexpr ApplicationLanguagePriorityList priority_list_french = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_german = {{ constexpr ApplicationLanguagePriorityList priority_list_german = {{
@ -94,6 +102,8 @@ constexpr ApplicationLanguagePriorityList priority_list_german = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish = {{ constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish = {{
@ -112,6 +122,8 @@ constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish =
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_spanish = {{ constexpr ApplicationLanguagePriorityList priority_list_spanish = {{
@ -130,6 +142,8 @@ constexpr ApplicationLanguagePriorityList priority_list_spanish = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_italian = {{ constexpr ApplicationLanguagePriorityList priority_list_italian = {{
@ -148,6 +162,8 @@ constexpr ApplicationLanguagePriorityList priority_list_italian = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_dutch = {{ constexpr ApplicationLanguagePriorityList priority_list_dutch = {{
@ -166,6 +182,8 @@ constexpr ApplicationLanguagePriorityList priority_list_dutch = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{ constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{
@ -184,6 +202,8 @@ constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{ constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{
@ -202,6 +222,8 @@ constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_russian = {{ constexpr ApplicationLanguagePriorityList priority_list_russian = {{
@ -220,6 +242,8 @@ constexpr ApplicationLanguagePriorityList priority_list_russian = {{
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_korean = {{ constexpr ApplicationLanguagePriorityList priority_list_korean = {{
@ -238,6 +262,8 @@ constexpr ApplicationLanguagePriorityList priority_list_korean = {{
ApplicationLanguage::Japanese, ApplicationLanguage::Japanese,
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{ constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{
@ -256,6 +282,8 @@ constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{
ApplicationLanguage::Portuguese, ApplicationLanguage::Portuguese,
ApplicationLanguage::Russian, ApplicationLanguage::Russian,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{ constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{
@ -274,6 +302,8 @@ constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{
ApplicationLanguage::Portuguese, ApplicationLanguage::Portuguese,
ApplicationLanguage::Russian, ApplicationLanguage::Russian,
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}}; }};
constexpr ApplicationLanguagePriorityList priority_list_brazilian_portuguese = {{ constexpr ApplicationLanguagePriorityList priority_list_brazilian_portuguese = {{
@ -293,6 +323,50 @@ constexpr ApplicationLanguagePriorityList priority_list_brazilian_portuguese = {
ApplicationLanguage::Korean, ApplicationLanguage::Korean,
ApplicationLanguage::SimplifiedChinese, ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese, ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
}};
constexpr ApplicationLanguagePriorityList priority_list_thai = {{
ApplicationLanguage::Thai,
ApplicationLanguage::BrazilianPortuguese,
ApplicationLanguage::Portuguese,
ApplicationLanguage::LatinAmericanSpanish,
ApplicationLanguage::AmericanEnglish,
ApplicationLanguage::BritishEnglish,
ApplicationLanguage::Japanese,
ApplicationLanguage::French,
ApplicationLanguage::German,
ApplicationLanguage::Spanish,
ApplicationLanguage::Italian,
ApplicationLanguage::Dutch,
ApplicationLanguage::CanadianFrench,
ApplicationLanguage::Russian,
ApplicationLanguage::Korean,
ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese,
ApplicationLanguage::Polish,
}};
constexpr ApplicationLanguagePriorityList priority_list_polish = {{
ApplicationLanguage::Polish,
ApplicationLanguage::Thai,
ApplicationLanguage::BrazilianPortuguese,
ApplicationLanguage::Portuguese,
ApplicationLanguage::LatinAmericanSpanish,
ApplicationLanguage::AmericanEnglish,
ApplicationLanguage::BritishEnglish,
ApplicationLanguage::Japanese,
ApplicationLanguage::French,
ApplicationLanguage::German,
ApplicationLanguage::Spanish,
ApplicationLanguage::Italian,
ApplicationLanguage::Dutch,
ApplicationLanguage::CanadianFrench,
ApplicationLanguage::Russian,
ApplicationLanguage::Korean,
ApplicationLanguage::SimplifiedChinese,
ApplicationLanguage::TraditionalChinese,
}}; }};
const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList( const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList(
@ -330,6 +404,10 @@ const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList(
return &priority_list_simplified_chinese; return &priority_list_simplified_chinese;
case ApplicationLanguage::BrazilianPortuguese: case ApplicationLanguage::BrazilianPortuguese:
return &priority_list_brazilian_portuguese; return &priority_list_brazilian_portuguese;
case ApplicationLanguage::Polish:
return &priority_list_polish;
case ApplicationLanguage::Thai:
return &priority_list_thai;
default: default:
return nullptr; return nullptr;
} }
@ -372,6 +450,10 @@ std::optional<ApplicationLanguage> ConvertToApplicationLanguage(
return ApplicationLanguage::SimplifiedChinese; return ApplicationLanguage::SimplifiedChinese;
case Set::LanguageCode::PT_BR: case Set::LanguageCode::PT_BR:
return ApplicationLanguage::BrazilianPortuguese; return ApplicationLanguage::BrazilianPortuguese;
case Set::LanguageCode::TH:
return ApplicationLanguage::Thai;
case Set::LanguageCode::PL:
return ApplicationLanguage::Polish;
default: default:
return std::nullopt; return std::nullopt;
} }
@ -411,6 +493,10 @@ std::optional<Set::LanguageCode> ConvertToLanguageCode(const ApplicationLanguage
return Set::LanguageCode::ZH_HANS; return Set::LanguageCode::ZH_HANS;
case ApplicationLanguage::BrazilianPortuguese: case ApplicationLanguage::BrazilianPortuguese:
return Set::LanguageCode::PT_BR; return Set::LanguageCode::PT_BR;
case ApplicationLanguage::Thai:
return Set::LanguageCode::TH;
case ApplicationLanguage::Polish:
return Set::LanguageCode::PL;
default: default:
return std::nullopt; return std::nullopt;
} }

2
src/core/hle/service/ns/language.h

@ -26,6 +26,8 @@ enum class ApplicationLanguage : u8 {
TraditionalChinese, TraditionalChinese,
SimplifiedChinese, SimplifiedChinese,
BrazilianPortuguese, BrazilianPortuguese,
Polish,
Thai,
Count Count
}; };
using ApplicationLanguagePriorityList = using ApplicationLanguagePriorityList =

4
src/core/hle/service/set/settings_types.h

@ -169,6 +169,8 @@ enum class Language : u32 {
SimplifiedCHhinese, SimplifiedCHhinese,
TraditionalChinese, TraditionalChinese,
BrazilianPortuguese, BrazilianPortuguese,
Polish,
Thai
}; };
/// This is "nn::settings::LanguageCode", which is a NUL-terminated string stored in a u64. /// This is "nn::settings::LanguageCode", which is a NUL-terminated string stored in a u64.
@ -191,6 +193,8 @@ enum class LanguageCode : u64 {
ZH_HANS = 0x00736E61482D687A, ZH_HANS = 0x00736E61482D687A,
ZH_HANT = 0x00746E61482D687A, ZH_HANT = 0x00746E61482D687A,
PT_BR = 0x00000052422D7470, PT_BR = 0x00000052422D7470,
TH = 0x0000000000006874,
PL = 0x000000000000706C,
}; };
/// This is nn::settings::system::NotificationVolume /// This is nn::settings::system::NotificationVolume

2
src/qt_common/config/shared_translation.cpp

@ -652,6 +652,8 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent)
PAIR(Language, ChineseTraditional, tr("Traditional Chinese (正體中文)")), PAIR(Language, ChineseTraditional, tr("Traditional Chinese (正體中文)")),
PAIR(Language, PortugueseBrazilian, tr("Brazilian Portuguese (português do Brasil)")), PAIR(Language, PortugueseBrazilian, tr("Brazilian Portuguese (português do Brasil)")),
PAIR(Language, Serbian, tr("Serbian (српски)")), PAIR(Language, Serbian, tr("Serbian (српски)")),
PAIR(Language, Polish, tr("Polish (polska)")),
PAIR(Language, Thai, tr("Thai (แบบไทย)")),
}}); }});
translations->insert({Settings::EnumMetadata<Settings::Region>::Index(), translations->insert({Settings::EnumMetadata<Settings::Region>::Index(),
{ {

Loading…
Cancel
Save