@simplyhexagonal/i18n
TypeScript icon, indicating that this package has built-in type declarations

1.2.2 • Public • Published

Simply Hexagonal i18n

Tests

i18next wrapper for use as an esbuild / ViteJS plugin or as a stand-alone dependency.

Open source notice

This project is open to updates by its users, I ensure that PRs are relevant to the community. In other words, if you find a bug or want a new feature, please help us by becoming one of the contributors ✌️ ! See the contributing section

Like this module?

Please consider:

Install

pnpm i -D

# or
yarn add -D

# or
npm install -D 

Config

import I18N from '@simplyhexagonal/i18n';

import en from './i18n/en.json';
import es from './i18n/es.json';
// etc..

const i18n = new I18N({
  resources: {
    ...en,
    ...es,
    // etc...
  }
});

Usage

With esbuild:

await i18n.changeLanguage('en');

const esbuildConfig: BuildOptions = {
  entryPoints: [/* ... */],
  outfile: '...',
  bundle: true,
  minify: isProduction,
  plugins: [
    i18n.plugins.esbuild,
  ],
};

build(esbuildConfig);

With Vite:

await i18n.changeLanguage('en');

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    i18n.plugins.vite,
  ],
});

Stand-alone:

await i18n.initPromise;

await i18n.changeLanguage('en');

const template = fs.readFileSync('./template.html').toString();

const result = i18n.apply(template);

// do something with result

Template usage and configuration

In your templates use the __('key') notation:

<h1>__('hello')</h1>

If you would like to change the notation, you can set your own custom regular exression to find the i18n keys within your templates:

const i18n = new I18N(
  {
    resources: {
      ...en,
      ...es,
    },
  },
  [
    /\{\{([^\{\}]+?)\}\}/g,
  ],
);

The key is expected to always be the first matching group (i.e. whatever is matched within the first set of parenthesis in your regex).

NOTE: you can define multiple regexes.

Then in your template:

<h1>{{hello}}</h1>

Contributing

Yes, thank you! This plugin is community-driven, most of its features are from different authors. Please update the docs and tests and add your name to the package.json file.

Contributors

Thanks goes to these wonderful people (emoji key):


Jean Lescure

🚧 💻 📓 ⚠️ 💡 📖

License

Copyright (c) 2021-Present Simply Hexagonal i18n Contributors.
Licensed under the Apache License 2.0.

Readme

Keywords

none

Package Sidebar

Install

npm i @simplyhexagonal/i18n

Weekly Downloads

114

Version

1.2.2

License

Apache-2.0

Unpacked Size

24.2 kB

Total Files

7

Last publish

Collaborators

  • jeanlescure