Localization

Pete Batard edited this page Jan 19, 2017 · 117 revisions
Clone this wiki locally

Table of Contents

Introduction

Rufus is meant to natively support more than 30 main languages (meaning that a single executable will support ALL these languages at once), as well as add the possibility to support additional languages, through the use of an external localization file.

Besides simple text string conversion, the Rufus translation framework also allows you to reposition UI elements, resize dialogs or apply specific attributes.

All of this is accomplished through the use of a simple rufus.loc file, containing elementary commands that can look something like this (the following is an excerpt for the French translation):

################################################################################
l "fr-FR" "French (Français)" 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c
v 1.0.2
b "en-US"

g IDD_DIALOG
t IDS_DEVICE_TXT "Periphérique"
t IDS_PARTITION_TYPE_TXT "Type de partition et système de destination"
t IDS_FILESYSTEM_TXT "Système de fichiers"
t IDS_CLUSTERSIZE_TXT "Taille de clusters"
t IDS_LABEL_TXT "Nouveau label"
t IDS_FORMAT_OPTIONS_GRP "Options de Formattage       "
t IDC_BADBLOCKS "Vérification de mauvais blocs:"
s IDC_BADBLOCKS +10,0
m IDC_NBPASSES +5,0

g IDD_UPDATE_POLICY
s IDD_UPDATE_POLICY +30,0
t IDD_UPDATE_POLICY "Paramètres de mises à jour"
s IDC_POLICY +30,0
t IDS_UPDATE_SETTINGS_GRP "Options"
s IDS_UPDATE_SETTINGS_GRP +20,0
t IDS_UPDATE_FREQUENCY_TXT "Recherche mises à jour:"
s IDS_UPDATE_FREQUENCY_TXT -3,0
t IDS_INCLUDE_BETAS_TXT "Inclure les bétas:"
m IDC_UPDATE_FREQUENCY -3,0
m IDC_INCLUDE_BETAS -3,0
s IDC_UPDATE_FREQUENCY +25,0
m IDS_CHECK_NOW_GRP 14,0
s IDS_CHECK_NOW_GRP +16,0
t IDC_CHECK_NOW "Chercher maintenant"
m IDC_CHECK_NOW 5,0
s IDC_CHECK_NOW +34,0
t IDCANCEL "Fermer"
m IDCANCEL 5,0

t MSG_001 "Autre instance detectée"
t MSG_002 "Une autre instance de Rufus est en cours d'exécution.\n"
	"Veuillez fermer la première instance avant d'en lancer une seconde."
t MSG_003 "ATTENTION: TOUTES LES DONNEES DU VOLUME '%s' VONT ETRE EFFACEES.\n"
	"Pour continuer cette operation, cliquez sur OK.\nPour quitter cliquez sur ANNULER."
t MSG_004 "Mises à jour"
t MSG_005 "Voulez-vous authoriser Rufus à chercher des mises à jour en ligne?"
t MSG_006 "Fermer"
t MSG_007 "Annuler"
t MSG_008 "Oui"
t MSG_009 "Non"
t MSG_010 "Blocs défectueux détectés"
t MSG_011 "Vérification complète: %u bloc(s) défectueux détecté(s)\n"
	"  %d erreur(s) de lecture\n  %d erreur(s) d'écriture\n  %d erreur(s) de corruption\n"
t MSG_012 "%s\nUn rapport plus détaillé peut être obtenu à:\n%s"

These elementary commands can:

  • Change the text being displayed on a UI element (including dialog titles)
  • Change the orientation of text back and forth between left-to-right and right-to-left
  • Change the size of an UI element (including dialog windows)
  • Change the position of an UI element in its dialog window
Using this elementary set of commands, described in details below, we believe that Rufus provides translator with everything needed to produce a seamless translation of Rufus into their own language.

Before you start

