RetroArch/intl
Bernhard Schelling 90d2991ef1 Create per category "By ..." string
This avoids string concatenation that might be undesired by some languages
Rename string "Tags" to "Tag" as it just pertains to a single tag
Remove 3 old strings
2020-08-03 00:16:58 +09:00
..
.gitignore Add steam translations 2020-06-21 19:03:09 +03:00
crowdin_sync.py Add steam translations 2020-06-21 19:03:09 +03:00
crowdin.yaml Google Play translations 2020-06-22 16:19:50 +03:00
fetch_progress.py Synchronize translations 2020-06-04 12:40:25 +03:00
googleplay_ar.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_ast.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_chs.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_cht.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_da.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
googleplay_de.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_el.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_es.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_fa.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_fi.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
googleplay_fr.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_gl.json Fetch translations from Crowdin 2020-07-31 10:50:17 +03:00
googleplay_he.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_it.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_ja.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_ko.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_nl.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_pl.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_pt_br.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_pt_pt.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_ru.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_sk.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
googleplay_sv.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
googleplay_tr.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
googleplay_uk.json Fetch translations from Crowdin 2020-07-31 10:50:17 +03:00
googleplay_us.json Fix JSON syntax 2020-06-22 19:35:14 +03:00
googleplay_vn.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
h2json.py Fetch translations from Crowdin 2020-07-31 10:50:17 +03:00
json2h.py Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_ar.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_ar.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_ast.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_ast.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_chs.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_chs.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_cht.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_cht.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_da.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_de.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_de.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_el.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_el.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_eo.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_eo.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_es.c Updating msg_hash_es.c 2020-06-19 11:24:08 +02:00
msg_hash_es.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_fa.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_fa.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_fi.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_fr.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_fr.h Replace 3 strings with format strings to better accommodate different languages 2020-08-02 04:46:32 +09:00
msg_hash_gl.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_he.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_he.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_it.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_it.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_ja.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_ja.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_ko.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_ko.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_lbl.h Add option to hide 'Explore' tab + menu clean-ups 2020-07-29 13:01:49 +01:00
msg_hash_nl.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_nl.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_pl.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_pl.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_pt_br.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_pt_br.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_pt_pt.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_pt_pt.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_ru.c Add this ifdef around pragma execute-character-set 2019-05-28 13:37:14 +02:00
msg_hash_ru.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_sk.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_sk.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_sv.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
msg_hash_tr.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_tr.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_uk.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_us.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_us.h Create per category "By ..." string 2020-08-03 00:16:58 +09:00
msg_hash_vn.c (menu_dialog) Cleanups 2020-06-12 08:06:30 +02:00
msg_hash_vn.h Remove _LANG_ strings that should not be translated 2020-08-01 17:50:52 +03:00
progress.h Fetch translations from Crowdin 2020-08-01 17:31:28 +03:00
README.md Synchronize translations 2020-06-04 12:40:25 +03:00
steam_ar.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_ast.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_chs.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
steam_cht.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_da.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
steam_de.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_el.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_es.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
steam_fa.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_fi.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
steam_fr.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_gl.json Fetch translations from Crowdin 2020-07-31 10:50:17 +03:00
steam_he.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_it.json Fetch translations from Crowdin 2020-07-21 17:56:31 +03:00
steam_ja.json Fetch translations from Crowdin 2020-08-01 17:31:28 +03:00
steam_ko.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_nl.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_pl.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_pt_br.json Fetch translations from Crowdin 2020-07-21 17:56:31 +03:00
steam_pt_pt.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_ru.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_sk.json Crowdin synchronization 2020-06-30 15:20:30 +03:00
steam_sv.json Fetch translations from Crowdin 2020-07-14 12:03:29 +03:00
steam_tr.json Fetch translations from Crowdin 2020-07-21 17:56:31 +03:00
steam_uk.json Fetch translations from Crowdin 2020-07-31 10:50:17 +03:00
steam_us.json Update steam_us.json 2020-06-22 23:20:29 +03:00
steam_vn.json Crowdin synchronization 2020-06-30 15:20:30 +03:00

Internationalization Workflow

For Translators

Use Crowdin

  1. Register user account at https://crowdin.com/
  2. Join the project https://crowdin.com/project/retroarch/
  3. Select your language to translate
  4. Click the file name msg_hash_us.json and the editor should open
  5. Select an untranslated (red) string from the list
  6. Type translation and save
  7. Next string...

Links:

Request New Language

You can open a new issue and @guoyunhe to add new language.

For Maintainers

Set Up

Install Java, Python3 and Git

Synchronize

cd intl
python3 crowin_sync.py

Manage Crowdin Project

  1. You need to be project admin. Please contact @guoyunhe or @twinaphex
  2. Go to https://crowdin.com/project/retroarch/settings
  3. You can manage languages, members etc. here

Links:

Message File Format

  1. Must NOT contain #else
  2. Must NOT have multiple-line string syntax
    // bad
    MSG_HASH(
      MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE,
      "Compete to earn custom-made achievements in classic games.\n"
      "For more information, visit http://retroachievements.org"
      )
    // good
    MSG_HASH(
      MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE,
      "Compete to earn custom-made achievements in classic games.\nFor more information, visit http://retroachievements.org"
      )
    
  3. Must NOT contain lowercase letters in key name
    // bad (x)
    MSG_HASH(
      MENU_ENUM_LABEL_VALUE_CTR_VIDEO_MODE_2D_800x240,
      "2D (High Resolution)"
      )
    // good (X)
    MSG_HASH(
      MENU_ENUM_LABEL_VALUE_CTR_VIDEO_MODE_2D_800X240,
      "2D (High Resolution)"
      )