# [RESOLU][locale] Problèmes de locale après mise-à-jour

## razaina

Bonjour,

étant newbie sur gentoo je me tourne vers vous après avoir tenté de régler tout seul ce problème de locale et n'ayant pas réussis après avoir essayé de resuivre le manuel sur la configuration UTF-8 et les locales.

j'ai fais une mise à jour de mon système :

```
> emerge --sync 

> emerge -av --update --deep system world -e
```

dans cette mise à jour il y avait la mise à jour du kernel (3.2.21 --> 3.3.8 )

Donc après l'emerge je met à jour le noyau manuellement en n'oubliant pas de reprendre mon ancien .config. Je modifie le lien symbolique du répertoire "linux" vers celui du nouveau kernel.

Je fais un make menuconfig pour vérifier que tout est à sa place. Je compile le kernel et je met à jour le /boot/ et mon grub. 

Je boot tous marche bien sauf que quand je passe en root avec su j'ai ce message :

```
> bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
```

En tant que simple utilisateur tout est passé en anglais alors que j'étais en français (fr_FR.UTF-8 ) :

```

razaina ~ % locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_MESSAGES to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=en_US.UTF-8

```

En root pareil, tous est en anglais :

```

locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_MESSAGES to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=en_US.UTF-8

```

Voici le contenu de mon /etc/env.d/02locale :

```

> cat /etc/env.d/02locale 

LANG="fr_FR.UTF-8"

```

Voici mon locale.gen :

```

> cat /etc/locale.gen

fr_FR.UTF-8 UTF-8

fr_FR ISO-8859-1

fr_FR@euro ISO-8859-15

```

Quand je lance la commande locale-gen :

```

> locale-gen 

/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

 * Generating 3 locales (this might take a while) with 1 jobs

 *  (1/3) Generating fr_FR.UTF-8 ... [ ok ]

 *  (2/3) Generating fr_FR.ISO-8859-1 ... [ ok ]

 *  (3/3) Generating fr_FR.ISO-8859-15@euro ... [ ok ]

 * Generation complete

```

env-update && source /etc/profile

```

 > env-update && source /etc/profile

/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

>>> Regenerating /etc/ld.so.cache...

sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

```

Quand on fait locale c'est toujours en anglais.

Une autre remarque, j'avais le flag "-vanilla" que j'avais mis dans le USE global (je ne savais pas encore utilisé le fichier package.use) du coup je crois que cela a eu un impact sur glibc non ? 

Depuis je l'ai viré et j'ai recompilé glibc en n'oubliant pas d'utilisé l'option --newuse.

Néanmoins le problème persiste toujours. Est-ce que bash est a recompilé aussi ? En simple utilisateur la touche supprimé ne marche plus ça imprime juste le caractère "~" au lieu de supprimer.

J'ai vérifié et revérifié le kernel 3.3.8, il  y a bien le support de l'utf8 dans "Native Language Support" et "nls" est bien dans mon USE global.

D'ailleurs voici mon USE :

```

USE="optimization zsh-completion \

     vim-completion dbus exceptions dri nls zlib gdbm \

     ipv6 ncurses readline ssl crypt X bzip2 udev \

     xorg acl gpm unicode truetype xft nforce2 pmu \

     apache2 vim-syntax gtk lcms icu pam sasl gpg"

```

Merci d'avance pour vos suggestions, votre aide.Last edited by razaina on Thu Jul 19, 2012 10:02 am; edited 2 times in total

----------

## xaviermiller

Bonjour,

Je te conseille de mettre des locale EN dans /etc/locale.gen.

----------

## nox23

Bonjour,

suis bien ce guide : http://www.gentoo.org/doc/fr/guide-localization.xml

évite de lancer ce genre de commande pour update : emerge -av --update --deep system world -e

juste un emerge -au world suffit, ca t'évitera pas mal de soucis et assure la consistance de ton linux.

comme le collègue regen les locales : 

cat /etc/locale.gen 

en_US ISO-8859-1

en_US.UTF-8 UTF-8

fr_FR ISO-8859-1

fr_FR@euro ISO-8859-15

fr_FR.UTF-8 UTF-8

et emerge --oneshot glibc

----------

## razaina

Bonjour,

j'ai suivi vos conseils, je n'ai plus de soucis de locale par rapport à l'environnement globale.

