<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rounak Sharrma</title>
    <description>The latest articles on DEV Community by Rounak Sharrma (@rounaksharma19).</description>
    <link>https://dev.to/rounaksharma19</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3825668%2F33b3614d-0b54-4ab0-8365-e36f0132d2f4.jpeg</url>
      <title>DEV Community: Rounak Sharrma</title>
      <link>https://dev.to/rounaksharma19</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rounaksharma19"/>
    <language>en</language>
    <item>
      <title>I Built a Lightweight i18n Library for JavaScript — Meet globaly-i18n</title>
      <dc:creator>Rounak Sharrma</dc:creator>
      <pubDate>Sun, 15 Mar 2026 17:34:21 +0000</pubDate>
      <link>https://dev.to/rounaksharma19/i-built-a-lightweight-i18n-library-for-javascript-meet-globaly-i18n-eo2</link>
      <guid>https://dev.to/rounaksharma19/i-built-a-lightweight-i18n-library-for-javascript-meet-globaly-i18n-eo2</guid>
      <description>&lt;p&gt;globaly-i18n&lt;br&gt;
Lightweight internationalization (i18n) and translation library for JavaScript and TypeScript with support for namespaces, lazy loading, caching, middleware, language detection, CLI tools, and type-safe translations.&lt;/p&gt;

&lt;p&gt;Designed to work seamlessly in frontend and backend applications, including Node.js, React, Vue, Next.js, Express, and NestJS.&lt;/p&gt;

&lt;p&gt;npm version weekly downloads total downloads bundle size license typescript&lt;/p&gt;

&lt;p&gt;✨ Features&lt;br&gt;
🌍 Dynamic language loading&lt;br&gt;
🗂 Namespace-based translations&lt;br&gt;
🔑 Nested translation keys&lt;br&gt;
🔢 Pluralization support&lt;br&gt;
🔄 Variable interpolation&lt;br&gt;
🔁 Fallback language support&lt;br&gt;
🌐 Language switching&lt;br&gt;
🧠 Language detection (browser / headers / query / localStorage)&lt;br&gt;
💾 Language persistence&lt;br&gt;
⚡ Translation caching for performance&lt;br&gt;
📦 Lazy namespace loading&lt;br&gt;
⚛ React hook support&lt;br&gt;
🧩 Express &amp;amp; NestJS middleware support&lt;br&gt;
🧠 TypeScript autocomplete for translation keys&lt;br&gt;
🛠 CLI translation key extraction&lt;br&gt;
🌐 CLI translation generator&lt;br&gt;
⚡ Lightweight and fast&lt;br&gt;
🖥 Works in Node.js, React, Vue, Next.js and other frameworks&lt;br&gt;
📦 Installation&lt;br&gt;
Install using npm:&lt;/p&gt;

&lt;p&gt;npm install globaly-i18n&lt;br&gt;
Using yarn:&lt;/p&gt;

&lt;p&gt;yarn add globaly-i18n&lt;br&gt;
Using pnpm:&lt;/p&gt;

&lt;p&gt;pnpm add globaly-i18n&lt;br&gt;
🚀 Quick Start&lt;br&gt;
import { createI18n } from "globaly-i18n";&lt;/p&gt;

