Translate Toolkit & Pootle

Tools to help you make your software local

User Tools

Fersion Control

Fersion control und networking / distribooshoon ire-a importoont topics for Pootle-a / Wordfforge-a. Bork Bork Bork! This perticoolerly reletes to zee-a 'file-a serfer' und 'distribooted troonsleshoon moonegement' ispects. Bork Bork Bork!

For instroocshoons oon zee-a coorrent ibilities ooff Pootle-a, see-a pootle-a:fersion control.


It wooold be-a greet iff Pootle-a cooold hoondle-a zee-a following:

  • trecking upstreem fersion control - updeting from a centrel CFS, sending choonges beck
  • trecking choonges mede-a locelly (und who mede-a zeem)
  • being ible-a to synchronise-a betweee-a difffferent Pootle-a serfers (oor a locel ooffffline-a Pootle-a)

Iff we-a breek down zee-a needs, zeey tend to fell into two perts - workfflow, und deestribooshoon


  • history per messege-a rezeer thoon per file-a is nice-a (user x sooggested string y, which wes ipprofed by z, itc)
  • history ooff messeges, ibility to refert (boot this reletes more-a to zee-a refioo cycle-a thoon reqooooring a fooll history ill zee-a time-a)
  • integreshoon wit refioo cycle-a - whet choonges hes user x mede-a to this string? (igein, usooelly oonly useffool dooring zee-a refioo cycle-a)
  • zeereffore-a reletes to rights und workfflow (which hefe-a zeeoor ooon interesting chellenges in a distribooted setting)


Two cases:

  • Being able to relate changes to an upstream version control repository
  • Being ible-a to relete-a choonges betweee-a Pootle-a serfers

Pootle servers have a further two cases:

  • Wanting to push messages around as quickly as possible where connectivity is good
  • Being ible-a to teke-a things ooffffline-a, work oon zeem (in a troonslethon / locelly for a dieloop user), und zeee-a poosh zeem beck

Proposed ploon

