diff options
author | Karl Berry <karl@freefriends.org> | 2013-07-17 22:16:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-07-17 22:16:32 +0000 |
commit | b89c6d74de55dd5e434d60c0fb3a81f66ad153db (patch) | |
tree | a6e6f3977c86c34cf8f955d186f2ee064db07d49 | |
parent | eec0a21648f82e9f409ed8151e1bc83f34bfec79 (diff) |
translations (17jul13)
git-svn-id: svn://tug.org/texlive/trunk@31222 c570f23f-e606-0410-a88d-b1316a301751
12 files changed, 1593 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/translations/README b/Master/texmf-dist/doc/latex/translations/README new file mode 100644 index 00000000000..56a547c7002 --- /dev/null +++ b/Master/texmf-dist/doc/latex/translations/README @@ -0,0 +1,34 @@ +-------------------------------------------------------------------------- +the TRANSLATIONS package v1.0 - 2013/07/16 + a simple translator + +-------------------------------------------------------------------------- +Clemens Niederberger +Web: https://github.com/cgnieder/translations +E-Mail: contact@mychemistry.eu +-------------------------------------------------------------------------- +Copyright 2011-2013 Clemens Niederberger + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Clemens Niederberger. +-------------------------------------------------------------------------- +The translations package consists of the files + - translations.sty, translations_en.tex, translations_en.pdf, + translations-basic-dictionary-english.trsl, + translations-basic-dictionary-french.trsl, + translations-basic-dictionary-german.trsl, + translations-basic-dictionary-spanish.trsl + - README +-------------------------------------------------------------------------- +If you have any ideas, questions, suggestions or bugs to report, please +feel free to contact me. +-------------------------------------------------------------------------- diff --git a/Master/texmf-dist/doc/latex/translations/translations_en.pdf b/Master/texmf-dist/doc/latex/translations/translations_en.pdf Binary files differnew file mode 100644 index 00000000000..894f586651e --- /dev/null +++ b/Master/texmf-dist/doc/latex/translations/translations_en.pdf diff --git a/Master/texmf-dist/doc/latex/translations/translations_en.tex b/Master/texmf-dist/doc/latex/translations/translations_en.tex new file mode 100644 index 00000000000..5a368411a0b --- /dev/null +++ b/Master/texmf-dist/doc/latex/translations/translations_en.tex @@ -0,0 +1,596 @@ +% arara: lualatex +% !arara: lualatex +% !arara: lualatex +% -------------------------------------------------------------------------- +% the TRANSLATIONS package +% +% a simple translator +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/translations/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2011-2013 Clemens Niederberger +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Clemens Niederberger. +% -------------------------------------------------------------------------- +% The translations package is part of the exsheets bundle +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +% +% if you want to compile this documentation you'll need the document class +% `cnpkgdoc' which you can get here: +% https://bitbucket.org/cgnieder/cnpkgdoc/ +% the class is licensed LPPL 1.3 or later +% +% use `pdflatex' for compilation +% +\PassOptionsToPackage{supstfm=libertinesups}{superiors} +\documentclass[DIV11,toc=index,toc=bib,numbers=noendperiod]{cnpkgdoc} +% ---------------------------------------------------------------------------- +% document layout and typographic features +\docsetup{ + pkg = {translations} , + repo = github , + subtitle = {a simple translator} , + language = en , + modules = true , + code-box = { + backgroundcolor = gray!7!white , + skipbelow = .6\baselineskip plus .5ex minus .5ex , + skipabove = .6\baselineskip plus .5ex minus .5ex , + innerleftmargin = 1.5em , + innerrightmargin = 2.5em + } , + gobble = 1 +} +\usepackage[oldstyle,proportional]{libertine} +\usepackage{libertinehologopatch} +\setmonofont[Scale=MatchLowercase]{Bitstream Vera Sans Mono} +\usepackage[english]{selnolig} +\cnpkgusecolorscheme{friendly} + +\usepackage{embrac}[2012/06/29] + \ChangeEmph{[}[,.02em]{]}[.055em,-.08em] + \ChangeEmph{(}[-.01em,.04em]{)}[.04em,-.05em] +\usepackage{microtype} +\usepackage[multiple]{fnpct} + +\renewcommand*\othersectionlevelsformat[3]{\textcolor{main}{#3\autodot}\enskip} +\renewcommand*\partformat{\textcolor{main}{\partname~\thepart\autodot}} + +\pagestyle{headings} + +\setcapindent{1.5em} +\setkomafont{caption}{\normalfont\footnotesize\sffamily} +\setkomafont{captionlabel}{\normalfont\footnotesize\sffamily\scshape} + +\usepackage{booktabs,array,ragged2e} + +% ---------------------------------------------------------------------------- +% code examples +\addcmds{ + cuisine, + DeclareDictTranslation, DeclareLanguage, DeclareLanguageAlias, + DeclareLanguageDialect, DeclareTranslation, DeclareTranslationFallback, + GetTranslation, GetTranslationFor, + kitchen, + LoadDictionary, LoadDictionaryFor, + mypackage@title, + NewTranslation, + ProvideDictionaryFor, + RenewTranslation,RequirePackage, + SaveTranslation, SaveTranslationFor, selectlanguage +} + +% ---------------------------------------------------------------------------- +% other packages, bibliography, index +\usepackage{array,longtable,booktabs} + +\usepackage{filecontents} +\usepackage{imakeidx} +\begin{filecontents*}{\jobname.ist} + heading_prefix "{\\bfseries " + heading_suffix "\\hfil}\\nopagebreak\n" + headings_flag 1 + delim_0 "\\dotfill\\hyperpage{" + delim_1 "\\dotfill\\hyperpage{" + delim_2 "\\dotfill\\hyperpage{" + delim_r "}\\textendash\\hyperpage{" + delim_t "}" + suffix_2p "\\nohyperpage{\\,f.}" + suffix_3p "\\nohyperpage{\\,ff.}" +\end{filecontents*} +\indexsetup{othercode=\footnotesize} +\makeindex[options={-s \jobname.ist},intoc,columns=3] + +% ---------------------------------------------------------------------------- +% example definitions that have to be done in the preamble: +\DeclareTranslation{English}{Kueche}{kitchen} +\DeclareTranslation{German}{Kueche}{K\"uche} +\DeclareTranslation{Spanish}{Kueche}{cocina} +\DeclareTranslation{French}{Kueche}{cuisine} +\DeclareTranslation{English}{farbe}{color} +\DeclareTranslation{British}{farbe}{colour} +\LoadDictionaryFor{German}{translations-basic-dictionary} + +% ---------------------------------------------------------------------------- +% custom commands +\usepackage{bbding} + +\newcommand*\required{\hfill\llap{required}\newline} +\newcommand*\optional{\hfill\llap{optional}\newline} + +\newcommand*\unexpsign{{\tiny\FiveStar}} +\newcommand*\expsign{\textcolor{red}{{\tiny\FiveStar}}} +\renewcommand*\cnpkgdoctriangle{\unexpsign} +\newcommand*\expandable{% + \def\cnpkgdoctriangle{% + \expsign + \gdef\cnpkgdoctriangle{\unexpsign}}} + +\newlength\nodewidth +\setlength\nodewidth{.375\linewidth} +\long\def\yes:{\textcolor{green}{\CheckmarkBold}\par} +\long\def\no:{\textcolor{red}{\XSolidBrush}\par} +\protected\def\fnote#1{\textsuperscript{#1}} + +\pdfstringdefDisableCommands{\def\llap#1{#1\space}\def\bigstar{*}} + +\begin{document} + +\section{Motivation}\secidx{Motivation} +This package provides means for package authors to have an easy interface for +internationalization of their packages. The functionality of this package is +in many parts also covered by the package \paket*{translator} (part of the +\paket{beamer} bundle). Internationalization is also possible with +\paket{babel} and it's \cmd*{addto}\cmd{captions<language>} mechanism or +\KOMAScript's \cmd{providecaptionname}. However, I believe that +\translations\ is more flexible than all of these. Unlike \paket*{translator} +it detects the used (\paket{babel} or \paket{polyglossia}) language itself and +provides expandable retrieving of the translated key. \translations\ also +provides support for language dialects which means package authors can for +example distinguish between British, Australian, Canadian and US English. + +The first draft of the package was written since I missed an expandable +version of \paket{translator}'s \cmd{translate} command. Once I had the +package available I began using it in various of my other packages so it got +extended to the needs I faced there. +\secidx*{Motivation} + +\section{License and Requirements}\label{sec:license}\secidx{Requirements} +\translations\ is placed under the terms of the \LaTeX{} Project Public +License, version 1.3 or later (\url{http://www.latex-project.org/lppl.txt}). +It has the status ``maintained.'' + +\translations\ requires the packages \paket{etoolbox} and \paket*{scrlfile} +(part of the \KOMAScript\ bundle\footnote{\CTANurl{koma-script}}). +\secidx*{Requirements} + +\section{Usage}\secidx{Usage} +\subsection{Background}\secidx[Background]{Usage} +The \translations\ package enables the author of a package or a class (or a +document) to declare translations in different languages of key words and +fetch these translations in the document depending on the active language as +set by \paket{babel} or \paket{polyglossia}. Since \translations\ checks +which language is active it is generally not necessary to specify the language +for which a translation should be fetched manually. + +\translations\ knows of three types of languages: main languages (see +table~\ref{tab:languages} on page~\pageref{tab:languages}), language aliases +(see table~\ref{tab:aliases} on page~\pageref{tab:aliases}) and language +dialects (see table~\ref{tab:dialects} on page~\pageref{tab:dialects}). For +the commands declaring or fetching a translation base languages and language +aliases are equivalent. Dialects are similar to aliases but there are a few +important differences. + +Figure~\ref{fig:scheme} shows what happens if \translations\ is asked to fetch +a translation for a given key. + +\begin{figure}[htbp] + \centering + \begin{tikzpicture} + [ + level/.style={sibling distance=.5\linewidth/#1}, + every node/.style={ + draw, + rounded corners=3pt, + align=left, + anchor=north, + font=\small\sffamily + } + ] + \node {check if any\fnote{a} translation is defined in given language} + child { + node[text width=\nodewidth] + {\yes: check if language is a dialect} + child { + node[text width=\nodewidth/2] + {\yes: check if dialect translation is given} + child { + node[text width=\nodewidth/2.75] + {\yes: use dialect translation} + } + child { + node[text width=\nodewidth/2.75] + {\no: use lan\-guage\fnote{b} translation} + } + } + child { + node[text width=\nodewidth/2] + {\no: use translation}} + } + child { + node[text width=\nodewidth] + {\no: check if fallback translation is given} + child { + node[text width=\nodewidth/2.75] + {\yes: use fallback translation} + } + child { + node[text width=\nodewidth/2.75] + {\no: use literal key} + } + } ; + \end{tikzpicture} + \caption{Schematic representation of \translations' translating + mechansim. Notes: \fnote{a} except for a possible fallback + translation. \fnote{b} \ie, the base language of the dialect.} + \label{fig:scheme} +\end{figure} + +What happens if you declare a translation? There are three cases: +\begin{enumerate} + \item You declare a translation for a base language: this is the normal case + where an internal macro is defined which can be fetched by the + \cmd{GetTranslation} command (see section~\ref{ssec:commands}). + \item You declare a translation for a language alias: this is the very same + as the first case since the same internal macro is defined. + \item You declare a translation for a dialect: this is two-fold. Either a + translation for the base language exists so only the translation for the + dialect is saved. If the translation for the base language does not exist + it is defined to be the same as the one for the dialect. +\end{enumerate} + +\subsection{Available Commands}\label{ssec:commands}\secidx[Commands]{Usage} +Below the commands provided by \translations\ are explained. The symbol +\expsign{} means that the command is expandable, \unexpsign{} means that it +isn't. +\begin{beschreibung} + \Befehl{DeclareLanguage}{<lang>}\newline + Declare a language that can be used by \translations. If the language + already exists it will be silently redefined. This command can only be used + in the preamble. + \Befehl{DeclareLanguageAlias}{<lang2>}\ma{<lang1>}\newline + Declares \code{<lang2>} to be an alias of \code{<lang1>}. If \code{<lang1>} + doesn't exist yet a warning will be raised and it will be defined. This + command can only be used in the preamble. + \Befehl{DeclareLanguageDialect}{<dialect>}\ma{<lang>}\newline + Declares \code{<dialect>} to be a dialect of language \code{<lang>}. If a + translation for \code{<dialect>} is provided it is used by the translation + macros. If there is none the corresponding translation for \code{<lang>} is + used instead. + \Befehl{NewTranslation}{<lang>}\ma{<key>}\ma{<translation>}\newline + Defines a translation of key \code{<key>} for the language \code{<lang>}. + An error will be raised if a translation of \code{<key>} already exists. + This command can only be used in the preamble. + \Befehl{RenewTranslation}{<lang>}\ma{<key>}\ma{<translation>}\newline + Redefines a translation of key \code{<key>} for the language \code{<lang>}. + An error will be raised if no translation of \code{<key>} exists. + This command can only be used in the preamble. + \Befehl{DeclareTranslation}{<lang>}\ma{<key>}\ma{<translation>}\newline + Defines a translation of key \code{<key>} for the language \code{<lang>}. + No error will be raised if a translation of \code{<key>} already exists. + This command can only be used in the preamble. + \Befehl{DeclareTranslationFallback}{<key>}\ma{<fallback>}\newline + Defines a fallback translation for key \code{<key>} that is used in case no + translation of \code{<key>} for the currently active language has been + provided. No error will be raised if a fallback for \code{<key>} already + exists. This command can only be used in the preamble. + \expandable\Befehl{GetTranslationFor}{<lang>}\ma{<key>}\newline + Fetches and prints the translation of \code{<key>} for the language + \code{<lang>}. This command is expandable. + \expandable\Befehl{GetTranslation}{<key>}\newline + Fetches and prints the translation of \code{<key>} for the currently active + language (as for example set by \paket{babel}). This command is expandable. + \Befehl{GetTranslationForWarn}{<lang>}\ma{<key>}\newline + \sinceversion{1.0}Fetches and prints the translation of \code{<key>} for + the language \code{<lang>}. Issues a warning if no translation is + available. + \Befehl{GetTranslationWarn}{<key>}\newline + \sinceversion{1.0}Fetches and prints the translation of \code{<key>} for + the currently active language (as for example set by \paket{babel}). + Issues a warning if no translation is available. + \Befehl{SaveTranslationFor}{<cmd>}\ma{<lang>}\ma{<key>}\newline + Fetches and saves the translation of \code{<key>} for the language + \code{<lang>} in the macro \code{<cmd>}. + \Befehl{SaveTranslation}{<cmd>}\ma{<key>}\newline + Fetches and saves the translation of \code{<key>} for the currently active + language (as for example set by \paket{babel}) in the macro \code{<cmd>}. + \Befehl{LoadDictionary}{<name>}\newline + Loads a file named \code{<name>-<lang>.trsl} where \code{<lang>} corresponds + to the lowercase name of the current language as defined with + \cmd{DeclareLanguage}. This file should contain the translations for the + specified language. + \Befehl{LoadDictionaryFor}{<lang>}\ma{<name>}\newline + Loads a file named \code{<name>-<lang>.trsl}. + \Befehl{DeclareDictTranslation}{<key>}\ma{<translation>}\newline + This command is to be used in a dictionary file and picks up the language + of that file, see section~\ref{sec:dictionaries} for an example. + \Befehl{ProvideDictionaryFor}{<lang>}\ma{<name>}\oa{<date>}\newline + Needs to be in a dictionary file. This command tells \translations\ that + the file indeed is a dictionary and also sets the language for the + dictionary which is used by \cmd{DeclareDictTranslation}. + \expandable\Befehl{PrintDictionaryFor}{<lang>}\ma{<name>}\ma{<pre>}\ma{<mid>}\ma{<post>}\newline + \sinceversion{1.0}Prints all entries of dictionary \code{<name>} in + language \code{<lang>} in the order the entries have been declared. For + every entry the code\par + \code{<pre><key><mid><translation><post>}\par + is printed. The dictionary must have been loaded of course. +\end{beschreibung} + +\subsection{A Small Example}\secidx[Example]{Usage} +This section demonstrates with two short examples how the macros are used. +The first example covers the basics: dlaring of translations and then +retrieving and typesetting them. + +\begin{beispiel} + % in the preamble: + % \DeclareTranslation{English}{Kueche}{kitchen} + % \DeclareTranslation{German}{Kueche}{K\"uche} + % \DeclareTranslation{Spanish}{Kueche}{cocina} + % \DeclareTranslation{French}{Kueche}{cuisine} + + \GetTranslation{Kueche} + \SaveTranslation\kitchen{Kueche} + \SaveTranslationFor\cuisine{french}{Kueche} + + \selectlanguage{ngerman} + \GetTranslation{Kueche} \kitchen\ \GetTranslationFor{spanish}{Kueche} + \cuisine +\end{beispiel} + +The next example demonstrates the use of dialects and how they fall back to +the translation for the main language if no extra translation was declared: + +\begin{beispiel} + % in the preamble: + % \DeclareTranslation{English}{farbe}{color} + % \DeclareTranslation{British}{farbe}{colour} + + \GetTranslationFor{English}{farbe} \\ + \GetTranslationFor{British}{farbe} \\ + \GetTranslationFor{American}{farbe} +\end{beispiel} + +\subsection{Usage in Packages}\secidx[Packages]{Usage} +\subsubsection{Basic Structure}\secidx[Packages!structure]{Usage} +A typical usage in a package would look as follows: +\begin{beispiel}[code only] + \RequirePackage{translations} + \DeclareTranslationFallback{mypackage-title}{Nice Title} + \DeclareTranslation{English}{mypackage-title}{Nice Title} + \DeclareTranslation{French}{mypackage-title}{Beau Titre} + \DeclareTranslation{German}{mypackage-title}{Sch\"{o}ner Titel} + ... + \def\mypackage@title{\GetTranslation{mypackage-title}} +\end{beispiel} + +That is, a package defines some unique key for an expression and at least +defines a fallback translation. Additionally translations for as many +languages as the author wants are defined. A user then may add +\cmd{DeclareTranslation}\ma{<language>}\ma{<translation>} if they find their +translation missing. + +\subsubsection{The `fallback' language}\secidx[Packages!fallback]{Usage} +If a user has neither loaded \paket{babel} nor \paket{polyglossia} +\translations\ will use English as language and translate to English if the +translation was provided. If the user \emph{has} loaded one of the language +packages but has chosen a language for which no translation is defined the +language `fallback' will be used, i.e., the translation provided with +\cmd{DeclareTranslationFallback}. If no fallback translation is provided +either the translation will expand to the literal string. + +The following three examples should make this concept clear: + +\begin{beispiel}[code only] + \documentclass{article} + \DeclareTranslation{German}{foo-literal}{bar} + \begin{document} + \GetTranslation{foo-literal} => `foo-literal' + \end{document} +\end{beispiel} + +\begin{beispiel}[code only] + \documentclass{article} + \DeclareTranslationFallback{foo-literal}{foo} + \DeclareTranslation{German}{foo-literal}{bar} + \begin{document} + \GetTranslation{foo-literal} => `foo' + \end{document} +\end{beispiel} + +\begin{beispiel}[code only] + \documentclass{article} + \usepackage[ngerman]{babel} + \DeclareTranslation{German}{foo-literal}{bar} + \begin{document} + \GetTranslation{foo-literal} => `bar' + \end{document} +\end{beispiel} + +\subsection{Dictionaries}\label{sec:dictionaries} +\secidx{Dictionaries}\secidx[Dictionaries]{Usage} +\subsubsection{Own Dictionaries}\secidx[own]{Dictionaries} +A typical dictionary file should look as follows: +\begin{beispiel}[code only] + % this is file housing-german.trsl + \ProvideDictionaryFor{German}{housing}[<version info>] + \DeclareDictTranslation{kitchen (housing)}{K\"uche} + \DeclareDictTranslation{bathroom (housing)}{Bad} + \DeclareDictTranslation{living room (housing)}{Wohnzimmer} + \DeclareDictTranslation{bedroom (housing)}{Schlafzimmer} + ... + \endinput +\end{beispiel} + +The usage is similar to the one in a package: unique keys are given +translations, this time for the language the dictionary file is declared for +only. + +\subsubsection{\translations' Basic Dictionaries}\secidx[basic]{Dictionaries} +\translations\ already provides a basic dictionary for the languages English, +French, German and Spanish. This dictionary is loaded automatically if the +document language is one of these four. If you'd like to contribute and add +the basic dictionary in your language this is more than welcome and highly +appreciated! The easiest way to do this would be to copy one of the existing +files \code{translations-basic-dictionary-<lang>.trsl} and modify the file +accordingly. You can then send me the file via email and I'll add it to +\translations. + +Table~\ref{tab:dict} lists all words provided by the basic dictionary for +German. + +\begin{longtable}{ll} + \caption{All entries of \translations' basic dictionary in German.\label{tab:dict}} \\ + \toprule + \rmfamily\bfseries key & \bfseries translation \\ + \midrule + \endfirsthead + \toprule + \rmfamily\bfseries key & \bfseries translation \\ + \midrule + \endhead + \bottomrule + \endlastfoot + \midrule + & \hfill\emph{continues} \\ + \endfoot + \PrintDictionaryFor{German}{translations-basic-dictionary}{\ttfamily}{&}{\\} +\end{longtable} + +\secidx*{Dictionaries} +\secidx*{Usage} + +\section{Defined Languages}\label{sec:languages}\secidx{Languages} +Quite a number of languages already are defined, either directly or via an +alias. So, before you define a language you should take a look at the tables +below if the language doesn't already exist. Table~\ref{tab:languages} lists +all base languages, ``fallback'' being a dummy language used for fallback +translations. + +\newcounter{column} +\gdef\seplang{% + \stepcounter{column}% + \ifnumless{\value{column}}{4} + {&} + {\\\setcounter{column}{0}}% +} +\def\do#1{#1\seplang} +\makeatletter +\begin{longtable}{llll} + \caption{Base languages defines by \translations.\label{tab:languages}} \\ + \toprule + \endhead + \bottomrule + \endlastfoot + \midrule + &&& \hfill\emph{continues} \\ + \endfoot + \dolistloop\@trnslt@languages +\end{longtable} +\makeatother + +To every one of these languages at least one alias exists, the uppercase +variant. This is due to the fact that it is common to write language names +uppercased. All defined aliases are listed in table~\ref{tab:aliases}. + +\setcounter{column}{0} +\gdef\seplang{% + \ifnumgreater{\value{column}}{3} + {\setcounter{column}{1}} + {\stepcounter{column}}% + \ifnumless{\value{column}}{4} + {&} + {\\}% +} +\def\aliases#1#2{#1\seplang #2\seplang} +\def\do#1{\aliases#1} +\makeatletter +\begin{longtable}{ll@{\hspace*{4em}}ll} + \caption{All language aliases defined by \translations.\label{tab:aliases}}\\ + \toprule + \bfseries alias & \bfseries language & + \bfseries alias & \bfseries language \\ + \midrule + \endfirsthead + \toprule + \bfseries alias & \bfseries language & + \bfseries alias & \bfseries language \\ + \midrule + \endhead + \bottomrule + \endlastfoot + \midrule + &&& \hfill\emph{continues} \\ + \endfoot + \dolistloop\@trnslt@aliases@pair +\end{longtable} +\makeatother + +\translations\ also defines a few dialects. They are listed in +table~\ref{tab:dialects}. + +\makeatletter +\begin{longtable}{ll@{\hspace*{4em}}ll} + \caption{All dialects defined by \translations.\label{tab:dialects}}\\ + \toprule + \bfseries dialect & \bfseries language & + \bfseries dialect & \bfseries language \\ + \midrule + \endfirsthead + \toprule + \bfseries dialect & \bfseries language & + \bfseries dialect & \bfseries language \\ + \midrule + \endhead + \bottomrule + \endlastfoot + \midrule + &&& \hfill\emph{continues} \\ + \endfoot + \dolistloop\@trnslt@dialects@pair +\end{longtable} +\makeatother + +\secidx*{Languages} + +These languages should cover all languages which are currently covered by +\paket{babel} and \paket{polyglossia}. + +\section{Implementation}\index{Implementation@\textbf{Implementation}} +In the following code the lines 1--30 have been omitted. They only repeat the +license statement which has already been mentioned in section~\ref{sec:license}. + +\implementation[linerange={31-1000},firstnumber=31] + +\indexprologue{\noindent Section titles are indicated \textbf{bold}, packages + \textsf{sans serif} and commands + \code{\textbackslash\textcolor{code}{brown}}.\par\bigskip} + +\printindex + +\end{document} diff --git a/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-english.trsl b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-english.trsl new file mode 100644 index 00000000000..47dbcbeb39a --- /dev/null +++ b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-english.trsl @@ -0,0 +1,87 @@ +\ProvideDictionaryFor{English}{translations-basic-dictionary} + +\DeclareDictTranslation{Abstract}{Abstract} +\DeclareDictTranslation{Addresses}{Addresses} +\DeclareDictTranslation{addresses}{addresses} +\DeclareDictTranslation{Address}{Address} +\DeclareDictTranslation{address}{address} +\DeclareDictTranslation{and}{and} +\DeclareDictTranslation{Appendix}{Appendix} +\DeclareDictTranslation{Authors}{Authors} +\DeclareDictTranslation{authors}{authors} +\DeclareDictTranslation{Author}{Author} +\DeclareDictTranslation{author}{author} +\DeclareDictTranslation{Bibliography}{Bibliography} +\DeclareDictTranslation{cc}{cc} +\DeclareDictTranslation{Chapters}{Chapters} +\DeclareDictTranslation{chapters}{chapters} +\DeclareDictTranslation{Chapter}{Chapter} +\DeclareDictTranslation{chapter}{chapter} +\DeclareDictTranslation{Conclusion}{Conclusion} +\DeclareDictTranslation{conclusion}{conclusion} +\DeclareDictTranslation{Contents}{Contents} +\DeclareDictTranslation{Continuation}{Continuation} +\DeclareDictTranslation{continuation}{continuation} +\DeclareDictTranslation{cont}{cont} +\DeclareDictTranslation{encl (plural)}{encl} +\DeclareDictTranslation{encl (singular)}{encl} +\DeclareDictTranslation{encl}{encl} +\DeclareDictTranslation{Figures}{Figures} +\DeclareDictTranslation{figures}{figures} +\DeclareDictTranslation{Figure}{Figure} +\DeclareDictTranslation{figure}{figure} +\DeclareDictTranslation{From}{From} +\DeclareDictTranslation{from}{from} +\DeclareDictTranslation{Glossary}{Glossary} +\DeclareDictTranslation{Index}{Index} +\DeclareDictTranslation{Introduction}{Introduction} +\DeclareDictTranslation{introduction}{introduction} +\DeclareDictTranslation{List of Figures and Tables}{List of Figures and Tables} +\DeclareDictTranslation{List of Figures}{List of Figures} +\DeclareDictTranslation{List of Tables}{List of Tables} +\DeclareDictTranslation{or}{or} +\DeclareDictTranslation{Outline}{Outline} +\DeclareDictTranslation{Overview}{Overview} +\DeclareDictTranslation{Pages}{Pages} +\DeclareDictTranslation{pages}{pages} +\DeclareDictTranslation{Page}{Page} +\DeclareDictTranslation{page}{page} +\DeclareDictTranslation{Paragraphs}{Paragraphs} +\DeclareDictTranslation{paragraphs}{paragraphs} +\DeclareDictTranslation{Paragraph}{Paragraph} +\DeclareDictTranslation{paragraph}{paragraph} +\DeclareDictTranslation{Parts}{Parts} +\DeclareDictTranslation{parts}{parts} +\DeclareDictTranslation{Part}{Part} +\DeclareDictTranslation{part}{part} +\DeclareDictTranslation{Preface}{Preface} +\DeclareDictTranslation{Proofs}{Proofs} +\DeclareDictTranslation{proofs}{proofs} +\DeclareDictTranslation{Proof}{Proof} +\DeclareDictTranslation{proof}{proof} +\DeclareDictTranslation{References}{References} +\DeclareDictTranslation{Related work}{Related work} +\DeclareDictTranslation{Related Work}{Related Work} +\DeclareDictTranslation{Sections}{Sections} +\DeclareDictTranslation{sections}{sections} +\DeclareDictTranslation{Section}{Section} +\DeclareDictTranslation{section}{section} +\DeclareDictTranslation{See also}{See also} +\DeclareDictTranslation{see also}{see also} +\DeclareDictTranslation{See}{See} +\DeclareDictTranslation{see}{see} +\DeclareDictTranslation{Sketch of Proofs}{Sketch of Proofs} +\DeclareDictTranslation{Sketch of proofs}{Sketch of proofs} +\DeclareDictTranslation{Sketch of Proof}{Sketch of Proof} +\DeclareDictTranslation{Sketch of proof}{Sketch of proof} +\DeclareDictTranslation{Subsections}{Subsections} +\DeclareDictTranslation{subsections}{subsections} +\DeclareDictTranslation{Subsection}{Subsection} +\DeclareDictTranslation{subsection}{subsection} +\DeclareDictTranslation{Summary}{Summary} +\DeclareDictTranslation{Tables}{Tables} +\DeclareDictTranslation{tables}{tables} +\DeclareDictTranslation{Table}{Table} +\DeclareDictTranslation{table}{table} +\DeclareDictTranslation{To}{To} +\DeclareDictTranslation{to}{to} diff --git a/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-french.trsl b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-french.trsl new file mode 100644 index 00000000000..ce4965a5475 --- /dev/null +++ b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-french.trsl @@ -0,0 +1,87 @@ +\ProvideDictionaryFor{French}{translations-basic-dictionary} + +\DeclareDictTranslation{Abstract}{R\'{e}sum\'{e}} +\DeclareDictTranslation{Addresses}{Adresses} +\DeclareDictTranslation{addresses}{adresses} +\DeclareDictTranslation{Address}{Adresse} +\DeclareDictTranslation{address}{adresse} +\DeclareDictTranslation{and}{et} +\DeclareDictTranslation{Appendix}{Annexe} +\DeclareDictTranslation{Authors}{Auteurs} +\DeclareDictTranslation{authors}{auteur} +\DeclareDictTranslation{Author}{Auteur} +\DeclareDictTranslation{author}{auteur} +\DeclareDictTranslation{Bibliography}{Bibliographie} +\DeclareDictTranslation{cc}{Copie \`{a} } +\DeclareDictTranslation{Chapters}{Chapitres} +\DeclareDictTranslation{chapters}{chapitres} +\DeclareDictTranslation{Chapter}{Chapitre} +\DeclareDictTranslation{chapter}{chapitre} +\DeclareDictTranslation{Conclusion}{Conclusion} +\DeclareDictTranslation{conclusion}{conclusion} +\DeclareDictTranslation{Contents}{Contenu} +\DeclareDictTranslation{Continuation}{Suite} +\DeclareDictTranslation{continuation}{suite} +\DeclareDictTranslation{cont}{suite} % FIXME: unsure +\DeclareDictTranslation{encl (plural)}{P.~J.} +\DeclareDictTranslation{encl (singular)}{P.~J.} +\DeclareDictTranslation{encl}{P.~J.} +\DeclareDictTranslation{Figures}{Figures} +\DeclareDictTranslation{figures}{figures} +\DeclareDictTranslation{Figure}{Figure} +\DeclareDictTranslation{figure}{figure} +\DeclareDictTranslation{From}{De} +\DeclareDictTranslation{from}{de} +\DeclareDictTranslation{Glossary}{Glossaire} +\DeclareDictTranslation{Index}{Index} +\DeclareDictTranslation{Introduction}{Introduction} +\DeclareDictTranslation{introduction}{introduction} +\DeclareDictTranslation{List of Figures and Tables}{Liste des figures et des tableaux} +\DeclareDictTranslation{List of Figures}{Liste des figures} +\DeclareDictTranslation{List of Tables}{Liste des tableaux} +\DeclareDictTranslation{or}{ou} +\DeclareDictTranslation{Outline}{Plan} +\DeclareDictTranslation{Overview}{Sommaire} +\DeclareDictTranslation{Pages}{Pages} +\DeclareDictTranslation{pages}{pages} +\DeclareDictTranslation{Page}{Page} +\DeclareDictTranslation{page}{page} +\DeclareDictTranslation{Paragraphs}{Paragraphes} +\DeclareDictTranslation{paragraphs}{paragraphes} +\DeclareDictTranslation{Paragraph}{Paragraphe} +\DeclareDictTranslation{paragraph}{paragraphe} +\DeclareDictTranslation{Parts}{Parties} +\DeclareDictTranslation{parts}{parties} +\DeclareDictTranslation{Part}{Partie} +\DeclareDictTranslation{part}{partie} +\DeclareDictTranslation{Preface}{Pr\'{e}face} +\DeclareDictTranslation{Proofs}{D\'{e}monstrations} +\DeclareDictTranslation{proofs}{d\'{e}monstrations} +\DeclareDictTranslation{Proof}{D\'{e}monstration} +\DeclareDictTranslation{proof}{d\'{e}monstration} +\DeclareDictTranslation{References}{R\'{e}f\'{e}rences} +\DeclareDictTranslation{Related work}{travaux connexes} +\DeclareDictTranslation{Related Work}{Travaux connexes} +\DeclareDictTranslation{Sections}{Sections} +\DeclareDictTranslation{sections}{sections} +\DeclareDictTranslation{Section}{Section} +\DeclareDictTranslation{section}{section} +\DeclareDictTranslation{See also}{Voir aussi} +\DeclareDictTranslation{see also}{voir aussi} +\DeclareDictTranslation{See}{Voir} +\DeclareDictTranslation{see}{voir} +\DeclareDictTranslation{Sketch of Proofs}{Esquisse de preuves} +\DeclareDictTranslation{Sketch of proofs}{Esquisse de preuves} +\DeclareDictTranslation{Sketch of Proof}{Esquisse de preuve} +\DeclareDictTranslation{Sketch of proof}{Esquisse de preuve} +\DeclareDictTranslation{Subsections}{Sous-sections} +\DeclareDictTranslation{subsections}{sous-sections} +\DeclareDictTranslation{Subsection}{Sous-section} +\DeclareDictTranslation{subsection}{sous-section} +\DeclareDictTranslation{Summary}{R\'{e}sum\'{e}} +\DeclareDictTranslation{Tables}{Tables} +\DeclareDictTranslation{tables}{tables} +\DeclareDictTranslation{Table}{Table} +\DeclareDictTranslation{table}{table} +\DeclareDictTranslation{To}{Vers}%?? +\DeclareDictTranslation{to}{vers}%?? diff --git a/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-german.trsl b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-german.trsl new file mode 100644 index 00000000000..95732490944 --- /dev/null +++ b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-german.trsl @@ -0,0 +1,87 @@ +\ProvideDictionaryFor{German}{translations-basic-dictionary} + +\DeclareDictTranslation{Abstract}{Zusammenfassung} +\DeclareDictTranslation{Addresses}{Adressen} +\DeclareDictTranslation{addresses}{Adressen} +\DeclareDictTranslation{Address}{Adresse} +\DeclareDictTranslation{address}{Adresse} +\DeclareDictTranslation{and}{und} +\DeclareDictTranslation{Appendix}{Anhang} +\DeclareDictTranslation{Authors}{Autoren} +\DeclareDictTranslation{authors}{Autoren} +\DeclareDictTranslation{Author}{Autor} +\DeclareDictTranslation{author}{Autor} +\DeclareDictTranslation{Bibliography}{Literaturverzeichnis} +\DeclareDictTranslation{cc}{Verteiler} +\DeclareDictTranslation{Chapters}{Kapitel} +\DeclareDictTranslation{chapters}{Kapitel} +\DeclareDictTranslation{Chapter}{Kapitel} +\DeclareDictTranslation{chapter}{Kapitel} +\DeclareDictTranslation{Conclusion}{Zusammenfassung} +\DeclareDictTranslation{conclusion}{Zusammenfassung} +\DeclareDictTranslation{Contents}{Inhaltsverzeichnis} +\DeclareDictTranslation{Continuation}{Fortsetzung} +\DeclareDictTranslation{continuation}{Fortsetzung} +\DeclareDictTranslation{cont}{Forts} +\DeclareDictTranslation{encl (plural)}{Anlagen} +\DeclareDictTranslation{encl (singular)}{Anlage} +\DeclareDictTranslation{encl}{Anlage(n)} +\DeclareDictTranslation{Figures}{Abbildungen} +\DeclareDictTranslation{figures}{Abbildungen} +\DeclareDictTranslation{Figure}{Abbildung} +\DeclareDictTranslation{figure}{Abbildung} +\DeclareDictTranslation{From}{Von} +\DeclareDictTranslation{from}{von} +\DeclareDictTranslation{Glossary}{Glossar} +\DeclareDictTranslation{Index}{Index} +\DeclareDictTranslation{Introduction}{Einleitung} +\DeclareDictTranslation{introduction}{Einleitung} +\DeclareDictTranslation{List of Figures and Tables}{Abbildungs- und Tabellenverzeichnis} +\DeclareDictTranslation{List of Figures}{Abbildungsverzeichnis} +\DeclareDictTranslation{List of Tables}{Tabellenverzeichnis} +\DeclareDictTranslation{or}{oder} +\DeclareDictTranslation{Outline}{Gliederung} +\DeclareDictTranslation{Overview}{\"Uber\-sicht} +\DeclareDictTranslation{Pages}{Seiten} +\DeclareDictTranslation{pages}{Seiten} +\DeclareDictTranslation{Page}{Seite} +\DeclareDictTranslation{page}{Seite} +\DeclareDictTranslation{Paragraphs}{Ab\-s\"at\-ze} +\DeclareDictTranslation{paragraphs}{Ab\-s\"at\-ze} +\DeclareDictTranslation{Paragraph}{Absatz} +\DeclareDictTranslation{paragraph}{Absatz} +\DeclareDictTranslation{Parts}{Teile} +\DeclareDictTranslation{parts}{Teile} +\DeclareDictTranslation{Part}{Teil} +\DeclareDictTranslation{part}{Teil} +\DeclareDictTranslation{Preface}{Vorwort} +\DeclareDictTranslation{Proofs}{Beweise} +\DeclareDictTranslation{proofs}{Beweise} +\DeclareDictTranslation{Proof}{Beweis} +\DeclareDictTranslation{proof}{Beweis} +\DeclareDictTranslation{References}{Literatur} +\DeclareDictTranslation{Related work}{Verwandte Arbeiten} +\DeclareDictTranslation{Related Work}{Verwandte Arbeiten} +\DeclareDictTranslation{Sections}{Abschnitte} +\DeclareDictTranslation{sections}{Abschnitte} +\DeclareDictTranslation{Section}{Abschnitt} +\DeclareDictTranslation{section}{Abschnitt} +\DeclareDictTranslation{See also}{Siehe auch} +\DeclareDictTranslation{see also}{siehe auch} +\DeclareDictTranslation{See}{Siehe} +\DeclareDictTranslation{see}{siehe} +\DeclareDictTranslation{Sketch of Proofs}{Beweisskizzen} +\DeclareDictTranslation{Sketch of proofs}{Beweisskizzen} +\DeclareDictTranslation{Sketch of Proof}{Beweisskizze} +\DeclareDictTranslation{Sketch of proof}{Beweisskizze} +\DeclareDictTranslation{Subsections}{Unterabschnitte} +\DeclareDictTranslation{subsections}{Unterabschnitte} +\DeclareDictTranslation{Subsection}{Unterabschnitt} +\DeclareDictTranslation{subsection}{Unterabschnitt} +\DeclareDictTranslation{Summary}{Zusammenfassung} +\DeclareDictTranslation{Tables}{Tabellen} +\DeclareDictTranslation{tables}{Tabellen} +\DeclareDictTranslation{Table}{Tabelle} +\DeclareDictTranslation{table}{Tabelle} +\DeclareDictTranslation{To}{An} +\DeclareDictTranslation{to}{an} diff --git a/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-spanish.trsl b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-spanish.trsl new file mode 100644 index 00000000000..69e0824b103 --- /dev/null +++ b/Master/texmf-dist/tex/latex/translations/translations-basic-dictionary-spanish.trsl @@ -0,0 +1,87 @@ +\ProvideDictionaryFor{Spanish}{translations-basic-dictionary} + +\DeclareDictTranslation{Abstract}{Resumen} +\DeclareDictTranslation{Addresses}{Direcciones} +\DeclareDictTranslation{addresses}{direcciones} +\DeclareDictTranslation{Address}{Direcci\'{o}n} +\DeclareDictTranslation{address}{direcci\'{o}n} +\DeclareDictTranslation{and}{y} +\DeclareDictTranslation{Appendix}{Ap\'{e}ndice} +\DeclareDictTranslation{Authors}{Autores} +\DeclareDictTranslation{authors}{autores} +\DeclareDictTranslation{Author}{Autor} +\DeclareDictTranslation{author}{autor} +\DeclareDictTranslation{Bibliography}{Bibliograf\'{\i}a} +\DeclareDictTranslation{cc}{c.c.} +\DeclareDictTranslation{Chapters}{Cap\'{\i}tulos} +\DeclareDictTranslation{chapters}{cap\'{\i}tulos} +\DeclareDictTranslation{Chapter}{Cap\'{\i}tulo} +\DeclareDictTranslation{chapter}{cap\'{\i}tulo} +\DeclareDictTranslation{Conclusion}{Conclusi\'{o}n} +\DeclareDictTranslation{conclusion}{conclusi\'{o}n} +\DeclareDictTranslation{Contents}{Contenido} +\DeclareDictTranslation{Continuation}{Continuaci\'{o}n} +\DeclareDictTranslation{continuation}{continuaci\'{o}n} +\DeclareDictTranslation{cont}{cont} +\DeclareDictTranslation{encl (plural)}{adj.} +\DeclareDictTranslation{encl (singular)}{adj.} +\DeclareDictTranslation{encl}{adj.} +\DeclareDictTranslation{Figures}{Figuras} +\DeclareDictTranslation{figures}{figuras} +\DeclareDictTranslation{Figure}{Figura} +\DeclareDictTranslation{figure}{figura} +\DeclareDictTranslation{From}{Desde} +\DeclareDictTranslation{from}{desde} +\DeclareDictTranslation{Glossary}{Glosario} +\DeclareDictTranslation{Index}{\'{I}ndice} +\DeclareDictTranslation{Introduction}{Introducci\'{o}n} +\DeclareDictTranslation{introduction}{introducci\'{o}n} +\DeclareDictTranslation{List of Figures and Tables}{Lista de Figuras y Tablas} +\DeclareDictTranslation{List of Figures}{Lista de Figuras} +\DeclareDictTranslation{List of Tables}{Lista de Tablas} +\DeclareDictTranslation{or}{o} +\DeclareDictTranslation{Outline}{Esbozo} +\DeclareDictTranslation{Overview}{Visi\'{o}n General} +\DeclareDictTranslation{Pages}{P\'{a}ginas} +\DeclareDictTranslation{pages}{p\'{a}ginas} +\DeclareDictTranslation{Page}{P\'{a}gina} +\DeclareDictTranslation{page}{p\'{a}gina} +\DeclareDictTranslation{Paragraphs}{P\'{a}rrafos} +\DeclareDictTranslation{paragraphs}{p\'{a}rrafos} +\DeclareDictTranslation{Paragraph}{P\'{a}rrafo} +\DeclareDictTranslation{paragraph}{p\'{a}rrafo} +\DeclareDictTranslation{Parts}{Partes} +\DeclareDictTranslation{parts}{partes} +\DeclareDictTranslation{Part}{Parte} +\DeclareDictTranslation{part}{parte} +\DeclareDictTranslation{Preface}{Prefacio} +\DeclareDictTranslation{Proofs}{Demostraciones} +\DeclareDictTranslation{proofs}{demostraciones} +\DeclareDictTranslation{Proof}{Demostraci\'{o}n} +\DeclareDictTranslation{proof}{demostraci\'{o}n} +\DeclareDictTranslation{References}{Referencias} +\DeclareDictTranslation{Related work}{Trabajo relacionado} +\DeclareDictTranslation{Related Work}{Trabajo Relacionado} +\DeclareDictTranslation{Sections}{Secciones} +\DeclareDictTranslation{sections}{secciones} +\DeclareDictTranslation{Section}{Secci\'{o}n} +\DeclareDictTranslation{section}{secci\'{o}n} +\DeclareDictTranslation{See also}{Ver tambi\'{e}n} +\DeclareDictTranslation{see also}{ver tambi\'{e}n} +\DeclareDictTranslation{See}{Ver} +\DeclareDictTranslation{see}{ver} +\DeclareDictTranslation{Sketch of Proofs}{Esbozo de Demostraciones} +\DeclareDictTranslation{Sketch of proofs}{Esbozo de demostraciones} +\DeclareDictTranslation{Sketch of Proof}{Esbozo de Demostraci\'{o}n} +\DeclareDictTranslation{Sketch of proof}{Esbozo de demostraci\'{o}n} +\DeclareDictTranslation{Subsections}{Subsecciones} +\DeclareDictTranslation{subsections}{subsecciones} +\DeclareDictTranslation{Subsection}{Subsecci\'{o}n} +\DeclareDictTranslation{subsection}{subsecci\'{o}n} +\DeclareDictTranslation{Summary}{Resumen} +\DeclareDictTranslation{Tables}{Tablas} +\DeclareDictTranslation{tables}{tablas} +\DeclareDictTranslation{Table}{Tabla} +\DeclareDictTranslation{table}{tabla} +\DeclareDictTranslation{To}{Hasta} +\DeclareDictTranslation{to}{hasta} diff --git a/Master/texmf-dist/tex/latex/translations/translations.sty b/Master/texmf-dist/tex/latex/translations/translations.sty new file mode 100644 index 00000000000..ddf88b8240f --- /dev/null +++ b/Master/texmf-dist/tex/latex/translations/translations.sty @@ -0,0 +1,611 @@ +% -------------------------------------------------------------------------- +% the TRANSLATIONS package +% +% a simple translator +% +% This package is part of the exsheets bundle +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/translations +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2012 Clemens Niederberger +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Clemens Niederberger. +% -------------------------------------------------------------------------- +% The translations package is part of the exsheets bundle. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\def\@trnslt@date{2013/07/16} +\def\@trnslt@version{v1.0} + +\ProvidesPackage{translations}[\@trnslt@date\space \@trnslt@version\space a simple translator] +\RequirePackage{etoolbox,scrlfile} + +% -------------------------------------------------------------------------- +% message handling +\def\@trnslt@error@message{% + For details have a look at the `translations' manual.} + +\def\@trnslt@create@message#1{% + \ifstrequal{#1}{Error} + {% + \lowercase{\csdef{@trnslt@#1}}##1{% + \csuse{Package#1}{translations}{##1}{\@trnslt@error@message}}% + }{% + \lowercase{\csdef{@trnslt@#1}}##1{% + \csuse{Package#1}{translations}{##1}}% + }} +\@trnslt@create@message{Error} +\@trnslt@create@message{Warning} +\@trnslt@create@message{WarningNoLine} +\@trnslt@create@message{Info} + +\def\@trnslt@err@unknown@lang#1{% + \@trnslt@error{Unknown language `#1'}} + +\def\@trnslt@warn@unknown@lang#1{% + \@trnslt@warning{Unknown language `#1'}} + +\def\@trnslt@err@already@defined#1#2{% + \@trnslt@error{The #2 translation for `#1' is already defined.}} + +\def\@trnslt@err@not@defined#1#2{% + \@trnslt@error{The \@trnslt@language{#2} translation for `#1' is not defined yet.}} + +% -------------------------------------------------------------------------- +% check if babel or polyglossia is used +\AtEndPreamble{ + \@ifpackageloaded{babel}{}{ + \@ifpackageloaded{polyglossia}{} + {\@trnslt@warning{No language package found. I am going to use `english' + as default language.}} + } + \ifdef\languagename{} + {\def\languagename{english}} + \def\@trnslt@current@language{\languagename} + \ifdef\bbl@afterfi{} + {\long\def\bbl@afterfi#1\fi{\fi#1}} +} + +% -------------------------------------------------------------------------- +% book keeping: the following macros will be used as `etoolbox' lists that +% keep record of defined languages, dialects and aliases +\def\@trnslt@languages{}% all languages +\def\@trnslt@aliases@pair{}% all aliases and their base +\def\@trnslt@aliases@single{}% all aliases +\def\@trnslt@dialects@pair{}% all dialects and their base +\def\@trnslt@dialects@single{}% all dialects + +% -------------------------------------------------------------------------- +% define \@trnslt@if@<name> conditionals that don't leave the checked macro as +% \relax behind and check for \@trnslt@<name>@#1. These conditionals should +% also be expandable in an \edef-like context: +\def\@trnslt@newif#1{% + \csdef{@trnslt@if@#1}##1{% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \@firstofone + {\expandafter\expandafter\expandafter}% + \ifcsname @trnslt@#1@##1\endcsname + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + }% +} + +% -------------------------------------------------------------------------- +% \DeclareLanguage +% #1: language +\newrobustcmd*\DeclareLanguage[1]{% + \@trnslt@declare@language{#1}} +\@onlypreamble\DeclareLanguage + +\def\@trnslt@declare@language#1{% + \@trnslt@if@language{#1} + {}{% + \csdef{@trnslt@language@#1}{#1}% + \listeadd\@trnslt@languages{#1}% + }% +} + +\def\@trnslt@language#1{% + \csuse{@trnslt@language@#1}} + +\@trnslt@newif{language} + +% -------------------------------------------------------------------------- +% \DeclareLanguageDialect +% #1: dialect +% #2: language +\newrobustcmd*\DeclareLanguageDialect[2]{% + \@trnslt@declare@languagedialect{#1}{#2}} +\@onlypreamble\DeclareLanguageDialect + +\def\@trnslt@declare@languagedialect#1#2{% + \@trnslt@if@language{#2} + {}{% + \@trnslt@warn@unknown@lang{#2}% + \@trnslt@declare@language{#2}% + }% + \@trnslt@if@dialect{#1} + {% => ist schon als dialect definiert => irgendwelche weiteren checks? + } + {% + \@trnslt@if@alias{#2} + {% + \csedef{@trnslt@dialect@#1}{{\@trnslt@alias{#2}}{#1}}% + \@trnslt@declare@language{#1}% + \listeadd\@trnslt@dialects@single{#1}% + \listeadd\@trnslt@dialects@pair{{#1}{\@trnslt@alias{#2}}}% + } + {% + \csdef{@trnslt@dialect@#1}{{#2}{#1}}% + \@trnslt@declare@language{#1}% + \listeadd\@trnslt@dialects@single{#1}% + \listeadd\@trnslt@dialects@pair{{#1}{#2}}% + }% + }% +} + +\def\@trnslt@dialect#1{% + \csuse{@trnslt@dialect@#1}} + +% this macros fetches the base language for a given dialect, expandably: +\def\@trnslt@dialect@of#1{% + \@trnslt@if@dialect{#1} + {% + \expandafter\expandafter\expandafter + \@firstoftwo + \csname @trnslt@dialect@#1\endcsname + }{}% +} + +\@trnslt@newif{dialect} + +% -------------------------------------------------------------------------- +% \DeclareLanguageAlias +% #1: alias +% #2: language +\newrobustcmd*\DeclareLanguageAlias[2]{% + \@trnslt@declare@languagealias{#1}{#2}} +\@onlypreamble\DeclareLanguageAlias + +\def\@trnslt@declare@languagealias#1#2{% + \@trnslt@if@language{#2} + {}{% + \@trnslt@warn@unknown@lang{#2}% + \@trnslt@declare@language{#2}% + }% + \csletcs{@trnslt@language@#1}{@trnslt@language@#2}% + \@trnslt@if@dialect{#2} + {\csletcs{@trnslt@dialect@#1}{@trnslt@dialect@#2}} + {}% + \ifinlist{#1}\@trnslt@aliases@single + {}{% + \csdef{@trnslt@alias@#1}{#2}% + \listeadd\@trnslt@aliases@pair{{#1}{#2}}% + \listeadd\@trnslt@aliases@single{#1}% + }% +} + +\def\@trnslt@alias#1{% + \csuse{@trnslt@alias@#1}} + +\@trnslt@newif{alias} + +% -------------------------------------------------------------------------- +% dummy language: `fallback': +\DeclareLanguage{fallback} +\DeclareLanguageAlias{Fallback}{fallback} + +% -------------------------------------------------------------------------- +% \DeclareTranslation, \NewTranslation and \RenewTranslation +% #1: language +% #2: word +% #3: replacement +\newrobustcmd*\DeclareTranslation[3]{% + \@trnslt@declare@translation{#2}{#1}{#3}} +\@onlypreamble\DeclareTranslation + +\newrobustcmd*\DeclareTranslationFallback[2]{% + \@trnslt@declare@translation{#1}{fallback}{#2}} +\@onlypreamble\DeclareTranslationFallback + +\newrobustcmd*\NewTranslation[3]{% + \@trnslt@new@translation{#2}{#1}{#3}} +\@onlypreamble\NewTranslation + +\newrobustcmd*\RenewTranslation[3]{% + \@trnslt@renew@translation{#2}{#1}{#3}} +\@onlypreamble\RenewTranslation + +% #1: word +% #2: language +% #3: replacement +\def\@trnslt@declare@translation#1#2#3{% + \@trnslt@if@language{#2} + {% + \@trnslt@if@dialect{#2} + {% + \csdef{@trnslt@word@#1@\@trnslt@dialect{#2}}{#3}% + \@trnslt@if@word\@trnslt@dialect@of{#1}{#2} + {} + {\csdef{@trnslt@word@#1@\@trnslt@dialect@of{#2}}{#3}}% + } + {\csdef{@trnslt@word@#1@\@trnslt@language{#2}}{#3}}% + % save the <word> as <word>: + \csdef{@trnslt@word@#1@literal}{#1}% + } + {\@trnslt@err@unknown@lang{#2}}% +} + +\def\@trnslt@new@translation#1#2#3{% + \@trnslt@if@translation{#1}{#2} + {\@trnslt@err@already@defined{#1}{#2}} + {\@trnslt@declare@translation{#1}{#2}{#3}}} + +\def\@trnslt@renew@translation#1#2#3{% + \@trnslt@if@translation{#1}{#2} + {\@trnslt@declare@translation{#1}{#2}{#3}} + {\@trnslt@err@not@defined{#1}{#2}}} + +% -------------------------------------------------------------------------- +% now let's go through some trouble to check if a translation exists: +\def\@trnslt@if@word#1#2#3{% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \@firstofone + {\expandafter\expandafter\expandafter}% + \ifcsname @trnslt@word@#2@#1{#3}\endcsname + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +}% + +\def\@trnslt@if@translation#1#2{% + \@trnslt@if@word\@trnslt@language{#1}{#2} + {\expandafter\@firstoftwo} + {% + \@trnslt@if@dialect{#2} + {% + \@trnslt@if@word\@trnslt@dialect{#1}{#2} + {\expandafter\@firstoftwo} + {% + \@trnslt@if@word\@trnslt@dialect@of{#1}{#2} + {\expandafter\@firstoftwo} + {\expandafter\@secondoftwo}% + } + } + {\expandafter\@secondoftwo}% + }% +} + +% -------------------------------------------------------------------------- +% \GetTranslationFor and \GetTranslation +% these need to be expandable! +% #1: language +% #2: word +\newcommand*\GetTranslationFor[2]{% + \@trnslt@checkandget@translation@for{#2}{#1}} + +\newcommand*\GetTranslation[1]{% + \@trnslt@checkandget@translation@for{#1}{\@trnslt@current@language}} + +% unexpandable version of the commands that raise a warning if no translation +% is available: +\newcommand*\GetTranslationForWarn[2]{% + \@trnslt@getandwarn@translation@for{#2}{#1}} + +\newcommand*\GetTranslationWarn[1]{% + \@trnslt@getandwarn@translation@for{#1}{\@trnslt@current@language}} + +% #1: word #2: language +\def\@trnslt@get@translation@for#1#2{% + \@trnslt@if@dialect{#2} + {% + \ifcsdef{@trnslt@word@#1@\@trnslt@dialect{#2}} + {\csuse{@trnslt@word@#1@\@trnslt@dialect{#2}}} + {\csuse{@trnslt@word@#1@\@trnslt@dialect@of{#2}}}% + } + {\csuse{@trnslt@word@#1@\@trnslt@language{#2}}}% +} + +\def\@trnslt@checkandget@translation@for#1#2{% + \@trnslt@if@translation{#1}{#2} + {\@trnslt@get@translation@for{#1}{#2}} + {% + \@trnslt@if@translation{#1}{fallback} + {\csuse{@trnslt@word@#1@fallback}} + {\csuse{@trnslt@word@#1@literal}}% + }% +} + +% this is not expandable! +\protected\def\@trnslt@getandwarn@translation@for#1#2{% + \@trnslt@if@translation{#1}{#2} + {\@trnslt@get@translation@for{#1}{#2}} + {% + \@trnslt@warning{Translation for `#1' in #2 unknown. You may try to use + \string\DeclareTranslation{#2}{#1}{ ... } in your preamble.}% + \@trnslt@if@translation{#1}{fallback} + {% + \@trnslt@info{Using fallback translation for `#1'}% + \csuse{@trnslt@word@#1@fallback} + } + {\csuse{@trnslt@word@#1@literal}}% + }% +} + +% -------------------------------------------------------------------------- +% \SaveTranslationFor and \SaveTranslation +\newrobustcmd*\SaveTranslationFor[3]{% + \@trnslt@save@translation@for{#1}{#3}{#2}} + +\newrobustcmd*\SaveTranslation[2]{% + \@trnslt@save@translation@for{#1}{#2}{\@trnslt@current@language}} + +\def\@trnslt@save@translation@for#1#2#3{% + \edef#1{% + \@trnslt@if@translation{#2}{#3} + {\csuse{@trnslt@word@#2@\@trnslt@language{#3}}} + {}% + }} + +% -------------------------------------------------------------------------- +% \LoadDictionary and \LoadDictionaryFor +\newrobustcmd*\LoadDictionary[1]{% + \@trnslt@load@dictionary@for{#1}{\@trnslt@current@language}} +\@onlypreamble\LoadDictionary + +\newrobustcmd*\LoadDictionaryFor[2]{% + \@trnslt@load@dictionary@for{#2}{#1}} +\@onlypreamble\LoadDictionaryFor + +% #1: name +% #2: lang +\def\@trnslt@load@dictionary@for#1#2{% + \AtBeginDocument{% + \InputIfFileExists{#1-\@trnslt@language{#2}.trsl} + {\@trnslt@check@dictionary{#1}{#2}} + {\@trnslt@warning{dictionary file `#1-\@trnslt@language{#2}.trsl' not + found.}}% + }} + +\def\@trnslt@check@dictionary#1#2{% + \AfterFile{#1-\@trnslt@language{#2}.trsl} + {% + \ifcsdef{@trnslt@dictionary@#1@\@trnslt@language{#2}} + {\@trnslt@info{loading dictionary `#1' for `#2'.}} + {% + \@trnslt@warning{file `#1-\@trnslt@language{#2}.trsl' does not + appear to be a dictionary}% + }% + }% +} + +\def\@trnslt@load@dictionary@silent@for#1#2{% + \AtBeginDocument{\InputIfFileExists{#1-\@trnslt@language{#2}.trsl}{}{}}} + +\newrobustcmd*\ProvideDictionaryFor[2]{% + \@trnslt@provide@dictionary@for{#1}{#2}} +\@onlypreamble\ProvideDictionaryFor + +\def\@trnslt@provide@dictionary@for#1#2{% + \def\@trnslt@dictionary@name{#2}% + \edef\@trnslt@dictionary@lang{\@trnslt@language{#1}}% + % this macro can be used to check if we have a dictionary and will also be + % used as a list for the dictionary entries: + \csdef{@trnslt@dictionary@\@trnslt@dictionary@name @\@trnslt@dictionary@lang}{}% + \@ifnextchar[ + {\@trnslt@provide@dictionary@version} + { + \ProvidesFile + {#2-\@trnslt@dictionary@lang.trsl}% + [(\@trnslt@dictionary@lang\space translation file `#2')] + }% +} + +\def\@trnslt@provide@dictionary@version[#1]{% + \ProvidesFile + {\@trnslt@dictionary@name-\@trnslt@dictionary@lang.trsl}% + [(\@trnslt@dictionary@lang\space translation file `\@trnslt@dictionary@name') #1]} + +% \@trnslt@dictionary@language +\newrobustcmd*\DeclareDictTranslation[2]{% + \listcsadd + {@trnslt@dictionary@\@trnslt@dictionary@name @\@trnslt@dictionary@lang} + {{#1}{#2}}% + \@trnslt@declare@translation{#1}{\@trnslt@dictionary@lang}{#2}% +} +\@onlypreamble\DeclareDictTranslation + +% \PrintDictionaryFor +% #1: lang +% #2: name +% #3: pre +% #4: mid +% #5: post +\newcommand*\PrintDictionaryFor[5]{% + \@trnslt@print@dictionary@for{#1}{#2}{#3}{#4}{#5}} + +% #1: lang +% #2: name +% #3: pre +% #4: mid +% #5: post +\def\@trnslt@print@dictionary@for#1#2#3#4#5{% + \forlistcsloop + {\@trnslt@print@dictionary@entry{#3}{#4}{#5}} + {@trnslt@dictionary@#2@\@trnslt@language{#1}}% +} + +% #1: pre +% #2: mid +% #3: post +% #4: {key}{translation} +\def\@trnslt@print@dictionary@entry#1#2#3#4{% + \@trnslt@print@dictionary@entry@aux{#1}{#2}{#3}#4} + +% #1: pre +% #2: mid +% #3: post +% #4: key +% #5: translation +\def\@trnslt@print@dictionary@entry@aux#1#2#3#4#5{#1#4#2#5#3} + +% -------------------------------------------------------------------------- +% predefined languages +\DeclareLanguage{albanian} +\DeclareLanguage{bulgarian} +\DeclareLanguage{catalan} +\DeclareLanguage{croatian} +\DeclareLanguage{czech} +\DeclareLanguage{danish} +\DeclareLanguage{dutch} +\DeclareLanguage{english} +\DeclareLanguage{finnish} +\DeclareLanguage{french} +\DeclareLanguage{german} +\DeclareLanguage{greek} +\DeclareLanguage{hebrew} +\DeclareLanguage{hungarian} +\DeclareLanguage{icelandic} +\DeclareLanguage{italian} +\DeclareLanguage{norwegian} +\DeclareLanguage{polish} +\DeclareLanguage{portuges} +\DeclareLanguage{romanian} +\DeclareLanguage{russian} +\DeclareLanguage{serbocroatian} +\DeclareLanguage{slovak} +\DeclareLanguage{slovenian} +\DeclareLanguage{spanish} +\DeclareLanguage{swedish} +\DeclareLanguage{turkish} +\DeclareLanguage{ukrainian} + +% -------------------------------------------------------------------------- +% aliases and dialects: +\DeclareLanguageAlias {Albanian}{albanian} +\DeclareLanguageAlias {Bulgarian}{bulgarian} +\DeclareLanguageAlias {Catalan}{catalan} +\DeclareLanguageAlias {Croatian}{croatian} +\DeclareLanguageAlias {Czech}{czech} +\DeclareLanguageAlias {Danish}{danish} +\DeclareLanguageAlias {Dutch}{dutch} +\DeclareLanguageAlias {Finnish}{finnish} +\DeclareLanguageAlias {francais}{french} +\DeclareLanguageAlias {Francais}{francais} +\DeclareLanguageDialect{canadien}{french} +\DeclareLanguageAlias {Canadien}{canadien} +\DeclareLanguageAlias {French}{french} +\DeclareLanguageDialect{american}{english} +\DeclareLanguageAlias {American}{american} +\DeclareLanguageDialect{australian}{english} +\DeclareLanguageAlias {Australian}{australian} +\DeclareLanguageDialect{british}{english} +\DeclareLanguageAlias {British}{british} +\DeclareLanguageDialect{canadian}{english} +\DeclareLanguageAlias {Canadian}{canadian} +\DeclareLanguageAlias {English}{english} +\DeclareLanguageAlias {UKenglish}{british} +\DeclareLanguageAlias {USenglish}{american} +\DeclareLanguageDialect{austrian}{german} +\DeclareLanguageAlias {Austrian}{austrian} +\DeclareLanguageAlias {German}{german} +\DeclareLanguageAlias {germanb}{german} +\DeclareLanguageDialect{naustrian}{austrian} +\DeclareLanguageAlias {ngerman}{german} +\DeclareLanguageAlias {Greek}{greek} +\DeclareLanguageAlias {polutonikogreek}{greek} +\DeclareLanguageAlias {Hebrew}{hebrew} +\DeclareLanguageAlias {Hungarian}{hungarian} +\DeclareLanguageDialect{magyar}{hungarian} +\DeclareLanguageAlias {Magyar}{magyar} +\DeclareLanguageAlias {Icelandic}{icelandic} +\DeclareLanguageAlias {Italian}{italian} +\DeclareLanguageAlias {norsk}{norwegian} +\DeclareLanguageAlias {Norsk}{norsk} +\DeclareLanguageAlias {Norwegian}{norwegian} +\DeclareLanguageAlias {nynorsk}{norwegian} +\DeclareLanguageAlias {Nynorsk}{nynorsk} +\DeclareLanguageAlias {Polish}{polish} +\DeclareLanguageDialect{brazil}{portuges} +\DeclareLanguageAlias {Brazil}{brazil} +\DeclareLanguageAlias {brazilian}{brazil} +\DeclareLanguageAlias {Brazilian}{brazilian} +\DeclareLanguageAlias {Portuges}{portuges} +\DeclareLanguageAlias {portuguese}{portuges} +\DeclareLanguageAlias {Portuguese}{portuguese} +\DeclareLanguageAlias {Romanian}{romanian} +\DeclareLanguageAlias {Russian}{russian} +\DeclareLanguageAlias {Serbocroatian}{serbocroatian} +\DeclareLanguageAlias {Slovak}{slovak} +\DeclareLanguageAlias {Slovenian}{slovenian} +\DeclareLanguageAlias {Spanish}{spanish} +\DeclareLanguageAlias {Swedish}{swedish} +\DeclareLanguageDialect{swissgerman}{german} +% this maybe should be a language of it's own: +\DeclareLanguageAlias {Swiss}{swissgerman} +\DeclareLanguageAlias {Swissgerman}{swissgerman} +\DeclareLanguageAlias {Turkish}{turkish} +\DeclareLanguageAlias {Ukrainian}{ukrainian} + +% -------------------------------------------------------------------------- +% load basic dictionary if available +\AtBeginDocument{% + \@trnslt@load@dictionary@silent@for + {translations-basic-dictionary} + {\@trnslt@current@language}% +} + +\endinput + +% -------------------------------------------------------------------------- +% HISTORY: +2012/09/30 v0.2beta - first version (as part of the `exsheets' bundle) +2012/10/05 v0.2 - \LoadDictionary and \LoadDictionaryFor added and loads of + languages defined. +2013/03/10 v0.8 - basic dictionaries for English, German, French and Spanish + - new command \DeclareDictTranslation +2013/04/04 v0.8a - bug fix in \DeclareDictTranslation +2013/04/07 v0.9 - slightly improved messages +2013/04/08 v0.9a - changed fallback warning into info + - synchronized version number with `exsheets' until now but + won't any more +2013/06/22 v0.9b - added Swiss +2013/06/28 v0.10 - declaring aliases of dialects now works as expected + - declarings dialects of an alias now correctly declares + the dialect to the correct base language + - corrected a few erroneous language declarations +2013/07/12 v0.10a - \GetTranslation gets two-folded fallback: use + fallback-translation if no translation for the current + language has been defined; use literal string if /no/ + language is used - this should never happen but /will/ + happen if neither `babel' nor `polyglossia' have been + loaded, i.e., no language has been chosen /and/ the + package writer did not provide an English translation +2013/07/16 v1.0 - removed from `exsheets' bundle - `translations' should + be a package of it's own + - load basic dictionary automatically if available + - rudimentary check in \LoadDictionary if loaded file is a + dictionary + - new command \PrintDictionaryFor + - redefined conditionals; they still seemed to make + trouble in some cases + diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index a985ede1803..65f8d4275e1 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -471,6 +471,7 @@ my @TLP_working = qw( translation-ecv-de translation-enumitem-de translation-europecv-de translation-filecontents-de translation-moreverb-de translation-natbib-fr translation-tabbing-fr + translations tree-dvips treetex trfsigns trimspaces trivfloat trsym truncate tsemlines tucv tufte-latex tugboat tugboat-plain tui turkmen turnstile turnthepage diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 75e80434c4e..04798e72c5a 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -995,6 +995,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'translation-europecv-de', "&MAKEnosymlinks", 'translation-footmisc-de', "die 'skipping, nocommercial'", 'translation-pst-jtree-de', "die 'skipping, nocommercial'", + 'translations',"&MAKEflatten", 'translator', "die 'skipping, now part of beamer'", # 'tree-dvips', "die 'skipping, noinfo license, latex 2.09'", 'treesvr', "die 'skipping, await request, 1995'", @@ -1551,6 +1552,7 @@ $standardtex='\.(.bx|cfg|sty|clo|ldf|cls|def|fd|cmap|4ht)$'; 'tkz-orm', 'tkz.*\.sty', # no pgfmanual.sty 'tlc2', 'NULL', # doc package 'tools', '\.cfg|\.sty|\.clo|\.cls|\.def|\.fd$|.?\.tex|^\.tex$', + 'translations','\.trsl|' . $standardtex, 'translator', '\.dict|translator-language-mappings.tex|' . $standardtex, 'translation-array-fr', 'NULL', # doc 'translation-europecv-de', 'NULL', # doc diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index 79f0a33f0c8..31667219cd8 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -828,6 +828,7 @@ depend toolbox depend topfloat depend totcount depend totpages +depend translations depend trfsigns depend trimspaces depend trsym diff --git a/Master/tlpkg/tlpsrc/translations.tlpsrc b/Master/tlpkg/tlpsrc/translations.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/translations.tlpsrc |