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 I18N_NOOP2
47 
52 #define I18N_NOOP2(context, text) text
53 #endif
54 
55 #ifndef I18N_NOOP2_NOSTRIP
56 
61 #define I18N_NOOP2_NOSTRIP(context, text) context, text
62 #endif
63 
73 class KI18N_EXPORT KLocalizedString
74 {
75  friend KLocalizedString KI18N_EXPORT ki18n (const char* text);
76  friend KLocalizedString KI18N_EXPORT ki18nc (const char *context, const char *text);
77  friend KLocalizedString KI18N_EXPORT ki18np (const char *singular, const char *plural);
78  friend KLocalizedString KI18N_EXPORT ki18ncp (const char *context, const char *singular, const char *plural);
79  friend KLocalizedString KI18N_EXPORT ki18nd (const char *domain, const char* text);
80  friend KLocalizedString KI18N_EXPORT ki18ndc (const char *domain, const char *context, const char *text);
81  friend KLocalizedString KI18N_EXPORT ki18ndp (const char *domain, const char *singular, const char *plural);
82  friend KLocalizedString KI18N_EXPORT ki18ndcp (const char *domain, const char *context, const char *singular, const char *plural);
83 
84  friend KLocalizedString KI18N_EXPORT kxi18n (const char* text);
85  friend KLocalizedString KI18N_EXPORT kxi18nc (const char *context, const char *text);
86  friend KLocalizedString KI18N_EXPORT kxi18np (const char *singular, const char *plural);
87  friend KLocalizedString KI18N_EXPORT kxi18ncp (const char *context, const char *singular, const char *plural);
88  friend KLocalizedString KI18N_EXPORT kxi18nd (const char *domain, const char* text);
89  friend KLocalizedString KI18N_EXPORT kxi18ndc (const char *domain, const char *context, const char *text);
90  friend KLocalizedString KI18N_EXPORT kxi18ndp (const char *domain, const char *singular, const char *plural);
91  friend KLocalizedString KI18N_EXPORT kxi18ndcp (const char *domain, const char *context, const char *singular, const char *plural);
92 
93 public:
105  explicit KLocalizedString ();
106 
110  KLocalizedString (const KLocalizedString &rhs);
111 
115  KLocalizedString& operator= (const KLocalizedString &rhs);
116 
120  ~KLocalizedString ();
121 
135  QString toString () const;
136 
147  QString toString (const QStringList &languages) const;
148 
149  #if 0 // until locale system is ready
150 
159  QString toString (const KLocale *locale) const;
160  #endif
161 
170  QString toString (const QString &domain) const;
171 
183  QString toString (KUIT::VisualFormat format) const;
184 
191  KLocalizedString withLanguages (const QStringList &languages) const;
192 
199  KLocalizedString withLocale (const KLocale *locale) const;
200 
207  KLocalizedString withDomain (const QString &domain) const;
208 
217  KLocalizedString withFormat (KUIT::VisualFormat format) const;
218 
231  bool isEmpty () const;
232 
245  KLocalizedString subs (int a, int fieldWidth = 0, int base = 10,
246  const QChar &fillChar = QLatin1Char(' ')) const;
247 
260  KLocalizedString subs (uint a, int fieldWidth = 0, int base = 10,
261  const QChar &fillChar = QLatin1Char(' ')) const;
262 
275  KLocalizedString subs (long a, int fieldWidth = 0, int base = 10,
276  const QChar &fillChar = QLatin1Char(' ')) const;
277 
290  KLocalizedString subs (ulong a, int fieldWidth = 0, int base = 10,
291  const QChar &fillChar = QLatin1Char(' ')) const;
292 
305  KLocalizedString subs (qlonglong a, int fieldWidth = 0, int base = 10,
306  const QChar &fillChar = QLatin1Char(' ')) const;
307 
320  KLocalizedString subs (qulonglong a, int fieldWidth = 0, int base = 10,
321  const QChar &fillChar = QLatin1Char(' ')) const;
322 
335  KLocalizedString subs (double a, int fieldWidth = 0,
336  char format = 'g', int precision = -1,
337  const QChar &fillChar = QLatin1Char(' ')) const;
338 
349  KLocalizedString subs (QChar a, int fieldWidth = 0,
350  const QChar &fillChar = QLatin1Char(' ')) const;
351 
362  KLocalizedString subs (const QString &a, int fieldWidth = 0,
363  const QChar &fillChar = QLatin1Char(' ')) const;
364 
375  KLocalizedString subs (const KLocalizedString &a, int fieldWidth = 0,
376  const QChar &fillChar = QLatin1Char(' ')) const;
377 
395  KLocalizedString relaxSubs () const;
396 
406  KLocalizedString inContext (const QString &key,
407  const QString &text) const;
408 
423  static void setApplicationCatalog (const QString &domain);
424 
425  #if 0 // until locale system is ready
426 
435  static void setLocale (const KLocale &locale);
436  #endif
437 
448  static void setLanguages (const QStringList &languages);
449 
458  static void clearLanguages ();
459 
468  static bool isApplicationTranslatedInto (const QString &language);
469 
485  static QString localizedFilePath (const QString &filePath);
486 
501  static QString removeAcceleratorMarker (const QString &label);
502 
518  static QString translateQt (const char* context, const char *text,
519  const char* comment
520 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
521  , int n
522 #endif
523  );
524 
535  static void insertQtCatalog (const QString &domain);
536 
553  static void removeQtCatalog (const QString &domain);
554 
555 private:
556  KLocalizedString (const char *context, const char *msg, const char *plural,
557  bool markupAware);
558 
559  KLocalizedStringPrivate * const d;
560 };
561 
562 // Do not document every multi-argument i18n* call separately,
563 // but provide special quasi-calls that only Doxygen sees.
564 // Placed in front of ki18n* calls, because i18n* are more basic.
565 #ifdef DOXYGEN_PREPROC
566 
575 QString i18n (const char *text, const TYPE &arg...);
576 
586 QString i18nc (const char *context, const char *text, const TYPE &arg...);
587 
597 QString i18np (const char *singular, const char *plural, const TYPE &arg...);
598 
609 QString i18ncp (const char *context, const char *singular, const char *plural,
610  const TYPE &arg...);
611 
621 QString i18nd (const char *domain, const char *text, const TYPE &arg...);
622 
633 QString i18ndc (const char *domain, const char *context, const char *text,
634  const TYPE &arg...);
635 
646 QString i18ndp (const char *domain, const char *singular, const char *plural,
647  const TYPE &arg...);
648 
661 QString i18ndcp (const char *domain,
662  const char *context, const char *singular, const char *plural,
663  const TYPE &arg...);
664 
673 QString xi18n (const char *text, const TYPE &arg...);
674 
684 QString xi18nc (const char *context, const char *text, const TYPE &arg...);
685 
695 QString xi18np (const char *singular, const char *plural, const TYPE &arg...);
696 
708 QString xi18ncp (const char *context, const char *singular, const char *plural,
709  const TYPE &arg...);
710 
720 QString xi18nd (const char *domain, const char *text, const TYPE &arg...);
721 
733 QString xi18ndc (const char *domain, const char *context, const char *text,
734  const TYPE &arg...);
735 
747 QString xi18ndp (const char *domain, const char *singular, const char *plural,
748  const TYPE &arg...);
749 
762 QString xi18ndcp (const char *domain,
763  const char *context, const char *singular, const char *plural,
764  const TYPE &arg...);
765 
766 #endif // DOXYGEN_PREPROC
767 
774 extern KLocalizedString KI18N_EXPORT ki18n (const char* text);
775 
783 extern KLocalizedString KI18N_EXPORT ki18nc (const char *context, const char *text);
784 
792 extern KLocalizedString KI18N_EXPORT ki18np (const char *singular, const char *plural);
793 
802 extern KLocalizedString KI18N_EXPORT ki18ncp (const char *context, const char *singular, const char *plural);
803 
811 extern KLocalizedString KI18N_EXPORT ki18nd (const char *domain, const char* text);
812 
821 extern KLocalizedString KI18N_EXPORT ki18ndc (const char *domain, const char *context, const char *text);
822 
831 extern KLocalizedString KI18N_EXPORT ki18ndp (const char *domain, const char *singular, const char *plural);
832 
842 extern KLocalizedString KI18N_EXPORT ki18ndcp (const char *domain, const char *context, const char *singular, const char *plural);
843 
850 extern KLocalizedString KI18N_EXPORT kxi18n (const char* text);
851 
859 extern KLocalizedString KI18N_EXPORT kxi18nc (const char *context, const char *text);
860 
868 extern KLocalizedString KI18N_EXPORT kxi18np (const char *singular, const char *plural);
869 
879 extern KLocalizedString KI18N_EXPORT kxi18ncp (const char *context, const char *singular, const char *plural);
880 
888 extern KLocalizedString KI18N_EXPORT kxi18nd (const char *domain, const char* text);
889 
898 extern KLocalizedString KI18N_EXPORT kxi18ndc (const char *domain, const char *context, const char *text);
899 
908 extern KLocalizedString KI18N_EXPORT kxi18ndp (const char *domain, const char *singular, const char *plural);
909 
920 extern KLocalizedString KI18N_EXPORT kxi18ndcp (const char *domain, const char *context, const char *singular, const char *plural);
921 
931 inline QString tr2i18n (const char *text, const char *comment = 0)
932 {
933  if (comment && comment[0] && text && text[0]) {
934  return ki18nc(comment, text).toString();
935  }
936  else if (text && text[0]) {
937  return ki18n(text).toString();
938  }
939  else {
940  return QString();
941  }
942 }
943 
944 #ifndef DOXYGEN_PREPROC
945 
946 #ifndef NDEBUG
947 #define I18N_ERR_MSG String_literal_as_second_argument_to_i18n___Perhaps_you_need_i18nc_or_i18np
948 template <typename T, int s> class I18nTypeCheck {public: static void I18N_ERR_MSG () {}};
949 template <int s> class I18nTypeCheck<char[s], s> {};
950 #define STATIC_ASSERT_NOT_LITERAL_STRING(T) I18nTypeCheck<T, sizeof(T)>::I18N_ERR_MSG ();
951 #else
952 #define STATIC_ASSERT_NOT_LITERAL_STRING(T)
953 #endif
954 
955 // >>>>> Basic calls
956 // Autogenerated; contact maintainer for batch changes.
957 inline QString i18n (const char *text)
958 {
959  return ki18n(text).toString();
960 }
961 template <typename A1>
962 inline QString i18n (const char *text, const A1 &a1)
963 {
964  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
965  return ki18n(text).subs(a1).toString();
966 }
967 template <typename A1, typename A2>
968 inline QString i18n (const char *text, const A1 &a1, const A2 &a2)
969 {
970  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
971  return ki18n(text).subs(a1).subs(a2).toString();
972 }
973 template <typename A1, typename A2, typename A3>
974 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
975 {
976  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
977  return ki18n(text).subs(a1).subs(a2).subs(a3).toString();
978 }
979 template <typename A1, typename A2, typename A3, typename A4>
980 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
981 {
982  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
983  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
984 }
985 template <typename A1, typename A2, typename A3, typename A4, typename A5>
986 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
987 {
988  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
989  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
990 }
991 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
992 inline QString i18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
993 {
994  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
995  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
996 }
997 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
998 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)
999 {
1000  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1001  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1002 }
1003 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1004 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)
1005 {
1006  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1007  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1008 }
1009 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1010 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)
1011 {
1012  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1013  return ki18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1014 }
1015 // <<<<<<< End of basic calls
1016 
1017 // >>>>> Context calls
1018 // Autogenerated; contact maintainer for batch changes.
1019 inline QString i18nc (const char *context, const char *text)
1020 {
1021  return ki18nc(context, text).toString();
1022 }
1023 template <typename A1>
1024 inline QString i18nc (const char *context, const char *text, const A1 &a1)
1025 {
1026  return ki18nc(context, text).subs(a1).toString();
1027 }
1028 template <typename A1, typename A2>
1029 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2)
1030 {
1031  return ki18nc(context, text).subs(a1).subs(a2).toString();
1032 }
1033 template <typename A1, typename A2, typename A3>
1034 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1035 {
1036  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).toString();
1037 }
1038 template <typename A1, typename A2, typename A3, typename A4>
1039 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1040 {
1041  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1042 }
1043 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1044 inline QString i18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1045 {
1046  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1047 }
1048 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1049 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)
1050 {
1051  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1052 }
1053 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1054 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)
1055 {
1056  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1057 }
1058 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1059 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)
1060 {
1061  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1062 }
1063 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1064 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)
1065 {
1066  return ki18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1067 }
1068 // <<<<< End of context calls
1069 
1070 // >>>>> Plural calls
1071 // Autogenerated; contact maintainer for batch changes.
1072 template <typename A1>
1073 inline QString i18np (const char *singular, const char *plural, const A1 &a1)
1074 {
1075  return ki18np(singular, plural).subs(a1).toString();
1076 }
1077 template <typename A1, typename A2>
1078 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1079 {
1080  return ki18np(singular, plural).subs(a1).subs(a2).toString();
1081 }
1082 template <typename A1, typename A2, typename A3>
1083 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1084 {
1085  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).toString();
1086 }
1087 template <typename A1, typename A2, typename A3, typename A4>
1088 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1089 {
1090  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1091 }
1092 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1093 inline QString i18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1094 {
1095  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1096 }
1097 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1098 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)
1099 {
1100  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1101 }
1102 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1103 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)
1104 {
1105  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1106 }
1107 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1108 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)
1109 {
1110  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1111 }
1112 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1113 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)
1114 {
1115  return ki18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1116 }
1117 // <<<<< End of plural calls
1118 
1119 // >>>>> Context-plural calls
1120 // Autogenerated; contact maintainer for batch changes.
1121 template <typename A1>
1122 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1)
1123 {
1124  return ki18ncp(context, singular, plural).subs(a1).toString();
1125 }
1126 template <typename A1, typename A2>
1127 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1128 {
1129  return ki18ncp(context, singular, plural).subs(a1).subs(a2).toString();
1130 }
1131 template <typename A1, typename A2, typename A3>
1132 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1133 {
1134  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1135 }
1136 template <typename A1, typename A2, typename A3, typename A4>
1137 inline QString i18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1138 {
1139  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1140 }
1141 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1142 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)
1143 {
1144  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1145 }
1146 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1147 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)
1148 {
1149  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1150 }
1151 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1152 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)
1153 {
1154  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1155 }
1156 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1157 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)
1158 {
1159  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1160 }
1161 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1162 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)
1163 {
1164  return ki18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1165 }
1166 // <<<<< End of context-plural calls
1167 
1168 // >>>>> Basic calls with domain
1169 // Autogenerated; contact maintainer for batch changes.
1170 inline QString i18nd (const char *domain, const char *text)
1171 {
1172  return ki18nd(domain, text).toString();
1173 }
1174 template <typename A1>
1175 inline QString i18nd (const char *domain, const char *text, const A1 &a1)
1176 {
1177  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1178  return ki18nd(domain, text).subs(a1).toString();
1179 }
1180 template <typename A1, typename A2>
1181 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2)
1182 {
1183  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1184  return ki18nd(domain, text).subs(a1).subs(a2).toString();
1185 }
1186 template <typename A1, typename A2, typename A3>
1187 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1188 {
1189  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1190  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).toString();
1191 }
1192 template <typename A1, typename A2, typename A3, typename A4>
1193 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1194 {
1195  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1196  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1197 }
1198 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1199 inline QString i18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1200 {
1201  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1202  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1203 }
1204 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1205 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)
1206 {
1207  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1208  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1209 }
1210 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1211 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)
1212 {
1213  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1214  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1215 }
1216 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1217 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)
1218 {
1219  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1220  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1221 }
1222 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1223 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)
1224 {
1225  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1226  return ki18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1227 }
1228 // <<<<<<< End of basic calls with domain
1229 
1230 // >>>>> Context calls with domain
1231 // Autogenerated; contact maintainer for batch changes.
1232 inline QString i18ndc (const char *domain, const char *context, const char *text)
1233 {
1234  return ki18ndc(domain, context, text).toString();
1235 }
1236 template <typename A1>
1237 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1)
1238 {
1239  return ki18ndc(domain, context, text).subs(a1).toString();
1240 }
1241 template <typename A1, typename A2>
1242 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2)
1243 {
1244  return ki18ndc(domain, context, text).subs(a1).subs(a2).toString();
1245 }
1246 template <typename A1, typename A2, typename A3>
1247 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1248 {
1249  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).toString();
1250 }
1251 template <typename A1, typename A2, typename A3, typename A4>
1252 inline QString i18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1253 {
1254  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1255 }
1256 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1257 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)
1258 {
1259  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1260 }
1261 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1262 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)
1263 {
1264  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1265 }
1266 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1267 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)
1268 {
1269  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1270 }
1271 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1272 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)
1273 {
1274  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1275 }
1276 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1277 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)
1278 {
1279  return ki18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1280 }
1281 // <<<<< End of context calls with domain
1282 
1283 // >>>>> Plural calls with domain
1284 // Autogenerated; contact maintainer for batch changes.
1285 template <typename A1>
1286 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1)
1287 {
1288  return ki18ndp(domain, singular, plural).subs(a1).toString();
1289 }
1290 template <typename A1, typename A2>
1291 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1292 {
1293  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).toString();
1294 }
1295 template <typename A1, typename A2, typename A3>
1296 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1297 {
1298  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1299 }
1300 template <typename A1, typename A2, typename A3, typename A4>
1301 inline QString i18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1302 {
1303  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1304 }
1305 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1306 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)
1307 {
1308  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1309 }
1310 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1311 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)
1312 {
1313  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1314 }
1315 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1316 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)
1317 {
1318  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1319 }
1320 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1321 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)
1322 {
1323  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1324 }
1325 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1326 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)
1327 {
1328  return ki18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1329 }
1330 // <<<<< End of plural calls with domain
1331 
1332 // >>>>> Context-plural calls with domain
1333 // Autogenerated; contact maintainer for batch changes.
1334 template <typename A1>
1335 inline QString i18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1)
1336 {
1337  return ki18ndcp(domain, context, singular, plural).subs(a1).toString();
1338 }
1339 template <typename A1, typename A2>
1340 inline QString i18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1341 {
1342  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).toString();
1343 }
1344 template <typename A1, typename A2, typename A3>
1345 inline QString i18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1346 {
1347  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1348 }
1349 template <typename A1, typename A2, typename A3, typename A4>
1350 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)
1351 {
1352  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1353 }
1354 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1355 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)
1356 {
1357  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1358 }
1359 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1360 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)
1361 {
1362  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1363 }
1364 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1365 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)
1366 {
1367  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1368 }
1369 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1370 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)
1371 {
1372  return ki18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1373 }
1374 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1375 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)
1376 {
1377  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();
1378 }
1379 // <<<<< End of context-plural calls with domain
1380 
1381 // >>>>> Markup-aware basic calls
1382 // Autogenerated; contact maintainer for batch changes.
1383 inline QString xi18n (const char *text)
1384 {
1385  return kxi18n(text).toString();
1386 }
1387 template <typename A1>
1388 inline QString xi18n (const char *text, const A1 &a1)
1389 {
1390  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1391  return kxi18n(text).subs(a1).toString();
1392 }
1393 template <typename A1, typename A2>
1394 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2)
1395 {
1396  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1397  return kxi18n(text).subs(a1).subs(a2).toString();
1398 }
1399 template <typename A1, typename A2, typename A3>
1400 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1401 {
1402  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1403  return kxi18n(text).subs(a1).subs(a2).subs(a3).toString();
1404 }
1405 template <typename A1, typename A2, typename A3, typename A4>
1406 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1407 {
1408  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1409  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1410 }
1411 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1412 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1413 {
1414  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1415  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1416 }
1417 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1418 inline QString xi18n (const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6)
1419 {
1420  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1421  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1422 }
1423 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1424 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)
1425 {
1426  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1427  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1428 }
1429 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1430 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)
1431 {
1432  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1433  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1434 }
1435 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1436 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)
1437 {
1438  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1439  return kxi18n(text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1440 }
1441 // <<<<<<< End of markup-aware basic calls
1442 
1443 // >>>>> Markup-aware context calls
1444 // Autogenerated; contact maintainer for batch changes.
1445 inline QString xi18nc (const char *context, const char *text)
1446 {
1447  return kxi18nc(context, text).toString();
1448 }
1449 template <typename A1>
1450 inline QString xi18nc (const char *context, const char *text, const A1 &a1)
1451 {
1452  return kxi18nc(context, text).subs(a1).toString();
1453 }
1454 template <typename A1, typename A2>
1455 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2)
1456 {
1457  return kxi18nc(context, text).subs(a1).subs(a2).toString();
1458 }
1459 template <typename A1, typename A2, typename A3>
1460 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1461 {
1462  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).toString();
1463 }
1464 template <typename A1, typename A2, typename A3, typename A4>
1465 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1466 {
1467  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1468 }
1469 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1470 inline QString xi18nc (const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1471 {
1472  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1473 }
1474 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1475 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)
1476 {
1477  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1478 }
1479 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1480 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)
1481 {
1482  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1483 }
1484 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1485 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)
1486 {
1487  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1488 }
1489 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1490 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)
1491 {
1492  return kxi18nc(context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1493 }
1494 // <<<<< End of markup-aware context calls
1495 
1496 // >>>>> Markup-aware plural calls
1497 // Autogenerated; contact maintainer for batch changes.
1498 template <typename A1>
1499 inline QString xi18np (const char *singular, const char *plural, const A1 &a1)
1500 {
1501  return kxi18np(singular, plural).subs(a1).toString();
1502 }
1503 template <typename A1, typename A2>
1504 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1505 {
1506  return kxi18np(singular, plural).subs(a1).subs(a2).toString();
1507 }
1508 template <typename A1, typename A2, typename A3>
1509 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1510 {
1511  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).toString();
1512 }
1513 template <typename A1, typename A2, typename A3, typename A4>
1514 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1515 {
1516  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1517 }
1518 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1519 inline QString xi18np (const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1520 {
1521  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1522 }
1523 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1524 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)
1525 {
1526  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1527 }
1528 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1529 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)
1530 {
1531  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1532 }
1533 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1534 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)
1535 {
1536  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1537 }
1538 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1539 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)
1540 {
1541  return kxi18np(singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1542 }
1543 // <<<<< End of markup-aware plural calls
1544 
1545 // >>>>> Markup-aware context-plural calls
1546 // Autogenerated; contact maintainer for batch changes.
1547 template <typename A1>
1548 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1)
1549 {
1550  return kxi18ncp(context, singular, plural).subs(a1).toString();
1551 }
1552 template <typename A1, typename A2>
1553 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1554 {
1555  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).toString();
1556 }
1557 template <typename A1, typename A2, typename A3>
1558 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1559 {
1560  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1561 }
1562 template <typename A1, typename A2, typename A3, typename A4>
1563 inline QString xi18ncp (const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1564 {
1565  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1566 }
1567 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1568 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)
1569 {
1570  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1571 }
1572 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1573 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)
1574 {
1575  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1576 }
1577 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1578 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)
1579 {
1580  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1581 }
1582 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1583 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)
1584 {
1585  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1586 }
1587 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1588 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)
1589 {
1590  return kxi18ncp(context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1591 }
1592 // <<<<< End of markup-aware context-plural calls
1593 
1594 // >>>>> Markup-aware basic calls with domain
1595 // Autogenerated; contact maintainer for batch changes.
1596 inline QString xi18nd (const char *domain, const char *text)
1597 {
1598  return kxi18nd(domain, text).toString();
1599 }
1600 template <typename A1>
1601 inline QString xi18nd (const char *domain, const char *text, const A1 &a1)
1602 {
1603  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1604  return kxi18nd(domain, text).subs(a1).toString();
1605 }
1606 template <typename A1, typename A2>
1607 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2)
1608 {
1609  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1610  return kxi18nd(domain, text).subs(a1).subs(a2).toString();
1611 }
1612 template <typename A1, typename A2, typename A3>
1613 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1614 {
1615  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1616  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).toString();
1617 }
1618 template <typename A1, typename A2, typename A3, typename A4>
1619 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1620 {
1621  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1622  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1623 }
1624 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1625 inline QString xi18nd (const char *domain, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5)
1626 {
1627  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1628  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1629 }
1630 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1631 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)
1632 {
1633  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1634  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1635 }
1636 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1637 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)
1638 {
1639  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1640  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1641 }
1642 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1643 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)
1644 {
1645  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1646  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1647 }
1648 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1649 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)
1650 {
1651  STATIC_ASSERT_NOT_LITERAL_STRING(A1)
1652  return kxi18nd(domain, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1653 }
1654 // <<<<<<< End of markup-aware basic calls with domain
1655 
1656 // >>>>> Markup-aware context calls with domain
1657 // Autogenerated; contact maintainer for batch changes.
1658 inline QString xi18ndc (const char *domain, const char *context, const char *text)
1659 {
1660  return kxi18ndc(domain, context, text).toString();
1661 }
1662 template <typename A1>
1663 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1)
1664 {
1665  return kxi18ndc(domain, context, text).subs(a1).toString();
1666 }
1667 template <typename A1, typename A2>
1668 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2)
1669 {
1670  return kxi18ndc(domain, context, text).subs(a1).subs(a2).toString();
1671 }
1672 template <typename A1, typename A2, typename A3>
1673 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
1674 {
1675  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).toString();
1676 }
1677 template <typename A1, typename A2, typename A3, typename A4>
1678 inline QString xi18ndc (const char *domain, const char *context, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1679 {
1680  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1681 }
1682 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1683 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)
1684 {
1685  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1686 }
1687 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1688 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)
1689 {
1690  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1691 }
1692 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1693 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)
1694 {
1695  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1696 }
1697 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1698 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)
1699 {
1700  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1701 }
1702 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1703 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)
1704 {
1705  return kxi18ndc(domain, context, text).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1706 }
1707 // <<<<< End of markup-aware context calls with domain
1708 
1709 // >>>>> Markup-aware plural calls with domain
1710 // Autogenerated; contact maintainer for batch changes.
1711 template <typename A1>
1712 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1)
1713 {
1714  return kxi18ndp(domain, singular, plural).subs(a1).toString();
1715 }
1716 template <typename A1, typename A2>
1717 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1718 {
1719  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).toString();
1720 }
1721 template <typename A1, typename A2, typename A3>
1722 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1723 {
1724  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1725 }
1726 template <typename A1, typename A2, typename A3, typename A4>
1727 inline QString xi18ndp (const char *domain, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
1728 {
1729  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1730 }
1731 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1732 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)
1733 {
1734  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1735 }
1736 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1737 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)
1738 {
1739  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1740 }
1741 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1742 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)
1743 {
1744  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1745 }
1746 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1747 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)
1748 {
1749  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1750 }
1751 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1752 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)
1753 {
1754  return kxi18ndp(domain, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).subs(a9).toString();
1755 }
1756 // <<<<< End of markup-aware plural calls with domain
1757 
1758 // >>>>> Markup-aware context-plural calls with domain
1759 // Autogenerated; contact maintainer for batch changes.
1760 template <typename A1>
1761 inline QString xi18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1)
1762 {
1763  return kxi18ndcp(domain, context, singular, plural).subs(a1).toString();
1764 }
1765 template <typename A1, typename A2>
1766 inline QString xi18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2)
1767 {
1768  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).toString();
1769 }
1770 template <typename A1, typename A2, typename A3>
1771 inline QString xi18ndcp (const char *domain, const char *context, const char *singular, const char *plural, const A1 &a1, const A2 &a2, const A3 &a3)
1772 {
1773  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).toString();
1774 }
1775 template <typename A1, typename A2, typename A3, typename A4>
1776 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)
1777 {
1778  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).toString();
1779 }
1780 template <typename A1, typename A2, typename A3, typename A4, typename A5>
1781 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)
1782 {
1783  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).toString();
1784 }
1785 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
1786 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)
1787 {
1788  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).toString();
1789 }
1790 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
1791 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)
1792 {
1793  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).toString();
1794 }
1795 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
1796 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)
1797 {
1798  return kxi18ndcp(domain, context, singular, plural).subs(a1).subs(a2).subs(a3).subs(a4).subs(a5).subs(a6).subs(a7).subs(a8).toString();
1799 }
1800 template <typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
1801 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)
1802 {
1803  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();
1804 }
1805 // <<<<< End of markup-aware context-plural calls with domain
1806 
1807 #endif // DOXYGEN_PREPROC
1808 
1809 #endif // KLOCALIZEDSTRING_H
1810 
1811 #ifndef DOXYGEN_PREPROC
1812 
1813 // Outside of include guards, to be able to map and unmap catalogs
1814 // by successive inclusions of this header
1815 // preceded with different definitions of TRANSLATION_CATALOG.
1816 #ifdef TRANSLATION_CATALOG
1817  #define i18n(...) i18nd(TRANSLATION_CATALOG, __VA_ARGS__)
1818  #define i18nc(...) i18ndc(TRANSLATION_CATALOG, __VA_ARGS__)
1819  #define i18np(...) i18ndp(TRANSLATION_CATALOG, __VA_ARGS__)
1820  #define i18ncp(...) i18ndcp(TRANSLATION_CATALOG, __VA_ARGS__)
1821 #else
1822  #undef i18n
1823  #undef i18nc
1824  #undef i18np
1825  #undef i18ncp
1826 #endif
1827 
1828 #endif // DOXYGEN_PREPROC