sapui5translationsap-basis

SAP custom translations for standard SAPUI5 application


I am currently implementing an extension to a standard application from SAP Marketing.

The extension contains new texts that need to be translated into different languages. In my previous extensions I could use the translation key of the standard application for my extension as well. The first line in the i18n.properties file in this case was always structured as follows:

# SAPUI5 TRANSLATION-KEY XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

However, in the standard app that I'm currently editing, it looks like this:

# This is the resource bundle for Campaigns 
# __ldi.translation.uuid = 8e965d5e-c905-4b60-ac2a-205abb14046

In transaction se63, the translation key (is it even a translation key?) is not found - either with hyphens or without. Furthermore, in the standard app, the translations are kept in a single file for each language (e.g., i18n_de.properties). That's why I'm not sure if there's even a translation key for this standard app.

I don't want to create a new translation key for my extension and use this one. Once I did this, all the translations of the standard app had to be maintained for the new translation key as well.

Is anyone familiar with this type of translation? How can I maintain the translations for my extension?

Best Regards,

Christian


Solution

  • I found some solution to my problem:

    1. I generated a new translation key by running program /UI5/TEXT_FILE_GEN_TRANS_KEY in transaction se38
    2. I created a new folder i18n and added a i18nCustom.properties file to it. Then I added the translation key and default translations to the file just like for a regular i18n.properties file.
    3. In the next step, I added the following code to the sap.ui5 property of the extension's manifest.json file to initiate the custom translation file:

      "models": {
          "i18nCustom": {
              "type": "sap.ui.model.resource.ResourceModel",
              "settings": {
                  "bundleName": "<Your Component>.i18n.i18nCustom"
              }
          }
      }
      

      Please note that you have to use something like {i18nCustom>property} in your view now instead of using i18n model.

    4. To enhance the standard translation file with the custom one, I added the following code to the BaseController. You could also add the code only in the controller whose view is using the custom translations.

      onBeforeRendering: function() {
          var i18n = this.getModel("i18n"); // Get the standard i18n file
          var sBundleURL = this.getModel("i18nCustom").getResourceBundle().oUrlInfo.url;
          i18n.enhance({bundleUrl:sBundleURL}); // Merge the custom i18n file with the standard one
      }
      

    Hope this helps if someone has the same problem.