![用翻译来定义包的优雅方式](https://linux22.com/image/290073/%E7%94%A8%E7%BF%BB%E8%AF%91%E6%9D%A5%E5%AE%9A%E4%B9%89%E5%8C%85%E7%9A%84%E4%BC%98%E9%9B%85%E6%96%B9%E5%BC%8F.png)
在构建包时有时会出现的一个问题是启用翻译。
目前我维护两个包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}