Streamlining Localization in a Monorepo using i18n-js

Prajwal T S
Tech at ZET
Published in
2 min readAug 28, 2023

Introduction

In the world of app development, catering to various regions and languages is essential for reaching a global user base. This is where localization comes into play, allowing apps to adapt to different locales. One effective tool in the JavaScript realm for achieving this is i18n-js. In this article, we’ll delve into how to harness the power of i18n-js within a monorepo setup to facilitate localization across multiple apps.

Getting Started with i18n-js

To begin, it’s crucial to grasp the fundamentals of i18n-js. This library’s core component is the I18n class, which handles translations. The following code snippet demonstrates how to instantiate the I18n class with translation objects for two locales, English and Brazilian Portuguese.

import { I18n } from "i18n-js";

const i18n = new I18n({
en: {
hello: "Hi!",
},
"pt-BR": {
hello: "Olá!",
},
});

Monorepo Challenges and Solution

Monorepos are a common approach when developing multiple apps that share common packages. However, when dealing with localization in such a setup, challenges can arise regarding maintaining content specific to each package. To address this, consider creating a dedicated package for localization, named @localization, which will house a unified localization instance

// Inside the @localization package
export const i18n = new I18n();

Within each individual package, you can then add package-specific localization content. For example:

import { i18n } from '@localization';

const localizationObj = {
en,
"pt-BR",
}
i18n.store(localizationObj);

Here, en and pt-BR represent content tailored for the respective package's audience.

Implementation Tips

When integrating i18n-js into your monorepo, keep these implementation tips in mind:

  1. Centralized Localization: By utilizing the @localization package to manage localization, you ensure a consistent approach across all packages.
  2. Package-Specific Content: The ability to store package-specific content within the @localization package simplifies content management and reduces duplication.
  3. Import Considerations: Remember to import the i18n instance from @localization instead of directly from i18n-js within your project.

Conclusion

Localization is pivotal for making apps accessible and user-friendly across diverse linguistic backgrounds. With i18n-js and a well-structured monorepo setup, you can efficiently manage localization efforts for multiple apps. By creating a centralized localization package and utilizing package-specific content, you strike a balance between shared resources and customized localization, streamlining the development process and ensuring a consistent user experience.

Thank you for reading! We hope this article provides valuable insights into localization using i18n-js within a monorepo context. Feel free to share your thoughts and experiences in the comments below.

--

--

Prajwal T S
Tech at ZET

Senior React Native Engineer at Zet (previously OneCode)