diff options
Diffstat (limited to 'macros/latex/contrib/translator/translator.sty')
-rw-r--r-- | macros/latex/contrib/translator/translator.sty | 230 |
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 |