Manera elegante de definir un paquete con traducciones.

Manera elegante de definir un paquete con traducciones.

Un problema que a veces surge al construir paquetes es permitir las traducciones.

Actualmente mantengo dos paquetes foo-nl.sty(versión holandesa) y foo-en.sty(versión en inglés). Un problema con este enfoque es, por supuesto, que es necesario sincronizar los dos paquetes y no existe ningún mecanismo para comprobar si este es el caso.

¿Qué otras opciones existen para proporcionar traducciones? Sería bueno configurar también el idioma automáticamente, según el \usepackage[dutch]{babel}comando del documento principal.

Respuesta1

El translationspaquete fue desarrollado exactamente para este propósito. En el paquete se proporcionan traducciones de palabras clave para cada idioma con

\DeclareTranslation{<language>}{<keyword>}{<translation>}

Probablemente también habría que añadir

\DeclareTranslationFallback{<keyword>}{<translation>}

que se utiliza si babelse elige un idioma para el cual no se proporciona traducción.

Las traducciones declaradas de esta manera se pueden utilizar con

\GetTranslation{<keyword>}

Este comando se puede ampliar para que también funcione en títulos de secciones que se utilizan como hyperrefmarcadores, por ejemplo.

Aquí hay un breve paquete de ejemplo:

\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}

ingrese la descripción de la imagen aquí

información relacionada