sc/source/core/tool/addincol.cxx | 54 ++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-)
New commits: commit 632fdbb7fb9fd296aaa4c473070aecc3c0dd019c Author: Eike Rathke <er...@redhat.com> AuthorDate: Mon Apr 3 19:28:59 2023 +0200 Commit: Eike Rathke <er...@redhat.com> CommitDate: Mon Apr 3 21:22:38 2023 +0200 Resolves: tdf#154582 Obtain English DisplayName before CompatibilityName ... for Add-Ins from configuration. Change-Id: If13d692ca7550e69d2f6e3ff72747d17aee3e7f7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149995 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Jenkins diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx index c16f8f3e6f5e..c9db273f54a1 100644 --- a/sc/source/core/tool/addincol.cxx +++ b/sc/source/core/tool/addincol.cxx @@ -360,7 +360,8 @@ void ScUnoAddInCollection::ReadConfiguration() ScAddInCfg& rAddInConfig = SC_MOD()->GetAddInCfg(); - // additional, temporary config item for the compatibility names + // Additional, temporary config item for the display names and + // compatibility names. ScLinkConfigItem aAllLocalesConfig( CFGPATH_ADDINS, ConfigItemMode::AllLocales ); // CommitLink is not used (only reading values) @@ -441,6 +442,35 @@ void ScUnoAddInCollection::ReadConfiguration() nCategory = lcl_GetCategory( aCategoryName ); } + // get English display name + + OUString aDisplayNamePath(aFuncPropPath + CFGSTR_DISPLAYNAME); + uno::Sequence<OUString> aDisplayNamePropNames( &aDisplayNamePath, 1 ); + + uno::Sequence<uno::Any> aDisplayNameProperties = aAllLocalesConfig.GetProperties( aDisplayNamePropNames ); + if ( aDisplayNameProperties.getLength() == 1 ) + { + uno::Sequence<beans::PropertyValue> aLocalEntries; + if ( aDisplayNameProperties[0] >>= aLocalEntries ) + { + for ( const beans::PropertyValue& rConfig : std::as_const(aLocalEntries) ) + { + // PropertyValue name is the locale ("convert" from + // string to canonicalize). + OUString aLocale( LanguageTag( rConfig.Name, true).getBcp47( false)); + // PropertyValue value is the localized value (string in this case). + OUString aName; + rConfig.Value >>= aName; + // Accept 'en' and 'en-...' but prefer 'en-US'. + if (aLocale == "en-US" && !aName.isEmpty()) + aEnglishName = aName; + else if (aEnglishName.isEmpty() && (aLocale == "en" || aLocale.startsWith("en-"))) + aEnglishName = aName; + } + } + } + bool bNeedEnglish = aEnglishName.isEmpty(); + // get compatibility names ::std::vector<ScUnoAddInFuncData::LocalizedName> aCompNames; @@ -457,17 +487,23 @@ void ScUnoAddInCollection::ReadConfiguration() for ( const beans::PropertyValue& rConfig : std::as_const(aLocalEntries) ) { // PropertyValue name is the locale ("convert" from - // string to canonicalize) + // string to canonicalize). OUString aLocale( LanguageTag( rConfig.Name, true).getBcp47( false)); - // PropertyValue value is the localized value (string in this case) + // PropertyValue value is the localized value (string in this case). OUString aName; rConfig.Value >>= aName; - aCompNames.emplace_back( aLocale, aName); - // Accept 'en' and 'en-...' but prefer 'en-US'. - if (aLocale == "en-US") - aEnglishName = aName; - else if (aEnglishName.isEmpty() && (aLocale == "en" || aLocale.startsWith("en-"))) - aEnglishName = aName; + if (!aName.isEmpty()) + { + aCompNames.emplace_back( aLocale, aName); + if (bNeedEnglish) + { + // Accept 'en' and 'en-...' but prefer 'en-US'. + if (aLocale == "en-US") + aEnglishName = aName; + else if (aEnglishName.isEmpty() && (aLocale == "en" || aLocale.startsWith("en-"))) + aEnglishName = aName; + } + } } } }