Maneira elegante de definir um pacote com traduções

Maneira elegante de definir um pacote com traduções

Um problema que às vezes surge na construção de pacotes é permitir traduções.

Atualmente mantenho dois pacotes foo-nl.sty(versão em holandês) e foo-en.sty(versão em inglês). Um problema com esta abordagem é que é necessário sincronizar os dois pacotes e não existe nenhum mecanismo para verificar se este é o caso.

Que outras opções existem para fornecer traduções. Seria bom definir automaticamente o idioma também, com base no \usepackage[dutch]{babel}comando do documento principal.

Responder1

O translationspacote foi desenvolvido exatamente para esse fim. No pacote são fornecidas traduções para palavras-chave para cada idioma com

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

Provavelmente também deveríamos adicionar

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

que é usado se babelfor escolhido um idioma para o qual nenhuma tradução é fornecida.

As traduções declaradas desta forma podem ser usadas com

\GetTranslation{<keyword>}

Este comando é expansível para que também funcione em títulos de seções que são utilizadas como hyperrefmarcadores, por exemplo.

Aqui está um pequeno pacote de exemplo:

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

insira a descrição da imagem aqui

informação relacionada