% language=us runpath=texruns:manuals/musings \startcomponent musings-names \environment musings-style \startchapter[title={What's in a name}] \startlines \setupalign[flushright] Hans Hagen Hasselt NL May 2019 \stoplines \startsection[title=\TEX] I sometimes wonder how much the fact that English is the language mostly used in programming environments influences the way one looks at a program. For instance, translating the names of an operating system \quote {windows}, an image manipulation program \quote {photoshop} or a text editing program \quote {wordperfect} to Dutch makes them sound kind of silly to me. The name can influence what you buy or are willing to use. These are examples of commercial programs but there are plenty examples of such naming in the open source universe too. I write this in my own bad English so that other non|-|English speakers can try to do a similar exercise. So, when I was reading an article about \CPU\ technology called \quote {thread|-|ripper} and after a while also saw the usual talk of yet another bunch of technologies marked as \quote {stack} and translated that to Dutch it again made me feel somewhat puzzled about such names. From there it was a small step to wondering about programming languages, and especially the ones I use: \TEX, \METAPOST, and \LUA. One can even wonder to what extent the quality of programming is influenced by the names of commands and keywords. A language name \quote {\BASIC} sounds less serious than \quote {C}. A meaningless \quote {\LUA} sounds different than \quote {\PYTHON}. Does using your native tongue make a difference? In Dutch and German words tend to get long. When I look at my French dictionary it is rather thin, but we might need accented characters. Words in a language like Polish can differ per usage. What if German or Spanish had been chosen as the language for what is now the United States? How would we perceive programming and what would look natural to us? \stopsection \startsection[title=\TEX] The \TEX\ language comes with a lot of so called primitives built in. Many of these relate to concepts in the program. For instance, a movement in horizontal or vertical direction that can stretch or shrink depending on what the boundary conditions demand, is called \quote {glue}. When discussing this in Dutch the word \quote {lijm} can be used and after seeing it a few times it might sound ok. We can probably use \quote {elastiek} (\quote {elastic}). This internal concept is actually represented to the user via the interface name \quote {skip}, take: \type {\abovedisplayskip} and \type {\belowdisplayskip}. Here the word \quote {display} refers to math that gets vertical space around it and is normally typeset in a somewhat larger way compared to \quote {inline}. The word \quote {skip} can be translated to \quote {sprong} (translated back we could as well get \quote {jump}). But how to translate \quote {display}? An internet translation can be \quote {tentoonspreiding} but apart from it being a long word it sounds pretty weird for something math. The combined translation of such a command will not work well I think so probably complete different words has to be made up to describe these quantities. Taco suggested that {\en \typ {\bovenuitstallingkortesprong}} might work for \type {\abovedisplayshortskip} but luckily no ordinary \TEX\ user will not set such parameters in a document source. In \CONTEXT\ we use the somewhat typographical term \type {wit} or \type {witruimte} for vertical spacing. Some parameters like \type {\baselineskip} can be translated directly to the Dutch \type {\regelafstand} which is a proper typographical term (\TEX\ has no concept of line height). Okay, it can become messy when we translate \type {\lineskip} by \typ {\interlinespace} as that could be seen as the baseline skip too (\quote {interlinie} comes to mind). Quite a mess. In many cases we probably would not handle the \type {skip} part in parameter: \type {leftskip} could become \type {\linkermarge} and \type {\parfillskip} can become \typ {\paragraafuitvulling}. Another concept is that of \quote {penalty}, or in Dutch \type {boete}. It's probably harder to get the combinations right, simply because they have no typographical meanings, they're more process controllers. I fear that most translations would sound pretty weird to me. So, how do they sound to a native English speaker? Words like \quote {club} or \quote {widow} can be translated to their Dutch gender neutral counterparts \quote {wees} and \quote {weduw} but how strange does {\nl \typ {weduwboete}} sound? The counter variables are easier. When they end on \type {char} that can become \type {karakter}. However, translating \type {\escapechar} with \type {\ontsnappingskarakter} might look a bit weird, but as that one is used very seldom, a weird one doesn't matter much. Operators like \type {\advance} and \type {\multiply} can become \type {\verhoog} and \type {\vermenigvuldig} which doesn't sound that strange in this context. There are \quote {rule}s and \quote {box}es. The first one can be translated to \quote {lijn} which sounds quite good. But what to do with the second one. We can use \quote {blok} (which translates back to \quote {block}) which is good when we start stacking things, but also with \quote {doos} which is more literal but sounds to me somewhat silly: \typ {\hdoos {whatever}}. I'm not so sure if I would have seen that in a book about \TEX, I'd looked further into the language. The optional keywords \quote {width} etc. can be translated well into \quote {breedte} etc., so no problem there. There are all kinds of very peculiar aspects that need a translation. For instance the (for new users intimidating) primitive \type {\futurelet}. The \quote {future} part is no problem as \quote {toekomst} isn't that weird but the \quote {let} will for sure become something very long in Dutch, so we end up with {\nl \typ {\toekomstigetoekenning}}, but seeing that long one, we can consider {\nl \type {kijkvooruit}} as reasonable alternative. It definitely leads to more verbose programming. Expansion is a tricky one. I have no clue what would make nice translations of the primitives \type {\noexpand} and \type {\expandafter}. The Dutch \quote {uitbreiden} simply is not sounding good here. Taco Hoekwater came up with a good alternative \quote {uitvouwen} for \quote {expand} and I like that one because we then can let bookmaker (a somewhat dubious term in itself) Willi Egger organize a workshop in unfolding (instead of folding). Talking of \quote {macros} is less a problem because there is no Dutch word for it. There are more words with no real translations: \type {\kern} for instance probably would need some thinking but there might be a typographical equivalent that can be used. The \ETEX\ and \LUATEX\ extensions introduce new names, like \type {\detokenize}, \type {\boundary} and \type {\attribute}. The first one is hard to translate because again it relates to an internal concept: \type {tokens}. I get the feeling that translating each occurrence of \type {token} by \type {teken} kind of makes everything look less serious. To strip something from its special meaning, which is actually what \type {\detokenize} does can give weird translations: {\nl \typ {\onttekenen}} is not really a Dutch word so a complete different one has to be found that describes what happens, like \type {\ontwaarderen}. On the other hand, \type {\boundary} and \type {\attribute} can translate directly into \type {\grens} and \type {\attribuut} where the last one sounds mostly okay. Just to get you thinking: how would you translate \type {\looseness} (\type {losheid}, related to linebreaking), \type {\deadcycles} (\type {\zinlozelus}, in the perspective of building pages), \type {\pretolerance} (again line break related, here we can use something \type {tolerantie}) and \type {\prevgraf} (which is actually even in English a weird one but hardly used anyway, so Taco likes {\nl \typ {voorloopregels}})? The easy ones are \type {\omit}, \type {\meaning}, \type {\number}, maybe even \type {\mark}. The for users often difficult to grasp \quote {catcode} can be simplified to \quote {code} which is proper Dutch. Concepts like \quote {align} translate well to \quote {uitlijnen}. Short ones like \type {\wd} could be a problem but any two letter combination can look bad, so \type {\br} could do. In the same fashion \type {\def} is ok as it is also the start of the Dutch \quote {definitie}. Mathematical terms like \quote {text}, \quote {script} and \quote {scriptscript} can be confusing: \quote {tekst} will do but \quote {schrift} is strange. Conditionals are not the hardest part: \type {\if} becomes \type {\als}, \type {\else} becomes \type {\anders} and \type {\or} is \type {\of}. However, turning \type {\ifcase} into \type {\inhetgevaldat} can be over the top. The \type {\every...} register variables can also be translated quite well, by using the \type {\elk} or \type {\elke} prefix. They are seldom seen at the user level so no real problem there. The \quote {group} related commands are easy as \quote {groep} is a good Dutch equivalent. Even \quote {global} operations translate well (\type {globaal}). A dubious one is \type {\font} because we can use {\nl \typ {\lettertype}} but it's not really a translation. The internet translations tend towards \quote {fountain} kind of things. The concept of \quote {discretionary} again needs a decent typographical translation although \type {\hyphenation} can become \type {\afbreking}, translating \type {\discretionary} needs some imagination. The concept of \quote {leaders} is again something that can best be bound to something more typographical because \type {\leaders} turned {\nl \typ {\leidinggevende}} is not an option nor is \type {\leiders}. The prefix \type {\un} as used in \type {\unhbox} can become \type {\ont} so that we get \type {\ontdoos} but I get the feeling that this one can be source of jokes. The more verbose {\nl \typ {\pakdoosuit}} (equivalent to \typ {\unpackbox}) would do better. To translate \type {\unvcopy} into the gibberish {\nl \typ {\ontdoosdecopie}} is simply ridiculous and {\nl \typ {\copieeruitgepaktedoos}} is a bit long. The \type {\lower} and \type {\raise} on the other hand translate well to \type {\verlaag} and \type {\verhoog}. Keeping \type {\relax} untranslated sounds ok to me, because \type {\ontspan} really makes a language silly. \stopsection \startsection[title=\METAPOST] The \TEX\ language is driving a macro system while \LUA\ is a procedural language. The \METAPOST\ language sits somewhere in between. It is still expanding all along but it looks a bit more like a programming language with its loops, assignments, conditionals, expressions and (sort of) functions. As a consequence some of what I mentioned in the previous section applies here. Translation of for instance \type {truecorners} into \type {echtehoeken} can give the language a bit less serious image. Words like \type {linejoin}, \type {linecap} and \type {miterlimit} relate directly to the \POSTSCRIPT\ language so translating them also relates to translated \POSTSCRIPT. The \type {primary}, \type {secundary} keywords can be nicely translated into serious counterparts \type {primaire} and \type {secundaire} which are words that are not really of Dutch origin anyway. The \type {precontrol} and \type {postcontrol} words relate to concepts but even there the verbose \type {controlepuntvoor} and \type {controlepuntachter} could do. However \type {punt} as translation for \type {point} can be confusing because we also use that for \type {period}. Translating \type {controls} and \type {curl} needs some imagination. Words like \type {tension} becoming \type {spanning} is still acceptable soundwise. However: \starttyping voor i=1 stap 2 tot 10: ..... eindvanvoor; % or: eindvoor \stoptyping Kind of interesting is translating \type {if} into \type {als} because \type {fi} then becomes \type {sla} which is \quote {lettuce} or, when see as verb, \quote {hit}. The \type {true} and \type {false} keywords becoming \type {goed} and \type {fout} is no problem. Turning \type {atleast} into \type {opzijnminst} at first sight looks strange but actually I can appreciate that one. And {\nl \typ {tussendoortje}} as translation of \type {interim}, I can live with that one too as it sounds funny. Concepts like \quote {suffixes} need thinking but {\nl \typ {uitdr(ukking)}} or more literal {\nl \typ {expr(essie)}} for {\nl \typ {expr(ession)}} are okay. The {\nl \typ {expandafter}}, {\nl \typ {scantokens}} and similar keywords share the problem with \TEX\ that they relate to concepts that are hard to translate. The \type {redpart} and similar keywords could be translated into \type {rooddeel} but {\nl \typ {roodkanaal}} (meaning \type {redchannel}) might be better or maybe {\nl \typ {rodecomponent}}. As with \TEX\ grouping related keywords are no problem. A \type {pencircle} becomes \type {pencirkel}, \type {odd} becomes \type {oneven}, \type {reverse} becomes {\nl \typ {omgekeerd}} (or {\nl \typ {andersom}} or {\nl \typ {tegengesteld}}). For \type {length} we use \type {lengte}, and so on. All these sound professional enough, just like \quote {corner} related keywords becoming \quote {hoek}, although there a clash with \quote {angle} is possible. I'm less sure about \type {clipped} becoming {\nl \typ {afgeknepen}} or {\nl \typ {begrensd}} but \type {bounded} then needs some thinking as these all are more or less the same. The concept of \quote {stroke} maps onto \quote {tekenen} or \quote {vegen} but lucky us that one is not really used, contrary to \type {draw} that can map onto \type {teken}, while \type {fill} and \type {vul} match well too I guess. The transformations are no problem but I'd use a directive instead: \type {rotated} or \type {roteer}, \type {slanted} or \type {schuin}, \type {scaled} or \type {schaal}, and \type {transform} or {\nl \typ {transformeer}}. As you can see, these have a reasonable word length too. The concept of a \type {picture} is known in Dutch as \type {plaatje} or \type {tekening}: not an easy choice. Using \type {kleur} for \type {color} is no problem at all. A coordinate \type {pair} becomes a \type {paar}: close enough not to give subjective side effects. The \type {inner} and \type {outer} keywords translate well to \type {binnen} and \type {buiten} but in code it might look a bit strange. So, in general, the translated commands are not that weird but still a graphic defined in Dutch keywords instead of English to me might look less serious. \stopsection \startsection[title=\LUA] We now arrived at a more traditional programming language. The \LUA\ language only has a few keywords. I suppose that it's just a matter of time before one gets accustomed to \typ {als ... dan ... anders ... eind} instead of \typ {if ... then ... else ... end}. The loops also translate rather well: \typ {zolang ... doe}, \typ {herhaal .. totdat}, \typ {voor ... in ... doe ... einde} are all not that verbose. Also, with proper syntax highlighting they stand out and become abstract words. But because examples for kids are normally in Dutch, using a Dutch programming language might give a toy language feeling. The \type {local} directive is a bit of a problem because it should be \typ {lokale variabele} in order to sound ok in a sentence. The \type {goto} should become \type {ganaar} which is also two words with no space in between. The \type {function} keyword can become \type {functie}. A \type {coroutine} is a challenge (also conceptually); we do have \type {routine} but how about the \type {co} part? Because \LUA\ is such a clean language it doesn't really end up bad. In \CCODE\ there are some more issues due to the abbreviated \type {struct}, \type {int}, \type {char}, \type {enum} and \type {typedef}. A literal translation of \type {void} to \type {leegte} to me sounds a bit strange. What to do with \type {unsigned}? Coming up with something (short) Dutch for \type {return} is not easy either. Translating \type {switch} into \type {schakelaar} looks like a bad idea but after consulting Taco using \type {keuze} came up. The \type {break} then can be \type {klaar} which roundtrips to \quote {finished} and \type {default} can be \type {anders} which roundtrips to \quote {otherwise} which is indeed what some languages provide.. But, there are programming languages out there that have plenty keywords and that are more challenging. But as I'm a happy \LUA\ user I don't have to worry about them. \stopsection \startsection[title=Conclusion] Looking at a program source in Dutch the general feeling probably will be different. A low level bit of \TEX\ is the worst. For \METAPOST\ it's bearable and for \LUA\ it is kind of okay. But in all cases, I'm not convinced that it would give me the same feeling. The abstraction of the language due to it not being my native tongue makes a difference. This problem is not much different than what we have with popular music and songs: for non|-|native speakers it's basically sounds, but for a native speaker it is more clear when nonsense is sung. The same can happen to me with movies, where watching some scandinavian series is different from watching a Dutch one. In the last case one picks up different nuances, not necessarily for the best. But it can be worse: post synchronized (audio) translations can be pretty unbearable and might compare well to programs translated to for instance Dutch. So let's not discuss the way Germans would deal with this. \stopsection \startsection[title=Side notes] We now see monospaced fonts showing up that provide ligatures for e.g.\ \type {<=} and I've seen examples where ligatures kicked in for \type {fi}. One can wonder about that but ligatures are definitely something to keep in mind when translating. The \CONTEXT\ macro package is normally used with the English user interface. But the design is such that one can provide different ones too; after all it started out Dutch. It is beyond the scope of this musing to discuss the problems with translating typographical concepts between languages, especially when there are no distinctive words. But it can (and has) been done. \stopsection \stopchapter \stopcomponent