Remove codecForTr().

Similarly to change id I2f429fa7ef93bd75bb93a7f64c56db15b7283388, the capability
to arbitrarily alter the encoding of literals is very destructive, especially in
a world with libraries and plugins.

Change-Id: If0d4cd8dcf89792e39c1984cbde6b036cebfc02f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
Robin Burchell 2012-02-01 00:33:30 +02:00 committed by Qt by Nokia
parent 84ddc06380
commit 95fa88abe7
8 changed files with 15 additions and 66 deletions

4
dist/changes-5.0.0 vendored
View File

@ -310,6 +310,10 @@ QtCore
libraries, creating uncertainty/bugs in using QString easily, and (to a lesser
extent) performance issues.
* QTextCodec::codecForTr() and QTextCodec::setCodecForTr() have been removed,
QCoreApplication::Encoding value CodecForTr is now obsolete, use
DefaultCodec instead. For reasoning, see the codecForCStrings() removal above.
* QIntValidator and QDoubleValidator no longer fall back to using the C locale if
the requested locale fails to validate the input.

View File

@ -145,8 +145,6 @@ static bool destroying_is_ok = false;
#endif
static QTextCodec *localeMapper = 0;
QTextCodec *QTextCodec::cftr = 0;
class QTextCodecCleanup
{
@ -1463,41 +1461,6 @@ QString QTextDecoder::toUnicode(const QByteArray &ba)
return c->toUnicode(ba.constData(), ba.length(), &state);
}
/*!
\fn QTextCodec* QTextCodec::codecForTr()
Returns the codec used by QObject::tr() on its argument. If this
function returns 0 (the default), tr() assumes Latin-1.
\sa setCodecForTr()
*/
/*!
\fn void QTextCodec::setCodecForTr(QTextCodec *c)
\nonreentrant
Sets the codec used by QObject::tr() on its argument to \a c. If
\a c is 0 (the default), tr() assumes Latin-1.
If the literal quoted text in the program is not in the Latin-1
encoding, this function can be used to set the appropriate
encoding. For example, software developed by Korean programmers
might use eucKR for all the text in the program, in which case the
main() function might look like this:
\snippet doc/src/snippets/code/src_corelib_codecs_qtextcodec.cpp 3
Note that this is not the way to select the encoding that the \e
user has chosen. For example, to convert an application containing
literal English strings to Korean, all that is needed is for the
English strings to be passed through tr() and for translation
files to be loaded. For details of internationalization, see
\l{Internationalization with Qt}.
\sa codecForTr()
*/
/*!
\since 4.4

View File

@ -72,9 +72,6 @@ public:
static QTextCodec* codecForLocale();
static void setCodecForLocale(QTextCodec *c);
static QTextCodec* codecForTr();
static void setCodecForTr(QTextCodec *c);
static QTextCodec *codecForHtml(const QByteArray &ba);
static QTextCodec *codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec);
@ -129,14 +126,10 @@ protected:
private:
friend class QTextCodecCleanup;
static QTextCodec *cftr;
static bool validCodecs();
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QTextCodec::ConversionFlags)
inline QTextCodec* QTextCodec::codecForTr() { return validCodecs() ? cftr : 0; }
inline void QTextCodec::setCodecForTr(QTextCodec *c) { cftr = c; }
class Q_CORE_EXPORT QTextEncoder {
Q_DISABLE_COPY(QTextEncoder)
public:

View File

@ -2233,9 +2233,7 @@ int qrand()
The macro QT_TR_NOOP_UTF8() is identical except that it tells lupdate
that the source string is encoded in UTF-8. Corresponding variants
exist in the QT_TRANSLATE_NOOP() family of macros, too. Note that
using these macros is not required if \c CODECFORTR is already set to
UTF-8 in the qmake project file.
exist in the QT_TRANSLATE_NOOP() family of macros, too.
\sa QT_TRANSLATE_NOOP(), {Internationalization with Qt}
*/

View File

