Changes

1,733 bytes added ,  21:47, 17 September 2018
no edit summary
Line 2: Line 2:     
* http://translate.sugarlabs.org/
 
* http://translate.sugarlabs.org/
      
== Hosted on ==
 
== Hosted on ==
   −
[[Machine/treehouse/pootle]]
+
[[Machine/pootle]]
    
== Administrative contact ==
 
== Administrative contact ==
    
* translate AT sugarlabs DOT org
 
* translate AT sugarlabs DOT org
      
== Sysadmins ==
 
== Sysadmins ==
Line 17: Line 15:  
For non-emergency calls, preferably send email to the administrative contact.
 
For non-emergency calls, preferably send email to the administrative contact.
   −
* [[User:SayaminduDasgupta|Sayamindu Dasgupta]] has system admin and Pootle admin privs.
+
* [[User:Sebastian|Sebastian Silva]] has assumed maintainership tasks
* [[User:Cjl|Chris Leonard]] has Pootle administrator privs.
+
* [[User:Cjl|Chris Leonard]] has Pootle administrator privs, and heads the localization efforts.
* [[User:தங்கமணி_அருண்|தங்கமணி_அருண்(Thangamani Arun)]] has system admin and Pootle administrator privs.
  −
* [[User:RafaelOrtiz | Rafael Ortiz]] has system admin and Pootle admin privs.
   
* [[User:Bernie|Bernie Innocenti]] has system admin and Pootle administrator privs, but takes care only of OS-level administration.
 
* [[User:Bernie|Bernie Innocenti]] has system admin and Pootle administrator privs, but takes care only of OS-level administration.
 +
* [[User:SayaminduDasgupta|Sayamindu Dasgupta]] is the former admin. He still has an emeritus sysadmin account and he can be very helpful if contacted by email.
    
== Language Administrators ==
 
== Language Administrators ==
Line 28: Line 25:     
More information on language administrator duties can be found on [[Translation_Team/Administration_QuickStart|this page]]
 
More information on language administrator duties can be found on [[Translation_Team/Administration_QuickStart|this page]]
      
== Notes ==
 
== Notes ==
   −
How to manipulate users:
+
{| class="wikitable"
 +
|-
 +
!scope="row" | Home
 +
|{{Code|/var/lib/pootle}}
 +
|-
 +
!scope="row" | Daemon
 +
|
 +
{{Code|/etc/init.d/apache2}}<br>
 +
{{Code|/etc/init.d/pootle}}
 +
|-
 +
!scope="row" | Logs
 +
|{{Code|/var/log/apache2}}
 +
|-
 +
!scope="row" | Config
 +
|
 +
{{Code|/etc/apache2/sites-enabled/000-default}}<br>
 +
{{Code|/etc/cron.d/pootle}}<br>
 +
|-
 +
!scope="row" | Ports
 +
|
 +
{{Code|80}} HTTP server
 +
|-
 +
|}
   −
django-admin shell --settings=pootle.settings
+
== Upgrade notes ==
>>> from django.contrib.auth.models import User
  −
>>> u = User.objects.get(username='bernie')
  −
>>> u.is_superuser = True
  −
>>> u.save()
      +
*A backup of the DB and pootle localsettings.py must be done also.
 +
*Backup of the /var/lib/pootle structure
 +
*New versions of Django and Translate toolkit must be installed first
 +
*Restore localsettings and DB backup
   −
Various scripts documented here:
+
== Mantainance Notes ==
   −
http://git.sugarlabs.org/projects/pootle-helpers
+
Pootle in Sugar is maintained. (icarito has step-up to be maint)
   −
Scheduled jobs :
+
== Migrated to Pootle 2.5.0 ==
   −
pootle@pootle:~$ cat /etc/cron.d/pootle
+
Notes on the process were recorded here[[Service/translate/Pootle2.5]]
MAILTO="godiard@sugarlabs.org"
  −
MAILTO="rafael@sugarlabs.org"
  −
# 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
      +
== Files ==
   −
''Refresh stats'', needed when the database and the checked out modules get out of sync:
+
Important files and directories in the root directory, {{Code|/var/lib/pootle}}.
   −
/usr/lib/python-django/bin/django-admin.py refresh_stats --settings=pootle.settings
+
{{Code|'''checkouts'''}}<br>
 +
Sources are checked out in this directory and being used to keep final {{Code|.pot}} and {{Code|.po}} files. The hierarchy is:
   −
Important directories in /var/lib/pootle:
+
checkouts/''pootle-project''/''pootle-po-filename-without-po-suffix''/''sources''
   −
