source: trunk/doc/src/internationalization/linguist-manual.qdoc@ 846

Last change on this file since 846 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

  • Property svn:eol-style set to native
File size: 66.2 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the documentation of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:FDL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in a
14** written agreement between you and Nokia.
15**
16** GNU Free Documentation License
17** Alternatively, this file may be used under the terms of the GNU Free
18** Documentation License version 1.3 as published by the Free Software
19** Foundation and appearing in the file included in the packaging of this
20** file.
21**
22** If you have questions regarding the use of this file, please contact
23** Nokia at [email protected].
24** $QT_END_LICENSE$
25**
26****************************************************************************/
27
28/*!
29 \page linguist-manual.html
30 \title Qt Linguist Manual
31 \ingroup qttools
32
33 \startpage {index.html}{Qt Reference Documentation}
34 \nextpage Qt Linguist Manual: Release Manager
35
36 \keyword Qt Linguist
37
38 Qt provides excellent support for translating applications into local
39 languages. This Guide explains how to use Qt's translation tools for
40 each of the roles involved in translating an application. The Guide
41 begins with a brief overview of the issues that must be considered,
42 followed by chapters devoted to each role and the supporting tools
43 provided.
44
45 The \l{linguist-manager.html}{Release Manager} chapter is aimed
46 at the person with overall responsibility for the release of the
47 application. They will typically coordinate the work of the
48 software engineers and the translator. The chapter describes the
49 use of two tools. The \l{lupdate} tool is used to synchronize
50 source code and translations. The \l{lrelease} tool is used to
51 create run-time translation files for use by the released
52 application.
53
54 The \l{linguist-translators.html}{Translators} chapter is for
55 translators. It describes the use of the \QL tool.
56 No computer knowledge beyond the ability to start a program and
57 use a text editor or word processor is required.
58
59 The \l{linguist-programmers.html}{Programmers} chapter is for Qt
60 programmers. It explains how to create Qt applications that are
61 able to use translated text. It also provides guidance on how to
62 help the translator identify the context in which phrases appear.
63 This chapter's three short tutorials cover everything the
64 programmer needs to do.
65
66 \section1 Overview of the Translation Process
67
68 Most of the text that must be translated in an application program
69 consists of either single words or short phrases. These typically
70 appear as window titles, menu items, pop-up help text (balloon help),
71 and labels to buttons, check boxes and radio buttons.
72
73 The phrases are entered into the source code by the programmer in
74 their native language using a simple but special syntax to identify
75 that the phrases require translation. The Qt tools provide context
76 information for each of the phrases to help the translator, and the
77 programmer is able to add additional context information to phrases
78 when necessary. The release manager generates a set of translation
79 files that are produced from the source files and passes these to the
80 translator. The translator opens the translation files using \QL,
81 enters their translations and saves the results back into
82 the translation files, which they pass back to the release manager.
83 The release manager then generates fast compact versions of these
84 translation files ready for use by the application. The tools are
85 designed to be used in repeated cycles as applications change and
86 evolve, preserving existing translations and making it easy to
87 identify which new translations are required. \QL also
88 provides a phrase book facility to help ensure consistent
89 translations across multiple applications and projects.
90
91 Translators and programmers must address a number of issues because
92 of the subtleties and complexities of human language:
93
94 \list
95
96 \o A single phrase may need to be translated into several
97 different forms depending on context, e.g. \e open in English
98 might become \e{\ouml\c{}ffnen}, "open file", or \e aufbauen,
99 "open internet connection", in German.
100
101 \o Keyboard accelerators may need to be changed but without
102 introducing conflicts, e.g. "\&Quit" in English becomes "Avslutt"
103 in Norwegian which doesn't contain a "Q". We cannot use a letter
104 that is already in use - unless we change several accelerators.
105
106 \o Phrases that contain variables, for example, "The 25 files
107 selected will take 63 seconds to process", where the two numbers
108 are inserted programmatically at run-time may need to be reworded
109 because in a different language the word order and therefore the
110 placement of the variables may have to change.
111
112 \endlist
113
114 The Qt translation tools provide clear and simple solutions to these
115 issues.
116
117 Chapters:
118
119 \list
120 \o \l{Qt Linguist Manual: Release Manager}{Release Manager}
121 \o \l{Qt Linguist Manual: Translators}{Translators}
122 \o \l{Qt Linguist Manual: Programmers}{Programmers}
123 \o \l{Qt Linguist Manual: TS File Format}{TS File Format}
124 \endlist
125
126 \QL and \c lupdate are able to import and export XML Localization
127 Interchange File Format (XLIFF) files, making it possible to take
128 advantage of tools and translation services that work with this
129 format. See the \l{Qt Linguist Manual: Translators} {Translators}
130 section for more information on working with these files.
131
132 \table
133
134 \row \o{1,2} \inlineimage wVista-Cert-border-small.png
135 \o \e{Qt Linguist 4.3 is Certified for Windows Vista}
136
137 \row \o Windows Vista and the Windows Vista Start button are
138 trademarks or registered trademarks of Microsoft Corporation in
139 the United States and/or other countries.
140
141 \endtable
142*/
143
144/*!
145 \page linguist-manager.html
146 \title Qt Linguist Manual: Release Manager
147
148 \contentspage {Qt Linguist Manual}{Contents}
149 \previouspage Qt Linguist Manual
150 \nextpage Qt Linguist Manual: Translators
151
152 \keyword lupdate
153 \keyword lrelease
154
155 Two tools are provided for the release manager, \l lupdate and \l
156 lrelease. These tools can process \l qmake project files, or operate
157 directly on the file system.
158
159 \section1 Qt Project Files
160
161 The easiest method to use \l{#lupdate} {lupdate} and \l{#lrelease}
162 {lrelease} is by specifing a \c .pro Qt project file. There must
163 be an entry in the \c TRANSLATIONS section of the project file for
164 each language that is additional to the native language. A typical
165 entry looks like this:
166
167 \snippet examples/linguist/arrowpad/arrowpad.pro 1
168
169 Using a locale within the translation file name is useful for
170 determining which language to load at runtime. This is explained
171 in the \l{linguist-programmers.html} {Programmers} chapter.
172
173 An example of a complete \c .pro file with four translation source
174 files:
175
176 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 0
177 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 1
178
179 QTextCodec::setCodecForTr() makes it possible to choose a 8-bit
180 encoding for literal strings that appear within \c tr() calls.
181 This is useful for applications whose source language is, for
182 example, Chinese or Japanese. If no encoding is set, \c tr() uses
183 Latin1.
184
185 If you do use the QTextCodec::codecForTr() mechanism in your
186 application, \QL needs you to set the \c CODECFORTR
187 entry in the \c .pro file as well. For example:
188
189 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 1
190
191 Also, if your compiler uses a different encoding for its runtime
192 system as for its source code and you want to use non-ASCII
193 characters in string literals, you will need to set the \c
194 CODECFORSRC. For example:
195
196 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 2
197
198 Microsoft Visual Studio 2005 .NET appears to be the only compiler
199 for which this is necessary. However, if you want to write
200 portable code, we recommend that you avoid non-ASCII characters
201 in your source files. You can still specify non-ASCII characters
202 portably using escape sequences, for example:
203
204 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 3
205
206 \target lupdate manual
207 \section1 lupdate
208
209 Usage: \c {lupdate myproject.pro}
210
211 \l lupdate is a command line tool that finds the translatable
212 strings in the specified source, header and \e {Qt Designer}
213 interface files, and produces or updates \c .ts translation
214 files. The files to process and the files to update can be set at
215 the command line, or provided in a \c .pro file specified as an
216 command line argument. The produced translation files are given to
217 the translator who uses \QL to read the files and insert the
218 translations.
219
220 Companies that have their own translators in-house may find it
221 useful to run \l lupdate regularly, perhaps monthly, as the
222 application develops. This will lead to a fairly low volume of
223 translation work spread evenly over the life of the project and
224 will allow the translators to support a number of projects
225 simultaneously.
226
227 Companies that hire in translators as required may prefer to run
228 \l lupdate only a few times in the application's life cycle, the
229 first time might be just before the first test phase. This will
230 provide the translator with a substantial single block of work and
231 any bugs that the translator detects may easily be included with
232 those found during the initial test phase. The second and any
233 subsequent \l lupdate runs would probably take place during the
234 final beta phase.
235
236 The TS file format is a simple human-readable XML format that
237 can be used with version control systems if required. \c lupdate
238 can also process Localization Interchange File Format (XLIFF)
239 format files; files in this format typically have file names that
240 end with the \c .xlf suffix.
241
242 \note The minimum supported version for XLIFF format files is
243 1.1. XLIFF 1.0 version files are not supported.
244
245 Pass the \c -help option to \c lupdate to obtain the list of
246 supported options:
247
248 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 4
249
250 \QL is also able to import and export XLIFF files. See the
251 \l{Qt Linguist Manual: Translators}{Translators} section for more
252 information.
253
254 \section1 lrelease
255
256 Usage: \c {lrelease myproject.pro}
257
258 \l lrelease is a command line tool that produces QM files out
259 of TS files. The QM file format is a compact binary format
260 that is used by the localized application. It provides extremely
261 fast lookups for translations. The TS files \l lrelease
262 processes can be specified at the command line, or given
263 indirectly by a Qt \c .pro project file.
264
265 This tool is run whenever a release of the application is to be
266 made, from initial test version through to final release
267 version. If the QM files are not created, e.g. because an
268 alpha release is required before any translation has been
269 undertaken, the application will run perfectly well using the text
270 the programmers placed in the source files. Once the QM files
271 are available the application will detect them and use them
272 automatically.
273
274 Note that lrelease will only incorporate translations that are
275 marked as "finished". Otherwise the original text will be used
276 instead.
277
278 Pass the \c -help option to \c lrelease to obtain the list of
279 supported options:
280
281 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 5
282
283 \section1 Missing Translations
284
285 Both \l lupdate and \l lrelease may be used with TS
286 translation source files which are incomplete. Missing
287 translations will be replaced with the native language phrases at
288 runtime.
289*/
290
291/*!
292 \page linguist-translators.html
293 \title Qt Linguist Manual: Translators
294
295 \contentspage {Qt Linguist Manual}{Contents}
296 \previouspage Qt Linguist Manual: Release Manager
297 \nextpage Qt Linguist Manual: Programmers
298
299 Contents
300
301 \tableofcontents
302
303 \section1 The One Minute Guide to Using Qt Linguist
304
305 \QL is a tool for adding translations to Qt applications. Run \QL
306 from the taskbar menu, or by double clicking the desktop icon, or
307 by entering the command \c {linguist} at the command line. Once
308 \QL has started, choose \menu{File|Open} from the \l{menubar}
309 {menu bar} and select a translation source (TS file) to
310 load. If you do not have a TS file, see the \l {Qt Linguist
311 Manual: Release Manager} {release manager manual} to learn how to
312 generate one.
313
314 The \QL main window is divided into several, dockable subwindows
315 arranged around a central \l{The Translation Area} {translation
316 area}. The \l{Context Window} {context list} is normally shown
317 on the left, and the \l{Sources and Forms Window} {source code},
318 \l{Strings Window} {string list}, and either the \l{Phrases and
319 Guesses Window} {phrases and guesses}, or the \l{Warnings Window}
320 {warnings} are shown above and below the \l{The Translation Area}
321 {translations area}.
322
323 With a translation file loaded, select a context from the
324 \l{Context Window} {context list} on the left. Selecting a context
325 loads the translatable strings found in that context into the
326 \l{Strings Window} {string list}. Selecting one of the strings
327 copies that string as the \key{Source text} in the \l{The
328 Translation Area} {translation area}. Click in the text entry
329 widget below the copied string and type your translation for that
330 string. To accept the translation, either press the green
331 \key{tick mark} button on the toolbar, or click the icon to the
332 left of the selected source string in the string list. Repeat this
333 process until all strings in the string list are marked with
334 \inlineimage linguist-check-on.png
335 or
336 \inlineimage linguist-check-warning.png
337 . Then select the next context and continue.
338
339 Translation options are shown in the \l{Phrases and Guesses
340 Window} {phrases and guesses window}. If the phrases and guesses
341 window is not visible, click the \key{Phrases and guesses} tab at
342 the bottom of the main window. The phrases and guesses window
343 shows possible translations for the current string. These
344 translation "guesses" have been read from phrase books
345 (\menu{Phrases|Open Phrase Book...}). The current string's
346 current translation is also shown here. To select a guess, double
347 click it in the phrases and guesses window or use the keyboard
348 shortcut shown to the right of the guess.
349
350 \QL can automatically check whether your translation strings pass
351 a list of \l{Validation Tests} {validation tests}. Validation test
352 failures are shown in the \l{Warnings Window} {warnings window}.
353 If the warnings window is not visible, click the \key{Warnings}
354 tab at the bottom of the main window.
355
356 Finally, if the source code for the contexts is accessible, the
357 \l{Sources and Forms Window} {source code window} shows the
358 context where the current string is used. If the source code
359 window is not visible, click the \key{Sources and Forms} tab at
360 the bottom of the main window.
361
362 At the end of the session choose \menu{File|Save} from the menu
363 bar and then \menu{File|Exit} to quit.
364
365 \section1 The Qt Linguist Window
366
367 \image linguist-linguist.png "Linguist UI Snapshot"
368
369 This \QL main window is divided into dockable subwindows arranged
370 around a central \l{The Translation Area} {translation area}. The
371 subwindows are: \l{Context Window} {Context}, \l{Sources and Forms
372 Window} {Sources and Forms}, \l{Strings Window} {Strings},
373 \l{Phrases and Guesses Window} {Phrases and guesses}, and
374 \l{Warnings Window} {Warnings} (hidden in the UI snapsot). The
375 translation area is always visible, but the dockable subwindows
376 can be activated or deactivated in the \menu{View|Views} menu, and
377 dragged around by their title bars and dropped in the translation
378 area or even outside the main window.
379
380 \section2 Context Window
381
382 The context window normally appears on the left side of the main
383 window. It lists the contexts in which strings to be translated
384 appear. The column labeled \e{Context} lists the context names in
385 alphabetical order. Each context is the name of a subclass of
386 QObject. There can also be a context for QObject itself, which
387 contains strings passed to the static function QObject::tr().
388 There can also be an \e{<unnamed context>}, which contains strings
389 that aren't in a subclass of QObject.
390
391 To the left of the \e{Context} column is a column labeled
392 \inlineimage linguist-check-obsolete.png
393 . This column uses the following list of icons to summarize the
394 current translation state for each context:
395
396 \list
397
398 \o \inlineimage linguist-check-on.png
399 All strings in the context have been translated, and all the
400 translations passed the \l{Validation Tests} {validation tests}.
401
402 \o \inlineimage linguist-check-warning.png
403 All strings in the context have been translated or marked as
404 translated, but at least one translation failed the \l{Validation
405 Tests} {validation tests}.
406
407 \o \inlineimage linguist-check-off.png
408 At least one string in the context has not been translated or is
409 not marked as translated.
410
411 \o \inlineimage linguist-check-obsolete.png
412 None of the translated strings still appears in the context. This
413 usually means the context itself no longer exists in the
414 application.
415
416 \endlist
417
418 To the right of the \e{Context} column is the \e{Items} column.
419 Each entry in the \e{Items} column is a pair of numbers separated
420 by a slash ("/"). The number to the right of the slash is the
421 number of translatable strings in the context. The number to the
422 left of the slash is the number of those strings that currently
423 have translations. i.e., if the numbers are equal, all the
424 translatable strings in the context have translations.
425
426 In the UI snapshot above, the \bold{MessageEditor} context is
427 selected. Its \e{Items} entry shows \bold{18/18}, which means it
428 has 18 translatable strings and all 18 strings currently have
429 translations. However, the context has been marked with the
430 \inlineimage linguist-check-warning.png
431 icon, which means that at least one of the current translations
432 failed a \l{Validation Tests} {validation test}. In the
433 \l{Strings Window} {strings window} to the right, we see that one
434 of the strings is indeed marked with the
435 \inlineimage linguist-check-warning.png
436 icon.
437
438 The context window is a dockable window. It can be dragged to
439 another position in the main window, or dragged out of the main
440 window to be a separate window. If you move the context window,
441 \QL remembers the new position and puts the context window there
442 whenever you start the program. If the context window has been
443 closed, it can be restored by pressing \key{F6}.
444
445 \section2 Strings Window
446
447 The strings window normally appears on the right in the main
448 window, above the \l{The Translation Area} {translation area}. Its
449 \e{Source text} column lists all the translatable strings found in
450 the current context. Selecting a string makes that string the
451 current string in the \l{The Translation Area} {translation area}.
452
453 To the left of the \e{Source text} column is a column labeled
454 \inlineimage linguist-check-obsolete.png
455 . This column is similar to the one in the \l{Context Window}
456 {context window}, but here you can click on the icon to change the
457 translation acceptance state for each string in the list. A tick
458 mark, green or yellow, means the string has been translated and
459 the user has accepted the translation. A question mark means
460 either that the user has not accepted the string's translation or
461 that the string doesn't have a translation. The table below
462 explains the acceptance states and their icons:
463
464 \target String Translation States
465
466 \table
467 \header
468 \o State
469 \o Icon
470 \o Description
471
472 \row
473 \o Accepted/Correct
474 \o \inlineimage linguist-check-on.png
475 \o The source string has a translation (possibly empty); the user
476 has accepted the translation, and the translation passes all the
477 \l{Validation Tests} {validation tests}. If the translation is
478 empty, the user has chosen to leave it empty. Click the icon to
479 revoke acceptance of the translation and decrement the number of
480 accepted translations in the \e{Items} column of the \l{Context
481 Window} {context list} by 1. The state is reset to
482 \inlineimage linguist-check-off.png
483 if the string has a translation, or to
484 \inlineimage linguist-check-empty.png
485 if the string's translation is empty. If \c{lupdate} changes the
486 contents of a string, its acceptance state is automatically reset
487 to \inlineimage linguist-check-off.png
488 .
489
490 \row
491 \o Accepted/Warnings
492 \o \inlineimage linguist-check-warning.png
493 \o The user has accepted the translation, but the translation does
494 not pass all the \l{Validation Tests} {validation tests}. The
495 validation test failures are shown in the \l{Warnings Window}
496 {warnings window}. Click the icon to revoke acceptance of the
497 translation. The state is reset to \inlineimage linguist-danger.png
498 , and the number of accepted translations in the \e{Items} column
499 of the \l{Context Window} {context list} is decremented by 1.
500
501 \row
502 \o Not Accepted
503 \o \inlineimage linguist-check-off.png
504 \o The string has a non-empty translation that passes all the
505 \l{Validation Tests} {validation tests}, but the user has not yet
506 accepted the translation. Click the icon or press \key{Ctrl+Enter}
507 to accept the translation. The state is reset to
508 \inlineimage linguist-check-on.png
509 , and the number of accepted translations in the \e{Items} column
510 of the \l{Context Window} {context list} is incremented by 1.
511
512 \row
513 \o No Translation
514 \o \inlineimage linguist-check-empty.png
515 \o The string does not have a translation. Click the icon to
516 accpet the empty translation anyway. The state is reset to
517 \inlineimage linguist-check-on.png
518 , and the number of accepted translations in the \e{Items} column
519 of the \l{Context Window} {context list} is incremented by 1.
520
521 \row
522 \o Validation Failures
523 \o \inlineimage linguist-danger.png
524 \o The string has a translation, but the translation does not
525 pass all the \l{Validation Tests} {validation tests}. Validation
526 test failures are shown in the \l{Warnings Window} {warnings}
527 window. Click on the icon or press \key{Ctrl+Return} to accept
528 the translation even with validation failures. The state is
529 reset to \inlineimage linguist-check-warning.png
530 . We recommended editing the translation to fix the causes of
531 the validation failures. The state will reset automatically to
532 \inlineimage linguist-check-off.png
533 , when all the failures have been fixed.
534
535 \row
536 \o Obsolete
537 \o \inlineimage linguist-check-obsolete.png
538 \o The string is obsolete. It is no longer used in the context.
539 See the \l{Qt Linguist Manual: Release Manager} {Release Manager}
540 for instructions on how to remove obsolete messages from the file.
541
542 \endtable
543
544 The string list is a dockable subwindow. If it has been closed,
545 restored it by pressing \key{F7}.
546
547 \section2 The Translation Area
548
549 The translation area is in the middle of the main window, to the
550 right of the \l{Context Window} {context list}. It doesn't have a
551 title bar, so you can't drag it around. Instead, you drag and drop
552 the other subwindows to arrange them around the translation area.
553 The string currently selected in the \l{Strings Window} {string
554 list} appears at the top of the translation area, under the label
555 \menu{Source text}. Note that all blanks in the source text have
556 been replaced by "." so the translator can see the spacing
557 required within the text.
558
559 If the developer provides a \l{QObject::tr()} {disambiguating
560 comment}, it will appear below the source text area, under the
561 label \menu{Developer comments}.
562
563 Below the source text and optional developer comments are two text
564 entry widgets for the translator, one for entering the translation
565 of the current string, and one for the translator to enter an
566 optional comment to be read by other translators.
567
568 When \l{Translating Multiple Languages Simultaneously} {multiple
569 languages} are being translated, this sequence of fields is
570 repeated for each language. See aso \l {Changing the Target
571 Locale}.
572
573 \section2 Phrases and Guesses Window
574
575 If the current string in the \l{Strings Window} {string list}
576 appears in one or more of the \l{Phrase Books} {phrase books}
577 that have been loaded, the current string and its phrase book
578 translation(s) will be listed in this window. If the current
579 string is the same as, or similar to, another string that has
580 already been translated, that other string and its translation
581 will also be listed in this window.
582
583 To use a translation from the Phrases and Guesses Window, you can
584 double click the translation, and it will be copied into the
585 translation area, or you can use the translation's \e{Guess}
586 hotkey on the right. You can also press \key{F10} to move the
587 focus to the Phrases and Guesses Window, then use the up and down
588 arrow keys to find the desired translation, and and then press
589 \key{Enter} to copy it to the translation area. If you decide
590 that you don't want to copy a phrase after all, press \key{Esc} to
591 return the focus to the translation area.
592
593 The Phrases and Guesses Window is a dockable window. If it has
594 been closed, it can be made visible by pressing the \e{Phrases and
595 guesses} tab at the bottom of the window, or by pressing
596 \key{F10}.
597
598 \section2 Sources and Forms Window
599
600 If the source files containing the translatable strings are
601 available to \QL, this window shows the source context of the
602 current string in the \l{Strings Window} {string list}. The source
603 code line containing the current string should be shown and
604 highlighted. If the file containing the source string is not
605 found, the expected absolute file path is shown.
606
607 If the source context shows the wrong source line, it probably
608 means the translation file is out of sync with the source files.
609 To re-sync the translation file with the source files, see the
610 \l{lupdate manual} {lupdate manual}.
611
612 The Sources and Forms window is a dockable window. If it has been
613 closed, it can be made visible again by pressing the \e{Sources
614 and Forms} tab at the bottom of the window, or by pressing
615 \key{F9}.
616
617 \section2 Warnings Window
618
619 If the translation you enter for the current string fails any of
620 the active \l{Validation Tests} {validation tests}, the failures
621 are listed in the warnings window. The first of these failure
622 messages is also shown in the status bar at the bottom of the main
623 window. Note that only \e{active} validation tests are
624 reported. To see which validation tests are currently active, or
625 to activate or deactivate tests, use the \menu{Validation} menu
626 from the \l{menubar}{menu bar}.
627
628 The Warnings window is a dockable window. If it has been closed,
629 it can be made visible by pressing the \e{Warnings} tab at the
630 bottom of the window, or by pressing \key{F8}.
631
632 \target multiple languages
633 \section2 Translating Multiple Languages Simultaneously
634
635 Qt Linguist can now load and edit multiple translation files
636 simultaneously. One use for this is the case where you know two
637 languages better than you know English (Polish and Japanese, say),
638 and you are given an application's Polish translation file and
639 asked to update the application's Japanese translation file. You
640 are more comfortable translating Polish to Japanese than you are
641 translating English to Japanese.
642
643 Below is the UI snapshot shown earlier, but this time with both
644 \e{Polish} and \e{Japanese} translation files loaded.
645
646 \image linguist-linguist_2.png
647
648 The first thing to notice is that the \l{The Translation Area}
649 {translation area} has text editing areas for both Polish and
650 Japanese, and these are color-coded for easier separation.
651 Second, the \l{Context Window} and the \l{Strings Window} both
652 have two clomuns labeled \inlineimage linguist-check-obsolete.png
653 instead of one, and although it may be hard to tell, these columns
654 are also color-coded with the same colors. The left-most column in
655 either case applies to the top-most language area (Polish above)
656 in the \l{The Translation Area} {translation area}, and the
657 right-most column applies to the bottom language area.
658
659 The \e{Items} column in the \l{Context Window} combines the values
660 for both languages. The best way to see this is to look at the
661 value for the \bold{MessageEditor} context, which is the one
662 selected in the snapshot shown above. Recall that in the first UI
663 snapshot (Polish only), the numbers for this context were
664 \e{18/18}, meaning 18 translatable strings had been found in the
665 context, and all 18 strings had accepted translations. In the UI
666 snapshot above, the numbers for the \bold{MessageEditor} context
667 are now \e{1/18}, meaning that both languages have 18 translatable
668 strings for that context, but for Japanese, only 1 of the 18
669 strings has an accepted translation. The
670 \inlineimage linguist-check-off.png
671 icon in the Japanese column means that at least one string in the
672 context doesn't have an accepted Japanese translation yet. In fact,
673 17 of the 18 strings don't have accepted Japanese translations yet.
674 We will see \e{18/18} in the \e{Items} column when all 18 strings
675 have accepted translations for all the loaded translation files,
676 e.g., both Polish and Japanese in the snapshot.
677
678 \section1 Common Tasks
679
680 \section2 Leaving a Translation for Later
681
682 If you wish to leave a translation press \key{Ctrl+L} (Next
683 Unfinished) to move to the next unfinished translation. To move to
684 the next translation (whether finished or unfinished) press
685 \key{Shift+Ctrl+L}. You can also navigate using the Translation
686 menu. If you want to go to a different context entirely, click the
687 context you want to work on in the Context list, then click the
688 source text in the \l{Strings Window} {string list}.
689
690 \section2 Phrases That Require Multiple Translations Depending on Context
691
692 The same phrase may occur in two or more contexts without conflict. Once
693 a phrase has been translated in one context, \QL notes
694 that the translation has been made and when the translator reaches a
695 later occurrence of the same phrase \QL will provide
696 the previous translation as a possible translation candidate in the
697 \l{Phrases and Guesses Window}.
698
699 If a phrase occurs more than once in a particular context it will
700 only be shown once in \QL's \l{Context Window} {context list} and
701 the translation will be applied to every occurrence within the
702 context. If the same phrase needs to be translated differently
703 within the same context the programmer must provide a
704 distinguishing comment for each of the phrases concerned. If such
705 comments are used the duplicate phrases will appear in the
706 \l{Context Window} {context list}. The programmers comments will
707 appear in the \l{The Translation Area} {translation area} on a
708 light blue background.
709
710 \section2 Changing Keyboard Accelerators
711
712 A keyboard accelerator is a key combination that, when pressed,
713 causes an application to perform an action. There are two kinds of
714 keyboard accelerators: Alt key and Ctrl key accelerators.
715
716 \section3 Alt Key Accelerators
717
718 Alt key accelerators are used in menu selection and on buttons.
719 The underlined character in a menu item or button label signifies
720 that pressing the Alt key with the underlined character will
721 perform the same action as clicking the menu item or pressing the
722 button. For example, most applications have a \e{File} menu with
723 the "F" in the word "File" underlined. In these applications the
724 \e{File} menu can be invoked either by clicking the word "File" on
725 the menu bar or by pressing \e{Alt+F}. To identify an accelerator
726 key in the translation text ("File") precede it with an ampersand,
727 e.g. \e{\&File}. If a string to be translated has an ampersand in
728 it, then the translation for that string should also have an
729 ampersand in it, preferably in front of the same character.
730
731 The meaning of an Alt key accelerator can be determined from the
732 phrase in which the ampersand is embedded. The translator can
733 change the character part of the Alt key accelerator, if the
734 translated phrase does not contain the same character or if that
735 character has already been used in the translation of some other
736 Alt key accelerator. Conflicts with other Alt key accelerators
737 must be avoided within a context. Note that some Alt key
738 accelerators, usually those on the menu bar, may apply in other
739 contexts.
740
741 \section3 Ctrl Key Accelerators
742
743 Ctrl key accelerators can exist independently of any visual
744 control. They are often used to invoke actions in menus that would
745 otherwise require multiple keystrokes or mouse clicks. They may
746 also be used to perform actions that do not appear in any menu or
747 on any button. For example, most applications that have a \e{File}
748 menu have a \e{New} submenu item in the \e{File} menu. The \e{New}
749 item might appear as "\underline{N}ew Ctrl+N" in the \e{File}
750 menu, meaning the \e{New} menu can be invoked by simply pressing
751 \key{Ctrl+N}, instead of either clicking \e{File} with the mouse
752 and then clicking \e{New} with the mouse, or by entering \e{Alt+F}
753 and \e{N}.
754
755 Each Ctrl key accelerator is shown in the \l{Strings Window}
756 {string list} as a separate string, e.g. \key{Ctrl+Enter}. Since
757 the string doesn't have a context to give it meaning, e.g. like
758 the context of the phrase in which an Alt key accelerator appears,
759 the translator must rely on the UI developer to include a
760 \l{QObject::tr()} {disambiguation comment} to explain the action
761 the Ctrl key accelerator is meant to perform. This disambiguating
762 comment (if provided by the developer) will appear under
763 \e{Developer comments} in the \l{The Translation Area}
764 {translation area} under the \e{Source text} area.
765
766 Ideally Ctrl key accelerators are translated simply by copying
767 them directly using \e {Copy from source text} in the
768 \menu{Translation} menu. However, in some cases the character will
769 not make sense in the target language, and it must be
770 changed. Whichever character (alpha or digit) is chosen, the
771 translation must be in the form "Ctrl+" followed by the upper case
772 character. \e{Qt} will automatically display the correct name at
773 run-time. As with Alt key accelerators, if the translator changes
774 the character, the new character must not conflict with any other
775 Ctrl key accelerator.
776
777 \warning Do not translate the "Alt", "Ctrl" or "Shift" parts of
778 the accelerators. \e{Qt} relies on these strings being there. For
779 supported languages, \e {Qt} automatically translates these
780 strings.
781
782 \section2 Handling Numbered Arguments and Plurals
783
784 Some phrases contain numbered arguments. A numbered argument is a
785 placeholder that will be replaced with text at run-time. A numbered
786 argument appears in a source string as a percent sign followed by
787 a digit. Consider an example: \c{After processing file %1, file %2
788 is next in line}. In this string to be translated, \c{%1} and
789 \c{%2} are numbered arguments. At run-time, \c{%1} and \c{%2} will
790 be replaced with the first and next file names respectively. The
791 same numbered arguments must appear in the translation, but not
792 necessarily in the same order. A German translation of the string
793 might reverse the phrases, e.g. \c{Datei %2 wird bearbeitet, wenn
794 Datei %1 fertig ist}. Both numbered arguments appear in the
795 translation, but in the reverse order. \c{%i} will always be
796 replaced by the same text in the translation stringss, regardless
797 of where argument \e{i} appears in the argument sequence in the
798 source string.
799
800 The use of numbered arguments is often accompanied by the use of
801 plurals in the source text. In many languages, the form of the
802 text will depend on the value shown, and more than one translation
803 is required. If the developers have marked up the source text in
804 correct way, fields for each of the possible plural forms will be
805 available in the translation area. (The
806 \l{Writing Source Code for Translation#Handling Plurals}{Writing Source Code for Translation}
807 document contains details about this feature for developers.)
808
809 \section2 Reusing Translations
810
811 If the translated text is similar to the source text, choose the
812 \e {Copy from source text} entry in the \menu Translation menu (press
813 \key{Ctrl+B}) which will copy the source text into the
814 \l{The Translation Area} {translation area}.
815
816 \QL automatically lists possible translations from any open
817 \l{Phrase Books} {phrase books} in the \l{Phrases and Guesses
818 Window}, as well as similar or identical phrases that have already
819 been translated.
820
821 \section2 Changing the Target Locale
822
823 \QL displays the target language in the \l{The Translation Area}
824 {translation area}, and adapts the number of input fields for
825 plural forms accordingly. If not explicitly set, \QL guesses the
826 target language and country by evaluating the translation source
827 file name. For example, \c app_de.ts sets the target language to German,
828 and \c app_de_ch.ts sets the target language to German and the
829 target country to Switzerland (this also helps loading
830 translations for the current locale automatically; see
831 \l{linguist-programmers.html}{Programmers Manual} for details).
832 If your files do not follow this convention, you can also set the
833 locale information explicitly using \e {Translation File Settings}
834 in the \menu Edit menu.
835
836 \image linguist-translationfilesettings.png
837
838 \section1 Phrase Books
839
840 A \QL phrase book is a set of source phrases, target
841 (translated) phrases, and optional definitions. Typically one phrase book
842 will be created per language and family of applications. Phrase books
843 are used to provide a common set of translations to help ensure consistency.
844 They can also be used to avoid duplication of effort since the translations
845 for a family of applications can be produced once in the phrase book.
846 If the translator reaches an untranslated phrase that is the same as a
847 source phrase in a phrase book, \QL will show the
848 phrase book entry in the \l {Phrases and Guesses Window}.
849
850 \section2 Creating and Editing Phrase Books
851
852 \image linguist-phrasebookdialog.png
853
854 Before a phrase book can be edited it must be created or, if it already
855 exists, opened. Create a new phrase book by selecting
856 \menu{Phrase|New Phrase Book} from the menu bar. You must enter a
857 filename and may change the location of the file if you wish. A newly
858 created phrase book is automatically opened. Open an existing phrase
859 book by choosing \menu{Phrase|Open Phrase Book} from the menu bar.
860
861 The phrase book contents can be displayed and changed by selecting
862 \menu{Phrase|Edit Phrase Book}, and then activating the phrase book you
863 want to work on. This will pop up the Phrase Book Dialog as shown
864 in the image above. To add a new phrase click the \gui{New Phrase}
865 button (or press Alt+N) and type in a new source phrase. Press Tab and
866 type in the translation. Optionally press Tab and enter a definition --
867 this is useful to distinguish different translations of the same source
868 phrase. This process may be repeated as often as necessary. You can delete
869 a phrase by selecting it in the phrases list and clicking
870 Remove Phrase. Click the \gui Close button (press Esc) once you've finished
871 adding (and removing) phrases.
872
873 \section2 Shortcuts for Editing Phrase Books
874
875 You can also create a new phrase book entry directly out of the translation you
876 are working on: Clicking \menu{Phrases|Add to Phrase Book} or pressing
877 \key{Ctrl+T} will add the source text and the content of the first translation
878 field to the current phrase book. If multiple phrase books are loaded,
879 you have to specify the phrase book to add the entry to in a dialogue.
880 If you detect an error in a phrase book entry that is shown in the
881 \l{Phrases and Guesses Window}, you can also edit it in place by right
882 clicking on the entry, and selecting \menu{Edit}. After fixing the error
883 press \key{Return} to leave the editing mode.
884
885 \section2 Batch Translation
886
887 \image linguist-batchtranslation.png
888
889 Use the batch translation feature of \QL to automatically
890 translate source texts that are also in a phrase book. Selecting
891 \menu{Tools|Batch Translation} will show you the batch translation dialog,
892 which let you configure which phrase books to use in what order during the
893 batch translation process. Furthermore you can set whether only entries
894 with no present translation should be considered, and whether batch translated
895 entries should be set to finished (see also \l {String Translation States}).
896
897 \section1 Validation Tests
898
899 \QL provides four kinds of validation tests for translations.
900
901 \list 1
902 \o \e {Accelerator validation} detects translated phrases
903 that do not have an ampersand when the source phrase does and vice
904 versa.
905 \o \e {Punctuation validation} detects differences in the
906 terminating punctuation between source and translated phrases when this
907 may be significant, e.g. warns if the source phrase ends with an
908 ellipsis, exclamation mark or question mark, and the translated phrase
909 doesn't and vice versa.
910 \o \e {Phrases validation} detects source phrases that are
911 also in the phrase book but whose translation differs from that given in
912 the phrase book.
913 \o \e {Place marker validation} detects whether the same variables
914 (like \c %1, \c %2) are used both in the source text and in the translation.
915 \endlist
916
917 Validation may be switched on or off from the menu bar's
918 Validation item or using the toolbar buttons. Unfinished phrases
919 that fail validation are marked with an exclamation mark in the
920 source text pane. Finished phrases will get a yellow tick
921 instead. If you switch validation off and then switch it on later,
922 \QL will recheck all phrases and mark any that fail
923 validation. See also \l{String Translation States}.
924
925 \section1 Form Preview
926
927 \image linguist-previewtool.png
928
929 Forms created by \e{Qt Designer} are stored in special UI files.
930 \QL can make use of these UI files to show the translations
931 done so far on the form itself. This of course requires access to the UI
932 files during the translation process. Activate
933 \menu{Tools|Open/Refresh Form Preview} to open the window shown above.
934 The list of UI files \QL has detected are displayed in the Forms
935 List on the left hand. If the path to the files has changed, you can load
936 the files manually via \menu{File|Open Form...}. Double-click on an entry
937 in the Forms List to display the Form File. Select \e{<No Translation>} from
938 the toolbar to display the untranslated form.
939
940 \section1 Qt Linguist Reference
941
942
943 \section2 File Types
944
945 \QL makes use of four kinds of files:
946
947 \list
948 \o TS \e {translation source files} \BR are human-readable XML
949 files containing source phrases and their translations. These files are
950 usually created and updated by \l lupdate and are specific to an
951 application.
952 \o \c .xlf \e {XLIFF files} \BR are human-readable XML files that adhere
953 to the international XML Localization Interchange File Format. \QL
954 can be used to edit XLIFF files generated by other programs. However, for
955 standard Qt projects, only the TS file format is used. \note The minimum
956 supported version for XLIFF format files is 1.1. XLIFF 1.0 version files
957 are not supported.
958 \o QM \e {Qt message files} \BR are binary files that contain
959 translations used by an application at run-time. These files are
960 generated by \l lrelease, but can also be generated by \QL.
961 \o \c .qph \e {Qt phrase book files} \BR are human-readable XML
962 files containing standard phrases and their translations. These files
963 are created and updated by \QL and may be used by any
964 number of projects and applications.
965 \endlist
966
967 \target menubar
968 \section2 The Menu Bar
969
970 \image linguist-menubar.png
971
972 \list
973 \o \gui {File}
974 \list
975 \o \gui {Open... Ctrl+O} \BR pops up an open file dialog from which a
976 translation source \c .ts or \c .xlf file can be chosen.
977 \o \gui {Recently opened files} \BR shows the TS files that
978 have been opened recently, click one to open it.
979 \o \gui {Save Ctrl+S} \BR saves the current translation source file.
980 \o \gui {Save As...} \BR pops up a save as file dialog so that the
981 current translation source file may be saved with a different
982 name, format and/or put in a different location.
983 \o \gui {Release} \BR create a Qt message QM file with the same base
984 name as the current translation source file. The release manager's
985 command line tool \l lrelease performs the same function on
986 \e all of an application's translation source files.
987 \o \gui {Release As...} \BR pops up a save as file dialog. The
988 filename entered will be a Qt message QM file of the translation
989 based on the current translation source file. The release manager's
990 command line tool \l lrelease performs the same function on
991 \e all of an application's translation source files.
992 \o \gui {Print... Ctrl+P} \BR pops up a print dialog. If you click
993 OK the translation source and the translations will be printed.
994 \o \gui {Exit Ctrl+Q} \BR closes \QL.
995 \endlist
996
997 \o \gui {Edit}
998 \list
999 \o \gui {Undo Ctrl+Z} \BR undoes the last editing action in the
1000 translation pane.
1001 \o \gui {Redo Ctrl+Y} \BR redoes the last editing action in the
1002 translation pane.
1003 \o \gui {Cut Ctrl+X} \BR deletes any highlighted text in the
1004 translation pane and saves a copy to the clipboard.
1005 \o \gui {Copy Ctrl+C} \BR copies the highlighted text in the
1006 translation pane to the clipboard.
1007 \o \gui {Paste Ctrl+V} \BR pastes the clipboard text into the
1008 translation pane.
1009 \omit
1010 \o \gui {Delete} \BR deletes the highlighted text in the
1011 translation pane.
1012 \endomit
1013 \o \gui {Select All Ctrl+A} \BR selects all the text in the
1014 translation pane ready for copying or deleting.
1015 \o \gui {Find... Ctrl+F} \BR pops up the
1016 Find dialog. When the dialog pops up
1017 enter the text to be found and click the \gui {Find Next} button.
1018 Source phrases, translations and comments may be searched.
1019 \o \gui {Find Next F3} \BR finds the next occurrence of the text that
1020 was last entered in the Find dialog.
1021 \o \gui {Search and Translate...} \BR pops up the Search and
1022 Replace Dialog. Use this dialog to translate the same text in multiple items.
1023 \o \gui {Translation File Settings...} \BR let you configure the target
1024 language and the country/region of a translation source file.
1025 \endlist
1026
1027 \o \gui {Translation}
1028 \list
1029 \o \gui {Prev Unfinished Ctrl+K} \BR moves to the nearest previous
1030 unfinished source phrase (unfinished means untranslated or
1031 translated but failed validation).
1032 \o \gui {Next Unfinished Ctrl+L} \BR moves to the next unfinished source
1033 phrase.
1034 \o \gui {Prev Shift+Ctrl+K} \BR moves to the previous source phrase.
1035 \o \gui {Next Shift+Ctrl+L} \BR moves to the next source phrase.
1036 \o \gui {Done \& Next Ctrl+Enter} \BR mark this phrase as 'done'
1037 (translated) and move to the next unfinished source phrase.
1038 \o \gui {Copy from source text Ctrl+B} \BR copies the source text into
1039 the translation.
1040 \endlist
1041
1042 \o \gui {Validation} (See \l{Validation Tests})
1043 \list
1044 \o \gui {Accelerators} \BR toggles validation on or off for Alt
1045 accelerators.
1046 \o \gui {Ending Punctuation} \BR switches validation on or off
1047 for phrase ending punctuation, e.g. ellipsis, exclamation mark,
1048 question mark, etc.
1049 \o \gui {Phrase Matches} \BR sets validation on or off for
1050 matching against translations that are in the current phrase book.
1051 \o \gui {Place Marker Matches} \BR sets validation on or off for
1052 the use of the same place markers in the source and translation.
1053 \endlist
1054
1055 \o \gui {Phrases} (See the section \l {Phrase Books} for details.)
1056 \list
1057
1058 \o \gui {New Phrase Book... Ctrl+N} \BR pops up a save as file
1059 dialog. You must enter a filename to be used for the phrase
1060 book and save the file. Once saved you should open the phrase
1061 book to begin using it.
1062
1063 \o \gui {Open Phrase Book... Ctrl+H} \BR pops up an open file
1064 dialog. Find and choose a phrase book to open.
1065
1066 \o \gui {Close Phrase Book} \BR displays the list of phrase
1067 books currently opened. Clicking on one of the items will
1068 close the phrase book. If the phrase book has been modified, a
1069 dialog box asks whether \QL should save the changes.
1070
1071 \o \gui {Edit Phrase Book...} \BR displays the list of phrase
1072 books currently opened. Clicking on one of the items will open
1073 the \l{Creating and Editing Phrase Books}{Phrase Book Dialog}
1074 where you can add, edit or delete phrases.
1075
1076 \o \gui {Print Phrase Book...} \BR displays the list of phrase
1077 books currently opened. Clicking on one of the items pops up a
1078 print dialog. If you click OK the phrase book will be
1079 printed.
1080
1081 \o \gui {Add to Phrase Book Ctrl+T} \BR Adds the source text
1082 and translation currently shown in the \l{The Translation
1083 Area} {translation area} to a phrase book. If multiple phrase
1084 books are loaded, a dialog box let you specify select one.
1085
1086 \endlist
1087
1088 \o \gui {Tools}
1089 \list
1090
1091 \o \gui {Batch Translation...} \BR Opens a \l{Batch
1092 Translation}{dialog} which let you automatically insert
1093 translations for source texts which are in a phrase book.
1094
1095 \o \gui {Open/Refresh Form Preview F3} \BR Opens the \l{Form
1096 Preview}. This window let you instantly see translations for
1097 forms created with \QD. \endlist
1098
1099 \o \gui {View}
1100 \list
1101
1102 \o \gui {Revert Sorting} \BR puts the items in the \l{Context
1103 Window} {context list} and in the \l{Strings Window} {string
1104 list} into their original order.
1105
1106 \o \gui {Display Guesses} \BR turns the display of phrases and
1107 guesses on or off.
1108
1109 \o \gui {Statistics} \BR toggles the visibility of the
1110 Statistics dialog.
1111
1112 \o \gui {Views} \BR toggles the visibility of the \l{Context
1113 Window}, \l{Strings Window}, \l{Phrases and Guesses Window},
1114 \l{Warnings Window}, or \l{Sources and Forms Window}.
1115
1116 \o \gui {Toolbars} \BR toggles the visibility of the different
1117 toolbars.
1118
1119 \endlist
1120
1121 \o \gui {Help}
1122 \list
1123 \o \gui {Manual F1} \BR opens this manual.
1124 \o \gui {About Qt Linguist} \BR Shows information about \QL.
1125 \o \gui {About Qt} \BR Shows information about \e{Qt}.
1126 \o \gui {What's This? Shift+F1} \BR Click on one item in the main window
1127 to get additional information about it.
1128 \endlist
1129
1130 \endlist
1131
1132 \section2 The Toolbar
1133
1134 \image linguist-toolbar.png
1135
1136 \list
1137 \o \inlineimage linguist-fileopen.png
1138 \BR
1139 Pops up the open file dialog to open a new translation source TS file.
1140
1141 \o \inlineimage linguist-filesave.png
1142 \BR
1143 Saves the current translation source TS file.
1144
1145 \o \inlineimage linguist-fileprint.png
1146 \BR
1147 Prints the current translation source TS file.
1148
1149 \o \inlineimage linguist-phrasebookopen.png
1150 \BR
1151 Pops up the file open dialog to open a new phrase book \c .qph file.
1152
1153 \o \inlineimage linguist-editundo.png
1154 \BR
1155 Undoes the last editing action in the translation pane.
1156
1157 \o \inlineimage linguist-editredo.png
1158 \BR
1159 Redoes the last editing action in the translation pane.
1160
1161 \o \inlineimage linguist-editcut.png
1162 \BR
1163 Deletes any highlighted text in the translation pane and save a copy to
1164 the clipboard.
1165
1166 \o \inlineimage linguist-editcopy.png
1167 \BR
1168 Copies the highlighted text in the translation pane to the clipboard.
1169
1170 \o \inlineimage linguist-editpaste.png
1171 \BR
1172 Pastes the clipboard text into the translation pane.
1173
1174 \o \inlineimage linguist-editfind.png
1175 \BR
1176 Pops up the Find dialog .
1177
1178 \o \inlineimage linguist-prev.png
1179 \BR
1180 Moves to the previous source phrase.
1181
1182 \o \inlineimage linguist-next.png
1183 \BR
1184 Moves to the next source phrase.
1185
1186 \o \inlineimage linguist-prevunfinished.png
1187 \BR
1188 Moves to the previous unfinished source phrase.
1189
1190 \o \inlineimage linguist-nextunfinished.png
1191 \BR
1192 Moves to the next unfinished source phrase.
1193
1194 \o \inlineimage linguist-doneandnext.png
1195 \BR
1196 Marks the phrase as 'done' (translated) and move to the next
1197 unfinished source phrase.
1198
1199 \o \inlineimage linguist-validateaccelerators.png
1200 \BR
1201 Toggles accelerator validation on and off.
1202
1203 \o \inlineimage linguist-validatepunctuation.png
1204 \BR
1205 Toggles phrase ending punctuation validation on and off.
1206
1207 \o \inlineimage linguist-validatephrases.png
1208 \BR
1209 Toggles phrase book validation on or off.
1210
1211 \o \inlineimage linguist-validateplacemarkers.png
1212 \BR
1213 Toggles place marker validation on or off.
1214
1215 \endlist
1216
1217*/
1218
1219/*!
1220 \page linguist-programmers.html
1221 \title Qt Linguist Manual: Programmers
1222
1223 \contentspage {Qt Linguist Manual}{Contents}
1224 \previouspage Qt Linguist Manual: Translators
1225 \nextpage Qt Linguist Manual: TS File Format
1226
1227 Support for multiple languages is extremely simple in Qt
1228 applications, and adds little overhead to the programmer's workload.
1229
1230 Qt minimizes the performance cost of using translations by
1231 translating the phrases for each window as they are created. In most
1232 applications the main window is created just once. Dialogs are often
1233 created once and then shown and hidden as required. Once the initial
1234 translation has taken place there is no further runtime overhead for
1235 the translated windows. Only those windows that are created,
1236 destroyed and subsequently created will have a translation
1237 performance cost.
1238
1239 Creating applications that can switch language at runtime is possible
1240 with Qt, but requires a certain amount of programmer intervention and
1241 will of course incur some runtime performance cost.
1242
1243 \section1 Making the Application Translation-Aware
1244
1245 Programmers should make their application look for and load the
1246 appropriate translation file and mark user-visible text and Ctrl
1247 keyboard accelerators as targets for translation.
1248
1249 Each piece of text that requires translating requires context to help
1250 the translator identify where in the program the text occurs. In the
1251 case of multiple identical texts that require different translations,
1252 the translator also requires some information to disambiguate the
1253 source texts. Marking text for translation will automatically cause
1254 the class name to be used as basic context information. In some cases
1255 the programmer may be required to add additional information to help
1256 the translator.
1257
1258 \section2 Creating Translation Files
1259
1260 Translation files consist of all the user-visible text and Ctrl key
1261 accelerators in an application and translations of that text.
1262 Translation files are created as follows:
1263
1264 \list 1
1265 \o Run \l lupdate initially to generate the first set of TS
1266 translation source files with all the user-visible text but no
1267 translations.
1268 \o The TS files are given to the translator who adds translations
1269 using \QL. \QL takes care of any changed
1270 or deleted source text.
1271 \o Run \l lupdate to incorporate any new text added to the
1272 application. \l lupdate synchronizes the user-visible text from the
1273 application with the translations; it does not destroy any data.
1274 \o Steps 2 and 3 are repeated as often as necessary.
1275 \o When a release of the application is needed \l lrelease is run to
1276 read the TS files and produce the QM files used by the
1277 application at runtime.
1278 \endlist
1279
1280 For \l lupdate to work successfully, it must know which translation
1281 files to produce. The files are simply listed in the application's \c
1282 .pro Qt project file, for example:
1283
1284 \snippet examples/linguist/arrowpad/arrowpad.pro 1
1285
1286 If your sources contain genuine non-Latin1 strings, \l lupdate needs
1287 to be told about it in the \c .pro file by using, for example,
1288 the following line:
1289
1290 \code
1291 CODECFORTR = UTF-8
1292 \endcode
1293
1294 See the \l lupdate and \l lrelease sections.
1295
1296 \section2 Loading Translations
1297
1298 \snippet examples/linguist/hellotr/main.cpp 1
1299 \snippet examples/linguist/hellotr/main.cpp 3
1300
1301 This is how a simple \c main() function of a Qt application begins.
1302
1303 \snippet examples/linguist/hellotr/main.cpp 1
1304 \snippet examples/linguist/hellotr/main.cpp 4
1305
1306 For a translation-aware application a translator object is created, a
1307 translation is loaded and the translator object installed into the
1308 application.
1309
1310 \snippet examples/linguist/arrowpad/main.cpp 0
1311 \snippet examples/linguist/arrowpad/main.cpp 1
1312
1313 For non-Latin1 strings in the sources you will also need for example:
1314
1315 \code
1316 QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
1317 \endcode
1318
1319 In production applications a more flexible approach, for example,
1320 loading translations according to locale, might be more appropriate. If
1321 the TS files are all named according to a convention such as
1322 \e appname_locale, e.g. \c tt2_fr, \c tt2_de etc, then the
1323 code above will load the current locale's translation at runtime.
1324
1325 If there is no translation file for the current locale the application
1326 will fall back to using the original source text.
1327
1328 Note that if you need to programmatically add translations at
1329 runtime, you can reimplement QTranslator::translate().
1330
1331 \section2 Making the Application Translate User-Visible Strings
1332
1333 User-visible strings are marked as translation targets by wrapping them
1334 in a \c tr() call, for example:
1335
1336 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 6
1337
1338 would become
1339
1340 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 7
1341
1342 All QObject subclasses that use the \c Q_OBJECT macro implement
1343 the \c tr() function.
1344
1345 Although the \c tr() call is normally made directly since it is
1346 usually called as a member function of a QObject subclass, in
1347 other cases an explicit class name can be supplied, for example:
1348
1349 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 8
1350
1351 or
1352
1353 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 9
1354
1355 \section2 Distinguishing Between Identical Translatable Strings
1356
1357 The \l lupdate program automatically provides a \e context for every
1358 source text. This context is the class name of the class that contains
1359 the \c tr() call. This is sufficient in the vast majority of cases.
1360 Sometimes however, the translator will need further information to
1361 uniquely identify a source text; for example, a dialog that contained
1362 two separate frames, each of which contained an "Enabled" option would
1363 need each identified because in some languages the translation would
1364 differ between the two. This is easily achieved using the
1365 two argument form of the \c tr() call, e.g.
1366
1367 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 10
1368
1369 and
1370
1371 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 11
1372
1373 Ctrl key accelerators are also translatable:
1374
1375 \snippet examples/linguist/trollprint/mainwindow.cpp 2
1376
1377 It is strongly recommended that the two argument form of \c tr() is used
1378 for Ctrl key accelerators. The second argument is the only clue the
1379 translator has as to the function performed by the accelerator.
1380
1381 \section2 Helping the Translator with Navigation Information
1382
1383 In large complex applications it may be difficult for the translator to
1384 see where a particular source text comes from. This problem can be
1385 solved by adding a comment using the keyword \e TRANSLATOR which
1386 describes the navigation steps to reach the text in question; e.g.
1387
1388 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 12
1389
1390 These comments are particularly useful for widget classes.
1391
1392 \section2 Handling Plural Forms
1393
1394 Qt includes a \c tr() overload that will make it very easy to
1395 write "plural-aware" internationalized applications. This overload
1396 has the following signature:
1397
1398 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 17
1399
1400 Depending on the value of \c n, the \c tr() function will return a different
1401 translation, with the correct grammatical number for the target language.
1402 Also, any occurrence of \c %n is replaced with \c{n}'s value. For example:
1403
1404 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 18
1405
1406 If a French translation is loaded, this will expand to "0 item
1407 remplac\unicode{233}", "1 item remplac\unicode{233}", "2 items
1408 remplac\unicode{233}s", etc., depending on \c{n}'s value.
1409 And if no translation is loaded, the orignal string is used, with \c %n
1410 replaced with count's value (e.g., "6 item(s) replaced").
1411
1412 To handle plural forms in the native language, you need to load a
1413 translation file for this language, too. \l lupdate has the
1414 \c -pluralonly command line option, which allows the creation of
1415 TS files containing only entries with plural forms.
1416
1417 See the \l{http://doc.qt.nokia.com/qq/}{Qt Quarterly} Article
1418 \l{http://doc.qt.nokia.com/qq/qq19-plurals.html}{Plural Forms in Translations}
1419 for further details on this issue.
1420
1421 \section2 Coping With C++ Namespaces
1422
1423 C++ namespaces and the \c {using namespace} statement can confuse
1424 \l lupdate. It will interpret \c MyClass::tr() as meaning just
1425 that, not as \c MyNamespace::MyClass::tr(), even if \c MyClass is
1426 defined in the \c MyNamespace namespace. Runtime translation of
1427 these strings will fail because of that.
1428
1429 You can work around this limitation by putting a \e TRANSLATOR
1430 comment at the beginning of the source files that use \c
1431 MyClass::tr():
1432
1433 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 13
1434
1435 After the comment, all references to \c MyClass::tr() will be
1436 understood as meaning \c MyNamespace::MyClass::tr().
1437
1438 \section2 Translating Text That is Outside of a QObject Subclass
1439
1440 \section3 Using QCoreApplication::translate()
1441
1442 If the quoted text is not in a member function of a QObject subclass,
1443 use either the tr() function of an appropriate class, or the
1444 QCoreApplication::translate() function directly:
1445
1446 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 14
1447
1448 \section3 Using QT_TR_NOOP() and QT_TRANSLATE_NOOP()
1449
1450 If you need to have translatable text completely outside a function,
1451 there are two macros to help: QT_TR_NOOP() and QT_TRANSLATE_NOOP().
1452 These macros merely mark the text for extraction by \l{lupdate}.
1453 The macros expand to just the text (without the context).
1454
1455 Example of QT_TR_NOOP():
1456 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 15
1457
1458 Example of QT_TRANSLATE_NOOP():
1459 \snippet doc/src/snippets/code/doc_src_linguist-manual.qdoc 16
1460
1461 \section1 Tutorials
1462
1463 Three tutorials are presented:
1464
1465 \list 1
1466 \o \l{linguist/hellotr}{Hello tr()} demonstrates the creation of
1467 a \l QTranslator object. It also shows the simplest use of
1468 the \c tr() function to mark user-visible source text for
1469 translation.
1470
1471 \o \l{linguist/arrowpad}{Arrow Pad} explains how to make the application load the
1472 translation file applicable to the current locale. It also shows the
1473 use of the two-argument form of \c tr() which provides additional
1474 information to the translator.
1475
1476 \o \l{linguist/trollprint}{Troll Print} explains how
1477 identical source texts can be distinguished even when they occur in
1478 the same context. This tutorial also discusses how the translation
1479 tools help minimize the translator's work when an application is
1480 upgraded.
1481 \endlist
1482
1483 These tutorials cover all that you need to know to prepare your Qt
1484 applications for translation.
1485
1486 At the beginning of a project add the translation source files to be
1487 used to the project file and add calls to \l lupdate and \l lrelease to
1488 the makefile.
1489
1490 During the project all the programmer must do is wrap any user-visible
1491 text in \c tr() calls. They should also use the two argument form for
1492 Ctrl key accelerators, or when asked by the translator for the cases
1493 where the same text translates into two different forms in the same
1494 context. The programmer should also include \c TRANSLATION comments to
1495 help the translator navigate the application.
1496*/
1497
1498/*!
1499 \page linguist-ts-file-format.html
1500 \title Qt Linguist Manual: TS File Format
1501
1502 \contentspage {Qt Linguist Manual}{Contents}
1503 \previouspage Qt Linguist Manual: Programmers
1504
1505 The TS file format used by \QL is described by the
1506 \l{http://www.w3.org/TR/1998/REC-xml-19980210}{DTD} presented below,
1507 which we include for your convenience. Be aware that the format
1508 may change in future Qt releases.
1509
1510 \quotefile tools/linguist/shared/ts.dtd
1511
1512*/
Note: See TracBrowser for help on using the repository browser.