Index: binaries/data/mods/public/gui/credits/texts/translators.json =================================================================== --- binaries/data/mods/public/gui/credits/texts/translators.json +++ binaries/data/mods/public/gui/credits/texts/translators.json @@ -1,4 +1,5 @@ { + "Title": "Translators", "Content": [ { "List": [ @@ -53,7 +54,16 @@ "name": "Radoslav Mitev" }, { + "name": "Yordan Grigorov (yoreei)" + }, + { + "name": "\u041a\u0440\u0430\u0441\u0438\u043c\u0438\u0440 \u041c\u0438\u043a\u043e\u0432" + }, + { "name": "\u041b\u044e\u0431\u043e\u043c\u0438\u0440 \u0412\u0430\u0441\u0438\u043b\u0435\u0432" + }, + { + "name": "\u0421\u0438\u043c\u043e\u043d\u044a\u2013\u0421\u0435\u0432\u0430\u0440\u044a \u0421. \u0411\u043e\u043b\u043e\u043a\u0430\u043d\u043e\u0432\u044a" } ], "LangName": "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438" @@ -64,9 +74,15 @@ "name": "Adri\u00e0 Palouzi\u00e9" }, { + "name": "Albert F." + }, + { "name": "Alex Ruiz Garc\u00eda" }, { + "name": "Ambar Gorretas-Aymerich" + }, + { "name": "Arnau Barrabeig" }, { @@ -106,6 +122,9 @@ "name": "Jorge Romero" }, { + "name": "Josep A.P" + }, + { "name": "josu torres" }, { @@ -121,7 +140,7 @@ "name": "Klan Ruiz Martin" }, { - "name": "marc kjahgrt ksrgha" + "name": "Marc Masip Compte" }, { "name": "Marc Mir\u00f3" @@ -130,6 +149,9 @@ "name": "Marco tom Suden" }, { + "name": "Maria Acero-Allo" + }, + { "name": "Miguel Molina" }, { @@ -156,6 +178,9 @@ { "List": [ { + "name": "Ales Novak" + }, + { "name": "Ardenlax" }, { @@ -183,9 +208,6 @@ "name": "ike20" }, { - "name": "J D" - }, - { "name": "Jakub Jelen" }, { @@ -234,6 +256,9 @@ "name": "Ond\u0159ej \u0160tolpa" }, { + "name": "Pavel Borecki" + }, + { "name": "Pavel \u0160indel\u00e1\u0159" }, { @@ -284,6 +309,9 @@ { "List": [ { + "name": "... ..." + }, + { "name": "A L" }, { @@ -308,6 +336,9 @@ "name": "azrdev" }, { + "name": "ben kov" + }, + { "name": "Benny" }, { @@ -320,15 +351,15 @@ "name": "cledge" }, { - "name": "d00eb365ebaf2be82942fe248b3f88f3" - }, - { "name": "David Lucks" }, { "name": "Dominik" }, { + "name": "duichwer" + }, + { "name": "eclipse" }, { @@ -347,12 +378,18 @@ "name": "Fesa" }, { + "name": "Firstname Lastname" + }, + { "name": "Flavio Piagno" }, { "name": "Florian Graefe" }, { + "name": "Glorfindel Of Gondolin" + }, + { "name": "Hedaja" }, { @@ -371,9 +408,15 @@ "name": "Jakob Gahde" }, { + "name": "Jakob Raidt" + }, + { "name": "James Jakubczyk" }, { + "name": "JeHathor" + }, + { "name": "Johann Hackl" }, { @@ -389,6 +432,9 @@ "name": "jonnius" }, { + "name": "Kjell" + }, + { "name": "Larson M\u00e4rz" }, { @@ -398,10 +444,13 @@ "name": "leper" }, { + "name": "Luis W." + }, + { "name": "Lukas Gienapp" }, { - "name": "Lukas Kruse" + "name": "Lukas Heiniger" }, { "name": "Lukas N" @@ -410,6 +459,9 @@ "name": "Luksoft" }, { + "name": "M C" + }, + { "name": "Mansent" }, { @@ -434,6 +486,9 @@ "name": "MartinusMagnus" }, { + "name": "mathias.n.graf" + }, + { "name": "Matthias Kerk" }, { @@ -452,9 +507,15 @@ "name": "Meinrad M\u00fcller" }, { + "name": "Michael Hecht" + }, + { "name": "Michael Vetter" }, { + "name": "MineplayerHD Youtube" + }, + { "name": "nautilusx" }, { @@ -494,9 +555,6 @@ "name": "Peter Gasse" }, { - "name": "Philipp Mysz" - }, - { "name": "pilino1234" }, { @@ -563,7 +621,7 @@ "name": "these" }, { - "name": "Thomas Steinert" + "name": "Thomas Schiele" }, { "name": "Till Wendland" @@ -673,6 +731,9 @@ "name": "Ilias Giannaros" }, { + "name": "Jim Chr" + }, + { "name": "Lampros Lampreas" }, { @@ -691,6 +752,9 @@ "name": "Marinus Savoritias" }, { + "name": "Markos G." + }, + { "name": "MasterWord" }, { @@ -706,6 +770,9 @@ "name": "Natalia V" }, { + "name": "Nea Retrogamer (nearetrogamer)" + }, + { "name": "Nianios Romanos" }, { @@ -736,12 +803,18 @@ "name": "Sotiris K" }, { + "name": "Stephanos C. Siopoulos" + }, + { "name": "Steven Gikas" }, { "name": "subdee" }, { + "name": "Tasos Grv." + }, + { "name": "Thanasis Mousiolis" }, { @@ -851,15 +924,27 @@ "name": "Albert" }, { + "name": "Alberto Verde" + }, + { + "name": "Alejandro Avellaneda" + }, + { "name": "Alex Rodrigo" }, { "name": "Alexis Arcos" }, { + "name": "Alfredo C" + }, + { "name": "Ancel0" }, { + "name": "Andr\u00e9s N\u00fa\u00f1ez" + }, + { "name": "Antonio Mart\u00edn" }, { @@ -914,9 +999,6 @@ "name": "Eduardo Jaramillo" }, { - "name": "Efra\u00edn Manzano" - }, - { "name": "Emilio Romero" }, { @@ -929,9 +1011,15 @@ "name": "espanengo" }, { + "name": "Esteban A. Mina" + }, + { "name": "Esteban de Jesus Rodriguez Bujaidar" }, { + "name": "Fahed Stanic' Loayza" + }, + { "name": "fca1970" }, { @@ -977,6 +1065,9 @@ "name": "Jesus A" }, { + "name": "Jesus Covo" + }, + { "name": "Jesus Tamarit" }, { @@ -998,9 +1089,21 @@ "name": "Joaqu\u00edn" }, { + "name": "Jose Manuel" + }, + { + "name": "Jose Raul Cruz R." + }, + { "name": "Jos\u00e9 Javier Dom\u00ednguez Reina" }, { + "name": "Juan Carlos Gonzalez" + }, + { + "name": "Juan Carlos| Cervantes NG" + }, + { "name": "juanda097" }, { @@ -1025,6 +1128,9 @@ "name": "matiasng37" }, { + "name": "Mauricio Luque" + }, + { "name": "memmaker650" }, { @@ -1055,6 +1161,9 @@ "name": "OJankano" }, { + "name": "Oriol Duarri" + }, + { "name": "Pablo Rodr\u00edguez" }, { @@ -1067,6 +1176,9 @@ "name": "Pedro Luis" }, { + "name": "peter Galleta" + }, + { "name": "Pretorg" }, { @@ -1085,6 +1197,12 @@ "name": "Ramiro Garay" }, { + "name": "Ra\u00fal Fdez." + }, + { + "name": "Rodrigo Vegas S\u00e1nchez-Ferrero" + }, + { "name": "Roger Vasquez" }, { @@ -1094,6 +1212,12 @@ "name": "Sander Deryckere" }, { + "name": "Santiago Andres Ahumada ballen" + }, + { + "name": "Saul Axel Mart\u00ednez Ortiz" + }, + { "name": "Sebastian David Tamayo" }, { @@ -1115,6 +1239,9 @@ "name": "The_Gipsy" }, { + "name": "Tobal l\u00f3pez silla" + }, + { "name": "Tomato" }, { @@ -1125,6 +1252,9 @@ }, { "name": "wsnlndr lndr" + }, + { + "name": "\u00c1lvaro Mond\u00e9jar Rubio" } ], "LangName": "Espa\u00f1ol" @@ -1132,6 +1262,9 @@ { "List": [ { + "name": "Gontzal M. Pujana" + }, + { "name": "Ibai Oihanguren Sala" }, { @@ -1227,6 +1360,9 @@ "name": "Const Ance" }, { + "name": "curieux de l'\u00eatre" + }, + { "name": "Cyril" }, { @@ -1245,6 +1381,9 @@ "name": "ernest olory" }, { + "name": "Est\u00e9bastien Robespi" + }, + { "name": "Florent Fraysse" }, { @@ -1257,6 +1396,9 @@ "name": "Fran\u00e7ois Poirotte" }, { + "name": "Glorfindel Of Gondolin" + }, + { "name": "gorius" }, { @@ -1314,6 +1456,9 @@ "name": "Laetitia Atlan" }, { + "name": "lelapin ." + }, + { "name": "lemiaou" }, { @@ -1380,6 +1525,9 @@ "name": "Nikolaos Vidalis" }, { + "name": "Nolan Dartois" + }, + { "name": "Oimat" }, { @@ -1407,6 +1555,9 @@ "name": "PRIME Gildas" }, { + "name": "Pseudo4578" + }, + { "name": "Requin" }, { @@ -1422,10 +1573,10 @@ "name": "Ross1396" }, { - "name": "R\u00e9mi Letot" + "name": "R\u00e9mi Verschelde" }, { - "name": "R\u00e9mi Verschelde" + "name": "R\u00e9my J." }, { "name": "Sacha Vrand" @@ -1470,6 +1621,12 @@ "name": "Thierry Vignaud" }, { + "name": "Tiber7 - Danilo B. Guttadauria" + }, + { + "name": "Tim Jayet" + }, + { "name": "Timothee KNOBLOCH" }, { @@ -1528,6 +1685,9 @@ "name": "Adrian Chaves" }, { + "name": "Adri\u00e1n Chaves (Gallaecio)" + }, + { "name": "Adri\u00e1n Chaves Fern\u00e1ndez" }, { @@ -1620,6 +1780,9 @@ "name": "M\u00e1ty\u00e1s Demeter" }, { + "name": "M\u00f3r K\u00e1rp\u00e1ty" + }, + { "name": "Nagy Andr\u00e1s" }, { @@ -1644,9 +1807,6 @@ "name": "Stew Den" }, { - "name": "S\u00e1ndor Uszkai" - }, - { "name": "Tam\u00e1s Zolnai" }, { @@ -1685,12 +1845,18 @@ "name": "Dedi Wahyudi" }, { + "name": "Dhemas E. Rilian N." + }, + { "name": "Dito Kurnia Pratama" }, { "name": "Eggar Tirtayasa" }, { + "name": "febri afud" + }, + { "name": "Fqn Kdgzd" }, { @@ -1718,6 +1884,9 @@ "name": "Kholil Pasaribu" }, { + "name": "La Ode Muh. Fadlun Akbar" + }, + { "name": "Muhammad Furqon Abrori" }, { @@ -1759,6 +1928,9 @@ "name": "Antonio Buonomo" }, { + "name": "Birkebeiner ." + }, + { "name": "Camilo Zuluaga" }, { @@ -1795,6 +1967,9 @@ "name": "Davide Redana" }, { + "name": "Elissa Dell'Aera" + }, + { "name": "Emanuele Ricci" }, { @@ -1810,6 +1985,9 @@ "name": "Fabrizio Morotti" }, { + "name": "Federico D'Alessio" + }, + { "name": "francescogramazio" }, { @@ -1822,6 +2000,9 @@ "name": "Giulio Sanzone" }, { + "name": "Italang" + }, + { "name": "j4nsen" }, { @@ -1918,10 +2099,10 @@ "name": "Simone Bondi" }, { - "name": "slave Gjorgjievski" + "name": "Slave Gjorgjievski" }, { - "name": "Slave Gjorgjievski" + "name": "slave Gjorgjievski" }, { "name": "tema" @@ -1930,6 +2111,12 @@ "name": "The_Blinded" }, { + "name": "Thomas Zilio" + }, + { + "name": "Tiber7 - Danilo B. Guttadauria" + }, + { "name": "Vaschetto Marco" }, { @@ -1951,6 +2138,9 @@ }, { "name": "Nicolas Auvray" + }, + { + "name": "Timothy \u201cGlash\u201d Wong" } ], "LangName": "Bahasa Melayu" @@ -1982,7 +2172,10 @@ "name": "Johan Reitan" }, { - "name": "joharei" + "name": "Kalmon Habi" + }, + { + "name": "Kurt-H\u00e5kon Eilertsen" }, { "name": "Lene Raastad" @@ -2014,19 +2207,25 @@ { "List": [ { - "name": "477f07d437f0da0e33ec4ecd7b8e2b62" + "name": "Andreas I" }, { "name": "Anique van Berne" }, { + "name": "annihilator solar" + }, + { + "name": "Avinash Gowricharn" + }, + { "name": "Bart Groeneveld" }, { "name": "Bart R" }, { - "name": "bb jansen" + "name": "bb" }, { "name": "bilsimon" @@ -2056,6 +2255,9 @@ "name": "Dig Dug" }, { + "name": "echotangoecho ." + }, + { "name": "Ellen Roels" }, { @@ -2065,6 +2267,9 @@ "name": "Floretta" }, { + "name": "Freagarach ." + }, + { "name": "haldir" }, { @@ -2074,6 +2279,9 @@ "name": "Ismail Sahin" }, { + "name": "Jan Jasper de Kroon" + }, + { "name": "Jana Valcke" }, { @@ -2086,6 +2294,9 @@ "name": "LTom" }, { + "name": "Lucas Verschragen" + }, + { "name": "luuk2305" }, { @@ -2098,12 +2309,6 @@ "name": "Mark Lemmens" }, { - "name": "Mark Martines" - }, - { - "name": "Martijn De Jongh" - }, - { "name": "mat jojo" }, { @@ -2143,6 +2348,9 @@ "name": "Pieter Eikelboom" }, { + "name": "Reginas -" + }, + { "name": "Reinout De Geest" }, { @@ -2188,6 +2396,9 @@ "name": "Tim G" }, { + "name": "Timo Tijhof" + }, + { "name": "tnt" }, { @@ -2217,6 +2428,15 @@ { "List": [ { + "name": "9Cube-dpustula" + }, + { + "name": "Adam Kol" + }, + { + "name": "Adam Rabiega" + }, + { "name": "Adam Stachowicz" }, { @@ -2307,12 +2527,18 @@ "name": "Jakub Kaszycki" }, { + "name": "Jakub Rosi\u0144ski" + }, + { "name": "Jakub Szyd\u0142o" }, { "name": "Jarek Kokoci\u0144ski" }, { + "name": "Kamil Gawelek" + }, + { "name": "Kamil Grela" }, { @@ -2457,9 +2683,6 @@ "name": "q" }, { - "name": "rabusek" - }, - { "name": "Rafa\u0142" }, { @@ -2469,9 +2692,6 @@ "name": "Robert Wolniak" }, { - "name": "RosiakPL" - }, - { "name": "slodki12341" }, { @@ -2481,6 +2701,9 @@ "name": "Tomasz Pud\u0142o" }, { + "name": "tombox" + }, + { "name": "tomekpg" }, { @@ -2507,6 +2730,9 @@ "name": "Adriano Ramos" }, { + "name": "Alessandro Nunes" + }, + { "name": "Alison Machado" }, { @@ -2546,16 +2772,19 @@ "name": "Cleiton Nunes" }, { + "name": "Cristiano M Magalhaes" + }, + { "name": "Dalcio Mar\u00e7al" }, { "name": "Danlorenzi" }, { - "name": "dddb155916b6708524139dbbf813fa7c" + "name": "dexmendonca" }, { - "name": "dexmendonca" + "name": "Diana K. Cury" }, { "name": "Elisa Silva Ramos" @@ -2612,6 +2841,9 @@ "name": "Igor Aleixo" }, { + "name": "J. P. Lacerda" + }, + { "name": "Jefferson Gomes" }, { @@ -2621,10 +2853,10 @@ "name": "Jorno Jornade" }, { - "name": "Jose Bentivi" + "name": "jose" }, { - "name": "Jose Victor" + "name": "Jose Bentivi" }, { "name": "Jos\u00e9 Hild\u00eb" @@ -2663,6 +2895,9 @@ "name": "Lucas Zenaro Pereira Lima" }, { + "name": "mac.edgar" + }, + { "name": "magalidade" }, { @@ -2699,6 +2934,9 @@ "name": "Monstro Socialista" }, { + "name": "nerijunior" + }, + { "name": "Nicolas Auvray" }, { @@ -2770,6 +3008,9 @@ "name": "Alexandre Arranhado" }, { + "name": "alfalb.as" + }, + { "name": "Andr\u00e9 Gomes" }, { @@ -2901,12 +3142,18 @@ "name": "Alexey Solodovnikov" }, { + "name": "Alp Arslan" + }, + { "name": "Andrew" }, { "name": "Anton Khabarov" }, { + "name": "anton.tsyganenko" + }, + { "name": "Armen Dzhagaryan" }, { @@ -2982,6 +3229,9 @@ "name": "John Smith" }, { + "name": "Kirill Ptukha" + }, + { "name": "Konstantin" }, { @@ -3021,9 +3271,6 @@ "name": "Oleg Ekhlakov" }, { - "name": "Olli Tviks" - }, - { "name": "Pavel Kyzmin" }, { @@ -3033,6 +3280,9 @@ "name": "Prince Moth" }, { + "name": "Roman M. Yagodin" + }, + { "name": "Rudeboy1988" }, { @@ -3048,6 +3298,9 @@ "name": "Stanislav G" }, { + "name": "under.quol" + }, + { "name": "utyf05" }, { @@ -3155,6 +3408,9 @@ { "List": [ { + "name": "Adam Furman" + }, + { "name": "Adri\u00e1n Chaves Fern\u00e1ndez" }, { @@ -3203,13 +3459,25 @@ "name": "Patrik Loch" }, { + "name": "Peto (wt-ts)" + }, + { "name": "Radovan Stancel" }, { + "name": "Roman 'Kaktuxista' Benji" + }, + { "name": "Roman Be\u0148o" }, { "name": "SuroX" + }, + { + "name": "T Hanax" + }, + { + "name": "Tom Hanax" } ], "LangName": "Sloven\u010dina" @@ -3238,6 +3506,9 @@ "name": "Felix H\u00e4uslmann" }, { + "name": "Henrik Mattsson-M\u00e5rn" + }, + { "name": "Jacob Carlsson" }, { @@ -3262,6 +3533,12 @@ "name": "Marco tom Suden" }, { + "name": "Mattias M\u00fcnster" + }, + { + "name": "mljungberg10" + }, + { "name": "Nicolas Auvray" }, { @@ -3315,9 +3592,6 @@ "name": "ArmanH" }, { - "name": "Ata Atatan\u0131r" - }, - { "name": "Atakan Kara\u00e7engel" }, { @@ -3348,6 +3622,9 @@ "name": "Ege Arda An\u0131lan" }, { + "name": "Emir \u00d6ks\u00fcz" + }, + { "name": "Emre AYTA\u00c7" }, { @@ -3384,6 +3661,12 @@ "name": "Furkan \u00c7evik" }, { + "name": "Gokhan\" Colpan" + }, + { + "name": "G\u00fcnay Y\u0131lmaz" + }, + { "name": "Hasan Baran K\u0131rm\u0131z\u0131" }, { @@ -3450,10 +3733,10 @@ "name": "reprezalio" }, { - "name": "R\u0131za Han Y\u0131lmaz" + "name": "Rwe ass" }, { - "name": "salih akta\u015f" + "name": "R\u0131za Han Y\u0131lmaz" }, { "name": "Salih Dursunta\u015f" @@ -3480,13 +3763,13 @@ "name": "Taha Karado\u011fan" }, { - "name": "TurkishPower" + "name": "Tayfun Toprakc\u0131o\u011flu" }, { - "name": "Tu\u011fberk Korkut" + "name": "TurkishPower" }, { - "name": "Typhoon das" + "name": "Tu\u011fberk Korkut" }, { "name": "ubuntuki" @@ -3516,6 +3799,9 @@ "name": "Volkan SARIB\u00dcLB\u00dcL" }, { + "name": "Volkan Sar\u0131o\u011flu" + }, + { "name": "yakup" }, { @@ -3554,6 +3840,9 @@ "name": "Dimaver" }, { + "name": "Dmytro Ryl'kov" + }, + { "name": "Igor Marchuk" }, { @@ -3610,7 +3899,5 @@ ], "LangName": "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430" } - ], - "Title": "Translators" -} - + ] +} \ No newline at end of file Index: source/tools/i18n/creditTranslators.py =================================================================== --- source/tools/i18n/creditTranslators.py +++ source/tools/i18n/creditTranslators.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding:utf-8 -*- # -# Copyright (C) 2018 Wildfire Games. +# Copyright (C) 2019 Wildfire Games. # This file is part of 0 A.D. # # 0 A.D. is free software: you can redistribute it and/or modify @@ -18,16 +18,17 @@ # along with 0 A.D. If not, see . """ -This file imports the translators credits located in the public mod GUI files and -runs through .po files to add possible new translators to it. -It only appends new people, so it is possible to manually add names in the credits -file and they won't be overwritten by running this script. +This file updates the translators credits located in the public mod GUI files, using +translators names from the .po files. -Translatable strings will be extracted from the generated file, so this should be ran -before updateTemplates.py. -""" +If translators change their names on Transifex, the script will remove the old names. +TODO: It should be possible to add people in the list manually, and protect them against +automatic deletion. This has not been needed so far. A possibility would be to add an +optional boolean entry to the dictionary containing the name. -from __future__ import absolute_import, division, print_function, unicode_literals +Translatable strings will be extracted from the generated file, so this should be run +once before updateTemplates.py. +""" import json, os, glob, re @@ -69,35 +70,18 @@ creditsLocation = 'binaries/data/mods/public/gui/credits/texts/translators.json' -# Load JSON data -creditsFile = open(root + creditsLocation) -JSONData = json.load(creditsFile) -creditsFile.close() - # This dictionnary will hold creditors lists for each language, indexed by code langsLists = {} # Create the new JSON data newJSONData = {'Title': 'Translators', 'Content': []} -# First get the already existing lists. If they correspond with some of the credited languages, -# add them to the new data after processing, else add them immediately. -# NB: All of this is quite inefficient -for element in JSONData['Content']: - if 'LangName' not in element or element['LangName'] not in langs.values(): - newJSONData['Content'].append(element) - continue - - for (langCode, langName) in langs.items(): - if element['LangName'] == langName: - langsLists[langCode] = element['List'] - break - -# Now actually go through the list of languages and search the .po files for people +# Now go through the list of languages and search the .po files for people # Prepare some regexes commentMatch = re.compile('#.*') -translatorMatch = re.compile('# ([\w\s]*)(?: <.*>)?, [0-9-]', re.UNICODE) +translatorMatch = re.compile('# ([^,<]*)(?: <.*>)?, [0-9,-]{4,9}') +deletedUsernameMatch = re.compile('[0-9a-f]{32}') # Search for lang in langs.keys(): @@ -110,20 +94,21 @@ poFile = open(file.replace('\\', '/')) reached = False for line in poFile: - line = line.decode('utf8') if reached: if not commentMatch.match(line): break m = translatorMatch.match(line) if m: - langsLists[lang].append(m.group(1)) + username = m.group(1) + if not deletedUsernameMatch.match(username): + langsLists[lang].append(m.group(1)) if line.strip() == '# Translators:': reached = True poFile.close() # Sort and remove duplicates # Sorting should ignore case to have a neat credits list - langsLists[lang] = sorted(set(langsLists[lang]), cmp=lambda x,y: cmp(x.lower(), y.lower())) + langsLists[lang] = sorted(set(langsLists[lang]), key=lambda s: s.lower()) # Now insert the new data into the new JSON file for (langCode, langList) in sorted(langsLists.items()):