CxJS

Localization

CxJS supports culture-specific number, currency, and date formatting based on Intl helpers provided by modern browsers. It also offers translation of standard widget messages to different languages.

Example

<div>
  <LabelsTopLayout columns={2} controller={PageController}>
    <LookupField
      value={m.culture.id}
      options={m.cultures}
      label="Culture"
      required
    />
    <LookupField
      value={m.currency.id}
      options={m.currencies}
      label="Currency"
      required
    />
  </LabelsTopLayout>
  <ContentResolver
    params={{ culture: m.culture.id, currency: m.currency.id }}
    onResolve={async ({ culture, currency }) => {
      //console.log(culture, currency);
      Culture.setCulture(culture)
      Culture.setDefaultCurrency(currency)

      switch (culture) {
        case "de-de":
          await import("cx/locale/de-de.js")
          break
        case "es-es":
          await import("cx/locale/es-es.js")
          break
        case "fr-fr":
          await import("cx/locale/fr-fr.js")
          break
        default:
          await import("cx/locale/en-us.js")
          break
      }

      return (
        <LabelsTopLayout columns={2} controller={PageController}>
          <NumberField value={m.number} label="Number" />
          <NumberField value={m.number} label="Currency" format="currency" />
          <Calendar value={m.date} label="Date" />
        </LabelsTopLayout>
      )
    }}
  />
</div>
English (US)
USD

Culture

import { Culture } from 'cx/ui'; Copied

The Culture object provides methods for selecting UI cultures used for formatting.

Setting Culture

import "cx/locale/de-de"; // Import locale data

Culture.setCulture("de-de");

Available locale packages include: de-de, en-us, es-es, fr-fr, nl-nl, pt-pt, sr-latn-ba.

Culture Methods

MethodDescription
Culture.setCulture(code)Sets the current culture for all formatting.
Culture.setNumberCulture(code)Sets culture for number formatting only.
Culture.setDateTimeCulture(code)Sets culture for date/time formatting only.
Culture.setDefaultCurrency(code)Sets the default currency (e.g., "EUR", "USD").
Culture.setDefaultTimezone(tz)Sets the default timezone.
Culture.setDefaultDateEncoding(fn)Sets function for encoding dates.

Dynamic Culture Loading

Use dynamic imports for code-splitting:

async function loadCulture(culture: string) {
  switch (culture) {
    case "de-de":
      await import("cx/locale/de-de");
      break;
    case "fr-fr":
      await import("cx/locale/fr-fr");
      break;
    default:
      await import("cx/locale/en-us");
  }
  Culture.setCulture(culture);
  store.notify(); // Force re-render
}

Localization

import { Localization } from 'cx/ui'; Copied

The Localization object provides methods for translating widget messages.

Localization Methods

MethodDescription
Localization.localize(culture, name, values)Override widget properties for a given culture.
Localization.override(name, values)Override widget properties for all cultures.
Localization.registerPrototype(name, type)Register a component type for localization.

Translating Widget Messages

Localization.localize("de", "cx/widgets/TextField", {
  validationErrorText: "Ungültige Eingabe.",
  minLengthValidationErrorText: "Mindestens {0} Zeichen erforderlich.",
  maxLengthValidationErrorText: "Maximal {0} Zeichen erlaubt.",
});

Overriding Defaults

Use override to change defaults for all cultures:

Localization.override("cx/widgets/DateField", {
  format: "dd.MM.yyyy",
});