A cross platform front-end GUI of the popular youtube-dl written in wxPython.

View project on GitHub

Localization Guide - Transifex


By sending a translation you agree to publish your work under the UNLICENSE license!




  • A modern browser
  • A Transifex account, sign-up


  • If your language is currently not supported you can make a request for new language support.
  • When you request support for a new language, the language code should be in the format en_US and NOT just en.
  • Variables such as {0}, {1}, {dir}, {0:.1f}, etc should be copied exactly as they appear in the translation box.
  • Variables represent a word that will be replaced by real data (name, number, etc).
  • Variables can be moved around the string in order to make the most logical translation.
  • When new strings for translation are available you will get inbox notifications.
  • For help you can leave a comment with @username or send a direct message to one of the maintainers.
  • Maintainer usernames are: oleksis

Gettings Started

  1. Sign-in to Transifex
  2. Join a translation team
  3. Start translating using the web editor





  • The instructions below assume basic knowledge of the command line (OS independent).
  • The language code being used should be in the format <ISO 639-1>_<ISO 3166-1 alpha-2> (e.g. en_US).
  • You can locally edit the translation file (PO) by opening it using a simple editor and editing the msgstr fields.
  • You can find the translation file (PO) after downloading it under the youtube_dl_gui/locale/<LANG_CODE>/LC_MESSAGES/ directory.
  • In order to get the translations from Transifex your account needs permissions to access the project.

Getting Started

  1. Open a terminal
  2. Test that Git works: git --version
  3. Test that Transifex CLI client works: tx --version
  4. Clone upstream using Git:
      git clone
  5. Change to project directory: cd yt-dlg
  6. Pull the translation you want to test from Transifex (Auth needed):
      tx pull --force -l <LANGUAGE_CODE_HERE>
  7. Make the language appear under Options>General tab (only for new languages):
    1. Open the under the youtube_dl_gui directory
    2. Search for the LOCALE_NAMES attribute
    3. Add the new language to it (in our example "el_GR", _("Greek"),)
    4. Don’t forget to save your changes
  self.LOCALE_NAMES = {
      "el_GR", _("Greek"),  # language_code, language_name
      "ar_SA", _("Arabic"),
      "cs_CZ", _("Czech"),
  1. Build the binary translation files (MO):
      python -m pip install polib
      python build_trans
  2. Test the translations by running youtube-dl-gui and selecting your language:
      python -m youtube_dl_gui
  3. Make changes locally in your translation file (PO) and go back to step 8 to test them





  • Read Testers notes first.
  • Binary translation files (MO) are ignored and you should not push them upstream.
  • Don’t forget to update the ChangeLog after adding a new language.
  • You can gather all extra requirements below using pip.

Getting Started

Add a new language under Options > General tab

  1. Open the file
  2. Search for the LOCALE_NAMES attribute
  3. Add the new language to it and make sure to sort alphabetically based on the language name
  self.LOCALE_NAMES = {
    "en_US", "_(English"),
    "fr_FR", "_(French"),
    "el_GR", "_(Greek"),
    "it_IT", "_(Italian"),

Build the binary translation files (MO)

  1. Just run the setup script:
    python -m pip install polib
    python build_trans

Automatically check translations using Google translate (Requires: polib & doodle_translate)

  1. Change directory to devscripts
  2. Run the check script:

Get translations from Transifex (Requires: Permissions to access project)

  • Pull everything: tx pull -a
  • Pull reviewed: tx pull --mode reviewed -a
  • Pull everything (force): tx pull -a -f
  • Pull specific language: tx pull -l <LANGUAGE_CODE_HERE>
  • Pull only completed translations (100%): tx pull -a --minimum-perc=100

Update source strings (Only Maintainers, Requires: python-gettext)

  1. Change directory to devscripts
  2. Run the script (also builds MO files)
  3. Push changes to Transifex: tx push --source --translation

Add support for new language locally (ONLY TESTING)

  1. Change directory to devscripts
  2. Run the new locale script: python <LANGUAGE_CODE_HERE>



  • Translations unnecessarily having country codes?: Some languages have dialects in different countries. For example, de_AT is used for Austria, and pt_BR for Brazil. The country code serves to distinguish the dialects. Also, using a single format (ll_CC) instead of multiple for the locale name simplifies some implementation specific things.