1.2.2 • Published 3 years ago

@simplyhexagonal/i18n v1.2.2

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
3 years ago

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):

License

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

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago

1.0.2

3 years ago

1.0.0

3 years ago