11.3 Localizing the SailPoint UI
Key Takeaways
Product messages are Java properties catalogs (iiqMessages and its language variants inside identityiq.jar); customers override them in WEB-INF/classes/sailpoint/web/messages/iiqCustom.properties.
Language-specific overrides go in files such as iiqCustom_fr.properties, and the user's browser language decides which one is shown.
Multi-language descriptions for applications, roles, policies, and entitlements are enabled on the Miscellaneous tab with a default and supported languages, which must also be in faces-config.xml.
Forms, report columns, and email templates can use message keys, and spTools.getMessage(key) localizes text in email.
The importManagedAttributes console command can load localized entitlement descriptions from a CSV whose columns are named after locales.
Localizing the SailPoint UI
Objective 4.10 asks you to perform localization in the SailPoint UI for common customer use cases. The usual cases are changing product wording, translating labels for non-English users, showing application, role, and entitlement descriptions in several languages, and localizing custom forms, reports, and emails.
How IdentityIQ Chooses Text
IdentityIQ UI text comes from message catalogs: Java .properties files of key=value pairs. The user's browser language decides which language catalog is used. For multi-language descriptions, the description shown depends on the browser language, falling back to the configured default.
- Product catalogs ship inside
WEB-INF/lib/identityiq.jar, insailpoint/web/messages/iiqMessages.propertiesand language variants such asiiqMessages_it.properties. - The customer override catalog is
WEB-INF/classes/sailpoint/web/messages/iiqCustom.properties. It is empty by default. A key placed here overrides the product value, and you never edit the jar.
Common Use Case 1: Change or Translate a Label
- Find the message key. Search the product catalogs extracted from
identityiq.jar, or inspect the page. - Add the key with your text to
iiqCustom.propertiesfor the default language. - For another language, create a language-suffixed file such as
iiqCustom_fr.propertiesoriiqCustom_de.properties, or a locale-specific one such as_fr_CA. - Deploy with the build and restart, then test in a browser set to that language.
# iiqCustom.properties (this key is the alt text of the header logo)
ui_sailpoint_logo=ACME Access Portal
# iiqCustom_fr.properties
ui_sailpoint_logo=Portail d'accès ACME
Keep these files in the build (SSB web or config layout), because upgrades replace the installation directory.
Common Use Case 2: Multi-Language Object Descriptions
Business users see application, role, policy, and entitlement descriptions throughout LCM and certifications. To localize them:
- On Global Settings > IdentityIQ Configuration > Miscellaneous, under Localized Object Attributes, enable multi-language descriptions for applications, roles, policies, and/or entitlements.
- Under Multi-Languages Descriptions, choose the Default Language and list the Supported Languages.
- Add every supported language to the
<locale-configure>section offaces-config.xml. The documentation says the application will not recognize the languages otherwise. - Enter descriptions per language with the language selector on each object's page. Save each language before switching to the next.
Policy descriptions can be localized, but policy rule descriptions cannot.
Bulk-Loading Entitlement Descriptions
The console command importManagedAttributes loads a CSV. The first line is a comment naming the columns, which can include locale columns such as en_US or fr_FR holding the description for that language. Later comment lines can set defaults such as application=AD. Required values are type (default Entitlement), application, attribute, and value.
# value, displayName, en_US, fr_FR
# application=AD
# attribute=memberOf
CN=Finance,OU=Groups,DC=acme,DC=com, Finance, Finance department share, Partage du service Finance
Watch the HTML rules for descriptions. Certain escaped characters must be written correctly, such as < and ", or they will not display.
Common Use Case 3: Custom Forms, Reports, and Emails
- Forms: field labels (
displayName) and help text (helpKey) can be message keys, so the same form renders in each user's language. - Reports: report form labels and
ReportColumnConfigheaders are evaluated first as message keys (for example,rept_uncorrelated_ids_grid_username). If no key matches, the literal text is used. Render scripts can callMessage.localize(key). - Email templates: call
$spTools.getMessage("key")for catalog text, and$spTools.formatDate(...)for locale-formatted dates. - Server-side code: use the
Messageobject'slocalizemethod with a catalog key. - Security questions on the User Reset tab can be message keys from the properties file, which is how the questions are internationalized.
Common Use Case 4: Plugins
A plugin carries its own catalogs in its messages folder, one per language, for example TrainingPlugin_fr_ca.properties. Prefix plugin keys with the plugin name to avoid collisions with product keys or other plugins. Full-page plugins translate with the msgs function, and widgets use the spTranslate filter from the SailPoint Angular bundle.
Planning a Multilingual Rollout
Localization is easiest when planned before content is written:
- Decide the language list early, and configure it both in the Miscellaneous tab and in
faces-config.xml. - Use message keys in custom artifacts (forms, reports, and plugin pages) from the start, rather than hard-coded English, so later translation is a properties-file task.
- Translate the business data too. A French user who sees French buttons but English entitlement descriptions still cannot make a good certification decision. Load descriptions with
importManagedAttributesor the per-object language selector. - Remember email. Notification text comes from templates. Use
spTools.getMessagekeys or separate templates per audience where needed.
Checklist and Traps
| Symptom | Likely cause |
|---|---|
| French users still see English labels | No iiqCustom_fr.properties override, the browser is not set to French, or the server was not restarted after deployment |
| The language selector for descriptions is missing | Multi-language descriptions are not enabled for that object type |
| A supported language is ignored | It was not added to <locale-configure> in faces-config.xml |
| Custom translations vanished after an upgrade | The files were not kept in the build |
A customer wants to change the wording of a standard IdentityIQ label for all English users without editing product files. Where should the new value go?
In WEB-INF/classes/sailpoint/web/messages/iiqCustom.properties, using the same message key
In iiqMessages.properties inside identityiq.jar
In the SystemConfiguration object's labels map
In log4j2.properties
Multi-language descriptions are enabled for roles, and German is listed as a supported language, but German descriptions never appear. What step was probably missed?
Running the Full Text Index Refresh task
Enabling Suppress Duplicate Emails
Importing init-lcm.xml
Adding German to the locale-configure section of faces-config.xml
Which console command can bulk-load entitlement descriptions in several languages from a CSV file?
import -noids
oconfig
textsearch
importManagedAttributes
A custom report column header is set to rept_uncorrelated_ids_grid_username. How does IdentityIQ treat that value?
It first looks it up as a message key and shows the localized text, falling back to the literal string if no key matches.
It always prints the literal string.
It treats it as a filter string.
It requires a matching email template.
Sections you finish are checked off in the contents.