As I've said before, context is king. If I don't know what I'm localizing or how the strings will be used, my translations will probably be wrong. That's why short strings are hard, and that's why strings with placeholders can be tricky too.

Placeholders are often used to build up a message from several pieces of data. Often times, part of the data will not be known until run time. Consider this dialog box, for instance:

Clearly, the developer knew what message needed to be conveyed. Just as clearly, when authoring this message, the developer couldn't know the actual name of the file that might be deleted. The solution is to create a message where the part that can't be known until runtime is indicated by a place holder:
Are you sure you want to delete '%1'?
Here, the %1 is the placeholder, and as you can see above, it is replaced by the actual file name at runtime.

To localize this correctly, I need to do two things:
1) Understand what the %1 will actually be replaced with at runtime. If I can't do this, my translation may be off linguistically.
2) Include the placeholder correctly in my translation. If I don't do this, many interesting things can happen.

In the next few posts, I'll show several different types of placeholders and explain what can happen if a mistake is made during localization. I'll also try and give recommendations on how strings with placeholders can be authored to help localization, tips on how a localizer might figure out what the placeholder is used for, and maybe even show a few strings that are made unnecessarily hard to localize precisely because of poor use of placeholders.

This posting is provided "AS IS" with no warranties, and confers no rights.