debian-installer locale chooser =============================== The purpose of localechooser is to ask the person doing the installation about his preferred language and country of "residence". This information can be used to choose which language and country or region to use during installation and set this language and country as the default language and country after the installation. This information will be used for building a value for the general system locale. This task was formerly split in two packages, named languagechooser and countrychooser. As both interacted heavily, it was finally decided to merge them, mostly because changing the language implied prompting for the country again. When merging the package, a new question about the final locale was added. The language will be chosen among a list of "supported" languages. The choice of language presets some country and locale -related values. The country choice question refines the country choice inherited from the language choice. It allows choosing any "country" in the world. Depending on the language+country combination, this will be used for setting a default locale or not (see below for details). Finally, a lower priority question is shown to users so that they can choose a locale based on the two former choices when several different locales for a single language/country combination are supported in Debian. "Language" here means any language Debian has been significantly translated into. This may be a simple ISO-639 code such as "en" or "de" or a language "variant" code such as "pt_BR" (Brazilian Portuguese) or zh_TW (for Traditional Chinese). The tradition of representing language variants may here be confusing as zh_TW seems to be "Chinese as spoken in Taiwan" while it is indeed "Traditional Chinese". Debian has just here kept the most common way to represent these language flavours. "Country" here is meant to represent the place the user or the machine is located. This value will be used for several location-related settings as well as locale-related settings. The list of countries is taken from the ISO-3166 standards. The names used are the "common" names of these countries, as defined in the iso-codes package. The way both packages collaborate is somewhat complicated and will be described in details below. The general rationale is about building a value for the system locale which may be as close as possible of the "real" locale (language+country). As not all language+country combinations are currently supported in Debian, approximations will occur in some cases. The mechanism is the following: 1) propose a language choice 2) propose a "short" list of countries with all countries for which this language has a supported locale 3) optionally propose the whole list of world countries, split into separate questions for first continent/area and the country 4) (for medium priority installs) prompt for a locale if several locales (with different modifiers or charsets) exist for that language/country combination This package should behave as follows: Language choice --------------- Which languages are supported depends on the installation method and on the cdebconf frontend that is being used. Currently 5 levels are distinguished: - dumb or serial terminal -->level 0 (only ASCII) - no framebuffer -->level 1 (only Latin1) - framebuffer and non-graphical interface-->level 2 and 3 (no combining langs) - framebuffer and graphical interface -->level 4 (all langs) Depending on these values, we use different templates with a different list of languages. These lists are created at package build-time from the contents of the second field of languagelist entries. When the gtk frontend is used, it is assumed that all languages are supported. The steps during language selection are: 0. Ask the user to pick one of the available languages. 1. Change presentation language in debconf. (value debconf/language; content=language ISO-639 code plus optionally language variant, for instance pt_BR) 2. Set the following variables for later use: -debian-installer/language LIST of languages in order of preference. This will be a succession of several xx_YY values where xx is a ISO-639 code for language and YY is an ISO-3166 code for country. The list is to be read from left to right with the preferred combination at the left This is meant to be used as the LANGUAGE variable later -debian-installer/country: This value may be pre-feeded with an ISO-3166 name for a country This should be done when only one country has a valid locale for the given language. For other languages, with several possible countries ("possible" here is "supported by locales"), the country must NOT be set by languagechooser -debian-installer/locale This should be a single entry such as fr_CA Each language MUST provide one, which will be the default for this language This entry may be modified by the country choice running after the language choice -debian-installer/fallbacklocale This should be similar to the "locale" value. This value will *never* change. The country choice section will set debian-installer/locale to it when the chosen country builds an unsupported locale 3. pass the locale information on to the modules that needs it. The language code is passed into cdebconf. The locale, country code and priority list of languages are passed to the installed system via the cdebconf database. Country choice -------------- 1) If a country code was set by the language choice section ("mono country" languages....that is, languages for which only one country gives a valid locale) -always keep the valid locale inherited from languagechooser for debian-installer/locale -present user, at medium priority only, with a screen listing all world countries This value will see the debian-installer/country value with the ISO-3166 code of the country. This value will only be used as a default for location related choices such as the timezone or the mirror 2) If NO country code was set after the language choice (language with at least two countries with a valid locale for this language) -always prompt the user (high priority) with a *short* list of all countries for which a valid locale exists for this language THIS LIST IS BUILT AT BUILD TIME for countrychooser, not on the fly at install time. It is built only for languages which have a debconf translation for countrychooser This short list includes an "other" choice. 2a) If the user picks up one of the countries in the short list the debian-installer/locale value is CHANGED to language_COUNTRY 2b) If the user picks up the "other" choice the debian-installer/locale is set to the "fallback-locale" value debian-installer/fallbacklocale Locale choice ------------- When both language (xx) and country (YY) are set, the locale is defined as follows: -if the language was mono-country AND the locale set *in the language section* is *different* from xx_YY because it was set differently in languagelist, this locale is kept. This special case was historically meant to deal with the Norwegian locales transition mechanism (requiring to keep no_NO as locale even if the language code became nb) -if at least one xx_YY locale exists in Debian: -the fallback locale set in the language selection part (3rd field of the languagelist file) is examined and any modifier or charset is added to xx_YY, leading to xx_YY@modifier.charset: -if this locale exists it is kept to debian-installer/locale -if this locale does not exists, xx_YY is set as debian-installer/locale -if no xx_YY locale exists in Debian, the fallback locale (3rd field of languagelist) is set as debian-installer/locale If LANG (locale) and/or LANGUAGE (priority list of language codes) was passed as arguments to the kernel from the boot prompt, these values should be used instead of presenting the user with questions. Locale choice ------------- This part only happens at medium and low priority, for instance in "expert" installs. The xx_YY value is grepped in the list of all supported locales in Debian. The remaining list is presented to the user with the above determined default value. This part allows for a final refinement of the locale without filling default installs with a rather technical question. There have been request for the possibility of editing the priority list of language codes to use. This might be done, with debconf priority 'low' to make sure the question will be invisible for most users. I [pere 2003-02-28] do not think this is needed in the general installation, and will keep it out of the first version. On 2004-06-07, this hasn't been achieved yet. Information passed into other modules ------------------------------------- cdebconf - (List of?) language codes to use when choosing which translation to use. Inserted into the 'debconf/language' debconf template. kbd-chooser - Selects default keyboard based on the locale selected. This information is passed on to base-config and console-tools. At the moment this documentation is being rewritten, this is a rather obscure mechanism which need more documentation. Adding a way for localechooser to preseed kbd-chooser would be a great enhancement. choose-mirror - The country set is used as a default choice tzsetup - Timezone restricted list of choices based on the selected country locales - The selected additional locales will be generated on the installed system Interaction with the lowmem package ----------------------------------- The lowmem package is triggered when the available memory prevents using translations, because they eat a lot of space on the ramdisk. For this to work, lowmem must set debian-installer/locale to en_US and set its seen flag. With this, the installation will continue with English and USA as values for language and country and the user will not be prompted for language and country. Technical details ----------------- Language choice --------------- The core of the package are the languagelist and languagelist.l10n files. For a language to appear in the language chooser screen it must have entries in both these files. languagelist ------------ The format if the following: Language;supported_environments;langcode;countrycode;fallbacklocale;langlist;console-data where: -Language =language name, in English It is recommended to refer to ISO-639 -Supported env. =code to define in which environments this language can be supported by the installer 0=OK in ASCII-only environments 1=OK in Latin-1 only environment (Linux console without framebuffer, some serial consoles) 2=OK with the framebuffer console 3=OK with the framebuffer console but not possible to display in the regular Linux console 4=OK only with the graphical installer -langcode =iso-639 TWO characters language code DO NOT GUESS IT. Please check in the iso-codes and locales packages Three letter language code may, at the moment this documentation is written, trigger hidden problems. If a new language has no two-letter ISO code, then this problem should be sorted out. If we're lucky, everything is OK and 3-letter codes will work..:-) -countrycode =default value for country choice in countrychoose MUST be a valid ISO-3166 alpha-2 code DO NOT GUESS IT. Please check in the iso-codes package -fallbacklocale =fallback locale (MUST be valid, except for modifier see below) This locale will be used in case the user goes to the "other" choice in countrychooser and chooses a country with "unsupported" locale It is recommended to use here the country where the language is most widely spoken Any modifier (@euro for instance) or charset mentioned here will be ADDED to the final locale if such combination is supported. Example: Assume English uses "en_US@euro". If the user chooses USA as country, the @euro will be dropped as these is no en_US@euro locale. However, if Ireland is chosen, the locale will be en_IE@euro -langlist =colon-separated list of possible fallback languages It will usually be empty except for languages where fallback to something else than English is wished Setting this field will enforce setting LANGUAGE in /etc/environment or /etc/default/locale Never add random languages without talking deeply with the i18n coordinators. -console-data =special options for the console-data package (mostly keyboard or terminal settings)