]>
Commit | Line | Data |
---|---|---|
1 | \section{\class{wxLocale}}\label{wxlocale} | |
2 | ||
3 | wxLocale class encapsulates all language-dependent settings and is a | |
4 | generalization of the C locale concept. | |
5 | ||
6 | In wxWidgets this class manages message catalogs which contain the translations | |
7 | of the strings used to the current language. | |
8 | ||
9 | \perlnote{In wxPerl you can't use the '\_' function name, so | |
10 | the {\tt Wx::Locale} module can export the {\tt gettext} and | |
11 | {\tt gettext\_noop} under any given name. | |
12 | ||
13 | \begin{verbatim} | |
14 | # this imports gettext ( equivalent to Wx::GetTranslation | |
15 | # and gettext_noop ( a noop ) | |
16 | # into your module | |
17 | use Wx::Locale qw(:default); | |
18 | ||
19 | # .... | |
20 | ||
21 | # use the functions | |
22 | print gettext( ``Panic!'' ); | |
23 | ||
24 | button = Wx::Button->new( window, -1, gettext( ``Label'' ) ); | |
25 | \end{verbatim} | |
26 | ||
27 | If you need to translate a lot of strings, then adding gettext( ) around | |
28 | each one is a long task ( that is why \_( ) was introduced ), so just choose | |
29 | a shorter name for gettext: | |
30 | ||
31 | \begin{verbatim} | |
32 | # | |
33 | use Wx::Locale 'gettext' => 't', | |
34 | 'gettext_noop' => 'gettext_noop'; | |
35 | ||
36 | # ... | |
37 | ||
38 | # use the functions | |
39 | print t( ``Panic!!'' ); | |
40 | ||
41 | # ... | |
42 | \end{verbatim} | |
43 | }% | |
44 | ||
45 | \wxheading{Derived from} | |
46 | ||
47 | No base class | |
48 | ||
49 | \wxheading{See also} | |
50 | ||
51 | \helpref{Internationalization overview}{internationalization},\\ | |
52 | \helpref{Internat sample}{sampleinternat} | |
53 | ||
54 | \wxheading{Include files} | |
55 | ||
56 | <wx/intl.h> | |
57 | ||
58 | ||
59 | \latexignore{\rtfignore{\wxheading{Members}}} | |
60 | ||
61 | ||
62 | ||
63 | \membersection{Supported languages}\label{wxlanguage} | |
64 | ||
65 | See \helpref{list of recognized language constants}{languagecodes}. | |
66 | These constants may be used to specify the language | |
67 | in \helpref{Init}{wxlocaleinit} and are returned by | |
68 | \helpref{GetSystemLanguage}{wxlocalegetsystemlanguage}: | |
69 | ||
70 | ||
71 | \membersection{wxLocale::wxLocale}\label{wxlocaledefctor} | |
72 | ||
73 | \func{}{wxLocale}{\void} | |
74 | ||
75 | This is the default constructor and it does nothing to initialize the object: | |
76 | \helpref{Init()}{wxlocaleinit} must be used to do that. | |
77 | ||
78 | \func{}{wxLocale}{\param{int }{language}, \param{int }{flags = | |
79 | wxLOCALE\_LOAD\_DEFAULT | wxLOCALE\_CONV\_ENCODING}} | |
80 | ||
81 | See \helpref{Init()}{wxlocaleinit} for parameters description. | |
82 | ||
83 | \func{}{wxLocale}{\param{const char }{*szName}, \param{const char }{*szShort = NULL}, \param{const char }{*szLocale = NULL}, \param{bool }{bLoadDefault = true}, \param{bool }{bConvertEncoding = false}} | |
84 | ||
85 | See \helpref{Init()}{wxlocaleinit} for parameters description. | |
86 | ||
87 | The call of this function has several global side effects which you should | |
88 | understand: first of all, the application locale is changed - note that this | |
89 | will affect many of standard C library functions such as printf() or strftime(). | |
90 | Second, this wxLocale object becomes the new current global locale for the | |
91 | application and so all subsequent calls to wxGetTranslation() will try to | |
92 | translate the messages using the message catalogs for this locale. | |
93 | ||
94 | ||
95 | ||
96 | \membersection{wxLocale::\destruct{wxLocale}}\label{wxlocaledtor} | |
97 | ||
98 | \func{}{\destruct{wxLocale}}{\void} | |
99 | ||
100 | The destructor, like the constructor, also has global side effects: the previously | |
101 | set locale is restored and so the changes described in | |
102 | \helpref{Init}{wxlocaleinit} documentation are rolled back. | |
103 | ||
104 | ||
105 | \membersection{wxLocale::AddCatalog}\label{wxlocaleaddcatalog} | |
106 | ||
107 | \func{bool}{AddCatalog}{\param{const char }{*szDomain}} | |
108 | ||
109 | \func{bool}{AddCatalog}{\param{const char }{*szDomain}, \param{wxLanguage}{msgIdLanguage}, \param{const char }{*msgIdCharset}} | |
110 | ||
111 | Add a catalog for use with the current locale: it is searched for in standard | |
112 | places (current directory first, then the system one), but you may also prepend | |
113 | additional directories to the search path with | |
114 | \helpref{AddCatalogLookupPathPrefix()}{wxlocaleaddcataloglookuppathprefix}. | |
115 | ||
116 | All loaded catalogs will be used for message lookup by | |
117 | \helpref{GetString()}{wxlocalegetstring} for the current locale. | |
118 | ||
119 | Returns true if catalog was successfully loaded, false otherwise (which might | |
120 | mean that the catalog is not found or that it isn't in the correct format). | |
121 | ||
122 | The second form of this method takes two additional arguments, | |
123 | \arg{msgIdLanguage} and \arg{msgIdCharset}. | |
124 | ||
125 | \arg{msgIdLanguage} specifies the language of "msgid" strings in source code | |
126 | (i.e. arguments to \helpref{GetString}{wxlocalegetstring}, | |
127 | \helpref{wxGetTranslation}{wxgettranslation} and the | |
128 | \helpref{\_()}{underscore} macro). It is used if AddCatalog cannot find any | |
129 | catalog for current language: if the language is same as source code language, | |
130 | then strings from source code are used instead. | |
131 | ||
132 | \arg{msgIdCharset} lets you specify the charset used for msgids in sources | |
133 | in case they use 8-bit characters (e.g. German or French strings). This | |
134 | argument has no effect in Unicode build, because literals in sources are | |
135 | Unicode strings; you have to use compiler-specific method of setting the right | |
136 | charset when compiling with Unicode. | |
137 | ||
138 | By default (i.e. when you use the first form), msgid strings are assumed | |
139 | to be in English and written only using 7-bit ASCII characters. | |
140 | ||
141 | If you have to deal with non-English strings or 8-bit characters in the source | |
142 | code, see the instructions in | |
143 | \helpref{Writing non-English applications}{nonenglishoverview}. | |
144 | ||
145 | ||
146 | \membersection{wxLocale::AddCatalogLookupPathPrefix}\label{wxlocaleaddcataloglookuppathprefix} | |
147 | ||
148 | \func{void}{AddCatalogLookupPathPrefix}{\param{const wxString\& }{prefix}} | |
149 | ||
150 | Add a prefix to the catalog lookup path: the message catalog files will be | |
151 | looked up under prefix/<lang>/LC\_MESSAGES, prefix/LC\_MESSAGES and prefix | |
152 | (in this order). | |
153 | ||
154 | This only applies to subsequent invocations of AddCatalog()! | |
155 | ||
156 | ||
157 | \membersection{wxLocale::AddLanguage}\label{wxlocaleaddlanguage} | |
158 | ||
159 | \func{static void}{AddLanguage}{\param{const wxLanguageInfo\& }{info}} | |
160 | ||
161 | Adds custom, user-defined language to the database of known languages. This | |
162 | database is used in conjunction with the first form of | |
163 | \helpref{Init}{wxlocaleinit}. | |
164 | ||
165 | wxLanguageInfo is defined as follows: | |
166 | ||
167 | \begin{verbatim} | |
168 | struct WXDLLEXPORT wxLanguageInfo | |
169 | { | |
170 | int Language; // wxLanguage id | |
171 | wxString CanonicalName; // Canonical name, e.g. fr_FR | |
172 | #ifdef __WIN32__ | |
173 | wxUint32 WinLang, WinSublang; // Win32 language identifiers | |
174 | // (LANG_xxxx, SUBLANG_xxxx) | |
175 | #endif | |
176 | wxString Description; // human-readable name of the language | |
177 | }; | |
178 | \end{verbatim} | |
179 | ||
180 | ||
181 | {\it Language} should be greater than wxLANGUAGE\_USER\_DEFINED. | |
182 | ||
183 | \perlnote{In wxPerl Wx::LanguageInfo has only one method:\par | |
184 | Wx::LanguageInfo->new( language, canonicalName, WinLang, WinSubLang, Description )} | |
185 | ||
186 | ||
187 | \membersection{wxLocale::FindLanguageInfo}{wxlocalefindlanguageinfo} | |
188 | ||
189 | \constfunc{static wxLanguageInfo *}{FindLanguageInfo}{\param{const wxString\& }{locale}} | |
190 | ||
191 | This function may be used to find the language description structure for the | |
192 | given locale, specified either as a two letter ISO language code (for example, | |
193 | "pt"), a language code followed by the country code ("pt\_BR") or a full, human | |
194 | readable, language description ("Portuguese-Brazil"). | |
195 | ||
196 | Returns the information for the given language or {\tt NULL} if this language | |
197 | is unknown. Note that even if the returned pointer is valid, the caller should | |
198 | {\it not} delete it. | |
199 | ||
200 | \wxheading{See also} | |
201 | ||
202 | \helpref{GetLanguageInfo}{wxlocalegetlanguageinfo} | |
203 | ||
204 | ||
205 | \membersection{wxLocale::GetCanonicalName}\label{wxlocalegetcanonicalname} | |
206 | ||
207 | \constfunc{wxString}{GetSysName}{\void} | |
208 | ||
209 | Returns the canonical form of current locale name. Canonical form is the | |
210 | one that is used on UNIX systems: it is a two- or five-letter string in xx or | |
211 | xx\_YY format, where xx is ISO 639 code of language and YY is ISO 3166 code of | |
212 | the country. Examples are "en", "en\_GB", "en\_US" or "fr\_FR". | |
213 | ||
214 | This form is internally used when looking up message catalogs. | |
215 | ||
216 | Compare \helpref{GetSysName}{wxlocalegetsysname}. | |
217 | ||
218 | ||
219 | ||
220 | ||
221 | \membersection{wxLocale::GetLanguage}\label{wxlocalegetlanguage} | |
222 | ||
223 | \constfunc{int}{GetLanguage}{\void} | |
224 | ||
225 | Returns \helpref{wxLanguage}{wxlanguage} constant of current language. | |
226 | Note that you can call this function only if you used the form of | |
227 | \helpref{Init}{wxlocaleinit} that takes wxLanguage argument. | |
228 | ||
229 | ||
230 | \membersection{wxLocale::GetLanguageInfo}\label{wxlocalegetlanguageinfo} | |
231 | ||
232 | \constfunc{static wxLanguageInfo *}{GetLanguageInfo}{\param{int }{lang}} | |
233 | ||
234 | Returns a pointer to wxLanguageInfo structure containing information about the | |
235 | given language or {\tt NULL} if this language is unknown. Note that even if the | |
236 | returned pointer is valid, the caller should {\it not} delete it. | |
237 | ||
238 | See \helpref{AddLanguage}{wxlocaleaddlanguage} for the wxLanguageInfo | |
239 | description. | |
240 | ||
241 | As with \helpref{Init}{wxlocaleinit}, \texttt{wxLANGUAGE\_DEFAULT} has the | |
242 | special meaning if passed as an argument to this function and in this case the | |
243 | result of \helpref{GetSystemLanguage()}{wxlocalegetsystemlanguage} is used. | |
244 | ||
245 | ||
246 | \membersection{wxLocale::GetLanguageName}\label{wxlocalegetlanguagename} | |
247 | ||
248 | \constfunc{static wxString}{GetLanguageName}{\param{int }{lang}} | |
249 | ||
250 | Returns English name of the given language or empty string if this | |
251 | language is unknown. | |
252 | ||
253 | See \helpref{GetLanguageInfo}{wxlocalegetlanguageinfo} for a remark about | |
254 | special meaning of \texttt{wxLANGUAGE\_DEFAULT}. | |
255 | ||
256 | ||
257 | \membersection{wxLocale::GetLocale}\label{wxlocalegetlocale} | |
258 | ||
259 | \constfunc{const char*}{GetLocale}{\void} | |
260 | ||
261 | Returns the locale name as passed to the constructor or | |
262 | \helpref{Init()}{wxlocaleinit}. This is full, human-readable name, | |
263 | e.g. "English" or "French". | |
264 | ||
265 | ||
266 | ||
267 | \membersection{wxLocale::GetName}\label{wxlocalegetname} | |
268 | ||
269 | \constfunc{const wxString\&}{GetName}{\void} | |
270 | ||
271 | Returns the current short name for the locale (as given to the constructor or | |
272 | the Init() function). | |
273 | ||
274 | ||
275 | \membersection{wxLocale::GetString}\label{wxlocalegetstring} | |
276 | ||
277 | \constfunc{const char*}{GetString}{\param{const char }{*szOrigString}, \param{const char }{*szDomain = NULL}} | |
278 | ||
279 | \constfunc{const char*}{GetString}{\param{const char }{*szOrigString}, \param{const char }{*szOrigString2}, \param{size\_t }{n}, \param{const char }{*szDomain = NULL}} | |
280 | ||
281 | Retrieves the translation for a string in all loaded domains unless the szDomain | |
282 | parameter is specified (and then only this catalog/domain is searched). | |
283 | ||
284 | Returns original string if translation is not available | |
285 | (in this case an error message is generated the first time | |
286 | a string is not found; use \helpref{wxLogNull}{wxlogoverview} to suppress it). | |
287 | ||
288 | The second form is used when retrieving translation of string that has | |
289 | different singular and plural form in English or different plural forms in some | |
290 | other language. It takes two extra arguments: \arg{szOrigString} | |
291 | parameter must contain the singular form of the string to be converted. | |
292 | It is also used as the key for the search in the catalog. | |
293 | The \arg{szOrigString2} parameter is the plural form (in English). | |
294 | The parameter \arg{n} is used to determine the plural form. If no | |
295 | message catalog is found \arg{szOrigString} is returned if `n == 1', | |
296 | otherwise \arg{szOrigString2}. | |
297 | See \urlref{GNU gettext manual}{http://www.gnu.org/manual/gettext/html\_chapter/gettext\_10.html\#SEC150} for additional information on plural forms handling. | |
298 | ||
299 | This method is called by the \helpref{wxGetTranslation}{wxgettranslation} | |
300 | function and \helpref{\_()}{underscore} macro. | |
301 | ||
302 | \wxheading{Remarks} | |
303 | ||
304 | Domains are searched in the last to first order, i.e. catalogs | |
305 | added later override those added before. | |
306 | ||
307 | ||
308 | \membersection{wxLocale::GetHeaderValue}\label{wxlocalegetheadervalue} | |
309 | ||
310 | \constfunc{wxString}{GetHeaderValue}{\param{const char }{*szHeader}, \param{const char }{*szDomain = NULL}} | |
311 | ||
312 | Returns the header value for header \arg{szHeader}. The search for \arg{szHeader} is case sensitive. If an \arg{szDomain} | |
313 | is passed, this domain is searched. Else all domains will be searched until a header has been found. | |
314 | The return value is the value of the header if found. Else this will be empty. | |
315 | ||
316 | \membersection{wxLocale::GetSysName}\label{wxlocalegetsysname} | |
317 | ||
318 | \constfunc{wxString}{GetSysName}{\void} | |
319 | ||
320 | Returns current platform-specific locale name as passed to setlocale(). | |
321 | ||
322 | Compare \helpref{GetCanonicalName}{wxlocalegetcanonicalname}. | |
323 | ||
324 | ||
325 | ||
326 | \membersection{wxLocale::GetSystemEncoding}\label{wxlocalegetsystemencoding} | |
327 | ||
328 | \constfunc{static wxFontEncoding}{GetSystemEncoding}{\void} | |
329 | ||
330 | Tries to detect the user's default font encoding. | |
331 | Returns \helpref{wxFontEncoding}{wxfont} value or | |
332 | {\bf wxFONTENCODING\_SYSTEM} if it couldn't be determined. | |
333 | ||
334 | ||
335 | \membersection{wxLocale::GetSystemEncodingName}\label{wxlocalegetsystemencodingname} | |
336 | ||
337 | \constfunc{static wxString}{GetSystemEncodingName}{\void} | |
338 | ||
339 | Tries to detect the name of the user's default font encoding. This string isn't | |
340 | particularly useful for the application as its form is platform-dependent and | |
341 | so you should probably use | |
342 | \helpref{GetSystemEncoding}{wxlocalegetsystemencoding} instead. | |
343 | ||
344 | Returns a user-readable string value or an empty string if it couldn't be | |
345 | determined. | |
346 | ||
347 | ||
348 | \membersection{wxLocale::GetSystemLanguage}\label{wxlocalegetsystemlanguage} | |
349 | ||
350 | \constfunc{static int}{GetSystemLanguage}{\void} | |
351 | ||
352 | Tries to detect the user's default language setting. | |
353 | Returns \helpref{wxLanguage}{wxlanguage} value or | |
354 | {\bf wxLANGUAGE\_UNKNOWN} if the language-guessing algorithm failed. | |
355 | ||
356 | ||
357 | ||
358 | \membersection{wxLocale::Init}\label{wxlocaleinit} | |
359 | ||
360 | ||
361 | \func{bool}{Init}{\param{int }{language = wxLANGUAGE\_DEFAULT}, \param{int }{flags = | |
362 | wxLOCALE\_LOAD\_DEFAULT | wxLOCALE\_CONV\_ENCODING}} | |
363 | ||
364 | \func{bool}{Init}{\param{const char }{*szName}, \param{const char }{*szShort = NULL}, \param{const char }{*szLocale = NULL}, \param{bool }{bLoadDefault = true}, \param{bool }{bConvertEncoding = false}} | |
365 | ||
366 | The second form is deprecated, use the first one unless you know what you are | |
367 | doing. | |
368 | ||
369 | ||
370 | \wxheading{Parameters} | |
371 | ||
372 | \docparam{language}{\helpref{wxLanguage}{wxlanguage} identifier of the locale. | |
373 | wxLANGUAGE\_DEFAULT has special meaning -- wxLocale will use system's default | |
374 | language (see \helpref{GetSystemLanguage}{wxlocalegetsystemlanguage}).} | |
375 | ||
376 | \docparam{flags}{Combination of the following: | |
377 | ||
378 | ||
379 | \begin{twocollist}\itemsep=0pt | |
380 | \twocolitem{\windowstyle{wxLOCALE\_LOAD\_DEFAULT}}{Load the message catalog | |
381 | for the given locale containing the translations of standard wxWidgets messages | |
382 | automatically.} | |
383 | \twocolitem{\windowstyle{wxLOCALE\_CONV\_ENCODING}}{Automatically convert message | |
384 | catalogs to platform's default encoding. Note that it will do only basic | |
385 | conversion between well-known pair like iso8859-1 and windows-1252 or | |
386 | iso8859-2 and windows-1250. See \helpref{Writing non-English applications}{nonenglishoverview} for detailed | |
387 | description of this behaviour. Note that this flag is meaningless in Unicode build.} | |
388 | \end{twocollist} | |
389 | } | |
390 | ||
391 | \docparam{szName}{The name of the locale. Only used in diagnostic messages.} | |
392 | ||
393 | \docparam{szShort}{The standard 2 letter locale abbreviation and is used as the | |
394 | directory prefix when looking for the message catalog files.} | |
395 | ||
396 | \docparam{szLocale}{The parameter for the call to setlocale(). Note that it is | |
397 | platform-specific.} | |
398 | ||
399 | \docparam{bLoadDefault}{May be set to false to prevent loading of the message catalog | |
400 | for the given locale containing the translations of standard wxWidgets messages. | |
401 | This parameter would be rarely used in normal circumstances.} | |
402 | ||
403 | \docparam{bConvertEncoding}{May be set to true to do automatic conversion of message | |
404 | catalogs to platform's native encoding. Note that it will do only basic | |
405 | conversion between well-known pair like iso8859-1 and windows-1252 or | |
406 | iso8859-2 and windows-1250. | |
407 | See \helpref{Writing non-English applications}{nonenglishoverview} for detailed | |
408 | description of this behaviour.} | |
409 | ||
410 | ||
411 | The call of this function has several global side effects which you should | |
412 | understand: first of all, the application locale is changed - note that this | |
413 | will affect many of standard C library functions such as printf() or strftime(). | |
414 | Second, this wxLocale object becomes the new current global locale for the | |
415 | application and so all subsequent calls to | |
416 | \helpref{wxGetTranslation()}{wxgettranslation} will try to | |
417 | translate the messages using the message catalogs for this locale. | |
418 | ||
419 | Returns true on success or false if the given locale couldn't be set. | |
420 | ||
421 | ||
422 | \membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded} | |
423 | ||
424 | \constfunc{bool}{IsLoaded}{\param{const char* }{domain}} | |
425 | ||
426 | Check if the given catalog is loaded, and returns true if it is. | |
427 | ||
428 | According to GNU gettext tradition, each catalog | |
429 | normally corresponds to 'domain' which is more or less the application name. | |
430 | ||
431 | See also: \helpref{AddCatalog}{wxlocaleaddcatalog} | |
432 | ||
433 | ||
434 | \membersection{wxLocale::IsOk}\label{wxlocaleisok} | |
435 | ||
436 | \constfunc{bool}{IsOk}{\void} | |
437 | ||
438 | Returns true if the locale could be set successfully. | |
439 |