Ki18n
klocalizedstring.h
Go to the documentation of this file.
1 /* This file is part of the KDE libraries
2  Copyright (C) 2006, 2012 Chusslove Illich <caslav.ilic@gmx.net>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 #ifndef KLOCALIZEDSTRING_H
20 #define KLOCALIZEDSTRING_H
21 
22 #include <ki18n_export.h>
23 
24 #include <QtCore/QChar>
25 #include <QtCore/QLatin1Char>
26 #include <QtCore/QString>
27 #include <QtCore/QStringList>
28 
29 #include <kuitmarkup.h>
30 
31 class KLocalizedStringPrivate;
32 
37 #ifndef I18N_NOOP
38 
43 #define I18N_NOOP(text) text
44 #endif
45 
46 #ifndef I18NC_NOOP
47 
52 #define I18NC_NOOP(context, text) context, text
53 #endif
54 
55 #ifndef I18N_NOOP2
56 
61 #define I18N_NOOP2(context, text) text
62 #endif
63 
64 #ifndef I18N_NOOP2_NOSTRIP
65 
70 #define I18N_NOOP2_NOSTRIP(context, text) context, text
71 #endif
72 
82 class KI18N_EXPORT KLocalizedString
83 {
84  friend KLocalizedString KI18N_EXPORT ki18n(const char* text);
85  friend KLocalizedString KI18N_EXPORT ki18nc(const char *context, const char *text);
86  friend KLocalizedString KI18N_EXPORT ki18np(const char *singular, const char *plural);
87  friend KLocalizedString KI18N_EXPORT ki18ncp(const char *context, const char *singular, const char *plural);
88  friend KLocalizedString KI18N_EXPORT ki18nd(const char *domain, const char* text);
89  friend KLocalizedString KI18N_EXPORT ki18ndc(const char *domain, const char *context, const char *text);
90  friend KLocalizedString KI18N_EXPORT ki18ndp(const char *domain, const char *singular, const char *plural);
91  friend KLocalizedString KI18N_EXPORT ki18ndcp(const char *domain, const char *context, const char *singular, const char *plural);
92 
93  friend KLocalizedString KI18N_EXPORT kxi18n(const char* text);
94  friend KLocalizedString KI18N_EXPORT kxi18nc(const char *context, const char *text);
95  friend KLocalizedString KI18N_EXPORT kxi18np(const char *singular, const char *plural);
96  friend KLocalizedString KI18N_EXPORT kxi18ncp(const char *context, const char *singular, const char *plural);
97  friend KLocalizedString KI18N_EXPORT kxi18nd(const char *domain, const char* text);
98  friend KLocalizedString KI18N_EXPORT kxi18ndc(const char *domain, const char *context, const char *text);
99  friend KLocalizedString KI18N_EXPORT kxi18ndp(const char *domain, const char *singular, const char *plural);
100  friend KLocalizedString KI18N_EXPORT kxi18ndcp(const char *domain, const char *context, const char *singular, const char *plural);
101 
102 public:
114  explicit KLocalizedString();
115 
120 
124  KLocalizedString& operator=(const KLocalizedString &rhs);
125 
129  ~KLocalizedString();
130 
144  QString toString() const;
145 
156  QString toString(const QStringList &languages) const;
157 
158  #if 0 // until locale system is ready
159 
168  QString toString(const KLocale *locale) const;
169  #endif
170 
179  QString toString(const QString &domain) const;
180 
192  QString toString(KUIT::VisualFormat format) const;
193 
200  KLocalizedString withLanguages(const QStringList &languages) const;
201 
208  KLocalizedString withLocale(const KLocale *locale) const;
209 
216  KLocalizedString withDomain(const QString &domain) const;
217 
226  KLocalizedString withFormat(KUIT::VisualFormat format) const;
227 
240  bool isEmpty() const;
241 
254  KLocalizedString subs(int a, int fieldWidth = 0, int base = 10,
255  QChar fillChar = QLatin1Char(' ')) const;
256 
269  KLocalizedString subs(uint a, int fieldWidth = 0, int base = 10,
270  QChar fillChar = QLatin1Char(' ')) const;
271 
284  KLocalizedString subs(long a, int fieldWidth = 0, int base = 10,
285  QChar fillChar = QLatin1Char(' ')) const;
286 
299  KLocalizedString subs(ulong a, int fieldWidth = 0, int base = 10,
300  QChar fillChar = QLatin1Char(' ')) const;
301 
314  KLocalizedString subs(qlonglong a, int fieldWidth = 0, int base = 10,
315  QChar fillChar = QLatin1Char(' ')) const;
316 
329  KLocalizedString subs(qulonglong a, int fieldWidth = 0, int base = 10,
330  QChar fillChar = QLatin1Char(' ')) const;
331 
344  KLocalizedString subs(double a, int fieldWidth = 0,
345  char format = 'g', int precision = -1,
346  QChar fillChar = QLatin1Char(' ')) const;
347 
358  KLocalizedString subs(QChar a, int fieldWidth = 0,
359  QChar fillChar = QLatin1Char(' ')) const;
360 
371  KLocalizedString subs(const QString &a, int fieldWidth = 0,
372  QChar fillChar = QLatin1Char(' ')) const;
373 
384  KLocalizedString subs(const KLocalizedString &a, int fieldWidth = 0,
385  QChar fillChar = QLatin1Char(' ')) const;
386 
404  KLocalizedString relaxSubs() const;
405 
415  KLocalizedString inContext(const QString &key,
416  const QString &text) const;
417 
431  static void setApplicationDomain(const QString &domain);
432 
433  #if 0 // until locale system is ready
434 
443  static void setLocale(const KLocale &locale);
444  #endif
445 
456  static void setLanguages(const QStringList &languages);
457 
466  static void clearLanguages();
467 
477  static bool isApplicationTranslatedInto(const QString &language);
478 
494  static QString localizedFilePath(const QString &filePath);
495 
510  static QString removeAcceleratorMarker(const QString &label);
511 
527  static QString translateQt(const char* context, const char *text,
528  const char* comment
529 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
530  , int n
531 #endif
532  );
533 
544  static void insertQtDomain(const QString &domain);
545 
562  static void removeQtDomain(const QString &domain);
563 
564 private:
565  KLocalizedString(const char *context, const char *msg, const char *plural,
566  bool markupAware);
567 
568  KLocalizedStringPrivate * const d;
569 };
570 
571 // Do not document every multi-argument i18n* call separately,
572 // but provide special quasi-calls that only Doxygen sees.
573 // Placed in front of ki18n* calls, because i18n* are more basic.
574 #ifdef DOXYGEN_PREPROC
575 
584 QString i18n(const char *text, const TYPE &arg...);
585 
595 QString i18nc(const char *context, const char *text, const TYPE &arg...);
596 
606 QString i18np(const char *singular, const char *plural, const TYPE &arg...);
607 
618 QString i18ncp(const char *context, const char *singular, const char *plural,
619  const TYPE &arg...);
620 
630 QString i18nd(const char *domain, const char *text, const TYPE &arg...);
631 
642 QString i18ndc(const char *domain, const char *context, const char *text,
643  const TYPE &arg...);
644 
655 QString i18ndp(const char *domain, const char *singular, const char *plural,
656  const TYPE &arg...);
657 
670 QString i18ndcp(const char *domain,
671  const char *context, const char *singular, const char *plural,
672  const TYPE &arg...);
673 
682 QString xi18n(const char *text, const TYPE &arg...);
683 
693 QString xi18nc(const char *context, const char *text, const TYPE &arg...);
694 
704 QString xi18np(const char *singular, const char *plural, const TYPE &arg...);
705 
717 QString xi18ncp(const char *context, const char *singular, const char *plural,
718  const TYPE &arg...);
719 
729 QString xi18nd(const char *domain, const char *text, const TYPE &arg...);
730 
742 QString xi18ndc(const char *domain, const char *context, const char *text,
743  const TYPE &arg...);
744 
756 QString xi18ndp(const char *domain, const char *singular, const char *plural,
757  const TYPE &arg...);
758 
771 QString xi18ndcp(const char *domain,
772  const char *context, const char *singular, const char *plural,
773  const TYPE &arg...);
774 
775 #endif // DOXYGEN_PREPROC
776 
783 KLocalizedString KI18N_EXPORT ki18n(const char* text);
784 
792 KLocalizedString KI18N_EXPORT ki18nc(const char *context, const char *text);
793 
801 KLocalizedString KI18N_EXPORT ki18np(const char *singular, const char *plural);
802 
811 KLocalizedString KI18N_EXPORT ki18ncp(const char *context, const char *singular, const char *plural);
812 
820 KLocalizedString KI18N_EXPORT ki18nd(const char *domain, const char* text);
821 
830 KLocalizedString KI18N_EXPORT ki18ndc(const char *domain, const char *context, const char *text);
831 
840 KLocalizedString KI18N_EXPORT ki18ndp(const char *domain, const char *singular, const char *plural);
841 
851 KLocalizedString KI18N_EXPORT ki18ndcp(const char *domain, const char *context, const char *singular, const char *plural);
852 
859 KLocalizedString KI18N_EXPORT kxi18n(const char* text);
860 
868 KLocalizedString KI18N_EXPORT kxi18nc(const char *context, const char *text);
869 
877 KLocalizedString KI18N_EXPORT kxi18np(const char *singular, const char *plural);
878 
888 KLocalizedString KI18N_EXPORT kxi18ncp(const char *context, const char *singular, const char *plural);
889 
897 KLocalizedString KI18N_EXPORT kxi18nd(const char *domain, const char* text);
898 
907 KLocalizedString KI18N_EXPORT kxi18ndc(const char *domain, const char *context, const char *text);
908 
917 KLocalizedString KI18N_EXPORT kxi18ndp(const char *domain, const char *singular, const char *plural);
918 
929 KLocalizedString KI18N_EXPORT kxi18ndcp(const char *domain, const char *context, const char *singular, const char *plural);
930 
940 inline QString tr2i18n(const char *text, const char *comment = 0)
941 {
942  if(comment && comment[0] && text && text[0]) {
943  return ki18nc(comment, text).toString();
944  } else if (text && text[0]) {
945  return ki18n(text).toString();
946  } else {
947  return QString();
948  }
949 }
950 
961 inline QString tr2i18nd(const char *domain,
962  const char *text, const char *comment = 0)
963 {
964  if(comment && comment[0] && text && text[0]) {
965  return ki18ndc(domain, comment, text).toString();
966  } else if(text && text[0]) {
967  return ki18nd(domain, text).toString();
968  } else {
969  return QString();
970  }
971 }
972 
982 inline QString tr2xi18n(const char *text, const char *comment = 0)
983 {
984  if(comment && comment[0] && text && text[0]) {
985  return kxi18nc(comment, text).toString();
986  } else if(text && text[0]) {
987  return kxi18n(text).toString();
988  } else {
989  return QString();
990  }
991 }
992 
1003 inline QString tr2xi18nd(const char *domain,
1004  const char *text, const char *comment = 0)
1005 {
1006  if(comment && comment[0] && text && text[0]) {
1007  return kxi18ndc(domain, comment, text).toString();
1008  } else if(text && text[0]) {
1009  return kxi18nd(domain, text).toString();
1010  } else {
1011  return QString();
1012  }
1013 }
1014 
1015 #ifndef DOXYGEN_PREPROC
1016 
1017 #ifndef NDEBUG
1018 #define I18N_ERR_MSG String_literal_as_second_argument_to_i18n___Perhaps_you_need_i18nc_or_i18np
1019 template <typename T, int s> class I18nTypeCheck {public: static void I18N_ERR_MSG() {}};
1020 template <int s> class I18nTypeCheck<char[s], s> {};
1021 #define STATIC_ASSERT_NOT_LITERAL_STRING(T) I18nTypeCheck<T, sizeof(T)>::I18N_ERR_MSG();
1022 #else
1023 #define STATIC_ASSERT_NOT_LITERAL_STRING(T)
1024 #endif
1025 
1026 // >>>>> Basic calls
1027 // Autogenerated; contact maintainer for batch changes.
1028 inline QString i18n(const char *text)
1029 {
1030  return ki18n(text).toString();
1031 }
1032 template <typename A1>
1033 inline QString i18n(const char *text, const A1 &a1)
1034 {
1035  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1036  return ki18n(text).subs(a1).toString();
1037 }
1038 template <typename A1, typename A2>
1039 inline QString i18n(const char *text, const A1 &a1, const A2 &a2)
1040 {
1041  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1042  return ki18n(text).subs(a1).subs(a2).toString();
1043 }
1044 template <typename A1, typename A2, typename A3>
1045 inline QString i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1046 {
1047  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1048  return ki18n(text).subs(a1).subs(a2).subs(a3).toString();
1049 }
1050 template <typename A1, typename A2, typename A3, typename A4>
1051 inline QString i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1052 {
1053  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1054  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1055 }
1056 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1057 inline QString i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1058 {
1059  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1060  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1061 }
1062 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1063 inline QString i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1064 {
1065  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1066  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1067 }
1068 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1069 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)
1070 {
1071  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1072  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1073 }
1074 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1075 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)
1076 {
1077  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1078  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1079 }
1080 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1081 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)
1082 {
1083  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1084  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1085 }
1086 // <<<<<<< End of basic calls
1087 
1088 // >>>>> Context calls
1089 // Autogenerated; contact maintainer for batch changes.
1090 inline QString i18nc(const char *context, const char *text)
1091 {
1092  return ki18nc(context, text).toString();
1093 }
1094 template <typename A1>
1095 inline QString i18nc(const char *context, const char *text, const A1 &a1)
1096 {
1097  return ki18nc(context, text).subs(a1).toString();
1098 }
1099 template <typename A1, typename A2>
1100 inline QString i18nc(const char *context, const char *text, const A1 &a1, const A2 &a2)
1101 {
1102  return ki18nc(context, text).subs(a1).subs(a2).toString();
1103 }
1104 template <typename A1, typename A2, typename A3>
1105 inline QString i18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1106 {
1107  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).toString();
1108 }
1109 template <typename A1, typename A2, typename A3, typename A4>
1110 inline QString i18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1111 {
1112  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1113 }
1114 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1115 inline QString i18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1116 {
1117  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1118 }
1119 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1120 inline QString i18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1121 {
1122  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1123 }
1124 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1125 inline QString i18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1126 {
1127  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1128 }
1129 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1130 inline QString i18nc(const char *context, 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)
1131 {
1132  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1133 }
1134 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1135 inline QString i18nc(const char *context, 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)
1136 {
1137  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1138 }
1139 // <<<<< End of context calls
1140 
1141 // >>>>> Plural calls
1142 // Autogenerated; contact maintainer for batch changes.
1143 template <typename A1>
1144 inline QString i18np(const char *singular, const char *plural, const A1 &a1)
1145 {
1146  return ki18np(singular, plural).subs(a1).toString();
1147 }
1148 template <typename A1, typename A2>
1149 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1150 {
1151  return ki18np(singular, plural).subs(a1).subs(a2).toString();
1152 }
1153 template <typename A1, typename A2, typename A3>
1154 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1155 {
1156  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).toString();
1157 }
1158 template <typename A1, typename A2, typename A3, typename A4>
1159 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1160 {
1161  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1162 }
1163 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1164 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1165 {
1166  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1167 }
1168 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1169 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1170 {
1171  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1172 }
1173 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1174 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1175 {
1176  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1177 }
1178 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1179 inline QString i18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1180 {
1181  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1182 }
1183 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1184 inline QString i18np(const char *singular, const char *plural, 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)
1185 {
1186  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1187 }
1188 // <<<<< End of plural calls
1189 
1190 // >>>>> Context-plural calls
1191 // Autogenerated; contact maintainer for batch changes.
1192 template <typename A1>
1193 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1)
1194 {
1195  return ki18ncp(context, singular, plural).subs(a1).toString();
1196 }
1197 template <typename A1, typename A2>
1198 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1199 {
1200  return ki18ncp(context, singular, plural).subs(a1).subs(a2).toString();
1201 }
1202 template <typename A1, typename A2, typename A3>
1203 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1204 {
1205  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1206 }
1207 template <typename A1, typename A2, typename A3, typename A4>
1208 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1209 {
1210  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1211 }
1212 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1213 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1214 {
1215  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1216 }
1217 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1218 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1219 {
1220  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1221 }
1222 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1223 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1224 {
1225  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1226 }
1227 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1228 inline QString i18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1229 {
1230  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1231 }
1232 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1233 inline QString i18ncp(const char *context, const char *singular, const char *plural, 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)
1234 {
1235  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1236 }
1237 // <<<<< End of context-plural calls
1238 
1239 // >>>>> Basic calls with domain
1240 // Autogenerated; contact maintainer for batch changes.
1241 inline QString i18nd(const char *domain, const char *text)
1242 {
1243  return ki18nd(domain, text).toString();
1244 }
1245 template <typename A1>
1246 inline QString i18nd(const char *domain, const char *text, const A1 &a1)
1247 {
1248  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1249  return ki18nd(domain, text).subs(a1).toString();
1250 }
1251 template <typename A1, typename A2>
1252 inline QString i18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2)
1253 {
1254  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1255  return ki18nd(domain, text).subs(a1).subs(a2).toString();
1256 }
1257 template <typename A1, typename A2, typename A3>
1258 inline QString i18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1259 {
1260  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1261  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).toString();
1262 }
1263 template <typename A1, typename A2, typename A3, typename A4>
1264 inline QString i18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1265 {
1266  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1267  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1268 }
1269 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1270 inline QString i18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1271 {
1272  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1273  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1274 }
1275 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1276 inline QString i18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1277 {
1278  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1279  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1280 }
1281 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1282 inline QString i18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1283 {
1284  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1285  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1286 }
1287 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1288 inline QString i18nd(const char *domain, 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)
1289 {
1290  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1291  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1292 }
1293 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1294 inline QString i18nd(const char *domain, 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)
1295 {
1296  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1297  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1298 }
1299 // <<<<<<< End of basic calls with domain
1300 
1301 // >>>>> Context calls with domain
1302 // Autogenerated; contact maintainer for batch changes.
1303 inline QString i18ndc(const char *domain, const char *context, const char *text)
1304 {
1305  return ki18ndc(domain, context, text).toString();
1306 }
1307 template <typename A1>
1308 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1)
1309 {
1310  return ki18ndc(domain, context, text).subs(a1).toString();
1311 }
1312 template <typename A1, typename A2>
1313 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2)
1314 {
1315  return ki18ndc(domain, context, text).subs(a1).subs(a2).toString();
1316 }
1317 template <typename A1, typename A2, typename A3>
1318 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1319 {
1320  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).toString();
1321 }
1322 template <typename A1, typename A2, typename A3, typename A4>
1323 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1324 {
1325  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1326 }
1327 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1328 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1329 {
1330  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1331 }
1332 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1333 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1334 {
1335  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1336 }
1337 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1338 inline QString i18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1339 {
1340  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1341 }
1342 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1343 inline QString i18ndc(const char *domain, const char *context, 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)
1344 {
1345  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1346 }
1347 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1348 inline QString i18ndc(const char *domain, const char *context, 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)
1349 {
1350  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1351 }
1352 // <<<<< End of context calls with domain
1353 
1354 // >>>>> Plural calls with domain
1355 // Autogenerated; contact maintainer for batch changes.
1356 template <typename A1>
1357 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1)
1358 {
1359  return ki18ndp(domain, singular, plural).subs(a1).toString();
1360 }
1361 template <typename A1, typename A2>
1362 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1363 {
1364  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).toString();
1365 }
1366 template <typename A1, typename A2, typename A3>
1367 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1368 {
1369  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1370 }
1371 template <typename A1, typename A2, typename A3, typename A4>
1372 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1373 {
1374  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1375 }
1376 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1377 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1378 {
1379  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1380 }
1381 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1382 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1383 {
1384  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1385 }
1386 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1387 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1388 {
1389  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1390 }
1391 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1392 inline QString i18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1393 {
1394  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1395 }
1396 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1397 inline QString i18ndp(const char *domain, const char *singular, const char *plural, 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)
1398 {
1399  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1400 }
1401 // <<<<< End of plural calls with domain
1402 
1403 // >>>>> Context-plural calls with domain
1404 // Autogenerated; contact maintainer for batch changes.
1405 template <typename A1>
1406 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1)
1407 {
1408  return ki18ndcp(domain, context, singular, plural).subs(a1).toString();
1409 }
1410 template <typename A1, typename A2>
1411 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1412 {
1413  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).toString();
1414 }
1415 template <typename A1, typename A2, typename A3>
1416 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1417 {
1418  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1419 }
1420 template <typename A1, typename A2, typename A3, typename A4>
1421 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1422 {
1423  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1424 }
1425 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1426 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1427 {
1428  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1429 }
1430 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1431 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1432 {
1433  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1434 }
1435 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1436 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1437 {
1438  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1439 }
1440 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1441 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1442 {
1443  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1444 }
1445 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1446 inline QString i18ndcp(const char *domain, const char *context, const char *singular, const char *plural, 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)
1447 {
1448  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1449 }
1450 // <<<<< End of context-plural calls with domain
1451 
1452 // >>>>> Markup-aware basic calls
1453 // Autogenerated; contact maintainer for batch changes.
1454 inline QString xi18n(const char *text)
1455 {
1456  return kxi18n(text).toString();
1457 }
1458 template <typename A1>
1459 inline QString xi18n(const char *text, const A1 &a1)
1460 {
1461  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1462  return kxi18n(text).subs(a1).toString();
1463 }
1464 template <typename A1, typename A2>
1465 inline QString xi18n(const char *text, const A1 &a1, const A2 &a2)
1466 {
1467  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1468  return kxi18n(text).subs(a1).subs(a2).toString();
1469 }
1470 template <typename A1, typename A2, typename A3>
1471 inline QString xi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1472 {
1473  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1474  return kxi18n(text).subs(a1).subs(a2).subs(a3).toString();
1475 }
1476 template <typename A1, typename A2, typename A3, typename A4>
1477 inline QString xi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1478 {
1479  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1480  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1481 }
1482 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1483 inline QString xi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1484 {
1485  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1486  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1487 }
1488 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1489 inline QString xi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1490 {
1491  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1492  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1493 }
1494 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1495 inline QString xi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1496 {
1497  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1498  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1499 }
1500 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1501 inline QString xi18n(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)
1502 {
1503  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1504  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1505 }
1506 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1507 inline QString xi18n(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)
1508 {
1509  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1510  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1511 }
1512 // <<<<<<< End of markup-aware basic calls
1513 
1514 // >>>>> Markup-aware context calls
1515 // Autogenerated; contact maintainer for batch changes.
1516 inline QString xi18nc(const char *context, const char *text)
1517 {
1518  return kxi18nc(context, text).toString();
1519 }
1520 template <typename A1>
1521 inline QString xi18nc(const char *context, const char *text, const A1 &a1)
1522 {
1523  return kxi18nc(context, text).subs(a1).toString();
1524 }
1525 template <typename A1, typename A2>
1526 inline QString xi18nc(const char *context, const char *text, const A1 &a1, const A2 &a2)
1527 {
1528  return kxi18nc(context, text).subs(a1).subs(a2).toString();
1529 }
1530 template <typename A1, typename A2, typename A3>
1531 inline QString xi18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1532 {
1533  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).toString();
1534 }
1535 template <typename A1, typename A2, typename A3, typename A4>
1536 inline QString xi18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1537 {
1538  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1539 }
1540 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1541 inline QString xi18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1542 {
1543  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1544 }
1545 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1546 inline QString xi18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1547 {
1548  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1549 }
1550 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1551 inline QString xi18nc(const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1552 {
1553  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1554 }
1555 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1556 inline QString xi18nc(const char *context, 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)
1557 {
1558  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1559 }
1560 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1561 inline QString xi18nc(const char *context, 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)
1562 {
1563  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1564 }
1565 // <<<<< End of markup-aware context calls
1566 
1567 // >>>>> Markup-aware plural calls
1568 // Autogenerated; contact maintainer for batch changes.
1569 template <typename A1>
1570 inline QString xi18np(const char *singular, const char *plural, const A1 &a1)
1571 {
1572  return kxi18np(singular, plural).subs(a1).toString();
1573 }
1574 template <typename A1, typename A2>
1575 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1576 {
1577  return kxi18np(singular, plural).subs(a1).subs(a2).toString();
1578 }
1579 template <typename A1, typename A2, typename A3>
1580 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1581 {
1582  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).toString();
1583 }
1584 template <typename A1, typename A2, typename A3, typename A4>
1585 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1586 {
1587  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1588 }
1589 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1590 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1591 {
1592  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1593 }
1594 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1595 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1596 {
1597  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1598 }
1599 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1600 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1601 {
1602  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1603 }
1604 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1605 inline QString xi18np(const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1606 {
1607  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1608 }
1609 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1610 inline QString xi18np(const char *singular, const char *plural, 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)
1611 {
1612  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1613 }
1614 // <<<<< End of markup-aware plural calls
1615 
1616 // >>>>> Markup-aware context-plural calls
1617 // Autogenerated; contact maintainer for batch changes.
1618 template <typename A1>
1619 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1)
1620 {
1621  return kxi18ncp(context, singular, plural).subs(a1).toString();
1622 }
1623 template <typename A1, typename A2>
1624 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1625 {
1626  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).toString();
1627 }
1628 template <typename A1, typename A2, typename A3>
1629 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1630 {
1631  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1632 }
1633 template <typename A1, typename A2, typename A3, typename A4>
1634 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1635 {
1636  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1637 }
1638 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1639 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1640 {
1641  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1642 }
1643 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1644 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1645 {
1646  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1647 }
1648 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1649 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1650 {
1651  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1652 }
1653 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1654 inline QString xi18ncp(const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1655 {
1656  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1657 }
1658 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1659 inline QString xi18ncp(const char *context, const char *singular, const char *plural, 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)
1660 {
1661  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1662 }
1663 // <<<<< End of markup-aware context-plural calls
1664 
1665 // >>>>> Markup-aware basic calls with domain
1666 // Autogenerated; contact maintainer for batch changes.
1667 inline QString xi18nd(const char *domain, const char *text)
1668 {
1669  return kxi18nd(domain, text).toString();
1670 }
1671 template <typename A1>
1672 inline QString xi18nd(const char *domain, const char *text, const A1 &a1)
1673 {
1674  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1675  return kxi18nd(domain, text).subs(a1).toString();
1676 }
1677 template <typename A1, typename A2>
1678 inline QString xi18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2)
1679 {
1680  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1681  return kxi18nd(domain, text).subs(a1).subs(a2).toString();
1682 }
1683 template <typename A1, typename A2, typename A3>
1684 inline QString xi18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1685 {
1686  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1687  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).toString();
1688 }
1689 template <typename A1, typename A2, typename A3, typename A4>
1690 inline QString xi18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1691 {
1692  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1693  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1694 }
1695 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1696 inline QString xi18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1697 {
1698  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1699  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1700 }
1701 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1702 inline QString xi18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1703 {
1704  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1705  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1706 }
1707 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1708 inline QString xi18nd(const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1709 {
1710  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1711  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1712 }
1713 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1714 inline QString xi18nd(const char *domain, 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)
1715 {
1716  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1717  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1718 }
1719 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1720 inline QString xi18nd(const char *domain, 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)
1721 {
1722  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1723  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1724 }
1725 // <<<<<<< End of markup-aware basic calls with domain
1726 
1727 // >>>>> Markup-aware context calls with domain
1728 // Autogenerated; contact maintainer for batch changes.
1729 inline QString xi18ndc(const char *domain, const char *context, const char *text)
1730 {
1731  return kxi18ndc(domain, context, text).toString();
1732 }
1733 template <typename A1>
1734 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1)
1735 {
1736  return kxi18ndc(domain, context, text).subs(a1).toString();
1737 }
1738 template <typename A1, typename A2>
1739 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2)
1740 {
1741  return kxi18ndc(domain, context, text).subs(a1).subs(a2).toString();
1742 }
1743 template <typename A1, typename A2, typename A3>
1744 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1745 {
1746  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).toString();
1747 }
1748 template <typename A1, typename A2, typename A3, typename A4>
1749 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1750 {
1751  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1752 }
1753 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1754 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1755 {
1756  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1757 }
1758 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1759 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1760 {
1761  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1762 }
1763 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1764 inline QString xi18ndc(const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1765 {
1766  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1767 }
1768 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1769 inline QString xi18ndc(const char *domain, const char *context, 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)
1770 {
1771  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1772 }
1773 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1774 inline QString xi18ndc(const char *domain, const char *context, 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)
1775 {
1776  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1777 }
1778 // <<<<< End of markup-aware context calls with domain
1779 
1780 // >>>>> Markup-aware plural calls with domain
1781 // Autogenerated; contact maintainer for batch changes.
1782 template <typename A1>
1783 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1)
1784 {
1785  return kxi18ndp(domain, singular, plural).subs(a1).toString();
1786 }
1787 template <typename A1, typename A2>
1788 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1789 {
1790  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).toString();
1791 }
1792 template <typename A1, typename A2, typename A3>
1793 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1794 {
1795  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1796 }
1797 template <typename A1, typename A2, typename A3, typename A4>
1798 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1799 {
1800  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1801 }
1802 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1803 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1804 {
1805  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1806 }
1807 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1808 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1809 {
1810  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1811 }
1812 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1813 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1814 {
1815  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1816 }
1817 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1818 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1819 {
1820  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1821 }
1822 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1823 inline QString xi18ndp(const char *domain, const char *singular, const char *plural, 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)
1824 {
1825  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1826 }
1827 // <<<<< End of markup-aware plural calls with domain
1828 
1829 // >>>>> Markup-aware context-plural calls with domain
1830 // Autogenerated; contact maintainer for batch changes.
1831 template <typename A1>
1832 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1)
1833 {
1834  return kxi18ndcp(domain, context, singular, plural).subs(a1).toString();
1835 }
1836 template <typename A1, typename A2>
1837 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1838 {
1839  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).toString();
1840 }
1841 template <typename A1, typename A2, typename A3>
1842 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1843 {
1844  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1845 }
1846 template <typename A1, typename A2, typename A3, typename A4>
1847 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1848 {
1849  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1850 }
1851 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1852 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1853 {
1854  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1855 }
1856 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1857 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1858 {
1859  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1860 }
1861 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1862 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7)
1863 {
1864  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1865 }
1866 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1867 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6, const A7 &a7, const A8 &a8)
1868 {
1869  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1870 }
1871 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1872 inline QString xi18ndcp(const char *domain, const char *context, const char *singular, const char *plural, 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)
1873 {
1874  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1875 }
1876 // <<<<< End of markup-aware context-plural calls with domain
1877 
1878 #endif // DOXYGEN_PREPROC
1879 
1880 #endif // KLOCALIZEDSTRING_H
1881 
1882 #ifndef DOXYGEN_PREPROC
1883 
1884 // Outside of include guards, to be able to map and unmap domains
1885 // by successive inclusions of this header
1886 // preceded with different definitions of TRANSLATION_DOMAIN.
1887 #ifdef TRANSLATION_DOMAIN
1888  #define i18n(...) i18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1889  #define i18nc(...) i18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1890  #define i18np(...) i18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1891  #define i18ncp(...) i18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1892  #define ki18n(...) ki18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1893  #define ki18nc(...) ki18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1894  #define ki18np(...) ki18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1895  #define ki18ncp(...) ki18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1896  #define tr2i18n(...) tr2i18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1897  #define xi18n(...) xi18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1898  #define xi18nc(...) xi18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1899  #define xi18np(...) xi18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1900  #define xi18ncp(...) xi18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1901  #define kxi18n(...) kxi18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1902  #define kxi18nc(...) kxi18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1903  #define kxi18np(...) kxi18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1904  #define kxi18ncp(...) kxi18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1905  #define tr2xi18n(...) tr2i18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1906 #else
1907  #undef i18n
1908  #undef i18nc
1909  #undef i18np
1910  #undef i18ncp
1911  #undef ki18n
1912  #undef ki18nc
1913  #undef ki18np
1914  #undef ki18ncp
1915  #undef tr2i18n
1916  #undef xi18n
1917  #undef xi18nc
1918  #undef xi18np
1919  #undef xi18ncp
1920  #undef kxi18n
1921  #undef kxi18nc
1922  #undef kxi18np
1923  #undef kxi18ncp
1924  #undef tr2xi18n
1925 #endif
1926 
1927 #endif // DOXYGEN_PREPROC