@@ -75,7 +75,7 @@ namespace
75
75
// TODO: unit testing.
76
76
std::optional<std::wstring> ParseLanguageCode (const wchar_t * bcp47)
77
77
{
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]...
79
79
std::vector<std::wstring> segments;
80
80
std::wstring cur;
81
81
// TODO: use C++20 - ranges::views::split_view in the future.
@@ -102,10 +102,30 @@ namespace
102
102
103
103
switch (segments.size ())
104
104
{
105
+ case 1 :
106
+ return segments[0 ];
105
107
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
+ }
107
116
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
+ }
109
129
default :
110
130
return std::nullopt;
111
131
}
@@ -144,20 +164,14 @@ CurrencyDataLoader::CurrencyDataLoader(const wchar_t* forcedResponseLanguage)
144
164
{
145
165
if (forcedResponseLanguage != nullptr )
146
166
{
167
+ assert (wcslen (forcedResponseLanguage) > 0 && " forcedResponseLanguage shall not be empty." );
147
168
m_responseLanguage = ref new Platform::String (forcedResponseLanguage);
148
169
}
149
- else
170
+ else if (GlobalizationPreferences::Languages-> Size > 0 )
150
171
{
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 ())
159
173
{
160
- m_responseLanguage = L" en-US " ;
174
+ m_responseLanguage = ref new Platform::String{ lang-> c_str () } ;
161
175
}
162
176
}
163
177
0 commit comments