![]() |
||
| Home | SwiftForth Archive | SwiftX Archive | |

I have found the following wordset usefull in Belgium ( where we speek at
least French and Dutch).
I think the system also can be interesting to unify all texts in a verbose
Forth program.
Charles
--------------
OPTIONAL TEXTRES.F
DECIMAL
{ Wordset to enable translatable text resource
=============================================
TEXT ( "strToken" "strValue" -- )
Append a text resource.
>TEXT ( zToken -- zTranslated|zToken )
Return 'zToken' or, if exist, the translated text version.
[TEXT] ( "strToken" -- zTranslated )
Parse "strToken" and compile the translated text address.
}
( Preambule - HASH-CODE )
: LROT ( x1 u -- x2 )
2DUP LSHIFT >R 32 SWAP - RSHIFT R> OR ;
: HASHSTR ( addr u -- uh )
TUCK OVER CHARS + SWAP \ len addr+len addr
?DO 5 LROT I C@ BL OR BL XOR BL 1- - XOR LOOP
DUP 0> ?EXIT INVERT ;
\ ------------------------------------------------
\ Text resource and language translation wordset
\ ------------------------------------------------
VARIABLE TEXT-LANGAGE
: (FIND-HTEXT) ( hcode -- addr t | f )
TEXT-LANGAGE
BEGIN @REL DUP WHILE \ s: hcode addr
OVER OVER CELL+ @ =
IF NIP CELL+ CELL+ TRUE EXIT THEN
REPEAT
2DROP FALSE ;
: TEXT ( "strToken" "strValue" -- )
BL WORD COUNT HASHSTR
DUP (FIND-HTEXT) ABORT" - hcode collision"
TEXT-LANGAGE >LINK
( HCODE ) ,
[CHAR] " PARSE 2DROP ,Z" ;
: >TEXT ( zToken -- zTranslated|zToken )
DUP ZCOUNT HASHSTR \ s: zToken hcode
(FIND-HTEXT) IF NIP THEN ;
: [TEXT] ( "strToken" -- zTranslated )
HASHSTR> \ s: hcode
(FIND-HTEXT) 0= ABORT" - missing langage translation"
STATE @ IF POSTPONE LITERAL THEN ; IMMEDIATE
\\ ========================================================
\ Example
\ in a resource text file
\ ---------------------------------
CREATE FRENCH
[DEFINED] FRENCH [IF]
TEXT Find "Rechercher"
TEXT Ref "Reférence"
TEXT CliClass "Type"
TEXT Lib "Description"
TEXT Name "Nom"
TEXT RefCli "Reférence Client"
TEXT Address "Adresse"
TEXT Company "Société"
TEXT Remark "Remarque"
[THEN]
[DEFINED] ENGLISH [IF]
TEXT Find "Find"
TEXT Ref "Reference"
TEXT CliClass "Client Type"
TEXT Lib "Description"
TEXT Name "Name"
TEXT RefCli "Client Reference"
TEXT Address "Address"
TEXT Company "Company"
TEXT Remark "Remark"
[THEN]
\ in application
\ ---------------------------------
: TEST
CR [TEXT] Find ZCOUNT TYPE
CR Z" Ref" ZCOUNT TYPE
CR Z" Hello" ZCOUNT TYPE \ no error
\ CR [TEXT] Hello ZCOUNT TYPE \ error
;
.
Received on Mon Dec 13 1999 - 18:49:25 PST
This archive was generated by hypermail 2.2.0 : Thu Nov 20 2008 - 03:04:26 PST