번역으로 패키지를 정의하는 우아한 방법

번역으로 패키지를 정의하는 우아한 방법

패키지를 구성할 때 가끔 발생하는 문제는 번역을 활성화하는 것입니다.

현재 저는 두 개의 패키지 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}

여기에 이미지 설명을 입력하세요

관련 정보