Skip to content

Wave-Play/pilot-i18next

Repository files navigation

Pilot i18Next

GitHub license Tests npm minizipped size

Support for i18next in Pilot router

Install

Using NPM

npm install @waveplay/pilot-i18next next-i18next

Using Yarn

yarn add @waveplay/pilot-i18next next-i18next

Getting started

Register your translations with this module using the built-in CLI.

pilot-i18next build

This assumes that your i18n translations exist inside /public/locales. All this command does is copy those translations into the module and generate a import-resource.js for internal use.

Basic usage

Wrap your app export with the appWithTranslation function. This will automatically add the i18n instance + resources to your app's context.

App.tsx

const App = () => {
  // ... your code
};
export default appWithTranslation(App);

Include serverSideTranslations in your returned props from your getServerSideProps function. Be sure to specify the namespaces you want to load.

example-page.tsx

export const getServerSideProps = async (context) => {
  const { locale } = context;

  return {
    props: {
      ...(await serverSideTranslations(locale, ['common']))
    }
  };
};

You're now ready to use the useTranslation hook in your components!

example-page.tsx

const ExamplePage = () => {
  const { t } = useTranslation('common');

  return (
    <View>
      <Text>{t('title')}</Text>
    </View>
  );
};

It's recommended to import the useTranslation hook directly from react-i18next.

Common issues

Your bundler may complain about the fs module not being found. This is because this module exports next-i18next on web builds, which are not meant to be used on native.

To fix this, create two files named the same way, but one with a .native.ts extension like this:

pilot-i18next.ts

export * from '@waveplay/pilot-i18next/dist/index';

pilot-i18next.native.ts

export * from '@waveplay/pilot-i18next/dist/index.native';

... and change your imports in your code to use this file instead.

App.tsx

import { appWithTranslation, serverSideTranslations } from './pilot-i18next';

Your bundler should now happily import only the .native version on native builds, keeping the fs issue away.

Credits

This project was originally developed for WavePlay.

License

The MIT License.

About

Support for i18next in Pilot router

Resources

License

Stars

Watchers

Forks

Packages

No packages published