1.1.0 • Published 1 year ago

@vygruppen/spor-i18n-react v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

i18n Tools (React)

Here, you'll find tools for handling internationalization of your apps, and for all components in the spor-react component library.

Installation

$ npm install @vygruppen/spor-i18n-react

Usage

import {
  Language,
  LanguageProvider,
  useTranslation,
  Translations,
} from "@vygruppen/spor-i18n-react";

The first thing you need to do, is to wrap your application in a LanguageProvider. If you're using the SporProvider from @vygruppen/spor-react, this is already done for you.

The LanguageProvider requires you to specify a language prop with a value from the Language enum.

import { Language, LanguageProvider } from "@vygruppen/spor-i18n-react";

const Root = () => (
  <LanguageProvider language={Language.English}>
    <App />
  </LanguageProvider>
);

Supported languages

Currently, we support Norwegian (bokmål), Swedish and English. If you need other languages, please contact the Spor team.

It's up to you to specify and handle any "current language" state, either by getting it from an API, or saving it in local storage, for instance.

Once you've done this, you can now translate strings easily. Let's move to an example component.

const ExampleComponent = () => {
  return <Box>I need to be translated</Box>;
};

In order to translate this, we need to first write up the texts and translations. Let's create an object:

import { createTexts } from "@vygruppen/spor-i18n-react";
const ExampleComponent = () => {
  return <Box>I need to be translated</Box>;
};
const texts = createTexts({
  iAmTranslated: {
    nb: "Jeg er oversatt",
    nn: "Jeg er oversatt",
    en: "I am translated",
    sv: "Jag är översatt",
  },
});

The createTexts function doesn't really do anything to the object you pass in, but enables another layer of type safety and code completion. Consider it an optional recommendation.

Now, we call the useTranslation hook, and destructure out the translation function t. This is the one you pass your texts to.

This is the final result:

import { useTranslation, createTexts } from "@vygruppen/spor-i18n-react";
const ExampleComponent = () => {
  const { t } = useTranslation();
  return <Box>{t(texts.iAmTranslated)}</Box>;
};
const texts = createTexts({
  iAmTranslated: {
    nb: "Jeg er oversatt",
    nn: "Eg er oversatt",
    en: "I am translated",
    sv: "Jag är översatt",
  },
});

Note that you can nest these texts objects as deep as you like. The values of each language can also be a function, if you need to interpolate some values:

const texts = createTexts({
  greeting: (name) => ({
    nb: `Hei ${name}!`,
    en: `Hello ${name}!`,
    sv: `Hej ${name}!`,
  }),
};

For further documentation, please refer to the documentation of the library supporting our implementation, @leile/lobo-t.

Development

Please refer to the root readme for development notes.