1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
/****************************************************************************
**
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
**
** This file is part of the Qt Linguist of the Qt Toolkit.
**
** Licensees holding a valid Qt License Agreement may use this file in
** accordance with the rights, responsibilities and obligations
** contained therein. Please consult your licensing agreement or
** contact sales@trolltech.com if any conditions of this licensing
** agreement are not clear to you.
**
** Further information about Qt licensing is available at:
** http://www.trolltech.com/products/qt/licensing.html or by
** contacting info@trolltech.com.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#ifndef TRANSLATOR_H
#define TRANSLATOR_H
#include "QtCore/qobject.h"
#include "QtCore/qbytearray.h"
#include <qtranslator.h>
class TranslatorPrivate;
template <typename T> class QList;
class TranslatorMessage
{
public:
TranslatorMessage();
TranslatorMessage(const char * context, const char * sourceText,
const char * comment,
const QString& translation = QString());
explicit TranslatorMessage(QDataStream &);
TranslatorMessage(const TranslatorMessage & m);
TranslatorMessage & operator=(const TranslatorMessage & m);
uint hash() const { return h; }
const char *context() const { return cx.isNull() ? 0 : cx.constData(); }
const char *sourceText() const { return st.isNull() ? 0 : st.constData(); }
const char *comment() const { return cm.isNull() ? 0 : cm.constData(); }
inline void setTranslation(const QString & translation);
QString translation() const { return tn; }
enum Prefix { NoPrefix, Hash, HashContext, HashContextSourceText,
HashContextSourceTextComment };
void write(QDataStream & s, bool strip = false,
Prefix prefix = HashContextSourceTextComment) const;
Prefix commonPrefix(const TranslatorMessage&) const;
bool operator==(const TranslatorMessage& m) const;
bool operator!=(const TranslatorMessage& m) const
{ return !operator==(m); }
bool operator<(const TranslatorMessage& m) const;
bool operator<=(const TranslatorMessage& m) const
{ return !m.operator<(*this); }
bool operator>(const TranslatorMessage& m) const
{ return m.operator<(*this); }
bool operator>=(const TranslatorMessage& m) const
{ return !operator<(m); }
private:
uint h;
QByteArray cx;
QByteArray st;
QByteArray cm;
QString tn;
enum Tag { Tag_End = 1, Tag_SourceText16, Tag_Translation, Tag_Context16,
Tag_Hash, Tag_SourceText, Tag_Context, Tag_Comment,
Tag_Obsolete1 };
};
Q_DECLARE_TYPEINFO(TranslatorMessage, Q_MOVABLE_TYPE);
inline void TranslatorMessage::setTranslation(const QString & atranslation)
{ tn = atranslation; }
class Translator : public QTranslator
{
Q_OBJECT
public:
explicit Translator(QObject *parent = 0);
~Translator();
virtual TranslatorMessage findMessage(const char *, const char *,
const char * = 0) const;
virtual QString translate(const char *context, const char *sourceText,
const char *comment = 0) const
{ return findMessage(context, sourceText, comment).translation(); }
bool load(const QString & filename,
const QString & directory = QString(),
const QString & search_delimiters = QString(),
const QString & suffix = QString());
bool load(const uchar *data, int len);
void clear();
#ifndef QT_NO_TRANSLATION_BUILDER
enum SaveMode { Everything, Stripped };
bool save(const QString & filename, SaveMode mode = Everything);
void insert(const TranslatorMessage&);
inline void insert(const char *context, const char *sourceText, const QString &translation) {
insert(TranslatorMessage(context, sourceText, "", translation));
}
void remove(const TranslatorMessage&);
inline void remove(const char *context, const char *sourceText) {
remove(TranslatorMessage(context, sourceText, ""));
}
bool contains(const char *, const char *, const char * comment = 0) const;
void squeeze(SaveMode = Everything);
void unsqueeze();
QList<TranslatorMessage> messages() const;
#endif
bool isEmpty() const;
private:
Q_DISABLE_COPY(Translator)
TranslatorPrivate *d;
};
#endif // TRANSLATOR_H
|