% \algout output description
% \endalgo
-\def\localealgo{Algorithm}
-\def\localeproc{Procedure}
-\def\localeinput{Input}
-\def\localeoutput{Output}
+% Localized strings
+\localedef{en}{alg:alg}{Algorithm}
+\localedef{en}{alg:proc}{Procedure}
+\localedef{en}{alg:in}{Input}
+\localedef{en}{alg:out}{Output}
\def\algoinit{
\goodbreak
\itemcount=0
}
\def\typedalgo#1#2{\algoinit {\bo #1\/} \alg{#2}}
-\def\algo#1{\typedalgo{\localealgo}{#1}}
-\def\proc#1{\typedalgo{\localeproc}{#1}}
+\def\algo#1{\typedalgo{\localestr{alg:alg}}{#1}}
+\def\proc#1{\typedalgo{\localestr{alg:proc}}{#1}}
\def\headlessalgo{\algoinit}
\def\endalgo{\goodbreak\endlist\endgroup}
\let\endproc=\endalgo
\def\algoitemh{\ifx\next:\let\next=\algohang\else\let\next=\algoitemgo\fi\next}
\def\algohang:{\advance\hangindent by 2em \hskip 2em\futurelet\next\algoitemh}
\optdef\algoitemgo{\ifx\addid\undefined\else\addid{item}{\the\itemcount}\fi}
-\def\algin{\par\nobreak{\it \localeinput:\/} }
-\def\algout{\par\nobreak\parindent=0pt{\it localeoutput:\/} }
-\def\alginbreak{\hfil\break\hphantom{\it \localeinput:\/} }
+\def\algin{\par\nobreak{\it \localestr{alg:in}:\/} }
+\def\algout{\par\nobreak\parindent=0pt{\it \localestr{alg:in}:\/} }
+\def\alginbreak{\hfil\break\hphantom{\it \localestr{alg:out}:\/} }
\def\algalias#1{ (#1)}
% Algorithm name in text or in a formula
\let\plaintilde=~
\protected\def~{\plaintilde}
+%%% Localization %%%
+
+% Current language
+\def\localelang{en}
+
+% Define a new localized string: \localedef{language}{identifier}{message}
+\def\localedef#1#2{\expandafter\def\csname loc:#1:#2\endcsname}
+
+% Expand a localized string in the current language: \localemsg{identifier}
+\def\localestr#1{%
+ \ifcsname loc:\localelang:#1\endcsname
+ \csname loc:\localelang:#1\endcsname
+ \else
+ \ucwwarn{Localized string #1 not defined in language \localelang}%
+ ???%
+ \fi
+}
+
%%% Epilog %%%
% Let's hide all internal macros