From 364cb6ee4c8484664afbf3f364030723ab41f9c2 Mon Sep 17 00:00:00 2001 From: wjyrich <1071633242@qq.com> Date: Thu, 17 Apr 2025 12:13:05 +0800 Subject: [PATCH] fix: Change the translation language of the application in dock #1100 Configure name retrieval in three levels fix-Bug-translation --- .../dock/taskmanager/desktopfileamparser.cpp | 21 ++++++++++++++++--- panels/dock/taskmanager/desktopfileamparser.h | 1 + 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/panels/dock/taskmanager/desktopfileamparser.cpp b/panels/dock/taskmanager/desktopfileamparser.cpp index ed6f16ea0..27ac23473 100644 --- a/panels/dock/taskmanager/desktopfileamparser.cpp +++ b/panels/dock/taskmanager/desktopfileamparser.cpp @@ -240,18 +240,32 @@ void DesktopFileAMParser::updateActions() auto actionNames = m_applicationInterface->actionName(); for (auto action : actions) { - auto localeName = actionNames.value(action).value(currentLanguageCode); + auto localeName = getLocaleName(currentLanguageCode, actionNames.value(action)); auto fallbackDefaultName = actionNames.value(action).value(DEFAULT_KEY); m_actions.append({action, localeName.isEmpty() ? fallbackDefaultName : localeName}); } } +QString DesktopFileAMParser::getLocaleName(const QString& currentLanguageCode, const QStringMap& names) +{ + auto localeName = names.value(currentLanguageCode); + if (currentLanguageCode.contains('_') && !(names.contains(currentLanguageCode))) + { + auto prefix = currentLanguageCode.split('_')[0]; + if (names.contains(prefix)) { + localeName = names.value(prefix); + } + } + return localeName; +} + void DesktopFileAMParser::updateLocalName() { QString currentLanguageCode = QLocale::system().name(); auto names = m_applicationInterface->name(); - auto localeName = names.value(currentLanguageCode); + auto localeName = getLocaleName(currentLanguageCode, names); auto fallbackName = names.value(DEFAULT_KEY); + m_name = localeName.isEmpty() ? fallbackName : localeName; } @@ -264,8 +278,9 @@ void DesktopFileAMParser::updateLocalGenericName() { QString currentLanguageCode = QLocale::system().name(); auto genericNames = m_applicationInterface->genericName(); - auto localeGenericName = genericNames.value(currentLanguageCode); + auto localeGenericName = getLocaleName(currentLanguageCode, genericNames); auto fallBackGenericName = genericNames.value(DEFAULT_KEY); + m_genericName = localeGenericName.isEmpty() ? fallBackGenericName : localeGenericName; } diff --git a/panels/dock/taskmanager/desktopfileamparser.h b/panels/dock/taskmanager/desktopfileamparser.h index 50d6ff075..6712ee343 100644 --- a/panels/dock/taskmanager/desktopfileamparser.h +++ b/panels/dock/taskmanager/desktopfileamparser.h @@ -47,6 +47,7 @@ class DesktopFileAMParser : public DesktopfileAbstractParser QString id2dbusPath(const QString& id); void connectToAmDBusSignal(const QString& propertyName, const char* slot); void launchByAMTool(const QString &action = QString()); + QString getLocaleName(const QString& currentLanguageCode, const QStringMap& names); private Q_SLOTS: void updateActions();