Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


Although the basics of the i18n mechanism are the same for every part of the ecosystem, the packaging differs depending on what you are developing:

  • Translations for the Sonar SonarQubeTM Platform: making the Sonar SonarQubeTM Platform available in a new language requires to develop and publish a new Language Pack plugin.
    • By default Sonar default SonarQubeTM embeds the English Pack.
    • All other Language Pack plugins (like the French Pack plugin) are hosted in the Plugins Forge, are maintained by the community and are available through Update Center (category "Localization").
  • Translations for the Sonar the SonarQubeTM Community Plugins: open-source plugins of the Sonar the SonarQubeTM Community (hosted in the Plugins Forge) must embed only the bundles for the default locale. Translations will be done in the Language Pack plugins.

  • Translations for other Plugins: closed-source/commercial/independant plugins must embed the bundles for the default locale and the translations for every language they want to support.
titleTo sum up
  • Sonar Platform and Sonar SonarQubeTM Platform and SonarQubeTM Community Plugins rely on Language Pack plugins to get translations
  • Other independant Sonar SonarQubeTM plugins embed by themselves all the translations they need


  • These are regular properties files with key/value pairs where you will put most translations
  • These files must be stored in the package "org.sonar.l10n" package (usually in the directory src/main/resources/org/sonar/l10n directory)
  • The name of these files must respect the convention "<key of the plugin to translate>_<language>.properties", for example "" or "". See sonar-packaging-maven-plugin for details on plugin key derivation.
  • Messages accept arguments. Such entries would look like:

    No Format is a message with 2 params: the first "{0}" and the second "{1}".


  • They are used for rule descriptions, which might be long and need HTML tags
  • These files must be stored in the package "org.sonar.l10n.<plugin key>_<language>" package.
    • Starting with Sonar SonarQubeTM 3.0, the files should be stored in the package "org.sonar.l10n.<key of the plugin to translate>_<language>.rules.<repository key>" package (backward compatibility is ensured for l10n plugins which use the former location)
  • The name of these files must be the key of the rule they translate
  • Example: the French description of the Squid Architectural Constraint rule is "src/main/resources/org/sonar/l10n/squidjava_fr/ArchitecturalConstraint.html"
    • Or, starting with Sonar SonarQubeTM 3.0: "src/main/resources/org/sonar/l10n/squidjava_fr/rules/squid/ArchitecturalConstraint.html" (as "squidjava" is the plugin key and "squid" the repository key)
titleUTF-8 encoding

In the Java API, properties files are supposed to be encoded in ISO-8859 charset. Without good tooling, this can be quite annoying to write translation for languages that do not fit in this charset.
This is why we decided to encode the properties files in UTF-8, and let Maven turn them into ASCII at build time thanks to native2ascii-maven-plugin (check the French plugin pom.xml). This makes the process of writing translations with a standard editor far easier.
HTML files must also be encoded in UTF-8.






Metric name of code


Metric description

metric.ncloc.description=Non Commenting Lines of Code<channel key>

Name of notification channel

notification.dispatcher.<dispatcher key>

Subscription to notification channel

notification.dispatcher.ChangesInReviewAssignedToMeOrCreatedByMe=Changes in review assigned to me or created by me


Rule name Instantiation

rule.<repository>.<key>.param.<param key>

Description of rule parameter

rule.pmd.VariableNamingConventions.param.memberSuffix=Suffix for member variables

dashboard.<key>.nameDashboard name, since Chauds



Qualifier name, since 2.13.




Widget name


Widget description

widget.alerts.description=Display project alerts

widget.<key>.property.<property key>.name
Name of widget property severity
widget.<key>.property.<property key>.desc
Description of widget property selected, 
severity used to initialize the dropdown list of widget
Name of item of dropdown list 


Any other widget message

widget.alerts.tooltip=Threshold is raised

<page key>.page

Page names shown in the left sidebar

<page key>.*

Any other keys used in a page


property.category.<category key>

Category name of properties, since 2.11


property.category.<category key>.description
Short description of category of properties, since 3.6property.category.General.description=General properties of SonarSonarQube
property.category.<category key>.<subcategory key>
Subcategory name of properties, since exclusions
property.category.<category key>.<subcategory key>.descriptionShort description of subcategory of properties, since of global exclusions


Property name, since 2.11 encoding


Property description, since 2.11

property.sonar.sourceEncoding.description=Source encoding

<plugin key>.*

Any other keys used by plugin



A Language Pack defines bundles for the Sonar SonarQubeTM Platform and for the Sonar SonarQubeTM Community plugins.

Creating a new Language Pack


This part applies if you are developing a commercial / closed-source plugin, or an open-source plugin that is not part of the Sonar SonarSonarQubeTM Community Plugins.

Such plugins must embed their own bundles. Bundles must be added to src/main/resources with the following convention names :

  • Standard messages : org/sonar/l10n/<plugin key>_<language>.properties
  • Rule descriptions :
    • Up to Sonar SonarSonarQubeTM 3.0: org/sonar/l10n/<plugin key>_<language>/*.html
    • Since Sonar SonarSonarQubeTM 3.0: org/sonar/l10n/<plugin key>_<language>/rules/<repository key>/*.html

The default bundle is mandatory, and must be the English translation. For example the plugin with key "mysonarplugin" must define the following files in order to enable the French translation:

  • org/sonar/l10n/
  • org/sonar/l10n/