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.
231 lines
8.6 KiB
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
|
|
|