C'est à dire, je n'ai plus d'erreurs liées aux locales quand je lance "su", ou quand j'utilise python ou perl, etc.

mais je n'arrive toujours pas à retourner en full français :

En root :

```

> locale

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=en_US.UTF-8

```

En simple user:

```

> locale

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=en_US.UTF-8

```

J'ai bien recompilé avec emerge --oneshot glibc après modifications de locale.gen.

Voici l'état actuel de mes locales :

cat /etc/locale.gen

```

en_US ISO-8859-1

en_US.UTF-8 UTF-8 

fr_FR.UTF-8 UTF-8

fr_FR ISO-8859-1

fr_FR@euro ISO-8859-15 

```

cat /etc/env.d/02locale 

```

LANG="fr_FR.UTF-8"

LC_COLLATE="C"

```

Pour la keymap :

cat /etc/conf.d/keymaps :

```
  

keymap="fr-latin9"

```

Dans le .bashrc :

cat ~/.bashrc 

```

export LANG="fr_FR.UTF-8"

export LC_COLLATE="C"

```

Dans le terminal la touche "Del" "PgUp" et "PgDown" me sort toujours des "~" quand je suis en utilisateur normal. Ca ne le fait pas quand je suis en root. La seule différence c'est que en simple utilisateur j'utilise zsh, et j'ai laissé bash en root. J'utilise urxvt comme terminal.

Est-ce lié au shell + locale le problème des touches ? ou shell + locale + terminal ?

----------

## boozo

'alute

En premier lieu, peux-tu éditer ton premier post et mettre le titre du fil en accords avec nos conventions stp (voir section 3/3 du 1er post en sticky sur le forum) ?   :Wink:   (comme tu peux le voir le formalisme n'est pas tellement en accords avec les autres topics ; par avance merci)

Pour ton pb de locales, le LC_ALL et LC_COLLATE n'ont - la plupart du temps - pas besoin d'être définis pour que cela fonctionne correctement (voire dans certains cas ça pose plus de problèmes que ça n'en corrige)

Donc dans un premier temps, commente tes 2 lignes dans ton bashrc et ne conserve que LANG dans le fichier de conf des locales.

----------

## razaina

Titre modifié.

J'ai viré les export qui étaient dans le bashrc, j'ai quitté X et je me suis reloggué. Ca n'a rien changé.   :Sad: 

Y a-t'il un paquet en particulier que je dois recompiler ? j'ai déjà recompilé bash, zsh, urxvt dans le doute. A moins que tous le système doit être recompilé ? Y a-t'il quelque chose d'anormal dans mon USE globale dans le /etc/make.conf (voir un peu plus haut).

----------

## xaviermiller

as-tu lancé env-update après avoir changé LC* ?

----------

## razaina

oui. A chaque fois que j'utilise locale-gen je n'oublie jamais de faire env-update && source /etc/profile. 

Je suppose qu'il n'y a pas besoin de rebooter. Quitter X suffit non?

----------

## razaina

Bon mon soucis des touches qui se transformaient en "~" est résolu et n'avait strictement rien avoir avec les locales. La solution était ici https://forums.gentoo.org/viewtopic.php?p=1570687.

Sinon, malgré toutes les modifs que j'ai faite, le problème des locales qui persistent à rester en en_US au lieu de fr_FR est bizarre. Le seul endroit ou je précise en_US c'est dans locale.gen comme vous m'aviez conseillé un peu plus haut. Ce qui a résolu d'ailleurs le problème du "Cannot change  locale" à chaque fois que j'exécutais quelque chose.

----------

## razaina

Bonjour,

étant donné que mon soucis est quasi résolu (plus de messages d'erreurs concernant les locales) je peux clore ce topic non ? A moins que pour vous, le fait de ne pas réussir à passer full fr_FR reste un problème à résoudre par rapport au topic ? je me souviens qu'avant l'update tous mes LC_* étaient en fr_FR.*

Pour l'instant, mon système à l'air stable, je n'ai pas de bug d'accents etc., pas de bug de caractères dans le shell ni vim. Donc au pire, si pour vous tout semble normal, par rapport au prints que j'ai fait avant, je peux clore ce topic.

----------

## boozo

ben non c'est pas résolu du tout en fait   :Sad:   le fait de coller au moins une locales en "US" permet de switcher correctement sur la valeur automatique par défault du système en cas de défaillance quelque part (d'où la disparition du warning) mais avec ces définitions en FR cela devrait fonctionner normalement. 

Vu que tu le soulèves, j'ai souvenir d'avoir lu un pb dans ce goût-là il y a longtemps et je crois que le reboot a été nécessaire pour réinitialiser certaines variables ; les sources/refresh des variables d'environnement ni killer le X n'était pas suffisant - a tester -

----------

## razaina

J'ai refais/rechecké toutes les modifs que vous m'aviez conseillé tout au long de ce topic. 

Après reboot, toujours rien. 

Que ce soit en root ou en simple user, j'ai toujours tout en en_*, sauf LANG qui est resté en fr_FR.

Qu'est-ce que je peux fournir de plus ici, pour y voir plus clair ? (des fichiers de conf, ou de log en particulier etc.)

Quel programme s'occupe de "setter" les locales ? à quel moment particulier ? Un programme peux modifier ces locales à n'importe quel moment ?

----------

## boozo

m**** ! Ce qui cloche je pense c'est d'avoir eu un LC_ALL positionné à un moment donné mais là avec tout en bonne et due forme il aurait dû revenir à blanc...   :Confused: 

Là, je sèche un peu à cet instant.

As-tu vérifié/testé en jouant avec #eselect locale {list, set <num>} 

----------

## nox23

si dans un terminal tu fais :

export LANG="fr_FR.UTF-8"

puis 

locale

que te donne la commande ?

----------

## razaina

Voici les résultats du eselect locale :

eselect locale list :

```

Available targets for the LANG variable:

  [1]   C

  [2]   en_US

  [3]   en_US.iso88591

  [4]   en_US.utf8

  [5]   français

  [6]   french

  [7]   fr_FR

  [8]   fr_FR@euro

  [9]   fr_FR.iso88591

  [10]  fr_FR.iso885915@euro

  [11]  fr_FR.utf8

  [12]  POSIX

  [13]  fr_FR.UTF-8 *

  [ ]   (free form)

```

Et quand je fais export LANG="fr_FR.UTF-8", en tant que simple user  j'ai ceci quand je tape locale:

```

LANG=fr_FR.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=en_US.UTF-8

```

----------

## boozo

*grmmllh* (make some noise) - je vois vraiment pas ce qui cloche...   :Sad: 

Avec ton user, tu as fait un $source du bashrc modifié ?

----------

## razaina

Je n'ai rien dans mon bashrc  :Very Happy: . Avant j'avais juste les export LANG et LC_*.

 mais, comme dit plus haut,:

 *boozo wrote:*   

> 
> 
> Donc dans un premier temps, commente tes 2 lignes dans ton bashrc et ne conserve que LANG dans le fichier de conf des locales.
> 
> 

 

je les ai retiré, et du coup je n'ai plus rien dans mon bashrc.

----------

## boozo

oui oui j'avais bien lu mais comme la conf locale du user a pris le pas sur la var globale le "sourcer" sans les export permet de voir si qqch change (ou non) sur le positionnement des autres LC_* de $locale

Edit: bon c'est bête mais il est évident que si ton user n'utilises pas bash, c'est /etc/profile qu'il faut sourcer à la place - Au fait, tu en as parlé mais tu utilises zsh ? auquel cas, y'a peut-être des choses à vérifier ou des choses connues dans ce sens... vais regarder

----------

## razaina

 *boozo wrote:*   

> 
> 
> Au fait, tu en as parlé mais tu utilises zsh ?
> 
> 

 

Tu as mis le doigt pile sur le problème  :Smile: . Je n'y avais pas du tout pensé, mais du tout... sorry.

En effet zsh exportait en anglais les locales... du coup tout s'explique... J'ai commenté les bonnes lignes dans mon fichier de configuration. J'avais repris la config zsh de mon ordi au taf qui était full anglais utf8, j'y avais pas du tout pensé.

Merci à tous en tout cas. Je peux clore le topic.

----------

## boozo

Bah c'est rien, c'est en relisant le tout que ça m'est venu à l'esprit - je commençais à ne plus avoir d'idée où chercher la cause éventuelle du pb et je craignais de devoir éplucher le bugzilla glibc   :Laughing: 

----------

