Элегантный способ определить пакет с переводами

Элегантный способ определить пакет с переводами

Проблема, которая иногда возникает при создании пакетов, — это включение переводов.

В настоящее время я поддерживаю два пакета foo-nl.sty(голландскую версию) и foo-en.sty(английскую версию). Проблема этого подхода, конечно, в том, что нужно синхронизировать два пакета, и нет механизма, чтобы проверить, так ли это.

Какие еще есть варианты для предоставления переводов? Было бы неплохо также автоматически устанавливать язык, основываясь на \usepackage[dutch]{babel}команде в основном документе.

решение1

Пакет translationsбыл разработан именно для этой цели. В пакете предусмотрены переводы ключевых слов для каждого языка с

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

Вероятно, следует также добавить

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

который используется, если babelвыбран язык, для которого не предусмотрен перевод.

Переводы, объявленные таким образом, могут использоваться с

\GetTranslation{<keyword>}

hyperrefЭту команду можно расширить , например, так, чтобы она работала и в заголовках разделов, используемых в качестве закладок.

Вот краткий пример пакета:

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

введите описание изображения здесь

Связанный контент