3 #include <c++utilities/conversion/stringconversion.h>
5 #include <unordered_map>
7 using namespace std::literals;
12 static const auto &languageNames_ISO_639_2_b()
14 #include "resources/iso_language_codes.h"
15 return languageNames_iso_639_2_b;
22 inline static bool isLanguageDefined_ISO_639_2(
const std::string &languageSpecification)
24 return !languageSpecification.empty() && languageSpecification !=
"und" && languageSpecification !=
"XXX";
31 static const std::string &languageName_ISO_639_2(
const std::string &isoCode)
33 static const std::string empty;
34 if (!isLanguageDefined_ISO_639_2(isoCode)) {
37 const auto &mapping = languageNames_ISO_639_2_b();
38 const auto i = mapping.find(isoCode);
39 if (i == mapping.cend()) {
64 for (
const auto &detail : *
this) {
65 if (!detail.empty() && detail.format == format && isLanguageDefined_ISO_639_2(detail)) {
69 return LocaleDetail::getEmpty();
87 auto format = LocaleFormat::Unknown;
89 for (
const auto &detail : *
this) {
91 &&
static_cast<std::underlying_type_t<LocaleFormat>
>(detail.format) >=
static_cast<std::underlying_type_t<LocaleFormat>
>(format)) {
92 if (detail.format == preferredFormat) {
96 mostRelevantDetail = &detail;
99 if (!mostRelevantDetail || !isLanguageDefined_ISO_639_2(*mostRelevantDetail)) {
100 return LocaleDetail::getEmpty();
102 return *mostRelevantDetail;
112 for (
const auto &detail : *
this) {
113 if (detail.format == LocaleFormat::ISO_639_2_B || detail.format == LocaleFormat::ISO_639_2_T) {
114 return languageName_ISO_639_2(detail);
117 return LocaleDetail::getEmpty();
124 const std::string &Locale::fullOrSomeAbbreviatedName()
const
126 if (
const auto &name = fullName(); !name.empty()) {
129 return someAbbreviatedName();
135 std::string Locale::toString()
const
137 return CppUtilities::joinStrings<std::vector<LocaleDetail>, std::string>(*
this,
LocaleDetail(
", "sv, LocaleFormat::Unknown),
true);
Contains all classes and functions of the TagInfo library.
LocaleFormat
The LocaleFormat enum class specifies the format used by a LocaleDetail.
The LocaleDetail struct specifies a language and/or country.
const std::string & fullName() const
Returns the full name of the locale, e.g.