Something i've always wondered, and I can't find any mention of it anywhere online. When a shop from, say Japan, writes code, would I be able to read it in english? Or do languages, like C, php, anything, have Japanese translations that they write?

I guess what i'm asking is does every single coder in the world know enough english to use the exact same reserved words I do?

Would this code:

If (i < size){
        case 1:
            print "hi there"
            print "no, thank you"
} else {
    print "yes, thank you"

display the exact same as I'm seeing it right now in english, or would some other non-english-speaking person see the words "if", "switch", "case", "default", "print", and "else" in their native language?

EDIT - yes, this is serious. I didn't know if different localiztions of a language have different keywords. or if there are even different localizations at all.


um is this serious? yes, the keywords are still english.

Jan Gressmann
But they don't have English meaning. It doesn't matter if your are native speaker, you can't tell to C `a = ( b if a < b otherwise a);` you have to type: `a = a < b? b : a;`. In the other hand, ` = ? : ` doesn't mean much in English. Is the programming language you learn.

I believe that since most programming languages have been written in English speaking countries they are all in English, so to answer your question yes.

Jeremy Reagan
I'm not sure that's true at all, but most programming languages are written for an English audience. In fact, if you look at the credit list for almost any recent language you'll find names from across the globe.
Marcus Downing
@Jeremy Reagan: I don't think so: PHP comes from Sweden/Israel, Python from the Netherlands, Ruby from Japan, Lua from Brazil, Ocaml from France, Erlang from Sweden etc. The world is bigger than you think!
I stand corrected. I was mostly talking about the plethora of MS languages (Since I'm an MS programmer)
Jeremy Reagan
+2  A: 

i've seen VBA translated into spanish-like commands. it's one of the ugliest things ever seen. i would be ashamed to have something like this on my computer.

PD: i happen to think that spanish is a much nicer language than english; but translating is WRONG

I don't know if it is still the case with newer ms-office versions, but the older ones couldn't execute scripts that were written for a different localization.
The **only** way that English is "better" than Spanish is that English has a larger vocabulary, so it's a little shorter to write in. I would hate to learn English as a second language; Spanish is much more logical!
Chip Uni
Spanish (as most languages) has a vastly larger vocabulary than English; but English makes it easy to invent new words and still be understood. That makes it very succinct and easy to use on technical issues. Also, English is much more imperative and favors simple sentences (if anything, to avoid ambiguity), maybe that makes it more 'natural' for procedural programming. Also note that I would never say that English is "better" than any other language; but BASIC is based in English, translating it results in an unreadable mess.
+8  A: 

The programming language defines keywords and standard class names, and it's best practice to give user defined types, variables and functions also English names (as a non-native speaker I can tell ;-).

So yes, if all is well, you'll be able to read the code.

However languages like Java and Perl allow the full Unicode set for identifiers, so if somebody writes his class names in Kanji, you'll likely have a problem.

Update: For Perl there's a joke module that allows you to write Perl in Latin. But it's really just that, a joke. Nobody uses things like this seriously.

Second Update: The idea of localized programming languages isn't that ridiculous. Excel's macro language is localized, but luckily it's stored in one canonical language (English) in the file, so the localization is just a layer on top of the normal thing. Such things only make sense for small "programs", for "real" programs it becomes hard to maintain.

+1  A: 

It would be pointless, IMHO, to i18n a language syntax. It would just kill any sort of portability.

The only exception are educational languages, such as LOGO. They were designed for ease learning, so portability is not an issue.

Mike Hordecki
When you have a larger audience, such as people who write down formulas in Excel or creating small effects to their presentation you have to consider implementing i18n for "reserved" words...
+3  A: 

Well, As others pointed-out, the keywords and system calls would likely remain in English.

However, understanding the keywords of the language is only a small part in understanding the code. Variable names, function names and comments all risk being in the native language of the author.

Edit: I just flashed-back to my youth where I went in the mapping tables of my TRS-80 built-in BASIC to switch the keywords to French. I could change all the keywords but I couldn't make any of them larger. Made for funny programs.

Francis Beaudet
Indeed. "We'll just use [insert local language] for everything from variable names to comments - it's just a tiny app, who'd change it?" Several years later, elsewhere: "Yes, there ARE comments. If I only knew what '// Meg tudom enni az üveget, nem árt nekem' means..." (lang changed for emphasis)
I remember in college someone had gone into DOS and changed some of the commands and messages to be obscene, and it still worked
+30  A: 

Imagine the possibilities of a localized C++ standard:

si (i <size) {
     cambiar de
         caso 1:
             escriba "Hola";
         por defecto:
             escriba "no, gracias";
) de otra manera (
     escriba "sí, gracias"

The mind boggles...

wow, this is hilarious.
Funniest (and scariest) thing I've read today.
I'm sure that somewhere in the world someone has a header that defines a bunch of macros to do something like this (obviously, the multi-word keywords would have to use something like underscores). At one point it was fashionable in some circles to define macros to make C look more like Pascal.
Michael Burr
@Mike. I did that for fun. Create pascal like using C.@Kluge. Well.. that would be true if "else" would be "otherwhise" . Btw. I haven´t realize until today that "switch" means "change". I have always though of it as "ligth switch" something to turn something on...
Actrually for me the word "switch" is used only in a programming languange context. :P
That was really weird!
Juan Pablo Califano
Take a look at Lexico: - programming language in Spanish.
looks like normal C++ to me ;-)
Nic Wise
I would actually learn a foreign language faster this way. For example, I just learned a couple of Spanish words from this example!
Now try it in a language where 'if' is a different word for singular/plural or if the thing is masc/fem.
Martin Beckett
+13  A: 

In the Java language some methods must be named (at least partially) using the English language because of the JavaBeans convention.

This convention requires that a property X be established via a pair of getX() and setX() methods. Here in French-Canada, where some developers are obliged to code in the French language this leads to the following travesty:

interface Foo {

  Color getCouleur();

  void setCouleur(Color couleur);
Oh cripes! Bureaucracy wins again! :(
yeah, in French schools they teach you to to it that way to. That's so suck that the students never use what they did in class to code in the real world and quicly lean by themself to write it in plain english.
At my uni some lecturers used Finnish in example code, and the result was generally even more awkward, even if I understood their principled reasons for that. Fortunately, "in the real world" that's almost unheard of (at least in the private sector). English FTW (as far as programming goes).
@Jonik: At least you didn't have to argue about ASCII/extended charset. In some places (here), there used to be a large debate on naming your identifiers a) in English, b) in Czech without accents, c) in Czech *with the accents* (most of which you can't type without Czech keyboard layout, wonderful for maintainability by anyone else).
@Jonik: Oh. Goes to show how much I know about Finnish language ;) Yup, much easier to code in English when the the team is one Czech, one Turk, one Bulgarian and one Dutchman :D
+86  A: 

If I understood well the question was: "does every single coder in the world know enough English to use the exact same reserved words I do?"

Well.. English is not the subject here but programming language reserved words. I mean, when I started about 10 yrs ago, I didn't have any clue of English, and still I was able to program simple things by learning the programming language, even when I did not knew what they meant ( in English ). As a matter of fact this help me to learn English.

For example. I know to do an "iteración" ( iteration of course ) I had to write:

 for( i = 0 ; i < 100 ; i++ ) {}

To me the "for", the ";" and the "++" where simple foreign words or symbols. Later I learn that "for" meant "para" and "while" meant "mientras" etc. but in the mean time I did not need to know english, but in my case what I needed was to know "C".

Of course when I needed to learn more things, I had to learn English, for the documentation is written in that language.

So the answer is: No, I don't see if, while, for etc. in my native language. I see them in English, but they didn't mean to me any other thing that they meant for the for the programming language in turn.

Is like switch statement in bash: case .. esac. What Is "esac"... for me the end of the switch statement in bash.

I guess that's what we call "abstraction"

Great response -- you nailed it. Your command of English is impressive.
this was the kind of explanation i was looking for. thank you so much.
By the way, 'esac' is just case backwards. I couldn't tell if you pretended not to know to make a point or not, but I could see how that would be confusing for non-english speakers.
For sure, as fi is of if, but, at some point, the only meaning they have is "you end a switch statemente by writing 'esac'" ... Is not they are confusing or not, but they don't mean anything in english. But they have a meaning in C or bash, or pascal. That's the point. We learn the programming lang.
i love you oscar :p
Click Upvote
Note hat in Excel, that macro are translated in the local language, and "if" becomes "si" in French, which make the tools absolutely unusable.
You were always going to get the best answer from a non-native English speaker. I'm Scottish and learning English was difficult for me too ;-)
+1 When I started programming I did not even know how to pronounce goto properly. But later, when I learned what it meant, it put a smirk on my face.
Hamish Grubijan
+1  A: 

Don't make fun of this. Some years ago, Microsoft had announced G# (German Sharp) - C# with German keywords and API. Of course, it was an April Fools joke, but the entire site about that looked so real and professional (and was on Scary.

At work, we use two field bus systems, both developed in German-speaking countries, which have a scary mix of German and English for identifiers, including some lovely false friends. It's a mess.

No, English keywords and identifiers are fine. Though some might argue if it should be Color or Colour :)

+1  A: 

I read a lot of code, but the problem always is at variable/method names and comments, if they are commenting their code on their own language, using a language special characters like Japanese or Cyrillic, we are in trouble! but the keywords I think they will stay in English as they are.

+2  A: 

In several VBA project I've worked on (yes, very early in my career) we had to detect the version of office which was installed on the user's machine and change the formulas used in the speradsheets accordingly.

As i program in portuguese"SUM" would have to be translated into "SOMA" and so on and so forth. I just can't imagine the necessary work to make this happen in several languages. Has anyone else suffered with this problem?

+8  A: 

As many people already pointed out, in most programming languages you just have to learn a few keywords, so it doesn't matter that much if they're in English (or a language other than yours, for that matter). It's just a symbol you associate with some construct. For instance, in VB you have "THEN", which in many C-style languages would be "{" and it doesn't make a big difference in readability (well, at least that's how I see it, being a Non-English native speaker).

But where things can sometimes get hairy, and where the choice of (natural) language matters is in naming identifiers. If the names of variables, functions, classes, etc, don't have a meaningful name for you because of a language barrier, following even the simplest code can be rather challenging.

I remember someone once gave me a short snippet of Actionscript taken from some blog. The names were in German and since I don't speak a word of that language, stuff could have been called var_123, var_562 or func_333 as well (and probably it would have been easier for me to remember the names or at least to have a chance of spelling them right without copying and pasting). Since this was a short, self-contained snippet, I used an online translator to give those vars and functions meaningful names in my native language (Spanish) and after that, everything was clear. The point is that the code was actually simple, but I was only able to make sense out of it without too much (unnecessary) extra effort just when I overcame the language barrier.

Since then, I've switched to using English for naming identifiers. Whether you like it or not, it's the "koine" for programming, engineering and generally technical stuff. Most of the APIs are written in English and so is most documentation (and probably the best resources you can find are in English as well). As a nice aside, it keeps your code more coherent with the code you're likely to be interacting with, and I think it tends to be more compact and succinct than other languages like Spanish (which otherwise would be my natural choice).

Of course, if you can't understand at least some English, the problem remains the same, so it's not a perfect solution. But, given a number of developers from many different countries, chances are that the common language for them to communicate (through code and of course other means) will be English. So, choosing English is perhaps the best option, even though it would be not the perfect solution to this problem.

Juan Pablo Califano
Yeap. A minor problem with this is when the coder does not how to proper write english vars names. The worst I've seen is "String employiNeim" hehe ( nahh just kidding ) but I've seen things really close to that before.
For a non-native English speaker, you have a surprisingly strong command of the language. Congrats, English is a very strange beast, even for us native speakers.
Nicholas Flynt
+1  A: 

AppleScript was once available in French and Japanese dialects. I do not know why it was withdrawn.

Chris Lundie
Probably because it was hard to share code in an Internet era... VBA was translated too. Bad idea.
+2  A: 

Generally speaking, most programmers adapt to the English form. I learned to program when I was 7 years old and only spoke Hebrew (which is right to left) and with no english, which made it quite a fascinating experience.

The problem you would usually get is with documentation, variables, and function names. I have seen my share of variables in other languages using english alphabet.

The only language I'm familiar with that actually got translated was good old Logo (still amazing to this day).

Shalom Uri,There is also the Hebrew Programming Language (HPL) on Sourceforge. Like LOGO, it's aimed at young computer users.
+3  A: 

Actually there are some Non-English-based programming languages (Wikipedia)

I'm Norwegian but I've allways used English for all code except output (ignoring some silly code from school). Actually I usually write everything in English and then translate it to my native language, using gettext (or something).

Stein G. Strindhaug
+1  A: 

When I was a kid we went to France, and in a museum we went to, I remember finding a display which showed you how to write computer programmes. The language was some kind of BASIC variant and I distinctly remember it using POUR instead of FOR, and so on. I was 7 years old and had only just learned BASIC, and it seemed completely natural to me that the French would have their own dialect like this!!

I guess it may have been LSE that I saw?

Luke Halliwell

I think WordBasic was localized. WordBasic was used to write macro's for in Word before VBA was used.

If I remember it correctly, only WordBasic written in the English version would execute on all localized version. If you would write a Dutch version, you could only execute it on a Dutch Word.

+2  A: 

Taking this to the next level, what about being able to substitute symbols?

After seeing languages like Brainf**k and Whitespace I thought of making a language like this: it'd be identical to C except you use closing braces to open, opening braces to close, swap the meanings of + and -, * and /, ; and :, > and <, etc.

The concept is nothing more than a gimmicky altered C compiler. But, like thinking of keywords differently, it challenges you to rethink some basic assumptions if you've never thought of such things before. Ex:

int foo)int i, char c( }
    int six = 2 / 3:
    int two = six + 4:
    if )i > 0( }
        printf)"i is negative"(:
hey, I like that smiley.
agh... my head hurts.
Stefano Borini
+1  A: 

Filemaker's scripting language is localized. The scripts (and data!) are stored in a terrible "sorta canonical" form.

So if you write a script in the American version, then open it up in the French version, all the keywords and built-in function names will be in French. But why won't it run?! Aha! The French version uses "," as the decimal point, and therefore to avoid ambiguity uses ";" to separate function arguments -- where the American version uses "." and "," respectively. This conversion you have to do yourself.

So you work through the incredibly bad script editing interface (you can't write scripts as text files) to fix all these things. It runs! Great! The results are all wrong! Oh no! Aha! The Jan-7-2004 date you entered in the American version is being interpreted as July-1-2004 -- apparently dates are not only displayed but stored in locale-dependent order. Am I kidding you? No.

[Note: Filemaker 8 and 9 may be sane -- I only ever worked with 3 - 7.]

Tom Future
Ouch! Sounds like you should post this to
+13  A: 

I really have not thought too much about programming in Japanese before, but here we go, using the question's code sample.

Using only the language statements in Japanese with the variables in English:

// In Japanese, it makes more sense to put the keywords/modifiers as
// postfix expressions rather than prefix expressions.
(i < size)か {
     (l[i])は {
} ない {
Adam K. Johnson
The dot commas to (;) I guess.. =D
José Leal
Click Upvote
Actually I was thinking that if you were able to code in Japanese you could use stuff like → 定 問 上 下 不 as special words, could you imagine a lisp in Japanese?(定 rember(→ (a lat) (問 ((空? lat) (引用 ())) (又 ...
+14  A: 

I'm having trouble finding references, but I'm reminded of three stories.

A Lisp hacker defends meaningless functions like "cdr" and "car" by comparing them to programming in your non-native language:

When Yukihiro Matsumoto ("Matz") started developing Ruby, he used english keywords even though he was writing all the documentation in Japanese!. There was no English documentation for Ruby for a couple years, and very few Americans using the language. But now it's a world-class language, and it the fact that it was born in Japan is only of historical interest. If the language had been using keywords in hiragana, it would have had a much more difficult time gaining popularity.

I read an essay once -- maybe someone else can find it, Google is no help today -- that suggested that translating keywords was misguided because the words aren't actually English-- they're jargon. Not only do (to use the examples above) para and pour not quite have the exact meaning that for has in English, to non-programmers the phrase "for loop" is jibberish. Even Americans have to learn a new meaning. So to translate the words's superficial meaning into another language is more like making a cross-language pun rather than actually being helpful.

+3  A: 

Since nobody's mentioned it yet: ChinesePython. Their quick start guide gives users experienced in Python an idea of what all the keywords are in ChinesePython. :-) (The sample programs are interesting reading, too.)

I'll cut and paste four lines from that list, just because I find them fascinating:

如 .. 不然 .. 否则 .. (if .. elif .. else ..)
只要 .. 否则 .. (while .. else ..)
取 .. 自 .. 然后 .. (for .. in .. else ..)
试 .. 失败 .. 否则 .. 然后 .. (try .. except .. else .. finally .. )

Note how the elses do not always translate to the same Chinese translation! (The else in the for loop has the same translation as the finally in the try block; this makes sense when you think about it.) Instead, the word is chosen in each context to be most meaningful to a Chinese programmer.

Chris Jester-Young
+1  A: 

I'm in a French team developing a software system in C#. Despite the fact that the programming language keywords are ostensibly English, I imagine that you would have great difficulty reading the code as all the function names, variables, code comments, database tables and columns, technical specifications, protocols and so on, are all in French, including those lovely accented characters ç, é, è, ù, etc. I'm not even certain if the system would even run elsewhere due to localisation bugs, such as relying on the comma to be the default decimal seperator.

Otherwise, WinDev is a popular programming platform in France, and its programming language WLanguage has keywords in either French or English, see and example here : link text

Patrick J Collins
+1  A: 

ahuehuae pseudo-code is like this to.. here is a pseudo-code from here (Brasil) :

se (j <= 10)
        para a de 1 até 10 faça
            b = 1 - a
        troque (j)
            caso 1:
                escreve "José Leal"
            caso padrão:
                escreve "Olá!"

enquanto (j > 10)
        escreve j++
    até (verdadeiro)

aehahu I think this is much more difficult.. however it is my native language.

José Leal
+6  A: 

You mean?

wenn (i < größe) {
        fall 1:
            drucke »Guten Tag!«
            drucke »Nein, danke«
} sonst {
    drucke »Gern geschehen«

Its mind boggling.

IMHO the non-English speaker are even in the advantage. Programming lingo and our natural language are separat. Whereas you English speakers overload native terms with technical terms. Doesn't this lead to dangerous confusions or missunderstandings sometimes?

you actually run into something where you can't decide which word to use. i.e. size or length?
"jedenfalls" could better be replaced by "anderenfalls" which comes closer to the original meaning.
Right, fixed! .
No. To give examples from JavaScript, some things I find confusing are: - inconsistencies in keywords: why `typeof` in all lowercase when `parseInt`, `toString`, etc. use at least one capital letter? - month numbering starting from 0 instead of from 1 - a test for equality being `==` rather than `=`
Robert L
+1  A: 

Your question is an interesting one with regard to Perl because it's syntax is designed to follow (English) natural language. I wonder if that makes it more difficult for non-English speakers...

Of course, Perl and Perlers refuse to play by conventional rules. Mad scientist Damian Conway wrote the Lingua::Romana::Perligata module which uses the black magic of source filters to allow you to write Perl in latin!

Michael Carman
I don't think so. The probe is that even though you know english, you cannot say while( cond ) jump_to: label ... to Perl. I mean, like a goto or something.
most of perl's 'natural language like' idioms like "open() or die()" are quite natural for me as a german speaker. i guess english and german are similar enough
+1  A: 

Here in Australia we still need to spell colour like color. However, I do find it annoying when other (Australian) developers, working on an Australian project, decide that internal variable names need to be spelt the american way.

+1  A: 

I am British and a problem we often run into is the American/British spelling clash. This often occurs with programming related terms such as Initialise() or Initialize(), Analyse() or Analyze() etc. This can (has) lead to problems trying to overriding methods, and is sometimes difficult to spot.

Since the framework (in our case C#) was designed by Americans, we found that it is best to be consistent and use American spellings. We even adopt Color.

We have a mix of nationalities in our development teams and most non-British people tend towards American spellings naturally.

+2  A: 

The only language I saw localized is Excel with its macros. If you try to sum a column using an Italian version of Office you have to write SOMMA(A1:A10) and not SUM. That's a shame.

By the way, just because it's fun, here's how your code should look like with Italian keywords:

se (i < size){
        caso 1:
            stampa "hi there"
            stampa "no, thank you"
} altrimenti {
    stampa "yes, thank you"
Andrea Ambu
+1  A: 

There are some languages that have translated keywords. Excel formulas, for example. If you write some calculations in a spreadsheet, this will be in your language.

Fortunately, this is not a general practice, and even non-English speakers like me thank God that there is a standard language for keywords :

  • it's easier to share you work.
  • it prevent documentation from becoming a bigger nightmare that it already is.
  • English words and sentences are usually short and syntactically pragmatic. In literature, Latin languages are much more beautiful, but for technical stuff, English rocks.

And where to stop ? Can you imagine a C in ancient Greek ?

Keywords must stay in one language, and well, it started with English, let it stay that way. This could have been worst (Asian language ?). And so we have to write methods and comments in English. Ok, more work for us, but at least the international code base stay congruent.

There is, however, one case where using native language method names and comments can be a good practice : in third world country. I'm going to Senegal in some months to manage a Django project. Senegal have a huge analphabetization rate, and therefor it's already great that they spead energy in improving they programming knowledge. French is the native language here, so it would be inefficient to force them to learn computing AND a new tongue at the same time.

BTW, that would be your code with French keywords :

Si (i < taille) {
    cas par cas :
        cas 1:
            afficher "salut"
            afficher "non merci"
} sinon {
    afficher "oui, merci"

Not that translating the keywords have nothing to do with translating the strings. Of course, we have "hi, there" translated in our language. European coders even tend to use I18N much more than American sot their service can reach a wider audience.

+1  A: 

in Italian

se (i < dimensione){
        caso 1:
            stampa "ciao"
            stampa "no, grazie"
} altrimenti {
    stampa "sì, grazie"

To confirm the worries of some previous poster I've seen a Fortran code with a macro include to translate all the keywords from English to French. Allow me not to continue on this.

I also had to work with a code simultaneously containing identifiers in Italian, German, English and French, not only because it was developed in many different places, but also because the main developer thought it was fun and helped him not to duplicate identifier names (of course, with a routine 2000 lines long....)

Stefano Borini
+1  A: 

Code with APL and you won't ask yourself the question :)

+6  A: 

SKTN Hindi Programming Language (HPL) is a high level programming language with the distinguishing feature of being in Hindi (primary language of India) developed by the Indian developer Shamit Kumar Tomar. The Hindi Programming Language has been developed to target the over 350 million Hindi speaking population.

The programs are compiled to Microsoft Intermediate Language (MSIL) that can run on any machine where .NET Framework 2.0 is installed.

Here's a simple HPL program to input time from user and greet him/her accoordingly:

कार्य खाली मुख्य ()      
  अंक समय       
  लिखें "Enter current time"
  पढें समय        
  अगर [ समय < 12 ]
    लिखें "Good Morning"
  वरनाअगर [ समय >= 12 और समय < 16 ]
    लिखें "Good Afternoon"
    लिखें "Good Evening"
  खत्म अगर
खत्म कार्य

Check out the project site for more details.

Thanks for mentioning it. I am the actual creator of Hindi Programming Language. Here is the direct link to it:
@shamittomar: Nice to see you here... :)
+1  A: 

I found this on Joel's site:

At a previous job, we had a set of C #define's for writing our code in French, such as:

#define si if
#define sinon else
#define entier int
#define caractere char
#define principal main
#define affiche printf
#define retourne return

entier principal(entier argc, caractere** argv)
  entier i = 0;
  si (i == 0)

  retourne 0;


I also heard that the Israel Army had developed a programming language with Hebrew keywords but never saw it personally.