Index: ps/trunk/binaries/data/mods/public/gui/credits/credits.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/credits/credits.js (revision 17903) +++ ps/trunk/binaries/data/mods/public/gui/credits/credits.js (revision 17904) @@ -1,74 +1,77 @@ var g_PanelNames = ["special", "programming", "art", "translators", "misc", "donators"]; var g_PanelTexts = []; var g_ActivePanel = -1; function init() { // Load credits list from the disk and parse them for (let name of g_PanelNames) g_PanelTexts.push(parseJSONCredits(name)); selectPanel(0); } // Run through a "Content" list and parse elements for formatting and translation function parseHelper(list) { let result = ""; for (let object of list) { + if (object.LangName) + result += "[font=\"sans-bold-stroke-14\"]" + object.LangName + "\n"; + if (object.Title) result += "[font=\"sans-bold-stroke-14\"]" + translate(object.Title) + "\n"; if (object.Subtitle) result += "[font=\"sans-bold-14\"]" + translate(object.Subtitle) + "\n"; if (object.List) { for (let element of object.List) { if (element.nick && element.name) result += "[font=\"sans-14\"]" + sprintf(translate("%(nick)s - %(name)s"), { "nick": element.nick, "name": element.name }) + "\n"; else if (element.nick) result += "[font=\"sans-14\"]" + element.nick + "\n"; else if (element.name) result += "[font=\"sans-14\"]" + element.name + "\n"; } result += "\n"; } if (object.Content) result += "\n" + parseHelper(object.Content) + "\n"; } return result; } function parseJSONCredits(panelName) { let json = Engine.ReadJSONFile("gui/credits/texts/" + panelName + ".json"); if (!json || !json.Content) { error("Could not load credits for " + panelName + "!"); return ""; } return parseHelper(json.Content); } function selectPanel(i) { if (g_ActivePanel != -1) { let oldPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton"); oldPanelButton.sprite = "BackgroundBox"; } g_ActivePanel = i; let newPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton"); newPanelButton.sprite = "ForegroundBox"; let creditsText = Engine.GetGUIObjectByName("creditsText"); creditsText.caption = g_PanelTexts[i]; } Index: ps/trunk/binaries/data/mods/public/gui/credits/texts/translators.json =================================================================== --- ps/trunk/binaries/data/mods/public/gui/credits/texts/translators.json (revision 17903) +++ ps/trunk/binaries/data/mods/public/gui/credits/texts/translators.json (revision 17904) @@ -1,1737 +1,1740 @@ { "Content": [ { "List": [ { "name": "Ardenlax" }, { "name": "attilla1996" }, { "name": "David Exner" }, { "name": "Devinate" }, { "name": "Filip Kru\u017e\u00edk" }, { "name": "Filip Proch\u00e1zka" }, { "name": "fri" }, { "name": "ike20" }, { "name": "javier mayo reina" }, { "name": "Lukas Koutsky" }, { "name": "Martin K\u0159\u00ed\u017e" }, { "name": "Nostur" }, { "name": "OndraK" }, { "name": "Ond\u0159ej Kol\u00edn" }, { "name": "Pavel \u0160indel\u00e1\u0159" }, { "name": "Petr H\u00e1la" }, { "name": "ProfJackCZ" }, { "name": "Rodeo65" }, { "name": "Victor Houdebert" }, { "name": "Vit Pelcak" }, { "name": "Vojt\u011bch Valigura" }, { "name": "V\u00edt Pel\u010d\u00e1k" } ], - "Title": "Czech" + "LangName": "Ce\u0161tina" }, { "List": [ { "name": "Aldicek" }, { "name": "Alex Mayr" }, { "name": "Almin" }, { "name": "Ankomias" }, { "name": "Artur Epp" }, { "name": "azrdev" }, { "name": "Benny" }, { "name": "Candy_man" }, { "name": "chaosville" }, { "name": "cledge" }, { "name": "David Lucks" }, { "name": "David Mannes" }, { "name": "Dominik" }, { "name": "eclipse" }, { "name": "endoriel" }, { "name": "Enrico" }, { "name": "Fesa" }, { "name": "foaly" }, { "name": "Hedaja" }, { "name": "hunzel" }, { "name": "IzNarf" }, { - "name": "J5lx" - }, - { "name": "Jonas" }, { "name": "jonnius" }, { "name": "Larson M\u00e4rz" }, { "name": "Leonard K\u00f6nig" }, { "name": "leper" }, { "name": "Lukas Gienapp" }, { "name": "Mansent" }, { "name": "manuel" }, { "name": "Marcel Haring" }, { "name": "Marco tom Suden" }, { "name": "Martin" }, { "name": "MartinusMagnus" }, { "name": "Matthias Meger" }, { "name": "Maximilian" }, { "name": "Meinrad M\u00fcller" }, { "name": "nautilusx" }, { "name": "Nicklas Wiegandt" }, { "name": "nylki" }, { "name": "Pat Rick" }, { "name": "Patremus" }, { "name": "Patrick Kohan" }, { "name": "Paul M\u00fcller" }, { "name": "Peter Dosh" }, { "name": "pointhi" }, { "name": "PS" }, { "name": "qwertz" }, { "name": "Raymond Vetter" }, { "name": "raymond_de" }, { "name": "richyguitar" }, { "name": "santa41116" }, { "name": "sdos77" }, { "name": "Sebastian Goebel" }, { "name": "Silasoa" }, { "name": "sshmedom" }, { "name": "Stefan Rohrbacher" }, { "name": "stefanniedermann" }, { "name": "Tagaris" }, { "name": "Talani" }, { "name": "Thelxinoe" }, { "name": "these" }, { "name": "Thomas Steinert" }, { "name": "Tim" }, { "name": "Tobias" }, { "name": "tuxylord" }, { "name": "wilhelm3" }, { "name": "Wuzzy" }, { "name": "Xaver" }, { "name": "Xeramon" }, { "name": "xtother90" }, { "name": "Yves_G" } ], - "Title": "German" + "LangName": "Deutsch" }, { "List": [ { "name": "Dorinob" }, { "name": "Fabrizio Marana" }, { "name": "Guillermo Grunwaldt" }, { "name": "Laurene Albrand" }, { "name": "leper" }, { "name": "Martin" }, { "name": "s0600204" }, { "name": "Tanksy" } ], - "Title": "English (UK)" + "LangName": "English (UK)" }, { "List": [ { "name": "Adrian Sbardella" }, { "name": "Ageoneitor JT" }, { "name": "Alex R" }, { "name": "Alexis Arcos" }, { "name": "Ancel0" }, { "name": "blvebird" }, { "name": "caniroc" }, { "name": "Damian Axel Xavier" }, { "name": "David Fernandez Carhuas" }, { "name": "Diego Bruschetti" }, { "name": "Edgardo" }, { "name": "Enrique Keykens" }, { "name": "Ermides Gonzalez" }, { "name": "espanengo" }, { "name": "Esteban de Jesus Rodriguez Bujaidar" }, { "name": "fca1970" }, { "name": "Francisco" }, { "name": "GaboXandre" }, { "name": "Gabriel Lazcano" }, { "name": "Ghenadi Avricenco" }, { "name": "gonzaleau" }, { "name": "itmeansnothing" }, { "name": "Jes\u00fas Mart\u00ednez" }, { "name": "Joaqu\u00edn" }, { "name": "juanda097" }, { "name": "Kalrish B\u00e4akjen" }, { + "name": "Leandro Schenone" + }, + { "name": "Lenny Hans Andreu" }, { "name": "Marcio Duron" }, { "name": "matiasng37" }, { "name": "memmaker650" }, { "name": "Miguel Angel NV" }, { "name": "ninovolador" }, { "name": "OJankano" }, { "name": "Pablo Rodr\u00edguez" }, { "name": "Pedro Almendros Gonz\u00e1lez" }, { "name": "Pedro Luis" }, { "name": "Pretorg" }, { "name": "rafa436" }, { "name": "Rafael Castro" }, { "name": "Ramiro Garay" }, { "name": "Roger Vasquez" }, { "name": "Samuel Roman" }, { "name": "Sander Deryckere" }, { "name": "Sebastian David Tamayo" }, { "name": "Spartan2411" }, { "name": "Swyter" }, { "name": "tarod kaos" }, { "name": "Tomato" }, { "name": "Trombe" }, { "name": "vega93" } ], - "Title": "Spanish" + "LangName": "Espa\u00f1ol" }, { "List": [ { "name": "Adge Nodux" }, { "name": "Antoine Adet" }, { "name": "Arthur Jaouen" }, { "name": "BAHIDJ Ryadh" }, { "name": "Baptiste" }, { "name": "Bastien Do" }, { "name": "Buggi" }, { "name": "Cajetan Bouchard" }, { "name": "Calinou" }, { "name": "Cyril" }, { "name": "DiabloO" }, { "name": "dourouc05" }, { "name": "foufy much" }, { "name": "Fran\u00e7ois Poirotte" }, { "name": "gorius" }, { "name": "gZen" }, { "name": "Hadrien Titeux" }, { "name": "Jibi" }, { "name": "Julien Bernard" }, { "name": "Kachimatte" }, { "name": "kalemiro" }, { "name": "lemiaou" }, { "name": "LordIgorIIIofKiev" }, { "name": "Marco tom Suden" }, { "name": "Marwan" }, { "name": "minissimo" }, { "name": "Moritz FS" }, { "name": "Mortimer" }, { "name": "Moul" }, { "name": "Nexus nexus" }, { "name": "Nicolas Auvray" }, { "name": "nicolas caillard" }, { "name": "Oimat" }, { "name": "Olivier" }, { "name": "Pablo colson" }, { "name": "PERRUSSEL Valentin" }, { "name": "Polakrity" }, { "name": "PRIME Gildas" }, { "name": "robin moussu" }, { "name": "Rodrigue March" }, { "name": "Ross1396" }, { "name": "R\u00e9mi Verschelde" }, { "name": "Sander Deryckere" }, { "name": "sanderd17" }, { "name": "SecondCloud500" }, { "name": "silure" }, { "name": "Simon Georges" }, { "name": "Slim Khan" }, { "name": "slimkhan" }, { "name": "tavariz" }, { "name": "Thedemos" }, { "name": "Timothee KNOBLOCH" }, { "name": "Tito221" }, { "name": "Tonton" }, { "name": "Toto AD" }, { "name": "Valentin Ambroise" }, { "name": "Valentin Chevalier" }, { "name": "Van Calster" }, { "name": "Vincent Pouliquen" }, { "name": "Xavier Tardieu" }, { "name": "Yannick Heintz" } ], - "Title": "French" + "LangName": "Fran\u00e7ais" }, { "List": [ { "name": "GunChleoc" }, { "name": "Michael Bauer" } ], - "Title": "Gaelic" + "LangName": "G\u00e0idhlig" }, { "List": [ { "name": "Adri\u00e1n Chaves Fern\u00e1ndez" } ], - "Title": "Galician" + "LangName": "Galego" }, { "List": [ { "name": "Andrii Puzan" }, { "name": "azayrahmad" }, { "name": "Bohdan Lepky" }, { "name": "Cahya Legawa" }, { "name": "constantius damar wicaksono" }, { "name": "Fqn Kdgzd" }, { "name": "Ibnu Daru Aji" }, { "name": "IndoGuy" }, { "name": "Joshua Christo Randiny" }, { "name": "Samuel Christo Randiny" }, { "name": "Tirtayasa" }, { "name": "Yusufabdiauzan" } ], - "Title": "Indonesian" + "LangName": "Bahasa Indonesia" }, { "List": [ { "name": "Alberto" }, { "name": "Alessandro" }, { "name": "Andrea Balzarotti" }, { "name": "andreac" }, { "name": "Angela" }, { "name": "chavo" }, { "name": "Claudio" }, { "name": "Damiano" }, { "name": "Damtux" }, { "name": "Daniele Tricoli" }, { "name": "Davide" }, { "name": "Emanuele Ricci" }, { "name": "Fabio Pedretti" }, { "name": "francescogramazio" }, { "name": "giangy" }, { "name": "j4nsen" }, { "name": "Luca" }, { "name": "Marco" }, { "name": "Me Lazzi" }, { "name": "Michele Lasala" }, { "name": "Nicola Jelmorini" }, { "name": "Paolo" }, { "name": "Raptor86" }, { "name": "Riccardo Di Maio" }, { "name": "Rivoltano" }, { + "name": "Sebastiano Pistore" + }, + { "name": "SecondCloud500" }, { "name": "Sergio" }, { "name": "tema" }, { "name": "The_Blinded" }, { "name": "Vaschetto Marco" }, { "name": "Zioninja" } ], - "Title": "Italian" + "LangName": "Italiano" }, { "List": [ { "name": "Anique van Berne" }, { "name": "bilsimon" }, { "name": "BladeFalconheart" }, { "name": "BoucheDag" }, { "name": "Charon De Beukelaer" }, { "name": "ClementL" }, { "name": "Ellen Roels" }, { "name": "Evert Van Petegem" }, { "name": "Floretta" }, { "name": "Frode Lindeijer" }, { "name": "haldir" }, { "name": "Ilya" }, { "name": "Johannes Collosus" }, { "name": "Jos Arends" }, { "name": "LTom" }, { "name": "luuk2305" }, { "name": "Mar" }, { "name": "Mark Lemmens" }, { "name": "mat jojo" }, { "name": "MathiasB" }, { "name": "Matthijs de Rijk" }, { "name": "Max Klaversma" }, { "name": "Michiel" }, { "name": "Mike vdw" }, { "name": "niektb" }, { "name": "Oscar Schrover" }, { "name": "Peter Erinkveld" }, { "name": "Ruben De Smet" }, { "name": "Sander Deryckere" }, { "name": "Spijker" }, { "name": "Stef Jansen" }, { "name": "Sven Baars" }, { "name": "Sven Witte" }, { "name": "tanguy lesseliers" }, { "name": "TheBuG" }, { "name": "Thomas den Hollander" }, { "name": "Tim G" }, { "name": "tnt" }, { "name": "trick2011" }, { "name": "Vincent" }, { "name": "Yannick Vanroy" }, { "name": "Yves_G" } ], - "Title": "Dutch" + "LangName": "Nederlands" }, { "List": [ { "name": "Adam Stachowicz" }, { "name": "Adrian Budasz" }, { "name": "Agata Pawlik" }, { "name": "Andrzej Udodik" }, { "name": "Annunnaky" }, { "name": "Arthur Glovchynski" }, { "name": "Artur Motyka" }, { "name": "Astinus Eberhard" }, { "name": "Bart\u0142omiej Ozimek" }, { "name": "Daniel Ko\u0107" }, { "name": "Dominik Pieczy\u0144ski" }, { "name": "domino1162" }, { "name": "Emil Klok" }, { "name": "Fikimiki" }, { "name": "Filip Juszczak" }, { "name": "Filip Lechowicz" }, { "name": "filux" }, { "name": "FoskamPL" }, { "name": "Gregory" }, { "name": "Grzegorz Lara" }, { "name": "inso_pl" }, { "name": "Jacek" }, { "name": "Jakub Szyd\u0142o" }, { "name": "Jarek Kokoci\u0144ski" }, { "name": "krzychu188" }, { "name": "Krzysztof Grabania" }, { "name": "Krzysztof Nowakowski" }, { "name": "Krzysztof5" }, { "name": "Kuba Teichert" }, { "name": "lacek" }, { "name": "Lapinopl" }, { "name": "LenaPL" }, { "name": "Leszek S" }, { "name": "Lukasz B" }, { "name": "Mar321" }, { "name": "Marcin Koz\u0142owski" }, { "name": "Marcin Malinowski" }, { "name": "Marcin S" }, { "name": "Matthew" }, { "name": "mhnxo" }, { "name": "Micha\u0142 Czerwi\u0144ski" }, { "name": "Micha\u0142 Garapich" }, { "name": "Micha\u0142 Karol" }, { "name": "Micha\u0142 Ko\u017alarek" }, { "name": "Micha\u0142 Olber" }, { "name": "miragae" }, { "name": "Night Shade" }, { "name": "Paulina" }, { "name": "Pawel Jarczak" }, { "name": "Pawe\u0142 Goca" }, { "name": "Pawe\u0142 Klimek" }, { "name": "Piotr" }, { "name": "q" }, { "name": "rabusek" }, { "name": "Rafa\u0142" }, { "name": "Robert Wolniak" }, { "name": "RosiakPL" }, { "name": "slodki12341" }, { "name": "Tomasz Pud\u0142o" }, { "name": "tomekpg" }, { "name": "TotalNoobPL" }, { "name": "Voltinus" }, { "name": "youtome_metoyou" }, { "name": "zyxist" } ], - "Title": "Polish" + "LangName": "Polski" }, { "List": [ { "name": "Adriano Ramos" }, { "name": "alrope" }, { "name": "alveselvis16" }, { "name": "Arthur Paim Arnold" }, { "name": "Caio Northfleet" }, { "name": "Canal do Kilof" }, { "name": "catherine tomaszewski da silva" }, { "name": "Cleiton Nunes" }, { "name": "dexmendonca" }, { "name": "Dianakc" }, { "name": "Elisa Silva Ramos" }, { "name": "Enrico Nicoletto" }, { "name": "Erick Alves" }, { "name": "Ernan" }, { "name": "Estus" }, { "name": "Filipe Oliveira" }, { "name": "F\u00e1bio Medeiros" }, { "name": "Giovane Guerreiro" }, { "name": "gsoster" }, { "name": "Guilherme Dias" }, { "name": "Gustavo Moitinho" }, { "name": "Hunteros" }, { "name": "Hyperionwolf" }, { "name": "Iago Leandro de Abreu" }, { "name": "JulioBianor" }, { "name": "Leonardo Augusto Suzin" }, { "name": "Leonardo Barcihello" }, { "name": "Leonardo Tada Antunes" }, { "name": "Lucas Sim\u00f5es" }, { "name": "magalidade" }, { "name": "Marcelo Kniss" }, { "name": "Marcos Correa" }, { "name": "Marcus Rasseli" }, { "name": "Mateus Felipe Cordeiro Caetano Pinto" }, { "name": "Matheus Clemente" }, { "name": "Micael Pereira Malaquias" }, { "name": "Mihailov Vasilievic Filho" }, { "name": "mliell" }, { "name": "mogafi" }, { "name": "Nicolas Frasson" }, { "name": "Paulo Castro" }, { "name": "Pedro Augustus Diniz Falc\u00e3o Silva" }, { "name": "PedroDognani" }, { "name": "pizzaiolo" }, { "name": "Qodek" }, { "name": "Raphael Mendon\u00e7a" }, { "name": "Rowel" }, { "name": "Sturm" }, { "name": "Teutao" }, { "name": "Thiago Perrotta" }, { "name": "Washington Ramon Santos nascimento" }, { "name": "yurids" } ], - "Title": "Portuguese (Brazil)" + "LangName": "Portugu\u00eas (Brasil)" }, { "List": [ { "name": "Andrew Melim" }, { "name": "Andr\u00e9 Rodrigues" }, { "name": "crolidge" }, { "name": "Danny Reese" }, { "name": "Ernan" }, { "name": "G N" }, { "name": "Grim Kriegor" }, { "name": "Helder Meneses" }, { "name": "Iago Leandro de Abreu" }, { "name": "Jo\u00e3o Oliveira" }, { "name": "Luis Neves" }, { "name": "Lu\u00eds Guedes" }, { "name": "mogafi" }, { "name": "Nuno de Mendon\u00e7a Raimundo" }, { "name": "Pedro matias" }, { "name": "Qodek" }, { "name": "Sander Deryckere" }, { "name": "Sim\u00e3o Afonso" }, { "name": "S\u00e9rgio Marques" }, { "name": "Tiago Martins" } ], - "Title": "Portuguese (Portugal)" + "LangName": "Portugu\u00eas (Portugal)" }, { "List": [ { "name": "_Arkan0ID_" }, { "name": "Alex" }, { "name": "Alexander Olkhovskiy" }, { "name": "Alexander Serov" }, { "name": "Alexandr Kuzmenko" }, { "name": "Andrew" }, { "name": "Anton" }, { "name": "Anton Khabarov" }, { "name": "Armen Dzhagaryan" }, { "name": "bigaltum" }, { "name": "Bogdan Artemyev" }, { "name": "Boris Karalnik" }, { "name": "Christo Keller" }, { "name": "C\u0435\u0440\u0433\u0435\u0439 \u0418\u0441\u0430\u0447\u0435\u043d\u043a\u043e" }, { "name": "delpfine" }, { "name": "Dmitry Oshkalo" }, { "name": "Eugene Kostrika" }, { "name": "Gleb Molchanov" }, { "name": "Homunkul" }, { "name": "Igor" }, { "name": "Igor Kustov" }, { "name": "insolor" }, { "name": "Ivan" }, { "name": "Ivan Seleznev" }, { "name": "Konstantin" }, { "name": "Maksim Oreshkov" }, { "name": "Malik Khodjaev" }, { "name": "Malyanov Evgeniy" }, { "name": "Max Kamashev" }, { "name": "micha030201" }, { "name": "Nick Zhivotenko" }, { "name": "Nikita Pavlyuk" }, { "name": "Oleg Ekhlakov" }, { "name": "Pavel" }, { "name": "Pavel Kyzmin" }, { "name": "Peter Seregin" }, { "name": "Rudeboy1988" }, { "name": "sad2shade" }, { "name": "Simple88" }, { "name": "sorrymak" }, { "name": "Stanislav G" }, { "name": "utyf05" }, { "name": "v00d00911" }, { "name": "Vladislav" }, { "name": "Vladislav Belov" }, { "name": "vlitomsk" }, { "name": "webslavic" }, { "name": "Woratiklis" }, { "name": "Xxcapog" }, { "name": "Yegor" }, { "name": "zake1313" }, { "name": "\u0410\u043b\u0435\u043a\u0441\u0435\u043972" }, { "name": "\u0412\u0438\u0442\u0430\u043b\u0438\u0439" }, { "name": "\u0412\u0438\u0442\u0430\u043b\u0438\u0439 \u041e\u0440\u0435\u0445\u043e\u0432" }, { "name": "\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0411\u043e\u0447\u043a\u0430\u0440\u0451\u0432" }, { "name": "\u041a\u0432\u0430\u0448\u0430 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432" }, { "name": "\u0427\u0443\u0432\u0430\u043a" } ], - "Title": "Russian" + "LangName": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439" }, { "List": [ { "name": "B2D" }, { "name": "FrewCen" }, { "name": "kecer" }, { "name": "Levi Taule" }, { "name": "Mari\u00e1n Mi\u017eik" }, { "name": "Martin Pl\u00e1vala" }, { "name": "Miroslav Rem\u00e1k" }, { "name": "MiroslavR" }, { "name": "M\u00e1rio Bulejko" }, { "name": "Patrik Loch" }, { "name": "Peter Tuharsky" }, { "name": "Roman Be\u0148o" }, { "name": "SuroX" } ], - "Title": "Slovak" + "LangName": "Sloven\u010dina" }, { "List": [ { "name": "61stylo" }, { "name": "Aathonaeax" }, { "name": "Abdullah Ilgaz" }, { "name": "Alp Eren" }, { "name": "ambd" }, { "name": "AMG" }, { "name": "ArmanH" }, { "name": "Butterfly" }, { "name": "Cem Aktas" }, { "name": "Cem KO\u00c7" }, { "name": "coolland" }, { "name": "Do\u011fu Kan" }, { "name": "Ebubekir Tabak" }, { "name": "efrasiyab1" }, { "name": "Emre AYTA\u00c7" }, { "name": "Emre C\u0131klatekerlio" }, { "name": "faradundamarti" }, { "name": "Fatih" }, { "name": "Furkan \u00c7evik" }, { "name": "H\u00fcseyin Cem ARAS" }, { "name": "Kudret" }, { "name": "mehmet akar" }, { "name": "Merve B\u0130\u00c7KES" }, { "name": "Mete Han" }, { "name": "Muhammed Ayd\u0131n" }, { "name": "receb" }, { "name": "redbullah" }, { "name": "reprezalio" }, { "name": "R\u0131za Han Y\u0131lmaz" }, { "name": "Salih Dursuntas" }, { "name": "schaft" }, { "name": "Serkan" }, { "name": "sicey" }, { "name": "Sinan \u00d6zg\u00fcn" }, { "name": "TurkishPower" }, { "name": "ubuntuki" }, { "name": "user431231" }, { "name": "utkugun" }, { "name": "volcanology" }, { "name": "Volkan Gezer" }, { "name": "Volkan SARIB\u00dcLB\u00dcL" }, { "name": "yakup" }, { "name": "Yavuz Karaki\u015fi" }, { "name": "Yunus Emre \u00c7akmak" } ], - "Title": "Turkish" + "LangName": "T\u00fcrk\u00e7e" } ] } \ No newline at end of file Index: ps/trunk/source/tools/i18n/creditTranslators.py =================================================================== --- ps/trunk/source/tools/i18n/creditTranslators.py (revision 17903) +++ ps/trunk/source/tools/i18n/creditTranslators.py (revision 17904) @@ -1,127 +1,127 @@ #!/usr/bin/env python2 # -*- coding:utf-8 -*- # # Copyright (C) 2016 Wildfire Games. # This file is part of 0 A.D. # # 0 A.D. is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # 0 A.D. is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # 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. Translatable strings will be extracted from the generated file, so this should be ran before updateTemplates.py. """ from __future__ import absolute_import, division, print_function, unicode_literals import json, os, glob, re # Credited languages - Keep in sync with source/tools/dist/remove-incomplete-translations.sh langs = { - 'cs': 'Czech', - 'de': 'German', + 'cs': 'Ceština', + 'de': 'Deutsch', 'en_GB': 'English (UK)', - 'es': 'Spanish', - 'fr': 'French', - 'gd': 'Gaelic', - 'gl': 'Galician', - 'id': 'Indonesian', - 'it': 'Italian', - 'nl': 'Dutch', - 'pl': 'Polish', - 'pt_PT': 'Portuguese (Portugal)', - 'pt_BR': 'Portuguese (Brazil)', - 'ru': 'Russian', - 'sk': 'Slovak', - 'tr': 'Turkish'} + 'es': 'Español', + 'fr': 'Français', + 'gd': 'Gàidhlig', + 'gl': 'Galego', + 'id': 'Bahasa Indonesia', + 'it': 'Italiano', + 'nl': 'Nederlands', + 'pl': 'Polski', + 'pt_PT': 'Português (Portugal)', + 'pt_BR': 'Português (Brasil)', + 'ru': 'Русский', + 'sk': 'Slovenčina', + 'tr': 'Türkçe'} root = '../../../' poLocations = [ 'binaries/data/l10n/', 'binaries/data/mods/public/l10n/', 'binaries/data/mods/mod/l10n/'] 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 = {'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 'Title' not in element or element['Title'] not in langs.values(): + 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['Title'] == langName: + if element['LangName'] == langName: langsLists[langCode] = element['List'] break # Now actually 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) # Search for lang in langs.keys(): if lang not in langsLists.keys(): langsLists[lang] = [] for location in poLocations: files = glob.glob(root + location + lang + '.*.po') for file in files: 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)) 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())) # Now insert the new data into the new JSON file for (langCode, langList) in sorted(langsLists.items()): - newJSONData['Content'].append({'Title': langs[langCode], 'List': []}) + newJSONData['Content'].append({'LangName': langs[langCode], 'List': []}) for name in langList: newJSONData['Content'][-1]['List'].append({'name': name}) # Save the JSON data to the credits file creditsFile = open(root + creditsLocation, 'w') json.dump(newJSONData, creditsFile, indent=4) creditsFile.close()