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:
@@ -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 ) )
|
||||
// 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;
|
||||
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 ) )
|
||||
{
|
||||
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
|
||||
|
Reference in New Issue
Block a user