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

Last change on this file since 569 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

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