Before you start a new translation of Rufus, you should:

  • Have a look at the these entries from the FAQ.
  • Spend some time browsing this guide to find what you will be required to do, especially the Testing a translation chapter below. Please understand that there is a lot more involved in translating Rufus than just converting a bunch of strings.
  • Have a good look at the current rufus.loc file, as each language section should give you an idea of how much work will be required, as well as the commands you will need to figure out.
    Don't undertake a translation if you feel like this will just be to too much work, or that you will need a lot of assistance. Of course, I will be here to help where required, but I also expect you to be able to find your way around on your own using this guide.
  • If you haven't done so, please send an e-mail indicating the language you are interested in translating, to find out if anyone already volunteered a translation. The last thing I want is to tell you you wasted your time because somebody else is already working on a translation for that language.
  • Ensure that you have a recent version of 7-zip installed on your computer.
  • Ensure that you have a text editor that can edit and save text files in UTF-8 mode without adding a BOM, and where you can set the line endings to CR/LF if needed (the loc file MUST use CR/LF, i.e. DOS mode for line endings. If you save the file using LF, i.e. UNIX mode, you will run into issues!). In other words, please try to use something a bit better than Windows Notepad...
Optionally, you may want to have ResEdit installed and properly set to open the rufus.rc file, but this is only required if you are looking for a specific control and can't find its name from the English or other translation. See below for how to setup ResEdit.

Creating a translation

  1. Download the very latest version of Rufus from here, start it and check the log for a line starting with Locale ID, also known as LCID (e.g. if running Rufus on an English system, you may see a line such as Locale ID 0x0409).
  2. Download the rufus.loc file (click on the link) and save it in the same directory where you have the Rufus executable.
    IMPORTANT: Your browser may save the file in UNIX mode (line breaks using LF) so you will have to first convert the file into DOS mode (CRLF). You can do this conversion using the free text editor Notepad++ and make sure the following are enabled:
    1. In the Encoding menu, make sure Encode in UTF-8 is selected.
    2. In the Edit menu, under EOL Conversion make sure Windows Format is selected.
  3. Copy the lines between ### TRANSLATOR START COPY ### and ### TRANSLATOR END COPY ### and paste them at the end of the file.
  4. Edit the l line in the section you copied and set the language tag and other parameters according to your language. Please refer to the documentation for the l command below. Basically you should:
    1. replace the "en-US" IETF language tag for your language, eg: "fr-FR", "zh-CN".
    2. Set the name of your language first in English and then (in parenthesis) in your own language, eg: "Chinese Simplified (简体中文)"
    3. remove the end of the line starting with 0x0409 and replace it with the Locale ID/LCID code you got in the first step.
  5. Translate the English messages into your languages. The g lines indicate the dialog or group that a translated element belongs to and you shouldn't have to modify them.
    Tip: Make sure you have a look at the documentation for the g, t, m and s commands below to understand the translation commands you can use.
  6. (Re)launch Rufus. With rufus.loc in the current directory, the messages you translated there should appear.
    Tip: Make sure you have a look at the Testing a translation chapter, as following it will ensure that you cover all the major parts of the interface.
  7. If needed, add some m or s command, to reposition/resize some of the UI elements to accommodate your translation. For example of how the m and s commands are used, see existing translations from the current rufus.loc (the file that Rufus uses internally) or refer to the documentation below.
  8. Repeat the steps above until you're happy with your translation. Note that you MUST restart Rufus every time you modify your .loc file as there is no reload option.
  9. If you think your translation is complete, please make sure you copy/paste your whole translation section into a Word Processor, such as Microsoft Word, and search for typos. You will be amazed at the number of small typos that can be introduced when doing this kind of work, and that can be easily corrected.
  10. Once you are all done, please e-mail me your .loc file, so that I create a commit for it. The commit will use the name and e-mail you provided for MSG_176, so that you are credited for your hard work in the Rufus source!
The Rufus GUI tries to follow the default Windows format dialog (see below), so you are encouraged to take a look at the one from your locale, to ensure that you use the same translation and design where possible:

Finally, please make sure you have a look at the documentation for the localization commands

