Re: Using Git and separating translations into their own l10n-LL repository



On Wed, Jan 14, 2009 at 3:34 PM, Gil Forcada <gforcada gnome org> wrote:
> El dc 14 de 01 de 2009 a les 00:42 +0000, en/na Simos Xenitellis va
> escriure:
>> On Tue, Jan 13, 2009 at 11:31 PM, Gil Forcada <gforcada gnome org> wrote:
>> > Hi Simos,
>> >
>> > Great explanation, a couple of questions:
>> >
>> > - There would be any way to have in a single folder the code and
>> > translations (aka, the way is right now)? There are some translators
>> > (I'm counting in) that likes to have the code also.
>>
>> I am not sure which module you have in mind.
>
> Sorry, I wasn't really clear. I meant to keep like it is now with code
> and translations together.
>
>> I would say that the idea is, if the translation files are expected to
>> be managed by damned-lies/l10n.gnome.org, they should reside in the
>> l10n-LL submodule.
>>
>> > - The same concern about maintainers forgetting to git pull(?)
>> > translators is expanded, now they should git pull(?) every single git
>> > repository (if 160 languages, 160 git pulls(?) before each release).
>>
>> The 'git submodule update' command, when you run in from the 'l10n'
>> supermodule,
>> pulls all the l10n-LL repositories automatically by default.
>> There is an option to 'git submodule update' to pull individual
>> language repositories as well.
>
> If I understand correctly the repository will be like:
> l10n
> - l10n-LL
> -- evolution
> --- po
> ---- LL.po
> -- eog
> --- po
> ---- LL.po
> ...
>
> So if they update the whole l10n module (the top module) they will get
> all translations from all modules not all translations from their
> module.

Indeed, that is an issue. I did not find an easy way so that the
'l10n' tree can stay outside the repositories,
and each module would have a symbolic link towards 'l10n'.
That is,

 mousetweaks
 ├─ l10n (link to ../l10n)
 │...

In addition to this, there is the issue with branching; all modules in
a GNOME release
should branch at the same time, and have a standard common branch name.

Cheers,
Simos

>
>> > Also, if the new DL will have commit functionality (maybe in half a
>> > year, Claude ... :) and then *all* translations will be committed this
>> > way, wouldn't be overkill to have all this system?
>> >
>> > I mean, if it's a temporal situation that, shouldn't be more productive
>> > to instead of "wasting" time doing this git submodule thing to provide
>> > resources and time to get commit functionality to DL that seems to be
>> > more desired by translators (that's my guess no data actually, just
>> > supposed so my arguments seems better :D).
>>
>> I would consider that separating code from localisation files would be
>> a fundamental improvement rather than a temporary solution.
>> The issue of manpower to make such changes is the main disadvantage.
>>
>> It would be easier to provide commit support to damned-lies when
>> we have separated l10n-LL repositories. Damned-lies would 'auto'-commit
>> only to designated repositories.
>>
>> I do not know the details of the SVN hooks and damned-lies. I think
>> that if a commit/push to a project would call a hook that would invoke
>> 'intltool-update -P' (create POT template file) and store it
>> somewhere, then damned-lies would not need to clone locally any other
>> GNOME modules.
>>
>> To add a few more advantages,
>> 1. Can add access controls for translators to the l10n-LL repositories.
>> 2. It allows translators to make changes across all translations (for
>> example, change 'widget' in all my translations of GNOME).
>> 3. Pootle could be adapted to perform easier GNOME translation marathons.
>> 4. GTranslator could work as KBabel, it would clone the l10n-LL
>> repository and would be able to show all translations in a huge sorted
>> list. This way, similar translations can be easily identified.
>>
>> >
>> > El dt 13 de 01 de 2009 a les 23:01 +0000, en/na Simos Xenitellis va
>> > escriure:
>> >> Hi All,
>> >>
>> >> This is a long-ish post regarding the migration to Git and
>> >> what we can do to make l10n a bit better.
>> >>
>> >> Here I suggest to use the 'git submodule' support
>> >> so that the translation material for each language
>> >> reside in a single repository.
>> >> Comments would be appreciated.
>> >> If all is fine, I'll put this, with more details, to live.gnome.org.
>> >>
>> >> When splitting the l10n files from each module, there is a choice to either
>> >> 1. create a companion repository for each module (for example, for
>> >> mousetweaks, create 'mousetweaks-l10n')
>> >> that will hold all localisation files for all languages, for this module.
>> >> If we have 1000 modules, there would be 1000 additional companion l10n modules.
>> >> 2. create a repository for each language, and this repository will
>> >> contain all localisation files for all modules.
>> >> If we have 1000 modules, there would be just 160 additional l10n
>> >> repositories (it's one new repository per language).
>> >>
>> >> The right choice appears to be to create one repository per language.
>> >> There are many reasons which can be discussed if deemed necessary.
>> >>
>> >> The rest of the e-mail shows how the separated repositories look like.
>> >> I used as an example the mousetweaks and vinagre modules, for the el,
>> >> es, fr and sv languages.
>> >> Both have help/ and po/ subdirectories with l10n material.
>> >> You can fork the generated (six) repositories from
>> >> http://github.com/simos/ if you want to try them out.
>> >>
>> >> STRUCTURE (l10n-LL)
>> >> A language repository name is of the form 'l10n-LL', where LL is the
>> >> ISO 639 (-123) language code as usual.
>> >> Inside 'l10n-LL' there are directories per module (with the module
>> >> name), and further subdirectories 'po/' and 'help/' as necessary.
>> >> For example,
>> >>
>> >> l10n-el
>> >> ├─ mousetweaks
>> >> │   ├─ help
>> >> │   │   └─ el
>> >> │   │       └─ el.po
>> >> │   └─ po
>> >> │       └─ el.po
>> >> └─ vinagre
>> >>     ├─ help
>> >>     │   └─ el
>> >>     │       └─ el.po
>> >>     └─ po
>> >>         └─ el.po
>> >>
>> >> and
>> >>
>> >> l10n-es
>> >> ├─ mousetweaks
>> >> │   ├─ help
>> >> │   │   └─ es
>> >> │   │       ├─ es.po
>> >> │   │       └─ figures
>> >> │   │           ├─ mouse-a11y-add-applet-to-panel-window.png
>> >> │   │           ├─ mouse-a11y-dwell-checkbox.png
>> >> │   │           ├─ mouse-a11y-dwell-click-type-applet.png
>> >> │   │           ├─ mouse-a11y-dwell-click-type-window.png
>> >> │   │           ├─ mouse-a11y-dwell-ctw-checkbox.png
>> >> │   │           ├─ mouse-a11y-dwell-delay-slider.png
>> >> │   │           ├─ mouse-a11y-dwell-gesture-mapping.png
>> >> │   │           ├─ mouse-a11y-dwell-mode-choice.png
>> >> │   │           ├─ mouse-a11y-dwell-motion-treshold.png
>> >> │   │           ├─ mouse-a11y-pointer-capture-context-menu.png
>> >> │   │           ├─ mouse-a11y-pointer-capture-locked.png
>> >> │   │           ├─ mouse-a11y-pointer-capture-preferences.png
>> >> │   │           ├─ mouse-a11y-ssc-checkbox.png
>> >> │   │           ├─ mouse-a11y-ssc-delay-slider.png
>> >> │   │           └─ mouse-a11y-tab.png
>> >> │   └─ po
>> >> │       └─ es.po
>> >> └─ vinagre
>> >>     ├─ help
>> >>     │   └─ es
>> >>     │       ├─ es.po
>> >>     │       └─ figures
>> >>     │           └─ vinagre-screenshot.png
>> >>     └─ po
>> >>         └─ es.po
>> >>
>> >> STRUCTURE ('l10n' supermodule)
>> >> Per git parlance, we create a 'l10n' supermodule, and inside it we add
>> >> each language repository as submodules.
>> >> Thus,
>> >>
>> >> l10n
>> >> ├─ README
>> >> ├─ l10n-el/
>> >> ├─ l10n-es/
>> >> ├─ l10n-fr/
>> >> └─ l10n-sv/
>> >>
>> >> The above graphic shows the first level of directories.
>> >> When we add a new language, the l10n coordinators will add a new entry
>> >> here to the new repository 'l10n-LL'.
>> >> Each 'l10n-LL' entry is added with 'git submodule add', and points to
>> >> a repository created earlier.
>> >>
>> >> STRUCTURE (module)
>> >> Now, each module (such as mousetweaks and vinagre) need to simply add
>> >> the 'l10n' supermodule.
>> >> We remove from help/ and po/ all *.po and figures/ files. For our two
>> >> modules, the po/ and help/ subdirectories would look like
>> >>
>> >> mousetweak:
>> >> po
>> >> ├─ LINGUAS
>> >> ├─ POTFILES.in
>> >> └─ POTFILES.skip
>> >> help
>> >> ├─ C
>> >> │   ├─ figures
>> >> │   │   ├─ mouse-a11y-dwell-checkbox.png
>> >> │   │   ├─ mouse-a11y-dwell-click-type-applet.png
>> >> │   │   ├─ mouse-a11y-dwell-click-type-window.png
>> >> │   │   ├─ mouse-a11y-dwell-ctw-checkbox.png
>> >> │   │   ├─ mouse-a11y-dwell-delay-slider.png
>> >> │   │   ├─ mouse-a11y-dwell-gesture-mapping.png
>> >> │   │   ├─ mouse-a11y-dwell-mode-choice.png
>> >> │   │   ├─ mouse-a11y-dwell-motion-treshold.png
>> >> │   │   ├─ mouse-a11y-pointer-capture-context-menu.png
>> >> │   │   ├─ mouse-a11y-pointer-capture-locked.png
>> >> │   │   ├─ mouse-a11y-pointer-capture-preferences.png
>> >> │   │   ├─ mouse-a11y-ssc-checkbox.png
>> >> │   │   ├─ mouse-a11y-ssc-delay-slider.png
>> >> │   │   └─ mouse-a11y-tab.png
>> >> │   ├─ legal.xml
>> >> │   └─ mousetweaks.xml
>> >> ├─ Makefile.am
>> >> └─ mousetweaks.omf.in
>> >>
>> >> vinagre:
>> >> po
>> >> ├─ LINGUAS
>> >> ├─ POTFILES.in
>> >> └─ POTFILES.skip
>> >> help
>> >> ├─ C
>> >> │   ├─ figures
>> >> │   │   └─ vinagre-screenshot.png
>> >> │   ├─ legal.xml
>> >> │   └─ vinagre.xml
>> >> ├─ Makefile.am
>> >> └─ vinagre.omf.in
>> >>
>> >> (mental hint: the C/ folder should actually move to the 'l10n'
>> >> supermodule, in 'l10n-C')
>> >> We have removed the ChangeLog files as the commits are moved to the submodules.
>> >> We have to figure out what to do LINGUAS. Is it possible to remove altogether?
>> >>
>> >> EXAMPLE
>> >> This assumes you have the 'git' package ('git-core' if you use
>> >> Debian/Ubuntu) installed.
>> >>
>> >> A. Cloning the repository of the module (when building from source, etc)
>> >> $ git clone git://github.com/simos/mousetweaks.git
>> >> Initialized empty Git repository in /tmp/GIT/mousetweaks/.git/
>> >> remote: Counting objects: 89, done.
>> >> remote: Compressing objects: 100% (88/88), done.
>> >> remote: Total 89 (delta 9), reused 0 (delta 0)
>> >> Receiving objects: 100% (89/89), 288.43 KiB | 96 KiB/s, done.
>> >> Resolving deltas: 100% (9/9), done.
>> >> $ cd mousetweaks
>> >> $ git submodule init
>> >> Submodule 'l10n' (git://github.com/simos/l10n.git) registered for path 'l10n'
>> >> $ git submodule update
>> >> Initialized empty Git repository in /tmp/GIT/mousetweaks/l10n/.git/
>> >> remote: Counting objects: 6, done.
>> >> remote: Compressing objects: 100% (5/5), done.
>> >> remote: Total 6 (delta 0), reused 0 (delta 0)
>> >> Receiving objects: 100% (6/6), done.
>> >> Submodule path 'l10n': checked out 'd7f6178ccf9fc8f65c6c42ee9724a65649ad044b'
>> >> $ cd l10n
>> >> $ ls
>> >> README
>> >> $ git branch
>> >> * (no branch)
>> >>   master
>> >> $ git checkout master
>> >> Previous HEAD position was d7f6178... Initial import.
>> >> Switched to branch "master"
>> >> $ ls
>> >> l10n-el/  l10n-es/  l10n-fr/  l10n-sv/  README            (the
>> >> directories are still empty)
>> >> $ git submodule init
>> >> Submodule 'l10n-el' (git://github.com/simos/l10n-el.git) registered
>> >> for path 'l10n-el'
>> >> Submodule 'l10n-es' (git://github.com/simos/l10n-es.git) registered
>> >> for path 'l10n-es'
>> >> Submodule 'l10n-fr' (git://github.com/simos/l10n-fr.git) registered
>> >> for path 'l10n-fr'
>> >> Submodule 'l10n-sv' (git://github.com/simos/l10n-sv.git) registered
>> >> for path 'l10n-sv'
>> >> $ git submodule update
>> >> Initialized empty Git repository in /tmp/GIT/t/mousetweaks/l10n/l10n-el/.git/
>> >> remote: Counting objects: 8, done.
>> >> remote: Compressing objects: 100% (5/5), done.
>> >> Receiving objects: 100% (8/8), 15.41 KiB, done.
>> >> remote: Total 8 (delta 0), reused 0 (delta 0)
>> >> Submodule path 'l10n-el': checked out '3fded9f61797faea2c3596d96af5de75b442146f'
>> >> ... (this command brings in the files for all repositories)
>> >> $ _
>> >>
>> >> At this stage we managed to expand the repository and bring in all the files.
>> >> Of course, the translation files are in different locations, so the
>> >> building scripts
>> >> and tools like intltool would need to be updated.
>> >>
>> >> B. Cloning an individual language repository (this is what translators
>> >> would need to do).
>> >> $ git clone git://github.com/simos/l10n-el.git
>> >> Initialized empty Git repository in /tmp/GIT/l10n-el/.git/
>> >> remote: Counting objects: 8, done.
>> >> remote: Compressing objects: 100% (5/5), done.
>> >> remote: Total 8 (delta 0), reused 0 (delta 0)
>> >> Receiving objects: 100% (8/8), 15.41 KiB, done.
>> >> $ _
>> >>
>> >> Now, in /tmp/GIT/l10n-el/ I have all the translation files. I can edit
>> >> vinagre/po/el.po and
>> >>
>> >> $ git commit -a -m "Updated Greek translation"
>> >> [master]: created d19db87: "Updated Greek translation"
>> >>  1 files changed, 1 insertions(+), 1 deletions(-)
>> >> $ _
>> >>
>> >> and finally push to the GNOME git server,
>> >>
>> >> $ git push
>> >> Counting objects: 9, done.
>> >> Delta compression using 2 threads.
>> >> Compressing objects: 100% (4/4), done.
>> >> Writing objects: 100% (5/5), 440 bytes, done.
>> >> Total 5 (delta 1), reused 0 (delta 0)
>> >> To git github com:simos/l10n-el.git
>> >>    3fded9f..b8975fc  master -> master
>> >> $ _
>> >>
>> >> To top it up, here is a list of advantages
>> >> 1. Developers can simply add the 'l10n' supermodule as a submodule to
>> >> their projects.
>> >> When they clone their repositories, the translation files are not
>> >> downloaded by default.
>> >> You need to run 'git submodule init' and then 'git submodule update', etc.
>> >> Thus, it saves time and space.
>> >> 2. Translators can keep a local offline version of their 'l10n-LL' repository.
>> >> This is quite small in size. The translators that wish to, can simply grab
>> >> the new versions of the PO files from l10n.gnome.org, thus would not
>> >> need to clone all modules.
>> >> 3. There is a process for translators who want to clone the modules
>> >> and perform the manual steps.
>> >> 4. Tools such as Pootle and Transifex will be able to work better
>> >> because they would not demand to hold full repositories of all
>> >> modules.
>> >>
>> >> And some disadvantages
>> >> 1. It would require to make invasive changes across all modules.
>> >> Building scripts and tools
>> >> would need to adapt.
>> >> 2. It gives too much freedom for errors to the l10n teams. Each l10n
>> >> repository needs to conform to the right directory structure so that
>> >> the files are picked up when we compile.
>> >>
>> >> Simos
>> >> _______________________________________________
>> >> gnome-i18n mailing list
>> >> gnome-i18n gnome org
>> >> http://mail.gnome.org/mailman/listinfo/gnome-i18n
>> > --
>> > gil forcada
>> >
>> > [ca] guifi.net - una xarxa lliure que no para de créixer
>> > [en] guifi.net - a non-stopping free network
>> > bloc: http://gil.badall.net
>> >
>> >
> --
> gil forcada
>
> [ca] guifi.net - una xarxa lliure que no para de créixer
> [en] guifi.net - a non-stopping free network
> bloc: http://gil.badall.net
>
>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]