&lt;p&gt;const i18n = await createI18n({&lt;br&gt;
  defaultLang: "en",&lt;br&gt;
  namespaces: ["common"],&lt;br&gt;
  loader: (lang, ns) =&amp;gt;&lt;br&gt;
    import(&lt;code&gt;./locales/${lang}/${ns}.json&lt;/code&gt;).then((m) =&amp;gt; m.default),&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;console.log(i18n.t("common:home.title", { name: "Rounak" }));&lt;br&gt;
Output&lt;/p&gt;

&lt;p&gt;Welcome Rounak&lt;br&gt;
📁 Translation File Structure&lt;br&gt;
Using namespaces allows you to organize translations by module.&lt;/p&gt;

&lt;p&gt;locales&lt;br&gt;
 ├ en&lt;br&gt;
 │   ├ common.json&lt;br&gt;
 │   └ auth.json&lt;br&gt;
 │&lt;br&gt;
 └ de&lt;br&gt;
     ├ common.json&lt;br&gt;
     └ auth.json&lt;br&gt;
📄 Example Translation File&lt;br&gt;
locales/en/common.json&lt;br&gt;
{&lt;br&gt;
  "home": {&lt;br&gt;
    "title": "Welcome {name}"&lt;br&gt;
  },&lt;br&gt;
  "cart": {&lt;br&gt;
    "items": {&lt;br&gt;
      "one": "You have {count} item",&lt;br&gt;
      "other": "You have {count} items"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
🌐 Switching Languages&lt;br&gt;
await i18n.setLanguage("de");&lt;/p&gt;

&lt;p&gt;console.log(i18n.t("common:home.title", { name: "Rounak" }));&lt;br&gt;
Output&lt;/p&gt;

&lt;p&gt;Willkommen Rounak&lt;br&gt;
🔢 Pluralization&lt;br&gt;
i18n.t("common:cart.items", { count: 5 });&lt;br&gt;
Output&lt;/p&gt;

&lt;p&gt;You have 5 items&lt;br&gt;
🔄 Variable Interpolation&lt;br&gt;
i18n.t("common:home.title", {&lt;br&gt;
  name: "Rounak"&lt;br&gt;
});&lt;br&gt;
Output&lt;/p&gt;

&lt;p&gt;Welcome Rounak&lt;br&gt;
📦 Lazy Namespace Loading&lt;br&gt;
For large applications you can load namespaces only when needed.&lt;/p&gt;

&lt;p&gt;await i18n.loadNamespace("dashboard");&lt;/p&gt;

&lt;p&gt;console.log(i18n.t("dashboard:stats.users"));&lt;br&gt;
This keeps the initial bundle small and improves performance.&lt;/p&gt;

&lt;p&gt;⚡ Translation Caching&lt;br&gt;
globaly-i18n automatically caches translations internally.&lt;/p&gt;

&lt;p&gt;Repeated calls like:&lt;/p&gt;

&lt;p&gt;i18n.t("common:home.title");&lt;br&gt;
are served from cache for better performance.&lt;/p&gt;

&lt;p&gt;💾 Language Persistence&lt;br&gt;
Selected language is automatically saved to localStorage.&lt;/p&gt;

&lt;p&gt;await i18n.setLanguage("de");&lt;br&gt;
After page reload, the language remains active.&lt;/p&gt;

&lt;p&gt;🧠 Language Detection&lt;br&gt;
Languages can be detected automatically from:&lt;/p&gt;

&lt;p&gt;Browser settings&lt;br&gt;
HTTP Accept-Language header&lt;br&gt;
Query parameters (?lang=de)&lt;br&gt;
localStorage&lt;br&gt;
Example&lt;/p&gt;

&lt;p&gt;const i18n = await createI18n({&lt;br&gt;
  defaultLang: "en",&lt;br&gt;
  detectLanguage: true,&lt;br&gt;
  namespaces: ["common"],&lt;br&gt;
  loader: (lang, ns) =&amp;gt;&lt;br&gt;
    import(&lt;code&gt;./locales/${lang}/${ns}.json&lt;/code&gt;).then((m) =&amp;gt; m.default)&lt;br&gt;
});&lt;br&gt;
⚛ React Integration&lt;br&gt;
Wrap your application with the provider.&lt;/p&gt;

&lt;p&gt;import { I18nProvider } from "globaly-i18n/react";&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  &lt;br&gt;
&lt;br&gt;
Use translations inside components.&lt;/p&gt;

&lt;p&gt;import { useTranslation } from "globaly-i18n/react";&lt;/p&gt;

&lt;p&gt;function Home() {&lt;br&gt;
  const { t, setLanguage } = useTranslation();&lt;/p&gt;

&lt;p&gt;return (&lt;br&gt;
    &amp;lt;&amp;gt;&lt;br&gt;
      &lt;/p&gt;
&lt;h1&gt;{t("common:home.title")}&lt;/h1&gt;
&lt;br&gt;
       setLanguage("de")}&amp;gt;&lt;br&gt;
        Switch Language&lt;br&gt;
      &lt;br&gt;
    &amp;lt;/&amp;gt;&lt;br&gt;
  );&lt;br&gt;
}&lt;br&gt;
🧩 Middleware (Express / NestJS)&lt;br&gt;
import express from "express";&lt;br&gt;
import { createI18n, i18nMiddleware } from "globaly-i18n";

&lt;p&gt;const app = express();&lt;/p&gt;

&lt;p&gt;const i18n = await createI18n({&lt;br&gt;
  defaultLang: "en",&lt;br&gt;
  namespaces: ["common"],&lt;br&gt;
  loader: (lang, ns) =&amp;gt;&lt;br&gt;
    import(&lt;code&gt;./locales/${lang}/${ns}.json&lt;/code&gt;).then((m) =&amp;gt; m.default)&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;app.use(i18nMiddleware(i18n));&lt;/p&gt;

&lt;p&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
  res.send(req.t("common:home.title"));&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;app.listen(3000);&lt;br&gt;
🛠 CLI Translation Key Extraction&lt;br&gt;
Scan your project and extract translation keys.&lt;/p&gt;

&lt;p&gt;Example source code&lt;/p&gt;

&lt;p&gt;t("common:home.title");&lt;br&gt;
t("auth:login.button");&lt;br&gt;
Run&lt;/p&gt;

&lt;p&gt;npx globaly-i18n extract src&lt;br&gt;
🌐 CLI Translation Generator&lt;br&gt;
Automatically generate translated files.&lt;/p&gt;

&lt;p&gt;npx globaly-i18n translate --from en --to de,fr,es&lt;br&gt;
Example output&lt;/p&gt;

&lt;p&gt;locales&lt;br&gt;
 ├ en&lt;br&gt;
 ├ de&lt;br&gt;
 ├ fr&lt;br&gt;
 └ es&lt;br&gt;
🧠 TypeScript Support&lt;br&gt;
globaly-i18n provides type-safe translation keys.&lt;/p&gt;

&lt;p&gt;i18n.t("common:home.title"); // valid&lt;br&gt;
i18n.t("common:home.titel"); // TypeScript error&lt;br&gt;
📚 API&lt;br&gt;
createI18n(options)&lt;br&gt;
Creates a new i18n instance.&lt;/p&gt;

&lt;p&gt;Option  Type    Description&lt;br&gt;
defaultLang string  Default language&lt;br&gt;
fallbackLang    string  Fallback language&lt;br&gt;
namespaces  string[]    Translation namespaces&lt;br&gt;
detectLanguage  boolean Enable language detection&lt;br&gt;
loader  function    Function used to load translations&lt;br&gt;
t(key, options)&lt;br&gt;
i18n.t("common:home.title", { name: "Rounak" });&lt;br&gt;
setLanguage(lang)&lt;br&gt;
await i18n.setLanguage("de");&lt;br&gt;
getLanguage()&lt;br&gt;
i18n.getLanguage();&lt;br&gt;
loadNamespace(namespace)&lt;br&gt;
await i18n.loadNamespace("dashboard");&lt;br&gt;
📚 Examples&lt;br&gt;
Node.js Example&lt;br&gt;
import { createI18n } from "globaly-i18n";&lt;/p&gt;

&lt;p&gt;const i18n = await createI18n({&lt;br&gt;
  defaultLang: "en",&lt;br&gt;
  namespaces: ["common"],&lt;br&gt;
  loader: (lang, ns) =&amp;gt;&lt;br&gt;
    import(&lt;code&gt;./locales/${lang}/${ns}.json&lt;/code&gt;).then((m) =&amp;gt; m.default)&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;console.log(i18n.t("common:home.title"));&lt;br&gt;
React Example&lt;br&gt;
import { useTranslation } from "globaly-i18n/react";&lt;/p&gt;

&lt;p&gt;function Example() {&lt;br&gt;
  const { t } = useTranslation();&lt;/p&gt;

&lt;p&gt;return &lt;/p&gt;
&lt;h1&gt;{t("common:home.title")}&lt;/h1&gt;;&lt;br&gt;
}&lt;br&gt;
Express Example&lt;br&gt;
app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
  res.send(req.t("common:home.title"));&lt;br&gt;
});

&lt;p&gt;globaly-i18n focuses on:&lt;/p&gt;

&lt;p&gt;⚡ lightweight architecture&lt;br&gt;
🧩 framework-agnostic design&lt;br&gt;
🧠 TypeScript developer experience&lt;br&gt;
🚀 simple integration&lt;br&gt;
🔧 flexible usage for both frontend and backend&lt;br&gt;
🧪 Testing&lt;br&gt;
Run tests using&lt;/p&gt;

&lt;p&gt;npm test&lt;br&gt;
The project uses Vitest.&lt;/p&gt;

&lt;p&gt;🔑 Keywords&lt;br&gt;
internationalization • i18n • localization • translation • javascript • typescript • nodejs • express • nestjs • react i18n • nextjs i18n • multilingual • language detection • translation library • frontend i18n • backend i18n&lt;/p&gt;

&lt;p&gt;📄 License&lt;br&gt;
MIT License&lt;/p&gt;

&lt;p&gt;⭐ Support&lt;br&gt;
If you find this library useful:&lt;/p&gt;

&lt;p&gt;⭐ Star the repository&lt;br&gt;
📦 Share it with other developers&lt;br&gt;
🐛 Report issues or suggest improvements&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>opensource</category>
      <category>npm</category>
      <category>react</category>
    </item>
  </channel>
</rss>
