control_metadata: Use alternate language names if AmericanEnglish isn't available

This commit is contained in:
Zach Hilman 2018-09-03 19:00:14 -04:00
parent 23d2c50479
commit e973cceadd
2 changed files with 17 additions and 4 deletions

View File

@ -21,7 +21,17 @@ NACP::NACP(VirtualFile file) : raw(std::make_unique<RawNACP>()) {
} }
const LanguageEntry& NACP::GetLanguageEntry(Language language) const { const LanguageEntry& NACP::GetLanguageEntry(Language language) const {
return raw->language_entries.at(static_cast<u8>(language)); if (language != Language::Default) {
return raw->language_entries.at(static_cast<u8>(language));
} else {
for (const auto& language_entry : raw->language_entries) {
if (!language_entry.GetApplicationName().empty())
return language_entry;
}
// Fallback to English
return GetLanguageEntry(Language::AmericanEnglish);
}
} }
std::string NACP::GetApplicationName(Language language) const { std::string NACP::GetApplicationName(Language language) const {

View File

@ -9,6 +9,7 @@
#include <string> #include <string>
#include "common/common_funcs.h" #include "common/common_funcs.h"
#include "common/common_types.h" #include "common/common_types.h"
#include "common/swap.h"
#include "core/file_sys/vfs.h" #include "core/file_sys/vfs.h"
namespace FileSys { namespace FileSys {
@ -61,6 +62,8 @@ enum class Language : u8 {
Korean = 12, Korean = 12,
Taiwanese = 13, Taiwanese = 13,
Chinese = 14, Chinese = 14,
Default = 255,
}; };
static constexpr std::array<const char*, 15> LANGUAGE_NAMES = { static constexpr std::array<const char*, 15> LANGUAGE_NAMES = {
@ -75,9 +78,9 @@ static constexpr std::array<const char*, 15> LANGUAGE_NAMES = {
class NACP { class NACP {
public: public:
explicit NACP(VirtualFile file); explicit NACP(VirtualFile file);
const LanguageEntry& GetLanguageEntry(Language language = Language::AmericanEnglish) const; const LanguageEntry& GetLanguageEntry(Language language = Language::Default) const;
std::string GetApplicationName(Language language = Language::AmericanEnglish) const; std::string GetApplicationName(Language language = Language::Default) const;
std::string GetDeveloperName(Language language = Language::AmericanEnglish) const; std::string GetDeveloperName(Language language = Language::Default) const;
u64 GetTitleId() const; u64 GetTitleId() const;
std::string GetVersionString() const; std::string GetVersionString() const;