The dimensions of the controls should be changed so that they will be big 
enough to contain the text for every individual language.

Therefore:

- Dimensions of controls are based on sysres_En.rc.  Other languages should
  change these dimensions in order to make the text fit.

I (krynos@qbc.clic.net) will try to make sysres_Fr.rc fit correctly, if 
someone is interrested in others languages, message me. I may correct 
others languages after, but not soon.

Here are structure of each line (for example):
PUSHBUTTON "&Help", 1038, 174, 75, 50, 14, WS_GROUP | WS_TABSTOP
1038: The ID of this button, you shouldn't change this.
174 : X-offset of the button with respect to the upper-left corner of
      the dialog box.
75  : Y-offset
50  : The width of the button
14  : The height
flags (WS_??? etc): They control how the dialog behaves.  Things like:
                    changing the focus with a TAB, scrolling to a list
                    of radiobuttons with up/down keys, etc.  If you're
                    not sure: leave them as they are (in the english
                    version).
 

Frans van Dorsselaer
dorssel@rulhm1.LeidenUniv.nl
***************************************************************
1996, May

Subject: ChooseColor
         ===========

Please delete the old CHOOSECOLOR in YOUR sysres_??.rc   
and insert the new CHOOSECOLOR from sysres_En.rc to YOUR 
language file and translate this as you like it - 
otherwise you'll get an undefined behavour. 

Today it works well for:
* English 
* German
* French
* Italian
* Korean
* Finnish
* Danish
* Dutch
...to be continued......

Thank you.

Albrecht Kleine
kleine@ak.sax.de

**************************************************************
1996, May

Subject: ChooseFont

Just like ChooseColor, please copy CHOSEFONT from sysres_EN.rc,
and translate it to your language. It's okay for:

* English
* German
* Finnish
* Italian
* French
* Danish
* Dutch
.....

Thank you.

Albrecht Kleine
kleine@ak.sax.de

**************************************************************
1997, January

Subject: EDITMENU

There now is a resource EDITMENU.  It is the menu that is displayed when you
click the right mouse button within an edit control.  I included an English
version in all sysres_??.rc files, which needs translation in your language.
This has now been done for:

* English
* Danish
* Dutch
.....

Note: I picked the IDs of the menuitems "at random".  When someone wants to
find out the "real" (win95) values, feel free to change them.  However, you
should change _all_ sysres_??.rc files and subsequently the function
EDIT_WM_Command() in controls/edit.c.  This is a matter of minutes (i.e. no
programming skills required).

Bye,

Frans van Dorsselaer
dorssel@rulhm1.LeidenUniv.nl
**************************************************************
1998, October

Subject: Put Mark in DebugLog

I added an item to SYSMENU to put a mark in the Debuglog by request of the 
User. I picked 61762 as the next ID after SC_ABOUTWINE. This item needs
translations to all supported languages. At present it is only done for

* English
* German
* Dutch

After you implemented it for your language, please add it to the list above.

Bye

Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de