Subversion Repositories SvarDOS

Rev

Rev 1294 | Rev 1367 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
597 mateuszvis 1
 
814 mateusz.vi 2
 
599 mateuszvis 3
              SVARLANG.LIB - THE SVARDOS TRANSLATION C LIBRARY
597 mateuszvis 4
 
1244 mateusz.vi 5
                   Copyright (C) 2021-2023 Mateusz Viste
597 mateuszvis 6
 
814 mateusz.vi 7
 
8
 
1244 mateusz.vi 9
SvarLANG is a library and toolset for enabling SvarDOS applications to easily
10
support multiple languages. It is part of the SvarDOS project.
597 mateuszvis 11
 
1246 mateusz.vi 12
Homepage: http://svardos.org/svarlang/
599 mateuszvis 13
 
1246 mateusz.vi 14
 
1297 mateusz.vi 15
### PREPARING TRANSLATION FILES ###############################################
599 mateuszvis 16
 
17
The translation files must be CATS-style text files in the usual format:
18
 
19
1.1:Hello, World!
20
1.2:Help screen
21
2.0:Type /? for more options
22
 
23
The files must be named as EN.TXT, DE.TXT, FR.TXT, etc. Then, they must be
1246 mateusz.vi 24
converted into SvarLANG's binary format using the TLUMACZ tool:
599 mateuszvis 25
 
26
tlumacz en fr pl (...)
27
 
28
The first language provided in the command line is the reference language and
29
is used both as the default (embedded in the application) language, as well as
30
to substitute messages missing in other languages.
31
 
32
TLUMACZ computes two files:
33
 
34
 * OUT.LNG   - the binary file that contains all translations
35
 * DEFLANG.C - the default translations that will be embedded into the program
36
 
37
Then, DEFLANG.C must be compiled and linked to your program along with
814 mateusz.vi 38
SVARLNGx.LIB. From there you will be able to use SvarLANG calls, typically:
599 mateuszvis 39
 
1277 mateusz.vi 40
  svarlang_load("myprogram.lng", "pl");  /* load PL lang from myprogram.lng */
814 mateusz.vi 41
  puts(svarlang_str(2, 0));              /* display the string with id 2.0 */
599 mateuszvis 42
 
814 mateusz.vi 43
Read svarlang.h for more information about available functions.
599 mateuszvis 44
 
45
 
1297 mateusz.vi 46
### ESCAPED CHARACTERS ########################################################
1244 mateusz.vi 47
 
48
Translation strings may contain some escaped characters. At this time only the
1248 mateusz.vi 49
following escaped characters are supported: \e \r \n \t and \\
1244 mateusz.vi 50
 
51
 
1297 mateusz.vi 52
### DIRTY STRINGS #############################################################
1114 mateusz.vi 53
 
54
In the CATS-style source translation, lines may be prefixed with a '?' sign:
55
 
56
?1.1:Hello, World!
57
 
58
Such string is used by tlumacz like any other, but it is also reported on the
59
command-line with a warning about the line being "dirty" (that is, requiring
60
to be reviewed by a translator).
61
 
62
 
1297 mateusz.vi 63
### ENVIRONMENT ###############################################################
599 mateuszvis 64
 
814 mateusz.vi 65
The program translation file should be named "PROGNAME.LNG", where PROGNAME
66
is the program's name. This file should be placed in a well-known location,
67
typically the program's own directory. An exception are SvarDOS "CORE" programs
68
that store their translation files in a directory pointed out by %NLSPATH%.
599 mateuszvis 69
 
814 mateusz.vi 70
The %LANG% environment variable usually defines what language should be loaded,
71
albeit the program can just as well provide its own controls for language
72
selection and pass this information to svarlang_load() accordingly.
599 mateuszvis 73
 
74
 
1297 mateusz.vi 75
### WHY IS IT BETTER THAN CATS? ###############################################
599 mateuszvis 76
 
77
The CATS library is heavier and slower, as it embeds a text-file parser.
1246 mateusz.vi 78
Translations also take more disk space since each language is stored in a
79
separate file, leading to cluster waste. Finally, CATS requires default strings
80
to be part of the application's source code, while SvarLANG keeps all strings
81
in TXT files and embedds the default one inside the application in an automated
82
way at compile time.
599 mateuszvis 83
 
620 mateuszvis 84
There is also a licensing issue: CATS/Kitten libraries are published under the
1246 mateusz.vi 85
terms of a viral, corrosive license. SvarLANG, on the other hand, is published
1294 mateusz.vi 86
under a truly free, liberal MIT license.
599 mateuszvis 87
 
620 mateuszvis 88
 
1297 mateusz.vi 89
### FILE FORMAT ###############################################################
1290 bernd.boec 90
 
91
File =
1294 mateusz.vi 92
    magic         : Char[4] := "SvL\x1a" (ie. "SvL" followed with a 0x1a char)
93
                  ; 0x1a is an end-of-file marker that prevents TYPE garbage
1290 bernd.boec 94
    num_strings   : U16
95
    languages     : array[num_languages] of Language
96
 
97
Language =
98
    lang_id       : Char[2]
99
    len_strings   : U16 := SizeOf(strings)
100
    dictionary    : StringDict
101
    strings       : array[File.num_strings] of StringZ
102
 
103
StringDict =
104
    elements : array[File.num_strings] of DictEntry
105
             ; sorted by DictEntry.Id
106
 
107
DictEntry =
108
    id     : U16
109
    offset : U16
110
           ; relative to Language.strings[0]
111
 
112
StringZ = array[?] of Char ; zero-terminated string
113
 
114
 
1297 mateusz.vi 115
NOTE: All numeric values are stored in x86 (little endian) order.
116
 
117
 
118
####################################################################### EOF ###