File indexing completed on 2025-02-09 04:28:38

0001 /*
0002   This file is part of the KTextTemplate library
0003 
0004   SPDX-FileCopyrightText: 2010 Stephen Kelly <steveire@gmail.com>
0005 
0006   SPDX-License-Identifier: LGPL-2.1-or-later
0007 
0008 */
0009 
0010 #include "nulllocalizer_p.h"
0011 
0012 #include <QDateTime>
0013 
0014 using namespace KTextTemplate;
0015 
0016 NullLocalizer::NullLocalizer() = default;
0017 
0018 NullLocalizer::~NullLocalizer() = default;
0019 
0020 QString NullLocalizer::localizeDate(const QDate &date, QLocale::FormatType formatType) const
0021 {
0022     Q_UNUSED(formatType)
0023     return date.toString();
0024 }
0025 
0026 QString NullLocalizer::localizeTime(const QTime &time, QLocale::FormatType formatType) const
0027 {
0028     Q_UNUSED(formatType)
0029     return time.toString();
0030 }
0031 
0032 QString NullLocalizer::localizeDateTime(const QDateTime &dateTime, QLocale::FormatType formatType) const
0033 {
0034     Q_UNUSED(formatType)
0035     return dateTime.toString();
0036 }
0037 
0038 QString NullLocalizer::localizeNumber(int number) const
0039 {
0040     return QString::number(number);
0041 }
0042 
0043 QString NullLocalizer::localizeNumber(qreal number) const
0044 {
0045     return QString::number(number);
0046 }
0047 
0048 QString NullLocalizer::localizeMonetaryValue(qreal value, const QString &currencyCode) const
0049 {
0050     Q_UNUSED(currencyCode)
0051     return QString::number(value);
0052 }
0053 
0054 static void replacePercentN(QString *result, int n)
0055 {
0056     if (n >= 0) {
0057         auto percentPos = 0;
0058         auto len = 0;
0059         while ((percentPos = result->indexOf(QLatin1Char('%'), percentPos + len)) != -1) {
0060             len = 1;
0061             QString fmt;
0062             if (result->at(percentPos + len) == QLatin1Char('L')) {
0063                 ++len;
0064                 fmt = QStringLiteral("%L1");
0065             } else {
0066                 fmt = QStringLiteral("%1");
0067             }
0068             if (result->at(percentPos + len) == QLatin1Char('n')) {
0069                 fmt = fmt.arg(n);
0070                 ++len;
0071                 result->replace(percentPos, len, fmt);
0072                 len = fmt.length();
0073             }
0074         }
0075     }
0076 }
0077 
0078 static QString substituteArguments(const QString &input, const QVariantList &arguments)
0079 {
0080     auto string = input;
0081     for (const QVariant &arg : arguments) {
0082         if (arg.userType() == qMetaTypeId<int>())
0083             string = string.arg(arg.value<int>());
0084         else if (arg.userType() == qMetaTypeId<double>())
0085             string = string.arg(arg.value<double>());
0086         else if (arg.userType() == qMetaTypeId<QDateTime>())
0087             string = string.arg(arg.value<QDateTime>().toString());
0088         else
0089             string = string.arg(arg.value<QString>());
0090     }
0091     return string;
0092 }
0093 
0094 QString NullLocalizer::localizeContextString(const QString &string, const QString &context, const QVariantList &arguments) const
0095 {
0096     Q_UNUSED(context)
0097     return substituteArguments(string, arguments);
0098 }
0099 
0100 QString
0101 NullLocalizer::localizePluralContextString(const QString &_string, const QString &_pluralForm, const QString &context, const QVariantList &_arguments) const
0102 {
0103     Q_UNUSED(context)
0104     const auto count = _arguments.first().value<int>();
0105     auto arguments = _arguments;
0106     auto string = _string;
0107     auto pluralForm = _pluralForm;
0108     if (_string.contains(QStringLiteral("%n"))) {
0109         arguments.removeFirst();
0110         replacePercentN(&string, count);
0111         replacePercentN(&pluralForm, count);
0112     }
0113     return count > 0 ? substituteArguments(pluralForm, arguments) : substituteArguments(string, arguments);
0114 }
0115 
0116 QString NullLocalizer::localizeString(const QString &string, const QVariantList &arguments) const
0117 {
0118     return substituteArguments(string, arguments);
0119 }
0120 
0121 QString NullLocalizer::localizePluralString(const QString &_string, const QString &_pluralForm, const QVariantList &_arguments) const
0122 {
0123     const auto count = _arguments.first().value<int>();
0124     auto arguments = _arguments;
0125     auto string = _string;
0126     auto pluralForm = _pluralForm;
0127     if (_string.contains(QStringLiteral("%n"))) {
0128         arguments.removeFirst();
0129         replacePercentN(&string, count);
0130         replacePercentN(&pluralForm, count);
0131     }
0132     return count > 0 ? substituteArguments(pluralForm, arguments) : substituteArguments(string, arguments);
0133 }
0134 
0135 QString NullLocalizer::currentLocale() const
0136 {
0137     return {};
0138 }
0139 
0140 void NullLocalizer::pushLocale(const QString &localeName)
0141 {
0142     Q_UNUSED(localeName)
0143 }
0144 
0145 void NullLocalizer::popLocale()
0146 {
0147 }
0148 
0149 void NullLocalizer::loadCatalog(const QString &path, const QString &catalog)
0150 {
0151     Q_UNUSED(path)
0152     Q_UNUSED(catalog)
0153 }
0154 
0155 void NullLocalizer::unloadCatalog(const QString &catalog)
0156 {
0157     Q_UNUSED(catalog)
0158 }