Editing an existing translation

As with creating a new translation for Rufus, editing an existing translation for Rufus is done through the rufus.loc file. If you haven't done so already, you are invited to read both the Introduction and Before you start paragraph to get a better idea of what is required.

You basically want to edit an existing translation when a translation, which is already part of rufus.loc, has a version (v x.y.z line) that is older than the version from the ChangeLog.txt.

  1. Download the very latest version of Rufus from here. If there is an ALPHA or BETA version, this is the one you should use.
  2. ALWAYS download the latest rufus.loc (click on the link), even if you already have a copy, and save it in the same directory where you have the Rufus executable. The reason you should always download it and not use your latest local copy is changes may have been applied to your translation after it was submitted.
    IMPORTANT: Your browser may save the file in UNIX mode (line breaks using LF) so you will have to first convert the file into DOS mode (CRLF). You can do this conversion using the free text editor Notepad++ and make sure the following are enabled:
    1. In the Encoding menu, make sure Encode to UTF-8 without BOM is selected.
    2. In the Edit menu, under EOL Conversion make sure Windows Format is selected.
  3. Make sure you download the very latest version of Rufus available and place it in the same directory where you downloaded rufus.loc. This ensures that any changes you apply to the rufus.loc will be used by the application.
  4. Look at the ChangeLog.txt.
  5. IMPORTANT: For each element that needs to be updated, look at its content in the English section of the rufus.loc. Be aware that a message may have multiple lines, but only the first one will appear in ChangeLog.txt, so if you only refer to ChangeLog.txt, you will miss data to translate!
  6. Edit your copy of rufus.loc for all the elements that need to be modified. Remember that you can launch Rufus at any time to see your changes applied.
  7. Once you are satisfied with your translation, send me your full rufus.loc by e-mail (no need to isolate your section, just send the whole file).
    Please do NOT try to create a merge request in github, as this creates problems. Just always e-mail me your full rufus.loc, OK?
Before sending an updated translation, you are of course invited to test your translation by performing the steps detailed in the following paragraph.

Testing a translation

The following provides a series of tests I strongly advise you to run, in that order, to ensure that most of the elements of the UI are tested for a translatation:

Main dialog

  • Select FAT32 as the file system, select FreeDOS for the boot type and click Start.
    • Pay attention to the Warning that says that all data will be erased. Ensure that it is properly translated.
  • Run the same test as above, but check the Bad blocks checkbox. Let the bad blocks check run for a while and check that the message on the status bar is correct. Then click Cancel, and confirm that you get an Operation Cancelled message in your language.
  • Click on the white arrow besides Format Option. The advanced options will be displayed. Confirm that they look OK.
  • If you haven't done so already, download the menu_c32_test.iso (Don't worry - it's only 120 KB). Make sure you uncheck the bad blocks checkbox and click on the ISO icon to select that menu_c32_test.iso file. If you click Start, you should get the Obsolete menu.c32 dialog. Confirm that your translation is correct and select Yes to download the file.
  • You will now see the 'ISOHybrid image detected' dialog. Confirm that your text is properly translated for this message and leave 'Write in ISO Image mode' selected, then click OK.
  • Select either OK or Cancel on the 'ALL DATA WILL BE DESTROYED' dialog.
  • Select NTFS as the file system, select ISO for the boot type, and then click on the ISO icon but click Cancel on the ISO selection dialog and click Start. You should get a No ISO image selected dialog, that you can check.
  • Press the cheat-mode combinations (Alt-Something) listed here and have a look at the message on the status bar for each of those. The ones with enabled/disabled can be pressed multiple times. At the very least you should issue the Alt-R combination to delete all registry settings.
  • Quit Rufus and restart it. Because you use Alt-R above, you should get the initial dialog about allowing the check for update. Pay special attention to this dialog as this is usually the first one people will see. You can use Alt-R and exit Rufus at any time, if you want to test that dialog again.
  • If you haven't done so already, download the Windows To Go.iso (356 KB). This should enable the display of the Windows To Go options on the main dialog. Note that since this is a dummy image, attempt to create a bootable flash drive with it will fail.
  • I also encourage you to test the creation of a Windows based and Linux based bootable ISO of your choice, as well as trying to open a non-bootable ISO, for completion of the main dialog test.
  • Also make sure that you check each dropdown, including the one in the advanced options.

