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
This commit is contained in:
Eike Rathke
2019-06-28 18:02:38 +02:00
parent e1c6246343
commit 049189f49d

View File

@@ -400,23 +400,23 @@ OUString Databases::processLang( const OUString& Language )
if( it == m_aLangSet.end() ) if( it == m_aLangSet.end() )
{ {
sal_Int32 idx; // XXX the old code looked for '-' and '_' as separator between
osl::DirectoryItem aDirItem; // 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 ) ) // 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; if (osl::FileBase::E_None == osl::DirectoryItem::get( getInstallPathAsURL() + rFB, aDirItem))
m_aLangSet[ Language ] = ret; {
} ret = rFB;
/* FIXME-BCP47: this is wrong, does not work as soon as script or m_aLangSet[ Language ] = ret;
* variant is involved in the language tag. */ break; // for
else if( ( ( idx = Language.indexOf( '-' ) ) != -1 || }
( idx = Language.indexOf( '_' ) ) != -1 ) &&
osl::FileBase::E_None == osl::DirectoryItem::get( getInstallPathAsURL() + Language.copy( 0,idx ),
aDirItem ) )
{
ret = Language.copy( 0,idx );
m_aLangSet[ Language ] = ret;
} }
} }
else else