% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % % Handle translations. % % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Set language. % % ( locale ) ==> ( true|false ) % /setlang { config.lang over eq { pop false return } if /config.lang exch def /help.messages .undef def translation.texts { translation.texts dup { free } forall free /translation.texts .undef def } if findtexts true } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Set keyboard map. % % ( locale ) ==> ( ) % /setkeymap { config.keymap.locale over eq { pop false return } if /config.keymap.locale exch def /setkeymap.found false def keymaps { dup .km.locales get { config.keymap.locale eq { dup .km.map get /config.keymap exch def /setkeymap.found true def exit } if } forall pop setkeymap.found { exit } if } forall } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Find texts for current language. % % ( ) ==> ( ) % /findtexts { texts.file free /texts.file .undef def 16 string dup config.lang "%s.tr" 2 index sprintf findfile exch free dup .undef eq { config.lang length 2 gt { pop 16 string dup config.lang 1 get config.lang 0 get "%c%c.tr" 3 index sprintf findfile exch free dup { /config.lang 2 string config.lang 1 get config.lang 0 get "%c%c" 3 index sprintf def } if } if } if dup .undef eq { pop "en.tr" findfile } if /texts.file over def dup .undef eq { pop 0 cvp } if cvs /ft.len over cvp length def /ft.str exch def /ft.pos 0 def texts { ft.pos ft.str length add ft.len lt { ft.str def /ft.str ft.str dup length 1 add /ft.pos over ft.pos add def add def } { "No Texts!" def } ifelse } forall } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Translate menu entry. % % ( text ) ==> ( text ) % /translate { translations.init translation.texts length 2 lt { return } if 0 2 translation.texts length -2 and 1 sub { translation.texts over get 2 index eq { 1 add translation.texts exch get exch pop exit } { pop } ifelse } for } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Read menu translations. % % ( ) ==> ( ) % /translations.init { translation.texts { return } if /translation.texts [ ] def config.lang .undef eq { return } if tr.tmp .undef eq { /tr.tmp 64 string def } if config.lang "translations.%s" tr.tmp sprintf tr.tmp findfile dup { /la.tmp.datalen over length def /la.tmp.str exch cvs def la.tmp.datalen 0 eq { return } if la.tmp.str la.tmp.datalen 1 sub get '\n' ne { return } if '\n' seteotchar /translation.texts [ /la.tmp.len 0 def { la.tmp.str la.tmp.len add strdup dup dup length 0 put /la.tmp.len over length 1 add la.tmp.len add def la.tmp.len la.tmp.datalen ge { exit } if } loop ] def 0 seteotchar } { pop } ifelse } def