Difference between revisions of "Service/translate"

From Sugar Labs
Jump to navigation Jump to search
Line 47: Line 47:
Scheduled jobs :
Scheduled jobs :
  pootle@pootle:~$ cat /etc/crontab.d/pootle
  pootle@pootle:~$ cat /etc/cron.d/pootle  
  # m h  dom mon dow user command
  30 00 * * * pootle /usr/bin/python /var/lib/pootle/maintenance/helpers/potupdater/pogenerator.py  /var/lib/pootle/maintenance/helpers/potupdater/project_list.ini
  # m h  dom mon dow user command
  30 00 * * * pootle /usr/bin/python       /var/lib/pootle/maintenance/helpers/potupdater/pogenerator.py  /var/lib/pootle/maintenance/helpers/potupdater/project_list.ini
  #00 00 * * * pootle git --git-dir=/var/lib/pootle/checkouts/etoys/.git pull
  #00 00 * * * pootle git --git-dir=/var/lib/pootle/checkouts/etoys/.git pull
  45 00 * * * pootle python /var/lib/pootle/langpackgen/src/LangPackGen/pack_generator.py /var/lib/pootle/langpackgen/data/langpackgen_84.ini /var/lib/pootle/public_html/packs/0.84
  45 00 * * * pootle python   /var/lib/pootle/langpackgen/src/LangPackGen/pack_generator.py   /var/lib/pootle/langpackgen/data/langpackgen_84.ini   /var/lib/pootle/public_html/packs/0.84
  40 00 * * * pootle python /var/lib/pootle/langpackgen/src/LangPackGen/pack_generator.py /var/lib/pootle/langpackgen/data/langpackgen_82.ini /var/lib/pootle/public_html/packs/0.82
  40 00 * * * pootle python   /var/lib/pootle/langpackgen/src/LangPackGen/pack_generator.py   /var/lib/pootle/langpackgen/data/langpackgen_82.ini /var/lib/pootle/public_html/packs/0.82
50 00 * * * pootle  /var/lib/pootle/maintenance/helpers/potupdater/check_unmerged_translations.s h
55 00 * * * pootle /var/lib/pootle/maintenance/helpers/potupdater/check_bad_ownership.sh
Refresh stats, needed when the database and the checked out modules get out of sync:
''Refresh stats'', needed when the database and the checked out modules get out of sync:
  /usr/lib/python-django/bin/django-admin.py refresh_stats --settings=pootle.settings
  /usr/lib/python-django/bin/django-admin.py refresh_stats --settings=pootle.settings

Revision as of 12:33, 8 February 2011


Hosted on


Administrative contact

  • translate AT sugarlabs DOT org


For non-emergency calls, preferably send email to the administrative contact.

Language Administrators

Language administrators are typically native speakers of a given language that take on responsibility (granted by a Pootle administrator after a request to the Localization list) for reviewing and committing PO files for a given language. Contacting language administrators is generally done by posting to the Localization list.

More information on language administrator duties can be found on this page


How to manipulate users:

django-admin shell --settings=pootle.settings
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='bernie')
>>> u.is_superuser = True
>>> u.save()

Various scripts documented here:


Scheduled jobs :

pootle@pootle:~$ cat /etc/cron.d/pootle 
# m h  dom mon dow user command
30 00 * * * pootle /usr/bin/python       /var/lib/pootle/maintenance/helpers/potupdater/pogenerator.py  /var/lib/pootle/maintenance/helpers/potupdater/project_list.ini
#00 00 * * * pootle git --git-dir=/var/lib/pootle/checkouts/etoys/.git pull
45 00 * * * pootle python   /var/lib/pootle/langpackgen/src/LangPackGen/pack_generator.py   /var/lib/pootle/langpackgen/data/langpackgen_84.ini   /var/lib/pootle/public_html/packs/0.84
40 00 * * * pootle python    /var/lib/pootle/langpackgen/src/LangPackGen/pack_generator.py   /var/lib/pootle/langpackgen/data/langpackgen_82.ini  /var/lib/pootle/public_html/packs/0.82
50 00 * * * pootle   /var/lib/pootle/maintenance/helpers/potupdater/check_unmerged_translations.s h
55 00 * * * pootle /var/lib/pootle/maintenance/helpers/potupdater/check_bad_ownership.sh

