Localisation - my software in your language!
For some time now I have been aware that many people using my
software are not native English speakers and that, whilst they understand
English well enough to operate the software, there may be some of their fellow countrymen
who do not. Consequently, I am now making it possible to for you to
localise my programs into your own language, with free and relatively
easy-to-use tools. Details of how to do this follow.
You will first need a program of mine which is ready to be
localised - that is a program which can have the words it uses translated into
your own language. Initially, I will supply the program and a
"native" i.e. English language file, and a language file in your own
language e.g. Italian, French, German or Spanish etc. You then need to
translate the terms in the language file from English to your own
language. These terms will the text used to label the graphical parts of
the program - such as buttons, captions and menu items - and the text within the
program itself such as the text for error messages and warnings.
To handle the language files, there is a tool called the Language
Manager, which you can download here.
You can even create new language files from scratch with the
Language Manager - so there is no need to wait for me to create a new language
- Obtain the program and language files from me.
- Obtain the Language
- Of course, the Language Manager itself is a program you can
customise in your own language.
- Load the native language file into the Language
Manager. The native language and the other available languages should
- Add your language if necessary. To start with, the
words for your language will appear in English.
- The list of items displayed will include elements of the
graphical elements displayed on the screen (called Forms) and the body text
of the program (called Units). You select which you want to work on in
a tree view, and I suggest you start with the main form of the program, as
it may be easier to relate which part of the form you are working on.
- When working with the strings in the body of the program,
it is less obvious which string relates to which function, so you may need
to e-mail me and ask.
- Try translating a few words in the list to your own language,
and running the program in your language. The translated words should
show in place of the English text.
- You don't need to translate all the text at once.
Work on a small part and then save the language file from the Language
- To test, select your own language from the program's Languages
- At this point, it is probably a good idea to send the language
file back to me so that I can check it works correctly with my copy of the
- Unless you are the only person translating the software,
you should probably pick up the most recent language files before adding
words to a translation.
- As you build confidence and experience, translate more
words as time allows, and keep feeding the results back to me.
- There may be some issues with changing languages while the
program is running. I need to either resolve these or to recommend
that the program be restarted after a language change.
- Once we are satisfied, I can add your language file to
those available for the particular program.
- If you have only translated the Forms section, now is the
time to look at the Units section which contains the Resource
Strings. Please see the notes below about the special
considerations when translating resource strings.
Here are some screen shots from the process.
This is part of step 6 described above. You have opened
the "native" language file for the AVHRR Manager. There is a
drop-down list of container elements (Forms and Units) which contain strings
which can be translated. In this particular case, there are two forms, named
FormAVHRRmanager and FormAVHRRsegmentsReport. The "81" and "7"
show the number of elements which could be translated in each form.
You choose the FormAVHRRsegmentsReport form (as it looks
easier because it has fewer elements!), and a list of
elements in that form is shown in scrollable list like this:
You can see here the efforts of three
translators, changing the text for their various languages. For example,
the caption of the button which closes the form (the property named "ButtonClose.Caption")
has been translated as Esci (Italian), Quitter (French) and Afsluiten
(Dutch). If a string has not
yet been translated, it shows with a little blue mark in the bottom-right corner,
such as "Perfect passes". You can use one of the Language
Manager functions to hide text which has already been translated should you
So with the process suggested above, you will first modify the
visible elements of the program - the text on the buttons etc. which you see
displayed when you first start the program. Of course, during the
operation of the program, text may be generated (a list of satellite passes, for
example), or the caption for a button may change (for example, a Start/Stop
button). The text which is available for translation will be stored in
"resource-strings" in the program, and these can be seen in the Units
section through the Language Manager program. After modifying the visible
elements in the Forms section, you can e-mail me the resulting new foreign
language file (I don't need the .LEO file), and I can check to see if any of the
buttons need to be larger to accommodate the new text. If necessary, I
will send you back a new version of the program. You can then translate
the resource-strings into your own language.
Now you can use the drop-down list to select one of the Units
to translate. These units contain the resource strings.
Here I have selected the AVHRRmanagerForm, which contains 68
strings to translate.
The list of the resource strings (constants) is shown, just as
it was when translating the strings in a form, and the translation process is
the same. However, you will need to take special care when translating any
embedded format strings as I mention below.
Hints and Tips
I suggest you just do a
little work and see how it goes. Here are some hints and tips.
- Remember that you can set an option in the Language Manager to show only untranslated items
(Language, Show, Untranslated). This makes it easier to see what is
still left to do.
- Please try and keep the length of the translated strings
similar to the original strings. I may be able to enlarge buttons etc.
a little, but not perhaps a lot. If any of the text obviously doesn't
fit, please point this out to me and I will see what I can do.
- With Group-Box captions, I always have a space character
before and after the text, as I think that this looks neater and easier to
read. If you forget to do this, I will try and remember to update your
- Please don't alter the position or
size of graphical elements. If you need something made larger, first
try and reduce the text, then ask me to change the size.
- Some form caption elements, in particular menu items, will
have an ampersand (&) character embedded in the text. This
ampersand adds the underscore for the character it precedes, so that the
string "&File" would be displayed as File.
- These are the "accelerator" characters for
menus etc. For example, in the English version of the AVHRR Manager, I could press Alt-F-X to exit the program, Alt-F-S to start monitoring etc.
- If you translate without the ampersand, then this functionality would be lost,
but nothing else.
- Of course, I try to obey the conventions of English-language Windows (where Alt-F-X is common), but sometimes I have to make up my own inventions. Alt-F would always be the File menu, so each letter must be unique.
For example, I could not have File Save and File Start both with Alt-F-S. If I had both of those menu items, it would
probably be Alt-F-S for file save, and Alt-F-T for File, starT.
- Please try and keep the same conventions as your local
version of Windows. I appreciate this may be difficult (for example,
Office 2000 uses File, Exit, where as Internet Explorer uses File,
- If you have never used the Alt key to access the menu
functions, all this may be completely new to you!
You will find one or two resource strings where there is an embedded format
string, for example in the AVHRR Manager:
"Last file processed on: "yyyy-mmm-dd "at" hh:nn "UTC"
%s Kepler data is %.1f days old
Writing %d minute segment
So anything with a percent sign (%) or embedded quotes (") needs a little extra care.
Do ask me if you are not sure, as having incorrect format string could cause the
program to produce an error message.
Strings with spaces
I sometimes code a long message as a sequence of strings, with
a space at the end of each string to ensure that the words do not flow into each
other when the strings are combined. As the space does not show on the
English text, you may missing it when translating. I will try and make
this more obvious in the future, and put the spaces at the start of the
string. This sometimes happens when I have used number-to-string
conversion functions so that my program reads:
text := 'This happens every ' + IntToStr
(days) + ' days.';
In this case, both the the space after "every" and
the space before "days" matters. You may discover these only
when you run the program and look at the output!
Although the programs should have the ability to switch
languages "on-the-fly", this may also require programming effort from
me, so for the moment I suggest that after switching languages you restart the
Programs which already include multi-language support include
the AVHRR Manager, GeoSatSignal,
the HRPT Reader, the Metop
Manager, the MSG Data Manager, and SatSignal.
You are most welcome to add your language to any of these programs, but please
tell me first so that any duplication of effort can be avoided.
Program-specific Translation Notes
- The strings for LabelNearestChunk.Caption and SLoadChunk
should be the same.
MSG Data Manager
- The message names on the Messages tab headers ("Admin
Massages" etc.) are currently hard coded.
Q: The Open button doesn't work in my language, but the
English and German are OK.
A: In the Units, MainForm, there is a string SOpen which in English is "Open...".
Once this SOpen string is translated, and matches the translated Forms, FormMain,
ButtonOpenX.Caption string, the Open button problem should be solved.
How to get your favourite software localised
- If the program has already been localised, simply download
the Language Manager and
add your translation. Check that no-one else is already doing a
translation (ask on the SatSignal
self-help group). Once that is done, please send the language file
back to me so that I can add it to those available.
- If the program is in the process of being localised, please
wait until one language is done (so that we know things are working
correctly), and then you can add your own language.