File indexing completed on 2024-05-12 05:15:01

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_p.h"
0009 #include "kcalutils_debug.h"
0010 
0011 #include <KTextTemplate/SafeString>
0012 #include <QLocale>
0013 
0014 #include <KLocalizedString>
0015 
0016 GrantleeKi18nLocalizer::GrantleeKi18nLocalizer()
0017     : KTextTemplate::QtLocalizer()
0018 {
0019 }
0020 
0021 GrantleeKi18nLocalizer::~GrantleeKi18nLocalizer()
0022 {
0023 }
0024 
0025 QString GrantleeKi18nLocalizer::processArguments(const KLocalizedString &kstr, const QVariantList &arguments) const
0026 {
0027     KLocalizedString str = kstr;
0028     for (auto iter = arguments.cbegin(), end = arguments.cend(); iter != end; ++iter) {
0029         switch (iter->userType()) {
0030         case QMetaType::QString:
0031             str = str.subs(iter->toString());
0032             break;
0033         case QMetaType::Int:
0034             str = str.subs(iter->toInt());
0035             break;
0036         case QMetaType::UInt:
0037             str = str.subs(iter->toUInt());
0038             break;
0039         case QMetaType::LongLong:
0040             str = str.subs(iter->toLongLong());
0041             break;
0042         case QMetaType::ULongLong:
0043             str = str.subs(iter->toULongLong());
0044             break;
0045         case QMetaType::Char:
0046             str = str.subs(iter->toChar());
0047             break;
0048         case QMetaType::Double:
0049             str = str.subs(iter->toDouble());
0050             break;
0051         case QMetaType::User:
0052         default:
0053             if (iter->canConvert<KTextTemplate::SafeString>()) {
0054                 str = str.subs(iter->value<KTextTemplate::SafeString>().get());
0055                 break;
0056             } else {
0057                 qCWarning(KCALUTILS_LOG) << "Unknown type" << iter->typeName() << "(" << iter->userType() << ")";
0058                 break;
0059             }
0060         }
0061     }
0062 
0063     // Return localized in the currently active locale
0064     return str.toString("libkcalutils6");
0065 }
0066 
0067 QString GrantleeKi18nLocalizer::localizeContextString(const QString &string, const QString &context, const QVariantList &arguments) const
0068 {
0069     const KLocalizedString str = kxi18nc(qPrintable(context), qPrintable(string));
0070     return processArguments(str, arguments);
0071 }
0072 
0073 QString GrantleeKi18nLocalizer::localizeString(const QString &string, const QVariantList &arguments) const
0074 {
0075     const KLocalizedString str = kxi18n(qPrintable(string));
0076     return processArguments(str, arguments);
0077 }
0078 
0079 QString GrantleeKi18nLocalizer::localizePluralContextString(const QString &string,
0080                                                             const QString &pluralForm,
0081                                                             const QString &context,
0082                                                             const QVariantList &arguments) const
0083 {
0084     const KLocalizedString str = kxi18ncp(qPrintable(context), qPrintable(string), qPrintable(pluralForm));
0085     return processArguments(str, arguments);
0086 }
0087 
0088 QString GrantleeKi18nLocalizer::localizePluralString(const QString &string, const QString &pluralForm, const QVariantList &arguments) const
0089 {
0090     const KLocalizedString str = kxi18np(qPrintable(string), qPrintable(pluralForm));
0091     return processArguments(str, arguments);
0092 }
0093 
0094 QString GrantleeKi18nLocalizer::localizeMonetaryValue(qreal value, const QString &currencySymbol) const
0095 {
0096     return QLocale(currentLocale()).toCurrencyString(value, currencySymbol);
0097 }