JSON (JavaScript Object Notation) is a lightweight data-interchange file format. It has become increasingly popular in the localization industry due to its easy-to-read and write structure, its ability to represent a wide range of data types, and its support for Unicode.
Storing localization data in JSON files can be done in various ways. The most straightforward way is using a Flat JSON (also known as Key-Value JSON) structure. Here, the localization data is represented as a collection of key-value pairs within the JSON file, where each key represents a message identifier and the value a corresponding translation.
{
"common.ok": "OK",
"common.next": "Next",
"common.previous": "Previous",
"page.home.title": "Welcome",
"page.home.subtitle": "Glad to see you again"
}
Many popular localization libraries have adopted flat JSON as their preferred method for storing localization data. Below you can find examples of some well-known localization libraries that use such data structure.
Below, you can find a sample JSON file for the react-intl localization library.
{
"common.ok": "OK",
"common.next": "Next",
"common.previous": "Previous",
"common.device": "{device, select, mobile {Mobile} desktop {Desktop} other {Other}}",
"common.title-name": "{gender, select, male {Mr. {name}} female {Ms. {name}} other {{name}}}",
"common.formatted-date": "{currDate, date, medium}",
"common.formatted-number": "{num, number, ::compact-short}",
"common.items-counter": "{count, plural, one {{count} item} other {{count} items}}",
"page.home.title": "Welcome",
"page.home.subtitle": "Glad to see you {name}"
}
The react-intl
library supports ICU Message syntax and offers a vast range of formatting options.
Below, you can find a sample JSON file for the vue-intl localization library.
{
"common.ok": "OK",
"common.next": "Next",
"common.previous": "Previous",
"common.device": "{device, select, mobile {Mobile} desktop {Desktop} other {Other}}",
"common.title-name": "{gender, select, male {Mr. {name}} female {Ms. {name}} other {{name}}}",
"common.formatted-date": "{currDate, date, medium}",
"common.formatted-number": "{num, number, ::compact-short}",
"common.items-counter": "{count, plural, one {{count} item} other {{count} items}}",
"page.home.title": "Welcome",
"page.home.subtitle": "Glad to see you {name}"
}
The vue-intl
library supports ICU Message syntax and offers a vast range of formatting options.
Flat JSON files provide a simple and easy-to-manage structure for storing and updating localization messages. They can accommodate more advanced message types, such as gender, select, and plural messages, while still maintaining a flat structure.
Flat JSON files used in software localization are regular JSON files. As such, they can be easily validated using various tools that are available on the internet, in code editors, or in specialized localization tools. The most common errors are missing commas and unclosed quotation marks.
Handling placeholders in flat JSON localization files can depend on the localization libraries being used, as different libraries may have their own syntax and conventions for handling placeholders. However, a widely supported method is to use the ICU Message syntax, which allows placeholders to be included in messages using a simple syntax.
Handling pluralization and gender in flat JSON localization files can depend on the localization libraries being used and the way they handle these features. However, a common way to handle these advanced message types is by using the ICU Message syntax, which is supported by many localization libraries.
When managing multiple flat JSON localization files in a project, it is important to organize them in a way that makes them easy to manage and maintain. One common practice is to keep all localization files in a single folder, such as a lang
folder. Each file in the folder can correspond to a specific language, and contain all of the translations for that language. By using a consistent naming convention and logically organizing the files, it becomes easier to add, update, or remove translations as needed throughout the project.
project-name
|-- lang
| |-- ar.json
| |-- en.json
| |-- es-MX.json
|-- src
|-- ...
Previous: Supported file formats
Read next: React internationalization (i18n) tutorial
Tired of manually editing translation files?
Our platform streamlines software localization for you.