
Ein Problem, das beim Erstellen von Paketen manchmal auftritt, ist das Aktivieren von Übersetzungen.
Derzeit verwalte ich zwei Pakete foo-nl.sty
(niederländische Version) und foo-en.sty
(englische Version). Ein Problem bei diesem Ansatz ist natürlich, dass man die beiden Pakete synchronisieren muss und es keinen Mechanismus gibt, um zu überprüfen, ob dies der Fall ist.
Welche anderen Möglichkeiten gibt es, Übersetzungen bereitzustellen? Es wäre schön, wenn die Sprache auch automatisch eingestellt würde, basierend auf dem \usepackage[dutch]{babel}
Befehl im Hauptdokument.
Antwort1
Das translations
Paket wurde genau zu diesem Zweck entwickelt. Im Paket werden Übersetzungen für Schlüsselwörter für jede Sprache bereitgestellt mit
\DeclareTranslation{<language>}{<keyword>}{<translation>}
Man sollte wahrscheinlich auch hinzufügen
\DeclareTranslationFallback{<keyword>}{<translation>}
das verwendet wird, wenn eine babel
Sprache ausgewählt wird, für die keine Übersetzung bereitgestellt wird.
Auf diese Weise deklarierte Übersetzungen können verwendet werden mit
\GetTranslation{<keyword>}
Dieser Befehl ist erweiterbar, sodass er auch in Abschnittstiteln funktioniert, die hyperref
beispielsweise als Lesezeichen verwendet werden.
Hier ist ein kurzes Beispielpaket:
\documentclass{article}
\usepackage[english,dutch]{babel}
\usepackage{filecontents}
\begin{filecontents}{mypackage.sty}
\ProvidesPackage{mypackage}
\RequirePackage{translations}
% a command that's translated according to the provided translations:
\newcommand*\mypackagetitle{\section*{\GetTranslation{mypackage-title}}}
% the translations:
% the fallback is used for languages where no specific translation is provided
\DeclareTranslationFallback {mypackage-title}{My title}
\DeclareTranslation{English}{mypackage-title}{My title}
\DeclareTranslation{Dutch} {mypackage-title}{Mijn titel}
\end{filecontents}
\usepackage{mypackage}
\begin{document}
\mypackagetitle
\edef\foo{\GetTranslation{mypackage-title}}
\show\foo
% > \foo=macro:
% ->Mijn titel.
% l.27 \show\foo
\selectlanguage{english}
\mypackagetitle
\edef\foo{\GetTranslation{mypackage-title}}
\show\foo
% > \foo=macro:
% ->My title.
% l.37 \show\foo
\end{document}