Translating Your Customizations
- by Richard Bingham
This blog post explains the basics of translating the customizations 
you can make to Fusion Applications products, with the inclusion of 
information for both composer-based customizations and the generic 
design-time customizations done via JDeveloper. 
       
      Introduction 
      Like most Oracle Applications, Fusion Applications installs 
on-premise with a US-English base language that is, in Release 7, 
supported by the option to add up to a total of 22 additional language packs
 (In Oracle Cloud production environments languages are pre-installed 
already). As such many organizations offer their users the option of 
working with their local language, and logically that should also apply 
for any customizations as well. 
      Composer-based UI Customizations 
      Customizations made in Page Composer take into consideration the 
session LOCALE, as set in the user preferences screen, during all 
customization work, and stores the customization in the MDS repository 
accordingly. As such the actual new or changed values used will only 
apply for the same language under which the customization was made, and 
text for any other languages requires a separate upload. See the 
Resource Bundles section below, which incidentally also applies to 
custom UI changes done in JDeveloper. 
      You may have noticed this when you select the “Select Text Resource” 
menu option when editing the text on a page. Using this ensures that the
 resource bundles are used, whereas if you define a static value in 
Expression Builder it will never be available for translation. Notice in
 the screenshot below the “What’s New” custom value I have already 
defined using the ‘Select Text Resource’ feature is internally using the
 adfBundle groovy function to pull the custom value for my key (RT_S_1) from the ComposerOverrideBundle. 
       
      Figure 1 – Page Composer showing the override bundle being used. 
      Business Objects 
      Customizing the Business Objects available in the Applications 
Composer tool for the CRM products, such as adding additional fields, 
also operates using the session language. Translating these additional 
values for these fields into other installed languages requires loading 
additional resource bundles, again as described below. 
      Reports and Analytics 
      Most customizations to Reports and BI Analytics are just essentially 
reorganizations and visualizations of existing number and text data from
 the system, and as such will use the appropriate values based on the 
users session language. Where a translated value or string exists for 
that session language, it will be used without the need for additional 
work. 
      Extending through the addition of brand new reports and analytics 
requires another method of loading the translated strings, as part of 
what is known as ‘Localizing’ the BI Catalog and Metadata. This time it 
is via an export/import of XML data through the BI Administrators 
console, and is described in the OBIEE Admin Guide. 
      Fusion Applications reports based on BI Publisher are already defined
 in template-per-locale, and in addition provide an extra process for 
getting the data for translation and reloading. This again uses the 
standard resource bundle format. Loading a custom report is illustrated 
in this video from our YouTube channel which shows the screen for both setting the template local and running an export for translation. 
      Fusion Applications Menus 
      Whilst the seeded Navigator and Global Menu values are fully 
translated when the additional language is installed, if they are 
customized then the change or new menu item will apply universally, not 
currently per language. This is set to change in a future release with 
the new UI Text Editor feature described below. 
      More on Resource Bundles 
      As mentioned above, to provide translations for most of your 
customizations you need to add values to a resource bundle. This is an 
industry open standard (OASIS) format XML file with the extension 
.xliff, and store translated values for the strings used by ADF at 
run-time. The general process is that these values are exported from the
 MDS repository, manually edited, and then imported back in again.This 
needs to be done by an administrator, via either WLST commands or 
through Enterprise Manager as per the screenshot below. This is detailed
 out in the Fusion Applications Extensibility Guide. For SaaS environments the Cloud Operations team can assist. 
       
      Figure 2 – Enterprise Manager’s MDS export used getting resource 
bundles for manual translation and re-imported on the same screen. 
      All customized strings are stored in an override bundle (xliff file) 
for each locale, suffixed with the language initials, with English ones 
being saved to the default. As such each language bundle can be easily 
identified and updated. 
      Similarly if you used JDeveloper to create your own applications as 
extensions to Fusion Applications you would use the native support for 
resource bundles, and add them into the faces-config.xml file for 
inclusion in your application. An example is this ADF customization video from our YouTube channel. 
      JDeveloper also supports automatic synchronization between your 
underlying resource bundles and any translatable strings you add – very 
handy. For more information see chapters on “Using Automatic Resource 
Bundle Integration in JDeveloper” and “Manually Defining Resource 
Bundles and Locales” in the Oracle Fusion Middleware Web User Interface Developer’s Guide for Oracle Application Development Framework. 
      FND Messages and Look-ups 
      FND Messages, as defined here, are not used for UI labels (they are 
known as ‘strings’), but are the responses back to users as a result of 
an action, such as from a page submit. Each ‘message’ is defined and 
stored in the related database table (FND_MESSAGES_B), with another 
(FND_MESSAGES_TL) holding any language-specific values. These come 
seeded with the additional language installs, however if you customize 
the messages via the “Manage Messages” task in Functional Setup Manager,
 or add new ones, then currently (in Release 7) you’ll need to repeat it
 for each language. 
       
      Figure 3 – An FND Message defined in an English user session. 
      Similarly Look-ups are stored in a translation table 
(FND_LOOKUP_VALUES_TL) where appropriate, and can be customized by 
setting the users session language and making the change  in the Setup 
and Maintenance task entitled “Manage [Standard|Common] Look-ups”. 
      Online Help 
      Yes, in fact all the seeded help is applied as part of each language pack install as part of the post-install provisioning process. 
       
         
       
      If you are editing or adding custom online help then the Create Help 
screen provides a drop-down of which language your help customization 
will apply to. This is shown in the video below from our YouTube channel, and obviously you’ll need to it for each language in use.  
       What is Coming for Translations? 
     
     
      Currently planned for Release 8 is something called the User Interface (UI) Text Editor.
 This tool will allow the editing of all the text shown on the pages and
 forms of Fusion Application. This will provide a search based on a 
particular term or word, say “Worker”, and will allow it to be adjusted,
 say to “Employee”, which then updates all the Resource Bundles that 
contain it. In the case of multi-language environments, it will use the 
users session language (locale) to know which Resource Bundles to apply 
the change to. 
      This capability will also support customization sandboxes,
 to help ensure changes can be tested and approved.  It is also 
interesting to note that the design currently allows any page-specific 
customizations done using Page Composer or Application Composer to 
over-write the global changes done via the UI Text Editor, allowing for 
special context-sensitive values to still be used. 
      Further Reading and Resources 
      The following short list provides the mains resources for digging 
into more detail on translation support for both Composer and JDeveloper
 customization projects. 
     
     
       
        There is a dedicated chapter entitled “Translating Custom Text” in the Fusion Applications Extensibility Guide. This has good examples and steps for many tasks, especially administering resource bundles. 
        Using localization formatting (numbers, dates etc) for design-time changes is well documented in the Fusion Applications Developer Guide. 
        For more guidelines on general design-time globalization, see either
 the ‘Internationalizing and Localizing Pages’ chapter in the Oracle
 Fusion Middleware Web User Interface Developer’s Guide for Oracle 
Application Development Framework (Oracle Fusion Applications Edition) or the general Oracle Database Globalization Support Guide. 
        The Oracle Architecture ‘A-Team’ provided a recent post
 on customizing the user session timeout popup, using design-time 
changes to resource bundles. It has detailed step-by-step examples which
 can be a useful illustration.