# Multilingual text with if statement

I'm working on a document in LaTeX and I would like to have multiple language versions. I could just copy everything and translate, but this would lead to multiple versions that I would have to update individually every single time.

What I want is that I specify which language I want to compile (or perhaps it always compiles all the languages, so every time I run it saves for instance an english, dutch and german version). And then it only prints that language. I was thinking of something along the lines of:

\languageversion{english} %this could be changed for language specification

\begin{document}
...
\dutch{some dutch text here}
\english{some english text here}
\german{some german text here}


So when I select english, only the english part would be printed. This way, if I would change the layout I don't have to do this for multiple versions, but only in one.

Is this possible?

-

## migrated from stackoverflow.comJun 16 '12 at 18:40

This question came from our site for professional and enthusiast programmers.

possible duplicate of Is it possible to keep my translation together with original text? –  Jake Jun 16 '12 at 19:13
This can work for very small snippets of text. For longer passages or an entire document maintenance would be very difficult. –  egreg Jun 16 '12 at 19:22

Here's a way, but I don't think this can really be useful for long texts.

\documentclass{article}
\usepackage[dutch,ngerman,english]{babel}

\makeatletter
\newcommand{\declarelanguage}{\@dblarg\@declarelanguage}
\def\@declarelanguage[#1]#2{%
\long\@namedef{#2}{%
\edef\@temp{\string#1}%
\ifx\@temp\languagename
\expandafter\@firstofone
\else
\expandafter\@gobble
\fi}%
}
\makeatother

\declarelanguage{dutch}
\declarelanguage[ngerman]{german}
\declarelanguage{english}

\begin{document}

English

\dutch{some dutch text here}
\english{some english text here}
\german{some german text here}

\bigskip
\hrule
\bigskip

German

\selectlanguage{ngerman}

\dutch{some dutch text here}
\english{some english text here}
\german{some german text here}

\bigskip
\hrule
\bigskip

Dutch

\selectlanguage{dutch}

\dutch{some dutch text here}
\english{some english text here}
\german{some german text here}

\end{document}


This will use the active language (according to babel rules). The \declarelanguage has an optional argument: a string that matches the babel language name. Using this it's immaterial what name you use; for example you could say

\declarelanguage[english]{EN}


and use \EN{English text} for inserting the English text. Take your pick; for German it's necessary.

Note: there's a strange babel feature: the language string maintained by \languagename has its first character of category code 12, that's the reason for the mysterious \edef\@tempa{\string#1}, which make your given string agree with babel's opinion on the matter.

-
Thanks guys, you pointed me in the right direction! (I had searched before, without any results) Eventually I used the procedure from latex-community.org/forum/… Which is not perfect, but works for me! Cheers! –  user1460812 Jun 17 '12 at 9:22