9 changed files with 1010 additions and 403 deletions
-
3src/core/CMakeLists.txt
-
4src/core/file_sys/control_metadata.cpp
-
1src/core/file_sys/control_metadata.h
-
40src/core/hle/service/am/am.cpp
-
13src/core/hle/service/ns/errors.h
-
847src/core/hle/service/ns/ns.cpp
-
74src/core/hle/service/ns/ns.h
-
390src/core/hle/service/ns/ns_language.cpp
-
41src/core/hle/service/ns/ns_language.h
@ -0,0 +1,13 @@ |
|||
// Copyright 2019 yuzu emulator team |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/result.h" |
|||
|
|||
namespace Service::NS { |
|||
|
|||
constexpr ResultCode ERR_APPLICATION_LANGUAGE_NOT_FOUND{ErrorModule::NS, 300}; |
|||
|
|||
} |
|||
@ -0,0 +1,390 @@ |
|||
// Copyright 2018 yuzu emulator team
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "core/hle/service/ns/ns_language.h"
|
|||
|
|||
namespace Service::NS { |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_american_english = {{ |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_british_english = {{ |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_japanese = {{ |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_french = {{ |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_german = {{ |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_latin_american_spanish = {{ |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_spanish = {{ |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_italian = {{ |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_dutch = {{ |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_canadian_french = {{ |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_portuguese = {{ |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_russian = {{ |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_korean = {{ |
|||
ApplicationLanguage::Korean, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_traditional_chinese = {{ |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
constexpr ApplicationLanguagePriorityList priority_list_simplified_chinese = {{ |
|||
ApplicationLanguage::SimplifiedChinese, |
|||
ApplicationLanguage::TraditionalChinese, |
|||
ApplicationLanguage::AmericanEnglish, |
|||
ApplicationLanguage::BritishEnglish, |
|||
ApplicationLanguage::Japanese, |
|||
ApplicationLanguage::LatinAmericanSpanish, |
|||
ApplicationLanguage::CanadianFrench, |
|||
ApplicationLanguage::French, |
|||
ApplicationLanguage::German, |
|||
ApplicationLanguage::Spanish, |
|||
ApplicationLanguage::Italian, |
|||
ApplicationLanguage::Dutch, |
|||
ApplicationLanguage::Portuguese, |
|||
ApplicationLanguage::Russian, |
|||
ApplicationLanguage::Korean, |
|||
}}; |
|||
|
|||
const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList(ApplicationLanguage lang) { |
|||
switch (lang) { |
|||
case ApplicationLanguage::AmericanEnglish: |
|||
return &priority_list_american_english; |
|||
case ApplicationLanguage::BritishEnglish: |
|||
return &priority_list_british_english; |
|||
case ApplicationLanguage::Japanese: |
|||
return &priority_list_japanese; |
|||
case ApplicationLanguage::French: |
|||
return &priority_list_french; |
|||
case ApplicationLanguage::German: |
|||
return &priority_list_german; |
|||
case ApplicationLanguage::LatinAmericanSpanish: |
|||
return &priority_list_latin_american_spanish; |
|||
case ApplicationLanguage::Spanish: |
|||
return &priority_list_spanish; |
|||
case ApplicationLanguage::Italian: |
|||
return &priority_list_italian; |
|||
case ApplicationLanguage::Dutch: |
|||
return &priority_list_dutch; |
|||
case ApplicationLanguage::CanadianFrench: |
|||
return &priority_list_canadian_french; |
|||
case ApplicationLanguage::Portuguese: |
|||
return &priority_list_portuguese; |
|||
case ApplicationLanguage::Russian: |
|||
return &priority_list_russian; |
|||
case ApplicationLanguage::Korean: |
|||
return &priority_list_korean; |
|||
case ApplicationLanguage::TraditionalChinese: |
|||
return &priority_list_traditional_chinese; |
|||
case ApplicationLanguage::SimplifiedChinese: |
|||
return &priority_list_simplified_chinese; |
|||
default: |
|||
return nullptr; |
|||
} |
|||
} |
|||
|
|||
std::optional<ApplicationLanguage> ConvertToApplicationLanguage( |
|||
const Service::Set::LanguageCode language_code) { |
|||
switch (language_code) { |
|||
case Service::Set::LanguageCode::EN_US: |
|||
return ApplicationLanguage::AmericanEnglish; |
|||
case Service::Set::LanguageCode::EN_GB: |
|||
return ApplicationLanguage::BritishEnglish; |
|||
case Service::Set::LanguageCode::JA: |
|||
return ApplicationLanguage::Japanese; |
|||
case Service::Set::LanguageCode::FR: |
|||
return ApplicationLanguage::French; |
|||
case Service::Set::LanguageCode::DE: |
|||
return ApplicationLanguage::German; |
|||
case Service::Set::LanguageCode::ES_419: |
|||
return ApplicationLanguage::LatinAmericanSpanish; |
|||
case Service::Set::LanguageCode::ES: |
|||
return ApplicationLanguage::Spanish; |
|||
case Service::Set::LanguageCode::IT: |
|||
return ApplicationLanguage::Italian; |
|||
case Service::Set::LanguageCode::NL: |
|||
return ApplicationLanguage::Dutch; |
|||
case Service::Set::LanguageCode::FR_CA: |
|||
return ApplicationLanguage::CanadianFrench; |
|||
case Service::Set::LanguageCode::PT: |
|||
return ApplicationLanguage::Portuguese; |
|||
case Service::Set::LanguageCode::RU: |
|||
return ApplicationLanguage::Russian; |
|||
case Service::Set::LanguageCode::KO: |
|||
return ApplicationLanguage::Korean; |
|||
case Service::Set::LanguageCode::ZH_HANT: |
|||
return ApplicationLanguage::TraditionalChinese; |
|||
case Service::Set::LanguageCode::ZH_HANS: |
|||
return ApplicationLanguage::SimplifiedChinese; |
|||
default: |
|||
return std::nullopt; |
|||
} |
|||
} |
|||
|
|||
std::optional<Service::Set::LanguageCode> ConvertToLanguageCode(const ApplicationLanguage lang) { |
|||
switch (lang) { |
|||
case ApplicationLanguage::AmericanEnglish: |
|||
return Service::Set::LanguageCode::EN_US; |
|||
case ApplicationLanguage::BritishEnglish: |
|||
return Service::Set::LanguageCode::EN_GB; |
|||
case ApplicationLanguage::Japanese: |
|||
return Service::Set::LanguageCode::JA; |
|||
case ApplicationLanguage::French: |
|||
return Service::Set::LanguageCode::FR; |
|||
case ApplicationLanguage::German: |
|||
return Service::Set::LanguageCode::DE; |
|||
case ApplicationLanguage::LatinAmericanSpanish: |
|||
return Service::Set::LanguageCode::ES_419; |
|||
case ApplicationLanguage::Spanish: |
|||
return Service::Set::LanguageCode::ES; |
|||
case ApplicationLanguage::Italian: |
|||
return Service::Set::LanguageCode::IT; |
|||
case ApplicationLanguage::Dutch: |
|||
return Service::Set::LanguageCode::NL; |
|||
case ApplicationLanguage::CanadianFrench: |
|||
return Service::Set::LanguageCode::FR_CA; |
|||
case ApplicationLanguage::Portuguese: |
|||
return Service::Set::LanguageCode::PT; |
|||
case ApplicationLanguage::Russian: |
|||
return Service::Set::LanguageCode::RU; |
|||
case ApplicationLanguage::Korean: |
|||
return Service::Set::LanguageCode::KO; |
|||
case ApplicationLanguage::TraditionalChinese: |
|||
return Service::Set::LanguageCode::ZH_HANT; |
|||
case ApplicationLanguage::SimplifiedChinese: |
|||
return Service::Set::LanguageCode::ZH_HANS; |
|||
default: |
|||
return std::nullopt; |
|||
} |
|||
} |
|||
} // namespace Service::NS
|
|||
@ -0,0 +1,41 @@ |
|||
// Copyright 2018 yuzu emulator team |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
#include <optional> |
|||
#include <string> |
|||
#include "common/common_types.h" |
|||
#include "core/hle/service/set/set.h" |
|||
|
|||
namespace Service::NS { |
|||
/// This is nn::ns::detail::ApplicationLanguage |
|||
enum class ApplicationLanguage : u8 { |
|||
AmericanEnglish = 0, |
|||
BritishEnglish, |
|||
Japanese, |
|||
French, |
|||
German, |
|||
LatinAmericanSpanish, |
|||
Spanish, |
|||
Italian, |
|||
Dutch, |
|||
CanadianFrench, |
|||
Portuguese, |
|||
Russian, |
|||
Korean, |
|||
TraditionalChinese, |
|||
SimplifiedChinese, |
|||
Count |
|||
}; |
|||
using ApplicationLanguagePriorityList = const std::array<ApplicationLanguage, static_cast<std::size_t>(ApplicationLanguage::Count)>; |
|||
|
|||
constexpr u32 GetSupportedLanguageFlag(const ApplicationLanguage lang) { |
|||
return 1u << static_cast<u32>(lang); |
|||
} |
|||
|
|||
|
|||
const ApplicationLanguagePriorityList* GetApplicationLanguagePriorityList(ApplicationLanguage lang); |
|||
std::optional<ApplicationLanguage> ConvertToApplicationLanguage(Service::Set::LanguageCode language_code); |
|||
std::optional<Service::Set::LanguageCode> ConvertToLanguageCode(ApplicationLanguage lang); |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue