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