Pootle: Difference between revisions

From OLPC
Jump to navigation Jump to search
m (→‎Observations: documenting)
(→‎Register as a translator: https appears to not work, improved language)
 
(205 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|Xavi]]|[[User:Alfonsodg|Alfonsodg]]}}
{{OBX team|[[User:RafaelOrtiz|Rafael Ortiz]], [[User:Alfonsodg|Alfonsodg]]|[[User:Xavi|Xavier Alvarez]]}}
{{OBX irc|#olpc-pootle, #olpc-content}}
{{olpcboxbottom}}
{{olpcboxbottom}}
{{TOCright}}
<big>
; 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>


Some ways to find the translate server:
Here's a report of trying to document the ups & downs of installing [http://www.wordforge.org/drupal/projects/wordforge/tools/pootle '''Pootle'''].
* '''[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.
== Scenarios ==

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, 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==
* See slides at http://opensource.sfsu.edu/node/452

== 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, 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:
# programmer uses gettext function calls around human readable language in the source code
# generate POT (gettext Portable Object Template) from the source code (output of the i18n process)
# generate PO (gettext Portable Object) based on POT
# translate / populate the PO with locale specific content
# 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


=== 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, 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 ===
: ''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 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 [[#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


=== Opportunistic translator ===
=== 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 the {{pending|language/project?}} administrator.
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://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'''])
; Admin notes : The permission must be granted. (project / language / permissions - nobody + suggest)
: Each language may have specific or special characters unavailable in the usual keyboards and can be defined in the admin space of the languages of the server.


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:
Assuming '''Project:''' olpc '''Language:''' spanish


{{pending|a picture is worth 1000 words}}
# Heads to [http://democentro.com:81 pootle site]
* Back & ''Skip'' buttons &mdash; jump to the previous or next entry
# Follows the [http://democentro.com:81/projects/olpc olpc project] link
* Copy button &mdash; copies the original (''msgid'') value and continues in edit mode
# Enters the [http://democentro.com:81/es/olpc spanish] language section
* '''Suggest''' button &mdash; the actual '''collaboration''' of suggesting a translation
# Picks a file (ie: [http://democentro.com:81/es/olpc/TamTamSynthLab.master.es.po?translate=1&view=1 TamTamSynthLab] which has fuzzy entries)
* Fuzzy checkbox &mdash; denotes that the suggested translation is/is not 100% trustworthy
#* 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 has an entry field, a fuzzy checkbox and the following action buttons:
* Special characters specific to the language (see [[#Languages]])
#** Back &mdash; goes back to the previous entry
#** ''Skip'' &mdash; skips to the next entry (default action)
* ''grow / shrink'' &mdash; allows growing and shrinking of the entry field (see [[#User options]]
* Translator comments field &mdash; comments either extracted from the source code, or added by other translators
#** Copy &mdash; copies the 'msgid' value (continues in edit mode)
The opportunistic translator then proceeds to navigate the file/s entering suggestions (to be processed later by the [[#User permissions|reviewers]]).
#** '''Suggest''' &mdash; the actual '''collaboration'''

#** Fuzzy &mdash; denotes that the suggested translation is/is not 100% trustworthy
----
#** Special characters specific to the language (see above for definition)

#** ''grow / shrink'' &mdash; allows growing and shrinking of the entry field
; Admin notes : The [[#User permissions|<tt>Suggest</tt> permission]] must be granted on a per-language-project basis.
#** Translator comments &mdash; comments either extracted from the source code, or added by other translators
: 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.
# The opportunistic translator the navigates the file entering suggestions (to be reviewed by the {{pending|language/project? admin}})


=== Registered translator ===
=== Registered translator ===


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.
The ''default'' user permissions {{pending|will/should}} apply to any registered user, which in the out-of-the-box install include: <tt>View, Suggest, Archive & Compile PO files</tt>


----
; Admin note : The {{pending|archive is a zip file}}, while the compile is the ability to generate .MO files.
: In the collaborative and low-entry barrier, the {{pending|language/project?}} admin should enable the <tt>''default''</tt> user to actually translate &mdash; <tt>projects | olpc | ''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>.
# Head towards the [http://democentro.com:81/ pootle site]
: The <tt>default</tt> [[#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: <tt>View, Suggest, Archive & Compile PO files</tt>
# Follows the [http://democentro.com:81/register register] link where you enter
#* Username
#* Password
#* Confirm password
#* Full Name
#* Email Address
# After filling the above, hits the [Register Account] button that will send an email to the entered address with the activation code.
# Following the link in the email with the activation code you confirm its activation.
# Activating will complete the activation & take you to the user page.
#* Follow the ''Change options'' link to define the projects and languages you want to participate (for the moment '''project:'''''olpc'' & whichever languages noting that they are multiple select lists) hitting the <tt>[Save changes]</tt> button to confirm.
#* {{pending|Other options}} like personal data & translation UI are present.
#* Return to your user page following the ''Home Page'' link in the ''Option page'' where the appropriate links to the selected projects & languages should appear.
#** Quick links for each language, and under each language, the projects
#*** The language link takes you to the statistics page per project
#*** the project-in-a-language takes you the the statistics page displaying all its files
Afterwards, the process is similar to the [[#Opportunistic translator]] with the exception that you have an extra button <tt>[Submit]</tt> that effectively translates the string.


=== Administrator ===
== User Scenarios ==


==== Language ====
=== Register as a translator ===


# Head towards the [http://dev.laptop.org/translate/ pootle site]
==== Project ====


# 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.
==== Site ====
# Following the link in the email will activate the newly created account after which you will be asked to log in.


=== User options ===
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]. There are other general options of yet {{pending|unknown use and impact}}


In your user page there's a link to <tt>Change options</tt> that will allow you define some things:
; [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.
* '''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.
* {{pending|Other options}} like personal data & translation UI are present.
After configuring, don't forget to hit the <tt>[Save changes]</tt> button to make them effective, after which you can return to your [[#user page]] by means of the <tt>Home Page</tt> link.


=== User page ===
; [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, special characters (used in the translating UI), defining the number of plurals and its equation.
: aka: 'Home', or 'My account' page.
: NOTE: I've removed several (traditional) languages trying to limit the list to the core green languages: {{Status green language codes}}. Still pending: {{pending|plural formulas}}.


You can reach your user page following the <tt>Home</tt> or <tt>My account</tt> link (depending on where you are) and it will show the appropriate links to the selected projects grouped by languages:
; [http://democentro.com:81/admin/projects.html Projects] : this is the ''initial'' page where things come together. Besides being able to add/remove project ({{pending|what are all the other fields?}} you can follow each project to define the 'enabled languages' for it, and where you can add more languages. {{Pending|how do you '''remove''' a language from a project??}}
* The language link takes you to the statistics page per project
: This is where you can also {{pending|update from templates&mdash;POTs}}. The ''update from templates'' functionality is {{pending|still not understood}}.
* the project-in-a-language link takes you the the statistics page displaying all its files
: For example, following the [http://democentro.com:81/projects/olpc/admin.html olpc project] link you will find the list of languages. Each language (a link) takes you to the [http://democentro.com:81/es/olpc/admin.html user permissions] in said project-language combination.


== Proving Grounds ==
== Advanced User Scenarios ==


=== Reviewer ===
We are currently testing in an [http://democentro.com:81/ ad-hoc trial site]
* [http://democentro.com:81/about.html configuration]
* [http://democentro.com:81/projects/olpc/ olpc project] statistics
*: (PO files were uploaded from fedora&mdash;except spanish, which came from the PO versiona in the wiki)


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]).
{| border=1 cellspacing=0 style="text-align:right"

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:
{|
|-
|-
! align=right | Accept
! Language !! colspan=2 | Translated !! colspan=2 | Fuzzy !! colspan=2 | Untranslated !! Total !! Diff.Spanish
| the reviewer translator accepts the suggestion and is registered
|-
|-
! align=right | Reject
| [http://democentro.com:81/ar/olpc/ arabic] || 198 || 78% || 7 || 2% || 48 || 18% || 253 || 1425
| the suggested translation is rejected {{pending|does that mean erased for the user or the file?}}
|-
|-
! align=right | Back
| [http://democentro.com:81/pt_BR/olpc/ portuguese BR] || 174 || 84% || 12 || 5% || 19 || 9% || 205 || 1473
| goes to the previous suggestion {{pending|assume a previous non-accepted/rejected suggestion}}
|-
|-
! align=right | Skip
| [http://democentro.com:81/fr/olpc/ french] || 144 || 67% || 15 || 7% || 53 || 25% || 212 || 1466
| goes to the next available suggestion
|}
In the case where multiple suggestions have been made, each one has its <tt>Accept & Reject</tt> buttons, while only the last will have the <tt>Back & Skip</tt> 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:
{|
|-
! 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
| As Translate All but only go to strings that are assigned to you.
|-
! align=right | Quick Translate My Strings
| As with Quick Translate but only go to fuzzy and untranslated strings that are assigned to you.
|-
! align=right | PO file
| used for off-line translators in order to retrieve the whole .PO file.
|-
! align=right | XLIFF file
| used for off-line translators and interfaces to retrieve the whole file in said format. {{pending|explore}}
|-
|-
! align=right | Qt .ts file
| [http://democentro.com:81/pt/olpc/ portuguese] || 12 || 42% || 0 || 0% || 16 || 57% || 28 || 1650
| {{pending|explore}}
|-
|-
! align=right | CSV file
| [http://democentro.com:81/es/olpc/ spanish] || 1336 || 79% || 342 || 20% || 0 || 0% || 1678
| {{pending|explore}}
|}
|}


== Observations ==
=== 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:
* <tt>simplecaps</tt> &mdash; for extra capital letters
* <tt>startcaps</tt> &mdash; initial capital letter matches between source & translation
* <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>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



* Casual translators may only 'suggest' translation
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].
* You can download the PO, so there's no forcing of the on-line UI.

* In the translation interface, fuzzy entries are grayed out and there's a gray vertical line separating the terms
=== Zip of folder ===

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.

== Administration ==

See [[Pootle/Administration]]


=== User permissions ===
=== User permissions ===


See [[Pootle/Administration#User permissions]]
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...
; View : Allows the browsing of the PO files and their translation (<tt>nobody, default</tt>)
; Suggest : Allows to suggest a translation (<tt>default</tt>&mdash;this should be enabled for <tt>nobody</tt> if we want to make things simpler for the [[#Opportunistic translator]]).
; Translate : Allows to '''submit''' a translation. (by default there are no users allowed to translate forcing the administrator to ''grant'' this right&mdash;bureaucratic and restrictive)
; Overwrite : When uploading a PO file, it allows the user to overwrite any existing file (iow, no merge of changes). Handle with care.
; Review : {{pending|need to explore}} but in theory, those users that make ''suggestions'' may be aproved/rejected by an user with this permission.
; Archive : {{pending|need to explore}} but in theory allows a user to download the whole set of PO files in zip format. Probably those of a language/project.
; Compile PO files : {{pending|need to explore}} but in theory would compile the PO into MO files. It is unknown where those MO files will reside or transfered.
; Assign : {{pending|need to explore}} but would allow to assign files (or chunks of files) to amongst ''translate-enabled'' users.
; Administrate : {{pending|need to explore}}. It's granularity is not well defined: administrate everything (seems like it), or just a project? or just a language? or just a language-in-a-project?
; Commit : {{pending|need to explore}} but it seems obvious that this is the final-all-too-sought objective: make a translation available. Again, the granularity is not well defined or understood.


== To Do ==
== Sign-up ==
=== Usage ===


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.
* Define goals
* Explore the 'suggest' function & review process
* File maintenance: rename, delete files? How is it done? (ie: uploaded a file with a name that has no POT should not be valid&mdash;but I've done it&mdash;so if it was a mistake, how do you undo it?)
* Is 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)


[http://dev.laptop.org/~sayamindu/teams.html The more current list], generated every week from the Pootle server.
=== Config ===
{|
|-
|
{| border=1 cellspacing=0 align=center
|-
! Role !! Name !! Comments
|-


! style="background:lightgray; " colspan=3 | [af] &mdash; [[Afrikaans language]] &mdash; {{langname-af}}
* 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])
| ''OTRA'' || [[User:Morgs|Morgan Collett]] || Pootle:
* Verify the registration via email
|-


! style="background:lightgray; " colspan=3 | [am] &mdash; [[Amharic language]] &mdash; {{langname-am}}
== Glitches ==
|-
| ''OTRA'' || Yosef Abate || Pootle:
|-
| ''OTR'' || [[User:Teferra |tegegne tefera]] || Pootle: Teferra
|-
| ''OT'' || Mariamawit Getachew || Pootle: mari
|-
| ''OT'' || Frehiwot Tenagne || Pootle: fre
|-


! style="background:lightgray; " colspan=3 | [ar] &mdash; [[Arabic language]] &mdash; {{langname-ar}}
* Something related to encodings was wrong during the setup
|-
*: Alfonso commented several language specs that apparently were iso8859 instead of UTF ??
| ''OTRA'' || [[User:Khaled hosny|Khaled Hosny]] || Pootle: khaled
* Haven't found the way to read / load the .POT files using git
|-
* User permits seem a bit awkward (per user, no groups except for 'nobody' & 'default')
| ''OTR'' || [[User:KillerLegend|Mohamed Sanad]] || Pootle: KillerLegend
|-

! style="background:lightgray; " colspan=3 | [ay] &mdash; [[Aymara]] &mdash; {{langname-ay}}
|-
| ''A'' || [[User:Yamaplos|Yamandú Ploskonka]] || Pootle: yamaplos
|-

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

! style="background:lightgray; " colspan=3 | [bn] &mdash; [[Bengali language]] &mdash; {{langname-bn}}
|-
| ''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}}
|-
| ''OTRA'' || Indranil Das Gupta || Pootle:
|-
| ''OTRA'' || Sankarshan Mukhopadhyay || Pootle:
|-

! style="background:lightgray; " colspan=3 | [ca] &mdash; [[Catalan language]] &mdash; {{langname-ca}}
|-
| ''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}}
|-
| ''TR'' || [[User:Kuba|Jakub Guttner]] || Pootle: Kuba
|-

! style="background:lightgray; " colspan=3 | [de] &mdash; [[German language]] &mdash; {{langname-de}}
|-
| ''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}}
|-
| ''OTRA'' || Tenzin Dendup || Pootle:
|-
| ''OTRA'' || Uden Sherpa || Pootle:
|-

! style="background:lightgray; " colspan=3 | [el] &mdash; [[Greek language]] &mdash; {{langname-el}}
|-
| ''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}}
|-
| ''OTRA'' || [[User:Sj|SJ Klein]] || Pootle: sj
|-

! style="background:lightgray; " colspan=3 | [es] &mdash; [[Spanish language]] &mdash; {{langname-es}}
|-
| ''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}}
|-
| ''A'' || Behnam B. Marandi || Pootle:
|-

! style="background:lightgray; " colspan=3 | [fa-AF] &mdash; [[Dari]] &mdash; {{langname-fa-AF}}
|-
| ''TRA'' || [[User:Sohaib_Ebtihaj|Sohaib Obaidi]] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [fi] &mdash; [[Finnish language]] &mdash; {{langname-fi}}
|-
| '' '' || [[User:XXX|''none'']] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [ff] &mdash; [[Fula language]] &mdash; {{langname-ff}}
|-
| ''OTRA'' || Ibrahima Sarr] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [fr] &mdash; [[French language]] &mdash; {{langname-fr}}
|-
| ''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}}
|-
| '' '' || [[User:XXX|''none'']] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [gu] &mdash; [[Gujarati language]] &mdash; {{langname-gu}}
|-
| ''OTRA'' || Kartik Mistry || Pootle:
|-

! style="background:lightgray; " colspan=3 | [ha] &mdash; [[Hausa language]] &mdash; {{langname-ha}}
|-
| '' '' || [[User:XXX|''none'']] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [hi] &mdash; [[Hindi language]] &mdash; {{langname-hi}}
|-
| ''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}}
|-
| ''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}}
|-

| ''TRA'' || [[User:Danoe]] || Pootle:
|-
| ''A'' || [[User:Yamaplos|Yama Ploskonka]] || Pootle: Yamaplos
|-

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

! style="background:lightgray; " colspan=3 | [is] &mdash; [[Icelandic language]] &mdash; {{langname-is}}
|-
| ''O'' || [[User:Steinninn|Steinninn]] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [it] &mdash; [[Italian language]] &mdash; {{langname-it}}
|-
| ''OTRA'' || [[User:carlo|Carlo Falciola]] || Pootle: carlo
|-

|-
| ''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}}
|-
| ''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}}
|-
| ''O'' || [[User:Cymacyma|Cymacyma]] || Pootle:
|-
| ''OTR'' || [[User:janggoon|YunJae Jang]] || Pootle: janggoon
|-
| ''OTRA'' || [[User:picxenk|SeungBum Kim]] || Pootle: picxenk
|-
| ''OTRA'' || [[User:donghee|Donghee Park]] || Pootle: donghee
|-

! style="background:lightgray; " colspan=3 | [mk] &mdash; [[Macedonian language]] &mdash; {{langname-mk}}
|-
| ''OTRA'' || [[User:Arangel|Arangel Angov]] || Pootle: Arangel
|-

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

! style="background:lightgray; " colspan=3 | [mn] &mdash; [[Mongolian language]] &mdash; {{langname-mn}}
|-
| ''OTRA'' || [[User:Enkhzul|Enkhzul Gombodorj]] || Pootle: Enkhzul
|-
| ''OTRA'' || Odontsetseg Bat-Erdene || Pootle:
|-
| ''O'' || [[User:Canderson|Cris Anderson]] || Pootle: anderson861
|-

! style="background:lightgray; " colspan=3 | [mr] &mdash; [[Marathi|Marathi language]] &mdash; {{langname-mr}}
|-
| ''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)]]
|-
| ''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]]
|-
| ''OA'' || [[User:Leeming|David Leeming]] || Pootle: leemingd
|-
| ''OT'' || Xavier Barker || Pootle:
|-

! style="background:lightgray; " colspan=3 | [ne] &mdash; [[Nepali language]] &mdash; {{langname-ne}}
|-
| ''OTRA'' || [[User:guava|Prabhas Pokharel]] || Pootle: prabhas
|-
| ''OTR'' || Anjali Lohani || Pootle: anjali
|-
| ''OTR'' || Tsering Lama Sherpa || Pootle: tlsherpa
|-
| ''TRA'' || [[User:Shankar|Shankar Pokharel]] || Pootle: shankar
|-

! style="background:lightgray; " colspan=3 | [nl] &mdash; [[Dutch language]] &mdash; {{langname-nl}}
|-
| ''OT'' || [[User:Bastiaan|Bastiaan Bakker]] || Pootle: bastiaan
|-
| ''OTRA'' || [[User:Myckel|Myckel Habets]] || Pootle: Myckel
|-
| ''OTRA'' || Jeroen ten Berge || Pootle:
|-

! style="background:lightgray; " colspan=3 | [pa] &mdash; [[Punjabi language]] &mdash; {{langname-pa}}
|-
| ''OTRA'' || Jaswinder Singh Phulewala || Pootle:
|-
| ''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
|-


! style="background:lightgray; " colspan=3 | [pl] &mdash; [[Polish language]] &mdash; {{langname-pl}}
|-
| ''OTRA'' || [[User:idzikow|Wiktor Idzikowski]] || Pootle: idzikow
|-
| ''OT'' || [[User:ohm|Michal Hobot]] || Pootle: ohm
|-

! style="background:lightgray; " colspan=3 | [ps] &mdash; [[Pashto|Pashto language]] &mdash; {{langname-ps}}
|-
| ''TR'' || [[User:Usman Mansour|Usman Mansour]] || Pootle: usman1982
|-
|-

! style="background:lightgray; " colspan=3 | [pt] &mdash; [[Portuguese language]] &mdash; {{langname-pt}}
|-
| ''OTA'' || [[User:HoboPrimate|Eduardo H. Silva]] || Pootle: HoboPrimate
|-
| ''OTRA'' || Ivo Emanuel Gonçalves || Pootle:
|-

! style="background:lightgray; " colspan=3 | [pt-BR] &mdash; [[Portuguese language]] &mdash; {{langname-pt-BR}}
|-
| ''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}}
|-
| '' '' || [[User:XXX|''unknown'']] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [ro] &mdash; [[Romanian language]] &mdash; {{langname-ro}}
|-
| ''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}}
|-
| ''T'' || [[User:Aleksey|Aleksey Bragin]] || Pootle: fireball
|-
| ''TA'' || [[User:Maxim|Maxim Osipov]] || Pootle: Maxim
|-
| ''T'' || [[User:Nikita Bukhvostov|Nikita Bukhvostov]] || Pootle: ddjanic
|-

! style="background:lightgray; " colspan=3 | [rw] &mdash; [[Kinyarwanda language]] &mdash; {{langname-rw}}
|-
| ''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}}
|-
| ''ART'' || [[User:Menthal|Kent Dahl]] || Pootle: MenThal
|-

! style="background:lightgray; " colspan=3 | [sd] &mdash; [[Sindhi language]] &mdash; {{langname-sd}}
|-
| ''OTRA'' || Naveed || Pootle:
|-

! style="background:lightgray; " colspan=3 | [si] &mdash; [[Sinhala language]] &mdash; {{langname-si}}
|-
| ''OTRA'' || Ishan Liyanage || Pootle:
|-
| ''OTRA'' || Hevafonsekage Joseph Priyanga Fonseka || Pootle:
|-

! style="background:lightgray; " colspan=3 | [sk] &mdash; [[Slovak language]] &mdash; {{langname-sk}}
|-
| ''TR'' || ??? || Pootle: ?
|-

! style="background:lightgray; " colspan=3 | [sl] &mdash; [[Slovenian language]] &mdash; {{langname-sl}}
|-
| ''OTRA'' || Denis Oštir || Pootle:
|-

! style="background:lightgray; " colspan=3 | [sr] &mdash; [[Serbian language]] &mdash; {{langname-sr}}
|-
| ''O'' || [[UserGoran_Rakić|Goran Rakić]] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [sv] &mdash; [[Swedish language]] &mdash; {{langname-sv}}
|-
| ''OTRA'' || Mattias Ohlsson || Pootle: Sprak
|-

! style="background:lightgray; " colspan=3 | [te] &mdash; [[Telugu|Telugu language]] &mdash; {{langname-te}}
|-
| ''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
|-

! style="background:lightgray; " colspan=3 | [tpi] &mdash; [[Tok Pisin language]] &mdash; {{langname-tpi}}
|-
| ''OA'' || [[User:Leeming|David Leeming]] || Pootle: leemingd
|-

! style="background:lightgray; " colspan=3 | [tr] &mdash; [[Turkish language]] &mdash; {{langname-tr}}
|-
| ''OTR'' || [[User:tomhannen|Tom Hannen]] || Pootle: tomhannen
|-
| ''OTRA'' || Abdullah Kocabas || Pootle:
|-
| ''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}}
|-
| ''OT'' || [[User:FarhanKhan|Farhan Khan]] || Pootle:
|-
| ''OTRA'' || [[User:HudaSarfraz|Huda Sarfraz]] || Pootle: Huda
|-
| ''OTRA'' || [[User:Sulmanminhas|Salman Minhas]] || Pootle:
|-

! style="background:lightgray; " colspan=3 | [vi] &mdash; [[Vietnamese language]] &mdash; {{langname-vi}}
|-
| ''OTRA'' || Clytie Siddall || Pootle:
|-

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

! style="background:lightgray; " colspan=3 | [zh-TW] &mdash; [[Chinese language]] &mdash; {{langname-zh-TW}}
|-
| OTRA || [[User:YChao|Yuan Chao]] || Pootle: YuanChao
|-

! style="background:lightgray; " colspan=3 | [zh-CN] &mdash; [[Chinese language]] &mdash; {{langname-zh}}
|-
| TA || [[User:YChao|Yuan Chao]] || Pootle: YuanChao
|-
| || [] ||

|}
| width=50% |
; 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 '''o'''pportunistic volunteers and overall checking of translated strings.
; [[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).
; [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.
|}


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


* 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/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
* [[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)


[[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