JIRA 4.3 : Translating JIRA
This page last changed on Mar 17, 2011 by rosie@atlassian.com.
This page contains information about translating JIRA into languages other than English. On this page: Atlassian Translations – a collaborative environment for creating translations of JIRAAtlassian Translations provides a collaborative environment for customers to translate JIRA. At present there are thousands of accepted translations across a number of languages. We need your help to make this even better! If you are looking at updating or creating a language pack please use Atlassian Translations and tell us about your experience. You can log in with your My Atlassian account. To provide feedback or submit an existing language pack for import please contact The Internationalisation Team. What translations of JIRA are currently available?Currently, JIRA ships with a number of translations in the most commonly-requested languages. As a JIRA administrator, you can choose the default language from the list of installed languages: see Choosing a Default Language for the latest list. Individual users can also choose their preferred language from the same list: see Choosing a Language. How are new translations of JIRA created?JIRA's internationalisation is an ongoing effort, and we'd love your help. If you would like to translate JIRA into your language, the rest of this document describes how to do so.
Where to begin?In order to get JIRA to appear in your own language you need to translate the content of the properties file located inside the language_default.jar file. The language_default.jar file is found inside the JIRA installation's WEB-INF/lib directory. To get the latest properties files, please download the latest version of JIRA from http://www.atlassian.com/software/jira/JIRADownloadCenter.jspa. Extract JIRA's default property file (language_default.jar) directly into the WEB-INF/classes directory (using a standard Unzip utility of 'jar xvf' from the command-line). A new file JiraWebActionSupport.properties will be placed inside the directory WEB-INF/classes/com/atlassian/jira/web/action. Rename this properties file so that its name contains the locale details of the language that the content will be translated to. The file's name should match the following format: JiraWebActionSupport_<Language Code>_<Country Code>.properties For example, if you are translating the content of the file into Portuguese (spoken in Portugal), save all changes to a properties file named JiraWebActionSupport_pt_PT.properties.
The "Language Code" is a valid ISO Language Code. These codes are the lower-case, two-letter codes as defined by ISO-639. The "Country Code" is a valid ISO Country Code. These codes are the upper-case, two-letter codes as defined by ISO-3166. Translating into multi-byte languagesLanguages like Chinese and Russian are represented with native two-byte encodings like gb2312 or koi8. Java .properties files are assumed to be Unicode encoded as ISO-8859-1. Therefore entering Chinese or Russian characters directly into the .properties files will not work. The solution is to create the translation as a separate file, such as: JiraWebActionSupport_<Language Code>_<Country Code>-native.txt Once completed, these can be transformed into regular .properties files with the 'native2ascii' command. E.g. for Russian: native2ascii -encoding cp1251 JiraWebActionSupport_ru_RU-native.txt Translating wordsProperties files contain many "entries" for each of the words and sentences used in JIRA. The entry for the common word "Project" looks like this: common.concepts.project = Project To translate this into French (for example), you would replace the English word "Project" with "Projet", ie: common.concepts.project = Projet Translating sentencesSome sentences in JIRA have certain words that are HTML links OR constitute database data. For example: issue.operations.move = {0}Move{1} this issue to another project OR roadmap.issuesresolved = {0} of {1} issues have been resolved In the first example, the word "Move" links to the "Move Issue" page. The HTML code for this link is passed in using {0} and {1}. In the second example, {0} is the number of resolved issues and {1} is the total number of issues. When translating sentences, ensure that you do not omit these elements. A French translation of the first example above might look like this: issue.operations.move = {0}Déplacer{1} cette demande vers un autre projet
Translating the javascript calendar popup toolIn addition to the JIRA-specific translation files, you may want to see if there is an existing translation for the javascript calendar utility that JIRA uses as a date picker. You can find these files in /jira-components/jira-webapp/src/main/webapp/includes/lib/calendar/lang/.js. Many languages already have a translation; it is a good idea to look over the translation and see if the months correspond to the correct months that java expects for a date in your locale. If you add a new calendar_{LANG}.js file, you will need to add an entry mapping the filename to your language code in the file atlassian-jira/WEB-INF/classes/calendar-language-util.properties{*}. For example: en=calendar_en.js You will also need to add the javascript file as a downloadable web resource. Modify the file system-webresources-plugin.xml to include the following: <web-resource key="calendar-{LANG}" i18n-name-key="admin.web.resources.plugin.calendar.{LANG}.name" name="Calendar" state='enabled'> <resource type="download" name="calendar-{LANG}.js" location="/includes/js/calendar/lang/calendar-{LANG}.js"> <param name="source" value="webContextStatic"/> </resource> </web-resource> Packaging the translationThe properties files for each locale are collected into language bundles. Once you have finished translating all the properties files, a language descriptor file has to be created. This file "tells" JIRA that a new language is available. The file MUST be called language-descriptor.xml and should be located at the root of the language bundle (i.e. directly in the temporary directory). The language-descriptor.xml tells JIRA which locale (language and country) the property files represent, and the JIRA version for which the translation was last updated. The language-descriptor.xml file looks like this: <language> <locale>en_UK</locale> <version>2.6</version> </language> The locale tag must contain a proper Java locale name. The locale name is made up of the Language Code and Country Code (please see the Where to begin? section for more details).
Create a jar ('jar cvf language_<locale>.jar ...') which contains all the translated property files (remember to preserve the directory structure) and the language-descriptor.xml file. Although not absolutely necessary, it is a good idea to call this file language_<locale>.jar, where <locale> is the contents of the locale tag in the language-descriptor.xml file. For example, for French call the file language_fr_FR.jar. Installing a new translation of JIRATo make JIRA aware of your translation, you will need to copy the jar file that you created in the previous step (see Packaging the translation into the WEB-INF/lib directory found under JIRA's web application directory. If you would like JIRA to display a flag for your translation during the setup process, place a GIF image with the same name as the locale into the /images/flags directory under JIRA's web application directory. For example, for the French translation place a file called fr_FR.gif into the /images/flags directory.
Submitting a translationIf you would like your translation to be included in JIRA, please create an issue on jira.atlassian.com and attach the jar containing the properties files.
Reporting a translation issueHave you noticed an issue with an existing translation? Please file an issue! What about translations of the documentation?We do not currently offer translations of the JIRA documentation into other languages. However, we do offer a page where people can contribute the guides they have written in languages other than English: JIRA Documentation in Other Languages. |
![]() |
Document generated by Confluence on Mar 27, 2011 18:51 |