|
1 /****************************************************************************** |
|
2 * Do not edit this file. It was generated by the translator.py script. |
|
3 * |
|
4 * Copyright (C) 1997-2006 by Dimitri van Heesch. |
|
5 * |
|
6 * Permission to use, copy, modify, and distribute this software and its |
|
7 * documentation under the terms of the GNU General Public License is hereby |
|
8 * granted. No representations are made about the suitability of this software |
|
9 * for any purpose. It is provided "as is" without express or implied warranty. |
|
10 * See the GNU General Public License for more details. |
|
11 * |
|
12 * Documents produced by Doxygen are derivative works derived from the |
|
13 * input used in their production; they are not affected by this license. |
|
14 * |
|
15 * $Id: language.doc 713 2009-12-22 16:03:24Z dimitri $ |
|
16 */ |
|
17 /*! \page langhowto Internationalization |
|
18 |
|
19 <h3>Support for multiple languages</h3> |
|
20 |
|
21 Doxygen has built-in support for multiple languages. This means that the |
|
22 text fragments, generated by doxygen, can be produced in languages other |
|
23 than English (the default). The output language is chosen through the |
|
24 configuration file (with default name and known as Doxyfile). |
|
25 |
|
26 Currently (version 1.6.1), 38 languages |
|
27 are supported (sorted alphabetically): |
|
28 Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese |
|
29 Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, |
|
30 Finnish, French, German, Greek, Hungarian, Indonesian, Italian, |
|
31 Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian, |
|
32 Persian, Polish, Portuguese, Romanian, Russian, Serbian, |
|
33 SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian, |
|
34 and Vietnamese.. |
|
35 |
|
36 The table of information related to the supported languages follows. |
|
37 It is sorted by language alphabetically. The <b>Status</b> column |
|
38 was generated from sources and shows approximately the last version |
|
39 when the translator was updated. |
|
40 |
|
41 \htmlonly |
|
42 <table align="center" cellspacing="0" cellpadding="0" border="0"> |
|
43 <tr bgcolor="#000000"> |
|
44 <td> |
|
45 <table cellspacing="1" cellpadding="2" border="0"> |
|
46 <tr bgcolor="#4040c0"> |
|
47 <td ><b><font size="+1" color="#ffffff"> Language </font></b></td> |
|
48 <td ><b><font size="+1" color="#ffffff"> Maintainer </font></b></td> |
|
49 <td ><b><font size="+1" color="#ffffff"> Contact address </font> |
|
50 <font size="-2" color="#ffffff">(replace the at and dot)</font></b></td> |
|
51 <td ><b><font size="+1" color="#ffffff"> Status </font></b></td> |
|
52 </tr> |
|
53 <!-- table content begin --> |
|
54 |
|
55 <tr bgcolor="#ffffff"> |
|
56 <td>Afrikaans</td> |
|
57 <td>Johan Prinsloo</td> |
|
58 <td>johan at zippysnoek dot com</td> |
|
59 <td>1.6.0</td> |
|
60 </tr> |
|
61 <tr bgcolor="#ffffff"> |
|
62 <td>Arabic</td> |
|
63 <td>Moaz Reyad</td> |
|
64 <td>moazreyad at yahoo dot com</td> |
|
65 <td>1.4.6</td> |
|
66 </tr> |
|
67 <tr bgcolor="#ffffff"> |
|
68 <td>Brazilian Portuguese</td> |
|
69 <td>Fabio "FJTC" Jun Takada Chino</td> |
|
70 <td>jun-chino at uol dot com dot br</td> |
|
71 <td>up-to-date</td> |
|
72 </tr> |
|
73 <tr bgcolor="#ffffff"> |
|
74 <td>Catalan</td> |
|
75 <td>Maximiliano Pin<br/>Albert Mora</td> |
|
76 <td>max.pin at bitroit dot com<br/>amora at iua dot upf dot es</td> |
|
77 <td>1.6.0</td> |
|
78 </tr> |
|
79 <tr bgcolor="#ffffff"> |
|
80 <td>Chinese</td> |
|
81 <td>Li Daobing<br/>Wei Liu</td> |
|
82 <td>lidaobing at gmail dot com<br/>liuwei at asiainfo dot com</td> |
|
83 <td>1.6.0</td> |
|
84 </tr> |
|
85 <tr bgcolor="#ffffff"> |
|
86 <td>Chinese Traditional</td> |
|
87 <td>Daniel YC Lin<br/>Gary Lee</td> |
|
88 <td>dlin.tw at gmail dot com<br/>garywlee at gmail dot com</td> |
|
89 <td>1.6.0</td> |
|
90 </tr> |
|
91 <tr bgcolor="#ffffff"> |
|
92 <td>Croatian</td> |
|
93 <td>Boris Bralo</td> |
|
94 <td>boris.bralo at zg dot htnet dot hr</td> |
|
95 <td>1.6.0</td> |
|
96 </tr> |
|
97 <tr bgcolor="#ffffff"> |
|
98 <td>Czech</td> |
|
99 <td>Petr Přikryl</td> |
|
100 <td>prikrylp at skil dot cz</td> |
|
101 <td>up-to-date</td> |
|
102 </tr> |
|
103 <tr bgcolor="#ffffff"> |
|
104 <td>Danish</td> |
|
105 <td>Erik Søe Sørensen</td> |
|
106 <td>eriksoe+doxygen at daimi dot au dot dk</td> |
|
107 <td>1.5.4</td> |
|
108 </tr> |
|
109 <tr bgcolor="#ffffff"> |
|
110 <td>Dutch</td> |
|
111 <td>Dimitri van Heesch</td> |
|
112 <td>dimitri at stack dot nl</td> |
|
113 <td>up-to-date</td> |
|
114 </tr> |
|
115 <tr bgcolor="#ffffff"> |
|
116 <td>English</td> |
|
117 <td>Dimitri van Heesch</td> |
|
118 <td>dimitri at stack dot nl</td> |
|
119 <td>up-to-date</td> |
|
120 </tr> |
|
121 <tr bgcolor="#ffffff"> |
|
122 <td>Esperanto</td> |
|
123 <td>Ander Martinez</td> |
|
124 <td>dwarfnauko at gmail dot com</td> |
|
125 <td>1.6.0</td> |
|
126 </tr> |
|
127 <tr bgcolor="#ffffff"> |
|
128 <td>Finnish</td> |
|
129 <td>Antti Laine</td> |
|
130 <td>antti.a.laine at tut dot fi</td> |
|
131 <td>1.6.0</td> |
|
132 </tr> |
|
133 <tr bgcolor="#ffffff"> |
|
134 <td>French</td> |
|
135 <td>Xavier Outhier</td> |
|
136 <td>xouthier at yahoo dot fr</td> |
|
137 <td>up-to-date</td> |
|
138 </tr> |
|
139 <tr bgcolor="#ffffff"> |
|
140 <td>German</td> |
|
141 <td>Jens Seidel</td> |
|
142 <td>jensseidel at users dot sf dot net</td> |
|
143 <td>1.6.0</td> |
|
144 </tr> |
|
145 <tr bgcolor="#ffffff"> |
|
146 <td>Greek</td> |
|
147 <td>Paul Gessos</td> |
|
148 <td>nickreserved at yahoo dot com</td> |
|
149 <td>1.5.4</td> |
|
150 </tr> |
|
151 <tr bgcolor="#ffffff"> |
|
152 <td>Hungarian</td> |
|
153 <td>Ákos Kiss<br/>Földvári György</td> |
|
154 <td>akiss at users dot sourceforge dot net<br/>foldvari lost at cyberspace</td> |
|
155 <td>1.4.6</td> |
|
156 </tr> |
|
157 <tr bgcolor="#ffffff"> |
|
158 <td>Indonesian</td> |
|
159 <td>Hendy Irawan</td> |
|
160 <td>ceefour at gauldong dot net</td> |
|
161 <td>1.4.6</td> |
|
162 </tr> |
|
163 <tr bgcolor="#ffffff"> |
|
164 <td>Italian</td> |
|
165 <td>Alessandro Falappa<br/>Ahmed Aldo Faisal</td> |
|
166 <td>alessandro at falappa dot net<br/>aaf23 at cam dot ac dot uk</td> |
|
167 <td>1.6.0</td> |
|
168 </tr> |
|
169 <tr bgcolor="#ffffff"> |
|
170 <td>Japanese</td> |
|
171 <td>Hiroki Iseri<br/>Ryunosuke Satoh<br/>Kenji Nagamatsu<br/>Iwasa Kazmi</td> |
|
172 <td>goyoki at gmail dot com<br/>sun594 at hotmail dot com<br/>naga at joyful dot club dot ne dot jp<br/>iwasa at cosmo-system dot jp</td> |
|
173 <td>1.6.0</td> |
|
174 </tr> |
|
175 <tr bgcolor="#ffffff"> |
|
176 <td>JapaneseEn</td> |
|
177 <td>see the Japanese language</td> |
|
178 <td> </td> |
|
179 <td>English based</td> |
|
180 </tr> |
|
181 <tr bgcolor="#ffffff"> |
|
182 <td>Korean</td> |
|
183 <td>Kim Taedong<br/>SooYoung Jung<br/>Richard Kim</td> |
|
184 <td>fly1004 at gmail dot com<br/>jung5000 at gmail dot com<br/>ryk at dspwiz dot com</td> |
|
185 <td>up-to-date</td> |
|
186 </tr> |
|
187 <tr bgcolor="#ffffff"> |
|
188 <td>KoreanEn</td> |
|
189 <td>see the Korean language</td> |
|
190 <td> </td> |
|
191 <td>English based</td> |
|
192 </tr> |
|
193 <tr bgcolor="#ffffff"> |
|
194 <td>Lithuanian</td> |
|
195 <td>Tomas Simonaitis<br/>Mindaugas Radzius<br/>Aidas Berukstis</td> |
|
196 <td>haden at homelan dot lt<br/>mindaugasradzius at takas dot lt<br/>aidasber at takas dot lt</td> |
|
197 <td>1.4.6</td> |
|
198 </tr> |
|
199 <tr bgcolor="#ffffff"> |
|
200 <td>Macedonian</td> |
|
201 <td>Slave Jovanovski</td> |
|
202 <td>slavejovanovski at yahoo dot com</td> |
|
203 <td>1.6.0</td> |
|
204 </tr> |
|
205 <tr bgcolor="#ffffff"> |
|
206 <td>Norwegian</td> |
|
207 <td>Lars Erik Jordet</td> |
|
208 <td>lejordet at gmail dot com</td> |
|
209 <td>1.4.6</td> |
|
210 </tr> |
|
211 <tr bgcolor="#ffffff"> |
|
212 <td>Persian</td> |
|
213 <td>Ali Nadalizadeh</td> |
|
214 <td>nadalizadeh at gmail dot com</td> |
|
215 <td>1.6.0</td> |
|
216 </tr> |
|
217 <tr bgcolor="#ffffff"> |
|
218 <td>Polish</td> |
|
219 <td>Piotr Kaminski<br/>Grzegorz Kowal<br/>Krzysztof Kral</td> |
|
220 <td>Piotr.Kaminski at ctm dot gdynia dot pl<br/>g_kowal at poczta dot onet dot pl<br/>krzysztof.kral at gmail dot com</td> |
|
221 <td>up-to-date</td> |
|
222 </tr> |
|
223 <tr bgcolor="#ffffff"> |
|
224 <td>Portuguese</td> |
|
225 <td>Rui Godinho Lopes</td> |
|
226 <td>ruiglopes at yahoo dot com</td> |
|
227 <td>1.3.3</td> |
|
228 </tr> |
|
229 <tr bgcolor="#ffffff"> |
|
230 <td>Romanian</td> |
|
231 <td>Ionut Dumitrascu<br/>Alexandru Iosup</td> |
|
232 <td>reddumy at yahoo dot com<br/>aiosup at yahoo dot com</td> |
|
233 <td>1.6.0</td> |
|
234 </tr> |
|
235 <tr bgcolor="#ffffff"> |
|
236 <td>Russian</td> |
|
237 <td>Alexandr Chelpanov</td> |
|
238 <td>cav at cryptopro dot ru</td> |
|
239 <td>1.6.0</td> |
|
240 </tr> |
|
241 <tr bgcolor="#ffffff"> |
|
242 <td>Serbian</td> |
|
243 <td>Dejan Milosavljevic</td> |
|
244 <td>dmilos at email dot com</td> |
|
245 <td>1.6.0</td> |
|
246 </tr> |
|
247 <tr bgcolor="#ffffff"> |
|
248 <td>SerbianCyrilic</td> |
|
249 <td>Nedeljko Stefanovic</td> |
|
250 <td>stenedjo at yahoo dot com</td> |
|
251 <td>1.6.0</td> |
|
252 </tr> |
|
253 <tr bgcolor="#ffffff"> |
|
254 <td>Slovak</td> |
|
255 <td>Stanislav Kudláč</td> |
|
256 <td>skudlac at pobox dot sk</td> |
|
257 <td>1.2.18</td> |
|
258 </tr> |
|
259 <tr bgcolor="#ffffff"> |
|
260 <td>Slovene</td> |
|
261 <td>Matjaž Ostroveršnik</td> |
|
262 <td>matjaz.ostroversnik at ostri dot org</td> |
|
263 <td>1.4.6</td> |
|
264 </tr> |
|
265 <tr bgcolor="#ffffff"> |
|
266 <td>Spanish</td> |
|
267 <td>Bartomeu<br/>Francisco Oltra Thennet<br/>David Vaquero</td> |
|
268 <td>bartomeu at loteria3cornella dot com<br/>foltra at puc dot cl<br/>david at grupoikusnet dot com</td> |
|
269 <td>1.6.0</td> |
|
270 </tr> |
|
271 <tr bgcolor="#ffffff"> |
|
272 <td>Swedish</td> |
|
273 <td>Mikael Hallin</td> |
|
274 <td>mikaelhallin at yahoo dot se</td> |
|
275 <td>1.6.0</td> |
|
276 </tr> |
|
277 <tr bgcolor="#ffffff"> |
|
278 <td>Turkish</td> |
|
279 <td>Emin Ilker Cetinbas</td> |
|
280 <td>niw3 at yahoo dot com</td> |
|
281 <td>1.6.0</td> |
|
282 </tr> |
|
283 <tr bgcolor="#ffffff"> |
|
284 <td>Ukrainian</td> |
|
285 <td>Olexij Tkatchenko</td> |
|
286 <td>olexij.tkatchenko at parcs dot de</td> |
|
287 <td>1.4.1</td> |
|
288 </tr> |
|
289 <tr bgcolor="#ffffff"> |
|
290 <td>Vietnamese</td> |
|
291 <td>Dang Minh Tuan</td> |
|
292 <td>tuanvietkey at gmail dot com</td> |
|
293 <td>1.6.0</td> |
|
294 </tr> |
|
295 <!-- table content end --> |
|
296 </table> |
|
297 </td> |
|
298 </tr> |
|
299 </table> |
|
300 \endhtmlonly |
|
301 |
|
302 |
|
303 \latexonly |
|
304 \begin{tabular}{|l|l|l|l|} |
|
305 \hline |
|
306 {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ |
|
307 \hline |
|
308 |
|
309 \hline |
|
310 Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.6.0 \\ |
|
311 \hline |
|
312 Arabic & Moaz Reyad & {\tt\tiny moazreyad@yahoo.com} & 1.4.6 \\ |
|
313 \hline |
|
314 Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\ |
|
315 \hline |
|
316 Catalan & Maximiliano Pin & {\tt\tiny max.pin@bitroit.com} & 1.6.0 \\ |
|
317 ~ & Albert Mora & {\tt\tiny amora@iua.upf.es} & ~ \\ |
|
318 \hline |
|
319 Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.6.0 \\ |
|
320 ~ & Wei Liu & {\tt\tiny liuwei@asiainfo.com} & ~ \\ |
|
321 \hline |
|
322 Chinese Traditional & Daniel YC Lin & {\tt\tiny dlin.tw@gmail.com} & 1.6.0 \\ |
|
323 ~ & Gary Lee & {\tt\tiny garywlee@gmail.com} & ~ \\ |
|
324 \hline |
|
325 Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & 1.6.0 \\ |
|
326 \hline |
|
327 Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & up-to-date \\ |
|
328 \hline |
|
329 Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.5.4 \\ |
|
330 \hline |
|
331 Dutch & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\ |
|
332 \hline |
|
333 English & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\ |
|
334 \hline |
|
335 Esperanto & Ander Martinez & {\tt\tiny dwarfnauko@gmail.com} & 1.6.0 \\ |
|
336 \hline |
|
337 Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & 1.6.0 \\ |
|
338 \hline |
|
339 French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & up-to-date \\ |
|
340 \hline |
|
341 German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.6.0 \\ |
|
342 \hline |
|
343 Greek & Paul Gessos & {\tt\tiny nickreserved@yahoo.com} & 1.5.4 \\ |
|
344 \hline |
|
345 Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.6 \\ |
|
346 ~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\ |
|
347 \hline |
|
348 Indonesian & Hendy Irawan & {\tt\tiny ceefour@gauldong.net} & 1.4.6 \\ |
|
349 \hline |
|
350 Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & 1.6.0 \\ |
|
351 ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\ |
|
352 \hline |
|
353 Japanese & Hiroki Iseri & {\tt\tiny goyoki@gmail.com} & 1.6.0 \\ |
|
354 ~ & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & ~ \\ |
|
355 ~ & Kenji Nagamatsu & {\tt\tiny naga@joyful.club.ne.jp} & ~ \\ |
|
356 ~ & Iwasa Kazmi & {\tt\tiny iwasa@cosmo-system.jp} & ~ \\ |
|
357 \hline |
|
358 JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\ |
|
359 \hline |
|
360 Korean & Kim Taedong & {\tt\tiny fly1004@gmail.com} & up-to-date \\ |
|
361 ~ & SooYoung Jung & {\tt\tiny jung5000@gmail.com} & ~ \\ |
|
362 ~ & Richard Kim & {\tt\tiny ryk@dspwiz.com} & ~ \\ |
|
363 \hline |
|
364 KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\ |
|
365 \hline |
|
366 Lithuanian & Tomas Simonaitis & {\tt\tiny haden@homelan.lt} & 1.4.6 \\ |
|
367 ~ & Mindaugas Radzius & {\tt\tiny mindaugasradzius@takas.lt} & ~ \\ |
|
368 ~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\ |
|
369 \hline |
|
370 Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski@yahoo.com} & 1.6.0 \\ |
|
371 \hline |
|
372 Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.4.6 \\ |
|
373 \hline |
|
374 Persian & Ali Nadalizadeh & {\tt\tiny nadalizadeh@gmail.com} & 1.6.0 \\ |
|
375 \hline |
|
376 Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\ |
|
377 ~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\ |
|
378 ~ & Krzysztof Kral & {\tt\tiny krzysztof.kral@gmail.com} & ~ \\ |
|
379 \hline |
|
380 Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\ |
|
381 \hline |
|
382 Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & 1.6.0 \\ |
|
383 ~ & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & ~ \\ |
|
384 \hline |
|
385 Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.6.0 \\ |
|
386 \hline |
|
387 Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.6.0 \\ |
|
388 \hline |
|
389 SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo@yahoo.com} & 1.6.0 \\ |
|
390 \hline |
|
391 Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\ |
|
392 \hline |
|
393 Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ostri.org} & 1.4.6 \\ |
|
394 \hline |
|
395 Spanish & Bartomeu & {\tt\tiny bartomeu@loteria3cornella.com} & 1.6.0 \\ |
|
396 ~ & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & ~ \\ |
|
397 ~ & David Vaquero & {\tt\tiny david@grupoikusnet.com} & ~ \\ |
|
398 \hline |
|
399 Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.6.0 \\ |
|
400 \hline |
|
401 Turkish & Emin Ilker Cetinbas & {\tt\tiny niw3@yahoo.com} & 1.6.0 \\ |
|
402 \hline |
|
403 Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.4.1 \\ |
|
404 \hline |
|
405 Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey@gmail.com} & 1.6.0 \\ |
|
406 \hline |
|
407 \end{tabular} |
|
408 \endlatexonly |
|
409 |
|
410 |
|
411 Most people on the list have indicated that they were also busy |
|
412 doing other things, so if you want to help to speed things up please |
|
413 let them (or me) know. |
|
414 |
|
415 If you want to add support for a language that is not yet listed |
|
416 please read the next section. |
|
417 |
|
418 |
|
419 <h3>Adding a new language to doxygen</h3> |
|
420 |
|
421 This short HOWTO explains how to add support for the new language to Doxygen: |
|
422 |
|
423 Just follow these steps: |
|
424 <ol> |
|
425 <li>Tell me for which language you want to add support. If no one else |
|
426 is already working on support for that language, you will be |
|
427 assigned as the maintainer for the language. |
|
428 <li>Create a copy of translator_en.h and name it |
|
429 translator_\<your_2_letter_country_code\>.h |
|
430 I'll use xx in the rest of this document. |
|
431 <li>Add definition of the symbol for your language in the configure |
|
432 at two places in the script: |
|
433 <ol> |
|
434 <li>After the <code>f_langs=</code> is statement, in lower case. |
|
435 <li>In the string that following <code>\@allowed=</code> in upper case. |
|
436 </ol> |
|
437 The rerun the configure script such that is generates src/lang_cfg.h. |
|
438 This file should now contain a \#define for your language code. |
|
439 <li>Edit language.cpp: |
|
440 Add a |
|
441 \verbatim |
|
442 #ifdef LANG_xx |
|
443 #include<translator_xx.h> |
|
444 #endif |
|
445 \endverbatim |
|
446 Remember to use the same symbol LANG_xx that you added to \c lang_cfg.h. |
|
447 I.e., the \c xx should be capital letters that identify your language. |
|
448 On the other hand, the \c xx inside your \c translator_xx.h should use |
|
449 lower case. |
|
450 <p>Now, in <code>setTranslator()</code> add |
|
451 \verbatim |
|
452 #ifdef LANG_xx |
|
453 else if (L_EQUAL("your_language_name")) |
|
454 { |
|
455 theTranslator = new TranslatorYourLanguage; |
|
456 } |
|
457 #endif |
|
458 \endverbatim |
|
459 after the <code>if { ... }</code>. I.e., it must be placed after the code |
|
460 for creating the English translator at the beginning, and before the |
|
461 <code>else { ... }</code> part that creates the translator for the |
|
462 default language (English again). |
|
463 <li>Edit libdoxygen.pro.in and add \c translator_xx.h to |
|
464 the \c HEADERS line. |
|
465 <li>Edit <code>translator_xx.h</code>: |
|
466 <ul> |
|
467 <li>Rename <code>TRANSLATOR_EN_H</code> to <code>TRANSLATOR_XX_H</code> |
|
468 twice (i.e. in the \c \#ifndef and \c \#define preprocessor commands at |
|
469 the beginning of the file). |
|
470 <li>Rename TranslatorEnglish to TranslatorYourLanguage |
|
471 <li>In the member <code>idLanguage()</code> change "english" into the |
|
472 name of your language (use lower case characters only). Depending |
|
473 on the language you may also wish to change the member functions |
|
474 latexLanguageSupportCommand(), idLanguageCharset() and others |
|
475 (you will recognize them when you start the work). |
|
476 <li>Edit all the strings that are returned by the member functions that |
|
477 start with tr. |
|
478 Try to match punctuation and capitals! |
|
479 To enter special characters (with accents) you can: |
|
480 <ul> |
|
481 <li> Enter them directly if your keyboard supports that and you are |
|
482 using a Latin-1 font. Doxygen will translate the |
|
483 characters to proper \f$\mbox{\LaTeX}\f$ and leave the |
|
484 HTML and man output for what it is (which is fine, if |
|
485 idLanguageCharset() is set correctly). |
|
486 <li> Use html codes like \ä for an a with an umlaut (i.e. ä). |
|
487 See the HTML specification for the codes. |
|
488 </ul> |
|
489 </ul> |
|
490 <li>Run configure and make again from the root of the distribution, |
|
491 in order to regenerated the Makefiles. |
|
492 <li>Now you can use <code>OUTPUT_LANGUAGE = your_language_name</code> |
|
493 in the config file to generate output in your language. |
|
494 <li>Send <code>translator_xx.h</code> to me so I can add it to doxygen. |
|
495 Send also your name and e-mail address to be included in the |
|
496 \c maintainers.txt list. |
|
497 </ol> |
|
498 |
|
499 |
|
500 <h3>Maintaining a language</h3> |
|
501 |
|
502 New versions of doxygen may use new translated sentences. In such |
|
503 situation, the \c Translator class requires implementation of new |
|
504 methods -- its interface changes. Of course, the English |
|
505 sentences need to be translated to the other languages. At least, |
|
506 new methods have to be implemented by the language-related |
|
507 translator class; otherwise, doxygen wouldn't even compile. Waiting |
|
508 until all language maintainers have translated the new sentences and |
|
509 sent the results would not be very practical. The following text |
|
510 describes the usage of translator adapters to solve the problem. |
|
511 |
|
512 <b>The role of Translator Adapters.</b> |
|
513 Whenever the \c Translator class interface changes in the new |
|
514 release, the new class \c TranslatorAdapter_x_y_z is added to the \c |
|
515 translator_adapter.h file (here x, y, and z are numbers that |
|
516 correspond to the current official version of doxygen). All |
|
517 translators that previously derived from the \c Translator class now |
|
518 derive from this adapter class. |
|
519 |
|
520 The \c TranslatorAdapter_x_y_z class implements the new, required |
|
521 methods. If the new method replaces some similar but obsolete |
|
522 method(s) (e.g. if the number of arguments changed and/or the |
|
523 functionality of the older method was changed or enriched), the \c |
|
524 TranslatorAdapter_x_y_z class may use the obsolete method to get the |
|
525 result which is as close as possible to the older result in the |
|
526 target language. If it is not possible, the result (the default |
|
527 translation) is obtained using the English translator, which is (by |
|
528 definition) always up-to-date. |
|
529 |
|
530 <b>For example,</b> when the new \c trFile() method with |
|
531 parameters (to determine the capitalization of the first letter and |
|
532 the singular/plural form) was introduced to replace the older method |
|
533 \c trFiles() without arguments, the following code appeared in one |
|
534 of the translator adapter classes: |
|
535 |
|
536 \verbatim |
|
537 /*! This is the default implementation of the obsolete method |
|
538 * used in the documentation of a group before the list of |
|
539 * links to documented files. This is possibly localized. |
|
540 */ |
|
541 virtual QCString trFiles() |
|
542 { return "Files"; } |
|
543 |
|
544 /*! This is the localized implementation of newer equivalent |
|
545 * using the obsolete method trFiles(). |
|
546 */ |
|
547 virtual QCString trFile(bool first_capital, bool singular) |
|
548 { |
|
549 if (first_capital && !singular) |
|
550 return trFiles(); // possibly localized, obsolete method |
|
551 else |
|
552 return english.trFile(first_capital, singular); |
|
553 } |
|
554 \endverbatim |
|
555 |
|
556 The \c trFiles() is not present in the \c TranslatorEnglish class, |
|
557 because it was removed as obsolete. However, it was used until now |
|
558 and its call was replaced by |
|
559 |
|
560 \verbatim |
|
561 trFile(true, false) |
|
562 \endverbatim |
|
563 |
|
564 in the doxygen source files. Probably, many language translators |
|
565 implemented the obsolete method, so it perfectly makes sense to use |
|
566 the same language dependent result in those cases. The \c |
|
567 TranslatorEnglish does not implement the old method. It derives |
|
568 from the abstract \c Translator class. On the other hand, the old |
|
569 translator for a different language does not implement the new \c |
|
570 trFile() method. Because of that it is derived from another base |
|
571 class -- \c TranslatorAdapter_x_y_z. The \c TranslatorAdapter_x_y_z |
|
572 class have to implement the new, required \c trFile() method. |
|
573 However, the translator adapter would not be compiled if the \c |
|
574 trFiles() method was not implemented. This is the reason for |
|
575 implementing the old method in the translator adapter class (using |
|
576 the same code, that was removed from the TranslatorEnglish). |
|
577 |
|
578 The simplest way would be to pass the arguments to the English |
|
579 translator and to return its result. Instead, the adapter uses the |
|
580 old \c trFiles() in one special case -- when the new |
|
581 <code>trFile(true, false)</code> is called. This is the |
|
582 mostly used case at the time of introducing the new method -- see |
|
583 above. While this may look too complicated, the technique allows |
|
584 the developers of the core sources to change the Translator |
|
585 interface, while the users may not even notice the change. Of |
|
586 course, when the new \c trFile() is used with different arguments, |
|
587 the English result is returned and it will be noticed by non English |
|
588 users. Here the maintainer of the language translator should |
|
589 implement at least that one particular method. |
|
590 |
|
591 <b>What says the base class of a language translator?</b> |
|
592 If the language translator class inherits from any adapter class the |
|
593 maintenance is needed. In such case, the language translator is not |
|
594 considered up-to-date. On the other hand, if the language |
|
595 translator derives directly from the abstract class \c Translator, the |
|
596 language translator is up-to-date. |
|
597 |
|
598 The translator adapter classes are chained so that the older |
|
599 translator adapter class uses the one-step-newer translator adapter |
|
600 as the base class. The newer adapter does less \e adapting work |
|
601 than the older one. The oldest adapter class derives (indirectly) |
|
602 from all of the adapter classes. The name of the adapter class is |
|
603 chosen so that its suffix is derived from the previous official |
|
604 version of doxygen that did not need the adapter. This way, one can |
|
605 say approximately, when the language translator class was last |
|
606 updated -- see details below. |
|
607 |
|
608 The newest translator adapter derives from the abstract \c |
|
609 TranslatorAdapterBase class that derives directly from the abstract |
|
610 \c Translator class. It adds only the private English-translator |
|
611 member for easy implementation of the default translation inside the |
|
612 adapter classes, and it also enforces implementation of one method |
|
613 for noticing the user that the language translation is not up-to-date |
|
614 (because of that some sentences in the generated files may appear in |
|
615 English). |
|
616 |
|
617 Once the oldest adapter class is not used by any of the language |
|
618 translators, it can be removed from the doxygen project. The |
|
619 maintainers should try to reach the state with the minimal number of |
|
620 translator adapter classes. |
|
621 |
|
622 <b>To simplify the maintenance of the language translator classes</b> |
|
623 for the supported languages, the \c translator.py Python |
|
624 script was developed (located in \c doxygen/doc directory). |
|
625 It extracts the important information about obsolete and |
|
626 new methods from the source files for each of the languages. |
|
627 The information is stored in the <em>translator report</em> ASCII file |
|
628 (translator_report.txt). |
|
629 |
|
630 \htmlonly If you compiled this documentation |
|
631 from sources and if you have also doxygen sources available the |
|
632 link <a href="../doc/translator_report.txt" |
|
633 ><code>doxygen/doc/translator_report.txt</code></a> should be valid.\endhtmlonly |
|
634 |
|
635 Looking at the base class of the language translator, the script |
|
636 guesses also the status of the translator -- see the last column of |
|
637 the table with languages above. The \c translator.py is called |
|
638 automatically when the doxygen documentation is generated. You can |
|
639 also run the script manualy whenever you feel that it can help you. |
|
640 Of course, you are not forced to use the results of the script. You |
|
641 can find the same information by looking at the adapter class and |
|
642 its base classes. |
|
643 |
|
644 <b>How should I update my language translator?</b> Firstly, you |
|
645 should be the language maintainer, or you should let him/her know |
|
646 about the changes. The following text was written for the language |
|
647 maintainers as the primary audience. |
|
648 |
|
649 There are several approaches to be taken when updating your |
|
650 language. If you are not extremely busy, you should always chose |
|
651 the most radical one. When the update takes much more time than you |
|
652 expected, you can always decide use some suitable translator adapter to |
|
653 finish the changes later and still make your translator working. |
|
654 |
|
655 <b>The most radical way of updating the language translator</b> is |
|
656 to make your translator class derive directly |
|
657 from the abstract class \c Translator and provide translations for the |
|
658 methods that are required to be implemented -- the compiler will |
|
659 tell you if you forgot to implement some of them. If you are in |
|
660 doubt, have a look at the \c TranslatorEnglish class to recognize the |
|
661 purpose of the implemented method. Looking at the previously used |
|
662 adapter class may help you sometimes, but it can also be misleading |
|
663 because the adapter classes do implement also the obsolete methods |
|
664 (see the previous \c trFiles() example). |
|
665 |
|
666 In other words, the up-to-date language translators do not need the |
|
667 \c TranslatorAdapter_x_y_z classes at all, and you do not need to |
|
668 implement anything else than the methods required by the Translator |
|
669 class (i.e. the pure virtual methods of the \c Translator -- they |
|
670 end with <code>=0;</code>). |
|
671 |
|
672 If everything compiles fine, try to run \c translator.py, and have a |
|
673 look at the translator report (ASCII file) at the \c doxygen/doc |
|
674 directory. Even if your translator is marked as up-to-date, there |
|
675 still may be some remarks related to your souce code. Namely, the |
|
676 obsolete methods--that are not used at all--may be listed in the |
|
677 section for your language. Simply, remove their code (and run the \c |
|
678 translator.py again). Also, you will be informed when you forgot to |
|
679 change the base class of your translator class to some newer adapter |
|
680 class or directly to the Translator class. |
|
681 |
|
682 <b>If you do not have time to finish all the updates</b> you should |
|
683 still start with <em>the most radical approach</em> as described |
|
684 above. You can always change the base class to the translator |
|
685 adapter class that implements all of the not-yet-implemented methods. |
|
686 |
|
687 <b>If you prefer to update your translator gradually</b>, have a look |
|
688 at \c TranslatorEnglish (the \c translator_en.h file). Inside, you |
|
689 will find the comments like <code>new since 1.2.4</code> that separate |
|
690 always a number of methods that were implemented in the stated |
|
691 version. Do implement the group of methods that are placed below the |
|
692 comment that uses the same version numbers as your translator adapter |
|
693 class. (For example, your translator class have to use the \c |
|
694 TranslatorAdapter_1_2_4, if it does not implement the methods below |
|
695 the comment <code>new since 1.2.4</code>. When you implement them, |
|
696 your class should use newer translator adapter. |
|
697 |
|
698 Run the \c translator.py script occasionaly and give it your \c xx |
|
699 identification (from \c translator_xx.h) to create the translator |
|
700 report shorter (also produced faster) -- it will contain only the |
|
701 information related to your translator. Once you reach the state when |
|
702 the base class should be changed to some newer adapter, you will see |
|
703 the note in the translator report. |
|
704 |
|
705 Warning: Don't forget to compile Doxygen to discover, whether it is |
|
706 compilable. The \c translator.py does not check if everything is |
|
707 correct with respect to the compiler. Because of that, it may lie |
|
708 sometimes about the necessary base class. |
|
709 |
|
710 <b>The most obsolete language translators</b> would lead to |
|
711 implementation of too complicated adapters. Because of that, doxygen |
|
712 developers may decide to derive such translators from the \c |
|
713 TranslatorEnglish class, which is by definition always up-to-date. |
|
714 |
|
715 When doing so, all the missing methods will be replaced by the |
|
716 English translation. This means that not-implemented methods will |
|
717 always return the English result. Such translators are marked using |
|
718 word \c obsolete. You should read it <b>really obsolete</b>. No |
|
719 guess about the last update can be done. |
|
720 |
|
721 Often, it is possible to construct better result from the obsolete |
|
722 methods. Because of that, the translator adapter classes should be |
|
723 used if possible. On the other hand, implementation of adapters for |
|
724 really obsolete translators brings too much maintenance and |
|
725 run-time overhead. |
|
726 |
|
727 */ |
|
728 |