将小 Hello World 程序翻译成拉丁语。
屏幕截图展示 English 版。
见 Qt Linguist 手册 了解翻译 Qt 应用程序的更多有关信息。
#include <QTranslator>
This line includes the definition of the QTranslator class. Objects of this class provide translations for user-visible text.
QTranslator translator;
创建 QTranslator object without a parent.
Q_UNUSED(translator.load("hellotr_la"));
Tries to load a file called
hellotr_la.qm
(the
.qm
file extension is implicit) that contains Latin translations for the source texts used in the program. No error will occur if the file is not found.
app.installTranslator(&translator);
Adds the translations from
hellotr_la.qm
to the pool of translations used by the program.
QPushButton hello(QPushButton::tr("Hello world!"));
Creates a push button that displays "Hello world!". If
hellotr_la.qm
was found and contains a translation for "Hello world!", the translation appears; if not, the source text appears.
All classes that inherit
QObject
拥有
tr()
function. Inside a member function of a
QObject
class, we simply write
tr("Hello world!")
而不是
QPushButton::tr("Hello world!")
or
QObject::tr("Hello world!")
.
Since we haven't made the translation file
hellotr_la.qm
, the source text is shown when we run the application:
The first step is to create a project file that lists all the source files for the project.
When using qmake, the relevant lines in
hellotr.pro
是:
SOURCES = main.cpp TRANSLATIONS = hellotr_la.ts
TRANSLATIONS
specifies the message files we want to maintain. In this example, we just maintain one set of translations, namely Latin.
When using CMake, the relevant lines in
CMakeLists.txt
是:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools) qt6_add_translations(hellotr TS_FILES hellotr_la.ts QM_FILES_OUTPUT_VARIABLE qm_files) install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})
Note that the file extension is
.ts
, not
.qm
。
.ts
translation source format is designed for use during the application's development. Programmers or release managers run the
lupdate
program to generate and update TS files with the source text that is extracted from the source code. Translators read and update the TS files using
Qt Linguist
adding and editing their translations.
The TS format is human-readable XML that can be emailed directly and is easy to put under version control. If you edit this file manually, be aware that the default encoding for XML is UTF-8, not Latin1 (ISO 8859-1). One way to type in a Latin1 character such as 'ø' (Norwegian o with slash) is to use an XML entity: "ø". This will work for any Unicode 4.0 character.
Once the translations are complete the
lrelease
program is used to convert the TS files into the QM Qt message file format. The QM format is a compact binary format designed to deliver very fast lookup performance. Both
lupdate
and
lrelease
read all the project's source and header files (as specified in the HEADERS and SOURCES lines of the project file) and extract the strings that appear in
tr()
function calls.
lupdate
is used to create and update the message files (
hellotr_la.ts
in this case) to keep them in sync with the source code. It is safe to run
lupdate
at any time, as
lupdate
does not remove any information.
试着运行
lupdate
right now.
当使用 qmake 时,
lupdate
must be run manually:
lupdate -verbose hellotr.pro
(
-verbose
option instructs
lupdate
to display messages that explain what it is doing.)
当使用 CMake 时,构建
update_translations
目标要运行
lupdate
:
cmake --build . --target update_translations
You should now have a file
hellotr_la.ts
in the source directory, containing this:
<!DOCTYPE TS><TS> <context> <name>QPushButton</name> <message> <source>Hello world!</source> <translation type="unfinished"></translation> </message> </context> </TS>
You don't need to understand the file format since it is read and updated using tools (
lupdate
,
Qt Linguist
,
lrelease
).
将使用 Qt Linguist to provide the translation, although you can use any XML or plain text editor to enter a translation into a TS file.
To start Qt Linguist , type
linguist hellotr_la.ts
You should now see the text "QPushButton" in the top left pane. Double-click it, then click on "Hello world!" and enter "Orbis, te saluto!" in the Translation pane (the middle right of the window). Don't forget the exclamation mark!
点击 Done checkbox and choose File|Save from the menu bar. The TS file will no longer contain
<translation type='unfinished'></translation>
but instead will have
<translation>Orbis, te saluto!</translation>
To see the application running in Latin, we have to generate a QM file from the TS file. Generating a QM file can be achieved either from within
Qt Linguist
(for a single TS file), or by using the command line program
lrelease
which will produce one QM file for each of the TS files listed in the project file. Generate
hellotr_la.qm
from
hellotr_la.ts
by choosing
File|Release
from
Qt Linguist
's menu bar and pressing
Save
in the file save dialog that pops up. Now run the
hellotr
program again. This time the button will be labelled "Orbis, te saluto!".