Wiki source code of InternationalizingApplications
Version 6.1 by Silvia Macovei on 2010/03/04
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | = Writing Internationalized XWiki Applications = | ||
2 | |||
3 | {{toc start="" depth="" numbered=""/}} | ||
4 | |||
5 | == Using the static Resource Bundles == | ||
6 | |||
7 | * Stop your XWiki instance | ||
8 | * Unjar the ##WEB-INF/lib/xwiki-core-*.jar## file (it was named ##xwiki.jar## in old versions) in ##WEB-INF/classes## and remove it from ##WEB-INF/lib## | ||
9 | * Edit the ##WEB-INF/classes/ApplicationResources*.properties## Resource Bundle files by adding the key/value pairs you need for your application. | ||
10 | * In your document, use the following to get the value associated with a key: | ||
11 | |||
12 | {{code}} | ||
13 | $msg.get("key") | ||
14 | {{/code}} | ||
15 | |||
16 | This will get the value from the Resource Bundle corresponding to the current language you are using in XWiki. | ||
17 | |||
18 | == Using properties located in XWiki pages == | ||
19 | |||
20 | {{warning}} | ||
21 | The features described below are only available in XWiki 1.0 Beta 4 and above. The ability to parametrize the resource string is available only in XWiki 1.0 Beta 5 and above. | ||
22 | {{/warning}} | ||
23 | |||
24 | * Create a page that will host your key/value pairs. | ||
25 | * Enter all the key/value pairs in that page (use the wiki editor). For example: | ||
26 | |||
27 | {{code}} | ||
28 | greeting=hello | ||
29 | welcome=Welcome | ||
30 | withparams=I can {0} pass {1} {2} params too using the Java MessageFormat syntax | ||
31 | {{/code}} | ||
32 | |||
33 | * Do the same for all the translations you want. | ||
34 | |||
35 | {{info}} | ||
36 | To enable multiple languages you'll need to go to the Administration page and set MultiLingual to true and list the different languages you wish to use in the Languages field. | ||
37 | {{/info}} | ||
38 | |||
39 | * Tell XWiki that your page is a Document Bundle by going to the Administration page, selecting the "Programming" icon and entering it in the "Internationalization Document Bundles" field. You can specify several pages, separated by commas. | ||
40 | |||
41 | {{info}} | ||
42 | When creating | ||
43 | {{/info}} | ||
44 | |||
45 | * Alternatively you can also specify the list of Internationalization Document Bundles in ##xwiki.cfg## under the key ##xwiki.documentBundles##. | ||
46 | * On the page where you want to use the internationalized message, use: | ||
47 | |||
48 | {{code}} | ||
49 | $msg.get("key") | ||
50 | $msg.get("key", ["param1", "param2", ...]) | ||
51 | {{/code}} | ||
52 | |||
53 | where ##key## is the key for the message to retrieve. Parameters can also be passed as is shown in the second syntax above. | ||
54 | |||
55 | == I18n of XWiki Objects == | ||
56 | |||
57 | This is currently not implemented (see our logged issue: [[XWIKI-69>>http://jira.xwiki.org/jira/browse/XWIKI-69]]). There are 2 workarounds you can use: | ||
58 | |||
59 | * Have several objects, one for each language, with a language field, and then decide which object to use (for example in a Class Sheet, based on the current language). | ||
60 | * Use Velocity scripting to do an IF in your object. For example, you could have: | ||
61 | |||
62 | {{code language="none"}} | ||
63 | #if ($context.language == "fr") | ||
64 | French texts | ||
65 | #else | ||
66 | Default texts | ||
67 | #end | ||
68 | {{/code}} |