Translations, Damned Lies and Transifex



Hey all.

I'm working on a system very closely related to Damned lies, so I believe I
should update you guys on my work, and get your feedback (positive or negative,
both accepted!) for what I'm doing. I'm sorry I delayed to do this, but the
picture wasn't really clear until now.

For a while now, along with contributing to the Greek GNOME team, I've been
working on Fedora's L10n infrastructure. We're moving it from RH to Fedora
systems, so some work was needed to be done.

Firstly, we needed a new web frontend for statistics. Damned Lies (DL), and the
whole GNOME i18n infrastructure rocks, so it was a no-brainer to base off these
approaches. We quickly got a system up and running using DL:

  http://translate.fedoraproject.org/

DL was a great piece of software and easily customizable -- a huge thanks to
Danilo and the rest of the folks who work on it. The templates are totally
changed, but I'm trying my best to push any update on the python files upstream
because there's no reason to maintain a fork/patchset for them.

So the problem is that Fedora Infrastructure supports all CVS, SVN, Mercurial
and git version control systems (VCS) for project hosting and also, some
Fedora-related modules are hosted out of the `*fedoraproject.org` space (*fpo).
But translators are only given access on `cvs.fpo`, so they can't commit files
to these remote systems.

The translator shouldn't care where the module is hosted, he just wants to send
a PO file in. Through GSoC 2007, I begun working on a system (transifex) that
will give them access to submit PO files to a remote VCS. Information about it
(together with an INSTALL file) can be found at:

  https://hosted.fedoraproject.org/projects/transifex

The idea is that transifex will act as a proxy/mediator for translation commits.
A translator will login to the transifex instance running on a host like
`translate.fpo`, choose a module, a PO file to upload, and a destination file
and click "submit". The system will commit the file for him. Underneath this is
achieved by having the VCS admin create a user (eg. fedora-transifex) with a
dedicated SSH key, and give it write access to the specific modules accepting
translations. The transifex admin will then hook the repo and module up with the
system. Each commit will be done by the "fedora-transifex" user, and the actual
user's details (name, surname, email, fedora username) will be written in the
commit message and Changelog file. Transifex supports filaname filters, so even
if a module maintainer can't add ACLs to the repo, he can define them on the
transifex side; for example, .*/po/(LINGUAS|Changelog|.*po$).

The software is written in Turbogears and its architecture is similar to DL's.
Basically it's an add-on to the statistics, providing a web form for submission.
I am trying to retain compatibility with DL URLs so that if some day we decide
to port DL to Turbogears, URLs won't be changed. Pushing code from Transifex to
upstream DL is even harder because the model has changed but again, I'm trying
my best to cope with everything.

I believe the whole project opens up some exciting opportunities for
translations. Small projects hosted outside of big ones now have a chance to get
some attention from translation communities without the requirement to relocate
their code. And also, two communities can collaborate better by providing
corrections to each other's modules. In the end, I see probably some mechanism
to approve translation landing from language maintainers or something, but this
is a bit in the future for now. :)

Oh, BTW, I'll be at GUADEC and will be glad to discuss it with anyone also
attending. Here's my proposal for a lightning talk, not yet accepted though.

  http://www.guadec.org/node/786

So, this is it. Any ideas, suggestions, comments, are welcome. Sorry for the
long email.

-d


-- 
Dimitris Glezos
Jabber ID: glezos jabber org, GPG: 0xA5A04C3B
http://dimitris.glezos.com/

"He who gives up functionality for ease of use
loses both and deserves neither." (Anonymous)
-- 




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]