% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % % Language selection dialog. % % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Some global vars. % % fallback if there is no "languages" /lang.items [ "en" ] def /lang.names [ "English" ] def /.la.locale 0 def /.la.name 1 def /lang.defaultnames [ % [ "ar" "\u064a\u0628\u0631\u0639" ] [ "ar" "\ufef2\ufe91\ufeae\ufecb" ] [ "bn" "Bengali" ] [ "bg" "Български" ] [ "cs" "Čeština" ] [ "cy_GB" "Cymraeg" ] [ "da" "Dansk" ] [ "en" "English" ] [ "fr" "Français" ] [ "de" "Deutsch" ] [ "es" "Español" ] [ "el" "Ελληνικά" ] [ "fi" "Suomi" ] [ "he" "תירבע" ] [ "it" "Italiano" ] [ "ja" "日本語" ] [ "hr" "Hrvatski" ] [ "hu" "Magyar" ] [ "ko" "한글" ] [ "lt" "Lietuvių" ] [ "nl" "Nederlands" ] [ "nb" "Norsk" ] [ "pl" "Polski" ] [ "pt_PT" "Português" ] [ "pt_BR" "Português (Brasil)" ] [ "pa" "Punjabi" ] [ "ro" "Română" ] [ "ru" "Русский" ] [ "sk" "Slovenčina" ] [ "sl" "Slovenščina" ] [ "sr" "Cрпски" ] [ "sv" "Svenska" ] [ "tr" "Türkçe" ] [ "uk" "Українська" ] [ "zh_CN" "简体中文" ] [ "zh_TW" "繁體中文 (台灣)" ] ] def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Get language name. % % Returns locale if not found. % % ( locale ) ==> ( name ) % /lang.getdefname { lang.defaultnames { dup .la.locale get 2 index eq { .la.name get exch pop exit } { pop } ifelse } forall } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Parse "languages" file. % % ( ) ==> ( ) % /lang.parsedata { /lang.default 0 def "languages" findfile dup { /lang.data exch def } { pop return } ifelse /la.tmp.datalen lang.data length def /la.tmp.str lang.data cvs def la.tmp.datalen 0 eq { return } if la.tmp.str la.tmp.datalen 1 sub get '\n' ne { return } if '\n' seteotchar /lang.items [ /la.tmp.len 0 def /la.tmp.cnt 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 dup 0 get '*' eq { 1 add /lang.default la.tmp.cnt def } if la.tmp.len la.tmp.datalen ge { exit } if /la.tmp.cnt inc } loop ] def ' ' seteotchar /lang.names [ lang.items { dup dup length add dup 0 get { dup 0 0 put 1 add exch pop } { pop lang.getdefname } ifelse } forall ] def 0 seteotchar } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Build language list. % % ( ) ==> ( ) % /lang.init { /xmenu.lang .xm_size array def /xmenu xmenu.lang def lang.parsedata xmenu .xm_current lang.default put xmenu .xm_list lang.names put xmenu .xm_title /txt_language put % make menu smaller if there are more than 19 language entries %lang.items length 19 gt { % xmenu .xm_vspace 2 put %} if % start with current lang /la.tmp.cnt 0 def lang.items { config.lang eq { xmenu .xm_current la.tmp.cnt put exit } if /la.tmp.cnt inc } forall pmenu.init } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Update language. % % ( ) ==> ( ) % /lang.update { /xmenu xmenu.lang def lang.items xmenu .xm_current get get dup setlang { /window.action actRedraw def } if setkeymap % Why? --> see dia_install.inc; same there. window.action actRedraw eq { pmenu.update } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Show language menu. % % ( ) => ( ) % /panel.lang { "keytable" help.setcontext window.xmenu dup .xmenu xmenu.lang put dup .xmenu.update /lang.update put dup window.init window.show } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Return width of panel entry. % % ( ) => ( width ) % /panel.lang.width { /xmenu xmenu.lang def pmenu.width } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Redraw panel entry. % % ( panel ) => ( ) % /panel.lang.update { /xmenu xmenu.lang def pmenu.panel.update } def