LangpacksDesktopfiles
2957
Comment: initial spec
|
3802
add some random optimization ideas
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
##(see the SpecSpec for an explanation) | ## page was renamed from DesktopFileTranslations |
Line 5: | Line 5: |
* '''People''': MartinPittLead, CarlosPerelloMarinSecond * '''Contributors''': * '''Packages affected''': TBD |
* '''Contributors''': JordiMallach, MartinPitt, CarlosPerelloMarin, ZygmuntKrynicki * '''Packages affected''': intltool, libbonobo (?), glib, pyxdg, gnome-desktop (?) |
Line 11: | Line 10: |
Some translatable files do not use gettext at runtime, but rather contain all translations in a single file, like .desktop and .server files. We want to find a robust and generic way to update these translations through Rosetta and language packs. | Some translatable files do not use gettext at runtime, but rather contain all translations in a single file, like .desktop, .server and .directory files. We want to find a robust and generic way to update these translations through Rosetta and language packs. |
Line 22: | Line 21: |
The Gnome libraries that evaluates desktop/server/directory files should just use gettext() to translate entries since application's *.mo files already ship the translations. | |
Line 23: | Line 24: |
There are two ways how to achieve this goal: | In the past we proposed the extension of the [http://standards.freedesktop.org/desktop-entry-spec/latest/ FreeDesktop standard] to support an additional field TranslationDomain, so that Gnome, KDE, and other implementations can find the matching .mo file at runtime to get additional translations from it. However, since this has been rejected upstream, we will use our own Ubuntu specific field for this. |
Line 25: | Line 26: |
=== Parallel hierarchy === * pkgstriptranslations will store .desktop and .server files in translation tarballs. * Rosetta will export a file that maps .desktop/.server file names to translation domains. * langpack-o-matic uses intltool/homebrew script to add new translations to those files. * We create a new package desktop-translations which ships files in parallel directory hierarchies /usr/share/applications-langpack/ and /usr/lib/bonobo/servers-langpack/; those files are preferred over the files in the original directory. It only requires very few changes to lookup files into these additional directories. We just have to make sure that the desktop backend that is responsible for that ignores files whose application is not installed. * desktop-translations can be updated after the release to provide new desktop files. === Switch to use gettext === The Gnome library that evaluates desktop/server files should just use gettext() to translate entries since application's *.mo files already ship the translations. Therefore we want to propose the extension of the [http://standards.freedesktop.org/desktop-entry-spec/latest/ FreeDesktop standard] to support an additional field TranslationDomain, so that Gnome, KDE, and other implementations can find the matching .mo file at runtime to get additional translations from it. Note that most upstream packages already use gettext to translate .desktop files at build time. This could require some caching to speed up the process. |
Note that most upstream packages already use gettext to translate .desktop files at build time. For this packages we only need to change intltool to put the translation domain into the destination files. |
Line 41: | Line 30: |
=== Code === | === .desktop/.directory file format === |
Line 43: | Line 32: |
=== Data preservation and migration === | * We will use the key `X-Ubuntu-Gettext-Domain` for storing the translation domain in .desktop-like files. * `intltool-merge --desktop-style` needs to put the translation domain into the destination file. |
Line 45: | Line 35: |
No data needs to be preserved when adding data to language packs. | === .server file format === * We will add a Ubuntu-specific attribute and add Ubuntu translations to the `<oaf_server>` tag (`ubuntu-gettext-domain`). * `intltool-merge --ba-style` needs to put the ubuntu-gettext-attribute in the <oaf_server> stanza in the destination file. This implies parsing XML. === gnome library changes === pyxdg and libgnome-desktop have patches to support gettext: * https://launchpad.net/distros/ubuntu/+source/pyxdg/+bug/3697 * https://launchpad.net/distros/ubuntu/+source/gnome-desktop/+bug/3723/ gnome-panel is moving to use glib's GKeyFile and libgnome-desktop's parser is being set as deprecated. We should patch glib to support this new system. |
Line 49: | Line 50: |
== BoF agenda and discussion == | * Coordination with Kubuntu and Xubuntu. * If performance becomes an issue, we need to think about adding pre-caching of the translations. === Random ideas about performance improvements === * Regenerating the desktop files at language postinst time does not work, since this does not take desktop files into account that are installed after the language pack installation. * apt hooks are not generic enough to support updating files when a new package is installed. There are no dpkg hooks, as they are considered evil. However, if dpkg hooks should be available at one day, they could be utilized for pregenerating translated files. * Modify postinst files with a debhelper hook which asks for updating translations in files. |
Launchpad Entry: https://launchpad.net/distros/ubuntu/+spec/desktop-file-translations
Created: 2005-10-25 by MartinPitt
Contributors: JordiMallach, MartinPitt, CarlosPerelloMarin, ZygmuntKrynicki
Packages affected: intltool, libbonobo (?), glib, pyxdg, gnome-desktop (?)
Summary
Some translatable files do not use gettext at runtime, but rather contain all translations in a single file, like .desktop, .server and .directory files. We want to find a robust and generic way to update these translations through Rosetta and language packs.
Rationale
Currently the language packs contain only translations for desktop applications that use gettext. However, there are many more translatable items in Ubuntu. Our goal is to extract all translatable contents from application packages, import them into Rosetta, and ship them into language packs so that they can be updated after a release and benefit from Rosetta updates.
Scope and use cases
- Sjoerd adds a Dutch translation to a menu entry of a Breezy application in Rosetta. Breezy users should get this new translation with the next language pack update.
Design
The Gnome libraries that evaluates desktop/server/directory files should just use gettext() to translate entries since application's *.mo files already ship the translations.
In the past we proposed the extension of the [http://standards.freedesktop.org/desktop-entry-spec/latest/ FreeDesktop standard] to support an additional field TranslationDomain, so that Gnome, KDE, and other implementations can find the matching .mo file at runtime to get additional translations from it. However, since this has been rejected upstream, we will use our own Ubuntu specific field for this.
Note that most upstream packages already use gettext to translate .desktop files at build time. For this packages we only need to change intltool to put the translation domain into the destination files.
Implementation
.desktop/.directory file format
We will use the key X-Ubuntu-Gettext-Domain for storing the translation domain in .desktop-like files.
intltool-merge --desktop-style needs to put the translation domain into the destination file.
.server file format
We will add a Ubuntu-specific attribute and add Ubuntu translations to the <oaf_server> tag (ubuntu-gettext-domain).
intltool-merge --ba-style needs to put the ubuntu-gettext-attribute in the <oaf_server> stanza in the destination file. This implies parsing XML.
gnome library changes
pyxdg and libgnome-desktop have patches to support gettext:
https://launchpad.net/distros/ubuntu/+source/pyxdg/+bug/3697
https://launchpad.net/distros/ubuntu/+source/gnome-desktop/+bug/3723/
gnome-panel is moving to use glib's GKeyFile and libgnome-desktop's parser is being set as deprecated. We should patch glib to support this new system.
Outstanding issues
- Coordination with Kubuntu and Xubuntu.
- If performance becomes an issue, we need to think about adding pre-caching of the translations.
Random ideas about performance improvements
- Regenerating the desktop files at language postinst time does not work, since this does not take desktop files into account that are installed after the language pack installation.
- apt hooks are not generic enough to support updating files when a new package is installed. There are no dpkg hooks, as they are considered evil. However, if dpkg hooks should be available at one day, they could be utilized for pregenerating translated files.
- Modify postinst files with a debhelper hook which asks for updating translations in files.
LangpacksDesktopfiles (last edited 2008-08-06 16:30:07 by localhost)