Log dialog

  • Click the Log button on the Main dialog. There are only 3 buttons that should be translated, so it should be easy to check. The log content itself will always be in English, regardless of your language.
  • Make sure the title is translated if needed (t IDD_LOG "Some translation")
  • Note: For a right-to-left translation, you will find that the content of the log will still be displayed as a left-to-right control (i.e. left aligned text, scrollbar on the right). This is intentional as the content of the log is meant to be 100% in English.

About dialog

  • Click the About button from the Main dialog
  • Besides all the other elements, make sure a line such as English translation: John Smith is being displayed (MSG_176) under Copyright © 2011-2013 Pete Batard / Akeo. I insist on giving you credit for your work!!
  • The text in the Additional Copyrights is not translatable, and for a right-to-left translation, you will also find that the content is displayed in full left-to-right mode. This is intentional.
  • Make sure the title is translated.

License

  • From the About dialog, click the License button.
  • Make sure the title and the Close button are translated
  • The GPLv3 license is not translatable, and is always displayed left-to-right mode. This is intentional.

Update Check

  • If you haven't done so, go back to the main dialog and press Alt-C to force the update check to succeed, then go back to the About dialog.
  • From the About dialog, click the Updates button.
  • Make sure you check each dropdown as well as the title.
  • Click Check Now. The update check should succeed and the New Version dialog will be displayed.

