Languages

A channel declares which languages its data can be maintained in through the channelDefinedLanguages section of the datastandard. This drives the language picker in the PDX UI and defines which language layers a product's attribute values can hold.

The section has two parts:

  • default – the language selected when none is chosen explicitly. Every channel has exactly one default language. If a channel does not register one, PDX falls back to English (en).
  • alreadyDefined – the full list of languages the channel supports. The default language is also part of this list.

Each language is identified by its languageTag, which must be unique within the channel.

Generic Properties

PropertyDescription
nameLanguage name shown in the PDX UI (for example, “English (Canada)”). Required.
languageTagIETF BCP 47 language tag used internally by PDX as the language identifier, for example en-CA. Must be unique within the channel. Required.
flagUrlURL of the flag icon displayed next to the language in the PDX UI. Optional.
levelNotAvailableWhen true, the language cannot be selected in the PDX UI and data cannot be mapped to that level. Optional.
familyLanguagesLanguage dialects grouped under this language (a list of LanguageDialect), used to build a language hierarchy — for example enen-US, en-GB. Optional.
mandatoryMarks the language as mandatory. Optional.

Defining languages

Languages are registered with LanguageBuilder. It exposes two entry points:

  • LanguageBuilder.defaultLanguage(languageTag, name) – registers the channel default language. It is added to alreadyDefined as well. Registering a second default language is an error.
  • LanguageBuilder.language(languageTag, name) – registers a supported (non-default) language.

Registering two languages with the same languageTag is an error.

Optional properties are set with the builder methods withFlagUrl(...), withLevelNotAvailable(...), withMandatory(...) and withFamilyLanguage(...) / withFamilyLanguages(...). Call build() to register the language.

Code Examples:

LanguageBuilder.defaultLanguage("en-CA", "English (Canada)")
        .withFlagUrl("https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/ca.svg")
        .build();

LanguageBuilder.language("fr-CA", "French (Canada)")
        .withFlagUrl("https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/fr.svg")
        .build();
"channelDefinedLanguages" : {
  "default" : {
    "name" : "English (Canada)",
    "languageTag" : "en-CA",
    "flagUrl" : "https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/ca.svg"
  },
  "alreadyDefined" : [ {
    "name" : "English (Canada)",
    "languageTag" : "en-CA",
    "flagUrl" : "https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/ca.svg"
  }, {
    "name" : "French (Canada)",
    "languageTag" : "fr-CA",
    "flagUrl" : "https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/fr.svg"
  } ]
}
📘

If no default language is registered, PDX uses English (en) as the default and alreadyDefined stays empty.

Language hierarchies

A language can group several dialects under it through familyLanguages, forming a hierarchy such as enen-US, en-GB. Each dialect is a LanguageDialect, which is built directly with its fluent setters (name, languageTag and flagUrl are required).

Code Examples:

LanguageBuilder.defaultLanguage("en", "English")
        .withFlagUrl("https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/us.svg")
        .withFamilyLanguage(new LanguageDialect()
                .withLanguageTag("en-US")
                .withName("English (United States)")
                .withFlagUrl("https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/us.svg"))
        .withFamilyLanguage(new LanguageDialect()
                .withLanguageTag("en-GB")
                .withName("English (United Kingdom)")
                .withFlagUrl("https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/gb.svg"))
        .build();
"default" : {
  "name" : "English",
  "languageTag" : "en",
  "flagUrl" : "https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/us.svg",
  "familyLanguages" : [ {
    "name" : "English (United States)",
    "languageTag" : "en-US",
    "flagUrl" : "https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/us.svg"
  }, {
    "name" : "English (United Kingdom)",
    "languageTag" : "en-GB",
    "flagUrl" : "https://s3-eu-west-1.amazonaws.com/leap-ui-resources/channel-logos/market/svg/gb.svg"
  } ]
}

Did this page help you?