Localisation of Programming Languages

Localisation is a technical term meaning the translation of software into foreign languages (German, Chinese, etc). This typically relates to a software’s interface: the translation of menus and text in dialog boxes into the local language. For example, if you set Greenfoot’s interface language to German, the “Edit” menu becomes “Bearbeiten”, Copy becomes “Kopieren” and so on.

Almost all programming languages have English keywords: if, while, etc. For a non-native English speaker, these keywords may well appear to be magic invocations, just as it would be to me if the keyword for “while” was a Chinese character. (One study suggests that the names for Java keywords are not very obvious for English speakers anyway, but at least they are in the right language!) In a block language like Scratch, there is the opportunity to localise the programming language itself: to translate the text in the blocks to the local language. The “change colour” block could become “Farbe ändern”. [Note: that one is picked from Google Translate, excuse any mistranslation] Is localising a programming language worthwhile?

I think the value of localising a programming language depends greatly on two things: the age group you are pitching your programming language at, and the control you have over the programming language and libraries. If you are aiming at six year olds then it is unlikely they will have had much chance to learn much English, and especially going outside their native character set would be confusing. (I believe that ScratchJr uses pictures for instructions partly to solve the localisation problem, but also to some extent to overcome reading weaknesses at such young ages.) The languages used in systems for this age group tend to be custom-designed, so the designers of the system have full control over the small language and libraries. So for small systems at young age groups, localisation is feasible, and there is a lot of benefit to be gained from it.

However, consider a system aimed at universities. For better or for worse, all major professionally used languages are in English. Java, C#, Python and the rest have English keywords, and (perhaps even more importantly) English APIs. Even if you provide a thin pre-processor to translate the keywords, you can’t feasibly do the same for all the APIs. There is no way you can translate the entire Java ecosystem and its documentation into another language (e.g. French). So even if you created an educational language, X, which can be fully localised into Arabic, is there much advantage to using it at a university when the students’ next language will be Java and they will have to learn English anyway?

Edit: I note that being able to put variable names in your local language is definitely useful for the programmers, but because the APIs are in English, there will still be a lot of English throughout any code; programmers will need to know English even if they don’t use it everywhere, and whether the keywords are localised doesn’t make a whole lot of difference as they are easy to learn over the long-term.


The older (and thus closer to professional programming) that you aim, the less sense it makes to try to translate the language. In Scratch 1.4, you can only use the blocks provided with the system, but in a language like Java, the core APIs (even List, String) etc are in English, and so are all the add-on libraries (e.g. to talk to MySQL), so you will have to know English to read the documentation and use the methods. Trying to localise programming languages at older ages seems to be a fool’s errand, and only protects students temporarily from the inevitable truth: to be a professional programmer, you need to learn English.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s