Translating JIRA Agile Custom Fields
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Please ensure that a backup has been done prior to the changes above. The above modification are not guaranteed to be supported by Atlassian and any changes should be done in own risk
Problem
When using the language package from https://translations.atlassian.com/, you might not have the Custom Fields translated. Custom Fields are translated to different languages as explained in the following documentation: Translating a custom field . However, this is not possible with JIRA Agile Custom Fields as these are locked Fields.
Resolution
Unlock all the JIRA Agile Custom Fields that you want to translate using the method shown below
Run the following query via database to determine the JIRA Software custom field IDs
SELECT id,customfieldtypekey,cfname from customfield where customfieldtypekey like 'com.pyxis.greenhopper.jira%';
It should return a result like the following:
id | customfieldtypekey | cfname -------+--------------------------------------------------------------------+------------------------- 10204 | com.pyxis.greenhopper.jira:gh-global-rank | Rank 10205 | com.pyxis.greenhopper.jira:gh-sprint | Sprint 10206 | com.pyxis.greenhopper.jira:gh-epic-link | Epic Link 10207 | com.pyxis.greenhopper.jira:gh-epic-label | Epic Name 10208 | com.pyxis.greenhopper.jira:gh-epic-status | Epic Status 10209 | com.pyxis.greenhopper.jira:gh-epic-color | Epic Colour 10211 | com.pyxis.greenhopper.jira:greenhopper-releasedmultiversionhistory | Release Version History
You will have to match the id of the field you want to unlock with the according entry in
managedconfigurationitem
table's item_id column.SELECT * from managedconfigurationitem;
id | item_id | item_type | managed | access_level | source | description_key -------+-------------------+--------------+---------+--------------+----------------------------------------------------+---------------------------- 10000 | customfield_10204 | CUSTOM_FIELD | true | LOCKED | com.pyxis.greenhopper.jira:reference-select-locked | gh.customfield.locked.desc 10001 | customfield_10205 | CUSTOM_FIELD | true | LOCKED | com.pyxis.greenhopper.jira:reference-select-locked | gh.customfield.locked.desc 10002 | customfield_10206 | CUSTOM_FIELD | true | LOCKED | com.pyxis.greenhopper.jira:reference-select-locked | gh.customfield.locked.desc 10003 | customfield_10207 | CUSTOM_FIELD | true | LOCKED | com.pyxis.greenhopper.jira:reference-select-locked | gh.customfield.locked.desc 10004 | customfield_10208 | CUSTOM_FIELD | true | LOCKED | com.pyxis.greenhopper.jira:reference-select-locked | gh.customfield.locked.desc 10005 | customfield_10209 | CUSTOM_FIELD | true | LOCKED | com.pyxis.greenhopper.jira:reference-select-locked | gh.customfield.locked.desc
You will need to set the managed column to
false
of any field you want to unlock. For example, the below will unlock Epic Status and Epic Colour:UPDATE managedconfigurationitem set managed='false' where item_id in ('customfield_10208','customfield_10209');
Note: After the above change the 'access_level' column will remain with the 'LOCKED' value, but the custom fields will be unlocked from the UI.
- Go back to the UI and you shall be able to translate the Agile Custom Fields as usual using this documentation:Translating a custom field
Then open any Issue that has the Agile Custom Field that you just translated and you shall see that it is now using the Translated value.
Lock back the Agile Custom Fields that you just unlocked. To Lock the fields that were unlocked by setting the managed column to true. For example, the below will lock Epic Status and Epic Colour:
UPDATE managedconfigurationitem set managed='true' where item_id in ('customfield_10208','customfield_10209');
These fields will be locked again on startup by automated tasks within plugins.