@ -1438,11 +1438,9 @@ bool QCoreApplication::event(QEvent *e)
This enum type defines the 8-bit encoding of character string
arguments to translate():
\value CodecForTr The encoding specified by
QTextCodec::codecForTr() (Latin-1 if none has
been set).
\value UnicodeUTF8 UTF-8.
\value DefaultCodec (Obsolete) Use CodecForTr instead.
\value UnicodeUTF8 UTF-8.
\value Latin1 Latin-1.
\value DefaultCodec Latin-1.
\sa QObject::tr(), QObject::trUtf8(), QString::fromUtf8()
*/
@ -1617,7 +1615,7 @@ static void replacePercentN(QString *result, int n)
If none of the translation files contain a translation for \a
sourceText in \a context, this function returns a QString
equivalent of \a sourceText. The encoding of \a sourceText is
specified by \e encoding; it defaults to CodecForTr.
specified by \e encoding; it defaults to DefaultCodec.
This function is not virtual. You can use alternative translation
techniques by subclassing \l QTranslator.
@ -1628,7 +1626,7 @@ static void replacePercentN(QString *result, int n)
so will most likely result in crashes or other undesirable
behavior.
\sa QObject::tr() installTranslator() QTextCodec::codecForTr()
\sa QObject::tr() installTranslator()
*/
@ -1657,8 +1655,6 @@ QString QCoreApplication::translate(const char *context, const char *sourceText,
#else
if (encoding == UnicodeUTF8)
result = QString::fromUtf8(sourceText);
else if (QTextCodec::codecForTr() != 0)
result = QTextCodec::codecForTr()->toUnicode(sourceText);
else
#endif
result = QString::fromLatin1(sourceText);

View File

@ -137,11 +137,11 @@ public:
static void installTranslator(QTranslator * messageFile);
static void removeTranslator(QTranslator * messageFile);
#endif
enum Encoding { CodecForTr, UnicodeUTF8, DefaultCodec = CodecForTr };
enum Encoding { UnicodeUTF8, Latin1, DefaultCodec = Latin1 };
static QString translate(const char * context,
const char * key,
const char * disambiguation = 0,
Encoding encoding = CodecForTr,
Encoding encoding = DefaultCodec,
int n = -1);
static void flush();
@ -240,7 +240,7 @@ inline QString QCoreApplication::translate(const char *, const char *sourceText,
public: \
static inline QString tr(const char *sourceText, const char *disambiguation = 0, int n = -1) \
{ return QCoreApplication::translate(#context, sourceText, disambiguation, \
QCoreApplication::CodecForTr, n); } \
QCoreApplication::DefaultCodec, n); } \
static inline QString trUtf8(const char *sourceText, const char *disambiguation = 0, int n = -1) \
{ return QCoreApplication::translate(#context, sourceText, disambiguation, \
QCoreApplication::UnicodeUTF8, n); } \

View File

@ -307,7 +307,7 @@ const QObject *QMetaObject::cast(const QObject *obj) const
*/
QString QMetaObject::tr(const char *s, const char *c, int n) const
{
return QCoreApplication::translate(d.stringdata, s, c, QCoreApplication::CodecForTr, n);
return QCoreApplication::translate(d.stringdata, s, c, QCoreApplication::DefaultCodec, n);
}
/*!

View File

@ -1859,7 +1859,7 @@ void QObject::deleteLater()
translators while performing translations is not supported. Doing
so will probably result in crashes or other undesirable behavior.
\sa trUtf8(), QApplication::translate(), QTextCodec::setCodecForTr(), {Internationalization with Qt}
\sa trUtf8(), QApplication::translate(), {Internationalization with Qt}
*/
/*!
@ -1871,11 +1871,6 @@ void QObject::deleteLater()
version. It is otherwise identical to tr(\a sourceText, \a
disambiguation, \a n).
Note that using the Utf8 variants of the translation functions
is not required if \c CODECFORTR is already set to UTF-8 in the
qmake project file and QTextCodec::setCodecForTr("UTF-8") is
used.
\warning This method is reentrant only if all translators are
installed \e before calling this method. Installing or removing
translators while performing translations is not supported. Doing