Language Language::TryParse(const std::wstring& s) { if (IsValidCode(s)) return Language(s); // Is it a standard language code? if (std::regex_match(s, RE_LANG_CODE_PERMISSIVE)) { std::wstring s2(s); TryNormalize(s2); if (IsValidCode(s2)) return Language(s2); } // If not, perhaps it's a human-readable name (perhaps coming from the language control)? auto names = GetDisplayNamesData(); icu::UnicodeString s_icu = ToIcuStr(s); s_icu.foldCase(); std::wstring folded = StdFromIcuStr(s_icu); auto i = names.names.find(folded); if (i != names.names.end()) return Language(i->second); // Maybe it was in English? i = names.namesEng.find(folded); if (i != names.namesEng.end()) return Language(i->second); return Language(); // invalid }
int CatalogItemsComparator::CompareStrings(wxString a, wxString b) const { a.Replace("&", ""); a.Replace("_", ""); b.Replace("&", ""); b.Replace("_", ""); UErrorCode err = U_ZERO_ERROR; #if wxUSE_UNICODE_UTF8 return m_collator->compareUTF8(a.wx_str(), b.wx_str(), err); #elif SIZEOF_WCHAR_T == 2 return m_collator->compare(a.wx_str(), a.length(), b.wx_str(), b.length(), err); #else return m_collator->compare(ToIcuStr(a), ToIcuStr(b), err); #endif }