1 /******************************************************************************
2 *
3 * Copyright (C) 2007, The Gentee Group. All rights reserved.
4 * This file is part of the Gentee open source project - http://www.gentee.com.
5 *
6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT").
7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS
8 * ACCEPTANCE OF THE AGREEMENT.
9 *
10 * ID: prj 18.07.07 0.0.A.
11 *
12 * Author: Alexey Krivonogov ( gentee )
13 *
14 ******************************************************************************/
15
16 include
17 {
18 $"..\gt\gt.g"
19 $"..\macro\macro.g"
20 }
21
22 define
23 {
24 LANGEXT = "lng"
25 }
26
27 type langdata
28 {
29 str filename
30 str name
31 ustr native
32 str custom
33 // uint utf8
34 }
35
36 /*-----------------------------------------------------------------------------
37 *
38 * ID: language 12.10.06 1.1.A.
39 *
40 * Summary: Language type
41 *
42 -----------------------------------------------------------------------------*/
43
44 type language <inherit = gt>// index = str>
45 {
46 str path // Path to language files
47 str deflang // Default language
48 str curlang // Current language
49 str defin // Input string of default language
50 arr lnglist of langdata
51 macro macros
52 }
53 /*
54 global
55 {
56 str langempty
57 }
58 */
59 method uint language.getinfo( str filename )
60 {
61 str data datacut
62 gt gtdata
63 uint gti
64 uint newlng
65
66 data.read( filename )
67
68 datacut.substr( data, 0, data.findch( '/' ) + 2 )
69 gtdata.utf8 = 1
70 gtdata += datacut
71 gti as gtdata.find("data")
72 if !>i : return 0
73 newlng as .lnglist[ .lnglist.expand( 1 ) ]
74 // .utf8 = /*( gti.find( "utf8" ) ||*/ data.isprefutf8() )
75 filename.fgetparts( 0->str, newlng.filename, 0->str )
76 gti.get( "name", newlng.name )
77 gti.get( "native", newlng.native )
78 if .deflang %== newlng.filename : .defin = data
79 return 1
80 }
81
82 /*-----------------------------------------------------------------------------
83 *
84 -----------------------------------------------------------------------------*/
85
86 method uint language.getid( str langname )
87 {
88 uint i
89
90 fornum i, *.lnglist
91 {
92 if langname %== .lnglist[i].name : break
93 }
94 return i
95 }
96
97 /*-----------------------------------------------------------------------------
98 *
99 * ID: language_change 12.10.06 1.1.A.
100 *
101 * Summary:
102 *
103 -----------------------------------------------------------------------------*/
104
105 method uint language.change( str langname )
106 {
107 subfunc loadcustom( str custlang )
108 {
109 uint id = .getid( custlang )
110
111 if id < *.lnglist : .root().load( .lnglist[ id ].custom )
112 }
113
114 .clear()
115 .root().load( .defin )
116 loadcustom( .deflang )
117 if langname %!= .deflang
118 {
119 .read( "\(.path)\\\( langname ).\($LANGEXT)")
120 loadcustom( langname )
121 .curlang = langname
122 }
123 else : .curlang = .deflang
124 return 1
125 }
126
127 /*-----------------------------------------------------------------------------
128 *
129 * ID: language_change 12.10.06 1.1.A.
130 *
131 * Summary:
132 *
133 -----------------------------------------------------------------------------*/
134
135 method uint language.change( uint id )
136 {
137 if id >= *.lnglist : return 0
138 return .change( .lnglist[ id ].filename )
139 }
140
141 /*-----------------------------------------------------------------------------
142 *
143 * ID: language_get 12.10.06 1.1.A.
144 *
145 * Summary:
146 *
147 -----------------------------------------------------------------------------*/
148 /*
149 method ustr language.getlang( ustr name ret )
150 {
151 ret.clear()
152 .get( "default/\( str( name ))", ret )
153 // print("Len=\( *ret )\n")
154 return ret
155 }
156 */
157 /*-----------------------------------------------------------------------------
158 *
159 * ID: language_get 12.10.06 1.1.A.
160 *
161 * Summary:
162 *
163 -----------------------------------------------------------------------------*/
164
165 method ustr language.getlang( str name, ustr ret )
166 {
167 .get( "default/\( name )", ret )
168 .macros.replace( ret )
169 return ret
170 }
171
172 method ustr language.getlang( ustr name ret )
173 {
174 return .getlang( str( name ), ret )
175 }
176
177 /*-----------------------------------------------------------------------------
178 *
179 * ID: language_load 12.10.06 1.1.A.
180 *
181 * Summary:
182 *
183 -----------------------------------------------------------------------------*/
184
185 method uint language.load( str path deflang curlang )
186 {
187 ffind fd
188 uint count
189
190 .path = path
191 .deflang = deflang
192 .utf8 = 1
193
194 fd.init( "\(path)\\*.\($LANGEXT)", $FIND_FILE )
195 foreach cur, fd
196 {
197 if .getinfo( cur.fullname ) : count++
198 }
199 .change( deflang )
200 if *curlang : .change( curlang )
201
202 return count
203 }
204
205 method language.setmacro( str macroname, ustr value )
206 {
207 .macros[ macroname ] = value
208 }
209
210 method language.setmacro( str macroname, str value )
211 {
212 .macros[ macroname ] = ustr( value )
213 }
214
215 method ustr language.getlist<result>
216 {
217 uint i
218
219 fornum i, *.lnglist
220 {
221 result += ustr( "\(.lnglist[i].name) (" ) + .lnglist[i].native +
222 ustr( ")=\(.lnglist[i].filename)\l" )
223 }
224 result.trim( 0xa, $TRIM_SYS | $TRIM_RIGHT )
225 }
226
227 method uint language.load( str lang data )
228 {
229 uint id
230
231 if ( id = .getid( lang )) < *.lnglist
232 {
233 .lnglist[ id ].custom = data
234 if lang %== .curlang : .root().load( data )
235
236 return 1
237 }
238 return 0
239 }
240 /*
241 func mainlang<main>
242 {
243 language lng
244 ustr list
245
246 lng.load( $"k:\gentee\open source\gentee\lib\language\language", "english", "english")
247 lng.load( "english", "<default>
248 <test4 = \"Custom English\" />
249 </> ")
250 // lng.load( "russian", "п»ї<default>
251 // <test2 = \"СЌР»РµРјРµРЅС Ooops\" />
252 //</> ")
253 // lng.change( "english" )
254 print( "Test1 = \( str( lng.getlang( "test1", ustr("")))) \n" )
255 print( "Test2 = \( str( lng.getlang( ustr("test2"), ustr(""))))\n")
256 print( "Test3 = \( str( lng.getlang( ustr("test3"), ustr(""))))\n")
257 lng.change( "russian" )
258 print( "Test1 = \( str( lng.getlang( "test1", ustr("")))) \n" )
259 print( "Test2 = \( str( lng.getlang( ustr("test2"), ustr(""))))\n")
260 print( "Test3 = \( str( lng.getlang( ustr("test4"), ustr(""))))\n")
261 list = lng.getlist()
262 print( "\(str(list))\ncurlang=\(lng.curlang) \( lng.getid( lng.curlang ))" )
263 getch()
264 }*/
Edit