summaryrefslogtreecommitdiffstats
path: root/locale.inc
diff options
context:
space:
mode:
Diffstat (limited to 'locale.inc')
-rw-r--r--locale.inc154
1 files changed, 154 insertions, 0 deletions
diff --git a/locale.inc b/locale.inc
new file mode 100644
index 0000000..e50d4d7
--- /dev/null
+++ b/locale.inc
@@ -0,0 +1,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
+