https://github.com/simplyhexagonal/i18n
i18next wrapper for use as an esbuild / ViteJS plugin or as a stand-alone dependency
https://github.com/simplyhexagonal/i18n
Last synced: 11 months ago
JSON representation
i18next wrapper for use as an esbuild / ViteJS plugin or as a stand-alone dependency
- Host: GitHub
- URL: https://github.com/simplyhexagonal/i18n
- Owner: simplyhexagonal
- Created: 2021-09-23T05:46:16.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-10-26T17:34:15.000Z (over 4 years ago)
- Last Synced: 2025-07-12T08:27:15.147Z (12 months ago)
- Language: TypeScript
- Homepage:
- Size: 143 KB
- Stars: 1
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Simply Hexagonal i18n

[i18next](https://www.npmjs.com/package/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](https://github.com/jeanlescure) 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](#contributors-) ✌️ ! See the [contributing section](#contributing)
## Like this module? ❤
Please consider:
- [Buying me a coffee](https://www.buymeacoffee.com/jeanlescure) ☕
- Supporting Simply Hexagonal on [Open Collective](https://opencollective.com/simplyhexagonal) 🏆
- Starring this repo on [Github](https://github.com/simplyhexagonal/i18n) 🌟
## Install
```sh
pnpm i -D
# or
yarn add -D
# or
npm install -D
```
## Config
```ts
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](https://esbuild.github.io/):
```ts
await i18n.changeLanguage('en');
const esbuildConfig: BuildOptions = {
entryPoints: [/* ... */],
outfile: '...',
bundle: true,
minify: isProduction,
plugins: [
i18n.plugins.esbuild,
],
};
build(esbuildConfig);
```
With [Vite](https://vitejs.dev/):
```ts
await i18n.changeLanguage('en');
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
i18n.plugins.vite,
],
});
```
Stand-alone:
```ts
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:
```tsx
__('hello')
```
If you would like to change the notation, you can set your own custom regular exression to find the
i18n keys within your templates:
```ts
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:
```tsx
{{hello}}
```
## 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](https://allcontributors.org/docs/en/emoji-key)):
## License
Copyright (c) 2021-Present [Simply Hexagonal i18n Contributors](https://github.com/simplyhexagonal/i18n/#contributors-).
Licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).