Convert postats to python

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20130 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
José Matox 2007-09-07 16:37:38 +00:00
parent e9a2729037
commit f99c05426a
2 changed files with 139 additions and 3 deletions

View File

@ -53,7 +53,7 @@ DISTFILES = $(DISTFILES.common) Makevars \
$(POFILES) $(GMOFILES) \ $(POFILES) $(GMOFILES) \
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
DISTFILES.extra1 = lyx_pot.py postats.sh pocheck.pl DISTFILES.extra1 = lyx_pot.py postats.py pocheck.pl
POTFILE_IN_DEPS = $(shell find $(top_srcdir)/src -name Makefile.am) POTFILE_IN_DEPS = $(shell find $(top_srcdir)/src -name Makefile.am)
@ -413,8 +413,8 @@ ui_l10n.pot: $(top_srcdir)/lib/ui/*.ui $(top_srcdir)/lib/ui/*.inc
LC_ALL=C ; export LC_ALL ; \ LC_ALL=C ; export LC_ALL ; \
python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t ui ${top_srcdir}/lib/ui/*.ui ${top_srcdir}/lib/ui/*.inc python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t ui ${top_srcdir}/lib/ui/*.ui ${top_srcdir}/lib/ui/*.inc
i18n.inc: $(POFILES) postats.sh i18n.inc: $(POFILES) postats.py
(cd $(srcdir) ; ./postats.sh $(POFILES)) >$@ (cd $(srcdir) ; python postats.py $(POFILES)) >$@
external_l10n.pot: $(top_srcdir)/lib/external_templates external_l10n.pot: $(top_srcdir)/lib/external_templates
python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t external ${top_srcdir}/lib/external_templates python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t external ${top_srcdir}/lib/external_templates

136
po/postats.py Normal file
View File

@ -0,0 +1,136 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (C) 2007 Michael Gerz <michael.gerz@teststep.org>
# Copyright (C) 2007 José Matos <jamatos@lyx.org>
#
# This program 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.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
"""
This script extracts some information from the po file headers (last
translator, revision date), generates the corresponding gmo files
to retrieve the number of translated/fuzzy/untranslated messages,
and generates a PHP web page.
Invocation:
postats.py po_files > "pathToWebPages"/i18n.inc
"""
# modify this when you change version
# Note that an empty lyx_branch variable (ie svn trunk)
# will "do the right thing".
lyx_version="1.6.0svn"
lyx_branch=""
import os
import sys
def extract_number(line, issues, prop):
"""
line is a string like
'588 translated messages, 1248 fuzzy translations, 2 untranslated messages.'
Any one of these substrings may not appear if the associated number is 0.
issues is the set of words following the number to be extracted,
ie, 'translated', 'fuzzy', or 'untranslated'.
extract_number returns a list with those numbers, or sets it to
zero if the word is not found in the string.
"""
for issue in issues:
i = line.find(issue)
if i == -1:
prop[issue] = 0
else:
prop[issue] = int(line[:i].split()[-1])
def read_pofile(pofile):
""" Read the header of the pofile and return it as a dictionary"""
header = {}
read_header = False
for line in open(pofile):
line = line[:-1]
if line[:5] == 'msgid':
if read_header:
break
read_header = True
continue
if not line or line[0] == '#' or line == 'msgstr ""' or not read_header:
continue
line = line.strip('"')
args = line.split(': ')
if len(args) == 1:
continue
header[args[0]] = args[1].strip()[:-2]
return header
def run_msgfmt(pofile):
""" pofile is the name of the po file.
The function runs msgfmt on it and returns corresponding php code.
"""
if not pofile.endswith('.po'):
print >> sys.stderr, "%s is not a po file" % pofile
sys.exit(1)
dirname = os.path.dirname(pofile)
gmofile = pofile.replace('.po', '.gmo')
header = read_pofile(pofile)
charset= header['Content-Type'].split('charset=')[1]
# po file properties
prop = {}
prop["langcode"] = os.path.basename(pofile)[:-3]
prop["date"] = header['PO-Revision-Date'].split()[0]
prop["email"] = header['Last-Translator'].split('<')[1][:-1]
translator = header['Last-Translator'].split('<')[0].strip()
try:
prop["translator"] = translator.decode(charset).encode('ascii','xmlcharrefreplace')
except LookupError:
prop["translator"] = translator
p_in, p_out = os.popen4("msgfmt --statistics -o %s %s" % (gmofile, pofile))
extract_number(p_out.readline(),
('translated', 'fuzzy', 'untranslated'),
prop)
return """
array ( 'langcode' => '%(langcode)s', "date" => "%(date)s",
"msg_tr" => %(translated)d, "msg_fu" => %(fuzzy)d, "msg_nt" => %(untranslated)d,
"translator" => "%(translator)s", "email" => "%(email)s")""" % prop
if __name__ == "__main__":
if lyx_branch:
branch_tag = "branches/%s" % lyx_branch
else:
branch_tag = "trunk"
print """<?php
// The current version
\$lyx_version = "%s";
// The branch tag
\$branch_tag = "%s";
// The data itself
\$podata = array (%s
)?>
""" % (lyx_version, branch_tag, ",".join([run_msgfmt(po) for po in sys.argv[1:]]))