lok: make labels and tooltips translated for commands
In the online we can have multiple sessions with
different languages so load cached translations only
if match current language
Change-Id: I6fcf23f1c340c0c0daffa8862f0b74e4e458c1fc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102016
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102960
Tested-by: Jenkins
Tested-by: Szymon Kłos <szymon.klos@collabora.com>
diff --git a/framework/inc/uielement/uicommanddescription.hxx b/framework/inc/uielement/uicommanddescription.hxx
index 6886224..146b4f4 100644
--- a/framework/inc/uielement/uicommanddescription.hxx
+++ b/framework/inc/uielement/uicommanddescription.hxx
@@ -20,6 +20,7 @@
#pragma once
#include <unordered_map>
#include <map>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/frame/XModuleManager2.hpp>
@@ -29,6 +30,7 @@
#include <cppuhelper/compbase.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <rtl/ustring.hxx>
#include <i18nlangtag/languagetag.hxx>
namespace framework
{
@@ -80,12 +82,13 @@ public:
protected:
UICommandDescription( const css::uno::Reference< css::uno::XComponentContext>& rxContext, bool );
void impl_fillElements(const char* _pName);
void ensureGenericUICommandsForLanguage(const LanguageTag& rLanguage);
OUString m_aPrivateResourceURL;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
ModuleToCommandFileMap m_aModuleToCommandFileMap;
UICommandsHashMap m_aUICommandsHashMap;
css::uno::Reference< css::container::XNameAccess > m_xGenericUICommands;
std::map<LanguageTag, UICommandsHashMap> m_aUICommandsHashMap;
std::map<LanguageTag, css::uno::Reference< css::container::XNameAccess > > m_xGenericUICommands;
css::uno::Reference< css::frame::XModuleManager2 > m_xModuleManager;
};
diff --git a/framework/source/uiconfiguration/uicategorydescription.cxx b/framework/source/uiconfiguration/uicategorydescription.cxx
index 517a8d4..471bd67 100644
--- a/framework/source/uiconfiguration/uicategorydescription.cxx
+++ b/framework/source/uiconfiguration/uicategorydescription.cxx
@@ -29,6 +29,8 @@
#include <sal/log.hxx>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <unotools/configmgr.hxx>
#include <unotools/syslocale.hxx>
#include <comphelper/propertysequence.hxx>
@@ -362,16 +364,18 @@ public:
UICategoryDescription::UICategoryDescription( const Reference< XComponentContext >& rxContext ) :
UICommandDescription(rxContext,true)
{
LanguageTag aCurrentLanguage = SvtSysLocale().GetUILanguageTag();
Reference< XNameAccess > xEmpty;
OUString aGenericCategories( "GenericCategories" );
m_xGenericUICommands = new ConfigurationAccess_UICategory( aGenericCategories, xEmpty, rxContext );
m_xGenericUICommands[aCurrentLanguage] = new ConfigurationAccess_UICategory( aGenericCategories, xEmpty, rxContext );
// insert generic categories mappings
m_aModuleToCommandFileMap.emplace( OUString("generic"), aGenericCategories );
UICommandsHashMap::iterator pCatIter = m_aUICommandsHashMap.find( aGenericCategories );
if ( pCatIter != m_aUICommandsHashMap.end() )
pCatIter->second = m_xGenericUICommands;
auto& rMap = m_aUICommandsHashMap[aCurrentLanguage];
UICommandsHashMap::iterator pCatIter = rMap.find( aGenericCategories );
if ( pCatIter != rMap.end() )
pCatIter->second = m_xGenericUICommands[aCurrentLanguage];
impl_fillElements("ooSetupFactoryCmdCategoryConfigRef");
}
diff --git a/framework/source/uielement/uicommanddescription.cxx b/framework/source/uielement/uicommanddescription.cxx
index f53c2a5..28c606e 100644
--- a/framework/source/uielement/uicommanddescription.cxx
+++ b/framework/source/uielement/uicommanddescription.cxx
@@ -31,6 +31,7 @@
#include <cppuhelper/implbase.hxx>
#include <unotools/configmgr.hxx>
#include <unotools/syslocale.hxx>
#include <vcl/mnemonic.hxx>
#include <comphelper/propertysequence.hxx>
@@ -552,21 +553,32 @@ void SAL_CALL ConfigurationAccess_UICommand::disposing( const EventObject& aEven
}
}
void UICommandDescription::ensureGenericUICommandsForLanguage(const LanguageTag& rLanguage)
{
auto xGenericUICommands = m_xGenericUICommands.find(rLanguage);
if (xGenericUICommands == m_xGenericUICommands.end())
{
Reference< XNameAccess > xEmpty;
m_xGenericUICommands[rLanguage] = new ConfigurationAccess_UICommand( "GenericCommands", xEmpty, m_xContext );
}
}
UICommandDescription::UICommandDescription(const Reference< XComponentContext >& rxContext)
: UICommandDescription_BASE(m_aMutex)
, m_aPrivateResourceURL(PRIVATE_RESOURCE_URL)
, m_xContext(rxContext)
{
Reference< XNameAccess > xEmpty;
OUString aGenericUICommand( "GenericCommands" );
m_xGenericUICommands = new ConfigurationAccess_UICommand( aGenericUICommand, xEmpty, m_xContext );
LanguageTag aCurrentLanguage = SvtSysLocale().GetUILanguageTag();
ensureGenericUICommandsForLanguage(aCurrentLanguage);
impl_fillElements("ooSetupFactoryCommandConfigRef");
// insert generic commands
UICommandsHashMap::iterator pIter = m_aUICommandsHashMap.find( aGenericUICommand );
if ( pIter != m_aUICommandsHashMap.end() )
pIter->second = m_xGenericUICommands;
auto& rMap = m_aUICommandsHashMap[aCurrentLanguage];
UICommandsHashMap::iterator pIter = rMap.find( "GenericCommands" );
if ( pIter != rMap.end() )
pIter->second = m_xGenericUICommands[aCurrentLanguage];
}
UICommandDescription::UICommandDescription(const Reference< XComponentContext >& rxContext, bool)
@@ -606,15 +618,18 @@ void UICommandDescription::impl_fillElements(const char* _pName)
m_aModuleToCommandFileMap.emplace( aModuleIdentifier, aCommandStr );
// Create second mapping Command File ==> commands instance
UICommandsHashMap::iterator pIter = m_aUICommandsHashMap.find( aCommandStr );
if ( pIter == m_aUICommandsHashMap.end() )
m_aUICommandsHashMap.emplace( aCommandStr, Reference< XNameAccess >() );
LanguageTag aCurrentLanguage = SvtSysLocale().GetUILanguageTag();
auto& rMap = m_aUICommandsHashMap[aCurrentLanguage];
UICommandsHashMap::iterator pIter = rMap.find( aCommandStr );
if ( pIter == rMap.end() )
rMap.emplace( aCommandStr, Reference< XNameAccess >() );
}
} // for ( sal_Int32 i = 0; i < aElementNames.(); i++ )
}
Any SAL_CALL UICommandDescription::getByName( const OUString& aName )
{
LanguageTag aCurrentLanguage = SvtSysLocale().GetUILanguageTag();
Any a;
osl::MutexGuard g(rBHelper.rMutex);
@@ -623,16 +638,23 @@ Any SAL_CALL UICommandDescription::getByName( const OUString& aName )
if ( pM2CIter != m_aModuleToCommandFileMap.end() )
{
OUString aCommandFile( pM2CIter->second );
UICommandsHashMap::iterator pIter = m_aUICommandsHashMap.find( aCommandFile );
if ( pIter != m_aUICommandsHashMap.end() )
auto pMapIter = m_aUICommandsHashMap.find( aCurrentLanguage );
if ( pMapIter == m_aUICommandsHashMap.end() )
impl_fillElements("ooSetupFactoryCommandConfigRef");
auto& rMap = m_aUICommandsHashMap[aCurrentLanguage];
UICommandsHashMap::iterator pIter = rMap.find( aCommandFile );
if ( pIter != rMap.end() )
{
if ( pIter->second.is() )
a <<= pIter->second;
else
{
ensureGenericUICommandsForLanguage(aCurrentLanguage);
Reference< XNameAccess > xUICommands;
ConfigurationAccess_UICommand* pUICommands = new ConfigurationAccess_UICommand( aCommandFile,
m_xGenericUICommands,
m_xGenericUICommands[aCurrentLanguage],
m_xContext );
xUICommands.set( static_cast< cppu::OWeakObject* >( pUICommands ),UNO_QUERY );
pIter->second = xUICommands;
@@ -642,8 +664,10 @@ Any SAL_CALL UICommandDescription::getByName( const OUString& aName )
}
else if ( !m_aPrivateResourceURL.isEmpty() && aName.startsWith( m_aPrivateResourceURL ) )
{
ensureGenericUICommandsForLanguage(aCurrentLanguage);
// special keys to retrieve information about a set of commands
return m_xGenericUICommands->getByName( aName );
return m_xGenericUICommands[aCurrentLanguage]->getByName( aName );
}
else
{