Localization of Classic Shell

This file explains the localization system used by Classic Shell and how to translate Classic Shell in new languages.

1. What can be localized

Classic Shell has 2 major systems for providing localized text.

The first one is the L10N.ini files. There are 3 files – ExplorerL10N.ini, StartMenuL10N.ini and StartMenuHelperL10N.ini. They contain translations for the text in Explorer and the start menu that users will encounter during normal use. These files contain translations for all of the 35 supported languages. Each language is separated in its own section. You will generally not need to edit these files unless you find a typo. If you do, please send the correction to classicshell@ibeltchev.com, so I can fix the typo in the next release.

The second system is for localizing the settings UI and the system messages that Classic Shell displays. The translations are packaged into a resource DLL with the name of the language – en-US.dll, ja-JP.dll, etc. The DLL can contain:
•	A string table with replacement strings
•	Dialog resources for the Settings UI
•	Overrides for text lines in the L10N.ini files

The same DLL contains resources for all of the Classic Shell components – Classic Explorer, Classic Start Menu, etc. Generally resources from 2000 to 3000 belong to Classic Explorer, from 3000 to 4000 belong to Classic Start Menu, from 5000 to 6000 belong to Classic IE, 6000 to 7000 belong to the updater component and from 4000 to 5000 are shared by all components.

2. What else can be localized (if you really want to)

Classic Shell is designed to support only localizations for the UI. Localizations for other areas, like the installer and the documentation will require more work.

To translate the installer you need to translate the ClassicShellText-en-US.wxl file. It contain the text for the installer. One benefit of translating the installer is that you can localize the names of the shortcuts in the Start menu.

To translate the help file you will need to install some tool for editing CHM files like HTML Help Workshop from Microsoft. Decompile the ClassicShell.chm file and translate the HTML files.

You also need to translate the ClassicShellReadme.rtf file and ClassicShellEULA.rtf.

When you are done, send all translations to me and I will prepare an installer for that language. 

3. The DLL structure in detail

Look at the provided en-US.dll file. It contains all English resources that can be translated.
Note: Classic Shell doesn’t need the en-US.dll file. The English text is already built-in. The purpose of the en-US.dll file is to serve as an example and starting point for other languages.

The localization DLL contains the following resources:

•	A version resource. It must match the version of Classic Shell it is intended to be used with. The reason is that the text often changes between versions, so translations from one version will not work with the next. You may also use the comments section to list your name as the author.

•	A string table. Provides translations for the UI text in Classic Shell. Use the text from en-US.dll as a source. The string table doesn’t need to include all strings. If a string is missing, it will stay in English.

•	A set of dialog resources. These are the dialog boxes that the Settings UI needs. You can replace the text in the dialogs with your own. You can also resize some of the dialog elements to make the text fit. Like with the strings, if a dialog is missing from the DLL, the English version will be used.

•	A L10N resource (its resource ID must be 1). This is a UTF-16 text file that contains replacement strings for the ini files. For example the ini files do not have the text “Settings for Classic Start Menu” translated in all languages (since I don’t know how to say it in all 35 languages). So the DLL can provide the translations for the current language. It is possible to replace even text that is already translated – for example if you want to fix a typo in the ini file, or to provide a better version of some text line.

You can edit a DLL using a resource editor like Visual Studio, Res Hacker, and many others.
4. What if I don’t know how to edit DLLs?

Look at the provided en-US.csv file. It is a tab-separated file in UTF-16 format. You can open it in Excel or any compatible editor. The file contains 4 columns:
•	ID – this is the identifier of the text line. There are 3 types of IDs:
o	A number, like 2001, 4030, etc. These correspond to the strings in the string table
o	A pair of numbers, like 3002/1025. These correspond to strings found in the dialog boxes. The first number is the ID of the dialog, and the second is the ID of the control in that dialog
o	Text, like “Menu.SettingsTip”. These correspond to the lines of the L10N resource

•	English – this is the original English text

•	Translation – this column is empty. That’s where you will have to enter the translations for your language

•	Comment – some lines contain hints for the meaning of the translation, or instructions for providing better translation. If you are still unclear about something, ask me. I will provide more comments in future versions based on which text lines people find confusing

Once you are done, send the CSV file to classicshell@ibeltchev.com and I will convert that text into a DLL and upload it to the Classic Shell website.

5. Special characters

Some text lines in the DLL or the CSV contain special characters. They are:
\t – this is the Tab character. Do not enter an actual tab in the text, because the CSVs don’t handle it well
\r – this is a carriage return character
\n – this is a new line character
\\ - this is the backslash character. You must use \\ instead of \, because a single \ can be mistaken for a special character
%d – this is a placeholder for a number. The actual number will be provided at run-time
%s – this is a placeholder for a string. The actual string will be provided at run-time

In general, try to keep the special characters as they are.