diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2020-09-03 21:07:22 +0200 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2020-09-08 10:54:52 +0200 |
commit | ce28e812b7b00f1d6c99a0c1ce76ddbd5a1a3a0e (patch) | |
tree | add18ed6a9d4354c93e33d0ce3614255634fb085 /framework | |
parent | ac4030a0ca1aecd15d068b67780b81671c5a9aca (diff) |
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>
Diffstat (limited to 'framework')
-rw-r--r-- | framework/inc/uielement/uicommanddescription.hxx | 7 | ||||
-rw-r--r-- | framework/source/uiconfiguration/uicategorydescription.cxx | 11 | ||||
-rw-r--r-- | framework/source/uielement/uicommanddescription.cxx | 50 |
3 files changed, 50 insertions, 18 deletions
diff --git a/framework/inc/uielement/uicommanddescription.hxx b/framework/inc/uielement/uicommanddescription.hxx index d2eb672cd71d..bf575113bbf9 100644 --- a/framework/inc/uielement/uicommanddescription.hxx +++ b/framework/inc/uielement/uicommanddescription.hxx @@ -21,6 +21,7 @@ #define INCLUDED_FRAMEWORK_INC_UIELEMENT_UICOMMANDDESCRIPTION_HXX #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> @@ -30,6 +31,7 @@ #include <cppuhelper/compbase.hxx> #include <cppuhelper/supportsservice.hxx> #include <rtl/ustring.hxx> +#include <i18nlangtag/languagetag.hxx> namespace framework { @@ -81,12 +83,13 @@ public: protected: UICommandDescription( const css::uno::Reference< css::uno::XComponentContext>& rxContext, bool ); void impl_fillElements(const sal_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 f7b1d3665033..d390a3e3301a 100644 --- a/framework/source/uiconfiguration/uicategorydescription.cxx +++ b/framework/source/uiconfiguration/uicategorydescription.cxx @@ -36,6 +36,7 @@ #include <cppuhelper/implbase.hxx> #include <cppuhelper/supportsservice.hxx> #include <unotools/configmgr.hxx> +#include <unotools/syslocale.hxx> #include <vcl/mnemonic.hxx> #include <comphelper/propertysequence.hxx> @@ -373,16 +374,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 02e41f47fcb3..73b21626ea32 100644 --- a/framework/source/uielement/uicommanddescription.cxx +++ b/framework/source/uielement/uicommanddescription.cxx @@ -34,6 +34,7 @@ #include <rtl/ustrbuf.hxx> #include <cppuhelper/implbase.hxx> #include <unotools/configmgr.hxx> +#include <unotools/syslocale.hxx> #include <vcl/mnemonic.hxx> #include <comphelper/propertysequence.hxx> @@ -554,21 +555,34 @@ 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; + OUString aGenericUICommand( "GenericCommands" ); + m_xGenericUICommands[rLanguage] = new ConfigurationAccess_UICommand( aGenericUICommand, xEmpty, m_xContext ); + } +} + UICommandDescription::UICommandDescription(const Reference< XComponentContext >& rxContext) : UICommandDescription_BASE(m_aMutex) , m_aPrivateResourceURL(PRIVATE_RESOURCE_URL) , m_xContext(rxContext) { - Reference< XNameAccess > xEmpty; + LanguageTag aCurrentLanguage = SvtSysLocale().GetUILanguageTag(); OUString aGenericUICommand( "GenericCommands" ); - m_xGenericUICommands = new ConfigurationAccess_UICommand( aGenericUICommand, xEmpty, m_xContext ); + + 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( aGenericUICommand ); + if ( pIter != rMap.end() ) + pIter->second = m_xGenericUICommands[aCurrentLanguage]; } UICommandDescription::UICommandDescription(const Reference< XComponentContext >& rxContext, bool) @@ -610,15 +624,18 @@ void UICommandDescription::impl_fillElements(const sal_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.getLength(); i++ ) } Any SAL_CALL UICommandDescription::getByName( const OUString& aName ) { + LanguageTag aCurrentLanguage = SvtSysLocale().GetUILanguageTag(); Any a; osl::MutexGuard g(rBHelper.rMutex); @@ -627,16 +644,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; @@ -646,8 +670,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 { |