summaryrefslogtreecommitdiff
path: root/xmlhelp
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2019-06-28 18:02:38 +0200
committerEike Rathke <erack@redhat.com>2019-06-28 20:49:29 +0200
commit049189f49dba87e0b6d948e2b6a5e416f1fca36b (patch)
tree74f5cd8e7d3c620f6369e5c6c4322ff476ed4d70 /xmlhelp
parente1c62463433824c3bdfb3245a19366881544afb9 (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.cxx30
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