source: trunk/doc/src/examples/trollprint.qdoc@ 561

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

trunk: Merged in qt 4.6.1 sources.

File size: 11.9 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
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 qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*!
43 \example linguist/trollprint
44 \title Troll Print Example
45
46 Troll Print is an example application that lets the user choose
47 printer settings. It comes in two versions: English and
48 Portuguese.
49
50 \image linguist-trollprint_10_en.png
51
52 We've included a translation file, \c trollprint_pt.ts, which contains some
53 Portuguese translations for this example.
54
55 We will consider two releases of the same application: Troll Print
56 1.0 and 1.1. We will learn to reuse the translations created for one
57 release in a subsequent release. (In this tutorial, you need to edit
58 some source files. It's probably best to copy all the files to a new
59 temporary directory and work from there.)
60
61 See the \l{Qt Linguist manual} for more information about
62 translating Qt application.
63
64 \section1 Line by Line Walkthrough
65
66 The \c PrintPanel class is defined in \c printpanel.h.
67
68 \snippet examples/linguist/trollprint/printpanel.h 0
69
70 \c PrintPanel is a QWidget. It needs the \c Q_OBJECT macro for \c
71 tr() to work properly.
72
73 The implementation file is \c printpanel.cpp.
74
75 \snippet examples/linguist/trollprint/printpanel.cpp 0
76
77 Some of the code is commented out in Troll Print 1.0; you will
78 uncomment it later, for Troll Print 1.1.
79
80 \snippet examples/linguist/trollprint/printpanel.cpp 1
81 \snippet examples/linguist/trollprint/printpanel.cpp 2
82
83 Notice the two occurrences of \c tr("Enabled") and of \c
84 tr("Disabled") in PrintPanel. Since both "Enabled"s and "Disabled"s
85 appear in the same context \e {Qt Linguist} will only display one
86 occurrence of each and will use the same translations for the
87 duplicates that it doesn't display. Whilst this is a useful
88 timesaver, in some languages, such as Portuguese, the second
89 occurrence requires a separate translation. We will see how \e {Qt
90 Linguist} can be made to display all the occurrences for separate
91 translation shortly.
92
93 The header file for \c MainWindow, \c mainwindow.h, contains no
94 surprises. In the implementation, \c mainwindow.cpp, we have some
95 user-visible source texts that must be marked for translation.
96
97 \snippet examples/linguist/trollprint/mainwindow.cpp 0
98
99 We must translate the window title.
100
101 \snippet examples/linguist/trollprint/mainwindow.cpp 1
102 \snippet examples/linguist/trollprint/mainwindow.cpp 3
103
104 We also need to translate the actions and menus. Note that the
105 two argument form of \c tr() is used for the keyboard
106 accelerator, "Ctrl+Q", since the second argument is the only clue
107 the translator has to indicate what function that accelerator
108 will perform.
109
110 \snippet examples/linguist/trollprint/main.cpp 0
111
112 The \c main() function in \c main.cpp is the same as the one in
113 the \l{linguist/arrowpad}{Arrow Pad} example. In particular, it
114 chooses a translation file based on the current locale.
115
116 \section1 Running Troll Print 1.0 in English and in Portuguese
117
118 We will use the translations in the \c trollprint_pt.ts file that is provided.
119
120 Set the \c LANG environment variable to \c pt, and then run \c
121 trollprint. You should still see the English version. Now run \c
122 lrelease, e.g. \c {lrelease trollprint.pro}, and then run the
123 example again. Now you should see the Portuguese edition (Troll
124 Imprimir 1.0):
125
126 \image linguist-trollprint_10_pt_bad.png
127
128 Whilst the translation has appeared correctly, it is in fact wrong. In
129 good Portuguese, the second occurrence of "Enabled" should be
130 "Ativadas", not "Ativado" and the ending for the second translation of
131 "Disabled" must change similarly too.
132
133 If you open \c trollprint_pt.ts using \e {Qt Linguist}, you will see that
134 there is just one occurrence of "Enabled" and of "Disabled" in the
135 translation source file, even though there are two of each in the
136 source code. This is because \e {Qt Linguist} tries to minimize the
137 translator's work by using the same translation for duplicate source
138 texts. In cases such as this where an identical translation is wrong,
139 the programmer must disambiguate the duplicate occurrences. This is
140 easily achieved by using the two argument form of \c tr().
141
142 We can easily determine which file must be changed because the
143 translator's "context" is in fact the class name for the class where
144 the texts that must be changed appears. In this case the file is \c
145 printpanel.cpp, where there are four lines to change. Add the
146 second argument "two-sided" in the appropriate \c tr() calls to the
147 first pair of radio buttons:
148
149 \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 0
150
151 and add the second argument "colors" in the appropriate \c tr() calls
152 for the second pair of radio buttons:
153
154 \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 1
155
156 Now run \c lupdate and open \c trollprint_pt.ts with \e {Qt Linguist}. You
157 should now see two changes.
158
159 First, the translation source file now contains \e three "Enabled",
160 "Disabled" pairs. The first pair is marked "(obs.)" signifying that they
161 are obsolete. This is because these texts appeared in \c tr() calls that
162 have been replaced by new calls with two arguments. The second pair has
163 "two-sided" as their comment, and the third pair has "colors" as their
164 comment. The comments are shown in the \gui {Source text and comments}
165 area in \e {Qt Linguist}.
166
167 Second, the translation text "Ativado" and "Desativado" have been
168 automatically used as translations for the new "Enabled" and "Disabled"
169 texts, again to minimize the translator's work. Of course in this case
170 these are not correct for the second occurrence of each word, but they
171 provide a good starting point.
172
173 Change the second "Ativado" into "Ativadas" and the second
174 "Desativado" into "Desativadas", then save and quit. Run \c lrelease
175 to obtain an up-to-date binary \c trollprint_pt.qm file, and run Troll Print
176 (or rather Troll Imprimir).
177
178 \image linguist-trollprint_10_pt_good.png
179
180 The second argument to \c tr() calls, called "comments" in \e {Qt
181 Linguist}, distinguish between identical source texts that occur in
182 the same context (class). They are also useful in other cases to give
183 clues to the translator, and in the case of Ctrl key accelerators are
184 the only means of conveying the function performed by the accelerator to
185 the translator.
186
187 An additional way of helping the translator is to provide information on
188 how to navigate to the particular part of the application that contains
189 the source texts they must translate. This helps them see the context
190 in which the translation appears and also helps them to find and test
191 the translations. This can be achieved by using a \c TRANSLATOR comment
192 in the source code:
193
194 \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 2
195
196 Try adding these comments to some source files, particularly to
197 dialog classes, describing the navigation necessary to reach the
198 dialogs. You could also add them to the example files, e.g. \c
199 mainwindow.cpp and \c printpanel.cpp are appropriate files. Run \c
200 lupdate and then start \e {Qt Linguist} and load in \c trollprint_pt.ts.
201 You should see the comments in the \gui {Source text and comments} area
202 as you browse through the list of source texts.
203
204 Sometimes, particularly with large programs, it can be difficult for
205 the translator to find their translations and check that they're
206 correct. Comments that provide good navigation information can save
207 them time:
208
209 \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 3
210
211 \section1 Troll Print 1.1
212
213 We'll now prepare release 1.1 of Troll Print. Start your favorite text
214 editor and follow these steps:
215
216 \list
217 \o Uncomment the two lines that create a QLabel with the text
218 "\<b\>TROLL PRINT\</b\>" in \c printpanel.cpp.
219 \o Word-tidying: Replace "2-sided" by "Two-sided" in \c printpanel.cpp.
220 \o Replace "1.0" with "1.1" everywhere it occurs in \c mainwindow.cpp.
221 \o Update the copyright year to 1999-2000 in \c mainwindow.cpp.
222 \endlist
223
224 (Of course the version number and copyright year would be consts or
225 #defines in a real application.)
226
227 Once finished, run \c lupdate, then open \c trollprint_pt.ts in \e {Qt
228 Linguist}. The following items are of special interest:
229
230 \list
231 \o \c MainWindow
232 \list
233 \o Troll Print 1.0 - marked "(obs.)", obsolete
234 \o About Troll Print 1.0 - marked "(obs.)", obsolete
235 \o Troll Print 1.0. Copyright 1999 Software, Inc. -
236 marked obsolete
237 \o Troll Print 1.1 - automatically translated as
238 "Troll Imprimir 1.1"
239 \o About Troll Print 1.1 - automatically translated as
240 "Troll Imprimir 1.1"
241 \o Troll Print 1.1. Copyright 1999-2000 Software,
242 Inc. - automatically translated as "Troll Imprimir 1.1.
243 Copyright 1999-2000 Software, Inc."
244 \endlist
245 \o \c PrintPanel
246 \list
247 \o 2-sided - marked "(obs.)", obsolete
248 \o \<b\>TROLL PRINT\</b\> - unmarked, i.e. untranslated
249 \o Two-sided - unmarked, i.e. untranslated.
250 \endlist
251 \endlist
252
253 Notice that \c lupdate works hard behind the scenes to make revisions
254 easier, and it's pretty smart with numbers.
255
256 Go over the translations in \c MainWindow and mark these as "done".
257 Translate "\<b\>TROLL PRINT\</b\>" as "\<b\>TROLL IMPRIMIR\</b\>".
258 When you're translating "Two-sided", press the \gui {Guess Again}
259 button to translate "Two-sided", but change the "2" into "Dois".
260
261 Save and quit, then run \c lrelease. The Portuguese version
262 should look like this:
263
264 \image linguist-trollprint_11_pt.png
265
266 Choose \gui{Ajuda|Sobre} (\gui{Help|About}) to see the about box.
267
268 If you choose \gui {Ajuda|Sobre Qt} (\gui {Help|About Qt}), you'll get
269 an English dialog. Oops! Qt itself needs to be translated. See
270 \l{Internationalization with Qt} for details.
271
272 Now set \c LANG=en to get the original English version:
273
274 \image linguist-trollprint_11_en.png
275*/
Note: See TracBrowser for help on using the repository browser.