Skip to content
/ i18nano Public

Lightweight translation module with functionality similar to react-i18next

License

Notifications You must be signed in to change notification settings

eolme/i18nano

Repository files navigation

i18nano GitHub license gzip bundle size brotli bundle size Coverage

Internationalization for the react is done simply.

Lightweight translation module with functionality similar to react-i18next.

Features

  • Async translation loading
  • Fallback translations
  • Preloading translations
  • Translations in translations
  • Deep translations and values lookup
  • Mustache-like templates
  • Nested providers
  • No dependencies
  • And other cool stuff

Usage

Let's create typical, unopinionated and simple component with the following structure:

import { TranslationProvider, Translation } from 'i18nano';
import { load } from './load';

const translations = {
  // dynamic import static json
  'en': () => import('translations/en.json'),
  // or with custom load function
  'ru': () => load('ru')
};

export const App = () => {
  return (
    <TranslationProvider translations={translations}>
      <header>
        <Translation path="header">
          Loading...
        </Translation>
      </header>
    </TranslationProvider>
  );
};

And that's all it takes! For other available provider options see definition.

Components

  • Translation - recommended way to use i18nano
  • TranslationRender - low level rendering component

Hooks

  • useTranslation - returns the function to extract the translation
  • useTranslationChange - returns the object with information and useful functions such as switch and preload languages

Switch

To switch between languages, let's create a component using the hook as follows:

import { useTranslationChange } from 'i18nano';

export const LanguageChange = () => {
  const translation = useTranslationChange();

  return (
    <select value={translation.lang}