@zanomate/localize

Components and helpers to provide translations in a React Application

Usage no npm install needed!

<script type="module">
  import zanomateLocalize from 'https://cdn.skypack.dev/@zanomate/localize';
</script>

README

@zanomate / localize

Components and helpers to provide translations in a React Application

tl;dr

  • fixed configuration:
    • loads translations from /public/locales/{{lng}}/{{ns}}.json
  • use i18next:
    • react-i18next
    • i18next-xhr-backend
    • i18next-browser-languagedetector

Usage

Init i18next

Use the initI18n utility to initialize i18next with standard configurations.

import { initI18n } from '@zanomate/localize'

initI18n(
  ['en', 'it', 'es'], // languages
  ['common', 'profile'] // namespaces
)
Parameter Type Default Description
languages string[] ['en'] Set of supported languages. The first element is considered as fallback.
namespaces string[] ['translations'] Set of supported namespaces.

Provide localization

Use the Localization component to provide translations over the application.

import { Localization } from '@zanomate/localize'

const App = () => (
  <Localization>
    // content
  </Localization>
)
Props Type Default Description
defaultNS string 'translations' [optional] Specify the default namespace.

Translate labels

Use the Localized component to translate labels.

import { Localized } from '@zanomate/localize'

const CustomComponent = () => (
  <Localized label="awesome" />
)

Translations are rendered as simple text with no additional style or structure.

Props Type Default Description
label string - Label to localize.
ns string - [optional] Namespace to witch the label belongs. In case of no namespace specified, the defaultNS of the Localization component is used.
fillers object - [optional] Maps of elements to fills placeholders in label. Fillers could be of type string, number or components.
lang string - [optional] Language to override the current selected one.

A more complex example.

// Hi, I'm {{name}} and I'm {{age}} years. Look at this {{component}}!

const CustomComponent = () => (
  <Localized
    label="my-fillable-label"
    ns="profile"
    fillers={{
      name: 'Matteo',
      age: 28,
      component: <MyCustomFiller />
    }}
  />
)