46f951dadb067f6270813272ced8df5125ec99aa
[jalview.git] / doc / i18n.html
1 <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <!--
3  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
4  * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
5  * 
6  * This file is part of Jalview.
7  * 
8  * Jalview is free software: you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License 
10  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
18 -->
19 <html xmlns="http://www.w3.org/1999/xhtml">
20   <head>Jalview i18n</head>
21   <body>
22 <h1>Best practices</h1>
23 <ol>
24 <li>Follow the standards described in this guide</li>
25 <li>Always use properties files for user interface text; never include displayable text in code</li>
26 <li>Use properties files only for user interface text (Messages_xx.properties) and config files for configuration settings (jalview.properties).</li>
27 <li>Use a proper naming schema for keys in your resource bundles. The name of the keys should provide some information about the context of the displayed text. This helps the translators during the translation process.</li>
28 <li>Group keys by view, ie. edit.title, edit.instructions, list.title, list.instructions, create.title, etc</li>
29 <li>Never use displayable text when executing comparisons within the logic of the tool (separate codified values from displayable text)</li>
30 <li>Always use the MessageManager class for retrieving properties values, and invoke MessageManager methods dynamically, to accommodate dynamic user preferences (see MessageManager below).</li>
31 <li>All numbers and dates should be formatted specific to the user's locale (e.g. java.text.NumberFormat and java.text.DateFormat)</li>
32 <li>Test code in more than one language</li>
33 </ol>
34 <h1>MessageManager</h1>
35 <p>The jalview.util.MessageManager class is a wrapper class for the ResourceBundle class. It provides dynamic language/locale support for individual users, and is recommended for all Jalview code.</p>
36 <p>To use it within your code, you only have to invoke MessageManager with the text key in Messages_xx.properties:</p>
37 <p>JButton ok = new JButton(MessageManager.getString("button.ok"));</p>
38 <p>This will set JButton text to the one included at button.ok key. In English JButton text will be OK, while in Spanish will be Aceptar. This is the big thing of i18n. :)</p>
39 <h1>Don't rely comparisons on labels</h1>
40 <p>Don't use this type of coding:
41     threshold.addItem("No Threshold");<br>
42     threshold.addItem("Above Threshold");<br>
43     threshold.addItem("Below Threshold");<br>
44     [...]<br>
45     if (threshold.getSelectedItem().equals("Above Threshold"))<br>
46     {</br>
47       aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;<br>
48     }<br>
49     else if (threshold.getSelectedItem().equals("Below Threshold"))<br>
50     {<br>
51       aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;<br>
52     }<br>
53 </p>
54 <p>Once text has been translated, these equals will fail as the label won't be the English ones. It should be used getSelectedIndex() instead of getSelectedItem(). If you do the proper way, the code will look like this:<br>
55     threshold.addItem(MessageManager.getString("label.threshold_feature_no_thereshold"));<br>
56     threshold.addItem(MessageManager.getString("label.threshold_feature_above_thereshold"));<br>
57     threshold.addItem(MessageManager.getString("label.threshold_feature_below_thereshold"));<br>
58     [...]<br>
59     if (threshold.getSelectedIndex()==1)<br>
60     {<br>
61       aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;<br>
62     }<br>
63     else if (threshold.getSelectedIndex()==2)<br>
64     {<br>
65       aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;<br>
66     }<br>    
67 </p>
68 <h1>How to translate Jalview</h1>
69 <p>Anyone interested in localizing/translating Jalview is strongly encouraged to join the <a href="mailto:jalview-dev@jalview.org">Jalview Development List</a> list. We would recommend that you read this entire page before proceeding.</p>
70 <p>If you are planning on working on a Jalview translation, please send us an email (<a href="mailto:jalview-dev@jalview.org">Jalview Development List</a>). There may be someone else already working on translating Jalview to your target language.</p>
71 <p>Once you have downloaded the source code (available at <a href="http://www.jalview.org/download">http://www.jalview.org/download</a>), you must edit {jalview.home}/resources/lang/Messages_xx.properties, where xx refers to your language country code. If it doesn't exits, rename Messages.properties to Messages_xx.properties.</p>
72 <p>Next step...start transtalation!</p>
73 <p>Once you have it translated, we would appreciate if you contribute it forwarding the file to <a href="mailto:jalview-dev@jalview.org">Jalview Development List</a>. We will commit it to the code base as soon as possible. Thanks so much for this in advance!</p>
74 </body>
75 </html>
76