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.
gfxboot-theme-calculate/dia_lang.inc

234 lines
4.3 KiB

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%
% Language selection dialog.
%
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Some global vars.
%
% fallback if there is no "langlist"
/lang.items [ "en_US" ] def
/lang.names [ "English (United States)" ] def
/lang.displayed false def
/.la.language 0 def
/.la.locale 1 def
/.la.name 2 def
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Get language name.
%
% Returns locale if not found.
%
% ( locale ) ==> ( name )
%
/lang.getdefname {
lang.defaultnames {
dup .la.language get 2 index eq { .la.name get exch pop exit } { pop } ifelse
} forall
} def
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Get locale code (ll_CC).
%
% Returns locale if not found.
%
% ( locale ) ==> ( ll_CC )
%
/lang.getlocale {
lang.defaultnames {
dup .la.language get 2 index eq { .la.locale get exch pop exit } { pop } ifelse
} forall
} def
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Parse "langlist" file.
%
% ( ) ==> ( )
%
/lang.parsedata {
/lang.default 0 def
"langlist" 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.found false def
/la.tmp.cnt 0 def
lang.items {
config.lang eq {
xmenu .xm_current la.tmp.cnt put /la.tmp.found true def exit
} if
/la.tmp.cnt inc
} forall
la.tmp.found not {
% Try without the country code.
config.lang "_" strstr dup 0 ne {
1 sub
config.lang strdup dup rot 0 put
/la.tmp.cnt 0 def
lang.items {
over eq {
xmenu .xm_current la.tmp.cnt put exit
} if
/la.tmp.cnt inc
} forall
free
} {
pop
} ifelse
} if
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
keymap.langchanged
window.action actRedraw eq { pmenu.update } if
} def
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Clean up after language menu has been undrawn.
%
% ( ) => ( )
%
/lang.cleanup {
/lang.displayed true def
} def
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Show language menu.
%
% ( ) => ( )
%
/panel.lang {
"keytable" help.setcontext
window.xmenu
dup .xmenu xmenu.lang put
dup .xmenu.update /lang.update put
dup .xmenu.cleanup /lang.cleanup 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