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