diff options
author | Eike Rathke <erack@redhat.com> | 2013-12-19 12:24:31 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2013-12-19 12:30:30 +0100 |
commit | 03e7a16fe2802160b8344058f225a57bdb9c59f5 (patch) | |
tree | 042a43f5b536003bd24d5f46ff04b6348e9fa9b9 /desktop/source/app/langselect.cxx | |
parent | f9d868a5fedcd8e55b1537876e4457c1139bfa3c (diff) |
use proper LanguageTag fallback instead of dumb startsWith(), fdo#68714
A ca_ES@valencia (=> ca-ES-valencia) locale did not result in
'ca-valencia' UI being selected but 'ca' only instead.
Change-Id: Ifa405add2ff7b45e030b02af4338de195b457cb2
Diffstat (limited to 'desktop/source/app/langselect.cxx')
-rw-r--r-- | desktop/source/app/langselect.cxx | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/desktop/source/app/langselect.cxx b/desktop/source/app/langselect.cxx index 49d001a087dc..291e70822222 100644 --- a/desktop/source/app/langselect.cxx +++ b/desktop/source/app/langselect.cxx @@ -58,20 +58,15 @@ OUString getInstalledLocale( return installed[i]; } } - // FIXME: It is not very clever to handle the zh-HK -> zh-TW fallback here, - // but right now, there is no place that handles those fallbacks globally: - if (locale == "zh-HK") { + ::std::vector<OUString> fallbacks( LanguageTag( locale).getFallbackStrings( false)); + for (size_t f=0; f < fallbacks.size(); ++f) { + const OUString& rf = fallbacks[f]; for (sal_Int32 i = 0; i != installed.getLength(); ++i) { - if (installed[i] == "zh-TW") { + if (installed[i] == rf) { return installed[i]; } } } - for (sal_Int32 i = 0; i != installed.getLength(); ++i) { - if (locale.startsWith(installed[i])) { - return installed[i]; - } - } return OUString(); } |