0.0.10 • Published 1 year ago

react-hooklation v0.0.10

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

npm downloads npm bundle size tests license semantic-release

React Hooklation

Lightweight, dependency-free and well-typed React internationalization library

This library is in not stable yet and each version might contain a breaking change

Installation

npm install react-hooklation
// or
yarn add react-hooklation
// or
pnpm add react-hooklation

Compatibility

Usage

Type Documentation

react-hooklation does not detect or mange your current locale. Therefore, you need to provide the current locale at the root of your application: Wrap everything with HooklationProvider and pass the current locale.

<HooklationProvider>...</HooklationProvider>

Within your components you can access translations using useHooklation:

const en = {
  title: "Welcome",
  greeting: { hello: "Hello" },
};
const de = {
  title: "Willkommen",
  greeting: { hello: "Hallo" },
};

function Component() {
  const t = useHooklation({ en, de });

  return (
    <>
      <h1>{t("title")}</h1>
      <p>{t("greeting.hello")} Andi</p>
    </>
  );
}

Plural

const en = {
  potato: {
    "=1": "1 Potato",
    ">=2": "2+ Potatoes",
    ">=5": "Many Potatoes",
  },
};
const de = {
  potato: {
    "=1": "1 Kartoffel",
    ">=2": "2+ Kartoffeln",
    ">=5": "Viele Kartoffeln",
  },
};

function Component() {
  const t = useHooklation({ en, de });

  return (
    <ul>
      <li>{t("potato", { count: 1 })}</li> <!-- 1 potato -->
      <li>{t("potato", { count: 3 })}</li> <!-- 2+ potatoes -->
      <li>{t("potato", { count: 5 })}</li> <!-- Many potatoes -->
    </ul>
  );
}

Which translation is selected?

  1. exact match (=2 or =50)
  2. ranged match (>=2 or >=50) that starts closest to count

Component-specific hooks

You don't have to import the translations into every single component when using useHooklation. Instead, you can create a component-specific hook using createHooklationHook:

Recommended folder structure

component/
├─ locale/
│  ├─ index.ts
│  ├─ de.ts
│  ├─ en.ts
├─ index.ts
├─ SubComponent.ts
// component/locale/index.ts
import { createHooklationHook } from "react-hooklation";
import { en } from "./en";
import { de } from "./de";

const useLocalTranslation = createHooklationHook({ en, de });

// component/index.ts
import { useLocalTranslation } from "./locale";

const t = useLocalTranslation();

Plugins

Development

Build

To build the library, first install the dependencies, then run npm run build.

npm install
npm run build

Tests

npm install
npm test          // Unit tests
npm run typecheck // TypeScript tests

License

MIT

0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago

1.0.0

1 year ago