blob: e50d4d7f5654afb264dfbe63028433e85487adff (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%
% 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
keymaps {
dup .km.locale get config.keymap.locale eq {
.km.map get /config.keymap exch def exit
} { pop } ifelse
} 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
|