Skip to content

Commit 497f361

Browse files
committed
language code may have a single segment
1 parent c4da8c0 commit 497f361

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp

+27-13
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace
7575
// TODO: unit testing.
7676
std::optional<std::wstring> ParseLanguageCode(const wchar_t* bcp47)
7777
{
78-
// the IETF BCP 47 language tag syntax is: language[-script][-region][-variant[*][-extension*][-privateuse*]]
78+
// the IETF BCP 47 language tag syntax is: language[-script][-region]...
7979
std::vector<std::wstring> segments;
8080
std::wstring cur;
8181
// TODO: use C++20 - ranges::views::split_view in the future.
@@ -102,10 +102,30 @@ namespace
102102

103103
switch (segments.size())
104104
{
105+
case 1:
106+
return segments[0];
105107
case 2:
106-
return segments[0] + L"-" + segments[1];
108+
if (segments[1].size() == 2)
109+
{ // segments[1] is a region subtag.
110+
return segments[0] + L"-" + segments[1];
111+
}
112+
else
113+
{
114+
return segments[0];
115+
}
107116
case 3:
108-
return segments[0] + L"-" + segments[2];
117+
if (segments[1].size() == 2)
118+
{ // segments[1] is a region subtag.
119+
return segments[0] + L"-" + segments[1];
120+
}
121+
else if (segments[1].size() != 2 && segments[2].size() == 2)
122+
{ // segments[2] is a region subtag.
123+
return segments[0] + L"-" + segments[2];
124+
}
125+
else
126+
{
127+
return segments[0];
128+
}
109129
default:
110130
return std::nullopt;
111131
}
@@ -144,20 +164,14 @@ CurrencyDataLoader::CurrencyDataLoader(const wchar_t* forcedResponseLanguage)
144164
{
145165
if (forcedResponseLanguage != nullptr)
146166
{
167+
assert(wcslen(forcedResponseLanguage) > 0 && "forcedResponseLanguage shall not be empty.");
147168
m_responseLanguage = ref new Platform::String(forcedResponseLanguage);
148169
}
149-
else
170+
else if (GlobalizationPreferences::Languages->Size > 0)
150171
{
151-
if (GlobalizationPreferences::Languages->Size > 0)
152-
{
153-
if (auto lang = ParseLanguageCode(GlobalizationPreferences::Languages->GetAt(0)->Data()); lang.has_value())
154-
{
155-
m_responseLanguage = ref new String{ lang->c_str() };
156-
}
157-
}
158-
else
172+
if (auto lang = ParseLanguageCode(GlobalizationPreferences::Languages->GetAt(0)->Data()); lang.has_value())
159173
{
160-
m_responseLanguage = L"en-US";
174+
m_responseLanguage = ref new Platform::String{ lang->c_str() };
161175
}
162176
}
163177

0 commit comments

Comments
 (0)