'''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.
+
{{Code|'''translations'''}}<br>
 +
Pootle uses this directory as a sources of files to translate, it contains symlinks to files from the {{Code|checkouts}} directory. The hierarchy is:
   −
'''dbs''': internal db used by Pootle, no need to mess directly with it.
+
translations/''pootle-project''/''lang''/''symlinks-to-po-files''
   −
'''maintenance''': contains some sugar-specific scripts to help maintain our Pootle instance, they are managed in http://git.sugarlabs.org/projects/pootle-helpers
+
{{Code|'''maintenance'''}}<br>
 +
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.
+
{{Code|'''maintenance/helpers/potupdater/project_list.ini'''}}<br>
 +
This is an Ini file that contains configuration for all used sources repositories. Each section describes one sources repository, where section name is full path, in form of {{Code|/var/lib/pootle/checkouts/''pootle-project''/''pootle-filename''/''some-path-within-sources''/''pot-file''}}, to the {{Code|.pot}} file, and contains following options:
   −
'''translations''': more Pootle internal data
+
* {{Code|project}} required, meaning-less project name;
 +
* {{Code|vcs}} required, the type of VCS for; supported values are: {{Code|git}};
 +
* {{Code|method}} required, the method how to generate {{Code|.pot}} files from sources; supported values are: {{Code|bundlebuilder}} for activities, {{Code|intltool}} for intltool based projects;
 +
* {{Code|layout}} required, ?;
 +
* {{Code|ignore-files}} optional, the semicolon separated list of file paths that are relative to the sources root; if {{Code|method}} is {{Code|bundlebuilder}} this value will be used to ignore while producing {{Code|.pot files}};
   −
== Upgrade notes ==
+
== Tools ==
*A backup of the DB and pootle localsettings.py must be done also.
  −
*New versions of Django and Translate toolkit must be installed first
  −
*Restore localsettings and DB backup
  −
 
  −
== Mantainance Notes ==
     −
Pootle in Sugar is maintained. (dirakx has step-up to be maint)
+
* {{Code|potupdater/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.
 +
* {{Code|admin/pootlepopulator.py}} checkout sources.
 +
* {{Code|misc/pootle.cron}} all daily basis routines.
 +
* ''...''
   −
We (godiard / martin_xsa / erikos / dirakx / Bernie / Dogi) are trying to resolve the pending issues because we need working translations.
+
== Tips ==
   −
To date translations are working, we are working in a new VM pootle-devel to test upgrades of the Pootle/Django/Translate-toolkit stack. 
+
=== Create new Pootle project ===
   −
The last maintainer was Sayamindu Dasgupta and we asked he our doubts, i am putting here this information.
+
* Create new project in Pootle admin menu, ''admin->projects'';
 +
* Add all needed langs;
 +
* Checkout all sources using command:
   −
== Basic info: ==
+
sudo -u pootle -i python maintenance/helpers/admin/pootlepopulator.py ''pootle-project'' ''git-clone-url'' ''pootle-filename-wo-po-suffix'' ''git-branch''
   −
The pootle directory is:  
+
Example:
/var/lib/pootle
     −
The translations live in:  
+
To checkout the sugar in the branch sucrose-0.94 (in pootle is in the project glucose94) we sshould do:  
   −
  /var/lib/pootle/translations
+
  cd /var/lib/pootle/
 +
sudo -u pootle -i python maintenance/helpers/admin/pootlepopulator.py glucose94 gitorious@git.sugarlabs.org:sugar/mainline.git sugar  sucrose-0.94
   −
== Adding activities ==
+
* Add new sections to the [[#Files|project_list.ini]] file to describe new {{Code|.pot}} locations;
 +
* Run {{Code|misc/pootle.cron}} script from {{Code|pootle}} user to generate all sufficient files;
 +
* Click ''rescan the project files'' in ''Templates->Project->Files'' to reveal newly created {{Code|.pot}} files;
 +
* Click ''Update from templates'' for all languages in newly created project to peek up {{Code|.po}} files symlinked by {{Code|misc/pootle.cron}} script.
   −
'''The git url must be writable by Pootle.'''
+
=== 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
+
Before registering new activity on http://translate.sugarlabs.org, make sure that:
******** 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: ==
+
* New activity is being hosted on http://git.sugarlabs.org;
 +
* The {{Code|pootle}} user was added to the repository with commit access rights;
 +
* You have a proper {{Code|GIT_URL}} to clone repository from with commit permissions, e.g., {{Code|gitorious@git.sugarlabs.org:cartoon-builder/mainline.git}}; that might be found on home page in Gitorious, e.g., http://git.sugarlabs.org/cartoon-builder, in ''Clone & push urls'' field with selector ''SSH'';
 +
* You know the proper {{Code|CATEGORY}} name to register the project in;
 +
* There is an unique {{Code|NAME}} of activity, this name will be used as a name of project in Pootle and directory name;
 +
* You know the proper {{Code|BRANCH}} in Git repository to use for translation; by default, it is {{Code|master}}.
   −
* Each branch (eg: glucose-0.90) is a directory in the translations directory
+
To process the registration, login to translate.sugarlabs.org and enter:
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
+
sudo -u pootle python /var/lib/pootle/maintenance/helpers/admin/pootlepopulator.py ''<CATEGORY>'' ''<GIT_URL>'' /var/lib/pootle/checkouts/''<CATEGORY>''/''<NAME>'' [''<BRANCH>'']
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
+
After that, for [http://git.sugarlabs.org/pootle-helpers pootle-helper] project in {{Code|potupdater/project_list.ini}}, add the following strings:
   −
The script can be found in maintainance/helpers directory in /var/lib/pootle
+
[/var/lib/pootle/checkouts/''<CATEGORY>''/''<NAME>''/po/''<.pot-filename>'']
 +
project = ''<NAME>''
 +
vcs = git
 +
method = bundlebuilder
 +
layout = gnu
   −
* Once this is done, you need to create project in Pootle admin - go
+
Commit new changes, and pull from on pootle VM:
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.
+
(cd /var/lib/pootle/maintenance/helpers; sudo -u pootle git pull origin master)
   −
* '''Add''' the new projects to  ''maintenance/helpers/potupdater/project_list.ini''
+
Do ''update from templates'' on the ''templates'' project on Pootle's frontend. And wait until daily cron job will populate languages for newly registered project, or run it immediately:
    +
sudo -u pootle python /var/lib/pootle/maintenance/helpers/admin/add_langs.py
   −
[1] http://git.sugarlabs.org/pootle-helpers/mainline/blobs/master/admin/pootlepopulator.py
+
Then your activity must be in place to be translated and ''commit to VCS/update from VCS'' links must be activated.
   −
== Working with git in the pootle server ==
+
=== Working with git in the pootle server ===
    
The git operations must be done by the pootle user:
 
The git operations must be done by the pootle user:
Line 160: Line 169:  
Other important script is pogenerator.py this script re-generates pot in each repo.
 
Other important script is pogenerator.py this script re-generates pot in each repo.
   −
== Resolving conflicts ==  
+
=== 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.
 
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.
Line 169: Line 178:  
  sudo -u pootle git pull -s ours
 
  sudo -u pootle git pull -s ours
   −
 
+
=== Checking that pootle is working ===
== Checking that pootle is working ==
      
* When commiting from pootle interface, repos in git reflect the commit as something similar to:
 
* When commiting from pootle interface, repos in git reflect the commit as something similar to:
Line 183: Line 191:  
  ####### Checking POT for Write (master) ######
 
  ####### Checking POT for Write (master) ######
   −
== Pootle scripts: ==
+
=== Etoys .pot update ===
 +
 
 +
Go to Etoys translation directory (that is svn checkout from upstream project):
 +
 
 +
su - pootle
 +
cd ~/translations/etoys_new
 +
 
 +
Since there is no need in changing .pot files on Pootle level, revert local changes if they present:
 +
 
 +
svn revert templates/*.pot
 +
 
 +
Fetch new update from the upstream:
 +
 
 +
svn up templates
 +
 
 +
=== Tips ===
 +
 
 +
* How to manipulate users:
   −
*http://git.sugarlabs.org/pootle-helpers/mainline/trees/master/potupdater
+
django-admin shell --settings=pootle.settings
*/usr/lib/python2.6/dist-packages/translate/storage/versioncontrol/git.py (Translate)
+
>>> from django.contrib.auth.models import User
 +
>>> u = User.objects.get(username='bernie')
 +
>>> u.is_superuser = True
 +
>>> u.save()
   −
== Restarting Pootle and apache ==
+
* Refresh stats, needed when the database and the checked out modules get out of sync:
   −
  /etc/init.d/apache2 restart
+
  sudo -u pootle django-admin refresh_stats --settings=pootle.settings
service pootle start or /etc/init.d/pootle restart
+
 
 +
* If you have a commit error file because of only read git url, please rm the old '''/var/lib/pootle/checkouts/''' files related with that activity or project and re run pootlepopulator.
 +
 
 +
* Also if there are errors related with git add, is likely that some lang.po files are not versionated on pootle server, please run '''git add .''' inside the activity or project.
 +
 
 +
* When there are '''commit to cvs/update to cvs''' links missing in activities or projects please check git url in .git/config , this URL must be writable by pootle.
    
== References ==
 
== References ==
   −
* http://translate.sourceforge.net/wiki/pootle/installatio
+
* http://translate.sourceforge.net/wiki/pootle/installation
 
   
* http://lists.laptop.org/listinfo/localization
 
* http://lists.laptop.org/listinfo/localization
 +
* http://git.sugarlabs.org/pootle-helpers
 +
* /usr/lib/python2.6/dist-packages/translate/storage/versioncontrol/git.py (Translate)
    
[[Category:Service|translate]]
 
[[Category:Service|translate]]