/* This file is part of the KDE libraries Copyright (C) 2006 Chusslove Illich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef KLOCALIZEDSTRING_H #define KLOCALIZEDSTRING_H #include #include #include class KLocale; struct KCatalogName; class KLocalizedStringPrivate; /** * \file klocalizedstring.h */ #ifndef I18N_NOOP /** * I18N_NOOP marks a string to be translated without translating it. * Do not use this unless you know you need it. * http://developer.kde.org/documentation/other/developer-faq.html#q2.11.2 * * Example usage where say_something() returns either "hello" or "goodbye": * \code * (void) I18N_NOOP("hello"); * (void) I18N_NOOP("goodbye"); * ... * mystring = i18n(say_something()); * \endcode */ #define I18N_NOOP(x) x #endif #ifndef I18N_NOOP2 /** * If the string is too ambiguous to be translated well to a non-english * language, use this instead of I18N_NOOP to separate lookup string and * english. * * Example usage where say_something() returns either "hello" or "goodbye": * \code * (void) I18N_NOOP2("greeting", "hello"); * (void) I18N_NOOP2("greeting", "goodbye"); * ... * mystring = i18nc("greeting", say_something()); * \endcode * \warning You need to call i18nc(context, stringVar) later on, not just * i18n(stringVar). * * @see I18N_NOOP2_NOSTRIP */ #define I18N_NOOP2(comment,x) x #endif #ifndef I18N_NOOP2_NOSTRIP /** * @since 4.3 * * Similar to I18N_NOOP2, except that neither of the two arguments is omitted. * This is typically used when contexts need to differ between static entries, * and only some of the entries need context: * \code * struct MyTextLabels * { * int labelId; * const char *context; * const char *text; * }; * const MyTextLabels labels[] = { * { 10, I18N_NOOP2_NOSTRIP("new game", "New") }, * { 20, 0, I18N_NOOP("End Turn") }, * { 30, I18N_NOOP2_NOSTRIP("default move", "Default") }, * { 40, 0, I18N_NOOP("Quit") }, * ... * }; * ... * QString itemLabel = i18nc(labels[item].context, labels[item].text); * \endcode * Note that i18nc() will not have any problems with context being null, * it will simply behave as ordinary i18n(). */ #define I18N_NOOP2_NOSTRIP(ctxt, text) ctxt, text #endif /** * @short Class for producing and handling localized messages * * KLocalizedString handles translation and specific needs of argument * substitution and formatting in localized message strings. * * Topics: * - @ref gen_usage * - @ref spec_usage * - @ref subs_notes * - @ref other_ref * * \section gen_usage General Usage * * This class should mostly not be used directly, but through wrapper i18n * calls which return QString, for localization of user visible messages in * applications. * * For the most frequent message type, the one without any arguments, you would * use simply: * \code * QString msg = i18n("Just plain info"); * \endcode * * If there are arguments to be substitued into the message, you just add them * after the message string: * \code * QString msg = i18n("%1 has scored %2", playerName, score); * \endcode * There can be up to some final number of arguments added like this (i18n * is realized by overloaded templates). If you overrun this number, use * ki18n* series of calls (described below). You can use several types as * arguments, see subs methods. * * Sometimes a short message can be ambiguous in English, then you would use * the context version, i18nc. There the first string is context, and the * second is the message which really gets displayed: * \code * QString msg = i18nc("Player name - score", "%1 - %2", playerName, score); * \endcode * * While English diferentiates plural forms only between 1 and else, in other * languages it might not be that simple, or it might be simpler. To handle * this properly, use plural call, i18np: * \code * QString msg = i18np("One image in album %2", "%1 images in album %2", * numImages, albumName); * \endcode * Note that the plural form shall be decided by first integer-valued argument, * (numImages in the example above). In rare cases when there are two integer * arguments, you should take care to order them properly. * * Finally, message might need both context and plural, which is provided by * i18ncp call: * \code * QString msg = i18ncp("Personal file", "One file", "%1 files", numFiles); * \endcode * * Be carefull not to use literal string as first argument after message text * in basic i18n() call. In debug mode, it will even trigger the static assert, * giving error at compile time. This is in order to prevent misnamed calls: * it may happen that you add context or plural to previously basic message, * but forget to change the name of the call. * * All message strings are expected to pass for well-formed XML, whether or * not the output device supports some form of markup. * Thus, predefined XML entities are always available: &lt;, &gt;, * &amp;, &apos;, and &quot;. E.g. if you need a non-tag * less-than sign, use &lt; entity instead. * The exception to the well-formed XML requirement is the ampersand (&), * which is used a lot for marking accelerators, so you should not write it * as &amp; (except in the very unlikely case when the construct with * the naked ampersand can be interpreted as an entity in itself). * * \section spec_usage Specialized Usage * * There are some situations where i18n* calls are not sufficient or * convenient. For one, if you need to substitute many arguments. Or, if you * find that you need to defer the substitution. For this you can use the * ki18n call which returns a KLocalizedString, substitute arguments * using its subs methods, and finalize the translation by calling * its toString method. For example: * \code * KLocalizedString ks; * case (reportSource) { * SRC_ENG: ks = ki18n("Engineering reports: %1"); break; * SRC_HEL: ks = ki18n("Helm reports: %1"); break; * SRC_SON: ks = ki18n("Sonar reports: %1"); break; * default: ks = ki18n("General report: %1"); * } * QString msg = ks.subs(reportText).toString(); * \endcode * * Another case is when you want extra formatting of arguments, like field * width or number of decimals. subs methods can take these formatting * parameters. In particular, you should @e never use some custom way to * format arguments, as subs methods will also properly localize them: * \code * QString s = i18n("Rounds: %1", myNumberFormat(n, 8)); // bad, number not localized * QString s = ki18n("Rounds: %1").subs(n, 8).toString(); // good, number localized * \endcode * * There are also context, plural and context-plural variants: * \code * QString s = ki18nc("No function", "None").toString(); * QString s = ki18np("File found", "%1 files found").subs(n).toString(); * QString s = ki18ncp("Personal file", "One file", "%1 files").subs(n).toString(); * \endcode * * If you need translation using locale (ie. KLocale object) other than the * default, you can use overloaded toString method which takes pointer to a * locale: * \code * KLocale *myLocale; * ... * QString msg = ki18n("Welcome").toString(myLocale); * \endcode * * Normally all loaded catalogs are searched for translation, * and the first found translation is returned. * Sometimes this may lead to clashes, especially when dealing with * specialized collection catalogs (country names, language names, etc.) * in which messages are not equipped with contexts. * In such situations, toString method can take the name of * the specific catalog in which to look for translation: * \code * QString trName = ki18n("Georgia").toString("countries"); * \endcode * * Translators have a capability to script translations at runtime, which is * for the most part transparent to the programmer. However, sometimes the * programmer may help by providing some @e dynamic context to the message, * using the inContext method of KLocalizedString. Unlike the ordinary * context, this one changes at runtime; translators have the means to fetch * it and use it to script the translation properly. An example: * \code * KLocalizedString ks = ki18nc("%1 is user name; may have " * "dynamic context gender=[male,female]", * "%1 went offline"); * if (knownUsers.contains(user) && !knownUsers[user].gender.isEmpty()) { * ks = ks.inContext("gender", knownUsers[user].gender); * } * QString msg = ks.subs(user).toString(); * \endcode * Several dynamic contexts, with different keys, can be added like this. * * \section subs_notes Placeholder Substitution * * Hopefully, for the most part placeholders are being substituted the way * you would intuitively expect them to be. Nevertheless: * * \li Placeholders are substituted in one pass, so no need to worry about * argument itself containing a placeholder. * * \li All same-numbered placeholders are substituted with same argument. * * \li Placeholders directly index arguments: they should be numbered from 1 * upwards, without gaps in the sequence so that each argument is indexed. * Otherwise you will get error marks in messages at runtime (when compiled * in debug mode), and any invalid placeholder will be left unsubstituted. * The exception is plural-deciding argument in plural call, where it is * allowed to drop its placeholder in either singular or plural form. * * \li If none of the arguments supplied to a plural call is integer-valued, * you will get an error mark in message at runtime (in debug mode). * * \li Plain number arguments will be normally formatted as if they denote * amounts, according to language rules (thousands separation, etc.) * But sometimes a number is a numerical identifier (e.g. port number), * and to be treated as such, wrap the placeholder with the numid tag: * \code * QString msg = i18n("Using port %1", port); * \endcode * * \section other_ref Further References * * KDE Techbase contains a * * series of tutorials on preparing the code for localization (and on * internationalization process in general), where the intended patterns of * usage of i18n API are covered in great detail. * * All i18n'd messages, whether sent to widgets expecting plain text or * allowing Qt rich text (HTML), support the new KDE semantic markup for * user interface text, KUIT in short. Semantic markup both increases the * consistency of visual presentation for the end user, and provides extra * information to translators, so that translations can be of higher quality. * KUIT is documented in an * * Techbase article as well. * * @see KLocale * @author Chusslove Illich \ */ class KDECORE_EXPORT KLocalizedString { friend KLocalizedString KDECORE_EXPORT ki18n (const char* msg); friend KLocalizedString KDECORE_EXPORT ki18nc (const char *ctxt, const char *msg); friend KLocalizedString KDECORE_EXPORT ki18np (const char *singular, const char *plural); friend KLocalizedString KDECORE_EXPORT ki18ncp (const char *ctxt, const char *singular, const char *plural); public: /** * Constructs an empty message, which is not valid for finalization. * Useful when you later need to assign KLocalizedString obtained by one * of ki18n* calls. * * @see isEmpty() */ explicit KLocalizedString (); /** * Copy constructor. */ KLocalizedString (const KLocalizedString &rhs); /** * Assignment operator. */ KLocalizedString& operator= (const KLocalizedString &rhs); /** * Destructor. */ ~KLocalizedString (); /** * Finalizes the translation, creates QString with placeholders * substituted. Translation is obtained from default locale. * * If there was any mismatch between placeholders and arguments * returned string will contain error marks (in debug mode). * * @return finalized translation */ QString toString () const; /** * @since 4.5 * * Like toString, but looks for translation only in specific catalog. * * @param catalogName the name of the catalog to check for translation * @return finalized translation */ QString toString (const QString &catalogName) const; /** * Finalizes the translation, creates QString with placeholders * substituted. Translation is obtained from given locale. If locale * is NULL, original message is used instead of translated. * * If there was any mismatch between placeholders and arguments * returned string will contain error marks (in debug mode). * * @param locale locale from which translations are to be taken * @return finalized translation */ QString toString (const KLocale *locale) const; /** * @since 4.5 * * Like toString, but looks for translation only in specific catalog. * * @param locale locale from which translations are to be taken * @param catalogName the name of the catalog to check for translation * @return finalized translation */ QString toString (const KLocale *locale, const QString &catalogName) const; /** * Checks whether the message is empty. This will happen if you just * constructed the object via default constructor. * * Empty messages are not valid for finalization; if you use toString() on * them, you will get error mark instead of empty QString (in debug mode). * * @return @c true if the message is empty, else @c false */ bool isEmpty() const; /** * Substitutes an int argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param base the radix used to represent the number as a string. * Valid values range from 2 to 36 * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (int a, int fieldWidth = 0, int base = 10, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes an unsigned int argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param base the radix used to represent the number as a string. * Valid values range from 2 to 36 * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (uint a, int fieldWidth = 0, int base = 10, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes a long argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param base the radix used to represent the number as a string. * Valid values range from 2 to 36 * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (long a, int fieldWidth = 0, int base = 10, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes an unsigned long argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param base the radix used to represent the number as a string. * Valid values range from 2 to 36 * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (ulong a, int fieldWidth = 0, int base = 10, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes a long long argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param base the radix used to represent the number as a string. * Valid values range from 2 to 36 * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (qlonglong a, int fieldWidth = 0, int base = 10, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes an unsigned long long argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param base the radix used to represent the number as a string. * Valid values range from 2 to 36 * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (qulonglong a, int fieldWidth = 0, int base = 10, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes a double argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param format type of floating point formating, like in QString::arg * @param precision number of digits after the decimal separator * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (double a, int fieldWidth = 0, char format = 'g', int precision = -1, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes a QChar argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (QChar a, int fieldWidth = 0, const QChar &fillChar = QLatin1Char(' ')) const; /** * Substitutes a QString argument into the message. * * @param a the argument * @param fieldWidth width of the formatted field, padded by spaces. * Positive value aligns right, negative aligns left * @param fillChar the character used to fill up the empty places when * field width is greater than argument width * @return resultant KLocalizedString */ KLocalizedString subs (const QString &a, int fieldWidth = 0, const QChar &fillChar = QLatin1Char(' ')) const; /** * Adds dynamic context to the message. * * @param key context key * @param text context value * @return resultant KLocalizedString */ KLocalizedString inContext (const QString &key, const QString &text) const; /** * @internal Called from KLocale on addition or removal of catalogs. */ static void notifyCatalogsUpdated (const QStringList &languages, const QList &catalogs); private: KLocalizedString (const char *ctxt, const char *msg, const char *plural); KLocalizedStringPrivate * const d; }; /** * Creates localized string from a given message. * Normaly you should use i18n() templates instead, as you need real * KLocalizedString object only in special cases. * All text arguments must be UTF-8 encoded and must not be empty or NULL. * * @param msg message text * @return created KLocalizedString */ extern KLocalizedString KDECORE_EXPORT ki18n (const char* msg); /** * Creates localized string from a given message, with added context. * Context is only for disambiguation purposes (both for lookup and * for translators), it is not part of the message. * Normaly you should use i18nc() templates instead, as you need real * KLocalizedString object only in special cases. * All text arguments must be UTF-8 encoded and must not be empty or NULL. * * @param ctxt context text * @param msg message text * @return created KLocalizedString */ extern KLocalizedString KDECORE_EXPORT ki18nc (const char *ctxt, const char *msg); /** * Creates localized string from a given plural and singular form. * Normaly you should use i18np() templates instead, as you need real * KLocalizedString object only in special cases. * All text arguments must be UTF-8 encoded and must not be empty or NULL. * * @param singular message text in singular * @param plural message text in plural * @return created KLocalizedString */ extern KLocalizedString KDECORE_EXPORT ki18np (const char *singular, const char *plural); /** * Creates localized string from a given plural and singular form, * with added context. * Context is only for disambiguation purposes (both for lookup and * for translators), it is not part of the message. * Normaly you should use i18ncp() templates instead, as you need real * KLocalizedString object only in special cases. * All text arguments must be UTF-8 encoded and must not be empty or NULL. * * @param ctxt context text * @param singular message text in singular * @param plural message text in plural * @return created KLocalizedString */ extern KLocalizedString KDECORE_EXPORT ki18ncp (const char *ctxt, const char *singular, const char *plural); #ifndef NDEBUG #define I18N_ERR_MSG String_literal_as_second_argument_to_i18n___Perhaps_you_need_i18nc_or_i18np template class I18nTypeCheck {public: static void I18N_ERR_MSG () {}}; template class I18nTypeCheck {}; #define STATIC_ASSERT_NOT_LITERAL_STRING(T) I18nTypeCheck::I18N_ERR_MSG (); #else #define STATIC_ASSERT_NOT_LITERAL_STRING(T) #endif // >>>>> Basic calls // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string. * @param text string to be localized * @return localized string */ inline QString i18n (const char *text) { return ki18n(text).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 1 argument. * @param text string to be localized * @param a1 first argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 2 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 3 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 4 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 5 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 6 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 7 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 8 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 9 arguments. * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @param a9 ninth argument * @return localized string */ template inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8, const A9 &a9) { STATIC_ASSERT_NOT_LITERAL_STRING(A1) return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString(); } // <<<<<<< End of basic calls // >>>>> Context calls // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string and a context. * @param ctxt context of the string * @param text string to be localized * @return localized string */ inline QString i18nc (const char *ctxt, const char *text) { return ki18nc(ctxt, text).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 1 argument and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1) { return ki18nc(ctxt, text).subs(a1).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 2 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2) { return ki18nc(ctxt, text).subs(a1).subs(a2).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 3 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 4 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).subs(a4).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 5 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 6 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 7 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 8 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 9 arguments and a context. * @param ctxt context of the string * @param text string to be localized * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @param a9 ninth argument * @return localized string */ template inline QString i18nc (const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8, const A9 &a9) { return ki18nc(ctxt, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString(); } // <<<<< End of context calls // >>>>> Plural calls // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 1 argument using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1) { return ki18np(sing, plur).subs(a1).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 2 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2) { return ki18np(sing, plur).subs(a1).subs(a2).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 3 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 4 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 5 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 6 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 7 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 8 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 9 arguments using correct plural form. * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @param a9 ninth argument * @return localized string */ template inline QString i18np (const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8, const A9 &a9) { return ki18np(sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString(); } // <<<<< End of plural calls // >>>>> Context-plural calls // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 1 argument and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1) { return ki18ncp(ctxt, sing, plur).subs(a1).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 2 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 3 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 4 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 5 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 6 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 7 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 8 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString(); } // Autogenerated; contact KLocalizedString maintainer for batch changes. /** * Returns a localized version of a string with 9 arguments and a context using correct plural form. * @param ctxt context of the string * @param sing string to be localized in singular * @param plur string to be localized in plural * @param a1 first argument * @param a2 second argument * @param a3 third argument * @param a4 fourth argument * @param a5 fifth argument * @param a6 sixth argument * @param a7 seventh argument * @param a8 eighth argument * @param a9 ninth argument * @return localized string */ template inline QString i18ncp (const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8, const A9 &a9) { return ki18ncp(ctxt, sing, plur).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString(); } // <<<<< End of context-plural calls #endif