Localization Guidelines for Your User Interface
When delivering your product in foreign languages, it is important to consider how the user interface will appear to users around the world. While there are no hard-fast rules, the following suggestions provide some guidance in facilitating localization in regard to your user interface:
- Consider differences in length for text strings Many languages use different amounts of space to convey the same meaning, therefore, when creating your application, you should consider the different lengths of the text strings for the language your application will be in. An average of 30% more space should be added for any text. Depending on the language and the phrase, the localized string might even require twice as much space.
- Use generic images and icons Bitmaps that are culturally neutral and that do not contain anything that must be localized are ideal.
- Use text that can wrap With labels for such controls as radio buttons and check boxes, it is important that you set the appropriate property that makes it possible for the text to wrap. Localization vendors often cannot change the properties of radio button and check box labels. If you do not make it possible for the text to wrap and the translation does not fit on one line, the localizer's only alternative is to omit some of the text.
- Add one extra line per variable When variables are used in UI strings, localization usually requires extra space. As a rule of thumb, one line per variable should be added to the text box so that there is enough space for the localized text. For example, the translation of a sentence that does not contain variables might require the entire first line of a text box. Where there is a variable inside of the sentence, the inserted text for the variable would extend the sentence into the second line. Allocate enough space for this spillover so that it will still be readable.
- Avoid hiding or overlapping controls UI controls such as buttons or drop-down lists should not be placed on top of other controls. Sizing and hotkey issues with hidden controls usually are found through testing, which might not be done during localization. In this case, the UI is not localizable because the button size cannot be extended to the length required for the translation without rearranging the button positions. Rearranging button positions can be costly and makes the UI inconsistent among languages.
- Avoid hard coding localizable string elements Because localization vendors often don't work with the source code, hard coded strings are usually only found through testing. For example, there might be a string in a resource file without a period at the end of a sentence because the period is added in the code. Because they don't see the code, translators might assume that this is a mistake and end the translation with a period. The result would be localized versions that have two periods at the end of the sentence. It is best to avoid hard coding all localizable string elements to save time for localization, build and test teams.
- Avoid using controls within a sentence You might want to place a UI control within a sentence. For example, you might want to give users a drop-down menu to make a choice within a sentence. This practice is not recommended, because to localize a sentence that includes UI controls, the localizer often has to either change the position of the controls (if possible) or be content with an improper sentence structure. Also, the UI controls are often drop-down combo boxes that are comprised of multiple controls. Moving and aligning these can be error-prone.
- Avoid placing button text into a string variable Text on a button should never be dynamically linked onto the button from a string variable but should be placed on the button itself as a property of the button. Button sizes usually have to be adjusted to fit the length of the translation on it. Localizers have no way of telling which strings in the string table end up on which button at run time.
- Remove unused strings Unused strings and dialog boxes should be removed from the source, so localizers do not waste time localizing them.