Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
159 lines (110 sloc) 6.46 KB

Contributing to electron-i18n

๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡น๐Ÿ‡ผ ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‡ฐ๐Ÿ‡ท ๐Ÿ‡ฏ๐Ÿ‡ต ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡น๐Ÿ‡ญ ๐Ÿ‡ณ๐Ÿ‡ฑ ๐Ÿ‡น๐Ÿ‡ท ๐Ÿ‡ฎ๐Ÿ‡ฉ ๐Ÿ‡บ๐Ÿ‡ฆ ๐Ÿ‡จ๐Ÿ‡ฟ ๐Ÿ‡ฎ๐Ÿ‡น

๐Ÿ’š First off, thanks for taking the time to contribute! ๐Ÿ’š

Anyone is welcome to join in the effort, regardless of technical experience or familiarity with the Electron project.

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to

The following is a set of guidelines for contributing to Electron's localization effort. These are just guidelines, not rules, so use your best judgment and feel free to propose changes to this document in a pull request.


Here are some guidelines to keep in mind as a translator:

  • Don't open pull requests to translate Electron; instead, do all translations on Crowdin.
  • Do not translate JavaScript keywords like String, Event, Array, Class, etc.
  • Do not translate Electron classes, method names, event names, etc.
  • If you find an error in the source English docs, open a pull request on the electron/electron repository.
  • If you've been working as a translator and want to have more influence over the approved translations in your language, let us know and we'll make you a proofreader.

Electron's localization effort uses Crowdin, an awesome platform for collaborative translation. Changes on Crowdin are automatically turned into pull requests on this GitHub repository.

To get started, visit and log in with your GitHub account.


If you're using a platform like and would like to be promoted to proofreader status on the Electron project, please translate 1,000 words or more before applying. When contacting us, please include a link to your existing translations on the project.


There are two different "glossaries" in the Electron world:

1. The Electron Glossary

The Electron Glossary is a hand-written markdown file. It defines terms that are common in Electron development, like "ASAR", "IPC", "V8", etc. To add entries to it, open a pull request on the electron/electron repository.

2. The Crowdin Glossary

The Crowdin Glossary is programatically generated. It defines terms to give translators context when translating in the Crowdin UI, and to help avoid translations of strings like Array and that should remain in their original "English" form. It includes entries for JavaScript builtins, Electron API names, method names, event names, etc. To modify this glossary, see script/upload-crowdin-glossary.js

Developing electron-i18n

The rest of this document describes how this repo is structured, how it syncs with Crowdin, how to make technical changes, and how to configure the proofreader role properly.

If you're just here to translate, you probably don't need to read this.

Environment Setup

To fetch the latest docs, you need a GitHub token. Visit to create one. No special scopes needed.

cp .env.example .env

Then edit .env and add your token.

npm run build

Adding a Language

Occasionally people ask for new languages to be enabled for translation. The process for this is simple:

  1. Visit
  2. Click the [Target Languages] button.
  3. Choose your language(s) you wish to add (or remove):

That's it! The Crowdin stats and language list in the README will be updated automatically when npm run build is run.

Source Content

Electron's documentation and website are authored in English.

The source content in this repo is collected from a few places:

Here's the directory structure:

โ””โ”€โ”€ en-US
    โ”œโ”€โ”€ api
    โ”œโ”€โ”€ docs
    โ””โ”€โ”€ website

Translated Content

The Crowdin project is configured to automatically pull the latest English content out of this repo and push the translated content back into this repo.

Translations are added under a directory named after the locale. The contents of these files differ by language, but the directory structure and filenames for each locale is always identical.

โ”œโ”€โ”€ en-US
โ”‚ย ย  โ”œโ”€โ”€ api
โ”‚ย ย  โ”œโ”€โ”€ docs
โ”‚ย ย  โ””โ”€โ”€ website
โ”œโ”€โ”€ es-ES
โ”‚ย ย  โ”œโ”€โ”€ api
โ”‚ย ย  โ”œโ”€โ”€ docs
โ”‚ย ย  โ””โ”€โ”€ website
โ”œโ”€โ”€ pt-BR
โ”‚ย ย  โ”œโ”€โ”€ api
โ”‚ย ย  โ”œโ”€โ”€ docs
โ”‚ย ย  โ””โ”€โ”€ website
โ””โ”€โ”€ zh-TW
    โ”œโ”€โ”€ api
    โ”œโ”€โ”€ docs
    โ””โ”€โ”€ website

To get a sense of how content is transformed, see crowdin.yml

Limited Proofreader Role

There are two options to configure the proofreader role on Crowdin. (You can change the role of translators in Translators tab on the project setting)


  • General proofreader: translate, approve strings for all languages.
  • The proofreader for languages: give a proofreader role for specific language.

When you choose Proofreader on the setting for the specific user, it will show up as the proofreader on the project role. On the other hand, limited proofreader role will appear as the translator on the screen. To set up a proofreader role for specific language, you need to select P on the setting screen(P โ€“ Proofreader, T โ€“ Translator). You can see more info about the project role on crowdin:

Generally, a proofreader can handle only one language. So, we recommend limited proofreader role per language.

You canโ€™t perform that action at this time.