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 ¤cyCode) 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 }