File indexing completed on 2024-05-12 05:13:33
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Daniel Vrátil <dvratil@redhat.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 * 0006 */ 0007 0008 #include "grantleeki18nlocalizer.h" 0009 #include "grantleetheme_debug.h" 0010 0011 #include <KTextTemplate/SafeString> 0012 #include <QDebug> 0013 0014 #include <KLocalizedString> 0015 using namespace GrantleeTheme; 0016 0017 GrantleeKi18nLocalizer::GrantleeKi18nLocalizer() 0018 : KTextTemplate::QtLocalizer() 0019 { 0020 } 0021 0022 GrantleeKi18nLocalizer::~GrantleeKi18nLocalizer() = default; 0023 0024 QString GrantleeKi18nLocalizer::processArguments(const KLocalizedString &kstr, const QVariantList &arguments) const 0025 { 0026 KLocalizedString str = kstr; 0027 for (auto iter = arguments.cbegin(), end = arguments.cend(); iter != end; ++iter) { 0028 switch (iter->userType()) { 0029 case QMetaType::QString: 0030 str = str.subs(iter->toString()); 0031 break; 0032 case QMetaType::Int: 0033 str = str.subs(iter->toInt()); 0034 break; 0035 case QMetaType::UInt: 0036 str = str.subs(iter->toUInt()); 0037 break; 0038 case QMetaType::LongLong: 0039 str = str.subs(iter->toLongLong()); 0040 break; 0041 case QMetaType::ULongLong: 0042 str = str.subs(iter->toULongLong()); 0043 break; 0044 case QMetaType::Char: 0045 str = str.subs(iter->toChar()); 0046 break; 0047 case QMetaType::Double: 0048 str = str.subs(iter->toDouble()); 0049 break; 0050 case QMetaType::User: 0051 default: 0052 if (iter->canConvert<KTextTemplate::SafeString>()) { 0053 str = str.subs(iter->value<KTextTemplate::SafeString>().get()); 0054 break; 0055 } else { 0056 qCWarning(GRANTLEETHEME_LOG) << "Unknown type" << iter->typeName() << "(" << iter->userType() << ")"; 0057 break; 0058 } 0059 } 0060 } 0061 0062 // Return localized in the currenctly active locale 0063 const QString translatedStr = str.toString(mApplicationDomain.isEmpty() ? str.applicationDomain().constData() : mApplicationDomain.constData()); 0064 // qDebug() << " translatedStr"<< translatedStr << " domain :" << str.applicationDomain() << " currentLocale() "<< currentLocale() << " Specific 0065 // applicationDomain" << mApplicationDomain; 0066 return translatedStr; 0067 } 0068 0069 QString GrantleeKi18nLocalizer::localizeContextString(const QString &string, const QString &context, const QVariantList &arguments) const 0070 { 0071 const KLocalizedString str = ki18nc(qPrintable(context), qPrintable(string)); 0072 return processArguments(str, arguments); 0073 } 0074 0075 QString GrantleeKi18nLocalizer::localizeString(const QString &string, const QVariantList &arguments) const 0076 { 0077 const KLocalizedString str = ki18n(qPrintable(string)); 0078 return processArguments(str, arguments); 0079 } 0080 0081 QString GrantleeKi18nLocalizer::localizePluralContextString(const QString &string, 0082 const QString &pluralForm, 0083 const QString &context, 0084 const QVariantList &arguments) const 0085 { 0086 const KLocalizedString str = ki18ncp(qPrintable(context), qPrintable(string), qPrintable(pluralForm)); 0087 return processArguments(str, arguments); 0088 } 0089 0090 QString GrantleeKi18nLocalizer::localizePluralString(const QString &string, const QString &pluralForm, const QVariantList &arguments) const 0091 { 0092 const KLocalizedString str = ki18np(qPrintable(string), qPrintable(pluralForm)); 0093 return processArguments(str, arguments); 0094 } 0095 0096 QString GrantleeKi18nLocalizer::localizeMonetaryValue(qreal value, const QString ¤cySymbol) const 0097 { 0098 return QLocale(currentLocale()).toCurrencyString(value, currencySymbol); 0099 } 0100 0101 QString GrantleeKi18nLocalizer::currentLocale() const 0102 { 0103 QString locale = KTextTemplate::QtLocalizer::currentLocale(); 0104 const int f = locale.indexOf(QLatin1Char('_')); 0105 if (f >= 0) { 0106 locale.truncate(f); 0107 } 0108 return locale; 0109 } 0110 0111 void GrantleeKi18nLocalizer::setApplicationDomain(const QByteArray &domain) 0112 { 0113 mApplicationDomain = domain; 0114 }