SeekTable localization

An on-prem SeekTable with white-label mode activated supports UI label customization, which can be used to switch the UI to a non-English language by specifying JSON config at AdminUI localization. This capability can be used for customization of English labels (for example, "Cube" can be changed to "Dataset" etc). For now the following ready-to-use translations are available:

Multi-language reports/dashboards

SeekTable provides internationalization and localization features that make it possible to build multi-language reports and dashboards, allowing each user to view them according to their language preference. This may be especially important when SeekTable is embedded into the host web app that supports multiple languages: embedded reports (or embedded app view) may be configured for rendering in different languages too. With SeekTable's multi-language support it is possible to avoid cloning and mainaining separate sets of cubes/reports for each language if the only difference are localized labels and numbers/dates formatting.

The following items can be translated/localized:

Technically translations are configured as JSON files (an object with property-to-translation pairs), for example:

{
  "Year": "Jahr",
  "Month": "Monat",
  "Product": "Produkt"
}

These files must then be registered in docker-compose.seektable.env as follows:

SeekTable_ST__Appearance__Multilanguage__Enabled=true
SeekTable_ST__Appearance__Multilanguage__TranslatePublishedReportLabels=true
SeekTable_ST__Appearance__Multilanguage__TranslateOnlySharedCubeLabels=false
SeekTable_ST__Appearance__Multilanguage__TranslateReadOnlyEntityName=true
SeekTable_ST__Appearance__Multilanguage__AllowSwitchLanguageByUser=true
# 1st (index=0) locale "ua"
SeekTable_ST__Appearance__Multilanguage__Locales__0__LocaleID=ua
SeekTable_ST__Appearance__Multilanguage__Locales__0__LocaleName=Ukrainian
SeekTable_ST__Appearance__Multilanguage__Locales__0__AppLabelsFile=/app/locales/uk-UA.json
SeekTable_ST__Appearance__Multilanguage__Locales__0__UserLabelsFile=/app/locales/uk-UA_user.json
SeekTable_ST__Appearance__Multilanguage__Locales__0__CubeFormatCulture=uk-UA
# 2nd (index=1) locale "de"
SeekTable_ST__Appearance__Multilanguage__Locales__1__LocaleID=de
SeekTable_ST__Appearance__Multilanguage__Locales__1__LocaleName=German
SeekTable_ST__Appearance__Multilanguage__Locales__1__AppLabelsFile=/app/locales/de-DE.json
SeekTable_ST__Appearance__Multilanguage__Locales__1__UserLabelsFile=/app/locales/de-DE_user.json
SeekTable_ST__Appearance__Multilanguage__Locales__1__CubeFormatCulture=de-DE
# (next locale should use index=2 and so on)
Variable Description
TranslatePublishedReportLabels Determines whether to translate report-specific labels (rows/columns/values "Label" overrides, custom chart X/Y-axes labels) in published reports and shared (via "Team sharing") reports. This translation is based on UserLabelsFile.
TranslateOnlySharedCubeLabels Translate cube labels (dimensions/measures/parameters) only when it is accessed as a 'shared' cube. Otherwise, cube labels are always translated according to the user's language selection. Note that "cube configuration form" always shows non-translated labels.
TranslateReadOnlyEntityName Translate cubes & reports names when they are accessed as read-only (shared) items. This translation is based on UserLabelsFile.
AllowSwitchLanguageByUser Allow end users to switch UI language in "Manage Account".
LocaleID Unique locale identifier.
LocaleName The display name for this language in the UI switcher (optional).
AppLabelsFile Location of JSON file with app UI labels translation. Examples/ready-to-use translations are available at github.com/seektable/localization.
UserLabelsFile Location of JSON file with user-defined labels (cube labels, report-specific labels) translation.
CubeFormatCulture The culture name in the format languagecode2-country used for dates/numbers formatting. Affects localization of month/day-of-week names. languagecode2 is a lowercase two-letter code as defined in ISO 639-1, or, if no two-letter code is available, a three-letter code as defined in ISO 639-3. country contains a value defined in ISO 3166 and usually consists of two uppercase letters. For example:
de-DE
German, Germany
de-CH
German, Switzerland
da-DK
Danish, Denmark
en-CA
English, Canada
en-US
English, United States
en-GB
English, United Kingdom
fi-FI
Finnish, Finland
fr-FR
French, France
fr-CA
French, Canada
hu-HU
Hungarian, Hungary
el-GR
Greek, Greece
it-IT
Italian, Italy
lt-LT
Lithuanian, Lithuania
sv-SE
Swedish, Sweden
es-ES
Spanish, Spain
nb-NO
Norwegian (Bokmal), Norway
nl-NL
Dutch, Netherlands
pl-PL
Polish, Poland
uk-UA
Ukrainian, Ukraine
This is incomplete list of supported cultures. If your one is not listed, contact us to confirm that it is supported.

JSON files with labels translation should be located in host's folder and mounted to seektable container by adding the following line into docker-compose.yml file:

  seektable:
    image: seektable:latest
    expose:
     - 5000
    ports:
     - 80:5000
	volumes:
      - /var/seektable/locales:/app/locales
      - csv-files-volume:/app-data/csv-files

where /var/seektable/locales is a host-server location, and /app/locales is a bases path used in docker-compose.seektable.env.

Don't forget to re-create SeekTable docker containers to apply these changes. Then, go to "Admin" → "System setup" → "UI Localization", you should see a message that confirms multi-language support and the list of loaded locale IDs.

Once configured, these locale IDs can be specified in secure embedding JWT payload using seektable_user_locale_id=LocaleID.

In dashboards, use the Dashboard.localeId global JS variable to localize labels in HTML templates.