Skip to content
/ yoi18n Public

⚡ Straightforward & less effort React i18n library. (Under 1kb gminzipped)

License

Notifications You must be signed in to change notification settings

fzn0x/yoi18n

Repository files navigation

yoi18n

Warning

This package is still a work in progress.


GitHub Workflow Status GitHub npm npm JSR Bundle Size Bundle Size GitHub commit activity GitHub last commit


⚡Straightforward & less effort React i18n library.

Get to Know

Installation

bun install yoi18n
npm install yoi18n
yarn add yoi18n
pnpm install yoi18n

Usage

Creates lang.json and lang-admin.json files:

lang.json :

{
  "en": {
    "hello": "hello world"
  },
  "de": {
    "hello": "Guten Morgen"
  },
  "id": {
    "hello": "Hallo bang"
  }
}

lang-admin.json :

{
  "en": {
    "hello": "hello world from admin"
  },
  "de": {
    "hello": "Guten Morgen from admin"
  },
  "id": {
    "hello": "Hallo bang from admin"
  }
}

JavaScript

// lang.js
const i18n = require('yoi18n')

const t = i18n.init({
  namespace: {
    default: {
      // user pages
      load: `/lang.json`,
      defaultLang: 'en',
    },
    admin: {
      // admin pages
      load: `/lang-admin.json`,
      defaultLang: 'en',
    },
  },
  detection: {
    order: ['cookie', 'path', 'query'], // use defaultLang if not found
    defaultLang: 'en',
  },
})

console.log(t('hello')) // "hello" from default namespace
console.log(t('admin.hello')) // "hello" from admin namespace,

// You can export for reusability
// module.exports = t;

TypeScript

// lang.ts
import i18n from 'yoi18n'

const t = i18n.init({
  namespace: {
    default: {
      // user pages
      load: `/lang.json`,
      defaultLang: 'en',
    },
    admin: {
      // admin pages
      load: `/lang-admin.json`,
      defaultLang: 'en',
    },
  },
  detection: {
    order: ['cookie', 'path', 'query'], // use defaultLang if not found
    defaultLang: 'en',
  },
})

console.log(t('hello')) // "hello" from default namespace
console.log(t('admin.hello')) // "hello" from admin namespace,

// You can export for reusability
// export default t;

React

import i18n from 'yoi18n'

const t = i18n.init({
  namespace: {
    default: {
      // user pages
      load: `/lang.json`,
      defaultLang: 'en',
    },
    admin: {
      // admin pages
      load: `/lang-admin.json`,
      defaultLang: 'en',
    },
  },
  detection: {
    order: ['cookie', 'path', 'query'], // use defaultLang if not found
    defaultLang: 'en',
  },
})

// Creates a function LanguageSwitch to change defaultLang
export default function LanguageSwitch({ lang, ns }) {
  // t.switch is to change the defaultLang
  return <div onClick={() => t.switch(lang, ns)}>Switch Language for {ns}</div>
}

;<LanguageSwitch lang='de' ns='default' />
;<LanguageSwitch lang='de' ns='admin' />

License

yoi18n is MIT Licensed and Open Source Software by @fzn0x