0
|
1 |
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
2 |
<!--
|
|
3 |
Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
4 |
All rights reserved.
|
|
5 |
This component and the accompanying materials are made available
|
|
6 |
under the terms of the License "Eclipse Public License v1.0"
|
|
7 |
which accompanies this distribution, and is available
|
|
8 |
at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
9 |
|
|
10 |
Initial Contributors:
|
|
11 |
Nokia Corporation - initial contribution.
|
|
12 |
|
|
13 |
Contributors:
|
|
14 |
|
|
15 |
Description:
|
|
16 |
|
|
17 |
-->
|
|
18 |
|
|
19 |
|
|
20 |
|
|
21 |
<HTML>
|
|
22 |
<HEAD>
|
|
23 |
<TITLE>LOCE32 notes</TITLE>
|
|
24 |
</HEAD>
|
|
25 |
|
|
26 |
<BODY>
|
|
27 |
|
|
28 |
<H1 ALIGN = CENTER>LOCE32 notes</H1>
|
|
29 |
|
|
30 |
Notes about the LOCE32 localisation framework for low-level EPOC
|
|
31 |
components.
|
|
32 |
|
|
33 |
<H2><A NAME="contents">Contents</A></H2>
|
|
34 |
|
|
35 |
<UL>
|
|
36 |
<LI><A HREF="#overview">Overview</A></LI>
|
|
37 |
<LI><A HREF="#structure">Structure of the LOCE32 component</A></LI>
|
|
38 |
<LI><A HREF="#adding">Adding a new locale</A></LI>
|
|
39 |
<LI><A HREF="#building">Building LOCE32</A></LI>
|
|
40 |
<LI><A HREF="#creating">Creating a LOCE32 for a new EPOC platform</A></LI>
|
|
41 |
</UL>
|
|
42 |
|
|
43 |
<H2><A NAME="overview">Overview</A></H2>
|
|
44 |
|
|
45 |
<P>
|
|
46 |
Localisation DLLs conform to an interface defined by <CODE>E32</CODE> and they provide
|
|
47 |
support for localisation for components that are too low-level to
|
|
48 |
participate in the normal EPOC localisation mechanisms. LOCE32
|
|
49 |
provides several implementations of this interface.
|
|
50 |
</P>
|
|
51 |
|
|
52 |
<H2><A NAME="structure" HREF="#contents">Structure of the LOCE32 component</A></H2>
|
|
53 |
|
|
54 |
<H3>Directory structure</H3>
|
|
55 |
|
|
56 |
<DL>
|
|
57 |
<DT><CODE>\LOCE32</CODE></DT>
|
|
58 |
<DD>Contains an overall "Bldmake" project file.</DD>
|
|
59 |
<DT><CODE>\LOCE32\DOC</CODE></DT>
|
|
60 |
<DD>Contains this file.</DD>
|
|
61 |
<DT><CODE>\LOCE32\MMPFILES</CODE></DT>
|
|
62 |
<DD>Contains "Makmake" project files for each locale.</DD>
|
|
63 |
<DT><CODE>\LOCE32\SRC</CODE></DT>
|
|
64 |
<DD>Contains the source code for building the localisation DLLs.</DD>
|
|
65 |
</DL>
|
|
66 |
|
|
67 |
<H3>Source files</H3>
|
|
68 |
|
|
69 |
<P>
|
|
70 |
Localisation DLLs are built from variants of the following source files
|
|
71 |
in the \LOCE32\SRC directory:
|
|
72 |
<DL>
|
|
73 |
<DT><CODE>LS_CY<VAR>xx</VAR>.CPP</CODE></DT>
|
|
74 |
<DD>Contains default locale settings like distance units, currency symbol, date and time formats,
|
|
75 |
etc. (also some code to vary the behaviour of F32's FAT file system).</DD>
|
|
76 |
<DT><CODE>LS_LN<VAR>yyy</VAR>.CPP</CODE></DT>
|
|
77 |
<DD>Contains things like day names, month names, etc.</DD>
|
|
78 |
<DT><CODE>LS_MS<VAR>yyy</VAR>.CPP</CODE></DT>
|
|
79 |
<DD>Contains messages that base software may need to issue without the
|
|
80 |
benefit of access to compiled resources.</DD>
|
|
81 |
<DT><CODE>LS_LAT1.CPP, LS_TABLE.CPP, LS_UNIC.CPP</CODE></DT>
|
|
82 |
<DD>Contain standard Latin1, Unicode character encoding and the Collation data for the locale.</DD>
|
|
83 |
</DL>
|
|
84 |
</P>
|
|
85 |
<P>
|
|
86 |
Where <VAR>xx</VAR> is a two-letter locale identifier and <VAR>yyy</VAR>
|
|
87 |
is a three-letter language identifier.
|
|
88 |
</P>
|
|
89 |
|
|
90 |
<H3>Build files</H3>
|
|
91 |
|
|
92 |
<P>
|
|
93 |
Like most EPOC components, LOCE32's build is controlled by two EPOC
|
|
94 |
tools, "Makmake" and "Bldmake":
|
|
95 |
</P>
|
|
96 |
|
|
97 |
<H4>Makmake project files</H4>
|
|
98 |
|
|
99 |
<P>
|
|
100 |
Each Makmake file describes one locale-specific version of the
|
|
101 |
localisation DLL. Makmake files are named:
|
|
102 |
<BLOCKQUOTE>ELOCL<VAR>xx</VAR>.MMP</BLOCKQUOTE>
|
|
103 |
</P>
|
|
104 |
<P>
|
|
105 |
Where by convention <VAR>xx</VAR> is a the same two-letter locale
|
|
106 |
identifier mentioned above.
|
|
107 |
</P>
|
|
108 |
|
|
109 |
<H4>Bldmake project file</H4>
|
|
110 |
|
|
111 |
<P>
|
|
112 |
The Bldmake file <CODE>BLD.INF</CODE> contains a list of names of
|
|
113 |
Makmake project files. Bldmake will only build localisation DLLs that
|
|
114 |
are described by Makmake project files that are listed in this file.
|
|
115 |
</P>
|
|
116 |
|
|
117 |
<H3><A NAME="binaries">Binaries</A></H3>
|
|
118 |
|
|
119 |
<P>
|
|
120 |
LOCE32 builds a number of locale-specific versions of the localisation
|
|
121 |
DLL. These DLLs are given filenames of the following form:
|
|
122 |
<BLOCKQUOTE><CODE>\epoc32\release\<VAR>platform</VAR>\<VAR>build</VAR>\ELOCL.<VAR>nn</VAR></CODE></BLOCKQUOTE>
|
|
123 |
Where <VAR>platform</VAR> is either ARMI, ARM4 or WINS, <VAR>build</VAR> is
|
|
124 |
either UDEB or UREL and <VAR>nn</VAR> is a numeric locale
|
|
125 |
identifier. Note that THUMB binaries are not built because the code in
|
|
126 |
localisation DLLs is run inside the kernel (which is never THUMB). Note also that the
|
|
127 |
code in localisation DLLs is also run outside the kernel. Localisation DLLs
|
|
128 |
are in this respect the same as <CODE>E32</CODE>'s <CODE>EUSER.DLL</CODE>
|
|
129 |
(i.e. in that they are run from both inside and outside the kernel).
|
|
130 |
Therefore the localisation-DLL platform to use should match the platform of
|
|
131 |
<CODE>EUSER.DLL</CODE> used in the ROM. (This is ARMI for a THUMB or ARMI ROM,
|
|
132 |
and ARM4 for an ARM4 ROM.)
|
|
133 |
</P>
|
|
134 |
|
|
135 |
<H2><A NAME="adding" HREF="#contents">Adding a new locale</A></H2>
|
|
136 |
|
|
137 |
<P>
|
|
138 |
LOCE32 is supplied with source for a number of locales. Further locales
|
|
139 |
may be added by copying and modifying the source for an existing locale
|
|
140 |
and by modifying the Makmake and Bldmake files.
|
|
141 |
</P>
|
|
142 |
|
|
143 |
<H3>Choosing identifiers</H3>
|
|
144 |
|
|
145 |
<P>
|
|
146 |
Before you start adding a locale you will first need to discover and
|
|
147 |
choose appropriate identifiers for the source files and for the filename
|
|
148 |
of the resulting localisation DLL.
|
|
149 |
</P>
|
|
150 |
<P>
|
|
151 |
Find the symbolic name for the locale in the file
|
|
152 |
<CODE>\epoc32\include\e32std.h</CODE>. The locales supported by EPOC may
|
|
153 |
be found inside the <CODE>TLanguage</CODE> list at around line 200 of
|
|
154 |
that file. Eg the symbolic name for the American locale is
|
|
155 |
<CODE>ELangAmerican</CODE>.
|
|
156 |
</P>
|
|
157 |
<P>
|
|
158 |
Determine the numeric identifier for the locale. The numeric identifier
|
|
159 |
is found from the position of the locale in the <CODE>TLanguage</CODE>
|
|
160 |
list when couting from zero, eg <CODE>ELangTest</CODE> is the zeroth
|
|
161 |
locale and <CODE>ELangAmerican</CODE> is the tenth locale so the numeric
|
|
162 |
identifier for American is 10.
|
|
163 |
</P>
|
|
164 |
<P>
|
|
165 |
Choose a new two-letter identifier for the new locale, eg "US" for
|
|
166 |
America. If the new locale uses a language not already supplied with
|
|
167 |
LOCE32 then also choose a new three-letter language identifier, eg "ENG"
|
|
168 |
for English.
|
|
169 |
</P>
|
|
170 |
<P>
|
|
171 |
In summary, you need the following information which will be referred to
|
|
172 |
below:
|
|
173 |
</P>
|
|
174 |
<CENTER><TABLE BORDER=1>
|
|
175 |
<TR><TH>Info</TH><TH>Description</TH><TH>Example</TH></TR>
|
|
176 |
<TR><TD>LOCALE</TD><TD>The new
|
|
177 |
locale</TD><TD><CODE>America</CODE></TD></TR>
|
|
178 |
<TR><TD>NAME</TD><TD>Symbolic locale
|
|
179 |
name</TD><TD><CODE>ELangAmerican</CODE></TD></TR>
|
|
180 |
<TR><TD>NN</TD><TD>Numeric locale
|
|
181 |
identifier</TD><TD>10</TD></TR>
|
|
182 |
<TR><TD>XX</TD><TD>Two-letter locale identifier</TD><TD>US</TD></TR>
|
|
183 |
<TR><TD>YYY</TD><TD>Three-letter language identifier</TD><TD>ENG</TD></TR>
|
|
184 |
<TR><TD>0xUUUUUUUU</TD><TD>The UID</TD><TD>0x1000659a</TD></TR>
|
|
185 |
</TABLE></CENTER>
|
|
186 |
|
|
187 |
<H3>Source files</H3>
|
|
188 |
|
|
189 |
<P>
|
|
190 |
The source files reside in the <CODE>\LOCE32\SRC</CODE> directory:
|
|
191 |
</P>
|
|
192 |
|
|
193 |
<H4>Locale settings file</H4>
|
|
194 |
|
|
195 |
<P>
|
|
196 |
If possible identify an existing locale settings file
|
|
197 |
(<CODE>LS_CY*.CPP</CODE>) that is for a locale broadly similar to the
|
|
198 |
new locale. Otherwise start with <CODE>LS_CYUK.CPP</CODE> for the UK
|
|
199 |
locale. Copy your chosen existing locale settings file to
|
|
200 |
<CODE>LS_CY<VAR>xx</VAR>.CPP</CODE>.
|
|
201 |
</P>
|
|
202 |
<P>
|
|
203 |
Modify the new copy of the locale settings file for the new
|
|
204 |
locale. The first source code line of the locale settings file should
|
|
205 |
use the symbolic locale name obtained from <CODE>e32std.h</CODE>:
|
|
206 |
|
|
207 |
<BLOCKQUOTE><CODE>const TLanguage LCountry::Language =
|
|
208 |
<VAR>NAME</VAR>;</CODE></BLOCKQUOTE>
|
|
209 |
</P>
|
|
210 |
<P>
|
|
211 |
Note: <CODE>LCountry::CountryCode</CODE> in this file is a redundant
|
|
212 |
value that remains for backwards compatibility but is no longer used and
|
|
213 |
need not be edited.
|
|
214 |
</P>
|
|
215 |
|
|
216 |
<H4>Language and message files</H4>
|
|
217 |
|
|
218 |
<P>
|
|
219 |
If the new locale uses a language not already supplied with LOCE32 then
|
|
220 |
copy the English language file <CODE>LS_LNENG.CPP</CODE> and message
|
|
221 |
file <CODE>LS_MSENG.CPP</CODE> to <CODE>LS_LN<VAR>yyy</VAR>.CPP</CODE>
|
|
222 |
and <CODE>LS_MS<VAR>yyy</VAR>.CPP</CODE> respectively. Replace the
|
|
223 |
quoted English text in your copies of these files with translations.
|
|
224 |
</P>
|
|
225 |
|
|
226 |
<H4>Collation rules and tables</H4>
|
|
227 |
|
|
228 |
<P>
|
|
229 |
EPOC follows the Unicode Collation algorithm.This system allows almost any kind of collation behaviour to be expressed.
|
|
230 |
The collation data are stored in tables.The Collation Method consists of two sets of tables. The first set provides the standard keys,
|
|
231 |
the optional second set tailors them for a particular locale.See the definition of TCollationMethod in <code>\e32\include\collate.h</code>:
|
|
232 |
</P>
|
|
233 |
|
|
234 |
<P>
|
|
235 |
The standard rules, which form the base from which the tailoring or tailorings for a given locale differ,
|
|
236 |
are encoded as constant static data in <code>\e32\euser\unicode\collate.cpp.</code> The locale-specific rules
|
|
237 |
for the default locale are kept in <code>\loce32\src\ls_unic.cpp.</code> Locale-specific rules for other locales are
|
|
238 |
kept in other files of the form \loce32\src\ls_unic_<var>yyy</var>.cpp, where <var>yyy</var> is the language name or
|
|
239 |
locale code to be decided upon. For example see the collation method for the Japanese locale in: <code>\loce32\src\ls_unic_template_japanese.cpp </code>
|
|
240 |
</P>
|
|
241 |
|
|
242 |
<P>
|
|
243 |
The standard rules might not be sufficient for locales that uses exotic character sets, for example Japanese,
|
|
244 |
Arabic, etc. They might have collation rules that are specific to their language. Internationalisation provides a
|
|
245 |
tool <var>Coltab</var> that allows the user to create the locale specific tailored collation table.
|
|
246 |
To get a better understanding of <var>Coltab</var> read:
|
|
247 |
|
|
248 |
<code>//Londata04/Internationalisation/V6/COLTAB.doc</code>
|
|
249 |
|
|
250 |
</P>
|
|
251 |
|
|
252 |
<H3>Build files</H3>
|
|
253 |
|
|
254 |
<P>
|
|
255 |
The build files reside in the <CODE>\LOCE32</CODE> directory:
|
|
256 |
</P>
|
|
257 |
|
|
258 |
<H4>Makmake project file</H4>
|
|
259 |
|
|
260 |
<P>
|
|
261 |
Copy the Makmake project file for the UK locale <CODE>ELOCLUK.MMP</CODE>
|
|
262 |
to <CODE>ELOCL<VAR>xx</VAR>.MMP</CODE> and replace the text
|
|
263 |
<B><VAR>marked</VAR></B> below:
|
|
264 |
</P>
|
|
265 |
|
|
266 |
<PRE>
|
|
267 |
// ELOCL<B><VAR>xx</VAR></B>.MMP
|
|
268 |
//
|
|
269 |
// Copyright (c) 1997-1999 Symbian Ltd. All rights reserved.
|
|
270 |
//
|
|
271 |
|
|
272 |
//
|
|
273 |
// Localisation DLL for <B><VAR>LOCALE</VAR></B>
|
|
274 |
//
|
|
275 |
|
|
276 |
TARGET elocl.<B><VAR>NN</VAR></B>
|
|
277 |
|
|
278 |
TARGETTYPE dll
|
|
279 |
|
|
280 |
SOURCEPATH ..\src
|
|
281 |
SOURCE ls_cy<B><VAR>xx</VAR></B>.cpp ls_ln<B><VAR>yyy</VAR></B>.cpp ls_ms<B><VAR>yyy</VAR></B>.cpp
|
|
282 |
SOURCE ls_lat1.cpp ls_table.cpp ls_unic.cpp
|
|
283 |
|
|
284 |
SYSTEMINCLUDE \epoc32\include \epoc32\include\kernel
|
|
285 |
|
|
286 |
#if defined(WINS)
|
|
287 |
DEFFILE \epoc32\release\wins\elocl.def
|
|
288 |
#elif defined(MARM)
|
|
289 |
DEFFILE \epoc32\release\marm\elocl.def
|
|
290 |
#else
|
|
291 |
error
|
|
292 |
#endif
|
|
293 |
|
|
294 |
LIBRARY euser.lib
|
|
295 |
|
|
296 |
START WINS
|
|
297 |
BASEADDRESS 0x58000000
|
|
298 |
END
|
|
299 |
|
|
300 |
UID 0x100039e6 <B><VAR>0xUUUUUUUU</VAR></B>
|
|
301 |
</PRE>
|
|
302 |
|
|
303 |
<H4>Bldmake project files</H4>
|
|
304 |
|
|
305 |
<P>
|
|
306 |
Add the name of the new Makmake project file without the .MMP extension
|
|
307 |
(ie <CODE>ELOCL<VAR>xx</VAR></CODE>) to the Bldmake project file
|
|
308 |
<CODE>BLD.INF</CODE>.
|
|
309 |
</P>
|
|
310 |
|
|
311 |
<H2><A NAME="building" HREF="#contents">Building LOCE32</A></H2>
|
|
312 |
|
|
313 |
<P>
|
|
314 |
Building LOCE32 requires a full OAK to be installed. LOCE32 uses the
|
|
315 |
standard EPOC build tools (documented elsewhere). In short to build
|
|
316 |
all the localisation DLLs change directory to
|
|
317 |
<CODE>\LOCE32</CODE> and type:
|
|
318 |
<OL>
|
|
319 |
<LI><CODE>bldmake bldfiles</CODE></LI>
|
|
320 |
<LI><CODE>abld build</CODE> or
|
|
321 |
<CODE>abld build <VAR>platform</VAR> <VAR>build</VAR></CODE></LI>
|
|
322 |
</OL>
|
|
323 |
|
|
324 |
Where <VAR>platform</VAR> is either ARMI, ARM4 or WINS and <VAR>build</VAR> is
|
|
325 |
either UDEB or UREL. Note that the THUMB platform are not built
|
|
326 |
for the reason outlined <A HREF="#binaries">above</A>.
|
|
327 |
</P>
|
|
328 |
|
|
329 |
<H2><A NAME="creating" HREF="#contents">Creating a LOCE32 for a new EPOC platform</A></H2>
|
|
330 |
|
|
331 |
<P>
|
|
332 |
The following source files in <CODE>\LOCE32\SRC</CODE>:
|
|
333 |
<UL>
|
|
334 |
<LI><CODE>LS_LAT1.CPP</CODE></LI>
|
|
335 |
<LI><CODE>LS_TABLE.CPP</CODE></LI>
|
|
336 |
<LI><CODE>LS_UNIC.CPP</CODE></LI>
|
|
337 |
</UL>
|
|
338 |
are direct copies of the corresponding files in the E32 component. When
|
|
339 |
modifying LOCE32 for a new EPOC platform these files must be copied from
|
|
340 |
the E32 component.
|
|
341 |
</P>
|
|
342 |
|
|
343 |
<P>
|
|
344 |
The locale settings, language and message source files in
|
|
345 |
<CODE>\LOCE32\SRC</CODE> are localised copies of the following files in
|
|
346 |
the E32 component:
|
|
347 |
<UL>
|
|
348 |
<LI><CODE>LS_CYUK.CPP</CODE></LI>
|
|
349 |
<LI><CODE>LS_LENG.CPP</CODE></LI>
|
|
350 |
<LI><CODE>LS_MSG.CPP</CODE></LI>
|
|
351 |
</UL>
|
|
352 |
When modifying LOCE32 for a new EPOC platform the locale settings,
|
|
353 |
language and message source files must be synced with the corresponding
|
|
354 |
source files in the E32 component.
|
|
355 |
</P>
|
|
356 |
|
|
357 |
<P>
|
|
358 |
A small point to note. With the Elocl DLLs there is a DLL name <code>ELOCL.LOC</code>.
|
|
359 |
This is used as a default locale if the Window Server cannot find the locale DLL that it tries to get from the Hal. Since in WINS Hal returns nothing, <code>ELOCL.LOC</code> is the default locale. To change a locale in WINS, rename the required locale DLL as <code> ELOCL.LOC</code>.
|
|
360 |
</P>
|
|
361 |
<HR>
|
|
362 |
|
|
363 |
</BODY>
|
|
364 |
</HTML>
|