[Libreoffice-commits] core.git: sfx2/source

Eike Rathke erack at redhat.com
Wed Dec 6 14:01:58 UTC 2017


 sfx2/source/appl/sfxhelp.cxx |   24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

New commits:
commit 6a8fc4ee51bedc40d4e39690bc65eb4c2e8a0074
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Dec 6 14:59:23 2017 +0100

    Use proper language fallback chain to find installed help
    
    The previous code first tried the full tag and if not successful a
    tag up to the first hyphen, which so far was the same as the
    fallback chain but may differ for more sophisticated language tags
    in the future.
    
    Change-Id: I01dd8618c77c30e92a5fef6d01d0da56f70353f1

diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx
index 2df8b5ac7012..af38b75182cb 100644
--- a/sfx2/source/appl/sfxhelp.cxx
+++ b/sfx2/source/appl/sfxhelp.cxx
@@ -102,7 +102,7 @@ static OUString const & HelpLocaleString()
     if (aLocaleStr.isEmpty())
     {
         const OUString aEnglish( "en"  );
-        // detect installed locale
+        // obtain selected UI language (/org.openoffice.Setup/L10N/ooLocale)
         aLocaleStr = utl::ConfigManager::getLocale();
         bool bOk = !aLocaleStr.isEmpty();
         if ( !bOk )
@@ -113,21 +113,19 @@ static OUString const & HelpLocaleString()
             utl::Bootstrap::locateBaseInstallation(aBaseInstallPath);
             static const char szHelpPath[] = "/help/";
 
-            OUString sHelpPath = aBaseInstallPath + szHelpPath + aLocaleStr;
-            osl::DirectoryItem aDirItem;
-
-            if (osl::DirectoryItem::get(sHelpPath, aDirItem) != osl::FileBase::E_None)
+            // Use a fallback chain starting from full tag, which here usually
+            // is only the language hence only one value, but can also be en-US
+            // or ca-valencia or include script tags.
+            std::vector< OUString > aFallbacks( LanguageTag( aLocaleStr).getFallbackStrings( true));
+            for (auto const& rTag : aFallbacks)
             {
-                bOk = false;
-                OUString sLang(aLocaleStr);
-                sal_Int32 nSepPos = sLang.indexOf( '-' );
-                if (nSepPos != -1)
+                OUString sHelpPath( aBaseInstallPath + szHelpPath + rTag);
+                osl::DirectoryItem aDirItem;
+                if (osl::DirectoryItem::get(sHelpPath, aDirItem) == osl::FileBase::E_None)
                 {
+                    aLocaleStr = rTag;
                     bOk = true;
-                    sLang = sLang.copy( 0, nSepPos );
-                    sHelpPath = aBaseInstallPath + szHelpPath + sLang;
-                    if (osl::DirectoryItem::get(sHelpPath, aDirItem) != osl::FileBase::E_None)
-                        bOk = false;
+                    break;
                 }
             }
         }


More information about the Libreoffice-commits mailing list