Refresh stats, needed when the database and the checked out modules get out of sync:

/usr/lib/python-django/bin/django-admin.py refresh_stats --settings=pootle.settings

Important directories in /var/lib/pootle:

checkouts: modules are checked out in this directory. pogenerator.py pulls from git and svn so we have updated sources, then it generates a new .pot file from them. Translated strings get reflected in the .po files in each module, and when the language maintainer clicks the Commit to VCS link, get pushed back to the upstream module.

dbs: internal db used by Pootle, no need to mess directly with it.

maintenance: contains some sugar-specific scripts to help maintain our Pootle instance, they are managed in http://git.sugarlabs.org/projects/pootle-helpers

po: contains xapian indexes for the search feature.

translations: more Pootle internal data

Upgrade notes

Mantainance Notes

Pootle in Sugar is actually unmaintained.

We (godiard / martin_xsa / erikos / dirakx) are trying to resolve the pending issues because we need working translations but need a real maintainer.

The last maintainer was Sayamindu Dasgupta and we asked he our doubts, i am putting here this information.

Basic info:

The pootle directory is:


The translations live in:


Adding activities


2!root@pootle:/var/lib/pootle/maintenance/helpers/admin# sudo -u pootle python ./pootlepopulator.py  honey git://git.sugarlabs.org/fototoon/mainline.git fototoon
******** Cloning git://git.sugarlabs.org/fototoon/mainline.git to /var/lib/pootle/checkouts/honey/fototoon *********
Running git clone git://git.sugarlabs.org/fototoon/mainline.git /var/lib/pootle/checkouts/honey/fototoon
Initialized empty Git repository in /var/lib/pootle/checkouts/honey/fototoon/.git/
******** Switching to branch master *********
Running  git checkout --track -b master origin/master
Running git pull
Already up-to-date.
********* Git operation completed, moving to next stage ********
********* Searching for POT file *********
********* Found POT file FotoToon.pot *********
********* Starting to symlink files *********
 Linking /var/lib/pootle/checkouts/honey/fototoon/po/es.po to /var/lib/pootle/translations/honey/es/fototoon.po
 Linking /var/lib/pootle/checkouts/honey/fototoon/po/fr.po to /var/lib/pootle/translations/honey/fr/fototoon.po
 Linking /var/lib/pootle/checkouts/honey/fototoon/po/FotoToon.pot to /var/lib/pootle/translations/honey/templates/fototoon.pot
********* Done Symlinking *********

Creating branches:

  • Each branch (eg: glucose-0.90) is a directory in the translations directory

Each project is a subdirectory inside this directory (eg: glucose-0.90/sugar) These are actually symlinks to directories /var/lib/pootle/checkouts

  • There's a script called pootlepopulator.py[1] It is invoked as

pootlepopulator.py category GIT_URL checkout_directory [branch] So, assuming the directory /var/lib/pootle/translations/sucrose-0.90 exists, you can issue a command:

pootlepopulator.py sucrose-0.90 git://dev.laptop.org/git/sugar sugar sucrose-0.90

The script can be found in maintainance/helpers directory in /var/lib/pootle

  • Once this is done, you need to create project in Pootle admin - go

to admin->projects and createa project called Sucrose 0.90 with the code sucrose-0.90 (same as the directory name)

  • Restart Pootle and Apache if the new project does not show up after this...
  • Add the new projects to maintenance/helpers/potupdater/project_list.ini


[1] http://git.sugarlabs.org/pootle-helpers/mainline/blobs/master/admin/pootlepopulator.py

Working in git in the pootle server

The git operations must be done by the pootle user:

sudo -u pootle git log
sudo -u pootle git push origin  sucrose-0.82

Resolving conflicts

If the maintainer did a commit with a file in the po directory we will have a conflict, and Pootle can not do a pull.

Pootle build the pot file from the sources, if we compare and the translations are updated in pootle we can do a pull preserving the info in pootle:

sudo -u pootle git pull -s ours

Pootle scripts:


Restarting Pootle

/etc/init.d/apache2 restart
service pootle start