You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
tex-compiler/texmf-dist/tex/latex/translator/translator.sty

231 lines
8.6 KiB

% Copyright 2007 by Till Tantau
% Copyright 2010 by Vedran Mileti\'c
% Copyright 2012,2105 by Vedran Mileti\'c, Joseph Wright
% Copyright 2017-2020 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}
[2020-08-03 v1.12c 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