New Rufus Version

  • Before testing this, you need to enable the "Force update" setting. This is done by pressing Alt-C on the Main dialog. You must see a message telling you that Force Update is enabled.
  • If you have seen the message, then you should click AboutUpdatesCheck Now.
  • After Rufus contacts the update server, and because "Force update" is enabled, you should see the new version dialog.
  • Ensure that all elements are properly translated, then click download and save the new version.
  • Pay attention to the Download button, which should change to Launch after the download is complete.
  • Also pay attention to the various message appearing on the status bar during this operation (remember that you can also open the Log to view them.

Other checks

  • While a Rufus application is already running try to launch it again. You should get a translated message indicating that no 2 Rufus applications can run at the same time.
  • (Optional) If you have a Windows 7 or Windows 8 ISO, start a format operation using it, and then cancel when Rufus starts to write the sources\install.wim file. This will display the warning about blocking operation (MSG_080).
If you go through all of the above, then you should have all the important features of your translation covered.

But wait, there's more!

So you've created your translation, e-mailed me your .loc file, and it was applied to Rufus. Great!

Sounds like there's nothing more you need to do, right? Wrong!

As you expect, Rufus is a living application, with messages being added and modified according to new features, or GUI alterations. As such, a translation is also a living thing, that needs to evolve with the application. While I will do my best to limit the amount of work involved, I may ask you to provide some updates from time to time, so please keep in mind that you may be requested to update your translation on regular basis, after you submitted it.

Of course, I want to make the process of updating a translation as easy as possible, so, to facilitate tracking changes that impact existing translation, the v (version) command is being used. If you look at the current rufus.loc, you can see that each translation has a version listed right after the l command, such as v 1.0.3" or v 1.0.2. This version number, along with the localization ChangeLog.txt, which is updated every time a new message is added or modified, allows you to track any requirement to update your translation.

Basically, with en-US always being the most up to date version (since this is the one I work with), what you want to do is check the version number of your translation, against the en-US one, and, if your version is older, use the ChangeLog.txt to find out what messages need to be altered.

You should also note that you can always check if your translation is behind the en-US one by using DbgView against the most up to date version of Rufus.

While I'll try to send friendly reminders whenever the en-US version is updated, I will also ask you to try monitoring the translation ChangeLog from time to time, to see if an update is needed.

Of course, having a translation that is behind en-US for the micro (the very last number in the version, e.g. 3 in v 1.0.3) will not prevent Rufus to run in that language. Users will just get any missing new message in English rather than their own language, as well as see the old translation for messages that haven't been updated.

Localization commands

The Rufus .loc file is a simple UTF-8 text files that comprises a set of elementary commands to define translation. The set of supported commands is:

l (locale)

Synopsis:
(Mandatory) Define a new translation.
Example:
l "zh-CN" "l "zh-CN" "Chinese Simplified (简体中文)" 0x0404, 0x0804, 0x0c04, 0x1004, 0x1404
Parameters:
  • "zh-CN" (in quotes):
    The IETF language tag for Simplified Chinese in the China region. You should use the IETF language tag that matches the main region where your translation will apply. For instance, if you create a French translation, that will apply for both France and the French-speaking Canada region, you should use "fr-FR" rather than "fr-CA" and then add the Locale ID for French-Canadian (see below). To find the IETF language tag you should at the tags starting on page 14 (Locale ID 0x0401) of the MS-LCID PDF document. Note 'Locale ID' and 'LCID' are the same thing.
  • "Chinese Simplified (简体中文)" (in quotes):
    The designation of the language as it should appear in the (upcoming) language selection menu. This should be the name of the language, in English, followed by the designation of the language, in its own tongue, between parenthesis.
  • 0x0404, 0x0804, 0x0c04, 0x1004, 0x1404:
    A set of Microsoft LCIDs to which this translation should apply, separated by a comma. These numeric values are what Windows uses internally to identify a language and region (in a manner equivalent to an IETF language tag). You can use either the list on this page or the MS-LCID PDF document above to find out the LCIDs you should use.
    In this examples, the list indicates that we want the "Chinese Simplified" translation to apply to "Chinese - Taiwan" (0x0404), "Chinese - People's Republic of China" (0x0804), "Chinese - Hong Kong SAR" (0x0c04), "Chinese - Singapore" (0x1004) and "Chinese - Macao SAR" (0x1404). A rule of thumb is that most of the LCIDs you want to apply should be separated by 0x0400 in hexadecimal.
Remarks:
There should be only one l command for each translation.


v (version)

Synopsis:
The version of this translation
Example:
v 1.0.2
Parameters:
  • x.y.z: The version number with a major (x), minor (y) and micro (z). These number change as follows:
    • x, the major, would be incremented when a change in the localization engine breaks existing commands. This number is currently set to 1 and not expected to change.
    • y, the minor, is incremented when we expect breakage with existing translation outside of an engine change. For instance, if we were to alter the use of an existing UI control to perform a different action, and required a brand new text to describe it, we may increase the minor by 1 if we feel that users of the new UI could end up performing a detrimental action if either the English or old UI control translation was used.
    • z, the micro, is incremented when UI elements or messages are changed in a manner that won't negatively alter the current behaviour for users (eg. a control or message is reworded to be more explicit, a brand new message is added, etc.). In this case, we expect the translation to catch up eventually, and can afford to wait until it does.
Remarks:
  • The version against which the major, minor and micro are compared is always the one from the native en-US translation.
  • If you need to update your translation, DbgView will produce a helpful message alerting you to it. Always try to pay attention to DbgView messages.
  • You can find a list of all the changes that intervened since version x.y.z by checking the dedicated localization ChangeLog.


b (base)

Synopsis:
(Optional) The translation this section should use as its base.
Example:
b "en-US"
Parameters:
  • "en-US" (in quotes):
    The IETF language tag of an existing translation. This should match the first tag that appears after previous l command.
Remarks:
Though multiple b can be accepted, there should usually be only one such command for each translation. Also, you must ensure that the translation you reference appears before the b tag, else it will be ignored.
Note that it is currently not possible to reference an l section of the internal rufus.loc file from an external rufus.loc. This means that any locale you reference must exist in the current rufus.loc.


g (group)

Synopsis:
The dialog or group the next set of commands should apply to. As soon as a g command is encountered,, and until the next g the translation framework considers all commands, such a t, m, s to apply to elements belonging to this dialog.
Example:
g IDD_ABOUTBOX
Parameters:
  • IDD_ABOUTBOX:
    The ID of a dialog. This should always begin with IDD_.
Remarks:
Please look at the rufus.loc file for all the IDD_ names allowed for the g command.


t (text)

Synopsis:
Translate a text element.
Example:
t IDS_DEVICE_TXT "Periphérique"
Parameters:
  • IDS_DEVICE_TXT:
    The ID of the control, dialog window or message to translate.
  • "Periphérique" (in quotes):
    The translated text.
Remarks:
  • Except for the main dialog's title, the t command can also be used to change the title of a dialog window (IDD_).


m (move)

Synopsis:
Move a dialog control in x and y.
Example:
m IDC_ADVANCED +36,-5
Parameters:
  • IDC_ADVANCED:
    The ID of the control to move.
  • +36,-5:
    The amount of (relative) pixels the control should move in x and y. Here, the IDC_ADVANCED control will move 36 pixels to the right and 5 pixels upwards.
Remarks:
  • A positive x value will move the control right, a negative value left.
  • A positive y value will move the control down, a negative value up.
  • If the UI has been scaled (e.g. for high DPI display), the pixel amount will be adjusted to the scaling factor.
  • This command only applies to UI elements from the dialog. It should not be applied to messages or to the dialog window itself.
  • If you want to move a control that is not already listed rufus.loc, you should use ResEdit to lookup its ID. Please see above for a detailed example of how to do just that.


s (resize)

Synopsis:
Resize a dialog control in width and height.
Example:
s IDS_CHECK_NOW_GRP +10,0
Parameters:
  • IDS_CHECK_NOW_GRP:
    The ID of the control to resize.
  • +10,0:
    The amount of pixels the control should move in width (dx) and height (dy). Here, the IDS_CHECK_NOW_GRP control will be increased 10 pixels in width.
Remarks:
  • During a resize operation, the top left corner of the dialog remains fixed. This means that only the bottom right corner will change position, and you may have to use a move command (m) if you want to re-center the control.
  • it is possible to use negative values to decrease the control's width or height.
  • If the UI has been scaled (e.g. for high DPI display), the resize will be adjusted to the scaling factor.
  • Unlike the move command, the resize command can be used to resize dialog windows.
  • However, if you want to resize a dialog window, your s command should be placed right after the g command.
  • If you want to resize a control that is not already listed rufus.loc, you should use ResEdit to lookup its ID (see above).


a (attributes)

Synopsis:
Sets translation attributes, such as right-to-left, numerals, etc.
Example:
a "r"
Parameters:
  • "r": a quoted string containing a set of one character attributes, in any order. The current list of attributes are:
    • r: use right-to-left mode
Remarks:
Applies to version 1.4.4 or later.
When using the right-to-left attribute, elements that are voluntarily meant to be kept untranslated (currently: the log control, the additional copyrights and the license) will be displayed in full left-to-right mode, meaning that the text will be left aligned and the scrollbar will be on the right. For everything else, the right-to-left order will be applied, even if it contains English.
This is why, for instance, the title of the application will change from Rufus 1.2.3 to 1.2.3 Rufus or the Copyright elements in the About dialog will be fully reversed.

Useful tips

  • If you have a github account, you should be able to edit this guide, since it's a wiki page. If there are elements that you think should be clarified for other translators, just go ahead and and edit this page! Just refer to this guide for help on how to format text using MediaWiki.
  • Have a look at other translations! You can use the -l option of Rufus to switch languages and, by cross referencing the current rufus.loc, find if other translators have already solved the same issue you have.
  • Remember that a translation is a living project, and you are expected to update it from time to time. Don't forget to check the localization ChangeLog on regular basis to find out if new translations were added, and if so, please look into applying these changes and updating your translation. Your cooperation with this ongoing process is much appreciated!

Non-translatable elements

For obvious reasons, the following elements are not set to be translatable, and will therefore appear in English in all localizations:

  • The main dialog title
  • The GPLv3 license
  • The additional copyrights content in the About dialog
  • Any message that appears only in the log, as the log is really meant for the app developer in case a user encounters an issue, so I need to be able to understand it!

FAQ

Could we have a button to reload a .loc file?

Instead of having to launch Rufus again every time we modify a translation...

I'll see what I can do, but this is a bit more complicated that it looks, because it requires keeping track and reverting any change that was applied.
Right now, I estimate that adding such a feature would probably require about 2 weeks of my time, which I really can't afford for the 1.4.0 release (remember that I only develop Rufus in my spare time, and that it's only one of the many Open Source projects that compete for my time). I hope you can bear with this inconvenience for now...

