Pootle: Difference between revisions

From OLPC
Jump to navigation Jump to search
(→‎Register as a translator: https appears to not work, improved language)
 
(178 intermediate revisions by 98 users not shown)
Line 1: Line 1:
{{L10n-sl-migration}}
{{olpcboxtop}}
{{olpcboxtop|toptext=}}
{{OBX team|[[User:RafaelOrtiz|Rafael Ortiz]], [[User:Xavi|Xavier Alvarez]]|[[User:Alfonsodg|Alfonsodg]]}}
{{OBX team|[[User:RafaelOrtiz|Rafael Ortiz]], [[User:Alfonsodg|Alfonsodg]]|[[User:Xavi|Xavier Alvarez]]}}
{{OBX irc|#olpc-content}}
{{OBX irc|#olpc-pootle, #olpc-content}}
{{olpcboxbottom}}
{{olpcboxbottom}}
{{TOCright}}
{{TOCright}}
<big>
<big>
; NOTICE : The use of [[Pootle]] is currently under test and should by no means be taken or considered to be part of the [[Localization]] process for the XO.
; UPDATE : The test has gone forward and we are in the process of establishing the workflow to make it the [[Localization|Localization (L10N)]] platform of the XO.
; WANTED : Volunteers both for translating and coordinating. If interested [[Pootle#Sign-up|sign-up as a volunteer]]!
</big>
</big>


Some ways to find the translate server:
These are the notes taken and rough sketches for the processes involved in the [[localization]] effort in order to use [http://www.wordforge.org/drupal/projects/wordforge/tools/pootle '''Pootle'''] as a more liberal L10n platform.
* '''[http://translate.sugarlabs.org http://translate.sugarlabs.org]'''

These are the notes taken and rough sketches for the processes involved in the [[localization]] effort in order to use [http://translate.sourceforge.net/wiki/pootle/index '''Pootle'''] as a more liberal L10n platform.


There are several scenarios that depend on the roles and their associated responsibilities (ie: translators, coders, administrators, etc). Below we outline the two most important ones from the POV of the [[translators]] that we could classify as either the ''opportunistic translator'' (fixing a typo or translating a few missing strings) and a ''registered translator'' (that is somehow more committed with the whole [[Localization|l10n]] reality).
There are several scenarios that depend on the roles and their associated responsibilities (ie: translators, coders, administrators, etc). Below we outline the two most important ones from the POV of the [[translators]] that we could classify as either the ''opportunistic translator'' (fixing a typo or translating a few missing strings) and a ''registered translator'' (that is somehow more committed with the whole [[Localization|l10n]] reality).


If we consider that in the ultimate case children will be dealing with code (thus with [http://en.wikipedia.org/wiki/Gettext <tt>gettext</tt>]), we want things and processes to be as simple and straight forward as possible, so that in the end anybody will be able to translate or at least localize content to some degree. With this in mind, we aim for an environment that will:
If we consider that in the ultimate case children will be dealing with code (thus with [http://en.wikipedia.org/wiki/Gettext <tt>gettext</tt>]), we want things and processes to be as simple and straight forward as possible, so that in the end anybody, including children, will be able to translate or at least localize content to some degree. With this in mind, we aim for an environment that will:
* allow anybody to make suggestions,
* allow anybody to make suggestions,
* allow registered and trusted users to review and make translations, and
* allow registered and trusted users to review and make translations, and
* administrators to commit.
* administrators to commit.

If the quality is not satisfactory, we can probably revert to more 'traditional' and bureaucratic structures; or try to develop tools that guarantee or hint appropriately without sacrificing the liberty and agility that will be required by children.
==How to Translate for OLPC XO and Sugar using Pootle==
* See slides at http://opensource.sfsu.edu/node/452


== i18n & L10n ==
== i18n & L10n ==


Most people will argue that [[Localization|localization (L10n / l10n)]] concerns and issues should be tackled way before coding is finished, and quite a few will categorically say that it will be too late by then. Avoiding the philosophical and formal aspects, and taking a more pragmatic approach, the truth is that L10n is more often than not an afterthought and [[Python i18n|internationalization (i18n)]] an annoying pre-requisite... that has to be done.
Most people will argue that [[Localization|localization (L10n / l10n)]] concerns and issues should be tackled way before coding is finished, and quite a few will categorically say that it will be too late by then. Avoiding the philosophical and formal aspects, and taking a more pragmatic approach, L10n is usually an afterthought and [[Python i18n|internationalization (i18n)]] an annoying prerequisite... that has to be done.


In the context of the OLPC XO [[software]] and [[activities]], and for practical purposes will avoid the debate on exactly where does L10n meets the code and start from the point where the output of i18n is used as the input for the l10n process. In other words, we'll elaborate based on the simplistic model that goes along the line:
In the context of the OLPC XO [[software]] and [[activities]], and for practical purposes will avoid the debate on exactly where does L10n meets the code and start from the point where the output of i18n is used as the input for the l10n process. In other words, we'll elaborate based on the simplistic model that goes along the line:
# programmer uses gettext function calls around human readable language in the source code
# generate POT from the source code (output of the i18n process)
# generate POT (gettext Portable Object Template) from the source code (output of the i18n process)
# generate PO based on POT
# generate PO (gettext Portable Object) based on POT
# translate / populate the PO with locale specific content
# translate / populate the PO with locale specific content
# generate the final PO (or MO) (output of the l10n process)
# generate the final PO (or MO) (gettext Machine Object, output of the l10n process)
# the executable code uses the PO (or MO) to comunicate with the final user
# the executable code uses the PO (or MO) to comunicate with the final user



=== Developers ===
=== Developers ===
: ''see [http://en.wikipedia.org/wiki/Internationalization_and_localization Wikipedia's overview], [[Python_i18n|Python internationalization]],
[http://translate.sourceforge.net/wiki/guide/start the Translate project's guide], [http://developer.kde.org/documentation/library/kdeqt/kde3arch/kde-i18n-howto.html KDE i18n guide], [http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html GNU gettext manual] and [http://www.google.com/search?q=i18n+internationalization+internationalisation other sources]''


Developers willing to read a bit more about i18n & L10n, could probably profit from [http://en.wikipedia.org/wiki/Internationalization_and_localization Wikipedia's overview], [http://translate.sourceforge.net/wiki/guide/start sourceforge's practical view], [http://developer.kde.org/documentation/library/kdeqt/kde3arch/kde-i18n-howto.html KDE i18n guide], [http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html GNU gettext manual] and other sources.


Regardless of how much or how good the i18n effort is, the bottom line from [[Pootle]]'s point of view is that it needs one (or more) '''<tt>.POT</tt>''' files. Needless to say, developers should be aware that '''localization is NOT just about strings''', as it includes [http://translate.sourceforge.net/wiki/plurals_programmers plurals], numbers, dates, currencies, text-flow, scripts, fonts... and that it needs to be tested (ie: [http://en.wikipedia.org/wiki/Pseudolocalization pseudolocalization testing]) that needs to be considered in the overal development cycle. Also, if you want your activity to be properly localized, think about [http://translate.sourceforge.net/wiki/translation_comments commenting your strings].
Developers willing to read a bit more about i18n & L10n, should review the links above. Regardless of how much or how good the i18n effort is, [[Pootle]]'s needs one (or more) '''<tt>.POT</tt>''' files. Developers should be aware that '''localization is NOT just about instrumenting strings''', as it includes [http://translate.sourceforge.net/wiki/plurals_programmers plurals], numbers, dates, currencies, text-flow, scripts, fonts... and that it needs to be tested (ie: [http://en.wikipedia.org/wiki/Pseudolocalization pseudolocalization testing]) that needs to be considered in the overall development cycle. Also, if you want your activity to be properly localized, think about [http://translate.sourceforge.net/wiki/guide/translation_comments commenting your strings].


=== Translators ===
=== Translators ===
: ''see '''[http://dev.laptop.org/~sayamindu/pootleforxo2.pdf Translating for the OLPC project using Pootle]''', '''[http://www.bengalinux.org/devel_guide/ch03.html The Translator's Guide]''', [http://translate.sourceforge.net/wiki/guide/start L10n guide], [http://translate.sourceforge.net/wiki/guide/start#translation translation guide], {{pending|more links to come...}}''


Being able to understand or grasp the intended meaning of some text in a language does not make you a [[translator]], but [http://en.wikipedia.org/wiki/Erasmus "In the land of the blind, the one-eyed man is king."] and all collaborations are welcome, although we also recommend reading some guidelines and documentation that may at least help you avoid some of the basic or typical pitfalls: [http://translate.sourceforge.net/wiki/guide/start L10n guide], [http://translate.sourceforge.net/wiki/guide/start#translation translation guide], {{pending|more links to come}}...
Being able to understand or grasp the intended meaning of some text in a language does not make you a translator, but [http://en.wikipedia.org/wiki/Erasmus "In the land of the blind, the one-eyed man is king."] and all collaborations are welcome, although we also recommend reading some guidelines and documentation that may at least help you avoid some of the basic or typical errors and pitfalls.


== Basic Scenarios ==
== Basic Scenarios ==


The basic idea is to allow the participation of anybody willing to put some effort while trying to keep a given quality of the translations.
== Observations ==


* You can download the PO, so there's no forcing of the on-line UI (although you need the [[#User permissions|upload right]] to inject it back.
* You can download the PO, so there's no forcing of the on-line UI (although you need the [[#User permissions|upload right]] to inject it back. So before going the ''offline road'' please coordinate with the [[#language administration|admins]].
* In the translation interface, fuzzy entries are grayed out and there's a gray vertical line separating the terms
* In the translation interface, fuzzy entries are grayed out and there's a gray vertical line separating the terms


Line 50: Line 61:
This user '''just wants to help'''. She/he doesn't want to get tangled in the administrative tasks. The only possible collaboration available is to [[#User permissions|''suggest'']] translations (which will be reviewed by users who have been granted the [[#user permissions|Review permission]] in a particular language).
This user '''just wants to help'''. She/he doesn't want to get tangled in the administrative tasks. The only possible collaboration available is to [[#User permissions|''suggest'']] translations (which will be reviewed by users who have been granted the [[#user permissions|Review permission]] in a particular language).


After '''navigating''' to the [http://democentro.com:81 olpc pootle server] '''project:''' [http://democentro.com:81/projects/olpc olpc] '''language:''' [http://democentro.com:81/es/olpc spanish] to finally reach a '''file''' (ie: [http://democentro.com:81/es/olpc/TamTamSynthLab.master.es.po?translate=1&view=1 '''TamTamSynthLab'''])
After '''navigating''' to the [http://solar.laptop.org:5080 olpc pootle server] '''project:''' [http://solar.laptop.org:5080/projects/olpc olpc] '''language:''' [http://solar.laptop.org:5080/es/olpc spanish] to finally reach a '''file''' (ie: [http://solar.laptop.org:5080/es/olpc/TamTamSynthLab.master.es.po?translate=1&view=1 '''TamTamSynthLab'''])


The interface will display a series of PO entries (one will have the focus&mdash;if it doesn't, hovering over one will make an 'Edit' link appear that enables it&mdash;showing an entry field, and the following controls:
The interface will display a series of PO entries (one will have the focus&mdash;if it doesn't, you can double click the entry, or hovering over one will make an 'Edit' link appear that enables it&mdash;showing an entry field, and the following controls:


{{pending|a picture is worth 1000 words}}
{{pending|a picture is worth 1000 words}}
Line 63: Line 74:
* Translator comments field &mdash; comments either extracted from the source code, or added by other translators
* Translator comments field &mdash; comments either extracted from the source code, or added by other translators
The opportunistic translator then proceeds to navigate the file/s entering suggestions (to be processed later by the [[#User permissions|reviewers]]).
The opportunistic translator then proceeds to navigate the file/s entering suggestions (to be processed later by the [[#User permissions|reviewers]]).

----


; Admin notes : The [[#User permissions|<tt>Suggest</tt> permission]] must be granted on a per-language-project basis.
; Admin notes : The [[#User permissions|<tt>Suggest</tt> permission]] must be granted on a per-language-project basis.
Line 70: Line 83:


Except for the mandatory [[#Register as a translator|pre-condition to register]], which enables the extra <tt>[Submit]</tt> button when translating, the overall process is quite similar to that of the [[#Opportunistic translator]]. On the other hand, several [[#User permissions|user-specific permissions]] may apply (ie: off-line translation) and the GUI will adapt and offer them. Also, as a registered translator, you may be assigned specific files or strings to translate and/or review, allowing to better coordinate the overall effort.
Except for the mandatory [[#Register as a translator|pre-condition to register]], which enables the extra <tt>[Submit]</tt> button when translating, the overall process is quite similar to that of the [[#Opportunistic translator]]. On the other hand, several [[#User permissions|user-specific permissions]] may apply (ie: off-line translation) and the GUI will adapt and offer them. Also, as a registered translator, you may be assigned specific files or strings to translate and/or review, allowing to better coordinate the overall effort.

----


; Admin notes : In a collaborative and low-entry-barrier process, the [[#User privileges|administrator/s]] should enable the <tt>''default''</tt> user to actually <tt>translate</tt> &mdash; Navigation: <tt>admin | projects | ''project_name'' | ''language'' | permissions +Translate</tt>.
; Admin notes : In a collaborative and low-entry-barrier process, the [[#User privileges|administrator/s]] should enable the <tt>''default''</tt> user to actually <tt>translate</tt> &mdash; Navigation: <tt>admin | projects | ''project_name'' | ''language'' | permissions +Translate</tt>.
Line 78: Line 93:
=== Register as a translator ===
=== Register as a translator ===


# Head towards the [http://democentro.com:81/ pootle site]
# Head towards the [http://dev.laptop.org/translate/ pootle site]

# Follows the [http://democentro.com:81/register register] link where you fill the following fields: <tt>Username, Password, Confirm password, Full Name & Email Address</tt>, clicking on the <tt>[Register Account]</tt> button that will send a confirmation message to the email address with the activation code.
# Follow the [https://dev.laptop.org/translate/register.html register] link where you fill in the following fields: <tt>Username, Password, Confirm password, Full Name & Email Address</tt>; click on the <tt>[Register Account]</tt> button that will send a confirmation message to the email address with an activation code.
# Following the link in the email will activate the newly created account. After which it will ask you to login and take you to your user page.
# Following the link in the email will activate the newly created account after which you will be asked to log in.


=== User options ===
=== User options ===
Line 101: Line 117:
=== Reviewer ===
=== Reviewer ===


A user who has been granted the <tt>Review</tt> permission, may accept or reject the ''suggestions'' made by users (who must have the <tt>Suggest</tt> permission). The way to do this {{pending|is there another?}} is to go to a language/project combination (ie: [http://democentro.com:81/es/olpc/ spanish-olpc]) and follow the [http://democentro.com:81/es/olpc/index.html?editing=1 Show Editing Functions]. Here you have two alternatives: review the whole set of suggestions in the language-project set, or work on the suggestions present in a specific file (ie: [http://democentro.com:81/es/olpc/translate.html?review=1&editing=1&has-suggestion=1 all suggestions] or [http://democentro.com:81/es/olpc/TamTamSynthLab.master.es.po?translate=1&review=1&editing=1&has-suggestion=1 TamTamSynthLab suggestions]).
A user who has been granted the <tt>Review</tt> permission, may accept or reject the ''suggestions'' made by users (who must have the <tt>Suggest</tt> permission). The way to do this {{pending|is there another?}} is to go to a language/project combination (ie: [http://solar.laptop.org:5080/es/olpc/ spanish-olpc]) and follow the [http://solar.laptop.org:5080/es/olpc/index.html?editing=1 Show Editing Functions]. Here you have two alternatives: review the whole set of suggestions in the language-project set, or work on the suggestions present in a specific file (ie: [http://solar.laptop.org:5080/es/olpc/translate.html?review=1&editing=1&has-suggestion=1 all suggestions] or [http://solar.laptop.org:5080/es/olpc/TamTamSynthLab.master.es.po?translate=1&review=1&editing=1&has-suggestion=1 TamTamSynthLab suggestions]).


Once in the review UI, the reviewer has four options: <tt>Accept, Reject, Back or Skip</tt> which are self evident, but nevertheless will mention:
Once in the review UI, the reviewer has four options: <tt>Accept, Reject, Back or Skip</tt> which are self evident, but nevertheless will mention:
Line 126: Line 142:
This section of the UI displays on a per-file basis several functionalities that depend on the permissions of the user:
This section of the UI displays on a per-file basis several functionalities that depend on the permissions of the user:
{|
{|
|-
! align=right | Translate All
| Goes to each string individually no matter what their state, across all files
|-
! align=right | Quick Translate
| Only go to strings that are fuzzy or untranslated, across all files
|-
|-
! align=right | Translate My Strings
! align=right | Translate My Strings
| enter the translate UI limiting the visibility to those strings assigned to the user. {{pending|explore}}
| As Translate All but only go to strings that are assigned to you.
|-
|-
! align=right | Quick Translate My Strings
! align=right | Quick Translate My Strings
| As with Quick Translate but only go to fuzzy and untranslated strings that are assigned to you.
| same as above, unknown difference. {{pending|explore}}
|-
! align=right | Quick Translate
| enter the translate UI over the whole set? {{pending|explore}}
|-
! align=right | Translate All
| {{pending|explore}}
|-
|-
! align=right | PO file
! align=right | PO file
Line 153: Line 169:


=== Show checks ===
=== Show checks ===
: ''For more information on the quality checks, see [http://translate.sourceforge.net/wiki/toolkit/pofilter_tests the documentation].

This functionality is a real helper (at least for latin scripts) as it runs a series of checks on the translations. So [[Pootle]] besides the obvious verification of translated+fuzzy+untranslated check, it verifies:
This functionality is a real helper (at least for latin scripts) as it runs a series of checks on the translations. So [[Pootle]] besides the obvious verification of translated+fuzzy+untranslated check, it verifies:
* <tt>simplecaps</tt> &mdash; for extra capital letters
* <tt>simplecaps</tt> &mdash; for extra capital letters
Line 159: Line 175:
* <tt>startpunc</tt> &mdash; if the original doesn't start with a letter, the translation probably shouldn't either
* <tt>startpunc</tt> &mdash; if the original doesn't start with a letter, the translation probably shouldn't either
* <tt>unchanged</tt> &mdash; the source & translation are the same
* <tt>unchanged</tt> &mdash; the source & translation are the same
* <tt>others</tt> &mdash; for a total of [http://translate.sourceforge.net/wiki/toolkit/pofilter_tests 44 checks]. The most important being the ''critical'' tests: accelerators, escapes, newlines, nplurals, printf, tabs, variables and xmltags
* <tt>{{pending|others!!}}</tt> &mdash; there are several others! Apparently, from traces in a <tt>''somefile''.po.stats</tt> the checks performed are:

*: check-validchars, check-numbers, check-unchanged, check-doublespacing, check-purepunc, check-isreview, check-nplurals, check-brackets, blank, check-endpunc, check-xmltags, check-escapes, check-spellcheck, check-endwhitespace, check-functions, check-doublewords, check-singlequoting, check-simplecaps, check-blank, check-emails, check-startwhitespace, check-accelerators, check-long, check-musttranslatewords, has-suggestion, check-puncspacing, check-notranslatewords, check-variables, check-doublequoting, check-kdecomments, check-short, fuzzy, check-untranslated, check-simpleplurals, check-sentencecount, check-isfuzzy, check-startpunc, check-compendiumconflicts, check-tabs, check-newlines, check-urls, check-filepaths, check-startcaps, translated, check-printf, check-acronyms, and sourcewordcounts, targetwordcounts.

Obviously, these checks, as any automated language process, are to be taken as a guidance and not as a rule.
Obviously, these checks, as any automated language process, are to be taken as a guidance and not as a rule. The check behaviour can be adjusted for a language, e.g. <tt>simplecaps</tt> could be disabled for a language that does not have a concept of capitals, <tt>doublequoting</tt> can be made aware of quote characters used in a language. These are changed by providing a <tt>lang</tt> module e.g. [http://translate.svn.sourceforge.net/viewvc/translate/src/trunk/translate/lang/ja.py?revision=6363&view=markup Japanese] and [http://translate.svn.sourceforge.net/viewvc/translate/src/trunk/translate/lang/fr.py?revision=5073&view=markup French].


=== Zip of folder ===
=== Zip of folder ===
Line 167: Line 184:
Actually, any 'grouping' of PO files may be downloaded as a ZIP file if the user has the [[#User permissions|archive]] right. In other words, you can download the files in a language, goal, file, etc. It {{pending|may be possible that [[Pootle]] extracts and recombines from several files in order to provide the zip with say 'My Strings'}} for offline work.
Actually, any 'grouping' of PO files may be downloaded as a ZIP file if the user has the [[#User permissions|archive]] right. In other words, you can download the files in a language, goal, file, etc. It {{pending|may be possible that [[Pootle]] extracts and recombines from several files in order to provide the zip with say 'My Strings'}} for offline work.


== Administrator Scenarios ==
== Administration ==


See [[Pootle/Administration]]
=== Primary administration ===


=== User permissions ===
This administration level refers to the process of ensuring a functional and operative interface between the development environment and the translating environment. In other words, it must cover the largest probable set of situations and describe the appropiate steps to cope with it. Some things that need to be defined before starting are:


See [[Pootle/Administration#User permissions]]
'''Number of Pootle-projects''' &mdash; {{pending|options are}}:
# single 'mega-olpc' project where all d.l.o. projects are kept
# one-to-one mapping between a d.l.o & pootle project
# ad-hoc granularity in the mapping (ie: core, bundled, extras, prototypes, etc.)
Some of this granularity may be handled by the concept of <tt>goal</tt> in [[Pootle]] (but they only work within a project+language context). On the other hand, although less likely, is that in a 'mega-olpc' we may be faced with name conflicts (ie: two or more projects using the same filename). This could be solved by adopting a standard naming convention within [[Pootle]](ie: prefixing all [[Pootle]] files with d.l.o's path to the project).


== Sign-up ==
'''Number of Pootle-languages''' &mdash; {{pending|options are}}:
# strict minimal number for the 'green' countries (ie: {{Status green languages}})
# the above plus certain 'typical' languages (ie: german, japanese, etc.) plus some 'red' or 'orange' languages
# totally free as long as a ''language administrator'' can be identified and named for each language


If interested in the [[Localization]] effort, please sign up below. Although we are focusing on {{Status green languages}} and [[G1G1|Give One Get One]] languages, any other language is welcome. If you are not subscribed to <tt>localization@lists.laptop.org</tt> we strongly suggest you do so.
'''Notification channels and/or mechanisms:'''
* developer's changes to the POTs (creation, changes and elimination) must reach the translating environment.
* translator's work and generation of POs (and possibly MOs) must reach the development environment.
How? This could be performed through the filing of tickets, sending mails, scripts monitoring both sides, etc. And in the future it may be modified to include or consider the back-end integration to git. {{pending|A clear primary channel must be determined}}. The periodicity and/or milestones for re-injecting the POs back into the development environment for their testing {{pending|must also be determined}}.


[http://dev.laptop.org/~sayamindu/teams.html The more current list], generated every week from the Pootle server.
{| border=1 cellspacing=0
{|
|-
|-
|
! d.l.o<br>project !! POT !! PO !! Actions
{| border=1 cellspacing=0 align=center
|-
|-
! Role !! Name !! Comments
| rowspan=4 | New
| rowspan=2 | ''none''
| ''none'' || open a d.l.o ticket requesting missing POT file
|-
|-

| > 0 || PAD & developer should decide if a PO may be used as the basis to generate the POT.<br>If appropriate, PAD {{pending|creates the POT}}.<br>: ''switch to 'new, POT > 0 and PO > 0' case below''.<br>If not, open a d.l.o ticket requesting missing POT file.<br>Developer eliminates offending PO(s).
! style="background:lightgray; " colspan=3 | [af] &mdash; [[Afrikaans language]] &mdash; {{langname-af}}
|-
|-
| ''OTRA'' || [[User:Morgs|Morgan Collett]] || Pootle:
| rowspan=2 | > 0
| ''none'' || PAD saves POT in <tt>po/''project''/templates</tt>.<br>Performs a <tt>update from templates</tt> (in order to {{pending|generate the required PO for each language}}<br>Notifies the LADs who can then decide to include into their goals, assign it, etc.
|-
|-

| > 0 || PAD processes the POT as above.<br>: ''switch to 'old, POT none and PO > 0' below.''
! style="background:lightgray; " colspan=3 | [am] &mdash; [[Amharic language]] &mdash; {{langname-am}}
|-
|-
| ''OTRA'' || Yosef Abate || Pootle:
| rowspan=4 | Old
| rowspan=2 | updated
| ''none'' || PAD saves POT in <tt>po/''project''/templates</tt>.<br>Performs a <tt>update from templates</tt> (in order to update existing POs).<br>PAD notifies LADs of changes as it may change the workload of goals and assignments.
|-
|-
| ''OTR'' || [[User:Teferra |tegegne tefera]] || Pootle: Teferra
| > 0 || PAD saves POT in <tt>po/''project''/templates</tt>.<br>Performs a <tt>update from templates</tt> (in order to update existing POs).<br>PAD notifies LADs of changes as it may change the workload of goals and assignments.<br>: ''switch to 'old, POT none and PO > 0' case''
|-
|-
| ''OT'' || Mariamawit Getachew || Pootle: mari
| rowspan=2 | ''none''
|-
| ''none'' || ''ignored &mdash; nothing to do''
| ''OT'' || Frehiwot Tenagne || Pootle: fre
|-
|-
| > 0 || LAD verifies that PO matches existing POT.<br>If valid, <tt>uploads</tt> the PO through the web-GUI (either merging or overwriting the exising file)
|}
; Notes : The columns '''POT''' & '''PO''' refer to the external or incomming files generated outside of [[Pootle]].
: If a POT exists in [[Pootle]], the corresponding POs must exist for each language.


! style="background:lightgray; " colspan=3 | [ar] &mdash; [[Arabic language]] &mdash; {{langname-ar}}
==== Terminology & roles used ====
|-
| ''OTRA'' || [[User:Khaled hosny|Khaled Hosny]] || Pootle: khaled
|-
| ''OTR'' || [[User:KillerLegend|Mohamed Sanad]] || Pootle: KillerLegend
|-


! style="background:lightgray; " colspan=3 | [ay] &mdash; [[Aymara]] &mdash; {{langname-ay}}
; POT & PO : name given to the files depending on the purpose: '''P'''ortable '''O'''bject '''T'''emplate, for 'master copies'; '''P'''ortable '''O'''bject for their localized versiones (one per language). {{pending|naming convention}} would probably be "<tt>[[ISO 639|xx]].po</tt>"
|-
; project administrator (PAD) : person in charge of overseeing that a project has the correct (latest) set of POT files and coordinates with the ''language administrator'' in order to ensure that the PO files reflect the POTs. Has also the responsibility to decide which languages to use.
| ''A'' || [[User:Yamaplos|Yamandú Ploskonka]] || Pootle: yamaplos
: {{pending|to be determined}} if there's a single PAD for all d.l.o projects or more. Every d.l.o project should have one PAD.
|-
; language administrator (LAD) : person in charge of ensuring that PO files are available to be translated while taking the appropriate measures to guarantee that the PO reflect the latest POT, merging, reviewing, etc. the translating community effort. Can also [[#user permissions|assign]] tasks to specific ''registered translator''
: There should be at least one LAD for each of the 'green' languages.
; registered translator : person actually performing the translation of a PO file within a specific project and language.
; developer : person that is (ultimately) responsible of providing POT files


! style="background:lightgray; " colspan=3 | [bg] &mdash; [[Bulgarian language]] &mdash; {{langname-bg}}
=== Administration ===
|-
| ''OTRA'' || [[User:atodorov|Alexander Todorov]] || Pootle: atodorov
|-


! style="background:lightgray; " colspan=3 | [bn] &mdash; [[Bengali language]] &mdash; {{langname-bn}}
As an administrator, in your home page you have access to the [http://democentro.com:81/admin/ '''Admin page'''] which offers: [http://democentro.com:81/admin/users.html Users], [http://democentro.com:81/admin/languages.html Languages] & [http://democentro.com:81/admin/projects.html Projects].
|-
| ''OTRA'' || [[User:Jamil|Jamil Ahmed]] || Pootle: jamil
|-
| ''OTR'' || [[User:Suzan|Khandakar Mujahidul Islam]] || Pootle: suzan
|-
| ''OTR'' || [[User:Mak|Mahay Alam Khan]] || Pootle: mak
|-


! style="background:lightgray; " colspan=3 | [bn-IN] &mdash; [[Bengali language]] &mdash; {{langname-bn-IN}}
; [http://democentro.com:81/admin/users.html Users] : is a simple interface allowing the manual addition of users, edition of their names & (invisible) passwords (ie: resetting them) and where you can activate, de-activate and remove an user.
|-
| ''OTRA'' || Indranil Das Gupta || Pootle:
|-
| ''OTRA'' || Sankarshan Mukhopadhyay || Pootle:
|-


! style="background:lightgray; " colspan=3 | [ca] &mdash; [[Catalan language]] &mdash; {{langname-ca}}
; [http://democentro.com:81/admin/languages.html Languages] : allows the maintenance of the list of available languages (based on the [[ISO 639]] codes, a descriptive text, [http://translate.sourceforge.net/wiki/pootle/characters special characters] (used in the translating UI), defining the number of plurals and its equation. Note: removing a language here would seem to affect only the ability to associate them to projects, {{pending|with no apparent impact on the previously defined associations.}}
|-
| ''OTRA'' || [[User:Jaume|Jaume Nualart]] || Pootle: jaume
|-
| ''OTRA'' || [[User:Victor|Victor Guillamon]] || Pootle:
|-
| ''OTRA'' || [[User:Tomeu|Tomeu Vizoso]] || Pootle: tomeu
|-


! style="background:lightgray; " colspan=3 | [cs] &mdash; [[Czech language]] &mdash; {{langname-cs}}
; [http://democentro.com:81/admin/projects.html Projects] : this is the ''initial'' page where things start to come together. Besides being able to add a project by defining the values for the <tt>Project Code, Full Name, Project Description, Checker Style, File Type</tt> and <tt>Create MO Files</tt> fields, you can also <tt>Remove Project</tt>. The most {{pending|mysterious parameter is <tt>Checker Style</tt>}} which offers <tt>Standard, creativecommons, kde, openoffice, mozilla</tt> and <tt>gnome</tt> as options.
|-
| ''TR'' || [[User:Kuba|Jakub Guttner]] || Pootle: Kuba
|-


! style="background:lightgray; " colspan=3 | [de] &mdash; [[German language]] &mdash; {{langname-de}}
The above covers the broad, high-level configuration, which must be followed by the project and language configuration:
|-
| ''O'' || [[User:Adricnet|Adricnet]] || Pootle:
|-
| ''O'' || [[User:Michael Reschke|Michael Reschke]] || Pootle:
|-
| ''OTRA'' || [[User:Mschlager|Markus Schlager]] || Pootle: mschlager
|-
| ''OTRA'' || Gerhard Steiner|| Pootle:
|-


! style="background:lightgray; " colspan=3 | [dz] &mdash; [[Dzongkha]] &mdash; {{langname-dz}}
; [http://democentro.com:81/projects/olpc/admin.html Project languages] : A project needs to be informed of which languages it will have. This is accomplished by following the link of a specific project resulting in a page where you can add them. The only apparent way to remove a language is to delete its directory from outside of [[Pootle]].
|-
| ''OTRA'' || Tenzin Dendup || Pootle:
|-
| ''OTRA'' || Uden Sherpa || Pootle:
|-


! style="background:lightgray; " colspan=3 | [el] &mdash; [[Greek language]] &mdash; {{langname-el}}
; [http://democentro.com:81/es/olpc/admin.html Project language permissions] : Each language mentioned above is a link that allows you to configure the [[#user permissions]] in said project-language combination. You can grant/remove specific rights to a particular user, that will only apply in said project+language context.
|-
| ''TRA'' || [[User:Simosx|Simos Xenitellis]] || Pootle: simosx
|-
| ''TRA'' || Kostas Papadimas || Pootle:
|-
| ''TRA'' || John Sarlis || Pootle:
|-


! style="background:lightgray; " colspan=3 | [en] &mdash; [[English language]] &mdash; {{langname-en}}
; ''NOTES'' : Several languages were removed from the initial (default) list with the intention to limit or focus on the core green languages: {{Status green language codes}}.
|-
: {{pending|Still pending}}: Obtain and verify the plural formulas for all.
| ''OTRA'' || [[User:Sj|SJ Klein]] || Pootle: sj
|-


! style="background:lightgray; " colspan=3 | [es] &mdash; [[Spanish language]] &mdash; {{langname-es}}
=== Defining goals ===
|-
: ''see [http://translate.sourceforge.net/wiki/pootle/goals Pootle::Goals]''
| ''OTRA'' || [[User:Xavi|Xavier Alvarez]] || Pootle: Xavi
|-
| ''TRA'' || [[User:MauroPM|Mauro Parra-Miranda]] || Pootle: mauropm
|-
| ''OTR'' || [[User:Dupuy|Alexander Dupuy]] || Pootle: Dupuy
|-
| ''OTR'' || [[User:Yamaplos|Yamandú Ploskonka]] || Pootle: yamaplos
|-
| ''OTR'' || [[User:PilarSaenz|Pilar Saenz]] || Pootle: PilarSaenz
|-
| ''OTRA'' || [[User:ChemaQ|Jameson Chema Quinn]] || Pootle:
|-
| ''OA'' || [[User:Sayamindu|Sayamindu Dasgupta]] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [fa] &mdash; [[Persian]] &mdash; {{langname-fa}}
Goals are required in order to be able to assign translations, thus enabling the organizing and prioritizing of work ''within a given language-project'' (iow, no global goals). Also worth noting, goals seem to be nothing more than a 'bundle name', with no other data like deadlines, comments or anything else.
|-
| ''A'' || Behnam B. Marandi || Pootle:
|-


! style="background:lightgray; " colspan=3 | [fa-AF] &mdash; [[Dari]] &mdash; {{langname-fa-AF}}
In order to define a goal you must enable the <tt>Show Goals</tt> in the project page, and on the right, there's an entry field to add new.
|-
| ''TRA'' || [[User:Sohaib_Ebtihaj|Sohaib Obaidi]] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [fi] &mdash; [[Finnish language]] &mdash; {{langname-fi}}
# Define a goal in the project page (ie: [http://democentro.com:81/es/olpc/ spanish-olpc]) toggle the <tt>Show Goals</tt>
|-
#* by default a null-goal (ie: [http://democentro.com:81/es/olpc/index.html?showgoals=1&goal= Not in a goal]) exists as a catch all.
| '' '' || [[User:XXX|''none'']] || Pootle:
#* on the right, a box with an entry field allows you to give a name and '''Add Goal'''.
|-
# Assign files to a goal
#* as we are trying to include files into a goal, click on the [http://democentro.com:81/es/olpc/index.html?showgoals=1&goal= Not in a goal]
#* make sure that the <tt>[http://democentro.com:81/es/olpc/index.html?showgoals=1&editing=1 Show Editing Funcions]</tt> is enabled by clicking on it if necessary
#* once in the language-project-goals view (showing the 'Not in a goal' files), each file has a pull-down list to pick and set the goal.


! style="background:lightgray; " colspan=3 | [ff] &mdash; [[Fula language]] &mdash; {{langname-ff}}
After setting the goals you can view the files bundled in a goal, and later assign work.
|-
| ''OTRA'' || Ibrahima Sarr] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [fr] &mdash; [[French language]] &mdash; {{langname-fr}}
=== Assigning translations ===
|-
: ''see [http://translate.sourceforge.net/wiki/pootle/assigning Pootle::Assigning]''
| ''OTRA'' || [[User:Samybt|Samy Boutayeb]]|| Pootle: samybt
|-
| ''TR'' || [[User:Domeav|Dominique Eav]] || Pootle: domeav
|-
| ''OTR'' || [[User:Genepi|Pierre Métras]] || Pootle: pierre
|-
| ''TRA'' || [[User:Llaske|Lionel Laské]] || Pootle: llaske
|-
| ''OT'' || [[User:Dupuy|Alexander Dupuy]] || Pootle: Dupuy
|-
| ''OT'' || [[User:Yamaplos|Yamandú Ploskonka]] || Pootle: yamaplos
|-
| ''OTRA'' || [[User:bzg|Bastien Guerry]] || Pootle: bzg
|-
| ''A'' || Jean-Christophe Helary || Pootle:
|-


! style="background:lightgray; " colspan=3 | [gl] &mdash; [[Galician language]] &mdash; {{langname-gl}}
This is a nice administrative functionality that will actually (or probably) make the translator's life simpler. As an administrator you can assign certain users to goals and also to specific files (either to translate everything, unassigned, and a couple other variants).
|-
| '' '' || [[User:XXX|''none'']] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [gu] &mdash; [[Gujarati language]] &mdash; {{langname-gu}}
By assigning users and goals/files, those user will then be able to use special links (ie: <tt>Translate My Strings</tt> or <tt>Quick Translate My Strings</tt>) that will feed them with their workload, and thus allow focus where is needed for the project. Still, the interface and handling is not quite describable at this moment as many aspects come together and {{pending|some things need to be better understood}} in order to get the most out of it (while trying not to complicate things too much).
|-
| ''OTRA'' || Kartik Mistry || Pootle:
|-


! style="background:lightgray; " colspan=3 | [ha] &mdash; [[Hausa language]] &mdash; {{langname-ha}}
{{pending|how do you '''remove''' an user from a given goal?}}
|-
| '' '' || [[User:XXX|''none'']] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [hi] &mdash; [[Hindi language]] &mdash; {{langname-hi}}
=== Setting up version control systems ===
|-
: ''see [http://translate.sourceforge.net/wiki/pootle/version_control Pootle::Version control]''
| ''OTRA '' || [[User:satyag|''Satyaakam Goswami'']] || Pootle:satyaakam
|-
| ''OTRA '' || [[User:Shirish Goyal|''Shirish Goyal'']] || Pootle:shirish
|-


! style="background:lightgray; " colspan=3 | [ht] &mdash; [[Kreyol Ayisyen|Haitian Creole language]] &mdash; {{langname-ht}}
'''These are some notes of the trials, not actual documentation.'''
|-
| ''TA'' || [[User:Mokurai|Edward MokuraiCherlin]] || Pootle: mokurai
|-
| ''TA'' || [[User:bzg|Bastien Guerry]] || Pootle: bzg
|-
| ''TRA'' || [[User:Jude|Jude Augusma]] || Pootle: jude
|-
| ''O'' || [[User:Dupuy|Alexander Dupuy]] || Pootle: Dupuy
|-
| ''TRA'' || [[User:masterches|MasterChes]] || Pootle: Masterches
|-
| ''TRA'' || lacrete || Pootle: lacrete
|-


! style="background:lightgray; " colspan=3 | [id] &mdash; [[Indonesian|Indonesian language]] &mdash; {{langname-id}}
Things have been messier than expected. First of all, GIT is not supported in the stable version, and the newer (unstable) version is reorganizing several aspects of [[Pootle]] making it too risky to jump onto the bleeding edge... Thus the decision to backport the git support.
|-


| ''TRA'' || [[User:Danoe]] || Pootle:
On top of this, although volunteer gnrfan joined the fray (doing the backport), our experience with git is way below average and we are totally in the dark about how does [[Pootle]] actually obtain and store the POT files. We seem to have found a way (using symlinks in the [[Pootle]] subdirectories pointing to the repository files) but this solution although it may work, is a bit obscure and not even hinted by the documentation of [[Pootle]]:
|-
<blockquote>
| ''A'' || [[User:Yamaplos|Yama Ploskonka]] || Pootle: Yamaplos
''To have any sort of integration with version control from within Pootle, it is necessary to check out the translation files into their correct places in their Pootle projects. The CVS or SVN meta files (CVS/ or .svn/) need to be there. This has to be done outside of Pootle.''
|-
</blockquote>
Our efforts to contact or elucidate some sort of answers from the [[Pootle]] community have not been very effective for the moment... but hope is not lost! :)


! style="background:lightgray; " colspan=3 | [ig] &mdash; [[Igbo language]] &mdash; {{langname-ig}}
==== Fantasyland ====
|-
| '' '' || [[User:XXX|''unknown'']] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [is] &mdash; [[Icelandic language]] &mdash; {{langname-is}}
The basic idea we are aiming for is the following:
|-
| ''O'' || [[User:Steinninn|Steinninn]] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [it] &mdash; [[Italian language]] &mdash; {{langname-it}}
We are assuming that the Pootle server has the ability to read & write throughout the <tt>xyzzy_project/po</tt> in [http://dev.laptop.org/projects dev.laptop.org] through the git.
|-
| ''OTRA'' || [[User:carlo|Carlo Falciola]] || Pootle: carlo
|-


|-
The overall process would be:
| ''OTRA'' || [[User:julie|Julieanne R.]] || Pootle:
|-
! style="background:lightgray; " colspan=3 | [ja] &mdash; [[Japanese language]] &mdash; {{langname-ja}}
|-
| ''OTRA'' || [[User:Spiky|Yoshiaki Sonoda]] || Pootle: Spiky
|-
| ''OTR'' || [[User:Taizo1969|Taizo Shiozaki]] || Pootle: Taizo1969
|-
| ''OTRA'' || [[User:Korakurider|Korakurider]] || Pootle: Korakurider
|-
| ''OTR'' || [[User:Takashi|Takashi Yamamiya]] || Pootle: Takashi
|-
| ''OTR'' || [[User:Kiryu|KIRYU Yasuo]] || Pootle: Kiryu
|-
| ''OTR'' || [[User:Abee|Kazuhiro Abe]] || Pootle: Abee
|-


! style="background:lightgray; " colspan=3 | [km] &mdash; [[Khmer|Khmer language]] &mdash; {{langname-km}}
Developers do their i18n part resulting in one or more <tt>.POT</tt> files generated in their respective <tt>/po</tt> directories (and in theory, forget all about l10n).
|-
| ''A'' || [[User:Mokurai|Edward Mokurai Cherlin]] || Pootle: mokurai
|-
| ''T'' || [[User:Lirit|Rit Lim]] || Pootle: Lirit
|-


! style="background:lightgray; " colspan=3 | [ko] &mdash; [[Korean language]] &mdash; {{langname-ko}}
# First time-off (iow, a new project with a .POT)
|-
#* Pootle would sync downloading the .POT and make it available for all languages to translate
| ''O'' || [[User:Cymacyma|Cymacyma]] || Pootle:
#* Pootle makes the POT (now POs) available for each language and are translated
|-
#* Pootle commits the (new) POs to the git server in d.l.o
| ''OTR'' || [[User:janggoon|YunJae Jang]] || Pootle: janggoon
# Updates in the i18n part &mdash; new versions of the POT
|-
#* Pootle in its sync process should note the update, download the new version and modify accordingly all the POs and replace the local POT with the 'real' POT
| ''OTRA'' || [[User:picxenk|SeungBum Kim]] || Pootle: picxenk
#* Pootle would commit as usual
|-
# Updates in the l10n part &mdash; d.l.o has a new version of some PO
| ''OTRA'' || [[User:donghee|Donghee Park]] || Pootle: donghee
#* Pootle syncs modifying the local PO using the d.l.o version as the latest valid version and reference, meaning that the local versions need to be corrected against it
|-
#*: ''The documentation mentions this is so, passing the (local) differences as 'suggestions''')


! style="background:lightgray; " colspan=3 | [mk] &mdash; [[Macedonian language]] &mdash; {{langname-mk}}
The current '''problem''' we are facing is ''getting Pootle to read from git'', iow, procuring the POTs! We haven't found a way (be it interface or code) to '''get''' the POTs. The update and commit are visible in the web GUI...
|-
| ''OTRA'' || [[User:Arangel|Arangel Angov]] || Pootle: Arangel
|-


! style="background:lightgray; " colspan=3 | [ml] &mdash; [[Malayalam|Malayalam language]] &mdash; {{langname-ml}}
==== Pootle workflow as per #pootle channel ====
|-
| ''OTRA'' || [[User:Ani|Ani Peter]] || Pootle: anipeter
|-


! style="background:lightgray; " colspan=3 | [mn] &mdash; [[Mongolian language]] &mdash; {{langname-mn}}
Pootle has some very nice features, but integration to the repositories is not really one of them. Particularly the initial bootstrapping of a project. As extracted from a chat with <tt>friedel in [[IRC]]#poole</tt>, the usual / standard workflow with no repositories is as follows:
|-
# The POT file is manually injected into <tt>/po/''project_name''/templates</tt>
| ''OTRA'' || [[User:Enkhzul|Enkhzul Gombodorj]] || Pootle: Enkhzul
# Doing the <tt>Updtate from templates</tt> for a specific language in a project basically re-syncs the existing PO (doing a merge, and in the case of conflicts demotes them as ''suggestions''{{pending|need to test}}) or makes available the particular PO for said language (in the <tt>/po/''project_name''/''lang_code''</tt>).
|-
# In its origins, [[Pootle]] was finished, and the re-injection of the PO & MO files into the original project was left for the language or project coordinator to do.
| ''OTRA'' || Odontsetseg Bat-Erdene || Pootle:
With the inclusion of repositories, apparently the only part really integrated is the <tt>commit</tt> phase which would somehow trigger a push of the PO files. Unfortunately the 'pulling' from the repositories is not so automatic. Therefore, the probable (and suggested in [[IRC]]) workflow we'll implement requires manual intervention and/or the development of some scripts, and would probably look like this:
|-
# Have a local git repository that syncs with d.l.o (as any other repository)
| ''O'' || [[User:Canderson|Cris Anderson]] || Pootle: anderson861
# Manually create the project
|-
# Manually inject the POT file (most likely a symlink to the POT in the local repository)
# <tt>Update from templates</tt> would be performed for all languages
#: This step would actually create (or sync) the PO files for all languages in the project together with some associated internal files to [[Pootle]]. The actual PO file should then be ''symlinked'' and added to the appropriate place in the (local) repository.
#: Another possibility would be to create the project directory as a symlink into the repository (and probably use the <tt>.gitignore</tt> to filter out the [[Pootle]] files). This alternative (which could be simpler) seems to clash with the idea that all POT and PO files are stored in the <tt>/po</tt> directory in d.l.o because [[Pootle]] handles each language as a subdirectory (under the assumption that each project has several POT files, something that even [[Etoys]] has reverted and now has just one big POT).
# Translate at will & perform <tt>commits</tt> at will / as necessary, staying alert for:
#* If the POT changes along the way, this {{pending|should be somehow noted}} and an <tt>Update from templates</tt> should be carried out.
#* If a ''new'' POT file (not an update) is generated, it must be ''manually injected'' together with the corresponding PO files per language.
#* If a POT is deprecated (''eliminated'') the appropriate local removal should ensue.
The manual nature of [[Pootle]]'s repository integration is currently the weakest point as it adds administrative overhead and coordination issues. Some of it could be eased by either developing some scripts or modifying [[Pootle]] itself (ie: the creation of a new PO file could be tweaked to automatically generate the symlink instead of the local file and the issuing of the appropriate command to add it to the repository; or, just settle for a simple symlink of the project's directory and all files would reside in the local repository).
{{Pending|verify any possible conflict in naming conventions of the target PO&mdash;particularly with t.fp.o }}


! style="background:lightgray; " colspan=3 | [mr] &mdash; [[Marathi|Marathi language]] &mdash; {{langname-mr}}
==== Twilight Zone ====
|-
| ''OTRA'' || [[User:swapnil|Swapnil Hajare]] || Pootle: swapnil
|-
| ''OTRA'' || [[User:Sayamindu|Sayamindu Dasgupta]] || Pootle:
|-
| ''OTRA'' || Sandeep Shedmake || Pootle:
|-


! style="background:lightgray; " colspan=3 | [mvo] &mdash; [[Marovo|Marovo language (Solomon Islands)]]
: ''Music queues in... ti-ri ti-ri...''
|-
| ''OA'' || [[User:Leeming|David Leeming]] || Pootle: leemingd
|-
| ''OT'' || [[User:Nukuman|Phillip Pukefenua]] || Pootle: Nukuman
|-
| ''OT'' || [[User:Barighaza|Elnah Tati]] || Pootle: Barighaza
|-


! style="background:lightgray; " colspan=3 | [nau] &mdash; [[Nauru|Nauruan language]]
; Testing setup : Is based on a two-layered clone of d.l.o projects. The first clone acts as the pseudo-d.l.o, and the second clone (a clone of the first) is where [[Pootle]] files will be symlinked. Currently the first clone (a.k.a. the d.l.o-clone) is in [[User:RafaelOrtiz|Rafael's]] home dir, and the second clone (a.k.a. pootle-clone) in [[User:Xavi|Xavi's]] home dir. As you can't actually clone d.l.o, each project is cloned individually. The way each project is cloned into the pootle-clone git is by first cloning from d.l.o:
|-
#
| ''OA'' || [[User:Leeming|David Leeming]] || Pootle: leemingd
# For every project in d.l.o (or for testing)
|-
#
| ''OT'' || Xavier Barker || Pootle:
cd /home/rafael # as user ''rafael''
|-
git-clone git://dev.laptop.org/git/''project_name'' # {{pending|review what Rafael did}} in
#
cd /home/xavi/clone2 # as user ''xavi''
git-clone /home/rafael/''project_name'' ''project_name''
: ''see [http://www.kernel.org/pub/software/scm/git/docs/git-clone.html git-clone doc]''
: NOTE: we used the ''--local'' argument (really a no-op, but still got a message about not being able to use hardlinks or something.


! style="background:lightgray; " colspan=3 | [ne] &mdash; [[Nepali language]] &mdash; {{langname-ne}}
; Hooking [[Pootle]] into the pootle-clone : This is a manual step involving the symlinking of the appropriate POT file(s) and possible PO previously done.
|-
cd /var/log/pootle # home ''podirectory'' specified in /etc/pootle/pootle.prefs
| ''OTRA'' || [[User:guava|Prabhas Pokharel]] || Pootle: prabhas
cd ''olpctest''/templates # a test directory for OLPC
|-
ln -s ~/clone2/''project_name''/''project.pot'' ''unique''.pot # symlinking the POT file and associating an unique name withing [[Pootle]]
| ''OTR'' || Anjali Lohani || Pootle: anjali
#
|-
# Enter the GUI and in the project languages perform an ''update from templates''
| ''OTR'' || Tsering Lama Sherpa || Pootle: tlsherpa
# this will create the appropriate PO files for each language in
|-
# the ''project_name''/xx directory (where the ''xx'' is the [[ISO 639]] language code)
| ''TRA'' || [[User:Shankar|Shankar Pokharel]] || Pootle: shankar
#
|-
#
# For each PO that didn't exist in a language in the project:
#
cd /var/log/pootle/''olpctest''/''xx''
mv ''unique''.po ~/clone2/''project_name''/po/''xx''.po
ln -s ''unique''.po ~/clone2/''project_name''/po/''xx''.po
#
# If a given language PO existed in the project:
# (and you want to keep it)
#
cd /var/log/pootle/''olpctest''/''xx''
rm ''unique''.po
ln -s ''unique''.po ~/clone2/''project_name''/po/''xx''.po


! style="background:lightgray; " colspan=3 | [nl] &mdash; [[Dutch language]] &mdash; {{langname-nl}}
; Problem with the setup : Theoretically this should be it, and [[Pootle]] would be able to identify the symlinked files as belonging to the git version control system.
|-
: In practice, [[Pootle]] is verifying at the ''directory'' level if something is in a version control system, which in our case fails misserably due to the fact that we are symlinking individual files! The reason that we are symlinking files instead of directories is that the structures differ:
| ''OT'' || [[User:Bastiaan|Bastiaan Bakker]] || Pootle: bastiaan
{| style="font-size:90%; "
|-
| ''OTRA'' || [[User:Myckel|Myckel Habets]] || Pootle: Myckel
|-
| ''OTRA'' || Jeroen ten Berge || Pootle:
|-
|-
! [[Pootle]] directories
! OLPC git directories
|- valign="top"
|
/var/lib/pootle/''olpctest''
/templates
/''project_name_1''.pot
/''project_name_2''.pot
/es
/''project_name_1''.po
/''project_name_2''.po
/pt
/''project_name_1''.po
/''project_name_2''.po
|
/d.l.o-clone
/''project_name_1''
/po
/''project_name_1''.pot
/es.po
/pt.po
/''project_name_2''
/po
/''project_name_2''.pot
/es.po
/pt.po


! style="background:lightgray; " colspan=3 | [pa] &mdash; [[Punjabi language]] &mdash; {{langname-pa}}
|-
|-
| ''OTRA'' || Jaswinder Singh Phulewala || Pootle:
! git integration attempt
|-
| ''OTRA '' || [[User:Shirish Goyal|''Shirish Goyal'']] || Pootle:shirish
|-
! style="background:lightgray; " colspan=3 | [pap] &mdash; [[Papiamento language]] &mdash; {{langname-pap}}
|-
| ''OTRA'' || [[User:UWieske|Urso Wieske]] || Pootle: uwieske
|-
|
! style="background:lightgray; " colspan=3 | [pis] &mdash; [[Solomon Islands pidgin]] &mdash; {{langname-pis}}
|-
| ''OTRA'' || [[User:Leeming|David Leeming]] || Pootle: leemingd
|-
| ''OT'' || [[User:Nukuman|Phillip Pukefenua]] || Pootle: Nukuman
|-
| ''OT'' || [[User:barighaza|Elnah Tati]] || Pootle: Barighaza
|-
|-
| colspan=2 |
/var/lib/pootle/''olpctest''
/templates
/symlink ''project_name_1''.pot -> /d.l.o-clone/''project_name_1''/po/''project_name_1''.pot
/symlink ''project_name_2''.pot -> /d.l.o-clone/''project_name_2''/po/''project_name_2''.pot
/es
/symlink ''project_name_1''.po -> /d.l.o-clone/''project_name_1''/po/es.po
/symlink ''project_name_2''.po -> /d.l.o-clone/''project_name_2''/po/es.po
/pt
/symlink ''project_name_1''.po -> /d.l.o-clone/''project_name_1''/po/pt.po
/symlink ''project_name_2''.po -> /d.l.o-clone/''project_name_2''/po/pt.po
|}


This approach '''FAILS''' because in the current git support backport of [[Pootle]] verifies if the '''directory''' belongs to a ''version control system'' and this is not our case as the <tt>/es, /pt</tt>, etc. directories are clearly and purposefully left in the [[Pootle]] hierarchy.


! style="background:lightgray; " colspan=3 | [pl] &mdash; [[Polish language]] &mdash; {{langname-pl}}
Apparently, the layout of the OLPC's git follows what the [[Pootle]] documentation refers to as a ''GNU layout'' (in the <tt>/etc/pootle/pootle.prefs</tt> file):
|-
# pootle.podirectory
| ''OTRA'' || [[User:idzikow|Wiktor Idzikowski]] || Pootle: idzikow
#
|-
# All projects are stored in this directory in this layout:
| ''OT'' || [[User:ohm|Michal Hobot]] || Pootle: ohm
# $podirectory/$project/$language
|-
# Projects can also be stored according to the GNU convention with one PO file
# per language, and all files in one directory.
podirectory = "/var/lib/pootle/"


! style="background:lightgray; " colspan=3 | [ps] &mdash; [[Pashto|Pashto language]] &mdash; {{langname-ps}}
{{pending|But we haven't managed to determine when, where and how this can be controled}} but it may be just the ticket that we are looking for.
|-
| ''TR'' || [[User:Usman Mansour|Usman Mansour]] || Pootle: usman1982
|-
|-


! style="background:lightgray; " colspan=3 | [pt] &mdash; [[Portuguese language]] &mdash; {{langname-pt}}
=== Defining & using terminology ===
|-
: ''see [http://translate.sourceforge.net/wiki/pootle/adding_a_terminology_project Pootle::Terminology]''
| ''OTA'' || [[User:HoboPrimate|Eduardo H. Silva]] || Pootle: HoboPrimate
: ''see [http://translate.sourceforge.net/wiki/pootle/terminology_matching Pootle::Matching]''
|-
: ''see [http://translate.sourceforge.net/wiki/creating_glossaries Sourceforge.net::Creating glossaries]''
| ''OTRA'' || Ivo Emanuel Gonçalves || Pootle:
|-


! style="background:lightgray; " colspan=3 | [pt-BR] &mdash; [[Portuguese language]] &mdash; {{langname-pt-BR}}
This is an extremely helpful functionality, particularly if we want to open the translation process to non-professional and [[#Opportunistic translator]]s because it aids them in preserving the terminology that has been decided upon by the more involved segments of the community (ie: will the olpc.es translate "cat" as "gato" or "mish"?)
|-
| ''OTA'' || [[User:Juliano|Juliano Bittencourt]] || Pootle: juliano
|-
| ''OT'' || [[User:HoboPrimate|Eduardo H. Silva]] || Pootle: HoboPrimate
|-
| ''OT'' || [[User:Dupuy|Alexander Dupuy]] || Pootle: Dupuy
|-


! style="background:lightgray; " colspan=3 | [qu] &mdash; [[Quechua language]] &mdash; {{langname-qu}}
The structure of the terminology file is a standard .PO file (ie: msgid / msgstr). And (apparently) many could co-exist (ie: <tt>color.po, hig.po</tt>, etc. There are ways {{pending|need to explore}} on how to override the default terminology searches per project.
|-
| '' '' || [[User:XXX|''unknown'']] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [ro] &mdash; [[Romanian language]] &mdash; {{langname-ro}}
Although the documentation is not crystal clear on where and how these terminology files would go, a simple test has been made and works.
|-
| ''AT'' || [https://launchpad.net/~adiroiban Adi Roiban] || Pootle: adiroiban1
|-
| ''OTR'' || [[User:Maximilian|Maximilian Machedon]] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [ru] &mdash; [[Russian language]] &mdash; {{langname-ru}}
The steps, as an [[#User permissions|administrator]], were:
|-
# Enable the languages for which you want to have terminology:
| ''T'' || [[User:Aleksey|Aleksey Bragin]] || Pootle: fireball
#* in the [http://democentro.com:81/admin/projects.html projects] page head into the [http://democentro.com:81/projects/terminology/admin.html terminology] project
|-
#* verify that the language is listed (if not [[#Languages|add it]]) (ie: [http://democentro.com:81/es/terminology/admin.html spanish terminology])
| ''TA'' || [[User:Maxim|Maxim Osipov]] || Pootle: Maxim
#* verify that [[#user permissions]] are granted (if you are going to allow web-GUI edition of the terminology)
|-
# Join the project
| ''T'' || [[User:Nikita Bukhvostov|Nikita Bukhvostov]] || Pootle: ddjanic
#* as an user, in your [[#User options]] join the ''terminology'' project
|-
#* enter the project (ie: [http://democentro.com:81/es/terminology/index.html spanish terminology]
#* upload a new file or edit the existing one (ie: [http://democentro.com:81/es/terminology/xavitest.po?translate=1&view=1 xavitest.po]
You are 'done'. When later translating anything in the 'spanish' branch, the <tt>xavitest.po</tt> will be used to propose translations in a dynamic way.


! style="background:lightgray; " colspan=3 | [rw] &mdash; [[Kinyarwanda language]] &mdash; {{langname-rw}}
{{Pending|really done? Need to verify process}}
|-
| ''OA'' || [[User:Carine.umutesi|Carine Umutesi]] || Pootle:
|-
| ''OA'' || [[User:Juliano|Juliano Bittencourt]] || Pootle: juliano
|-


! style="background:lightgray; " colspan=3 | [no] &mdash; [[Norwegian language]] &mdash; {{langname-no}}
=== Taking advantage of translation memory ===
|-
: ''see [http://translate.sourceforge.net/wiki/pootle/updatetm Pootle::TM]''
| ''ART'' || [[User:Menthal|Kent Dahl]] || Pootle: MenThal
|-


! style="background:lightgray; " colspan=3 | [sd] &mdash; [[Sindhi language]] &mdash; {{langname-sd}}
Very much like <tt>terminology</tt> but instead of working at a word level, the matching is performed at the whole string proposing full already used translations, saving some time but more importantly providing some level of consistency between translations. On the other hand, instead of being a dynamic feature, this is more of a batch or static process. Starting from a base <tt>translation memory</tt> file, one may generate suggestions for a specific file or a whole set of them.
|-
| ''OTRA'' || Naveed || Pootle:
|-


! style="background:lightgray; " colspan=3 | [si] &mdash; [[Sinhala language]] &mdash; {{langname-si}}
; pre-test notes : This are some ideas, doubts and why-not stuff related to the reading of the documentation.
|-
: File per file is probably not desirable (ie: use one PO to generate a memory for another PO), so some sort of 'olpc' translation memory file (per language) should be made.
| ''OTRA'' || Ishan Liyanage || Pootle:
: How do you generate the initial all-encompassing <tt>tm</tt> file?
|-
: Every time a new language or PO is added, the associated memories for them (as targets) should be (automatically?) created...
| ''OTRA'' || Hevafonsekage Joseph Priyanga Fonseka || Pootle:
: Updating a POT (iow, a new version) should trigger the update of all languages.
|-
: The updating (which is not done in real-time) would still need to be done in a reasonable time period.


! style="background:lightgray; " colspan=3 | [sk] &mdash; [[Slovak language]] &mdash; {{langname-sk}}
=== User permissions ===
|-
: ''see [http://translate.sourceforge.net/wiki/pootle/permissions Pootle::Permissions]''
| ''TR'' || ??? || Pootle: ?
|-


! style="background:lightgray; " colspan=3 | [sl] &mdash; [[Slovenian language]] &mdash; {{langname-sl}}
Permissions are granted or revoked within a specific language-project pair, and optionally, within that scope, to specific users. This means that the <tt>nobody & default</tt> users have local, instead of global, behaviors.
|-
| ''OTRA'' || Denis Oštir || Pootle:
|-


! style="background:lightgray; " colspan=3 | [sr] &mdash; [[Serbian language]] &mdash; {{langname-sr}}
The following is the list of the available permissions handled by [[Pootle]]. The actual description is a result of observation and deduction (haven't found a specific documentation on them), so they are to be considered with <tt>#, fuzzy</tt> tag...
|-
| ''O'' || [[UserGoran_Rakić|Goran Rakić]] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [sv] &mdash; [[Swedish language]] &mdash; {{langname-sv}}
'''NOTE:''' The ''system'' administrator flag is not reachable through the GUI, as it resides as a flag (<tt>rights.siteadmin</tt>) in the <tt>user.prefs</tt> file. This permission allows the users possesing it to administrate all the projects, languages and functionality (you should always have one user with it).
|-
| ''OTRA'' || Mattias Ohlsson || Pootle: Sprak
|-


! style="background:lightgray; " colspan=3 | [te] &mdash; [[Telugu|Telugu language]] &mdash; {{langname-te}}
{| border=1 cellspacing=0
|-
| ''OTRA'' || [[User:satya|Satyanarayana Murthy Saladi]] || Pootle: satya
|-
| ''T'' || [[User:Veeven|Veeven]] || Pootle: veeven
|-


! style="background:lightgray; " colspan=3 | [th] &mdash; [[Thai|Thai language]] &mdash; {{langname-th}}
|-
| ''OT'' || [[User:willwill|Manatsawin Hanmongkolchai]] || Pootle: willwill
|-
|-
! Permission !! Description !! Default users !! Comments


! style="background:lightgray; " colspan=3 | [tpi] &mdash; [[Tok Pisin language]] &mdash; {{langname-tpi}}
|- valign="top"
|-
! View
| ''OA'' || [[User:Leeming|David Leeming]] || Pootle: leemingd
| Allows the browsing of the PO files and their translation
|-
| <tt>nobody, default</tt>


! style="background:lightgray; " colspan=3 | [tr] &mdash; [[Turkish language]] &mdash; {{langname-tr}}
|- valign="top"
|-
! Suggest
| ''OTR'' || [[User:tomhannen|Tom Hannen]] || Pootle: tomhannen
| Allows to suggest a translation
|-
| <tt>default</tt>
| ''OTRA'' || Abdullah Kocabas || Pootle:
| this should be enabled for <tt>nobody</tt> if we want to make things simpler for the [[#Opportunistic translator]].
|-
| ''OTRA'' || Alp Simsek || Pootle:
|-
| ''OTRA'' || Petek Saracoglu || Pootle:
|-
| ''OTRA'' || Yasimin Gokce || Pootle:
|-
| ''OTRA'' || Serkan Cabi || Pootle:
|-


! style="background:lightgray; " colspan=3 | [ur] &mdash; [[Urdu|Urdu language]] &mdash; {{langname-ur}}
|- valign="top"
|-
! Translate
| ''OT'' || [[User:FarhanKhan|Farhan Khan]] || Pootle:
| Allows to '''submit''' a translation.
|-
| ''none''
| ''OTRA'' || [[User:HudaSarfraz|Huda Sarfraz]] || Pootle: Huda
| By default there are no users allowed to translate forcing the administrator to ''grant'' this right&mdash;bureaucratic and restrictive.
|-
| ''OTRA'' || [[User:Sulmanminhas|Salman Minhas]] || Pootle:
|-


! style="background:lightgray; " colspan=3 | [vi] &mdash; [[Vietnamese language]] &mdash; {{langname-vi}}
|- valign="top"
|-
! Overwrite
| ''OTRA'' || Clytie Siddall || Pootle:
| When uploading a PO file, it allows the user to overwrite any existing file (iow, no merge of changes)
|-
| ''none''
| Handle with care.


! style="background:lightgray; " colspan=3 | [yo] &mdash; [[Yoruba language]] &mdash; {{langname-yo}}
|- valign="top"
|-
! Review
| '' '' || [[User:XXX|''unknown'']] || Pootle:
| Allows to approve/reject ''suggestions'' made by users capable of ''suggesting'' translations.
|-
| ''none''
| ''see [[#Reviewer]]''


! style="background:lightgray; " colspan=3 | [zh-TW] &mdash; [[Chinese language]] &mdash; {{langname-zh-TW}}
|- valign="top"
|-
! Archive
| OTRA || [[User:YChao|Yuan Chao]] || Pootle: YuanChao
| Would allow the user to download the a set of PO files in zip format. Probably those of a language/project.
|-
| ''none''

|- valign="top"
! Compile PO files
| Allows an user to generate / compile the PO into MO files.
| ''none''
| It is unknown where the MO files will reside, or how they will be transfered or made available. {{pending|need to explore}}

|- valign="top"
! Assign
| Allows an user to assign files {{pending|(or chunks of files)}} amongst users that have been granted the '''translate''' permission.
| ''none''
| {{pending|need to explore}}


! style="background:lightgray; " colspan=3 | [zh-CN] &mdash; [[Chinese language]] &mdash; {{langname-zh}}
|- valign="top"
! Administrate
| It's granularity is not well defined (or understood): administrate everything (seems like it), or just a project? or just a language? or just a language-in-a-project?
| ''none''
| {{pending|need to explore}}

|- valign="top"
! Commit
| The holy grail or point of all this: make a translation available.
| ''none''
| Again, the granularity is not well defined or understood. {{pending|need to explore}}

|}

=== Advanced site administration ===

; Lowering latency through web servers : ''see [http://translate.sourceforge.net/wiki/pootle/apache Pootle::Apache]''
: ''see [http://translate.sourceforge.net/wiki/pootle/nginx Pootle::NginX]''
; Translator statistics : ''see [http://translate.sourceforge.net/wiki/pootle/logstats Pootle::LogStats]
; Configurable logos : ''see [http://translate.sourceforge.net/wiki/pootle/important_changes Pootle::Changes]
; Removing / Renaming files : According to user friedel in [[IRC]]#pootle, you can 'safely' delete a file (and associates&mdash;ie: <tt>xyzzy.es.po.pending</tt>) without much to worry about. This has to be done outside of [[Pootle]].

== File structure ==

{| border=1 cellspacing=0
|-
|-
| TA || [[User:YChao|Yuan Chao]] || Pootle: YuanChao
! F/D+Type !! width=40% | File/dir !! Purpose !! Notes
|-
|-
| || [] ||
| D-auto
| <tt>.../po</tt> || root of the Pootle files
|- valign="top"
| D-auto
| <tt>.../po/terminology/''xx''</tt> || the directory where <tt>terminology</tt> files are stored on a per language basis (normal, but minimalistic, PO files).<br>{{pending|Given that POTs are manually injected and updated, maybe the terminology directory is polymorphic so a <tt>templates</tt> language directory could be used &mdash; enabling to have system-wide terminology}}
|- valign="top"
| D-gui
| <tt>.../po/''project''</tt> || each 'project' has its own root
|- valign="top"
| D-manual
| <tt>.../po/''project''/{{pending|templates}}</tt> || the directory where the POTs associated with the project must go (not accessible through the web-GUI)
|- valign="top"
| D-gui
| <tt>.../po/''project''/''xx''</tt> || within each 'project' a directory is set up for each language (using [[ISO 639]] coding). Created when a language is added to the project. {{pending|unknown how to remove it&mdash;probably just deletion)}}
|- valign="top"
| F-auto
| <tt>.../po/''project''/''xx''/pootle-''project''-''xx''.prefs</tt> || for each [language+project] holds the <tt>rights</tt> (for nobody, default & specific users) and the <tt>goals</tt> (name and list of files),
|- valign="top"
| F-auto
| <tt>.../po/''project''/''xx''/pootle-''project''-''xx''.stats</tt> || holds for each PO file six numbers (pressumably translated words, translated strings, non-translated words, non-translated string, total words, and total strings)
|- valign="top"
| F-gui/rcs
| <tt>''somefile''.po</tt> || the actual PO file.
|- valign="top"
| F-auto
| <tt>''somefile''.po.pending</tt> || if <tt>suggestions</tt> have been made, they are stored here in a pseudo-PO format that modifies the msgid (appends a <tt>"_: suggested by ''username''\n"</tt> line). See [[#Bug dealing with Suggestions]].
|- valign="top"
| F-auto
| <tt>''somefile''.po.stats</tt> || statistics about the internals of the file, apparently only about the <tt>checks</tt> and their results.
|- valign="top"
| F-manual
| <tt>{{pending|''somefile''.po.tm}}</tt> || the results of applying a translation memory to that file, pressumably the suggested string translations.
|}


|}
== To Do ==
| width=50% |
=== Usage ===
; Role key

; ''O''-pportunistic : if you would be willing to make suggestions only to the translations (ie: fixing typos or alternative wordings that would be reviewed)
* Merge of uploaded PO
; ''T''-ranslator : actually translate strings
* Check if there any kind of verification when a PO file is uploaded to ensure the up-to-dateness of the original POT on which it is based? (ie: a PO is loaded but the POT on which it is based is a an older version)
; ''R''-eviewer : process suggestions made by '''o'''pportunistic volunteers and overall checking of translated strings.
* Update from templates (this needs the git interface on one side, but also if a POT is updated by whichever means, the PO should be merged/solved)
; [[Pootle/Administration|''A''-dministrate]] : a particular language (or a particular project in a given language). It involves '''r'''eviewing and other tasks (like determining [[#user permissions]], interfacing with d.l.o, etc).
* {{Pending|Define a workflow!}} &mdash; the [[#Basic Scenarios]] above just cover the translator part. After the git interface is tested, the handling of the developer input, and the [[Pootle]] output must be defined.
; [http://lists.laptop.org/listinfo/localization localization@lists.laptop.org] : subscription to this list is '''strongly recommended''' especially for possible administrators (even mandatory). Other roles should also consider joining it in order to keep track of eventual notifications and news.

|}
=== Config ===

* Interface with GIT &mdash; both on importing POTs & POs from it & exporting POs back to it.
** [http://translate.sourceforge.net/wiki/pootle/version_control Version Control] doc ([http://translate.sourceforge.net/wiki/pootle/configure_version_control_authentication scant doc on configuration])
** [[User:Alfonsodg|Alfonso]] has patched the server with the git support and installed git in the server. So we should be almost in condition to start testing against dev.laptop.org.
* For completion's sake, language plurals & associated formulas must be defined (a bit pointless if developers don't actually do i18n right though, but...)

=== Done ===

* user creation (both through the admin & registration interface that uses confirmation codes via mail)
* add / remove languages (basically reduced the set to green countries languages in order to focus attention)
* add project (only one for 'olpc' &mdash; deleting is performed through the GUI.
* associate languages & projects
* define permissions for nobody, default and specific user
* upload PO file (note: it doesn't verify against the templates, so you may end up uploading anything anywhere... handle with care)
* translate on line &mdash; may be a bit slow although it could be the browser, connection or server (see [[#Advanced site administration]])
* used the ''suggest'' funcionality, hit bug with ''review'' (see [[#Bug dealing with Suggestions]])
* Define goals
* Assign translations
* Delete files (this is done outside of [[Pootle]] directly on them... some things will protest, but is the 'accepted procedure')

== Glitches ==

* Something related to encodings was wrong during the setup
*: Alfonso commented several language specs that apparently were iso8859 instead of UTF ??

=== Bug dealing with Suggestions ===

There seems to be something awry with the '''suggestions'''... somehow there seems to be a mismatch between the '''msgid''' for which the suggestion was made, and the '''msgid''' displayed in the review process. IOW, you suggest ''foo'' as a translation of ''bar'', but in the review process it will show it as a suggestion for ''xyzzy''!! {{pending|review problem!}}

Talking in [[IRC]]#pootle, the following emerged: the mechanism used to associate a given suggestion is based on the <tt>#:</tt> comments (usually documenting the source code line where the string is located). This mechanism fails when there are more than one strings extracted from the same source line.

; Possible solutions & workarounds : the problem is relatively serious as it inhibits the [[#Opportunistic translator]] (or any other translator) from making suggestions (as they may get lost).
:* modify the source code to avoid having more than one <tt>gettext</tt> string per line.
:* modify the POT to avoid duplicate comments (iow, a manual process)
:* disable the suggestions
:** {{pending|explore}} the possibility of having the ''offending'' POT in another project where suggestions are not allowed (thus avoid reviewers get bitten by it).
:* patch [[Pootle]] (or file a bug)


== See also ==
== See also ==


* User Guides &mdash; [http://translate.sourceforge.net/wiki/pootle/index#Guides af, cs, de, en, es, eu, fa, fr].
* Pootle User Guides &mdash; [http://translate.sourceforge.net/wiki/pootle/index#Guides af, cs, de, en, es, eu, fa, fr].
* [http://translate.sourceforge.net/wiki/pootle/admin_guide Administrator guide]
* [http://translate.sourceforge.net/wiki/pootle/admin_guide Administrator guide]
* [http://translate.sourceforge.net/wiki/pootle/site_administrator_s_guide Site administrator guide]
* [http://translate.sourceforge.net/wiki/pootle/site_administrator_s_guide Site administrator guide]
* http://wiki.creativecommons.org/Translating_with_Pootle
* http://wiki.creativecommons.org/Translating_with_Pootle
* http://www.ohloh.net/projects/3285?p=Pootle+and+Translate+Toolkit
* http://www.ohloh.net/projects/3285?p=Pootle+and+Translate+Toolkit
* http://en.wikipedia.org/wiki/Pootle
* [[wikipedia:Pootle]]
* http://www.wordforge.org/drupal/en/projects/wordforge/tools/localegen &mdash; locale generator for OO (may give some ideas about what is ''not'' fixed)
* http://www.wordforge.org/drupal/en/projects/wordforge/tools/localegen &mdash; locale generator for OO (may give some ideas about what is ''not'' fixed)


[[Category:Localization]]
[[Category:Localization]]
[[Category:Language_support]]

Latest revision as of 08:31, 13 January 2013

Please note that the old Pootle address of http://dev.laptop.org/translate does not work anymore. Please use http://translate.sugarlabs.org instead.

All data and user accounts should work in the new Pootle installation.
IRC #olpc-pootle, #olpc-content

UPDATE
The test has gone forward and we are in the process of establishing the workflow to make it the Localization (L10N) platform of the XO.
WANTED
Volunteers both for translating and coordinating. If interested sign-up as a volunteer!

Some ways to find the translate server:

These are the notes taken and rough sketches for the processes involved in the localization effort in order to use Pootle as a more liberal L10n platform.

There are several scenarios that depend on the roles and their associated responsibilities (ie: translators, coders, administrators, etc). Below we outline the two most important ones from the POV of the translators that we could classify as either the opportunistic translator (fixing a typo or translating a few missing strings) and a registered translator (that is somehow more committed with the whole l10n reality).

If we consider that in the ultimate case children will be dealing with code (thus with gettext), we want things and processes to be as simple and straight forward as possible, so that in the end anybody, including children, will be able to translate or at least localize content to some degree. With this in mind, we aim for an environment that will:

  • allow anybody to make suggestions,
  • allow registered and trusted users to review and make translations, and
  • administrators to commit.

How to Translate for OLPC XO and Sugar using Pootle

i18n & L10n

Most people will argue that localization (L10n / l10n) concerns and issues should be tackled way before coding is finished, and quite a few will categorically say that it will be too late by then. Avoiding the philosophical and formal aspects, and taking a more pragmatic approach, L10n is usually an afterthought and internationalization (i18n) an annoying prerequisite... that has to be done.

In the context of the OLPC XO software and activities, and for practical purposes will avoid the debate on exactly where does L10n meets the code and start from the point where the output of i18n is used as the input for the l10n process. In other words, we'll elaborate based on the simplistic model that goes along the line:

  1. programmer uses gettext function calls around human readable language in the source code
  2. generate POT (gettext Portable Object Template) from the source code (output of the i18n process)
  3. generate PO (gettext Portable Object) based on POT
  4. translate / populate the PO with locale specific content
  5. generate the final PO (or MO) (gettext Machine Object, output of the l10n process)
  6. the executable code uses the PO (or MO) to comunicate with the final user


Developers

see Wikipedia's overview, Python internationalization,

the Translate project's guide, KDE i18n guide, GNU gettext manual and other sources


Developers willing to read a bit more about i18n & L10n, should review the links above. Regardless of how much or how good the i18n effort is, Pootle's needs one (or more) .POT files. Developers should be aware that localization is NOT just about instrumenting strings, as it includes plurals, numbers, dates, currencies, text-flow, scripts, fonts... and that it needs to be tested (ie: pseudolocalization testing) that needs to be considered in the overall development cycle. Also, if you want your activity to be properly localized, think about commenting your strings.

Translators

see Translating for the OLPC project using Pootle, The Translator's Guide, L10n guide, translation guide, more links to come...

Being able to understand or grasp the intended meaning of some text in a language does not make you a translator, but "In the land of the blind, the one-eyed man is king." and all collaborations are welcome, although we also recommend reading some guidelines and documentation that may at least help you avoid some of the basic or typical errors and pitfalls.

Basic Scenarios

The basic idea is to allow the participation of anybody willing to put some effort while trying to keep a given quality of the translations.

  • You can download the PO, so there's no forcing of the on-line UI (although you need the upload right to inject it back. So before going the offline road please coordinate with the admins.
  • In the translation interface, fuzzy entries are grayed out and there's a gray vertical line separating the terms

Opportunistic translator

This user just wants to help. She/he doesn't want to get tangled in the administrative tasks. The only possible collaboration available is to suggest translations (which will be reviewed by users who have been granted the Review permission in a particular language).

After navigating to the olpc pootle server project: olpc language: spanish to finally reach a file (ie: TamTamSynthLab)

The interface will display a series of PO entries (one will have the focus—if it doesn't, you can double click the entry, or hovering over one will make an 'Edit' link appear that enables it—showing an entry field, and the following controls:

a picture is worth 1000 words

  • Back & Skip buttons — jump to the previous or next entry
  • Copy button — copies the original (msgid) value and continues in edit mode
  • Suggest button — the actual collaboration of suggesting a translation
  • Fuzzy checkbox — denotes that the suggested translation is/is not 100% trustworthy
  • Special characters specific to the language (see #Languages)
  • grow / shrink — allows growing and shrinking of the entry field (see #User options
  • Translator comments field — comments either extracted from the source code, or added by other translators

The opportunistic translator then proceeds to navigate the file/s entering suggestions (to be processed later by the reviewers).


Admin notes
The Suggest permission must be granted on a per-language-project basis.
Each language may have specific or special characters that are may not be available in the user's keyboard, but can be provided for in the #Language specification.

Registered translator

Except for the mandatory pre-condition to register, which enables the extra [Submit] button when translating, the overall process is quite similar to that of the #Opportunistic translator. On the other hand, several user-specific permissions may apply (ie: off-line translation) and the GUI will adapt and offer them. Also, as a registered translator, you may be assigned specific files or strings to translate and/or review, allowing to better coordinate the overall effort.


Admin notes
In a collaborative and low-entry-barrier process, the administrator/s should enable the default user to actually translate — Navigation: admin | projects | project_name | language | permissions +Translate.
The default #user permissions apply to any registered user (unless they are overridden in a case-by-case approach). In the out-of-the-box install they include: View, Suggest, Archive & Compile PO files

User Scenarios

Register as a translator

  1. Head towards the pootle site
  1. Follow the register link where you fill in the following fields: Username, Password, Confirm password, Full Name & Email Address; click on the [Register Account] button that will send a confirmation message to the email address with an activation code.
  2. Following the link in the email will activate the newly created account after which you will be asked to log in.

User options

In your user page there's a link to Change options that will allow you define some things:

  • Projects you wish to participate (for the moment only olpc should be considered a valid option)
  • Languages you wish to collaborate in. If you don't find your language, as an administrator you can associate it to the project (see #Languages) or as a mere mortal, you should contact an administrator.
  • Other options like personal data & translation UI are present.

After configuring, don't forget to hit the [Save changes] button to make them effective, after which you can return to your #user page by means of the Home Page link.

User page

aka: 'Home', or 'My account' page.

You can reach your user page following the Home or My account link (depending on where you are) and it will show the appropriate links to the selected projects grouped by languages:

  • The language link takes you to the statistics page per project
  • the project-in-a-language link takes you the the statistics page displaying all its files

Advanced User Scenarios

Reviewer

A user who has been granted the Review permission, may accept or reject the suggestions made by users (who must have the Suggest permission). The way to do this is there another? is to go to a language/project combination (ie: spanish-olpc) and follow the Show Editing Functions. Here you have two alternatives: review the whole set of suggestions in the language-project set, or work on the suggestions present in a specific file (ie: all suggestions or TamTamSynthLab suggestions).

Once in the review UI, the reviewer has four options: Accept, Reject, Back or Skip which are self evident, but nevertheless will mention:

Accept the reviewer translator accepts the suggestion and is registered
Reject the suggested translation is rejected does that mean erased for the user or the file?
Back goes to the previous suggestion assume a previous non-accepted/rejected suggestion
Skip goes to the next available suggestion

In the case where multiple suggestions have been made, each one has its Accept & Reject buttons, while only the last will have the Back & Skip buttons.

Regardless of the multiplicity of suggestions, each suggested string will be diffed with the current string highlighting the changes. It also displays (if available) the name of the user that made the suggestion.

Editing functions

This section of the UI displays on a per-file basis several functionalities that depend on the permissions of the user:

Translate All Goes to each string individually no matter what their state, across all files
Quick Translate Only go to strings that are fuzzy or untranslated, across all files
Translate My Strings As Translate All but only go to strings that are assigned to you.
Quick Translate My Strings As with Quick Translate but only go to fuzzy and untranslated strings that are assigned to you.
PO file used for off-line translators in order to retrieve the whole .PO file.
XLIFF file used for off-line translators and interfaces to retrieve the whole file in said format. explore
Qt .ts file explore
CSV file explore

Show checks

For more information on the quality checks, see the documentation.

This functionality is a real helper (at least for latin scripts) as it runs a series of checks on the translations. So Pootle besides the obvious verification of translated+fuzzy+untranslated check, it verifies:

  • simplecaps — for extra capital letters
  • startcaps — initial capital letter matches between source & translation
  • startpunc — if the original doesn't start with a letter, the translation probably shouldn't either
  • unchanged — the source & translation are the same
  • others — for a total of 44 checks. The most important being the critical tests: accelerators, escapes, newlines, nplurals, printf, tabs, variables and xmltags


Obviously, these checks, as any automated language process, are to be taken as a guidance and not as a rule. The check behaviour can be adjusted for a language, e.g. simplecaps could be disabled for a language that does not have a concept of capitals, doublequoting can be made aware of quote characters used in a language. These are changed by providing a lang module e.g. Japanese and French.

Zip of folder

Actually, any 'grouping' of PO files may be downloaded as a ZIP file if the user has the archive right. In other words, you can download the files in a language, goal, file, etc. It may be possible that Pootle extracts and recombines from several files in order to provide the zip with say 'My Strings' for offline work.

Administration

See Pootle/Administration

User permissions

See Pootle/Administration#User permissions

Sign-up

If interested in the Localization effort, please sign up below. Although we are focusing on Amharic, Arabic, English, Spanish, French, Hausa, Hindi, Igbo, Nepali, Portuguese, Romanian, Russian, Kinyarwanda, Thai, Urdu, & Yoruba and Give One Get One languages, any other language is welcome. If you are not subscribed to localization@lists.laptop.org we strongly suggest you do so.

The more current list, generated every week from the Pootle server.

Role Name Comments
[af] — Afrikaans language — Afrikaans
OTRA Morgan Collett Pootle:
[am] — Amharic language — አማርኛ
OTRA Yosef Abate Pootle:
OTR tegegne tefera Pootle: Teferra
OT Mariamawit Getachew Pootle: mari
OT Frehiwot Tenagne Pootle: fre
[ar] — Arabic language — عربي
OTRA Khaled Hosny Pootle: khaled
OTR Mohamed Sanad Pootle: KillerLegend
[ay] — Aymara — aymar aru
A Yamandú Ploskonka Pootle: yamaplos
[bg] — Bulgarian language — български
OTRA Alexander Todorov Pootle: atodorov
[bn] — Bengali language — বাংলা
OTRA Jamil Ahmed Pootle: jamil
OTR Khandakar Mujahidul Islam Pootle: suzan
OTR Mahay Alam Khan Pootle: mak
[bn-IN] — Bengali language — বাংলা
OTRA Indranil Das Gupta Pootle:
OTRA Sankarshan Mukhopadhyay Pootle:
[ca] — Catalan language — català
OTRA Jaume Nualart Pootle: jaume
OTRA Victor Guillamon Pootle:
OTRA Tomeu Vizoso Pootle: tomeu
[cs] — Czech language — česky
TR Jakub Guttner Pootle: Kuba
[de] — German language — deutsch
O Adricnet Pootle:
O Michael Reschke Pootle:
OTRA Markus Schlager Pootle: mschlager
OTRA Gerhard Steiner Pootle:
[dz] — Dzongkha — ཇོང་ཁ
OTRA Tenzin Dendup Pootle:
OTRA Uden Sherpa Pootle:
[el] — Greek language — ελληνικά
TRA Simos Xenitellis Pootle: simosx
TRA Kostas Papadimas Pootle:
TRA John Sarlis Pootle:
[en] — English language — english
OTRA SJ Klein Pootle: sj
[es] — Spanish language — español
OTRA Xavier Alvarez Pootle: Xavi
TRA Mauro Parra-Miranda Pootle: mauropm
OTR Alexander Dupuy Pootle: Dupuy
OTR Yamandú Ploskonka Pootle: yamaplos
OTR Pilar Saenz Pootle: PilarSaenz
OTRA Jameson Chema Quinn Pootle:
OA Sayamindu Dasgupta Pootle:
[fa] — Persian — فارسی
A Behnam B. Marandi Pootle:
[fa-AF] — Dari — دری
TRA Sohaib Obaidi Pootle:
[fi] — Finnish language — suomi
none Pootle:
[ff] — Fula language — fulfulde
OTRA Ibrahima Sarr] Pootle:
[fr] — French language — français
OTRA Samy Boutayeb Pootle: samybt
TR Dominique Eav Pootle: domeav
OTR Pierre Métras Pootle: pierre
TRA Lionel Laské Pootle: llaske
OT Alexander Dupuy Pootle: Dupuy
OT Yamandú Ploskonka Pootle: yamaplos
OTRA Bastien Guerry Pootle: bzg
A Jean-Christophe Helary Pootle:
[gl] — Galician language — galego
none Pootle:
[gu] — Gujarati language — ગુજરાતી
OTRA Kartik Mistry Pootle:
[ha] — Hausa language — Hausa
none Pootle:
[hi] — Hindi language — हिन्दी
OTRA Satyaakam Goswami Pootle:satyaakam
OTRA Shirish Goyal Pootle:shirish
[ht] — Haitian Creole language — kreyòl ayisyen
TA Edward MokuraiCherlin Pootle: mokurai
TA Bastien Guerry Pootle: bzg
TRA Jude Augusma Pootle: jude
O Alexander Dupuy Pootle: Dupuy
TRA MasterChes Pootle: Masterches
TRA lacrete Pootle: lacrete
[id] — Indonesian language — Bahasa Indonesia
TRA User:Danoe Pootle:
A Yama Ploskonka Pootle: Yamaplos
[ig] — Igbo language — igbo
unknown Pootle:
[is] — Icelandic language — íslenska
O Steinninn Pootle:
[it] — Italian language — italiano
OTRA Carlo Falciola Pootle: carlo
OTRA Julieanne R. Pootle:
[ja] — Japanese language — 日本語
OTRA Yoshiaki Sonoda Pootle: Spiky
OTR Taizo Shiozaki Pootle: Taizo1969
OTRA Korakurider Pootle: Korakurider
OTR Takashi Yamamiya Pootle: Takashi
OTR KIRYU Yasuo Pootle: Kiryu
OTR Kazuhiro Abe Pootle: Abee
[km] — Khmer language — ភាសាខ្មែរ
A Edward Mokurai Cherlin Pootle: mokurai
T Rit Lim Pootle: Lirit
[ko] — Korean language — 한국어
O Cymacyma Pootle:
OTR YunJae Jang Pootle: janggoon
OTRA SeungBum Kim Pootle: picxenk
OTRA Donghee Park Pootle: donghee
[mk] — Macedonian language — македонски
OTRA Arangel Angov Pootle: Arangel
[ml] — Malayalam language — മലയാളം
OTRA Ani Peter Pootle: anipeter
[mn] — Mongolian language — монгол
OTRA Enkhzul Gombodorj Pootle: Enkhzul
OTRA Odontsetseg Bat-Erdene Pootle:
O Cris Anderson Pootle: anderson861
[mr] — Marathi language — मराठी
OTRA Swapnil Hajare Pootle: swapnil
OTRA Sayamindu Dasgupta Pootle:
OTRA Sandeep Shedmake Pootle:
[mvo] — Marovo language (Solomon Islands)
OA David Leeming Pootle: leemingd
OT Phillip Pukefenua Pootle: Nukuman
OT Elnah Tati Pootle: Barighaza
[nau] — Nauruan language
OA David Leeming Pootle: leemingd
OT Xavier Barker Pootle:
[ne] — Nepali language — नेपाली
OTRA Prabhas Pokharel Pootle: prabhas
OTR Anjali Lohani Pootle: anjali
OTR Tsering Lama Sherpa Pootle: tlsherpa
TRA Shankar Pokharel Pootle: shankar
[nl] — Dutch language — nederlands
OT Bastiaan Bakker Pootle: bastiaan
OTRA Myckel Habets Pootle: Myckel
OTRA Jeroen ten Berge Pootle:
[pa] — Punjabi language — ਪੰਜਾਬੀ
OTRA Jaswinder Singh Phulewala Pootle:
OTRA Shirish Goyal Pootle:shirish
[pap] — Papiamento language — Papiamento from Aruba, Curacao, Bonaire
OTRA Urso Wieske Pootle: uwieske
[pis] — Solomon Islands pidgin — pijin
OTRA David Leeming Pootle: leemingd
OT Phillip Pukefenua Pootle: Nukuman
OT Elnah Tati Pootle: Barighaza
[pl] — Polish language — polski
OTRA Wiktor Idzikowski Pootle: idzikow
OT Michal Hobot Pootle: ohm
[ps] — Pashto language — پښتو
TR Usman Mansour Pootle: usman1982
[pt] — Portuguese language — português
OTA Eduardo H. Silva Pootle: HoboPrimate
OTRA Ivo Emanuel Gonçalves Pootle:
[pt-BR] — Portuguese language — português do Brasil
OTA Juliano Bittencourt Pootle: juliano
OT Eduardo H. Silva Pootle: HoboPrimate
OT Alexander Dupuy Pootle: Dupuy
[qu] — Quechua language — runa simi
unknown Pootle:
[ro] — Romanian language — română
AT Adi Roiban Pootle: adiroiban1
OTR Maximilian Machedon Pootle:
[ru] — Russian language — русский
T Aleksey Bragin Pootle: fireball
TA Maxim Osipov Pootle: Maxim
T Nikita Bukhvostov Pootle: ddjanic
[rw] — Kinyarwanda language — kinyarwanda
OA Carine Umutesi Pootle:
OA Juliano Bittencourt Pootle: juliano
[no] — Norwegian language — norsk
ART Kent Dahl Pootle: MenThal
[sd] — Sindhi language — سنڌي
OTRA Naveed Pootle:
[si] — Sinhala language — සිංහල
OTRA Ishan Liyanage Pootle:
OTRA Hevafonsekage Joseph Priyanga Fonseka Pootle:
[sk] — Slovak languageTemplate:Langname-sk
TR ??? Pootle: ?
[sl] — Slovenian language — slovenščina
OTRA Denis Oštir Pootle:
[sr] — Serbian language — српски
O Goran Rakić Pootle:
[sv] — Swedish language — svenska
OTRA Mattias Ohlsson Pootle: Sprak
[te] — Telugu language — తెలుగు
OTRA Satyanarayana Murthy Saladi Pootle: satya
T Veeven Pootle: veeven
[th] — Thai language — ไทย
OT Manatsawin Hanmongkolchai Pootle: willwill
[tpi] — Tok Pisin language — tok pisin
OA David Leeming Pootle: leemingd
[tr] — Turkish language — türkçe
OTR Tom Hannen Pootle: tomhannen
OTRA Abdullah Kocabas Pootle:
OTRA Alp Simsek Pootle:
OTRA Petek Saracoglu Pootle:
OTRA Yasimin Gokce Pootle:
OTRA Serkan Cabi Pootle:
[ur] — Urdu language — اردو
OT Farhan Khan Pootle:
OTRA Huda Sarfraz Pootle: Huda
OTRA Salman Minhas Pootle:
[vi] — Vietnamese language — tiếng việt
OTRA Clytie Siddall Pootle:
[yo] — Yoruba language — yorùbá
unknown Pootle:
[zh-TW] — Chinese language — 繁體中文
OTRA Yuan Chao Pootle: YuanChao
[zh-CN] — Chinese language — 中文
TA Yuan Chao Pootle: YuanChao
[]
Role key
O-pportunistic
if you would be willing to make suggestions only to the translations (ie: fixing typos or alternative wordings that would be reviewed)
T-ranslator
actually translate strings
R-eviewer
process suggestions made by opportunistic volunteers and overall checking of translated strings.
A-dministrate
a particular language (or a particular project in a given language). It involves reviewing and other tasks (like determining #user permissions, interfacing with d.l.o, etc).
localization@lists.laptop.org
subscription to this list is strongly recommended especially for possible administrators (even mandatory). Other roles should also consider joining it in order to keep track of eventual notifications and news.

See also