VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
translator.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: Qt Software Information (qt-info@nokia.com)
5 **
6 ** This file is part of the Qt Linguist of the Qt Toolkit.
7 **
8 ** Commercial Usage
9 ** Licensees holding valid Qt Commercial licenses may use this file in
10 ** accordance with the Qt Commercial License Agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and Nokia.
13 **
14 **
15 ** GNU General Public License Usage
16 ** Alternatively, this file may be used under the terms of the GNU
17 ** General Public License versions 2.0 or 3.0 as published by the Free
18 ** Software Foundation and appearing in the file LICENSE.GPL included in
19 ** the packaging of this file. Please review the following information
20 ** to ensure GNU General Public Licensing requirements will be met:
21 ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
22 ** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
23 ** exception, Nokia gives you certain additional rights. These rights
24 ** are described in the Nokia Qt GPL Exception version 1.3, included in
25 ** the file GPL_EXCEPTION.txt in this package.
26 **
27 ** Qt for Windows(R) Licensees
28 ** As a special exception, Nokia, as the sole copyright holder for Qt
29 ** Designer, grants users of the Qt/Eclipse Integration plug-in the
30 ** right for the Qt/Eclipse Integration to link to functionality
31 ** provided by Qt Designer and its related libraries.
32 **
33 ** If you are unsure which license is appropriate for your use, please
34 ** contact the sales department at qt-sales@nokia.com.
35 **
36 ****************************************************************************/
37 
38 #ifndef TRANSLATOR_H
39 #define TRANSLATOR_H
40 
41 #include <QByteArray>
42 #include <QDir>
43 #include <QList>
44 #include <QLocale>
45 #include <QMap>
46 #include <QObject>
47 #include <QString>
48 #include <QStringList>
49 #include <QTranslator>
50 
51 #include "private/qtranslator_p.h"
52 
53 QT_BEGIN_NAMESPACE
54 
55 class QIODevice;
56 class QTextCodec;
57 class TranslatorPrivate;
58 template <typename T> class QList;
59 
61 {
62 public:
64 
66  TranslatorMessage(const QByteArray &context, const QByteArray &sourceText,
67  const QByteArray &comment, const QByteArray &userData,
68  const QString &fileName, int lineNumber,
69  const QStringList& translations = QStringList(),
70  bool utf8 = false, Type type = Unfinished, bool plural = false);
71 
72  uint hash() const { return m_hash; }
73  QByteArray context() const { return m_context; }
74  QByteArray sourceText() const { return m_sourcetext; }
75  QByteArray comment() const { return m_comment; }
76 
77  void setTranslations(const QStringList &translations)
79  QStringList translations() const
80  { return m_translations; }
81  void setTranslation(const QString &translation)
82  { m_translations = QStringList(translation); }
83  QString translation() const { return m_translations.value(0); }
84  bool isTranslated() const
85  {
86  foreach (const QString &trans, m_translations)
87  if (!trans.isEmpty())
88  return true;
89  return false;
90  }
91 
94  void write(QDataStream & s, bool strip = false,
95  Prefix prefix = HashContextSourceTextComment) const;
97 
98  bool operator==(const TranslatorMessage& m) const;
99  bool operator<(const TranslatorMessage& m) const;
100 
101  QString fileName() const { return m_fileName; }
102  void setFileName(const QString &fileName) { m_fileName = fileName; }
103  int lineNumber() const { return m_lineNumber; }
104  void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
105  QByteArray userData() const { return m_userData; }
106  void setUserData(const QByteArray &userData) { m_userData = userData; }
107 
108  bool isNull() const { return m_sourcetext.isNull() && m_lineNumber == -1 && m_translations.isEmpty(); }
109 
110  void setType( Type nt ) { ty = nt; }
111  Type type() const { return ty; }
112  bool utf8() const { return utfeight; }
113  bool isPlural() const { return m_plural; }
114  void setPlural(bool isplural) { m_plural = isplural; }
115 
116 private:
117  uint m_hash;
118  QByteArray m_context;
119  QByteArray m_sourcetext;
120  QByteArray m_comment;
121  QByteArray m_userData;
122  QStringList m_translations;
123  QString m_fileName;
125 
129 
130  bool utfeight;
132  bool m_plural;
133 };
134 
135 
136 Q_DECLARE_TYPEINFO(TranslatorMessage, Q_MOVABLE_TYPE);
137 
138 class Translator : public QObject
139 {
140  Q_OBJECT
141 
142 public:
143  explicit Translator(QObject *parent = 0);
144  virtual ~Translator();
145 
146  virtual TranslatorMessage findMessage(const QByteArray &context,
147  const QByteArray &sourceText, const QByteArray &comment,
148  const QString &fileName = QString(), int lineNumber = -1) const;
149 
150  void clear();
151 
153 
154  bool save(const QString & filename, SaveMode mode = Everything);
155  bool save(QIODevice *iod, SaveMode mode = Everything);
156 
157  void insert(const TranslatorMessage &);
158  void remove(const TranslatorMessage &);
159  void remove(const QByteArray &context, const QByteArray &sourceText) {
160  remove(TranslatorMessage(context, sourceText, "", "", QString(), -1));
161  }
162  bool contains(const QByteArray &context, const QByteArray &sourceText,
163  const QByteArray & comment = QByteArray()) const;
164 
165  bool contains(const QByteArray &context, const QByteArray &comment,
166  const QString &fileName, int lineNumber) const;
167 
168  void squeeze(SaveMode = Everything);
169  void unsqueeze();
170 
172 
173  bool isEmpty() const;
174 
175  void setNumerusRules(const QByteArray &rules);
176 
177 private:
178  Q_DISABLE_COPY(Translator)
179  TranslatorPrivate *d;
180 };
181 
182 static const uchar englishStyleRules[] =
183  { EQ, 1 };
184 static const uchar frenchStyleRules[] =
185  { LEQ, 1 };
186 static const uchar latvianRules[] =
187  { MOD_10 | EQ, 1, AND, MOD_100 | NEQ, 11, NEWRULE,
188  NEQ, 0 };
189 static const uchar irishStyleRules[] =
190  { EQ, 1, NEWRULE,
191  EQ, 2 };
192 static const uchar czechRules[] =
193  { MOD_100 | EQ, 1, NEWRULE,
194  MOD_100 | BETWEEN, 2, 4 };
195 static const uchar slovakRules[] =
196  { EQ, 1, NEWRULE,
197  BETWEEN, 2, 4 };
198 static const uchar macedonianRules[] =
199  { MOD_10 | EQ, 1, NEWRULE,
200  MOD_10 | EQ, 2 };
201 static const uchar lithuanianRules[] =
202  { MOD_10 | EQ, 1, AND, MOD_100 | NEQ, 11, NEWRULE,
203  MOD_10 | EQ, 2, AND, MOD_100 | NOT_BETWEEN, 10, 19 };
204 static const uchar russianStyleRules[] =
205  { MOD_10 | EQ, 1, AND, MOD_100 | NEQ, 11, NEWRULE,
206  MOD_10 | BETWEEN, 2, 4, AND, MOD_100 | NOT_BETWEEN, 10, 19 };
207 static const uchar polishRules[] =
208  { EQ, 1, NEWRULE,
209  MOD_10 | BETWEEN, 2, 4, AND, MOD_100 | NOT_BETWEEN, 10, 19 };
210 static const uchar romanianRules[] =
211  { EQ, 1, NEWRULE,
212  EQ, 0, OR, MOD_100 | BETWEEN, 1, 19 };
213 static const uchar slovenianRules[] =
214  { MOD_100 | EQ, 1, NEWRULE,
215  MOD_100 | EQ, 2, NEWRULE,
216  MOD_100 | BETWEEN, 3, 4 };
217 static const uchar malteseRules[] =
218  { EQ, 1, NEWRULE,
219  EQ, 0, OR, MOD_100 | BETWEEN, 1, 10, NEWRULE,
220  MOD_100 | BETWEEN, 11, 19 };
221 static const uchar welshRules[] =
222  { EQ, 0, NEWRULE,
223  EQ, 1, NEWRULE,
224  BETWEEN, 2, 5, NEWRULE,
225  EQ, 6 };
226 static const uchar arabicRules[] =
227  { EQ, 0, NEWRULE,
228  EQ, 1, NEWRULE,
229  EQ, 2, NEWRULE,
230  MOD_100 | BETWEEN, 3, 10, NEWRULE,
231  MOD_100 | NEQ, 0 };
232 
233 static const char * const japaneseStyleForms[] = { "Unique Form", 0 };
234 static const char * const englishStyleForms[] = { "Singular", "Plural", 0 };
235 static const char * const frenchStyleForms[] = { "Singular", "Plural", 0 };
236 static const char * const latvianForms[] = { "Singular", "Plural", "Nullar", 0 };
237 static const char * const irishStyleForms[] = { "Singular", "Dual", "Plural", 0 };
238 static const char * const czechForms[] = { "Singular", "Dual", "Plural", 0 };
239 static const char * const slovakForms[] = { "Singular", "Dual", "Plural", 0 };
240 static const char * const macedonianForms[] = { "Singular", "Dual", "Plural", 0 };
241 static const char * const lithuanianForms[] = { "Singular", "Dual", "Plural", 0 };
242 static const char * const russianStyleForms[] = { "Singular", "Dual", "Plural", 0 };
243 static const char * const polishForms[] = { "Singular", "Paucal", "Plural", 0 };
244 static const char * const romanianForms[] =
245  { "Singular", "Plural Form for 2 to 19", "Plural", 0 };
246 static const char * const slovenianForms[] = { "Singular", "Dual", "Trial", "Plural", 0 };
247 static const char * const malteseForms[] =
248  { "Singular", "Plural Form for 2 to 10", "Plural Form for 11 to 19", "Plural", 0 };
249 static const char * const welshForms[] =
250  { "Nullar", "Singular", "Dual", "Sexal", "Plural", 0 };
251 static const char * const arabicForms[] =
252  { "Nullar", "Singular", "Dual", "Minority Plural", "Plural", "Plural Form for 100, 200, ...", 0 };
253 
254 #define EOL QLocale::C
255 
256 static const QLocale::Language japaneseStyleLanguages[] = {
257  QLocale::Afan,
258  QLocale::Armenian,
259  QLocale::Bhutani,
260  QLocale::Bislama,
261  QLocale::Burmese,
262  QLocale::Chinese,
263  QLocale::FijiLanguage,
264  QLocale::Guarani,
265  QLocale::Hungarian,
266  QLocale::Indonesian,
267  QLocale::Japanese,
268  QLocale::Javanese,
269  QLocale::Korean,
270  QLocale::Malay,
271  QLocale::NauruLanguage,
272  QLocale::Persian,
273  QLocale::Sundanese,
274  QLocale::Thai,
275  QLocale::Tibetan,
276  QLocale::Vietnamese,
277  QLocale::Yoruba,
278  QLocale::Zhuang,
279  EOL
280 };
281 
282 static const QLocale::Language englishStyleLanguages[] = {
283  QLocale::Abkhazian,
284  QLocale::Afar,
285  QLocale::Afrikaans,
286  QLocale::Albanian,
287  QLocale::Amharic,
288  QLocale::Assamese,
289  QLocale::Aymara,
290  QLocale::Azerbaijani,
291  QLocale::Bashkir,
292  QLocale::Basque,
293  QLocale::Bengali,
294  QLocale::Bihari,
295  // Missing: Bokmal,
296  QLocale::Bulgarian,
297  QLocale::Cambodian,
298  QLocale::Catalan,
299  QLocale::Cornish,
300  QLocale::Corsican,
301  QLocale::Danish,
302  QLocale::Dutch,
303  QLocale::English,
304  QLocale::Esperanto,
305  QLocale::Estonian,
306  QLocale::Faroese,
307  QLocale::Finnish,
308  // Missing: Friulian,
309  QLocale::Frisian,
310  QLocale::Galician,
311  QLocale::Georgian,
312  QLocale::German,
313  QLocale::Greek,
314  QLocale::Greenlandic,
315  QLocale::Gujarati,
316  QLocale::Hausa,
317  QLocale::Hebrew,
318  QLocale::Hindi,
319  QLocale::Icelandic,
320  QLocale::Interlingua,
321  QLocale::Interlingue,
322  QLocale::Italian,
323  QLocale::Kannada,
324  QLocale::Kashmiri,
325  QLocale::Kazakh,
326  QLocale::Kinyarwanda,
327  QLocale::Kirghiz,
328  QLocale::Kurdish,
329  QLocale::Kurundi,
330  QLocale::Laothian,
331  QLocale::Latin,
332  // Missing: Letzeburgesch,
333  QLocale::Lingala,
334  QLocale::Malagasy,
335  QLocale::Malayalam,
336  QLocale::Marathi,
337  QLocale::Mongolian,
338  // Missing: Nahuatl,
339  QLocale::Nepali,
340  // Missing: Northern Sotho,
341  QLocale::Norwegian,
342  QLocale::Nynorsk,
343  QLocale::Occitan,
344  QLocale::Oriya,
345  QLocale::Pashto,
346  QLocale::Portuguese,
347  QLocale::Punjabi,
348  QLocale::Quechua,
349  QLocale::RhaetoRomance,
350  QLocale::Sesotho,
351  QLocale::Setswana,
352  QLocale::Shona,
353  QLocale::Sindhi,
354  QLocale::Singhalese,
355  QLocale::Siswati,
356  QLocale::Somali,
357  QLocale::Spanish,
358  QLocale::Swahili,
359  QLocale::Swedish,
360  QLocale::Tagalog,
361  QLocale::Tajik,
362  QLocale::Tamil,
363  QLocale::Tatar,
364  QLocale::Telugu,
365  QLocale::TongaLanguage,
366  QLocale::Tsonga,
367  QLocale::Turkish,
368  QLocale::Turkmen,
369  QLocale::Twi,
370  QLocale::Uigur,
371  QLocale::Uzbek,
372  QLocale::Volapuk,
373  QLocale::Wolof,
374  QLocale::Xhosa,
375  QLocale::Yiddish,
376  QLocale::Zulu,
377  EOL
378 };
379 static const QLocale::Language frenchStyleLanguages[] = {
380  // keep synchronized with frenchStyleCountries
381  QLocale::Breton,
382  QLocale::French,
383  QLocale::Portuguese,
384  // Missing: Filipino,
385  QLocale::Tigrinya,
386  // Missing: Walloon
387  EOL
388 };
389 static const QLocale::Language latvianLanguage[] = { QLocale::Latvian, EOL };
390 static const QLocale::Language irishStyleLanguages[] = {
391  QLocale::Divehi,
392  QLocale::Gaelic,
393  QLocale::Inuktitut,
394  QLocale::Inupiak,
395  QLocale::Irish,
396  QLocale::Manx,
397  QLocale::Maori,
398  // Missing: Sami,
399  QLocale::Samoan,
400  QLocale::Sanskrit,
401  EOL
402 };
403 static const QLocale::Language czechLanguage[] = { QLocale::Czech, EOL };
404 static const QLocale::Language slovakLanguage[] = { QLocale::Slovak, EOL };
405 static const QLocale::Language macedonianLanguage[] = { QLocale::Macedonian, EOL };
406 static const QLocale::Language lithuanianLanguage[] = { QLocale::Lithuanian, EOL };
407 static const QLocale::Language russianStyleLanguages[] = {
408  QLocale::Bosnian,
409  QLocale::Byelorussian,
410  QLocale::Croatian,
411  QLocale::Russian,
412  QLocale::Serbian,
413  QLocale::SerboCroatian,
414  QLocale::Ukrainian,
415  EOL
416 };
417 static const QLocale::Language polishLanguage[] = { QLocale::Polish, EOL };
418 static const QLocale::Language romanianLanguages[] = {
419  QLocale::Moldavian,
420  QLocale::Romanian,
421  EOL
422 };
423 static const QLocale::Language slovenianLanguage[] = { QLocale::Slovenian, EOL };
424 static const QLocale::Language malteseLanguage[] = { QLocale::Maltese, EOL };
425 static const QLocale::Language welshLanguage[] = { QLocale::Welsh, EOL };
426 static const QLocale::Language arabicLanguage[] = { QLocale::Arabic, EOL };
427 
428 static const QLocale::Country frenchStyleCountries[] = {
429  // keep synchronized with frenchStyleLanguages
430  QLocale::AnyCountry,
431  QLocale::AnyCountry,
432  QLocale::Brazil,
433  QLocale::AnyCountry
434 };
435 
437  const uchar *rules;
439  const char * const *forms;
440  const QLocale::Language *languages;
441  const QLocale::Country *countries;
442 };
443 
444 static const NumerusTableEntry numerusTable[] = {
451  { czechRules, sizeof(czechRules), czechForms, czechLanguage, 0 },
460  { welshRules, sizeof(welshRules), welshForms, welshLanguage, 0 },
462 };
463 
464 static const int NumerusTableSize = sizeof(numerusTable) / sizeof(numerusTable[0]);
465 
466 bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
467  QByteArray *rules, QStringList *forms);
468 
469 QT_END_NAMESPACE
470 
471 #endif // TRANSLATOR_H

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)