Browse Source
Merge pull request #2510 from SciresM/desired_language
Merge pull request #2510 from SciresM/desired_language
Implement/Fix IApplicationFunctions::GetDesiredLanguagence_cpp
committed by
GitHub
10 changed files with 1081 additions and 402 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
-
12src/core/hle/service/ns/errors.h
-
392src/core/hle/service/ns/language.cpp
-
45src/core/hle/service/ns/language.h
-
862src/core/hle/service/ns/ns.cpp
-
82src/core/hle/service/ns/ns.h
-
42src/core/hle/service/ns/ns_language.h
@ -0,0 +1,12 @@ |
|||
// 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,392 @@ |
|||
// Copyright 2019 yuzu emulator team
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "core/hle/service/ns/language.h"
|
|||
#include "core/hle/service/set/set.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( |
|||
const 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 Set::LanguageCode language_code) { |
|||
switch (language_code) { |
|||
case Set::LanguageCode::EN_US: |
|||
return ApplicationLanguage::AmericanEnglish; |
|||
case Set::LanguageCode::EN_GB: |
|||
return ApplicationLanguage::BritishEnglish; |
|||
case Set::LanguageCode::JA: |
|||
return ApplicationLanguage::Japanese; |
|||
case Set::LanguageCode::FR: |
|||
return ApplicationLanguage::French; |
|||
case Set::LanguageCode::DE: |
|||
return ApplicationLanguage::German; |
|||
case Set::LanguageCode::ES_419: |
|||
return ApplicationLanguage::LatinAmericanSpanish; |
|||
case Set::LanguageCode::ES: |
|||
return ApplicationLanguage::Spanish; |
|||
case Set::LanguageCode::IT: |
|||
return ApplicationLanguage::Italian; |
|||
case Set::LanguageCode::NL: |
|||
return ApplicationLanguage::Dutch; |
|||
case Set::LanguageCode::FR_CA: |
|||
return ApplicationLanguage::CanadianFrench; |
|||
case Set::LanguageCode::PT: |
|||
return ApplicationLanguage::Portuguese; |
|||
case Set::LanguageCode::RU: |
|||
return ApplicationLanguage::Russian; |
|||
case Set::LanguageCode::KO: |
|||
return ApplicationLanguage::Korean; |
|||
case Set::LanguageCode::ZH_HANT: |
|||
return ApplicationLanguage::TraditionalChinese; |
|||
case Set::LanguageCode::ZH_HANS: |
|||
return ApplicationLanguage::SimplifiedChinese; |
|||
default: |
|||
return std::nullopt; |
|||
} |
|||
} |
|||
|
|||
std::optional<Set::LanguageCode> ConvertToLanguageCode(const ApplicationLanguage lang) { |
|||
switch (lang) { |
|||
case ApplicationLanguage::AmericanEnglish: |
|||
return Set::LanguageCode::EN_US; |
|||
case ApplicationLanguage::BritishEnglish: |
|||
return Set::LanguageCode::EN_GB; |
|||
case ApplicationLanguage::Japanese: |
|||
return Set::LanguageCode::JA; |
|||
case ApplicationLanguage::French: |
|||
return Set::LanguageCode::FR; |
|||
case ApplicationLanguage::German: |
|||
return Set::LanguageCode::DE; |
|||
case ApplicationLanguage::LatinAmericanSpanish: |
|||
return Set::LanguageCode::ES_419; |
|||
case ApplicationLanguage::Spanish: |
|||
return Set::LanguageCode::ES; |
|||
case ApplicationLanguage::Italian: |
|||
return Set::LanguageCode::IT; |
|||
case ApplicationLanguage::Dutch: |
|||
return Set::LanguageCode::NL; |
|||
case ApplicationLanguage::CanadianFrench: |
|||
return Set::LanguageCode::FR_CA; |
|||
case ApplicationLanguage::Portuguese: |
|||
return Set::LanguageCode::PT; |
|||
case ApplicationLanguage::Russian: |
|||
return Set::LanguageCode::RU; |
|||
case ApplicationLanguage::Korean: |
|||
return Set::LanguageCode::KO; |
|||
case ApplicationLanguage::TraditionalChinese: |
|||
return Set::LanguageCode::ZH_HANT; |
|||
case ApplicationLanguage::SimplifiedChinese: |
|||
return Set::LanguageCode::ZH_HANS; |
|||
default: |
|||
return std::nullopt; |
|||
} |
|||
} |
|||
} // namespace Service::NS
|
|||
@ -0,0 +1,45 @@ |
|||
// Copyright 2019 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" |
|||
|
|||
namespace Service::Set { |
|||
enum class LanguageCode : u64; |
|||
} |
|||
|
|||
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(Set::LanguageCode language_code); |
|||
std::optional<Set::LanguageCode> ConvertToLanguageCode(ApplicationLanguage lang); |
|||
} // namespace Service::NS |
|||
@ -0,0 +1,42 @@ |
|||
// Copyright 2019 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); |
|||
} // namespace Service::NS |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue