瀏覽代碼

Added translation preprocessor.

Kristian Schultz 4 年之前
父節點
當前提交
18cd3f7eb7
共有 12 個文件被更改,包括 237 次插入105 次删除
  1. 3 0
      .gitignore
  2. 58 23
      Makefile
  3. 0 0
      src/bib.bib
  4. 5 4
      src/config.tex
  5. 7 7
      src/content.tex
  6. 28 6
      src/faq/addThingsToProject.tex
  7. 49 37
      src/faq/doNotStore.tex
  8. 53 18
      src/faq/keys.tex
  9. 3 6
      src/faq/whatisgit.tex
  10. 2 2
      src/mainDe.tex
  11. 2 2
      src/mainEn.tex
  12. 27 0
      tools/translator.hs

+ 3 - 0
.gitignore

@@ -1,3 +1,6 @@
 out
 temp
 *.swp
+*.exe
+*.hi
+*.o

+ 58 - 23
Makefile

@@ -1,43 +1,78 @@
 
-bibliography = src/bib.bib
-controlSrc = src/config.tex src/content.tex src/translation.tex
-contentSrc = src/faq/doNotStore.tex src/faq/login.tex
-sources = $(controlSrc) $(contentSrc) $(bibliography)
-indices = out/mainDe.idx out/mainEn.idx
-dirs = out out/src out/src/faq
+bibliography = bib.bib
+controlSrc = config.tex content.tex translation.tex
+contentSrc = doNotStore.tex login.tex addThingsToProject.tex cloneProject.tex  keys.tex  newProject.tex  whatisgit.tex
+src = $(controlSrc) $(foreach x,$(contentSrc),faq/$(x)) $(bibliography)
+sources = $(foreach x,$(src),src/$(x))
+sourcesEN = $(foreach x,$(src),out/english/$(x))
+sourcesDE = $(foreach x,$(src),out/german/$(x))
+dirs = out out/german out/english out/german/faq out/english/faq out/german/images out/english/images
 
 all: out/GitRegeln.pdf out/GitRules.pdf
 
+test:
+	echo $(sources)
+	echo $(sourcesEN)
+	echo $(sourcesDE)
+	echo $(dirs)
+
 clean:
 	test -d out && rm -r out    
 
 
-out/GitRegeln.pdf: out/mainDe.pdf $(indices) $(dirs)
-	pdflatex -output-directory out src/mainDe.tex
-	cp out/mainDe.pdf out/GitRegeln.pdf
+out/GitRegeln.pdf: out/german/mainDe.pdf out/german/mainDe.idx $(dirs)
+	#pdflatex -output-directory out src/mainDe.tex
+	cd out/german && pdflatex mainDe.tex
+	cp out/german/mainDe.pdf out/GitRegeln.pdf
+
+out/GitRules.pdf: out/english/mainEn.pdf out/english/mainEn.idx $(dirs)
+	#pdflatex -output-directory out src/mainEn.tex
+	cd out/english && pdflatex mainEn.tex
+	cp out/english/mainEn.pdf out/GitRules.pdf
 
-out/GitRules.pdf: out/mainEn.pdf $(indices) $(dirs)
-	pdflatex -output-directory out src/mainEn.tex
-	cp out/mainEn.pdf out/GitRules.pdf
+out/german/mainDe.pdf: out/german/mainDe.tex $(sourcesDE) $(dirs)
+	#pdflatex -output-directory out src/german/mainDe.tex
+	cd out/german && pdflatex mainDe.tex
 
-out/mainDe.pdf: src/mainDe.tex $(sources) $(dirs)
-	pdflatex -output-directory out src/mainDe.tex
+out/english/mainEn.pdf: out/english/mainEn.tex $(sourcesEN) $(dirs)
+	#pdflatex -output-directory out src/english/mainEn.tex
+	cd out/english && pdflatex mainEn.tex
 
-out/mainEn.pdf: src/mainEn.tex $(sources) $(dirs)
-	pdflatex -output-directory out src/mainEn.tex
+out/german/%.idx: out/german/%.pdf
+	makeindex $@
 
-out/%.idx: out/%.pdf
+out/english/%.idx: out/english/%.pdf
 	makeindex $@
 
+
 src/bib.bib:
+	touch $@
+
+out/german/%.bib out/english/%.bib: src/%.bib $(dirs)
+	cp $< $@
+
+out/german/%.tex: src/%.tex $(dirs) tools/translator.exe
+	tools/translator.exe DE < $< > $@
 
-out:
-	test -d out || mkdir out
+out/german/faq/%.tex: src/faq/%.tex $(dirs) tools/translator.exe
+	tools/translator.exe DE < $< > $@
 
-out/src:
-	test -d out/src || mkdir out/src
+out/english/%.tex: src/%.tex $(dirs) tools/translator.exe
+	tools/translator.exe EN < $< > $@
 
-out/src/faq:
-	test -d out/src/faq || mkdir out/src/faq
+out/english/faq/%.tex: src/faq/%.tex $(dirs) tools/translator.exe
+	tools/translator.exe EN < $< > $@
+
+
+out out/german out/english out/german/faq out/english/faq:
+	test -d $@ || mkdir -p $@
+
+out/german/images out/english/images: out out/german out/english
+	test -d $@ || ln -s ../../images $@
+	touch $@
 
 %.tex:
+
+
+tools/translator.exe: tools/translator.hs
+	ghc -Wall $< -o $@

+ 0 - 0
src/bib.bib


+ 5 - 4
src/config.tex

@@ -19,7 +19,7 @@
 \ifthenelse{\equal{\myLanguage}{english}}{\renewcommand{\en}[1]{#1}\NewEnviron{EN}{\BODY{}}}{\NewEnviron{EN}{}}
 \ifthenelse{\equal{\myLanguage}{german}}{\renewcommand{\de}[1]{#1}\NewEnviron{DE}{\BODY{}}}{\NewEnviron{DE}{}}
 
-\input{src/translation.tex}
+\input{translation.tex}
 
 
 
@@ -59,7 +59,7 @@
 \usepackage{fancyhdr}
 \pagestyle{fancy}
 \fancyhf{}
-\rhead{\includegraphics{images/STG.pdf}}
+\rhead{\includegraphics{../../images/STG.pdf}}
 \lhead{\bf Universität Rostock\\Bereich Informatik}
 \lfoot{\small https://www.informatik.uni-rostock.de/it-service/}
 \cfoot{\small \thepage}
@@ -104,10 +104,11 @@
 \newcommand{\code}[1]{\colorbox{lightgrey}{\texttt{#1}}}
 \newcommand{\codeline}[1]{\par\colorbox{lightgrey}{\parbox{\linewidth}{\tt #1}}}
 \newcommand{\bobOnEarth}[2]{\textcolor{gray}{[bob@earth {#1}] (#2)\$}}
-\newcommand{\bobOnEarth*}[1]{\textcolor{gray}{[bob@earth {#1}]\$}}
-\newcommand{\home}{{\~{}}}
+\newcommand{\bobOnEarthX}[1]{\textcolor{gray}{[bob@earth {#1}]\$}}
+\newcommand{\home}{{\textasciitilde{}}}
 \newcommand{\projectDir}{{\~{}/myProject}}
 \newcommand{\placeholder}[1]{{\tt\bf\color{darkgreen} #1}}
+\newcommand{\key}[1]{\textbf{[#1]}}
 
 \newcommand{\q}[1]{\glqq{}{#1}\grqq{}}
 

+ 7 - 7
src/content.tex

@@ -17,17 +17,17 @@
 \tableofcontents
 
 \newpage
-\input{src/faq/whatisgit}
+\input{faq/whatisgit}
+\input{faq/doNotStore}
 \newpage
-\input{src/faq/login}
+\input{faq/login}
 \newpage
-\input{src/faq/keys}
-\input{src/faq/newProject}
+\input{faq/keys}
+\input{faq/newProject}
 \newpage
-\input{src/faq/cloneProject}
+\input{faq/cloneProject}
 \newpage
-\input{src/faq/addThingsToProject}
-\input{src/faq/doNotStore}
+\input{faq/addThingsToProject}
 
 
 \bibliographystyle{plain}

+ 28 - 6
src/faq/addThingsToProject.tex

@@ -233,20 +233,32 @@
 \begin{itemize}
 \item \de{Es dürfen keine offenen Merge requests sein.}\en{Be sure that there is no open merge request.}
 
-\item \codeline{git filter-branch --force $\backslash$ \\
+\item \de{Dieses Kommando entfernt die Datei aus Ihrer lokalen History:}\en{This command removes the file from your local history:}
+ \codeline{git filter-branch --force $\backslash$ \\
  \mbox{}\hspace{1cm}--index-filter \"{}git rm --cached --ignore-unmatch \placeholder{FILE\_NAME}\"{} $\backslash$ \\
  \mbox{}\hspace{1cm}--prune-empty --tag-name-filter cat -- --all}
 
-\item Add the file to your \var{.gitignore} file.
+\item 
+    \de{Fügen Sie die Datei zur \var{.gitignore} Datei hinzu.}
+    \en{Add the file to your \var{.gitignore} file.}
     \codeline{echo \"{}\placeholder{FILE\_NAME}\"{} $>>$ .gitignore}
 
     \codeline{git commit -m \"{}Add \placeholder{FILE\_NAME} to .gitignore\"{}}
 
-\item \codeline{git push origin --force --all}
+\item \de{Dieser befehl sendet die geänderte History zum Server.}\en{This command sends the changed History to the server.}
+    \codeline{git push origin --force --all}
 
-\item Tell your collaborators to rebase, not merge, any branches they created off of your old (tainted) repository history. One merge commit could reintroduce some or all of the tainted history that you just went to the trouble of purging.
+\item
+    \de{%
+        Sagen Sie Ihren Mitarbeitern, dass sie alle Branches, die sie aus Ihrem alten Repository-Verlauf erstellt haben, neu aufbauen (rebase) und nicht zusammenführen (merge) sollen.
+         Ein Merge-Commit könnte die alte Historie oder Teile davon wieder einfügen. 
+    }\en{%
+        Tell your collaborators to rebase, not merge, any branches they created off of your old (tainted) repository history.
+        One merge commit could reintroduce some or all of the tainted history that you just went to the trouble of purging.
+    }%
 
-    $\rightarrow$ \url{https://git-scm.com/book/en/Git-Branching-Rebasing}
+    \de{Details zum Thema \q{rebase}:}\en{Details on topic \q{rebase}:}
+    \url{https://git-scm.com/book/en/Git-Branching-Rebasing}
 
 
 % \item After some time has passed and you're confident that git filter-branch had no unintended side effects, you can force all objects in your local repository to be dereferenced and garbage collected with the following commands (using Git 1.8.5 or newer):
@@ -254,9 +266,19 @@
 %     \codeline{git for-each-ref --format=\"{}delete \%{}(refname)\"{} refs/original $|$ git update-ref --stdin}
 %     \codeline{git reflog expire --expire=now --all}
 %     \codeline{git gc --prune=now}
+
+\item
+    \de{%
+        Weitere Informationen zum Thema \q{Daten aus der History Löschen} finden Sie unter:
+    }\en{%
+        Additional information on the topic \q{remove data from the history} you will find in:
+    }
+
+    \begin{minipage}{0.9\textwidth}
+        \url{https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository}
+    \end{minipage}
 \end{itemize}
 
 
 
-$\rightarrow$ \url{https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository}
 

+ 49 - 37
src/faq/doNotStore.tex

@@ -1,9 +1,14 @@
 %\section{\de{Gespeicherte Daten verwalten}\en{Manage stored data}}
-\subsection{\de{Was \underline{nicht} in GIT gespeichert werden sollte}\en{What \underline{not} to store in in GIT}}
+|DE>\subsection{Was \underline{nicht} in GIT gespeichert werden sollte}
+|EN>\subsection{What \underline{not} to store in in GIT}
 
 % TODO: Asked for 10MB
-\de{Die folgenden Daten sollten nicht in GIT gespeichert werden. Insbesondere wenn die Datei > 1MB ist.
-}\en{The following files should not stored in GIT. Especially if the file size is > 1 MB.}
+|DE>    Die folgenden Daten sollten nicht in GIT gespeichert werden.
+|DE>    Insbesondere wenn die Datei > 5 MB ist.
+|DE>    (Ausnahme: Die Datei ist für die Erstellung Ihres Projektes erforderlich und lässt sich nicht automatisch generieren.)
+|EN>    The following files should not stored in GIT.
+|EN>    Especially if the file size is > 5 MB.
+|EN>    (Exception: This file is needed to create your output files and there is no other way to create this file.)
 
 \newcommand{\ext}[1]{\var{*.#1}}
 
@@ -12,48 +17,57 @@
    Videos
    (\tZB{} \ext{avi} ; \ext{mp4} ; \ext{wmv})
 \item
-   \de{Bilder}\en{Images}
+|DE>   Bilder
+|EN>   Images
    (\tZB{} \ext{jpg} ; \ext{png} ; \ext{tiff} ; \ext{bmp} ; \ext{xcf} ; \ext{psd})
 \item
-   \de{Präsentationen}\en{Presentations}
+|DE>   Präsentationen
+|EN>   Presentations
    (\tZB{} \ext{ppt} ; \ext{pptx} ; \ext{pdf})
 \item
-   \de{Ton-Dateien}\en{Audio files}
+|DE>   Ton-Dateien
+|EN>   Audio files
    (\tZB{} \ext{wav} ; \ext{mp3} ; \ext{flac} ; \ext{ogg})
 \item 
-   \de{Programme, Bibliotheken, Installer
-   }\en{Executables, libraries, installer}
+|DE>   Programme, Bibliotheken, Installer
+|EN>   Executables, libraries, installer
    (\tZB{} \ext{exe} ; \ext{dll} ; \ext{lib} ; \ext{msi} ; \ext{o} ; \ext{so} ; \ext{class} ; \ext{jar})
 \item
-   \de{Binärdateien}\en{Binary files}
+|DE>   Binärdateien
+|EN>   Binary files
    (\tZB{} \ext{bin} ; \ext{dat} ; \ext{zip} ; \ext{gz} ; \ext{bz})
 \item
-   \de{Dateien, die sich generieren lassen.
-   }\en{Files you can generate with your sources}
+|DE>   Dateien, die sich generieren lassen.
+|EN>   Files you can generate with your sources
 \item
-   \de{Dateien, die während des Bauvorganges entstehen.
-   }\en{Files which are generated during the building process}
+|DE>   Dateien, die während des Bauvorganges entstehen.
+|EN>   Files which are generated during the building process
    (\tZB{} \ext{o} ; \ext{class} ; \ext{aux} ; \ext{idx})
 \item
-   \de{Programm- / Debugausgaben
-   }\en{Debug or program output files }
+|DE>   Programm- / Debugausgaben
+|EN>   Debug or program output files
    (\tZB{} \ext{log}, \ext{dat})
 \item
-   \de{Ordner anderer Versionsverwaltungssysteme
-   }\en{Folders and files from another version management system}
+|DE>   Ordner anderer Versionsverwaltungssysteme
+|EN>   Folders and files from another version management system
    (\tZB{} \var{.svn})
 \item
-   \de{Backups, temporäre Dateien, lokale Workspace-Konfigurationen
-   }\en{Backups, temporary files, local workspace configuration}
+|DE>   Backups, temporäre Dateien, lokale Workspace-Konfigurationen
+|EN>   Backups, temporary files, local workspace configuration
    (\tZB{} \ext{swp} ; \var{*\~} ; \var{tmp} )
 \end{itemize}
 
-\de{Repositorys sollten mit History < 300 MB bleiben.
-}\en{Your repository should stay < 300 MB, including history.}
+|DE> Repositorys sollten mit History < 300 MB bleiben.
+|EN> Your repository should stay < 300 MB, including history.
 %\\
 %Bei Repositories $\geq$ 500MB mahnen wir.
 
 
+
+
+
+
+
 \subsection{\de{Was in ein GIT-Repository gehört.}\en{What to store in a GIT repository}}
 \begin{itemize}
 \item \de{Quelltexte}\en{Source code}
@@ -61,8 +75,8 @@
 \item Makefiles
 \item \de{Zum Bauen erforderliche Konfigurationen.}\en{Configuration needed to build your project.}  
 \item
-   \de{Notwendige Dateien, die nicht generiert oder aus dem Internet / anderen Repositories geladen werden können.
-   }\en{Needed files that can't be generated or loaded from the internet or other repositories.}
+|DE>  Notwendige Dateien, die nicht generiert oder aus dem Internet / anderen Repositories geladen werden können.
+|EN>  Needed files that can't be generated or loaded from the internet or other repositories.
 \end{itemize}
 
 
@@ -73,18 +87,16 @@
 \newpage
 \subsection{\de{Von GIT verwaltete Dateien konfigurieren}\en{Configure files managed by GIT}}
 
-\begin{DE}
-   In jedem Ordner des von GIT verwalteten Repositorys kann eine Datei \var{.gitignore} angelegt werden.
-   Dies ist eine Text-Datei, in der aufgelistet wird, welche Ordner oder Dateien bei einem \var{git add} ignoriert werden sollen.
-   Dabei kann auch mit Wildcards (*) gearbeitet werden.
-\end{DE}
-\begin{EN}
-   In every folder of your GIT repository you may add a \var{.gitignore} file.
-   This is a text file, listing all folders or files that should be ignored by GIT when using \var{git add}.
-   %You don't need to worry about using \var{git add}.
-   %It will not add these files.
-   In the list you may use wildcards (*).
-\end{EN}
+|DE>   In jedem Ordner des von GIT verwalteten Repositorys kann eine Datei \var{.gitignore} angelegt werden.
+|DE>   Dies ist eine Text-Datei, in der aufgelistet wird, welche Ordner oder Dateien bei einem \var{git add} ignoriert werden sollen.
+|DE>   Dabei kann auch mit Wildcards (*) gearbeitet werden.
+|DE>   \q{Best practice} ist, die \var{.gitignore} Datei nur im Hauptverzeichnis nur im Hauptverzeichnis Ihres Projektes anzulegen.
+|EN>   In every folder of your GIT repository you may add a \var{.gitignore} file.
+|EN>   This is a text file, listing all folders or files that should be ignored by GIT when using \var{git add}.
+|EN>   %You don't need to worry about using \var{git add}.
+|EN>   %It will not add these files.
+|EN>   In the list you may use wildcards (*).
+|EN>   \q{Best practice} is to create the \var{.gitignore} file only in the main directory of your project.
 
 
 
@@ -167,7 +179,7 @@
 \item \var{images/}
    \begin{itemize}
    \item \var{logo.png}
-   \item \var{interestingGraphic.fig}
+   \item \var{interestingGraphic.pdf}
    \end{itemize}
 \end{itemize}
 \end{minipage}
@@ -175,7 +187,7 @@
 \begin{minipage}[t]{0.59\textwidth}\parInit
 \begin{DE}
    Die \ext{tex} Dateien sind die Quelltexte zum TeX Dokument.
-   Im Ordner \var{images} sind für das Dokument wichtige Bilder oder Quelltexte, die diese Bilder generieren.
+   Im Ordner \var{images} sind für das Dokument wichtige Bilder.
    Diese Dateien sollten gespeichert werden.
 
    Die Datei \var{myPaper.pdf} ist das kompilierte Endprodukt.

+ 53 - 18
src/faq/keys.tex

@@ -1,6 +1,24 @@
 \section{\de{SSH-Schlüssel einrichten}\en{Set up SSH keys}}
 \label{ch:ssh}
 
+\subsection{\de{Einführung}\en{Introducion}}
+\begin{DE}
+    SSH-Schlüssel werden zur Authentifizierung gegenüber dem GIT Server verwendet.
+    Diese bestehen aus einem Paar an öffentlichem und privatem Schlüssel.
+    Der öffentliche Schlüssel wird dem GIT-Server mitgeteilt.
+    Der private Schlüssel wird geheim gehalten.
+    Um im Schadensfall (z.B. der Zugang auf einem Rechner wurde gehakt) gezielt einzelne Rechner oder Nutzer sperren zu können, sollte dieses Schlüsselpaar für jeden Nutzer und Rechner einzigartig sein.
+\end{DE}
+\begin{EN}
+    SSH keys are used to authenticate yourself to the GIT server.
+    This are pairs of public and private keys.
+    The public key is send to the GIT server.
+    The private key is kept secret.
+    To be able to lock a single computer or user (e.g. if your computer account was hacked) there should be a pair for every computer and user.
+\end{EN}
+
+
+
 \subsection{\de{Die Übersichtsseite öffnen}\en{Open the overview page}}
 \begin{itemize}
 \item \de{Klicken Sie oben rechts auf Ihr Symbol.
@@ -20,36 +38,40 @@
 
 \newpage
 \subsection{\de{Ein SSH-Schlüssel erzeugen}\en{Create an SSH key}}
-\de{Wenn Sie bereits ein SSH-Schl\"ussel auf Ihren Computer haben, k\"onnen Sie diesen Schritt \"uberspringen.}
-\en{If you have already an SSH key on your computer you might skip this step.}
-
+\de{%
+    Dieser Schritt ist erforderlich, wenn sie noch keinen SSH-Schlüssel haben oder ein neuen Schlüssel für GIT einrichten wollen.
+    Andernfalls können Sie diesen Schritt überspringen.
+}\en{%
+    This step is needed if you don't have a SSK key on your computer or you want to create a new one for GIT.
+    Otherwise you can skip this step.
+}%
+%
 \begin{itemize}
 \item
     \de{Starten Sie eine Kommandozeile auf ihrem Computer.}
     \en{Start a commandline on your computer.}
 
 \item
-    \de{F\"uhren Sie das folgende Kommando aus:}
+    \de{Führen Sie das folgende Kommando aus:}
     \en{Run the following command:}
     \codeline{ssh-keygen -t ecdsa -b 521}
 
-    \de{Die Ausgabe sieht so \"ahnlich aus wie:}
+    \de{Die Ausgabe sieht so ähnlich aus wie:}
     \en{The Output looks like:}
 
     \begin{Code}
-\bobOnEarth{\home} ssh-keygen -t ecdsa -b 521
+\bobOnEarthX{\home} ssh-keygen -t ecdsa -b 521
 \color{gray}
 \\{}Generating public/private ecdsa key pair.
-\\{}Enter file in which to save the key (/home/bob/.ssh/id\_ecdsa):
-\\{}\mbox{} \hfill \placeholder{/home/bob/.ssh/id\_ecdsa\_git\_ur}
-\\{}Enter passphrase (empty for no passphrase): \placeholder{mySecredPassword}
-\\{}Enter same passphrase again: \placeholder{mySecredPassword}
-\\{}Your identification has been saved in /home/bob/.ssh/id\_ecdsa\_git\_ur
-\\{}Your public key has been saved in /home/bob/.ssh/id\_ecdsa\_git\_ur.pub
+\\{}Enter file in which to save the key (/home/bob/.ssh/id\_ecdsa): 
+\\{}Enter passphrase (empty for no passphrase): % \placeholder{mySecredPassword}
+\\{}Enter same passphrase again: % \placeholder{mySecredPassword}
+\\{}Your identification has been saved in /home/bob/.ssh/id\_ecdsa
+\\{}Your public key has been saved in /home/bob/.ssh/id\_ecdsa.pub
 \\{}The key fingerprint is:
 \\{}SHA256:5vKu{\ldots}9Jk0 bob@earth
 \\{}The key's randomart image is:
-\\{}+-{}-{}-[ECDSA~521]-{}-{}-+
+\\{}+-{}-{}-{}[ECDSA~521]-{}-{}-{}+
 \\{}|~~~~~~~~~~~~~~..~|
 \\{}|~~~~~~~~~~~~~..~~|
 \\{}|~~~~~~~~~~~~o~~.~|
@@ -59,13 +81,26 @@
 \\{}|~+.*..+~o~~o~+~.~|
 \\{}|.~Booo.+~o.~o +~~|
 \\{}|~o..oooo+~o=++~~~|
-\\{}+----[SHA256]-----+
+\\{}+-{}-{}-{}-{}[SHA256]-{}-{}-{}-{}-{}+
     \end{Code}
 
-    \par
-    \de{Die Passphrase wird w\"ahrend der Eingabe nicht angezeigt. Diese Passphrase ist bei jedem Senden oder Empfangen von Daten vom GIT-Server einzugeben.}
-    \en{As you enter the passphrase it will not shown. You will need the passphrase on every transfear of data from or to the GIT server.}
+\item
+    \de{Auf die Frage \q{\var{Enter file in which to save the key}} können Sie einfach \key{Enter} drücken und die Vorgabe übernehmen oder einen eigenen Dateinamen angeben.}
+    \en{On the request \q{\var{Enter file in which to save the key}} you may press enter \key{Enter} and accept the default value or enter your own filename.}
+    
 
+\item
+    \de{Auf die Aufforderung \q{\var{Enter passphrase}} können Sie zur zusätzlichen Sicherheit ein Passwort für ihr SSH-Schlüssel festlegen.
+        Ihre Eingabe müssen Sie in der Zeile \q{\var{Enter same passphrase again}} wiederholen.
+
+        Das Passwort wird während der Eingabe nicht angezeigt.
+        Dieses Passwort ist bei jedem Senden oder Empfangen von Daten zum oder vom GIT-Server einzugeben.
+    }\en{On the request \q{\var{Enter passphrase}} you may secure your SSH keys by a password.
+        You have to repeat your input in the line \q{\var{Enter same passphrase again}}.
+    
+        As you enter the passphrase it will not shown.
+        You will need the passphrase on every transfear of data from or to the GIT server.
+    }
 \end{itemize}
 
 
@@ -82,7 +117,7 @@
     }\en{You find your SSH keys in your home folder in the folder \var{.ssh}.
     The files we need have the extension \var{.pub}.
     E.g: \var{id\_ecdsa.pub} or \var{id\_rsa.pub}}
-    \de{Falls Sie im vorherigen Schritt ein SSH-Schl\"ussel angelegt haben wurde Ihnen in der Zeile \q{\var{Your public key has been saved in \ldots}} der Dateiname der gesuchten Datei angegeben.}\en{If you have generated a key in the previous step you will find the name of the needed file in the line: \q{\var{Your public key has been saved in \ldots}}}
+    \de{Falls Sie im vorherigen Schritt ein SSH-Schlüssel angelegt haben wurde Ihnen in der Zeile \q{\var{Your public key has been saved in \ldots}} der Dateiname der gesuchten Datei angegeben.}\en{If you have generated a key in the previous step you will find the name of the needed file in the line: \q{\var{Your public key has been saved in \ldots}}}
 
 \item
    \de{Öffnen sie die Datei mit Ihrem public key in einem Text-Editor.

+ 3 - 6
src/faq/whatisgit.tex

@@ -1,7 +1,4 @@
 \section{\de{Wozu GIT?}\en{Why GIT?}}
-\begin{DE}
-GIT ist ...
-\end{DE}
-\begin{EN}
-GIT is ...
-\end{EN}
+|DE>GIT ist ... 123
+|EN>GIT is ... 567
+

+ 2 - 2
src/mainDe.tex

@@ -1,7 +1,7 @@
 \documentclass[a4paper]{article}
 \newcommand{\myLanguage}[0]{german}
-\input{src/config}
+\input{config}
 
 \begin{document}
-\input{src/content}
+\input{content}
 \end{document}

+ 2 - 2
src/mainEn.tex

@@ -1,7 +1,7 @@
 \documentclass[a4paper]{article}
 \newcommand{\myLanguage}[0]{english}
-\input{src/config}
+\input{config}
 
 \begin{document}
-\input{src/content}
+\input{content}
 \end{document}

+ 27 - 0
tools/translator.hs

@@ -0,0 +1,27 @@
+import System.Environment
+
+
+mapFilter :: (a -> Maybe b) -> [a] -> [b]
+mapFilter fn = worker . map fn
+    where
+        worker (Nothing  : rest) = worker rest
+        worker ((Just x) : rest) = x : worker rest
+        worker [] = []
+
+
+translate :: String -> [String] -> [String]
+translate language = mapFilter worker
+    where
+        worker ('|':x:y:'>':line)
+            | [x,y] == language = Just line
+            | otherwise         = Nothing
+
+        worker line = Just line
+            
+
+main :: IO ()
+main = do
+    args <- getArgs
+    case args of
+        [language] -> interact (unlines . translate (language) . lines)
+        _ -> putStrLn "translator language"