|   <chapter id="i18n"> | 
 |     <title>Internationalization</title> | 
 |  | 
 |     <sect1 id="adding-languages"> | 
 |       <title>Adding New Languages</title> | 
 |  | 
 |       <para> | 
 |         written by Morten Welinder, January 1996. | 
 |       </para> | 
 |  | 
 |       <itemizedlist> | 
 |         <listitem> | 
 |           <para>Thereafter revised Februari 1999 by Klaas van Gend</para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para>Revised again May 23, 1999, Klaas van Gend</para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para>Updated May 26, 2000, Zoran Dzelajlija</para> | 
 |         </listitem> | 
 |       </itemizedlist> | 
 |  | 
 |       <para> | 
 |         (Extracted from <filename>wine/documentation/languages</filename>) | 
 |       </para> | 
 |  | 
 |       <para> | 
 |         This file documents the necessary procedure for adding a new | 
 |         language to the list of languages that Wine can display system | 
 |         menus and forms in. Currently at least the following languages | 
 |         are still missing: | 
 |         <simplelist columns="5" type="horiz"> | 
 |           <member>Bulgarian</member> | 
 |           <member>Chinese</member> | 
 |           <member>Greek</member> | 
 |           <member>Icelandic</member> | 
 |           <member>Japanese</member> | 
 |           <member>Romanian</member> | 
 |           <member>Croatian</member> | 
 |           <member>Slovak</member> | 
 |           <member>Turkish</member> | 
 |           <member>Slovanian</member> | 
 |         </simplelist> | 
 |       </para> | 
 |  | 
 |       <note> | 
 |         <para> | 
 |           <emphasis>I hope I got all the places where changes are | 
 |             needed.  If you see any place missing from the list, | 
 |             submit a patch to this file please. Also note that | 
 |             re-organization of the source code might change the list of | 
 |             places.</emphasis> | 
 |         </para> | 
 |       </note> | 
 |  | 
 |       <para> | 
 |         To add a new language you need to be able to translate the | 
 |         relatively few texts, of course.  You will need very little | 
 |         knowledge of programming, so you have almost no excuses for | 
 |         not adding your language, right?  We should easily be able to | 
 |         support 20 languages within a few months, get going!  Apart | 
 |         from re-compilation it'll take you about an hour or two. | 
 |       </para> | 
 |       <para> | 
 |         To add a new language to the list of languages that Wine can | 
 |         handle you must... | 
 |       </para> | 
 |  | 
 |       <orderedlist> | 
 |         <listitem> | 
 |           <para>Find the language ID in | 
 |             <filename>include/winnls.h</filename>.</para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Look in <filename>ole/ole2nls.c</filename> if your | 
 |             language is already incorporated in the <varname>static | 
 |               const struct NLS_langlocale</varname>. If not: find the | 
 |             appropriate entries in | 
 |             <filename>include/winnls.h</filename> and add them to the | 
 |             list. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Edit the parameters defined in | 
 |             <filename>ole/nls/*.nls</filename> to fit your local | 
 |             habits and language. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Edit <filename>documentation/wine.man.in</filename> | 
 |             (search for <parameter>-language</parameter>) to show the | 
 |             new language abbreviation. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Edit <filename>misc/main.c</filename> variable | 
 |             <varname>Languages</varname> to contain the new language | 
 |             abbreviation and language ID.  Also edit | 
 |             <structname>struct option_table</structname> in | 
 |             <filename>misc/options.c</filename> to show the new | 
 |             abbreviation. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Edit <filename>include/options.h</filename> | 
 |             <type>enum</type> <varname>WINE_LANGUAGE</varname> to have | 
 |             a member called <literal>LANG_XX</literal> where | 
 |             <literal>XX</literal> is the new abbreviation. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Create a new file | 
 |             <filename>dlls/commdlg/cdlg_XX.rc</filename> (where | 
 |             <literal>XX</literal> is your language  abbreviation) | 
 |             containing all menus. Your best bet is to copy | 
 |             <filename>cdlg_En.rc</filename> and start translating. | 
 |             There is no real need to know how the internal structure | 
 |             of the file, as you only need to translate the text within | 
 |             quotes.  | 
 |           </para> | 
 |           <para> | 
 |             In menus, the character "&" means that the next | 
 |             character will be highlighted and that pressing that | 
 |             letter will select the item. You should place these | 
 |             "&" characters suitably for your language, not just | 
 |             copy the positions from (say) English.  In particular, | 
 |             items within one menu should have different highlighted | 
 |             letters. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Edit <filename>dlls/commdlg/rsrc.rc</filename> to contain | 
 |             an <symbol>#include</symbol> statement for your | 
 |             <filename>cdlg_XX.rc</filename> file. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Repeat steps 6 and 7 again for: | 
 |             <itemizedlist> | 
 |               <listitem> | 
 |                 <para> | 
 |                   <filename>dlls/shell32/shell32_XX.rc</filename> and | 
 |                   <filename>shres.rc</filename> | 
 |                 </para> | 
 |               </listitem> | 
 |               <listitem> | 
 |                 <para> | 
 |                   <filename>resources/sysres_XX.rc</filename> and | 
 |                   <filename>user32.rc</filename> | 
 |                 </para> | 
 |               </listitem> | 
 |             </itemizedlist> | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Re-configure, re-make dependencies, and re-make Wine. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Check your new menus and forms; when they're not ok, go | 
 |             back to 6) and adapt the sizes, etc. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Several of the winelib based programs in the subdirectory | 
 |             programs also have internationalisation support. See the | 
 |             appropriate files there for reference. | 
 |           </para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para>Edit | 
 |             <filename>documentation/internationalisation</filename> to | 
 |             show the new status.</para> | 
 |         </listitem> | 
 |         <listitem> | 
 |           <para> | 
 |             Submit patches for inclusion in the next Wine release, see | 
 |             file <filename>./ANNOUNCE</filename> for details about | 
 |             where to submit. | 
 |           </para> | 
 |         </listitem> | 
 |       </orderedlist> | 
 |     </sect1> | 
 |   </chapter> | 
 |  | 
 | <!-- Keep this comment at the end of the file | 
 | Local variables: | 
 | mode: sgml | 
 | sgml-parent-document:("wine-doc.sgml" "book" "part" "chapter" "") | 
 | End: | 
 | --> |