Re: Using Git and separating translations into their own l10n-LL repository
- From: Gil Forcada <gforcada gnome org>
- To: Simos Xenitellis <simos lists googlemail com>
- Cc: Gnome-i18n List <gnome-i18n gnome org>, Gnome-infrastructure gnome org
- Subject: Re: Using Git and separating translations into their own l10n-LL repository
- Date: Wed, 14 Jan 2009 16:34:33 +0100
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.
Cheers,
> > 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]