Wiki source code of Writing Internationalized XWiki Applications
Version 11.5 by Clemens Robbenhaar on 2013/11/07
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | {{box cssClass="floatinginfobox" title="**Contents**"}} | ||
2 | {{toc/}} | ||
3 | {{/box}} | ||
4 | |||
5 | = Tutorials = | ||
6 | |||
7 | * [[Tutorial for Internationalizing a Form>>DevGuide.TranslationsTutorial]] | ||
8 | |||
9 | = Using properties located in XWiki pages = | ||
10 | |||
11 | * Create a page that will host your key/value pairs | ||
12 | * Enter all the key/value pairs in that page ({{warning}}use the wiki editor{{/warning}}). For example:((( | ||
13 | {{code language="none"}} | ||
14 | greeting=hello | ||
15 | welcome=Welcome | ||
16 | withparams=I can {0} pass {1} {2} params too using the Java MessageFormat syntax | ||
17 | {{/code}} | ||
18 | ))) | ||
19 | * Do the same for all the translations you want.((( | ||
20 | {{info}} | ||
21 | 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. | ||
22 | {{/info}} | ||
23 | ))) | ||
24 | * Tell XWiki that your page is a Document Bundle by going to the Administration page, selecting the "Localization" section and entering it in the "Internationalization Document Bundles" field. You can specify several pages, separated by commas.((( | ||
25 | {{info}} | ||
26 | When creating "Internationalization Document Bundles", you should avoid naming the pages with names that include spaces. For example, a document name of Main.My Messages could cause issues, instead, use Main.MyMessages | ||
27 | {{/info}} | ||
28 | ))) | ||
29 | * Alternatively you can also specify the list of Internationalization Document Bundles in ##xwiki.cfg## under the key ##xwiki.documentBundles##. | ||
30 | * On the page where you want to use the internationalized message, use:((( | ||
31 | {{code}} | ||
32 | $services.localization.render("key") | ||
33 | $services.localization.render("key", ["param1", "param2", ...]) | ||
34 | {{/code}} | ||
35 | |||
36 | where ##key## is the key for the message to retrieve. Parameters can also be passed as is shown in the second syntax above. | ||
37 | ))) | ||
38 | |||
39 | = I18n of XWiki Objects = | ||
40 | |||
41 | This is currently not implemented (see our logged issue: [[XWIKI-69>>http://jira.xwiki.org/browse/XWIKI-69]]). There are 2 workarounds you can use: | ||
42 | |||
43 | * 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):((( | ||
44 | {{code language="none"}} | ||
45 | $doc.getObject('Your.Class', 'lang', $context.language') | ||
46 | ## Will select the object whose 'lang' property is set to the current language | ||
47 | {{/code}} | ||
48 | ))) | ||
49 | * Use Velocity scripting to do an IF in your object. For example, you could have:((( | ||
50 | {{code language="none"}} | ||
51 | #if ($context.language == "fr") | ||
52 | French texts | ||
53 | #else | ||
54 | Default texts | ||
55 | #end | ||
56 | {{/code}} | ||
57 | ))) | ||
58 | |||
59 | = Using the static Resource Bundles = | ||
60 | |||
61 | * Stop your XWiki instance | ||
62 | * Extract the ##ApplicationResources*.properties## file for your language from the ##WEB-INF/lib/xwiki-*oldcore-*.jar## file and put them in your ##WEB-INF/classes## directory | ||
63 | * Edit this file and add/modify the key/value pairs you need for your application | ||
64 | * In your document, use the following to get the value associated with a key: {{code language="none"}}$services.localization.render("key"){{/code}} | ||
65 | |||
66 | This will get the value from the Resource Bundle corresponding to the current language you are using in XWiki. |