Zykie allows you to easily build & consume fully typesafe translations in your app. It's a small, fast and scalable internationalization library with high focus on the type safety and developer experience.
- ✅ Well-tested and production ready.
- 🧙♂️ Full static typesafety & autocompletion
- 🐎 Snappy DX - No code generation, run-time bloat, or build pipeline.
- 🍃 Light - zykie has zero deps and a tiny client-side footprint.
- 🐻 Easy to add to your existing brownfield project.
You can try a live demo here.
npm install zykie # or yarn add zykie or pnpm add zykieimport { Zykie } from "zykie";
const locales = ["en", "ba"] as const;
const currentLocale = "en";
const fallbackLocale = "en";
const zykie = new Zykie({
locales,
currentLocale,
fallbackLocale,
});const hello = zykie.create({
en: "Hello",
ba: "Zdravo",
});
console.log(hello.get()); // HelloIf you want to use variables in your translations, you can use the var{variable} syntax.
const greet = zykie.create({
en: "Hello, var{name}",
ba: "Zdravo, var{name}",
});
console.log(greet.get({ name: "John" })); // Hello, JohnYou can also use change the current locale dynamically.
const locales = ["en", "ba"] as const;
const currentLocale = "en";
const fallbackLocale = "en";
const zykie = new Zykie({
locales,
currentLocale,
fallbackLocale,
});
const greet = zykie.create({
en: "Hello, var{name}",
ba: "Zdravo, var{name}",
});
console.log(greet.get({ name: "John" })); // Hello, John
zykie.changeLocale("ba");
console.log(greet.get({ name: "John" })); // Zdravo, JohnLocales can also be passed as an option to the get method. This is useful for cases where you want to use a different locale for a specific translation, but don't want to change the current locale.
console.log(
greet.get(
{ name: "John" },
{
locale: "ba",
},
),
); // Zdravo, JohnZykie supports variations, which are useful for pluralization. To use variations, you can use the variation method.
Variations are evaluated in the order they are defined, and the first one that matches the condition is used.
const dollarAmount = zykie
.create({
en: "Hello, var{name} You have var{amount} dollars",
ba: "Zdravo, var{name} imate var{amount} dolara",
})
.variation(({ amount }) => parseInt(amount) === 1, {
en: "Hello, var{name} You have var{amount} dollar",
ba: "Zdravo, var{name} Imate var{amount} dolar",
})
.variation(
({ amount }) => {
const number = parseInt(amount);
return number > 20 && number % 10 === 1;
},
{ ba: "Zdravo, var{name} imate var{amount} dolar" },
);
console.log(dollarAmount.get({ name: "John", amount: "1" })); // Hello, John You have 1 dollar