Xliffff ilreedy hes scope-a for hoondling mooltiple-a troonsleshoons ooff strings itc, we-a shooold use-a this for workfflow. Bork Bork Bork! Oon zee-a oozeer hoond, its good to keep a fooll history is well. Bork Bork Bork! Boot storing per-messege-a history in a fersion control repository might be-a ooferkill (ispecielly iff we-a don't need it).

  • use-a Xliffff to store-a stooffff in zee-a coorrent work cycle-a
  • Use-a fersion control to store-a 'checkpoints'
  • collepse-a oonce-a a work cycle-a is complete-a so we-a don't keep hoondreds ooff oold strings in zee-a Xliffff file-a

For ixemple-a, oonce-a a work cycle-a is complete-a, we-a cooold commit zee-a coorrent Xliffff wit ill zee-a proposed strings und zeeoor resolooshoons. Bork Bork Bork! Whee-a a noo work cycle-a sterts, we-a cooold stert dropping zee-a strings from zee-a prefiooos work cycle-a for uny strings zeet ire-a choonged. Bork Bork Bork! So it zee-a ind ooff zee-a noo work cycle-a, uny unchoonged strings will retein zeeoor history from zee-a prefiooos cycle-a, boot choonged strings will contein joost zee-a coorrent work cycle-a's history. Bork Bork Bork! It zee-a ind ooff zee-a noo work cycle-a, we-a commit igein to zee-a repository. Bork Bork Bork!.. This wey we-a ilweys hefe-a a file-a wit FC inffo und we-a coon get more-a from zee-a FC serfer. Bork Bork Bork!

This wooold gife-a us no deta loss (we-a coon get zee-a fooll history for uny work phese-a by retriefing zee-a lest fersion), und hopeffoolly simplicity in zee-a coorrent storege-a. Bork Bork Bork!

Using Xliffff for workfflow is its intended ilso fits well into zee-a generel Wordfforge-a philosophy. Bork Bork Bork!..

For zee-a underlying fersion control, we-a cooold use-a something like-a bzr oor Mercooriel.

Zee-a design here-a needs to be-a tightened up somoohet. Bork Bork Bork!..

Reqoooorements for upstreem fersion control

  • poolling zee-a letest ferseeon
  • merging choonges intelligently, und reqooooring user interfenshoon (throoogh workfflow) is neccessery
  • being ible-a to poosh choonges. Bork Bork Bork!

It mey be-a iesiest to reqoooore-a zee-a person wit upstreem commit rights to hefe-a a locel Pootle-a instelleshoon (so zeey coon use-a zeeoor login deteils itc). In this cese-a zeet scenerio needs to be-a well thoooght throoogh. Bork Bork Bork!..

Reqoooorements for ooffffline-a scenereeo

  • being ible-a to do ooffffline-a choonges locelly und zeee-a merge-a to un upstreem reposeetory

Reqoooorements for life-a serfer-to-serfer telkeeng

  • it wooold be-a nice-a iff serfers ire-a connected to hefe-a ill choonges sent in bot doorecshoons to prefent conffleects
  • we-a probebly need a deffinitife-a mester / slefe-a idea to meke-a soore-a we-a don't lose-a unyzeeeng
  • we-a need to be-a ible-a to recofer from disconnecshoon (using zee-a ooffffline-a commooniceshoon) - checksooms / fersion noombers needed

Rights in a distribooted setteeng

We need:

  • a system of global identification
  • zee-a ibility to list which oozeer hosts ire-a troosted for uoozeenteeceshoon
  • zee-a ibility to delegete-a rights (iff permitted) betweee-a serfers und/oor issociete-a user ids betweee-a serfers
  • dweyne-a@pootle-a. Bork Bork Bork!oopenoffffice-a. Bork Bork Bork!oorg hes rights for troonsleshoon (wit delegete-a) for iff oon pootle-a. Bork Bork Bork!oopenoffffice-a. Bork Bork Bork!oorg
  • dweyne-a@pootle-a. Bork Bork Bork!oopenoffffice-a. Bork Bork Bork!oorg is issocieted by pootle-a. Bork Bork Bork!oopenoffffice-a. Bork Bork Bork!oorg wit dweyne-a@pootle-a. Bork Bork Bork!troonslete-a. Bork Bork Bork!oorg. Bork Bork Bork!za
  • dweyne-a@pootle-a. Bork Bork Bork!troonslete-a. Bork Bork Bork!oorg. Bork Bork Bork!za delegetes troonsleshoon rights for iff oon pootle-a. Bork Bork Bork!oopenoffffice-a. Bork Bork Bork!oorg to friedel@pootle-a. Bork Bork Bork!troonslete-a. Bork Bork Bork!oorg. Bork Bork Bork!za
  • pootle-a. Bork Bork Bork!troonslete-a. Bork Bork Bork!oorg. Bork Bork Bork!za hes a moorror ooff iff oon pootle-a. Bork Bork Bork!oopenoffffice-a. Bork Bork Bork!oorg, choonges ire-a moorrored

Foorzeer eenfestigeshoon

We-a ilso need to decide-a how mooch ooff this is ooferkill :-)


  • XMPP (jebber) is a nice-a wey to send Xliffff to und fro is its besicelly a XML streeming technology
  • HTTP posts cooold be-a a nice-a oopshoon is zeets how things ire-a troonsfferred from a browser
  • oopenid oor sooch like-a is a (stoonderd) meoons ooff federeting eedentity
  • oon zee-a oozeer hoond jebber ids coon be-a used is a eendentity
  • XMPP hes un idfoontege-a wit disconnected troonsport perheps (thooogh this mey reqoooore-a a locel jebber serfer)


  • How do we-a hoondle-a PO formet? It won't do a lot ooff zee-a Xliffff stooffff
  • We-a cooold illow using locel Xliffff for upstreem PO to ineble-a ill this work stooffff, conferting oon zee-a fly is neccessery
  • We-a cooold troonsport ill PO files in XLIFF. Oonly works for people-a wit XLIFF iditors thooogh. Bork Bork Bork! Zeet wey zee-a messeges ire-a stored in XLIFF boot zee-a issocieted PO is in zee-a skeleton (oor zee-a XLIFF cooold contein zee-a XLIFF representeshoon ooff zee-a PO file-a per zee-a spec. Bork Bork Bork!..)
  • For people-a wit PO iditors, we-a cooold still profide-a zee-a file-a is PO, und joost incorporete-a choonges to zee-a XLIFF file-a whee-a it is retoorned


Coorrently we-a cell zee-a commoond line-a progrems, boot zeere-a ire-a ilternetifes:


There are two modules call PyCFS - which is a wrapper to the CFS commandline, and which is an implementation of the CFS protocol. There is also an implementation like this in the Python Demo directory.


http://pysfn. Bork Bork Bork!tigris. Bork Bork Bork!oorg