Merge lp:~widelands-dev/widelands/bug-1807701_translate_update_authors into lp:widelands

Proposed by kaputtnik
Status: Merged
Merged at revision: 8968
Proposed branch: lp:~widelands-dev/widelands/bug-1807701_translate_update_authors
Merge into: lp:widelands
Diff against target: 171 lines (+75/-21)
3 files modified
data/txts/developers.json (+5/-3)
data/txts/developers.lua (+1/-1)
utils/update_authors.py (+69/-17)
To merge this branch: bzr merge lp:~widelands-dev/widelands/bug-1807701_translate_update_authors
Reviewer Review Type Date Requested Status
GunChleoc Approve
Review via email: mp+361401@code.launchpad.net

Commit message

Add an extra key to get a translatable author-value.
Explicit close opened files.

Description of the change

The main change: Add an optional key 'translate' to data/txts/developers.json and add the translation function (_) to the value(s).

Added two new functions for adding a lua key to a table and apply values as a lua array automatically if given.

The new functions are only used for the developers, not the translators. Feel free to use them also for the translators.

After this change get into trunk, we have to merge the branch for the website before updating the widelands-package on the server:
https://code.launchpad.net/~widelands-dev/widelands-website/bug-1807701_string_fixes_website/+merge/361402

To post a comment you must log in.
Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 4386. State: passed. Details: https://travis-ci.org/widelands/widelands/builds/475944438.
Appveyor build 4178. State: success. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_widelands_dev_widelands_bug_1807701_translate_update_authors-4178.

Revision history for this message
GunChleoc (gunchleoc) wrote :

LGTM :)

@bunnybot merge

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'data/txts/developers.json'
2--- data/txts/developers.json 2018-10-12 17:15:47 +0000
3+++ data/txts/developers.json 2019-02-04 15:47:15 +0000
4@@ -18,8 +18,8 @@
5 "entries":[
6 {
7 "subheading": "Graphics",
8- "members":[
9- "Chuck Wilder (chuckw)"
10+ "translate":[
11+ "vacant"
12 ]
13 },
14 {
15@@ -392,7 +392,9 @@
16 "members":[
17 "Matt Howe (mdhowe)",
18 "Samuel Tilly (eldamar)",
19- "WorldSavior",
20+ "WorldSavior"
21+ ],
22+ "translate":[
23 "and many, many more (thank you for everything you've done)"
24 ]
25 }
26
27=== modified file 'data/txts/developers.lua'
28--- data/txts/developers.lua 2018-10-26 05:29:19 +0000
29+++ data/txts/developers.lua 2019-02-04 15:47:15 +0000
30@@ -1,3 +1,3 @@
31 -- Do not edit this file - it is automatically generated
32 -- by utils/update_authors.py from developers.json.
33-function developers() return {{heading = _"Chieftains",image = "images/players/genstats_player.png",entries = {{members = {"GunChleoc (Since 2016)","Holger Rapp (SirVer) (2001 – 2016)",},},},},{heading = _"Elders",image = "images/players/genstats_player.png",entries = {{subheading = _"Graphics",members = {"Chuck Wilder (chuckw)",},},{subheading = _"Homepage",members = {"Markus Pfitzner (janus)",},},{subheading = _"Sound",members = {"Jan Bruns (solatis)",},},{subheading = _"Tongues",members = {"GunChleoc",},},},},{heading = _"Coders",image = "images/wui/stats/genstats_nrwares.png",entries = {{members = {"Holger Rapp (SirVer)","Nicolai Hähnle (ixprefect)","Florian Bluemel","Florian Falkner (foldrian)","Florian Weber (Bedouin)","Philipp Engelhard","Stefan Boettner","Tron","Martin Quinson","Raul Ferriz","Willem Jan Palenstijn","Josef Spillner","Christof Petig","Erik Sigra (sigra)","Nanne Wams","Surgery","Andrius R. (knutux)","Jari Hautio (jarih)","Peter Schwanemann (Nasenbaer)","Victor Pelt (Dwarik)","Axel Gehlert (dunkelbrauer)","András Eisenberger (Kiscsirke)","Andi","Timo","Hannes","TimoW","Jens Beyer (Qcumber-some)","Andreas Breitschopp (ab-tools)","Joachim Breitner (nomeata)","Nizamov Shawkat","Carl-Philip Hänsch (carli)","Martin Prussak (martin)","David Allwicher (aber)","Nathan Peters (nathanpeters)","Leif Sandstede (lcsand)","Matthias Horne (shevonar)","Borim (borim)","Angelo Locritani (alocritani)","Gabriel Margiani (gamag)","Anthony J. Bentley (anthonyjbentley)","Peter Waller (iri)","Johannes Ebke (sirius-in4matiker)","Andreas Eriksson","Mark Scott","Teppo Mäenpää","Steven De Herdt (stdh)","Charly Ghislain (cghislai)","Tino Miegel (TinoM)","Tibor Bamhor (tiborb95)","GunChleoc","Ferdinand Thiessen (f-thiessen)","Willy Scheibel (willyscheibel)","Martin Schmidt (mars)","Simon Eilting","Alexander Kartzow (daAlx1)","Łukasz Majcher","Paul Mehrer (meitis)","Miroslav Remák (MiroslavR)","Janosch Peters","Klaus Halfmann (Hasi50)","Philipp Klaus Krause (PkK)","Notabilis","Jukka Pakarinen","Evgeny Kapun","ypopezios","Toni Förster (stonerl)","Arty","Benedikt Straub (Nordfriese)",},},},},{heading = _"Graphicians",image = "images/wui/stats/genstats_nrbuildings.png",entries = {{members = {"Albert Jasiowka","Holger Rapp (SirVer)","Marz","Philipp Engelhard","Yannick Warnier","Delia","Florian Neuerburg","Jerome Rosinski","Mats Olsson","Odin Omdal","Wolfgang Weidner","Andreas Baier","Juri Chomé","Toralf Bethke (bithunter32)","Peter Schwanemann (Nasenbaer)","Alexia Death","Repsa Jih","Geoffroy Schmitlin (Trimard)","Benedikt Freisen (Objpaswriter)","Stefano Guidoni (Ilguido)","Samith Sandanayake (samithdisal)","Chuck Wilder (chuckw)","Astuur","Gerrit Familiegrosskopf (kingcreole)","Florian Angermeier (fraang)","DragonAtma","Benedikt Straub (Nordfriese)",},},},},{heading = _"Musicians",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Kristian","MiddleFinger","Valerio Orlandini (Symbiosis)","Barry van Oudtshoorn (barryvan)","Jan Bruns (Solatis)","Nikola Whallon (Saturn)","Joshua O'Leary (Joshun)","Klaus Halfmann (Hasi50)","Stuart Marshall",},},},},{heading = _"Sound Effects",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Stefan de Konik","Peter Schwanemann (Nasenbaer)","Stephan","Adam Piggott (_aD)","Stanisław Gackowski (Soeb)","Tada",},},},},{heading = _"Maps and Missions",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Michal Szopa (Winterwind)","Jan-Henrik Kluth (Isch)","Peter Schwanemann (Nasenbaer)","Sven (deviant)","Tuxlands","Kamil Wilczek (Another Barbarian)","Tarvo Reim (Tarrei)","Manuel Holzmeier (Quappo)","ivh","Hanna Podewski (kristin)","Teppo Mäenpää","fk","Einstein13","Jenia","Robnick","wl-zocker","king of nowhere","kaputtnik","Stephan Lutz (hessenfarmer)","Benedikt Straub (Nordfriese)",},},},},{heading = _"Campaign Story",image = "images/ui_basic/ls_wlmap.png",entries = {{subheading = _"Barbarians",members = {"Bastian Rapp","Alexander Kahl (wolfpac)","Peter Schwanemann (Nasenbaer)",},},{subheading = _"Empire",members = {"Peter Schwanemann (Nasenbaer)","Stephan Lutz (hessenfarmer)",},},{subheading = _"Atlanteans",members = {"Holger Rapp (SirVer)","Peter Schwanemann (Nasenbaer)",},},{subheading = _"Frisians",members = {"Benedikt Straub (Nordfriese)",},},},},{heading = _"Packagers",image = "images/wui/stats/genstats_productivity.png",entries = {{subheading = _"Debian Linux",members = {"Martin Quinson",},},{subheading = _"Fedora Linux",members = {"Karol Trzcionka","Jochen Wiedmann",},},{subheading = _"Mandriva Linux",members = {"Emmanuel Andry (eandry)",},},{subheading = _"FreeBSD",members = {"Bartosz Fabianowski",},},{subheading = _"Mac OS X",members = {"Holger Rapp (SirVer)","Philipp Engelhard","Pierre Salagnac (Tarou)","Wolf St. Kappesser","David Allwicher (aber)","Toni Förster (stonerl)",},},{subheading = _"Windows",members = {"Tino Miegel (TinoM)","Alexander Kahl (Wolfpac)","Geodomus","Jari Hautio",},},{subheading = _"ZetaOS",members = {"BeSman",},},},},{heading = _"Homepage",image = "images/logos/WL-Editor-16.png",entries = {{subheading = _"Homepage Coders",members = {"Holger Rapp (SirVer)","Stanislaw Gackowski (Soeb)","Markus Pfitzner (janus)","Tobi","kaputtnik",},},{subheading = _"Documentation, Help and Wiki",members = {"Erik Sigra (sigra)","Florian Falkner (foldrian)","Florian Weber (bedouin)","Nicolai Haehnle","Holger Rapp (SirVer)","Johannes (nuefke)","Alexander Kahl (wolfpac)","Stanislaw Gackowski (Soeb)","Hanna Podewski (kristin)","king of nowhere","GunChleoc",},},},},{heading = _"Former Elders",image = "images/players/genstats_player.png",entries = {{subheading = _"Graphics",members = {"Salamander","Alexia Death (death)",},},{subheading = _"Homepage",members = {"holymoly","Stuart Eglington (DaaL1973)","Jon Harris (jonsjava)",},},{subheading = _"Sound",members = {"Yannick Warnier",},},{subheading = _"Translation",members = {"Peter Schwanemann (Nasenbaer)","Philipp Niemann (Azagtoth)",},},},},{heading = _"Other",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Matt Howe (mdhowe)","Samuel Tilly (eldamar)","WorldSavior","and many, many more (thank you for everything you've done)",},},},},} end
34+function developers() return {{heading = _"Chieftains",image = "images/players/genstats_player.png",entries = {{members = {"GunChleoc (Since 2016)","Holger Rapp (SirVer) (2001 – 2016)",},},},},{heading = _"Elders",image = "images/players/genstats_player.png",entries = {{subheading = _"Graphics",members = {_"vacant",},},{subheading = _"Homepage",members = {"Markus Pfitzner (janus)",},},{subheading = _"Sound",members = {"Jan Bruns (solatis)",},},{subheading = _"Tongues",members = {"GunChleoc",},},},},{heading = _"Coders",image = "images/wui/stats/genstats_nrwares.png",entries = {{members = {"Holger Rapp (SirVer)","Nicolai Hähnle (ixprefect)","Florian Bluemel","Florian Falkner (foldrian)","Florian Weber (Bedouin)","Philipp Engelhard","Stefan Boettner","Tron","Martin Quinson","Raul Ferriz","Willem Jan Palenstijn","Josef Spillner","Christof Petig","Erik Sigra (sigra)","Nanne Wams","Surgery","Andrius R. (knutux)","Jari Hautio (jarih)","Peter Schwanemann (Nasenbaer)","Victor Pelt (Dwarik)","Axel Gehlert (dunkelbrauer)","András Eisenberger (Kiscsirke)","Andi","Timo","Hannes","TimoW","Jens Beyer (Qcumber-some)","Andreas Breitschopp (ab-tools)","Joachim Breitner (nomeata)","Nizamov Shawkat","Carl-Philip Hänsch (carli)","Martin Prussak (martin)","David Allwicher (aber)","Nathan Peters (nathanpeters)","Leif Sandstede (lcsand)","Matthias Horne (shevonar)","Borim (borim)","Angelo Locritani (alocritani)","Gabriel Margiani (gamag)","Anthony J. Bentley (anthonyjbentley)","Peter Waller (iri)","Johannes Ebke (sirius-in4matiker)","Andreas Eriksson","Mark Scott","Teppo Mäenpää","Steven De Herdt (stdh)","Charly Ghislain (cghislai)","Tino Miegel (TinoM)","Tibor Bamhor (tiborb95)","GunChleoc","Ferdinand Thiessen (f-thiessen)","Willy Scheibel (willyscheibel)","Martin Schmidt (mars)","Simon Eilting","Alexander Kartzow (daAlx1)","Łukasz Majcher","Paul Mehrer (meitis)","Miroslav Remák (MiroslavR)","Janosch Peters","Klaus Halfmann (Hasi50)","Philipp Klaus Krause (PkK)","Notabilis","Jukka Pakarinen","Evgeny Kapun","ypopezios","Toni Förster (stonerl)","Arty","Benedikt Straub (Nordfriese)",},},},},{heading = _"Graphicians",image = "images/wui/stats/genstats_nrbuildings.png",entries = {{members = {"Albert Jasiowka","Holger Rapp (SirVer)","Marz","Philipp Engelhard","Yannick Warnier","Delia","Florian Neuerburg","Jerome Rosinski","Mats Olsson","Odin Omdal","Wolfgang Weidner","Andreas Baier","Juri Chomé","Toralf Bethke (bithunter32)","Peter Schwanemann (Nasenbaer)","Alexia Death","Repsa Jih","Geoffroy Schmitlin (Trimard)","Benedikt Freisen (Objpaswriter)","Stefano Guidoni (Ilguido)","Samith Sandanayake (samithdisal)","Chuck Wilder (chuckw)","Astuur","Gerrit Familiegrosskopf (kingcreole)","Florian Angermeier (fraang)","DragonAtma","Benedikt Straub (Nordfriese)",},},},},{heading = _"Musicians",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Kristian","MiddleFinger","Valerio Orlandini (Symbiosis)","Barry van Oudtshoorn (barryvan)","Jan Bruns (Solatis)","Nikola Whallon (Saturn)","Joshua O'Leary (Joshun)","Klaus Halfmann (Hasi50)","Stuart Marshall",},},},},{heading = _"Sound Effects",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Stefan de Konik","Peter Schwanemann (Nasenbaer)","Stephan","Adam Piggott (_aD)","Stanisław Gackowski (Soeb)","Tada",},},},},{heading = _"Maps and Missions",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Michal Szopa (Winterwind)","Jan-Henrik Kluth (Isch)","Peter Schwanemann (Nasenbaer)","Sven (deviant)","Tuxlands","Kamil Wilczek (Another Barbarian)","Tarvo Reim (Tarrei)","Manuel Holzmeier (Quappo)","ivh","Hanna Podewski (kristin)","Teppo Mäenpää","fk","Einstein13","Jenia","Robnick","wl-zocker","king of nowhere","kaputtnik","Stephan Lutz (hessenfarmer)","Benedikt Straub (Nordfriese)",},},},},{heading = _"Campaign Story",image = "images/ui_basic/ls_wlmap.png",entries = {{subheading = _"Barbarians",members = {"Bastian Rapp","Alexander Kahl (wolfpac)","Peter Schwanemann (Nasenbaer)",},},{subheading = _"Empire",members = {"Peter Schwanemann (Nasenbaer)","Stephan Lutz (hessenfarmer)",},},{subheading = _"Atlanteans",members = {"Holger Rapp (SirVer)","Peter Schwanemann (Nasenbaer)",},},{subheading = _"Frisians",members = {"Benedikt Straub (Nordfriese)",},},},},{heading = _"Packagers",image = "images/wui/stats/genstats_productivity.png",entries = {{subheading = _"Debian Linux",members = {"Martin Quinson",},},{subheading = _"Fedora Linux",members = {"Karol Trzcionka","Jochen Wiedmann",},},{subheading = _"Mandriva Linux",members = {"Emmanuel Andry (eandry)",},},{subheading = _"FreeBSD",members = {"Bartosz Fabianowski",},},{subheading = _"Mac OS X",members = {"Holger Rapp (SirVer)","Philipp Engelhard","Pierre Salagnac (Tarou)","Wolf St. Kappesser","David Allwicher (aber)","Toni Förster (stonerl)",},},{subheading = _"Windows",members = {"Tino Miegel (TinoM)","Alexander Kahl (Wolfpac)","Geodomus","Jari Hautio",},},{subheading = _"ZetaOS",members = {"BeSman",},},},},{heading = _"Homepage",image = "images/logos/WL-Editor-16.png",entries = {{subheading = _"Homepage Coders",members = {"Holger Rapp (SirVer)","Stanislaw Gackowski (Soeb)","Markus Pfitzner (janus)","Tobi","kaputtnik",},},{subheading = _"Documentation, Help and Wiki",members = {"Erik Sigra (sigra)","Florian Falkner (foldrian)","Florian Weber (bedouin)","Nicolai Haehnle","Holger Rapp (SirVer)","Johannes (nuefke)","Alexander Kahl (wolfpac)","Stanislaw Gackowski (Soeb)","Hanna Podewski (kristin)","king of nowhere","GunChleoc",},},},},{heading = _"Former Elders",image = "images/players/genstats_player.png",entries = {{subheading = _"Graphics",members = {"Salamander","Alexia Death (death)",},},{subheading = _"Homepage",members = {"holymoly","Stuart Eglington (DaaL1973)","Jon Harris (jonsjava)",},},{subheading = _"Sound",members = {"Yannick Warnier",},},{subheading = _"Translation",members = {"Peter Schwanemann (Nasenbaer)","Philipp Niemann (Azagtoth)",},},},},{heading = _"Other",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Matt Howe (mdhowe)","Samuel Tilly (eldamar)","WorldSavior",_"and many, many more (thank you for everything you've done)",},},},},} end
35
36=== modified file 'utils/update_authors.py'
37--- utils/update_authors.py 2016-12-03 16:08:18 +0000
38+++ utils/update_authors.py 2019-02-04 15:47:15 +0000
39@@ -13,6 +13,53 @@
40 # and writes the translator and developer credits to ./txts/developers.lua
41 # The locale information is written to ../data/i18n/locales.lua.
42
43+
44+def add_lua_array(values):
45+ """Creates an array."""
46+
47+ text = '{'
48+ for value in values:
49+ if value.startswith('_"'):
50+ # a translation marker has already been added
51+ text += value
52+ else:
53+ text += '"' + value + '",'
54+ text += '},'
55+ return text
56+
57+
58+def add_lua_table_key(key, value=None, **kwrds):
59+ """Adds a key to a table.
60+
61+ Surrounding brackets of the table have to be applied manually.
62+ If given, the value(s) is/are applied also to the key.
63+
64+ Known kwrds: 'transl', if true a translation marker is added
65+ """
66+
67+ transl = kwrds.get('transl', False)
68+ if key == '':
69+ print("At least a key must be given!")
70+ sys.exit(1)
71+
72+ if value == None:
73+ # We have only a key, which in general shouldn't be translated
74+ return key + ' = '
75+
76+ else:
77+ # A value is present
78+ if transl:
79+ return key + ' = _"' + value + '",'
80+
81+ if isinstance(value, list):
82+ # To get translations, apply '_"foo"' manually to the list
83+ return key + ' = ' + add_lua_array(value)
84+ else:
85+ return key + ' = "' + value + '",'
86+
87+ return ''
88+
89+
90 base_path = os.path.abspath(os.path.join(
91 os.path.dirname(__file__), os.path.pardir))
92
93@@ -103,6 +150,7 @@
94 base_path + '/data/i18n') + '/' + dest_filename
95 dest_file = codecs.open(dest_filepath, encoding='utf-8', mode='w')
96 dest_file.write(lua_locales)
97+dest_file.close()
98
99 print('Writing translators\n')
100 dest_filename = 'translators_data.lua'
101@@ -110,6 +158,7 @@
102 base_path + '/data/txts') + '/' + dest_filename
103 dest_file = codecs.open(dest_filepath, encoding='utf-8', mode='w')
104 dest_file.write(lua_translators)
105+dest_file.close()
106
107 print('Reading developers from JSON')
108 source_path = os.path.normpath(base_path + '/data/txts')
109@@ -120,6 +169,7 @@
110
111 source_file = open(source_path + '/developers.json', 'r')
112 developers = json.load(source_file)['developers']
113+source_file.close()
114
115 lua_string = """-- Do not edit this file - it is automatically generated
116 -- by utils/update_authors.py from developers.json.
117@@ -127,30 +177,31 @@
118 lua_string += 'function developers() return {' # developers
119
120 for category in developers:
121- print('- Adding ' + category['heading'])
122- if category['heading'] != 'Translators': # Unused hook for adding translators
123+ if 'heading' in category and category['heading'] != 'Translators': # Unused hook for adding translators
124+ print('- Adding ' + category['heading'])
125 lua_string += '{' # category
126- lua_string += 'heading = _"' + \
127- category['heading'] + '",' # This will be localized
128- lua_string += 'image = "' + category['image'] + '",'
129-
130- lua_string += 'entries = {' # entries
131-
132+ lua_string += add_lua_table_key('heading', category['heading'], transl=True)
133+ lua_string += add_lua_table_key('image', category['image'])
134+
135+ lua_string += add_lua_table_key('entries')
136+ lua_string += '{' # entries
137 for subcategory in category['entries']:
138 lua_string += '{' # entry
139 if 'subheading' in subcategory:
140- lua_string += 'subheading = _"' + \
141- subcategory['subheading'] + '",' # This will be localized
142-
143- lua_string += 'members = {' # members
144- for member in subcategory['members']:
145- lua_string += '"' + member + '",'
146- lua_string += '},' # members
147-
148+ lua_string += add_lua_table_key('subheading', subcategory['subheading'], transl=True)
149+ members = []
150+ if 'members' in subcategory:
151+ for m in subcategory['members']:
152+ members.append(m)
153+ if 'translate' in subcategory:
154+ for m in subcategory['translate']:
155+ members.append('_"' + m + '",')
156+ lua_string += add_lua_table_key('members', members)
157+
158 lua_string += '},' # entry
159 lua_string += '},' # entries
160-
161 lua_string += '},' # category
162+
163 lua_string += '} end\n' # developers
164
165 print('Writing developers')
166@@ -158,4 +209,5 @@
167 dest_filepath = source_path + '/' + dest_filename
168 dest_file = codecs.open(dest_filepath, encoding='utf-8', mode='w')
169 dest_file.write(lua_string)
170+dest_file.close()
171 print('Done.')

Subscribers

People subscribed via source and target branches

to status/vote changes: