| <chapter id="i18n"> | |
| <title>Internationalization</title> | |
| <sect1 id="adding-languages"> | |
| <title>Adding New Languages</title> | |
| <para> | |
| Written by &name-morten-welinder; <email>&email-morten-welinder;</email>, | |
| January 1996. | |
| </para> | |
| <itemizedlist> | |
| <listitem> | |
| <para>Thereafter revised February 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" "set" "book" "part" "chapter" "") | |
| End: | |
| --> |