- 所有用户可视的文本都使用 QString。
- 字面文本都使用 tr()。
- 有时在定义某些变量中使用的字符 串,不能使用上述方法,但是为了让Qt提取并翻译该字符串,必须用 某种方法标志出 来。Qt 定义了 QT_TR_NOOP() 和 QT_TRANSLATE_NOOP() 来标志它们。前者用于单个字符串,后者用于多个字符串。比如:
QStringList stringsList;
stringList << QT_TR_NOOP( "Hello" ) << QT_TR_NOOP( "World" );
- 非Qt QObject类不能直接使用 tr() 函数,需要使用 Q_DECLARE_TR_FUNCTIONS 宏来声明类。
class MyClass
{
Q_DECLARE_TR_FUNCTIONS(MyClass)
public:
MyClass();
...
};
exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcuts(QKeySequence::Quit);
void FileCopier::showProgress(int done, int total, const QString ¤tFile)
{
label.setText(tr("%1 of %2 files copied./nCopying: %3").arg(done).arg(total).arg(currentFile));
}
-
参数顺序:
QString s1 = "%1 of %2 files copied. Copying: %3";
QString s2 = "Kopierer nu %3. Av totalt %2 filer er %1 kopiert.";
qDebug() << s1.arg(5).arg(10).arg("somefile.txt");
qDebug() << s2.arg(5).arg(10).arg("somefile.txt");
-
输出:
5 of 10 files copied. Copying: somefile.txt
Kopierer nu somefile.txt. Av totalt 10 filer er 5 kopiert.
- 为工程文件 xxx.pro 添加 TRANSLATIONS 入口。
HEADERS = funnydialog.h /
wackywidget.h
SOURCES = funnydialog.cpp /
main.cpp /
wackywidget.cpp
FORMS = fancybox.ui
TRANSLATIONS = xxx_zh.ts /
xxx_fi.ts /
xxx_no.ts /
xxx_se.ts
- lupdate xxx.pro, 产生xxx_ll_CC.ts TS文件
- lrelease xxx.pro, 产生xxx_ll_CC.qm QM文件
- 加载翻译文件
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
QTranslator myappTranslator;
myappTranslator.load("xxx_" + QLocale::system().name());
app.installTranslator(&myappTranslator);
...
return app.exec();
}