Qt国际化

  • 所有用户可视的文本都使用 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();
    ...
};
  • 快捷键使用 QKeySequence()
exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcuts(QKeySequence::Quit);
  • 动态文本使用 QString::arg()
void FileCopier::showProgress(int done, int total, const QString &currentFile)
{
    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();
}

你可能感兴趣的:(System,Class,qt)