diff options
author | Eike Rathke <erack@redhat.com> | 2019-06-28 18:02:38 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2019-06-28 20:49:29 +0200 |
commit | 049189f49dba87e0b6d948e2b6a5e416f1fca36b (patch) | |
tree | 74f5cd8e7d3c620f6369e5c6c4322ff476ed4d70 /xmlhelp | |
parent | e1c62463433824c3bdfb3245a19366881544afb9 (diff) |
Use LanguageTag::getFallbackStrings() instead of old dumb hard coded stuff
So finding correct offline help will actually work with language
tags containing scripts or variants.
Change-Id: I493041fbfe62dc7cd2e035592fe94ef9fe3c2480
Reviewed-on: https://gerrit.libreoffice.org/74855
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
Diffstat (limited to 'xmlhelp')
-rw-r--r-- | xmlhelp/source/cxxhelp/provider/databases.cxx | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/xmlhelp/source/cxxhelp/provider/databases.cxx b/xmlhelp/source/cxxhelp/provider/databases.cxx index 9f75248910b6..04aba4c5991e 100644 --- a/xmlhelp/source/cxxhelp/provider/databases.cxx +++ b/xmlhelp/source/cxxhelp/provider/databases.cxx @@ -400,23 +400,23 @@ OUString Databases::processLang( const OUString& Language ) if( it == m_aLangSet.end() ) { - sal_Int32 idx; - osl::DirectoryItem aDirItem; + // XXX the old code looked for '-' and '_' as separator between + // language and country, no idea if '_' actually still can happen + // (probably not), but play safe and keep that and transform to proper + // BCP47. + const OUString aBcp47( Language.replaceAll( "_", "-")); - if( osl::FileBase::E_None == osl::DirectoryItem::get( getInstallPathAsURL() + Language,aDirItem ) ) - { - ret = Language; - m_aLangSet[ Language ] = ret; - } - /* FIXME-BCP47: this is wrong, does not work as soon as script or - * variant is involved in the language tag. */ - else if( ( ( idx = Language.indexOf( '-' ) ) != -1 || - ( idx = Language.indexOf( '_' ) ) != -1 ) && - osl::FileBase::E_None == osl::DirectoryItem::get( getInstallPathAsURL() + Language.copy( 0,idx ), - aDirItem ) ) + // Try if language tag or fallbacks are installed. + osl::DirectoryItem aDirItem; + std::vector<OUString> aFallbacks( LanguageTag( aBcp47).getFallbackStrings(true)); + for (auto const & rFB : aFallbacks) { - ret = Language.copy( 0,idx ); - m_aLangSet[ Language ] = ret; + if (osl::FileBase::E_None == osl::DirectoryItem::get( getInstallPathAsURL() + rFB, aDirItem)) + { + ret = rFB; + m_aLangSet[ Language ] = ret; + break; // for + } } } else |