Could we use something like ResEdit instead of 'm' and 's'?

If I had all the time in the world then sure, I could create a nice resource editor that lets you position elements graphically (or more likely, let you do that in ResEdit, then compare the original RC against your new one and produce a .loc file our of it) rather than requiring to do it from a text file and relaunch Rufus every time.

Unfortunately, this effort would only be geared towards helping translators, and, regardless of how critical your work really is, translators will probably not count more than 50 people, so the return on investment doesn't seem high enough to justify adding such a feature.

What about right-to-left language support?

As of the current version of Rufus, right-to-left languages should be fully supported in Rufus. As a matter of fact the Arabic translation was introduced with Rufus 1.4.8. Just make sure you add a "r" at the beginning of your translation if you want right-to-left support.

Translating the Rufus Homepage

To translate the Rufus Homepage (http://rufus.akeo.ie):

  • Before you begin, please send an e-mail indicating the language you are interested in translating so that I can tell you if somebody else already volunteered a translation for the same language. I'd rather not have you waste your time if somebody else is already working on it.
  • Download and install the latest version of Poedit.
  • Download the Rufus Homepage POT file index.pot.
  • Launch Poedit.
  • Click on the button: Create new translation — Take an existing PO file or POT template and create a new translation from it..
  • When prompted, select the index.pot you just downloaded.
  • Select your language (using the primary location for your region, eg. for French, you would use fr_FR).
  • Translate the strings, making sure to preserve the various HTML markup (eg: <a %s>, <b>, &ndash;, etc.). Please make sure NOT to add extra spaces, especially on the closing tags (for instance it's <\a>, NOT <\ a>).
  • Save the file under the name index, and send me both the generated index.po and index.mo.
    IMPORTANT: Please make sure you send me the .po and NOT the .pot.

Additional notes

Please make sure you pay attention to the "Notes for translators" as they may provide additional information.

Once you have provided me with a translation, and I have applied it to the site, it is always a good idea to copy/paste the whole content of the translated webpage into a text editor (Word, etc.) and use the spell check to check for typos. Also note that one the translation has been applied, you will always find the most up to date copy of your index.po and index.mo in the http://rufus.akeo.ie/locale/ directory from the site. For instance, the index.po for French can be found under http://rufus.akeo.ie/locale/fr/LC_MESSAGES/.

Finally, as the web page gets updated with new content, the translation may need to be updated as well. This is very easy to do however: Just open the latest index.po, then download the current index.pot and then go to CatalogUpdate from POT file and select the updated index.pot. Poedit will then let you know the strings that need to be edited. I will of course alert you when an update may be required.

Editing an existing homepage translation

If you want to edit an existing homepage translation:

  • Download and install the latest version of Poedit.
  • Navigate to http://rufus.akeo.ie and select the language you want to edit in the menu (even if the page was already displayed in the language you want). The URL will change to something like http://rufus.akeo.ie/?locale=xy_XY
  • Remember the xy part and now navigate to http://rufus.akeo.ie/locale/. You will see a bunch of directories, including an xy one.
  • Now navigate down to this directory until you find the files index.po and index.mo. Download both these files to your computer.
  • Launch Poedit, select Edit a Translation and open the index.po file you just downloaded (or if you set Poedit to automatically open .po files, double click on it).
  • It's also usually a good idea to reapply the current .pot at this stage by:
    • Downloading the very latest index.pot (just click this link and select Save As in your browser
    • Going to CatalogUpdate from POT file and select the index.pot you just saved
  • Edit the translation and save it, then sen send me both the updated index.po and index.mo.

(Optional) Installing ResEdit

IMPORTANT: According to MalwareBytes Anti-Malware, the resedit executable contains unwanted AdWare, so you are advised NOT to download it. Unfortunately, the only alternative, besides looking at the .rc with a text editor is to download Visual Studio 2013, which is FREE, but which will send you back between 4 to 8 GB... If you want to install Visual Studio 2013, please see here and ignore the paragraphs below.

ResEdit, or a .rc editor, is required if you want to find out the IDs you should use with some of the commands below, in case you cannot deduce them from the ones that are already listed in the rufus.loc file (not all of them may be listed there). It allows you to visually identify an ID by looking at UI template used by Rufus. To setup ResEdit:

  • Download ResEdit from http://www.resedit.net/ and extract it to C:\ResEdit\. Make sure to download the 32 or 64 bit version according to your platform. Note that, unlike what is specified on the ResEdit download page, you do NOT need to install the Windows 7 SDK, as we take care of this in the next step.
  • Download the MinGW includes and save the file in C:\ResEdit\.
  • Navigate to C:\ResEdit\, then right click on the include.7z you just downloaded and select "Extract Here":
  • After the extraction is complete, a new include directory should appear:
  • Launch ResEdit. If you see the following dialog, click Cancel.
  • You should now see the following:
    Select Yes.
  • Navigate to the directory you extracted the include files or just type C:\ResEdit\include:
Once you have done all of the above, ResEdit should be properly configured to view RC files.

(Optional) Finding a control ID with ResEdit

With ResEdit, you can easily find out the ID of any UI control you may want to move or resize, as not all controls are listed by default in the rufus.loc file. You can also use it to confirm that the ID you used for a localization command is associated with the right control.

To identify the ID of a control using ResEdit:

  1. If you haven't done so already, download rufus.rc and resource.h by clicking these links, and save them in the same directory (e.g. C:\ResEdit).
  2. Launch ResEdit, select FileOpen project... and open rufus.rc. The resource tab will now be populated on the left hand-side.
  3. Reduce the "RCDATA" item by clicking on the black arrow (this won't be needed) and look under the Dialog section. There will be a list of IDD_#### entries, and each one of those represent a dialog that contains UI control. These are the same entries you find listed with the group (g) command.
  4. Click on the IDD_#### entry of the dialog you are after. For instance, if you want to find the ID of an element belonging to the main Window, you should click on IDD_DIALOG. The template for the dialog will then be displayed.
  5. Now you can click on the UI element you are interested in modifying. If you do that, under the Properties tab appearing on the left, the ID for element will be listed. This is the ID you should pass the to the loc command.
For instance, if you want to move the Advanced Options button (white arrow), you should click on the button to have it highlighted, and then lookup at the ID property on the left (red circle): This tells you that the ID to use with the t, m or s commands is IDC_ADVANCED.

Using this information, if you want to accommodate for the translation of the text Format Options being longer than the English version, you can add the line m IDC_ADVANCED +36,0 (in the g IDD_DIALOG section, which will move the advanced options button 36 pixels to the right, so that the end result looks something like this:

Note: In ResEdit, you will see a "T" button on the main dialog, next to the log button, but you shouldn't worry about it. This is a button that I use during development to test code that is not yet ready for primetime, but that button will never be shown on a release. As such, you should act as if the "T" button wasn't there.