% Copyright 2007 by Till Tantau % Copyright 2010 by Vedran Mileti\'c % Copyright 2012,2105 by Vedran Mileti\'c, Joseph Wright % Copyright 2017-2021 Joseph Wright % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the documentation file for more details. \ProvidesPackage{translator} [2021-05-31 v1.12d Easy translation of strings in LaTeX] \RequirePackage{keyval} \def\trans@languages{English} \newcommand\uselanguage[2][]{% \g@addto@macro\trans@languages{,#2}% } \newcommand\languagealias[2]{% \expandafter\def\csname tr@ml@#1\endcsname{#2}% } \def\trans@use@and@alias#1#2{% \uselanguage{#2}% \languagealias{#1}{#2}% } \DeclareOption{acadian} {\trans@use@and@alias{french} {Acadian,French}} \DeclareOption{afrikaans} {\trans@use@and@alias{afrikaans} {Afrikaans,Dutch}} \DeclareOption{american} {\trans@use@and@alias{american} {AmericanEnglish,English}} \DeclareOption{arabic} {\trans@use@and@alias{arabic} {Arabic}} \DeclareOption{austrian} {\trans@use@and@alias{austrian} {Austrian1997,Austrian,German1997,German}} \DeclareOption{bahasa} {\trans@use@and@alias{bahasa} {Bahasa}} \DeclareOption{basque} {\trans@use@and@alias{basque} {Basque}} \DeclareOption{brazil} {\trans@use@and@alias{brazil} {Brazilian,Portuguese}} \DeclareOption{brazilian} {\trans@use@and@alias{brazilian} {Brazilian,Portuguese}} \DeclareOption{breton} {\trans@use@and@alias{breton} {Breton}} \DeclareOption{british} {\trans@use@and@alias{british} {BritishEnglish,English}} \DeclareOption{bulgarian} {\trans@use@and@alias{bulgarian} {Bulgarian}} \DeclareOption{canadian} {\trans@use@and@alias{canadian} {Canadian,English}} \DeclareOption{canadien} {\trans@use@and@alias{canadien} {Canadien,French}} \DeclareOption{catalan} {\trans@use@and@alias{catalan} {Catalan}} \DeclareOption{croatian} {\trans@use@and@alias{croatian} {Croatian}} \DeclareOption{czech} {\trans@use@and@alias{czech} {Czech}} \DeclareOption{danish} {\trans@use@and@alias{danish} {Danish}} \DeclareOption{dutch} {\trans@use@and@alias{dutch} {Dutch}} \DeclareOption{english} {\trans@use@and@alias{english} {English}} \DeclareOption{esperanto} {\trans@use@and@alias{esperaton} {Esperanto}} \DeclareOption{estonian} {\trans@use@and@alias{estonian} {Estonian}} \DeclareOption{finnish} {\trans@use@and@alias{finnish} {Finnish}} \DeclareOption{francais} {\trans@use@and@alias{french} {French}} \DeclareOption{frenchb} {\trans@use@and@alias{french} {French}} \DeclareOption{french} {\trans@use@and@alias{french} {French}} \DeclareOption{galician} {\trans@use@and@alias{galician} {Galician}} \DeclareOption{german} {\trans@use@and@alias{german} {German1997,German}} \DeclareOption{germanb} {\trans@use@and@alias{german} {German1997,German}} \DeclareOption{greek} {\trans@use@and@alias{greek} {Greek}} \DeclareOption{polutonikogreek}{\trans@use@and@alias{greek} {Polutoniko,Greek}} \DeclareOption{hebrew} {\trans@use@and@alias{hebrew} {Hebrew}} \DeclareOption{hungarian} {\trans@use@and@alias{hungarian} {Hungarian}} \DeclareOption{icelandic} {\trans@use@and@alias{icelandic} {Icelandic}} \DeclareOption{irish} {\trans@use@and@alias{irish} {Irish}} \DeclareOption{italian} {\trans@use@and@alias{italian} {Italian}} \DeclareOption{latin} {\trans@use@and@alias{latin} {Latin}} \DeclareOption{lowersorbian} {\trans@use@and@alias{lsorbian} {LowerSorbian,Sorbian}} \DeclareOption{magyar} {\trans@use@and@alias{magyar} {Magyar}} \DeclareOption{naustrian} {\trans@use@and@alias{naustrian} {Austrian,German}} \DeclareOption{ngerman} {\trans@use@and@alias{ngerman} {German}} \DeclareOption{norsk} {\trans@use@and@alias{norsk} {Norsk}} \DeclareOption{samin} {\trans@use@and@alias{samin} {Samin}} \DeclareOption{nynorsk} {\trans@use@and@alias{nynorsk} {Nynorsk,Norsk}} \DeclareOption{polish} {\trans@use@and@alias{polish} {Polish}} \DeclareOption{portuges} {\trans@use@and@alias{portuges} {Portuguese}} \DeclareOption{portuguese} {\trans@use@and@alias{portuguese}{Portuguese}} \DeclareOption{romanian} {\trans@use@and@alias{romanian} {Romanian}} \DeclareOption{russian} {\trans@use@and@alias{russian} {Russian}} \DeclareOption{scottish} {\trans@use@and@alias{scottish} {Scottish}} \DeclareOption{serbian} {\trans@use@and@alias{serbian} {Serbian}} \DeclareOption{slovak} {\trans@use@and@alias{slovak} {Slovak}} \DeclareOption{slovene} {\trans@use@and@alias{slovene} {Slovene}} \DeclareOption{spanish} {\trans@use@and@alias{spanish} {Spanish}} \DeclareOption{swedish} {\trans@use@and@alias{swedish} {Swedish}} \DeclareOption{turkish} {\trans@use@and@alias{turkish} {Turkish}} \DeclareOption{ukrainian} {\trans@use@and@alias{ukrainian} {Ukrainian}} \DeclareOption{uppersorbian} {\trans@use@and@alias{usorbian} {UpperSorbian,Sorbian}} \DeclareOption{welsh} {\trans@use@and@alias{welsh} {Welsh}} \DeclareOption{UKenglish} {\trans@use@and@alias{UKenglish} {BritishEnglish,English}} \DeclareOption{USenglish} {\trans@use@and@alias{USenglish} {AmericanEnglish,English}} \ProcessOptions*\relax \newcommand\languagepath[1]{\def\trans@languagepath{#1}} \def\trans@languagepath{\languagename,English} \define@key{translator}{to}{\def\trans@to{#1}} \newcommand\iftranslationdefined[4][]{% \def\trans@to{\trans@defaultto}% \setkeys{translator}{#1}% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname tr@@@\trans@to @#2\endcsname\relax% \let\trans@next=\@secondoftwo% \else% \let\trans@next=\@firstoftwo% \fi% \trans@next{#3}{#4}% } \newcommand\deftranslation[3][]{% \def\trans@to{\trans@defaultto}% \setkeys{translator}{#1}% \expandafter\def\csname tr@@@\trans@to @#2\endcsname{#3}% } \newcommand\newtranslation[3][]{% \iftranslationdefined[#1]{#2}{% \PackageError{translator}{Translation of '#2' already defined}{}% }% {% \deftranslation[#1]{#2}{#3}% }% } \newcommand\renewtranslation[3][]{% \iftranslationdefined[#1]{#2}{% \deftranslation[#1]{#2}{#3}% }% {% \PackageError{translator}{Translation of '#2' not defined}{}% }% } \newcommand\providetranslation[3][]{% \iftranslationdefined[#1]{#2}{% }% {% \deftranslation[#1]{#2}{#3}% }% } \begingroup \lccode`\A=`\- % \lowercase{% \endgroup \def\trans@marker{-A}% } \newcommand\translatelet[3][]{% \edef\trans@to{\trans@languagepath}% \setkeys{translator}{#1}% \let\trans@trans\trans@marker% \let\trans@list\@empty% \@for\trans@lang:=\trans@to\do% {% \expandafter\ifx\csname tr@ml@\trans@lang\endcsname\relax% \else% \expandafter\let\expandafter\trans@lang\expandafter=\csname tr@ml@\trans@lang\endcsname% \fi% \edef\trans@list{\trans@list,\trans@lang}% }% \@for\trans@lang:=\trans@list\do% {% \expandafter\ifx\csname tr@@@\trans@lang @#3\endcsname\relax% \else% \ifx\trans@trans\trans@marker% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\trans@trans \expandafter\expandafter\expandafter{\csname tr@@@\trans@lang @#3\endcsname}% \fi% \fi% }% \ifx\trans@trans\trans@marker% \def\trans@trans{#3}% \fi% \let#2=\trans@trans% } \DeclareRobustCommand\translate[2][]{% \translatelet[#1]\trans@temp{#2}% \trans@temp% } \def\trans@dictionaries{} \newcommand\usedictionary[1]{% \g@addto@macro\trans@dictionaries{\usedictionary{#1}}% } \def\trans@defaultto{English} \AtBeginDocument{% \renewcommand\usedictionary[1]{% \@for\trans@lang:=\trans@languages\do{% \ifx\trans@lang\@empty% \else% \expandafter\ifx\csname ver@#1-\trans@lang.dict\endcsname\relax% \edef\trans@temp{% \def\noexpand\trans@defaultto{\trans@lang}% \noexpand\InputIfFileExists{#1-\trans@lang.dict}{}{}% \def\noexpand\trans@defaultto{\trans@defaultto}% }% \trans@temp% \fi% \fi% }}% \trans@dictionaries% } \def\ProvidesDictionary#1#2{% \begingroup \catcode`\ 10 % \@makeother\/% \@ifnextchar[%] {\@providesdictionary{#1}{#2}}{\@providesdictionary{#1}{#2}[]}% } \def\@providesdictionary#1#2[#3]{% \wlog{Dictionary: #1, Language: #2 #3}% \expandafter\xdef\csname ver@#1-#2.dict\endcsname{#3}% \endgroup% } \endinput