summaryrefslogtreecommitdiff
path: root/user/kconfigwidgets/languagename.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2019-04-18 21:29:21 +0000
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2019-04-18 21:29:21 +0000
commitcd1f771cb0d2689d29c74a865ec5d44530044c1c (patch)
treebf04c1338bbb4569bac5467c2ecdf9422bc9f885 /user/kconfigwidgets/languagename.patch
parenta5076dedd11eb90110425e930b355f0306ad3c07 (diff)
downloadpackages-cd1f771cb0d2689d29c74a865ec5d44530044c1c.tar.gz
packages-cd1f771cb0d2689d29c74a865ec5d44530044c1c.tar.bz2
packages-cd1f771cb0d2689d29c74a865ec5d44530044c1c.tar.xz
packages-cd1f771cb0d2689d29c74a865ec5d44530044c1c.zip
user/kconfigwidgets: backport KLanguageName
Diffstat (limited to 'user/kconfigwidgets/languagename.patch')
-rw-r--r--user/kconfigwidgets/languagename.patch716
1 files changed, 716 insertions, 0 deletions
diff --git a/user/kconfigwidgets/languagename.patch b/user/kconfigwidgets/languagename.patch
new file mode 100644
index 000000000..d3eb89f54
--- /dev/null
+++ b/user/kconfigwidgets/languagename.patch
@@ -0,0 +1,716 @@
+From 91077def022a999ce46c91347f1167626266f460 Mon Sep 17 00:00:00 2001
+From: Albert Astals Cid <aacid@kde.org>
+Date: Mon, 7 Jan 2019 11:42:28 +0100
+Subject: Add KLanguageName
+
+Summary: KLanguageName is a helper namespace that returns the name of a given language code.
+
+Reviewers: apol
+
+Reviewed By: apol
+
+Subscribers: hein, kde-frameworks-devel, sitter, markg, apol
+
+Tags: #frameworks
+
+Differential Revision: https://phabricator.kde.org/D10446
+---
+ autotests/CMakeLists.txt | 27 ++++++
+ .../kf5_entry_data.cmake/locale/ca/kf5_entry.cmake | 98 ++++++++++++++++++++++
+ .../kf5_entry_data.cmake/locale/de/kf5_entry.cmake | 98 ++++++++++++++++++++++
+ .../locale/en_US/kf5_entry.cmake | 44 ++++++++++
+ autotests/kf5_entry_data.cmake/locale/es/.keep | 0
+ .../kf5_entry_data.cmake/locale/fr/kf5_entry.cmake | 2 +
+ .../kf5_entry_data.cmake/locale/pt/kf5_entry.cmake | 98 ++++++++++++++++++++++
+ autotests/klanguagenametest.cpp | 92 ++++++++++++++++++++
+ src/CMakeLists.txt | 2 +
+ src/klanguagename.cpp | 67 +++++++++++++++
+ src/klanguagename.h | 63 ++++++++++++++
+ 11 files changed, 591 insertions(+)
+ create mode 100644 autotests/kf5_entry_data.cmake/locale/ca/kf5_entry.cmake
+ create mode 100644 autotests/kf5_entry_data.cmake/locale/de/kf5_entry.cmake
+ create mode 100644 autotests/kf5_entry_data.cmake/locale/en_US/kf5_entry.cmake
+ create mode 100644 autotests/kf5_entry_data.cmake/locale/es/.keep
+ create mode 100644 autotests/kf5_entry_data.cmake/locale/fr/kf5_entry.cmake
+ create mode 100644 autotests/kf5_entry_data.cmake/locale/pt/kf5_entry.cmake
+ create mode 100644 autotests/klanguagenametest.cpp
+ create mode 100644 src/klanguagename.cpp
+ create mode 100644 src/klanguagename.h
+
+diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt
+index 1917ecb..37caaf9 100644
+--- a/autotests/CMakeLists.txt
++++ b/autotests/CMakeLists.txt
+@@ -9,5 +9,32 @@ set(kconfigdialog_unittest_SRCS kconfigdialog_unittest.cpp)
+ kconfig_add_kcfg_files(kconfigdialog_unittest_SRCS GENERATE_MOC signaltest.kcfgc)
+ ecm_add_test(${kconfigdialog_unittest_SRCS} TEST_NAME "kconfigdialog_unittest" LINK_LIBRARIES Qt5::Test KF5::ConfigWidgets)
+
++set(lang_entries
++ ca
++ de
++ en_US
++ es # must not have file!
++ fr
++ pt
++)
++
++# scripty would mangle all *.desktop files, since that'd have potential of
++# breaking the test we'll need to bypass scripty by not having our files called
++# .desktop!
++# Do note that we pop these into CMAKE_LIBRARY_OUTPUT_DIRECTORY so QFINDTESTDATA
++# is able to find the fixtures in the bin dir as KDECMakeSettings sets a special
++# output dir.
++foreach(lang ${lang_entries})
++ set(src_dir "${CMAKE_CURRENT_SOURCE_DIR}/kf5_entry_data.cmake/locale/${lang}")
++ set(src_file "${src_dir}/kf5_entry.cmake")
++ set(bin_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/kf5_entry_data/locale/${lang}")
++ set(bin_file "${bin_dir}/kf5_entry.desktop")
++ file(MAKE_DIRECTORY ${bin_dir})
++ if(EXISTS ${src_file}) # not all languages have entries
++ configure_file(${src_file} ${bin_file} COPYONLY)
++ endif()
++endforeach()
++
++ecm_add_test(klanguagenametest.cpp LINK_LIBRARIES Qt5::Test KF5::ConfigWidgets)
+
+ ecm_add_test(krecentfilesactiontest.cpp TEST_NAME "krecentfilesaction_test" LINK_LIBRARIES Qt5::Test KF5::ConfigWidgets)
+diff --git a/autotests/kf5_entry_data.cmake/locale/ca/kf5_entry.cmake b/autotests/kf5_entry_data.cmake/locale/ca/kf5_entry.cmake
+new file mode 100644
+index 0000000..a81564c
+--- /dev/null
++++ b/autotests/kf5_entry_data.cmake/locale/ca/kf5_entry.cmake
+@@ -0,0 +1,98 @@
++[KCM Locale]
++Name=Catalan
++Name[af]=Katelaans
++Name[ar]=الكاتالانيّة
++Name[as]=কাটালান
++Name[be]=Каталонская
++Name[be@latin]=Katalanskaja
++Name[bg]=Каталонски
++Name[bn]=ক্যাটালান
++Name[bn_IN]=ক্যাটালান
++Name[br]=Katalaneg
++Name[bs]=katalonski
++Name[ca]=Català
++Name[ca@valencia]=Català
++Name[cs]=Katalánský
++Name[csb]=Katalońsczi
++Name[cy]=Catalaneg
++Name[da]=Catalansk
++Name[de]=Katalanisch
++Name[el]=Καταλανικά
++Name[en_GB]=Catalan
++Name[eo]=Kataluna
++Name[es]=Catalán
++Name[et]=Katalaani
++Name[eu]=Katalaniera
++Name[fa]=کاتالان
++Name[fi]=Katalaani
++Name[fr]=Catalan
++Name[fy]=Katalaansk
++Name[ga]=Catalóinis
++Name[gd]=Catalanais
++Name[gl]=Catalán
++Name[gu]=કેટેલાન
++Name[he]=קטלונית
++Name[hi]=केटेलन
++Name[hne]=केटेलन
++Name[hr]=Katalonski
++Name[hsb]=Katalansce
++Name[hu]=Katalán
++Name[ia]=Catalan
++Name[id]=Catalan
++Name[is]=Katalónska
++Name[it]=Catalano
++Name[ja]=カタロニア語
++Name[kk]=Каталанша
++Name[km]=កាតាឡាន
++Name[kn]=ಕ್ಯಾಟಲಾನ್
++Name[ko]=카탈루냐어
++Name[ku]=Katalan
++Name[lb]=Katalanesch
++Name[lt]=Katalonų
++Name[lv]=Kataloņu
++Name[mai]=केटालान
++Name[mk]=Каталонски
++Name[ml]=കറ്റാലന്‍
++Name[mr]=केटेलन
++Name[ms]=Catalan
++Name[nb]=Katalansk
++Name[nds]=Katalaansch
++Name[ne]=कातालान
++Name[nl]=Catalaans
++Name[nn]=Katalansk
++Name[oc]=Catalan
++Name[or]=କେଟାଲାନ
++Name[pa]=ਕਾਟਾਲਾਨ
++Name[pl]=Kataloński
++Name[ps]=کېټېلېن
++Name[pt]=Catalão
++Name[pt_BR]=Catalão
++Name[ro]=Catalană
++Name[ru]=Каталонский
++Name[se]=Katalánagiella
++Name[si]=කැටලන්
++Name[sk]=Katalánčina
++Name[sl]=Katalonščina
++Name[sq]=Katalanisht
++Name[sr]=каталонски
++Name[sr@ijekavian]=каталонски
++Name[sr@ijekavianlatin]=katalonski
++Name[sr@latin]=katalonski
++Name[sv]=Katalanska
++Name[ta]=கெடலான்
++Name[te]=కెటలన్
++Name[tg]=Каталанӣ
++Name[th]=ภาษาคาตาลัน
++Name[tr]=Katalanca
++Name[tt]=Каталон
++Name[ug]=كاتالانچە
++Name[uk]=Каталанська
++Name[uz]=Katalancha
++Name[uz@cyrillic]=Каталанча
++Name[vi]=Catalan
++Name[wa]=Catalan
++Name[xh]=Catalan
++Name[x-test]=xxCatalanxx
++Name[zh_CN]=加泰罗尼亚语
++Name[zh_HK]=加泰隆尼亞語
++Name[zh_TW]=加泰羅尼亞語
+diff --git a/autotests/kf5_entry_data.cmake/locale/de/kf5_entry.cmake b/autotests/kf5_entry_data.cmake/locale/de/kf5_entry.cmake
+new file mode 100644
+index 0000000..e8146cb
+--- /dev/null
++++ b/autotests/kf5_entry_data.cmake/locale/de/kf5_entry.cmake
+@@ -0,0 +1,98 @@
++[KCM Locale]
++Name=German
++Name[af]=Duits
++Name[ar]=الألمانيّة
++Name[as]=জাৰ্মান
++Name[be]=Нямецкая
++Name[be@latin]=Niamieckaja
++Name[bg]=Немски
++Name[bn]=জার্মান
++Name[bn_IN]=জার্মান
++Name[br]=Alamaneg
++Name[bs]=njemački
++Name[ca]=Alemany
++Name[ca@valencia]=Alemany
++Name[cs]=Německý
++Name[csb]=Miemiecczi
++Name[cy]=Almaeneg
++Name[da]=Tysk
++Name[de]=Deutsch
++Name[el]=Γερμανικά
++Name[en_GB]=German
++Name[eo]=Germana
++Name[es]=Alemán
++Name[et]=Saksa
++Name[eu]=Alemana
++Name[fa]=آلمانی
++Name[fi]=Saksa
++Name[fr]=Allemand
++Name[fy]=Dútsk
++Name[ga]=Gearmáinis
++Name[gd]=Gearmailtis
++Name[gl]=Alemán
++Name[gu]=જર્મન
++Name[he]=גרמנית
++Name[hi]=जर्मन
++Name[hne]=जर्मन
++Name[hr]=Njemački
++Name[hsb]=Němsce
++Name[hu]=Német
++Name[ia]=Germano
++Name[id]=Jerman
++Name[is]=Þýska
++Name[it]=Tedesco
++Name[ja]=ドイツ語
++Name[kk]=Немісше
++Name[km]=អាល្លឺម៉ង់
++Name[kn]=ಜರ್ಮನ್
++Name[ko]=독일어
++Name[ku]=Almanî
++Name[lb]=Däitsch
++Name[lt]=Vokiečių
++Name[lv]=Vācu
++Name[mai]=जर्मन
++Name[mk]=Германски
++Name[ml]=ജര്‍മ്മന്‍
++Name[mr]=जर्मन
++Name[ms]=Jerman
++Name[nb]=Tysk
++Name[nds]=Hoochdüütsch
++Name[ne]=जर्मनी
++Name[nl]=Duits
++Name[nn]=Tysk
++Name[oc]=Aleman
++Name[or]=ଜର୍ମାନ
++Name[pa]=ਜਰਮਨ
++Name[pl]=Niemiecki
++Name[ps]=جرمني
++Name[pt]=Alemão
++Name[pt_BR]=Alemão
++Name[ro]=Germană
++Name[ru]=Немецкий
++Name[se]=Duiskkagiella
++Name[si]=ජර්මානු
++Name[sk]=Nemčina
++Name[sl]=Nemščina
++Name[sq]=Gjermanisht
++Name[sr]=немачки
++Name[sr@ijekavian]=њемачки
++Name[sr@ijekavianlatin]=njemački
++Name[sr@latin]=nemački
++Name[sv]=Tyska
++Name[ta]=ஜெர்மன்
++Name[te]=జెర్మన్
++Name[tg]=Олмонӣ
++Name[th]=ภาษาเยอรมัน
++Name[tr]=Almanca
++Name[tt]=Алман
++Name[ug]=گېرمانچە
++Name[uk]=Німецька
++Name[uz]=Olmoncha
++Name[uz@cyrillic]=Олмонча
++Name[vi]=Đức
++Name[wa]=Almand
++Name[xh]=German
++Name[x-test]=xxGermanxx
++Name[zh_CN]=德语
++Name[zh_HK]=德語
++Name[zh_TW]=德語
+diff --git a/autotests/kf5_entry_data.cmake/locale/en_US/kf5_entry.cmake b/autotests/kf5_entry_data.cmake/locale/en_US/kf5_entry.cmake
+new file mode 100644
+index 0000000..6033ad4
+--- /dev/null
++++ b/autotests/kf5_entry_data.cmake/locale/en_US/kf5_entry.cmake
+@@ -0,0 +1,44 @@
++[KCM Locale]
++Name=US English
++Name[ar]=الإنجليزية الأمريكية
++Name[bs]=Američki engleski
++Name[ca]=Anglès US
++Name[ca@valencia]=Anglés US
++Name[cs]=US Angličtina
++Name[da]=US Engelsk
++Name[de]=US-Englisch
++Name[el]=US English
++Name[en_GB]=US English
++Name[es]=Inglés de EE. UU.
++Name[et]=USA inglise
++Name[eu]=AEBtako ingelesa
++Name[fi]=Amerikanenglanti
++Name[fr]=Anglais (États-Unis)
++Name[gd]=Beurla (SA)
++Name[gl]=Inglés americano
++Name[he]=אנגלית ארה"ב
++Name[hu]=Angol (amerikai)
++Name[ia]=Anglese de S.U.A.
++Name[id]=Inggris US
++Name[it]=Inglese US
++Name[ko]=미국 영어
++Name[lt]=JAV anglų
++Name[nb]=Engelsk (USA)
++Name[nl]=VS Engels
++Name[nn]=Engelsk (USA)
++Name[pl]=Angielski amerykański
++Name[pt]=Inglês dos EUA
++Name[pt_BR]=Inglês dos EUA
++Name[ru]=Английский (США)
++Name[sk]=Americká angličtina
++Name[sl]=ameriško angleško
++Name[sr]=амерички енглески
++Name[sr@ijekavian]=амерички енглески
++Name[sr@ijekavianlatin]=američki engleski
++Name[sr@latin]=američki engleski
++Name[sv]=Amerikansk engelska
++Name[tr]=ABD İngilizcesi
++Name[uk]=Англійська (США)
++Name[x-test]=xxUS Englishxx
++Name[zh_CN]=美国英语
++Name[zh_TW]=美式英文
+diff --git a/autotests/kf5_entry_data.cmake/locale/es/.keep b/autotests/kf5_entry_data.cmake/locale/es/.keep
+new file mode 100644
+index 0000000..e69de29
+diff --git a/autotests/kf5_entry_data.cmake/locale/fr/kf5_entry.cmake b/autotests/kf5_entry_data.cmake/locale/fr/kf5_entry.cmake
+new file mode 100644
+index 0000000..4f248b9
+--- /dev/null
++++ b/autotests/kf5_entry_data.cmake/locale/fr/kf5_entry.cmake
+@@ -0,0 +1,2 @@
++[KCM Locale]
++Name=French
+diff --git a/autotests/kf5_entry_data.cmake/locale/pt/kf5_entry.cmake b/autotests/kf5_entry_data.cmake/locale/pt/kf5_entry.cmake
+new file mode 100644
+index 0000000..6e555d0
+--- /dev/null
++++ b/autotests/kf5_entry_data.cmake/locale/pt/kf5_entry.cmake
+@@ -0,0 +1,98 @@
++[KCM Locale]
++Name=Portuguese
++Name[af]=Portugese
++Name[ar]=البرتغاليّة
++Name[as]=প'ৰ্টুগিছ্‌
++Name[be]=Партугальская
++Name[be@latin]=Partuhalskaja
++Name[bg]=Португалски
++Name[bn]=পর্তুগীজ
++Name[bn_IN]=পোর্তুগিজ
++Name[br]=Portugaleg
++Name[bs]=portugalski
++Name[ca]=Portuguès
++Name[ca@valencia]=Portugués
++Name[cs]=Portugalský
++Name[csb]=Pòrtugalsczi
++Name[cy]=Portiwgaleg
++Name[da]=Portugisisk
++Name[de]=Portugiesisch
++Name[el]=Πορτογαλικά
++Name[en_GB]=Portuguese
++Name[eo]=Portugala
++Name[es]=Portugués
++Name[et]=Portugali
++Name[eu]=Portugesa
++Name[fa]=پرتغالی
++Name[fi]=Portugali
++Name[fr]=Portugais
++Name[fy]=Portugeesk
++Name[ga]=Portaingéilis
++Name[gd]=Portagailis
++Name[gl]=Portugués
++Name[gu]=પોર્ટુગીઝ
++Name[he]=פורטוגזית
++Name[hi]=पुर्तगाली
++Name[hne]=पुर्तगाली
++Name[hr]=Portugalski
++Name[hsb]=Portugalsce
++Name[hu]=Portugál
++Name[ia]=Portugese
++Name[id]=Portugis
++Name[is]=Portúgalska
++Name[it]=Portoghese
++Name[ja]=ポルトガル語
++Name[kk]=Португалша
++Name[km]=ព័រទុយហ្គាល់
++Name[kn]=ಪೋರ್ಚುಗೀಸ್
++Name[ko]=포르투갈어
++Name[ku]=Portûgalî
++Name[lb]=Portugisesch
++Name[lt]=Portugalų
++Name[lv]=Portugāļu
++Name[mai]=पुर्तगाली
++Name[mk]=Португалски
++Name[ml]=പോര്‍ച്ചുഗീസ്
++Name[mr]=पोर्तुगीज
++Name[ms]=Portugis
++Name[nb]=Portugisisk
++Name[nds]=Portugeesch
++Name[ne]=पोर्तुगाली
++Name[nl]=Portugees
++Name[nn]=Portugisisk
++Name[oc]=Portugués
++Name[or]=ପର୍ତ୍ତୁଗିଜ
++Name[pa]=ਪੁਰਤਗਾਲੀ
++Name[pl]=Portugalski
++Name[ps]=پورټګيز
++Name[pt]=Português
++Name[pt_BR]=Português
++Name[ro]=Portugheză
++Name[ru]=Португальский
++Name[se]=Portugálagiella
++Name[si]=පෘතුගීසි
++Name[sk]=Portugalčina
++Name[sl]=Portugalščina
++Name[sq]=Portugalisht
++Name[sr]=португалски
++Name[sr@ijekavian]=португалски
++Name[sr@ijekavianlatin]=portugalski
++Name[sr@latin]=portugalski
++Name[sv]=Portugisiska
++Name[ta]=போர்த்துக்கீசிய
++Name[te]=పొర్ట్యుగీస్
++Name[tg]=Португалӣ
++Name[th]=ภาษาโปรตุเกส
++Name[tr]=Portekizce
++Name[tt]=Португал
++Name[ug]=پورتۇگالچە
++Name[uk]=Португальська
++Name[uz]=Portugalcha
++Name[uz@cyrillic]=Португалча
++Name[vi]=Bồ Đào Nha
++Name[wa]=Portuguès
++Name[xh]=Portuguese
++Name[x-test]=xxPortuguesexx
++Name[zh_CN]=葡萄牙语
++Name[zh_HK]=葡萄牙語
++Name[zh_TW]=葡萄牙語
+diff --git a/autotests/klanguagenametest.cpp b/autotests/klanguagenametest.cpp
+new file mode 100644
+index 0000000..bb2b3d9
+--- /dev/null
++++ b/autotests/klanguagenametest.cpp
+@@ -0,0 +1,96 @@
++/*
++ Copyright (c) 2018 Harald Sitter <sitter@kde.org>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) version 3, or any
++ later version accepted by the membership of KDE e.V. (or its
++ successor approved by the membership of KDE e.V.), which shall
++ act as a proxy defined in Section 6 of version 3 of the license.
++
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <QObject>
++#include <QtTest>
++
++#include "klanguagename.h"
++
++static void setEnvironment()
++{
++ qputenv("LANG", "C.UTF-8");
++ qputenv("LANGUAGE", "en");
++ qputenv("XDG_DATA_DIRS", qUtf8Printable(QFINDTESTDATA("kf5_entry_data")));
++ // There is a distinct chance of the envionrment setup being to late and
++ // causing flakey results based on the execution env.
++ // Make sure we definitely default to english.
++ QLocale::setDefault(QLocale::English);
++
++ // NOTE
++ // - fr has no translations
++ // - es has no kf5_entry at all
++ // - other languages under testing are complete
++}
++
++class KLanguageNameTest : public QObject
++{
++ Q_OBJECT
++
++private Q_SLOTS:
++ void testNameForCode()
++ {
++ // This is somewhat wrong, it should not say US.
++ QCOMPARE(KLanguageName::nameForCode("en"), QString("US English"));
++
++ QCOMPARE(KLanguageName::nameForCode("de"), QString("German"));
++ QCOMPARE(KLanguageName::nameForCode("pt"), QString("Portuguese"));
++ QCOMPARE(KLanguageName::nameForCode("ca"), QString("Catalan"));
++ }
++
++ void testNameForCodeInLocale()
++ {
++ // This is somewhat wrong, it should not say US.
++ QCOMPARE(KLanguageName::nameForCodeInLocale("en", "de"), QString("US-Englisch"));
++
++ QCOMPARE(KLanguageName::nameForCodeInLocale("de", "de"), QString("Deutsch"));
++ QCOMPARE(KLanguageName::nameForCodeInLocale("pt", "de"), QString("Portugiesisch"));
++ QCOMPARE(KLanguageName::nameForCodeInLocale("ca", "de"), QString("Katalanisch"));
++ }
++
++ void testNoTranslation()
++ {
++ // This has an entry file but no translation => QLocale.
++ QCOMPARE(KLanguageName::nameForCode("fr"), QString("French"));
++ QCOMPARE(KLanguageName::nameForCodeInLocale("fr", "de"), QString("French"));
++ // When in the same language, use the native name.
++ QCOMPARE(KLanguageName::nameForCodeInLocale("fr", "fr"), QString("français"));
++ }
++
++ void testNoEntry()
++ {
++ // This has no entry file => QLocale.
++ QCOMPARE(KLanguageName::nameForCode("es"), QString("Spanish"));
++ QCOMPARE(KLanguageName::nameForCodeInLocale("es", "de"), QString("Spanish"));
++ // When in the same language, use the native name.
++ QCOMPARE(KLanguageName::nameForCodeInLocale("es", "es"), QString("español de España"));
++ }
++
++ void testNoString()
++ {
++ // Qt doesn't have za support, we have no test fixture, so no string.
++ QCOMPARE(KLanguageName::nameForCode("za"), QString());
++ }
++};
++
++Q_COREAPP_STARTUP_FUNCTION(setEnvironment)
++
++QTEST_GUILESS_MAIN(KLanguageNameTest)
++
++#include "klanguagenametest.moc"
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index a35cf3c..09fe50b 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -8,6 +8,7 @@ set(kconfigwidgets_SRCS
+ kcmodule.cpp
+ khelpclient.cpp
+ klanguagebutton.cpp
++ klanguagename.cpp
+ kpastetextaction.cpp
+ krecentfilesaction.cpp
+ kstandardaction.cpp
+@@ -52,6 +53,7 @@ ecm_generate_headers(KConfigWidgets_HEADERS
+ KCModule
+ KHelpClient
+ KLanguageButton
++ KLanguageName
+ KPasteTextAction
+ KRecentFilesAction
+ KViewStateMaintainer
+diff --git a/src/klanguagename.cpp b/src/klanguagename.cpp
+new file mode 100644
+index 0000000..6e1a519
+--- /dev/null
++++ b/src/klanguagename.cpp
+@@ -0,0 +1,67 @@
++/*
++ * Copyright (c) 1999-2003 Hans Petter Bieker <bieker@kde.org>
++ * (c) 2007 David Jarvie <software@astrojar.org.uk>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB. If not, write to
++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301, USA.
++ */
++
++#include "klanguagename.h"
++#include "kconfigwidgets_debug.h"
++
++#include <kconfig.h>
++#include <kconfiggroup.h>
++
++QString KLanguageName::nameForCode(const QString &code)
++{
++ const QStringList parts = QLocale().name().split(QChar('_'));
++ return nameForCodeInLocale(code, parts.at(0));
++}
++
++QString KLanguageName::nameForCodeInLocale(const QString &code, const QString &outputCode)
++{
++ const QString realCode = code == QStringLiteral("en") ? QStringLiteral("en_US") : code;
++ const QString realOutputCode = outputCode == QStringLiteral("en") ? QStringLiteral("en_US") : outputCode;
++
++ const QString entryFile =
++ QStandardPaths::locate(QStandardPaths::GenericDataLocation,
++ QStringLiteral("locale") + QLatin1Char('/') + realCode + QStringLiteral("/kf5_entry.desktop"));
++ if (!entryFile.isEmpty()) {
++ KConfig entry(entryFile, KConfig::SimpleConfig);
++ entry.setLocale(realOutputCode);
++ const KConfigGroup group(&entry, "KCM Locale");
++ const QString name = group.readEntry("Name");
++
++ // KConfig doesn't have a way to say it didn't find the entry in
++ // realOutputCode and returned the english version so we check for the
++ // english version, if it's equal to the "non-english" version we'll use
++ // otherwise we defer to QLocale.
++ entry.setLocale("en_US");
++ const QString englishName = group.readEntry("Name");
++ if (name != englishName || realOutputCode == QStringLiteral("en_US")) {
++ return name;
++ }
++ }
++
++ const QLocale locale(realCode);
++ if (locale != QLocale::c()) {
++ if (realCode == realOutputCode) {
++ return locale.nativeLanguageName();
++ }
++ return QLocale::languageToString(locale.language());
++ }
++
++ return QString();
++}
+diff --git a/src/klanguagename.h b/src/klanguagename.h
+new file mode 100644
+index 0000000..51dc6dd
+--- /dev/null
++++ b/src/klanguagename.h
+@@ -0,0 +1,63 @@
++/*
++ * Copyright (c) 1999-2003 Hans Petter Bieker <bieker@kde.org>
++ * (c) 2001 Martijn Klingens <klingens@kde.org>
++ * (c) 2007 David Jarvie <software@astrojar.org.uk>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB. If not, write to
++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301, USA.
++ */
++
++#ifndef KLANGUAGENAME_H
++#define KLANGUAGENAME_H
++
++#include "kconfigwidgets_export.h"
++
++class QString;
++
++/**
++ * @class KLanguageName klanguagename.h KLanguageName
++ *
++ * KLanguageName is a helper namespace that returns the name of a given language code.
++ *
++ * @since 5.55
++ *
++ */
++namespace KLanguageName
++{
++ /**
++ * Returns the name of the given language code in the current locale.
++ *
++ * If it can't be found in the current locale it returns the name in English.
++ *
++ * It it can't be found in English either it returns an empty QString.
++ *
++ * @param code code (ISO 639-1) of the language whose name is wanted.
++ */
++ KCONFIGWIDGETS_EXPORT QString nameForCode(const QString &code);
++
++ /**
++ * Returns the name of the given language code in the other given locale code.
++ *
++ * If it can't be found in the given locale it returns the name in English.
++ *
++ * It it can't be found in English either it returns an empty QString.
++ *
++ * @param code code (ISO 639-1) of the language whose name is wanted.
++ * @param outputLocale code (ISO 639-1) of the language in which we want the name in.
++ */
++ KCONFIGWIDGETS_EXPORT QString nameForCodeInLocale(const QString &code, const QString &outputLocale);
++}
++
++#endif
+--
+cgit v1.1
+