根据语言更改文本

根据语言更改文本

这可能是一个相当简单的问题,但我找不到答案:当我写例如

\pageref{Example}

输出是on page 12针对 babel 语言的英语,但auf Seite 12针对 babel 语言的是德语。

我想创建这样的自定义语言集:

\createTranslation{insertTableTitle}
{english=Something, german=Etwas, italiano=Alcuno, default=Something}

当我调用它时,\insertTableTitle它会根据语言扩展为不同的字符串。当然,这个例子是伪代码,但我很确定,babel 中有一些内置命令可以完成这项工作。

执行此操作的默认方法是什么或如何处理目录标题等?

答案1

简短的回答是你写一个条件:-) 如何实现条件,有多种选择。

例如,该varioref软件包使用软件包选项(babel完全避免)。请看(复制自varioref.sty):

\DeclareOption{american}
  {\vref@addto\extrasamerican{%
    \def\reftextfaceafter {on the \reftextvario{facing}{next} page}%
    \def\reftextfacebefore{on the \reftextvario{facing}{preceding}
                           page}%
    \def\reftextafter     {on the \reftextvario{following}{next} page}%
    \def\reftextbefore    {on the \reftextvario{preceding}{previous} page}%
    \def\reftextcurrent   {on \reftextvario{this}{the current} page}%
    \def\reftextfaraway#1{on page~\pageref{#1}}%
    \def\reftextpagerange#1#2{on pages~\pageref{#1}--\pageref{#2}}%
    \def\reftextlabelrange#1#2{\ref{#1} to~\ref{#2}}%
    \let\vrefformat\vrefdefaultformat
    \let\Vrefformat\Vrefdefaultformat
    \let\fullrefformat\fullrefdefaultformat
    \let\vrefrangeformat\vrefrangedefaultformat
  }}
\DeclareOption{arabic}
  {\vref@addto\extrasarabic{%
    \def\reftextfaceafter {بالصفحة \reftextvario{المقابلة}{اللاحقة}}%
    \def\reftextfacebefore{بالصفحة \reftextvario{المقابلة}{المُنْصَرِمَةٌ}}%
    \def\reftextafter     {بالصفحة \reftextvario{اللاحقة}{التالية}}%
    \def\reftextbefore    {بالصفحة \reftextvario{السابقة}{المُنْصَرِمَةٌ}}%
    \def\reftextcurrent   {ب\reftextvario{الصفحة الحالية}{هذه الصفحة}}%
    \def\reftextfaraway#1{بالصفحة رقم~\pageref{#1}}%
    \def\reftextpagerange#1#2{بالصفحات~\pageref{#1}--\pageref{#2}}%
    \def\reftextlabelrange#1#2{\ref{#1} حتى~\ref{#2}}%
    \let\vrefformat\vrefdefaultformat
    \let\Vrefformat\Vrefdefaultformat
    \let\fullrefformat\fullrefdefaultformat
    \let\vrefrangeformat\vrefrangedefaultformat
  }}
\DeclareOption{austrian}
  {\vref@addto\extrasaustrian{%
    \def\reftextfaceafter {auf der n\"achsten Seite}%
    \def\reftextfacebefore{auf der vorherigen Seite}%
    \let\reftextafter     \reftextfaceafter
    \let\reftextbefore    \reftextfacebefore
    \def\reftextcurrent   {auf dieser Seite}%
    \def\reftextfaraway#1{auf Seite~\pageref{#1}}%
    \def\reftextpagerange#1#2{auf Seiten~\pageref{#1}--\pageref{#2}}%
    \def\reftextlabelrange#1#2{\ref{#1} bis~\ref{#2}}%
    \let\vrefrangeformat\vrefrangedefaultformat
  }}

如果你想要一个babel基于的解决方案,你可以使用条件

\iflanguage{<language>}{<true action>}{<false action>}

所以就像

\newcommand\mytabletitle{%
   \iflanguage{english}{Something}{%
   \iflanguage{german}{Etwas}{%
   \iflanguage{italiano}{Alcuno}{%
      Something %default
   }}}}

并打印您的命令\mytabletitle而不是任何硬编码的字符串。

这个问题的答案给出了使用基于 babel 的条件的其他一些方法。具体来说,egreg 提供了一个改进的版本,它使用了您在原始问题中要求的键值语法。我不会窃取他的答案,而是向您指出它。

答案2

你可以使用这个translator包。例如,Beamer 就是用这个包来翻译“Figure”之类的字符串的。

您会发现它的词典中已经包含许多常用术语的翻译,但您也可以添加新的术语:

\documentclass[
ngerman
%english
]{article}

\usepackage{babel}

\usepackage{translator}
\usedictionary{translator-basic-dictionary}

\newtranslation[to = German]{Something}{Etwas}
\newtranslation[to = Italian]{Something}{Alcuno}


\begin{document}

\translate{table}

\translate{Something}

\end{document}

相关内容