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 
119  KLocalizedString (const KLocalizedString &rhs);
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 
432  static void setApplicationCatalog (const QString &domain);
433 
434  #if 0 // until locale system is ready
435 
444  static void setLocale (const KLocale &locale);
445  #endif
446 
457  static void setLanguages (const QStringList &languages);
458 
467  static void clearLanguages ();
468 
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 insertQtCatalog (const QString &domain);
545 
562  static void removeQtCatalog (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  }
945  else if (text && text[0]) {
946  return ki18n(text).toString();
947  }
948  else {
949  return QString();
950  }
951 }
952 
963 inline QString tr2i18nd (const char *domain,
964  const char *text, const char *comment = 0)
965 {
966  if (comment && comment[0] && text && text[0]) {
967  return ki18ndc(domain, comment, text).toString();
968  }
969  else if (text && text[0]) {
970  return ki18nd(domain, text).toString();
971  }
972  else {
973  return QString();
974  }
975 }
976 
986 inline QString tr2xi18n (const char *text, const char *comment = 0)
987 {
988  if (comment && comment[0] && text && text[0]) {
989  return kxi18nc(comment, text).toString();
990  }
991  else if (text && text[0]) {
992  return kxi18n(text).toString();
993  }
994  else {
995  return QString();
996  }
997 }
998 
1009 inline QString tr2xi18nd (const char *domain,
1010  const char *text, const char *comment = 0)
1011 {
1012  if (comment && comment[0] && text && text[0]) {
1013  return kxi18ndc(domain, comment, text).toString();
1014  }
1015  else if (text && text[0]) {
1016  return kxi18nd(domain, text).toString();
1017  }
1018  else {
1019  return QString();
1020  }
1021 }
1022 
1023 #ifndef DOXYGEN_PREPROC
1024 
1025 #ifndef NDEBUG
1026 #define I18N_ERR_MSG String_literal_as_second_argument_to_i18n___Perhaps_you_need_i18nc_or_i18np
1027 template <typename T, int s> class I18nTypeCheck {public: static void I18N_ERR_MSG () {}};
1028 template <int s> class I18nTypeCheck<char[s], s> {};
1029 #define STATIC_ASSERT_NOT_LITERAL_STRING(T) I18nTypeCheck<T, sizeof(T)>::I18N_ERR_MSG ();
1030 #else
1031 #define STATIC_ASSERT_NOT_LITERAL_STRING(T)
1032 #endif
1033 
1034 // >>>>> Basic calls
1035 // Autogenerated; contact maintainer for batch changes.
1036 inline QString i18n (const char *text)
1037 {
1038  return ki18n(text).toString();
1039 }
1040 template <typename A1>
1041 inline QString i18n (const char *text, const A1 &a1)
1042 {
1043  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1044  return ki18n(text).subs(a1).toString();
1045 }
1046 template <typename A1, typename A2>
1047 inline QString i18n (const char *text, const A1 &a1, const A2 &a2)
1048 {
1049  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1050  return ki18n(text).subs(a1).subs(a2).toString();
1051 }
1052 template <typename A1, typename A2, typename A3>
1053 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1054 {
1055  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1056  return ki18n(text).subs(a1).subs(a2).subs(a3).toString();
1057 }
1058 template <typename A1, typename A2, typename A3, typename A4>
1059 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1060 {
1061  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1062  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1063 }
1064 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1065 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1066 {
1067  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1068  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1069 }
1070 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1071 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1072 {
1073  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1074  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1075 }
1076 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1077 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)
1078 {
1079  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1080  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1081 }
1082 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1083 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)
1084 {
1085  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1086  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1087 }
1088 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1089 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)
1090 {
1091  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1092  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1093 }
1094 // <<<<<<< End of basic calls
1095 
1096 // >>>>> Context calls
1097 // Autogenerated; contact maintainer for batch changes.
1098 inline QString i18nc (const char *context, const char *text)
1099 {
1100  return ki18nc(context, text).toString();
1101 }
1102 template <typename A1>
1103 inline QString i18nc (const char *context, const char *text, const A1 &a1)
1104 {
1105  return ki18nc(context, text).subs(a1).toString();
1106 }
1107 template <typename A1, typename A2>
1108 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2)
1109 {
1110  return ki18nc(context, text).subs(a1).subs(a2).toString();
1111 }
1112 template <typename A1, typename A2, typename A3>
1113 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1114 {
1115  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).toString();
1116 }
1117 template <typename A1, typename A2, typename A3, typename A4>
1118 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1119 {
1120  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1121 }
1122 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1123 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1124 {
1125  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1126 }
1127 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1128 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)
1129 {
1130  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1131 }
1132 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1133 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)
1134 {
1135  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1136 }
1137 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1138 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)
1139 {
1140  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1141 }
1142 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1143 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)
1144 {
1145  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1146 }
1147 // <<<<< End of context calls
1148 
1149 // >>>>> Plural calls
1150 // Autogenerated; contact maintainer for batch changes.
1151 template <typename A1>
1152 inline QString i18np (const char *singular, const char *plural, const A1 &a1)
1153 {
1154  return ki18np(singular, plural).subs(a1).toString();
1155 }
1156 template <typename A1, typename A2>
1157 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1158 {
1159  return ki18np(singular, plural).subs(a1).subs(a2).toString();
1160 }
1161 template <typename A1, typename A2, typename A3>
1162 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1163 {
1164  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).toString();
1165 }
1166 template <typename A1, typename A2, typename A3, typename A4>
1167 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1168 {
1169  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1170 }
1171 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1172 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1173 {
1174  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1175 }
1176 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1177 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)
1178 {
1179  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1180 }
1181 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1182 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)
1183 {
1184  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1185 }
1186 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1187 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)
1188 {
1189  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1190 }
1191 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1192 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)
1193 {
1194  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1195 }
1196 // <<<<< End of plural calls
1197 
1198 // >>>>> Context-plural calls
1199 // Autogenerated; contact maintainer for batch changes.
1200 template <typename A1>
1201 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1)
1202 {
1203  return ki18ncp(context, singular, plural).subs(a1).toString();
1204 }
1205 template <typename A1, typename A2>
1206 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1207 {
1208  return ki18ncp(context, singular, plural).subs(a1).subs(a2).toString();
1209 }
1210 template <typename A1, typename A2, typename A3>
1211 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1212 {
1213  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1214 }
1215 template <typename A1, typename A2, typename A3, typename A4>
1216 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1217 {
1218  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1219 }
1220 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1221 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)
1222 {
1223  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1224 }
1225 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1226 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)
1227 {
1228  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1229 }
1230 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1231 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)
1232 {
1233  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1234 }
1235 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1236 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)
1237 {
1238  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1239 }
1240 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1241 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)
1242 {
1243  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1244 }
1245 // <<<<< End of context-plural calls
1246 
1247 // >>>>> Basic calls with domain
1248 // Autogenerated; contact maintainer for batch changes.
1249 inline QString i18nd (const char *domain, const char *text)
1250 {
1251  return ki18nd(domain, text).toString();
1252 }
1253 template <typename A1>
1254 inline QString i18nd (const char *domain, const char *text, const A1 &a1)
1255 {
1256  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1257  return ki18nd(domain, text).subs(a1).toString();
1258 }
1259 template <typename A1, typename A2>
1260 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2)
1261 {
1262  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1263  return ki18nd(domain, text).subs(a1).subs(a2).toString();
1264 }
1265 template <typename A1, typename A2, typename A3>
1266 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1267 {
1268  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1269  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).toString();
1270 }
1271 template <typename A1, typename A2, typename A3, typename A4>
1272 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1273 {
1274  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1275  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1276 }
1277 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1278 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1279 {
1280  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1281  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1282 }
1283 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1284 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)
1285 {
1286  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1287  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1288 }
1289 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1290 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)
1291 {
1292  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1293  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1294 }
1295 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1296 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)
1297 {
1298  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1299  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1300 }
1301 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1302 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)
1303 {
1304  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1305  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1306 }
1307 // <<<<<<< End of basic calls with domain
1308 
1309 // >>>>> Context calls with domain
1310 // Autogenerated; contact maintainer for batch changes.
1311 inline QString i18ndc (const char *domain, const char *context, const char *text)
1312 {
1313  return ki18ndc(domain, context, text).toString();
1314 }
1315 template <typename A1>
1316 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1)
1317 {
1318  return ki18ndc(domain, context, text).subs(a1).toString();
1319 }
1320 template <typename A1, typename A2>
1321 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2)
1322 {
1323  return ki18ndc(domain, context, text).subs(a1).subs(a2).toString();
1324 }
1325 template <typename A1, typename A2, typename A3>
1326 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1327 {
1328  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).toString();
1329 }
1330 template <typename A1, typename A2, typename A3, typename A4>
1331 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1332 {
1333  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1334 }
1335 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1336 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)
1337 {
1338  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1339 }
1340 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1341 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)
1342 {
1343  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1344 }
1345 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1346 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)
1347 {
1348  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1349 }
1350 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1351 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)
1352 {
1353  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1354 }
1355 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1356 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)
1357 {
1358  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1359 }
1360 // <<<<< End of context calls with domain
1361 
1362 // >>>>> Plural calls with domain
1363 // Autogenerated; contact maintainer for batch changes.
1364 template <typename A1>
1365 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1)
1366 {
1367  return ki18ndp(domain, singular, plural).subs(a1).toString();
1368 }
1369 template <typename A1, typename A2>
1370 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1371 {
1372  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).toString();
1373 }
1374 template <typename A1, typename A2, typename A3>
1375 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1376 {
1377  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1378 }
1379 template <typename A1, typename A2, typename A3, typename A4>
1380 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1381 {
1382  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1383 }
1384 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1385 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)
1386 {
1387  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1388 }
1389 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1390 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)
1391 {
1392  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1393 }
1394 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1395 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)
1396 {
1397  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1398 }
1399 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1400 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)
1401 {
1402  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1403 }
1404 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1405 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)
1406 {
1407  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1408 }
1409 // <<<<< End of plural calls with domain
1410 
1411 // >>>>> Context-plural calls with domain
1412 // Autogenerated; contact maintainer for batch changes.
1413 template <typename A1>
1414 inline QString i18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1)
1415 {
1416  return ki18ndcp(domain, context, singular, plural).subs(a1).toString();
1417 }
1418 template <typename A1, typename A2>
1419 inline QString i18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1420 {
1421  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).toString();
1422 }
1423 template <typename A1, typename A2, typename A3>
1424 inline QString i18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1425 {
1426  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1427 }
1428 template <typename A1, typename A2, typename A3, typename A4>
1429 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)
1430 {
1431  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1432 }
1433 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1434 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)
1435 {
1436  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1437 }
1438 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1439 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)
1440 {
1441  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1442 }
1443 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1444 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)
1445 {
1446  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1447 }
1448 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1449 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)
1450 {
1451  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1452 }
1453 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1454 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)
1455 {
1456  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();
1457 }
1458 // <<<<< End of context-plural calls with domain
1459 
1460 // >>>>> Markup-aware basic calls
1461 // Autogenerated; contact maintainer for batch changes.
1462 inline QString xi18n (const char *text)
1463 {
1464  return kxi18n(text).toString();
1465 }
1466 template <typename A1>
1467 inline QString xi18n (const char *text, const A1 &a1)
1468 {
1469  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1470  return kxi18n(text).subs(a1).toString();
1471 }
1472 template <typename A1, typename A2>
1473 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2)
1474 {
1475  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1476  return kxi18n(text).subs(a1).subs(a2).toString();
1477 }
1478 template <typename A1, typename A2, typename A3>
1479 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1480 {
1481  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1482  return kxi18n(text).subs(a1).subs(a2).subs(a3).toString();
1483 }
1484 template <typename A1, typename A2, typename A3, typename A4>
1485 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1486 {
1487  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1488  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1489 }
1490 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1491 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1492 {
1493  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1494  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1495 }
1496 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1497 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1498 {
1499  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1500  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1501 }
1502 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1503 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)
1504 {
1505  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1506  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1507 }
1508 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1509 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)
1510 {
1511  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1512  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1513 }
1514 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1515 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)
1516 {
1517  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1518  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1519 }
1520 // <<<<<<< End of markup-aware basic calls
1521 
1522 // >>>>> Markup-aware context calls
1523 // Autogenerated; contact maintainer for batch changes.
1524 inline QString xi18nc (const char *context, const char *text)
1525 {
1526  return kxi18nc(context, text).toString();
1527 }
1528 template <typename A1>
1529 inline QString xi18nc (const char *context, const char *text, const A1 &a1)
1530 {
1531  return kxi18nc(context, text).subs(a1).toString();
1532 }
1533 template <typename A1, typename A2>
1534 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2)
1535 {
1536  return kxi18nc(context, text).subs(a1).subs(a2).toString();
1537 }
1538 template <typename A1, typename A2, typename A3>
1539 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1540 {
1541  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).toString();
1542 }
1543 template <typename A1, typename A2, typename A3, typename A4>
1544 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1545 {
1546  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1547 }
1548 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1549 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1550 {
1551  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1552 }
1553 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1554 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)
1555 {
1556  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1557 }
1558 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1559 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)
1560 {
1561  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1562 }
1563 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1564 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)
1565 {
1566  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1567 }
1568 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1569 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)
1570 {
1571  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1572 }
1573 // <<<<< End of markup-aware context calls
1574 
1575 // >>>>> Markup-aware plural calls
1576 // Autogenerated; contact maintainer for batch changes.
1577 template <typename A1>
1578 inline QString xi18np (const char *singular, const char *plural, const A1 &a1)
1579 {
1580  return kxi18np(singular, plural).subs(a1).toString();
1581 }
1582 template <typename A1, typename A2>
1583 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1584 {
1585  return kxi18np(singular, plural).subs(a1).subs(a2).toString();
1586 }
1587 template <typename A1, typename A2, typename A3>
1588 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1589 {
1590  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).toString();
1591 }
1592 template <typename A1, typename A2, typename A3, typename A4>
1593 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1594 {
1595  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1596 }
1597 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1598 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1599 {
1600  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1601 }
1602 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1603 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)
1604 {
1605  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1606 }
1607 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1608 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)
1609 {
1610  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1611 }
1612 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1613 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)
1614 {
1615  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1616 }
1617 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1618 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)
1619 {
1620  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1621 }
1622 // <<<<< End of markup-aware plural calls
1623 
1624 // >>>>> Markup-aware context-plural calls
1625 // Autogenerated; contact maintainer for batch changes.
1626 template <typename A1>
1627 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1)
1628 {
1629  return kxi18ncp(context, singular, plural).subs(a1).toString();
1630 }
1631 template <typename A1, typename A2>
1632 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1633 {
1634  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).toString();
1635 }
1636 template <typename A1, typename A2, typename A3>
1637 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1638 {
1639  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1640 }
1641 template <typename A1, typename A2, typename A3, typename A4>
1642 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1643 {
1644  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1645 }
1646 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1647 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)
1648 {
1649  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1650 }
1651 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1652 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)
1653 {
1654  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1655 }
1656 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1657 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)
1658 {
1659  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1660 }
1661 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1662 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)
1663 {
1664  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1665 }
1666 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1667 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)
1668 {
1669  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1670 }
1671 // <<<<< End of markup-aware context-plural calls
1672 
1673 // >>>>> Markup-aware basic calls with domain
1674 // Autogenerated; contact maintainer for batch changes.
1675 inline QString xi18nd (const char *domain, const char *text)
1676 {
1677  return kxi18nd(domain, text).toString();
1678 }
1679 template <typename A1>
1680 inline QString xi18nd (const char *domain, const char *text, const A1 &a1)
1681 {
1682  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1683  return kxi18nd(domain, text).subs(a1).toString();
1684 }
1685 template <typename A1, typename A2>
1686 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2)
1687 {
1688  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1689  return kxi18nd(domain, text).subs(a1).subs(a2).toString();
1690 }
1691 template <typename A1, typename A2, typename A3>
1692 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1693 {
1694  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1695  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).toString();
1696 }
1697 template <typename A1, typename A2, typename A3, typename A4>
1698 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1699 {
1700  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1701  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1702 }
1703 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1704 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1705 {
1706  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1707  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1708 }
1709 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1710 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)
1711 {
1712  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1713  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1714 }
1715 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1716 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)
1717 {
1718  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1719  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1720 }
1721 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1722 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)
1723 {
1724  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1725  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1726 }
1727 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1728 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)
1729 {
1730  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1731  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1732 }
1733 // <<<<<<< End of markup-aware basic calls with domain
1734 
1735 // >>>>> Markup-aware context calls with domain
1736 // Autogenerated; contact maintainer for batch changes.
1737 inline QString xi18ndc (const char *domain, const char *context, const char *text)
1738 {
1739  return kxi18ndc(domain, context, text).toString();
1740 }
1741 template <typename A1>
1742 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1)
1743 {
1744  return kxi18ndc(domain, context, text).subs(a1).toString();
1745 }
1746 template <typename A1, typename A2>
1747 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2)
1748 {
1749  return kxi18ndc(domain, context, text).subs(a1).subs(a2).toString();
1750 }
1751 template <typename A1, typename A2, typename A3>
1752 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1753 {
1754  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).toString();
1755 }
1756 template <typename A1, typename A2, typename A3, typename A4>
1757 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1758 {
1759  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1760 }
1761 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1762 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)
1763 {
1764  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1765 }
1766 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1767 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)
1768 {
1769  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1770 }
1771 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1772 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)
1773 {
1774  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1775 }
1776 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1777 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)
1778 {
1779  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1780 }
1781 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1782 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)
1783 {
1784  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1785 }
1786 // <<<<< End of markup-aware context calls with domain
1787 
1788 // >>>>> Markup-aware plural calls with domain
1789 // Autogenerated; contact maintainer for batch changes.
1790 template <typename A1>
1791 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1)
1792 {
1793  return kxi18ndp(domain, singular, plural).subs(a1).toString();
1794 }
1795 template <typename A1, typename A2>
1796 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1797 {
1798  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).toString();
1799 }
1800 template <typename A1, typename A2, typename A3>
1801 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1802 {
1803  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1804 }
1805 template <typename A1, typename A2, typename A3, typename A4>
1806 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1807 {
1808  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1809 }
1810 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1811 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)
1812 {
1813  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1814 }
1815 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1816 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)
1817 {
1818  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1819 }
1820 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1821 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)
1822 {
1823  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1824 }
1825 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1826 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)
1827 {
1828  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1829 }
1830 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1831 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)
1832 {
1833  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1834 }
1835 // <<<<< End of markup-aware plural calls with domain
1836 
1837 // >>>>> Markup-aware context-plural calls with domain
1838 // Autogenerated; contact maintainer for batch changes.
1839 template <typename A1>
1840 inline QString xi18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1)
1841 {
1842  return kxi18ndcp(domain, context, singular, plural).subs(a1).toString();
1843 }
1844 template <typename A1, typename A2>
1845 inline QString xi18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1846 {
1847  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).toString();
1848 }
1849 template <typename A1, typename A2, typename A3>
1850 inline QString xi18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1851 {
1852  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1853 }
1854 template <typename A1, typename A2, typename A3, typename A4>
1855 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)
1856 {
1857  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1858 }
1859 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1860 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)
1861 {
1862  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1863 }
1864 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1865 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)
1866 {
1867  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1868 }
1869 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1870 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)
1871 {
1872  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1873 }
1874 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1875 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)
1876 {
1877  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1878 }
1879 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1880 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)
1881 {
1882  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();
1883 }
1884 // <<<<< End of markup-aware context-plural calls with domain
1885 
1886 #endif // DOXYGEN_PREPROC
1887 
1888 #endif // KLOCALIZEDSTRING_H
1889 
1890 #ifndef DOXYGEN_PREPROC
1891 
1892 // Outside of include guards, to be able to map and unmap catalogs
1893 // by successive inclusions of this header
1894 // preceded with different definitions of TRANSLATION_DOMAIN.
1895 #ifdef TRANSLATION_DOMAIN
1896  #define i18n(...) i18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1897  #define i18nc(...) i18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1898  #define i18np(...) i18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1899  #define i18ncp(...) i18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1900  #define ki18n(...) ki18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1901  #define ki18nc(...) ki18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1902  #define ki18np(...) ki18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1903  #define ki18ncp(...) ki18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1904  #define tr2i18n(...) tr2i18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1905  #define xi18n(...) xi18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1906  #define xi18nc(...) xi18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1907  #define xi18np(...) xi18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1908  #define xi18ncp(...) xi18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1909  #define kxi18n(...) kxi18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1910  #define kxi18nc(...) kxi18ndc(TRANSLATION_DOMAIN, __VA_ARGS__)
1911  #define kxi18np(...) kxi18ndp(TRANSLATION_DOMAIN, __VA_ARGS__)
1912  #define kxi18ncp(...) kxi18ndcp(TRANSLATION_DOMAIN, __VA_ARGS__)
1913  #define tr2xi18n(...) tr2i18nd(TRANSLATION_DOMAIN, __VA_ARGS__)
1914 #else
1915  #undef i18n
1916  #undef i18nc
1917  #undef i18np
1918  #undef i18ncp
1919  #undef ki18n
1920  #undef ki18nc
1921  #undef ki18np
1922  #undef ki18ncp
1923  #undef tr2i18n
1924  #undef xi18n
1925  #undef xi18nc
1926  #undef xi18np
1927  #undef xi18ncp
1928  #undef kxi18n
1929  #undef kxi18nc
1930  #undef kxi18np
1931  #undef kxi18ncp
1932  #undef tr2xi18n
1933 #endif
1934 
1935 #endif // DOXYGEN_PREPROC