summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/translator/translator.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/translator/translator.sty')
-rw-r--r--macros/latex/contrib/translator/translator.sty230
1 files changed, 230 insertions, 0 deletions
diff --git a/macros/latex/contrib/translator/translator.sty b/macros/latex/contrib/translator/translator.sty
new file mode 100644
index 0000000000..cac92b87c2
--- /dev/null
+++ b/macros/latex/contrib/translator/translator.sty
@@ -0,0 +1,230 @@
+% Copyright 2007 by Till Tantau
+% Copyright 2010 by Vedran Mileti\'c
+% Copyright 2012,2105 by Vedran Mileti\'c, Joseph Wright
+% Copyright 2017-2019 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}
+ [2019-05-31 v1.12a 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{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