Skip to content

Internationalization for Extension Module

Extension modules can have their own localization resource files in i18n folder. These localized strings can be accessed via I18nHelper.localizeExtensionText class.

let labelCaption = I18nHelper.localizeExtensionText(<i18n_key>, this.definition().data.Module, [<optional_parameter_values, ...]);

This allows the extension to have its own i18n strings that is independent of the app's i18n strings resource file. This is useful for fixed texts or default texts provided by the extensions and even more useful if the extension can be reused in different applications.

For example: your extension provide a button and it has an 'OK' default text that you want to localize to multiple languages.

You will define:

  • button_cancel_label=Cancel in i18n.properties
  • button_cancel_label=Stornieren in i18n_de.properties
  • button_cancel_label=Annullare in i18n_it.properties
extensions/
  MyExtension/
    i18n/
      i18n.properties
      i18n_de.properties
      i18n_it.properties
    controls/
      MyExtensionControl.ts

The detailed folder structure and string resources file can be found here.

In your MyExtensionControl.ts you can access them via:

let labelCaption = I18nHelper.localizeExtensionText('button_cancel_label', this.definition().data.Module);

The explanation on extension folder structure is available here.

Example

import { IView } from 'mdk-core/IView';
import { Label } from 'tns-core-modules/ui/label';
import { Color } from 'tns-core-modules/color';
import { I18nHelper } from 'mdk-core/utils/I18nHelper';

export class MyObjectHeaderI18nExtension extends IView {
  public _label: Label;

  public view(): any {

    if (app.ios) {
      this._label = UILabel.alloc().init();
    } else {
      this._label = new android.widget.TextView(this.androidContext());
    }

    let orderId = this.context.binding ? this.context.binding.OrderId : '';
    let labelCaption = I18nHelper.localizeExtensionText('first_work_order_id', this.definition().data.Module, [orderId]);

    if (app.ios) {
      this._label.text = labelCaption;
    } else {
      this._label.setText(labelCaption);
    }

    return this._label;
  }
}

Last update: August 12, 2020