LocalesThatDontSuck

Differences between revisions 7 and 18 (spanning 11 versions)
Revision 7 as of 2005-11-02 20:55:33
Size: 3742
Editor: 172_220_103_66-WIFI_HOTSPOTS
Comment: Finalize
Revision 18 as of 2008-08-06 16:38:19
Size: 5919
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
 * Created: [[Date(2005-09-26T18:35:38Z)]] by JeffBailey  * Created: <<Date(2005-09-26T18:35:38Z)>> by JeffBailey
Line 6: Line 6:
 * Status: DraftSpecification
Line 33: Line 32:
 * Langpacks
 * Langpacks: postinst/postrm scripts, additional content (ship locale data)
Line 38: Line 36:
Currently locales come from glibc proper. Implementation will move locale data into lang-packs for easier maintenance, and to allow us to move to belocs-locales, which will provide more up-to-date data.  * Currently locales come from glibc proper. Implementation will move locale data into lang-packs for easier maintenance, and to allow us to move to belocs-locales, which will provide more up-to-date data.
Line 40: Line 38:
 * Factor out code from the language pack maintainer scripts to a common package `locales`.
Line 43: Line 42:
First stage is to remove locales package from glibc build. The locales binaries still need to be provided by libc6, since they are used to generate the binary, arch-dependent locales. The locales-gen script from the locales package would need to be moved to libc6 aswell. The locales-gen script needs to be modified as noted below. libc6 would then need to conflict with locales. === Glibc package ===
Line 45: Line 44:
Second, the belocs-locales data needs to be merged into language packs build. When a lang-pack is installed, it should place a file called /etc/locales/supported.d/<lang-name>. The postinst script would then call locales-gen with the lang-name. Locales-gen would parse this file, and (re)generate all the locales listed there-in (which may be more than one, for e.g. english, there is en_US, en_CA, etc).  * All locale data needs to be removed from the current locales package, generated by the glibc build.
Line 47: Line 46:
Lang-packs would include all of the proper locales for that language (e.g. en_* for English).  * The locale binary needs to be moved to the locales package.
Line 49: Line 48:
 * The locale-gen script from the glibc locales package needs to be updated to make use of the new /var/lib/locales/supported.d/<lang> files. It should have two modes. When called with no arguments, it should generate all locales listed in the files in /var/lib/locales/supported.d/*. If called with one argument (a lang name), it should generate all locales listed in /var/lib/locales/supported.d/<lang>
Line 50: Line 50:
=== Code ===  * Import changes from belocs-locales-bin into glibc. The patches from belocs-locales-bin are required in order to generate locales from belocs-locales-data. These changes would be pushed upstream as needed.
Line 52: Line 52:
Requires somewhat extensive packaging changes for the lang-packs. The locales-gen script needs to be modified to understand /etc/locales/supported.d/<lang-name>.  * Completely remove the currently existing debconf question, since it is unnecessary. Locales get installed and removed automatically.
Line 54: Line 54:
 * The locales package would continue to ship a full SUPPORTED file for backwards compatibility with packages that use it. Packages that use this file would need to be updated in order to make use of the better mechanism of /var/lib/locales/supported.d/
  * ColinWatson: This will be kind of interesting. `localechooser` uses SUPPORTED to work out what locales to support in the installer; furthermore, it uses `localedef` on a number of those locales in order to be able to sort countries by the collation order appropriate to the language, and thus would end up build-depending on a huge pile of language packs under this scheme (which would suck). We ''could'' remove the nice sorting, but it seems a real shame since it works well ...

=== language-packs packages ===

 * Move the belocs-locales data into language packs build.

 * language packs ship a file /var/lib/locales/supported.d/<lang> (which is a subset of the former /usr/share/i18n/SUPPORTED file).

 * The common postinst script calls `install-language-locales` ''lang-code''. The common postrm script calls `remove-language-locales` ''lang-code''. These scripts need to be written and provided by a new lang-pack-base package that all lang-packs would depend on. Initially these scripts would only need to call locale-gen with the lang name for install, and then insure removal of generated files on remove.

 * Lang-packs would include all of the proper locales for that language (e.g. en_* for English).

=== langpack-o-matic ===

 * langpack-o-matic already provides the mechanics for shipping additional data in the language packs. This will be used to ship the locale data.

=== belocs-locales-data and belocs-locales-bin ===

These packages would no longer be needed once relevant parts are merged into lang-packs and glibc.
Line 57: Line 77:
Belocs-locales seems to want to be a superset of glibc locales, but it appears to be missing several locales that are in glibc proper. If anything is missing from belocs, then either the missing part needs to be investigated for inclusion aswell. It may be that ones missing from belocs just don't work, or are no longer needed. Belocs-locales seems to want to be a superset of glibc locales, but it appears to be missing several locales that are in glibc proper. If anything is missing from belocs, then the missing part needs to be investigated for inclusion as well. Those missing from belocs are very probably no longer needed for various, justified reasons (countries changing name, ISO 639 code updates...).
Line 59: Line 79:
Specifically, several locales in Breezy were marked to be removed after the "Sarge" release. These should not be carried forward.

 * Release Notes: Point out that the user has to manually fix his locales when he manually added locales without the corresponding language packs installed.
Line 64: Line 87:
Consensus was that moving to lang-packs now, would also enable us move maint of the locale data to Rosetta at a later date (hopefully, dapper+1). Consensus was that moving to lang-packs now would also enable us move maint of the locale data to Rosetta at a later date (hopefully, dapper+1).

Summary

In order to serve our user communities better, we need to be more responsive and proactive with localisation updates.

Rationale

Getting locale changes into upstream glibc is unnecessarily hard. The glibc maintainer (correctly) requires proof of the correctness of a change before it's included, but the onus of demonstrating that change falls to the glibc package maintainers. The package maintainers are frequently not qualified to provide this proof, and cannot answer upstreams questions to the needed degree of satisfaction. The glibc upstream maintainer also has a well deserved reputation for being difficult to approach with changes.

In addition, updating locales requires a complete rebuild of the glibc package. This is a very time and resource intensive build just for the sake of arch-indep files.

Use cases

  • A user from an unsupported locale would like to submit his entry. We accept it via Rosetta, and it gets applied during the next lang-pack build.
  • New locales need to be integrated. The locales maintainer merges with lang-pack, and avoids having to force a rebuild of glibc.

Scope

  • Locales / Belocs-locales-data(universe) packaging
  • Langpacks: postinst/postrm scripts, additional content (ship locale data)

Design

  • Currently locales come from glibc proper. Implementation will move locale data into lang-packs for easier maintenance, and to allow us to move to belocs-locales, which will provide more up-to-date data.
  • Factor out code from the language pack maintainer scripts to a common package locales.

Implementation

Glibc package

  • All locale data needs to be removed from the current locales package, generated by the glibc build.
  • The locale binary needs to be moved to the locales package.
  • The locale-gen script from the glibc locales package needs to be updated to make use of the new /var/lib/locales/supported.d/<lang> files. It should have two modes. When called with no arguments, it should generate all locales listed in the files in /var/lib/locales/supported.d/*. If called with one argument (a lang name), it should generate all locales listed in /var/lib/locales/supported.d/<lang>

  • Import changes from belocs-locales-bin into glibc. The patches from belocs-locales-bin are required in order to generate locales from belocs-locales-data. These changes would be pushed upstream as needed.
  • Completely remove the currently existing debconf question, since it is unnecessary. Locales get installed and removed automatically.
  • The locales package would continue to ship a full SUPPORTED file for backwards compatibility with packages that use it. Packages that use this file would need to be updated in order to make use of the better mechanism of /var/lib/locales/supported.d/
    • ColinWatson: This will be kind of interesting. localechooser uses SUPPORTED to work out what locales to support in the installer; furthermore, it uses localedef on a number of those locales in order to be able to sort countries by the collation order appropriate to the language, and thus would end up build-depending on a huge pile of language packs under this scheme (which would suck). We could remove the nice sorting, but it seems a real shame since it works well ...

language-packs packages

  • Move the belocs-locales data into language packs build.
  • language packs ship a file /var/lib/locales/supported.d/<lang> (which is a subset of the former /usr/share/i18n/SUPPORTED file).

  • The common postinst script calls install-language-locales lang-code. The common postrm script calls remove-language-locales lang-code. These scripts need to be written and provided by a new lang-pack-base package that all lang-packs would depend on. Initially these scripts would only need to call locale-gen with the lang name for install, and then insure removal of generated files on remove.

  • Lang-packs would include all of the proper locales for that language (e.g. en_* for English).

langpack-o-matic

  • langpack-o-matic already provides the mechanics for shipping additional data in the language packs. This will be used to ship the locale data.

belocs-locales-data and belocs-locales-bin

These packages would no longer be needed once relevant parts are merged into lang-packs and glibc.

Data preservation and migration

Belocs-locales seems to want to be a superset of glibc locales, but it appears to be missing several locales that are in glibc proper. If anything is missing from belocs, then the missing part needs to be investigated for inclusion as well. Those missing from belocs are very probably no longer needed for various, justified reasons (countries changing name, ISO 639 code updates...).

Specifically, several locales in Breezy were marked to be removed after the "Sarge" release. These should not be carried forward.

  • Release Notes: Point out that the user has to manually fix his locales when he manually added locales without the corresponding language packs installed.

BoF agenda and discussion

Attendees generally agreed that having locales in glibc was sub-optimal, and that not being able to get locales merged upstream was just an added difficulty.

Consensus was that moving to lang-packs now would also enable us move maint of the locale data to Rosetta at a later date (hopefully, dapper+1).

A new spec needs to be created for Rosetta, to plan for the move of locales data.


CategorySpec

LocalesThatDontSuck (last edited 2008-08-06 16:38:19 by localhost)