ADDING LANGUAGES TO WINE

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:
Bulgarian, Chinese, Greek, Icelandic, Japanese, Romanian,
Croatian, Slovak, Turkish, and Slovanian.

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.

To add a new language to the list of languages that Wine can handle
you must...

0.  Find the language ID in /include/winnls.h .

1.  Look in ole/ole2nls.c if your language is already incorporated in
    the "static const struct NLS_langlocale". If not: find the 
    appropriate entries in /include/winnls.h and add them to the list.

2.  Edit the parameters defined in /ole/nls/*.nls to fit your local 
    habits and language.

3.  Edit documentation/wine.man (search for -language) to show the new
    language abbreviation.

4.  Edit misc/main.c variable "Languages" to contain the new language
    abbreviation and language ID.  Also edit macro "USAGE" to show the
    new abbreviation.

5.  Edit include/options.h enum "WINE_LANGUAGE" to have a member called
    LANG_XX where XX is the new abbreviation.

6.  Create a new file dlls/commdlg/cdlg_XX.rc (where XX is your language 
    abbreviation) containing all menus.
    Your best bet is to copy cdlg_En.rc 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. 

    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 "&"s suitably for your language, not just
    copy the positions from (say) English.  In particular, items within
    one menu should have different highlighted letters.

7.  Edit dlls/commdlg/rsrc.rc to contain an include statement for your
    cdlg_XX.rc file.

8.  Repeat steps 6 and 7 again for:
    - dlls/shell32/shell32_XX.rc  and shres.rc
    - resources/sysres_XX.rc      and user32.rc

9.  Re-configure, re-make dependencies, and re-make Wine.

10. Check your new menus and forms; when they're not ok,
    go back to 6) and adapt the sizes, etc.
    
11. Several of the winelib based programs in the subdirectory programs
    also have internationalisation support. See the appropriate files
    there for reference.

12. Edit /documentation/internationalisation to show the new status.

13. Submit patches for inclusion in the next Wine release, 
    see file ./ANNOUNCE for details about where to submit.


January 1996
Morten Welinder

[I hope I got all the places where changes are needed.  If you see any
place missing from the above list, submit a patch to this file please.
Also note that re-organization of the source code might change the list
of places.]

Therefore revised Februari 1999 by Klaas van Gend
Revised again May 23, 1999, Klaas van Gend
