DEV Community

Cover image for i18n management made easy
Tails128
Tails128

Posted on

i18n management made easy

"How do we handle the localization? Do we have a repo, do we use any service? Do I need to contact someone?"

"We have a json which we edit"

Did this ever happen to you? If it did, I may have the solution for you!

I've recently stumbled upon the classical "we kinda have localization but we kinda don't" issue and I've decided to make a micro-library so that -at least- we can collaborate on Google Sheets. Give it a look!

It's very simple to use (if you think it's not please give me a feedback and I'll do my best to make it more intuitive!) and it basically just requires your API keys or your service account in case you're working within a company.

Configuring the Google Sheets doc
Pretty straightforward:

first row:

  • The first cell is 'locaKeys', which will just hold the translation keys
  • The other cells contain the localization name (en-uk, de-de, etc...)

other rows:

  • the first cell contains the key for the translation: univoque and i suggest no spaces and all uppercase, to make it easy to spot if there's somthing wrong with the translations.
  • the other cells contain the value for the corresponding language

here's an example:
Image description

Use it freely via:

npm i -D loca-mapper

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (2)

Collapse
 
anastawfik profile image
Anas Tawfik

lovely idea, have you considered other cases like variables or trnslations based on a count?

Collapse
 
tails128 profile image
Tails128

@anastawfeek Yup!

Usually in that case what I do is to place a placeholder (e.g.: {{n}}) and replace via code! This would have to be duplicated in every language as it may of course lie in different points of the sentence, eg:

  • IT: "Oggi è il {{0}} giorno senza incidenti!" (4th word)
  • EN: "Today's the {{0}} day without accidents" (3rd word)

The reason for the number is that in cases like these you may want to mass replace a certain subject:

"My {{0}} is painted {{1}} because the color {{1}} is cool! Oh and my {{0}} is also cool!"

So what you may want is to have an helper function in which you pass your replacements, .foreach them and apply the translation via .replaceAll!

The reason I did not include such system in the library is that this aims to be just a document-to-ts (or js) transpiler, as for the execution I prefer to let the user use the i18n library they prefer!

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay