1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # A simple script that adds all authors from transifex, which are
- # listed in comments at the beginning of the file, to the
- # 'translator-credits' translations - where launchpad added them
- # and which are shown in stk.
- #
- # Usage: update_po_authors.py PATH_TO/LANGUAGE.po
- #
- # IMPORTANT note: this script must be run on a file downloaded
- # from transifex, not on a file on which this script had
- # been run before (otherwise the transifex authors would
- # be added again and again)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #
- # Less important note: The specified file is overwritten without
- # a backup! Make sure the git status is unmodified.
- import re
- import sys
- if __name__ == "__main__":
- if len(sys.argv) < 2:
- print "Usage: getpo_authors.py PATH_TO_PO_FILE"
- sys.exit(-1)
- for filename in sys.argv[1:]:
- print("Processing file ", filename)
- f = open(filename, "r")
- if not f:
- print "Can not find", filename
- exit
- lines = f.readlines()
- f.close()
- new_authors = []
- found = 0
- # Find all authors with a simple finite state machine:
- contributions = -1
- line_count = 0
- for i in lines:
- line = i[:-1] # remove \n
- if line=="# Translators:":
- found = 1
- elif found and line[:2]=="# " and line [:14]!="# FIRST AUTHOR":
- new_authors.append(line[2:])
- elif line[:5]=="msgid":
- found = 0
- elif line[:31]== "msgstr \"Launchpad Contributions":
- contributions = line_count
- line_count = line_count + 1
- # Delete all email addresses - not sure if the authors
- # would want them to be published
- email=re.compile(" *<.*@.*\..*> *") # one @ and one dot at least
- for i in range(len(new_authors)):
- g = email.search(new_authors[i])
- if g:
- new_authors[i] = new_authors[i][:g.start()] \
- + new_authors[i][g.end():]
- # Get the old authors from the translator-credits string:
- if contributions>0:
- # Ignore the first entry, which is "msgstr ...", and the
- # last two characters, which are the '"\n'.
- old_authors = lines[contributions][:-2].split("\\n")[1:]
- for i in range(len(old_authors)):
- old_authors[i] = old_authors[i].strip()
- else:
- old_authors=[]
-
- all_authors = old_authors + new_authors;
- all_authors = sorted(all_authors, key=lambda x: x.lower())
- all_authors_string = reduce(lambda x,y: x+"\\n"+y, all_authors, "")
- credits_line = "msgstr \"Launchpad Contributions:%s\"\n"%all_authors_string
- # If no old authors exists, write a new entry:
- if contributions==-1:
- lines.append("\n")
- lines.append("#: src/states_screens/credits.cpp:209\n")
- lines.append("msgid \"translator-credits\"\n")
- lines.append(credits_line)
- else:
- # Otherwise just replace the old contribution string
- lines[contributions] = credits_line
- # Overwrite old file
- f = open(filename, "w")
- for i in lines:
- f.write(i)
- f.close()
-
- print("Done with ", filename)
-
|