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 &currencySymbol) 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 }