LINUX.ORG.RU

Slackware слетела локаль

 ,


0

1

Сделал повторно как уже тут подсказывали

В /etc/profile.d/lang.sh нужно найти:
export LANG=en_US
и заменить на:
export LANG=ru_RU.UTF-8

В /usr/share/locale/locale.alias добавить строчки: 
russian ru_UA.UTF-8
ru_UA   ru_UA.UTF-8
ru      ru_UA.UTF-8

создал .profile в каталоге пользователя

export LANG="ru_UA.UTF-8"

не помогает, локаль английская.

Deleted

А перелогиниваться кто будет? Запущенная среда уже использует прежние настройки. Можно также в отдельном терминале выполнить

export LANG="ru_UA.UTF-8"

saahriktu ★★★★★ ()
russian ru_UA.UTF-8
ru_UA   ru_UA.UTF-8
ru      ru_UA.UTF-8

Я такого не говорил! %) Хз что с украинским, в lang.sh сделай

export LANG=ru_UA.UTF-8
вместо
export LANG=ru_RU.UTF-8
а там видно будет.

Deleted ()
Ответ на: комментарий от Deleted

Уже сделал тоже самое.

А как посмотреть вообще какие локи есть с системе? Может тупо все удалились и осталась только английская? Как переустановить все локали или одну?

Deleted ()
Ответ на: комментарий от Deleted

все есть

bash-4.3# locale -av | grep ru_RU
locale: ru_RU           directory: /usr/lib64/locale/ru_RU
locale: ru_RU.cp1251    directory: /usr/lib64/locale/ru_RU.cp1251
locale: ru_RU.koi8r     directory: /usr/lib64/locale/ru_RU.koi8r
locale: ru_RU.utf8      directory: /usr/lib64/locale/ru_RU.utf8
bash-4.3# 

ок, спасибо. В общем что-то поломалось в системе. а как починить неизвестно(

Deleted ()
Ответ на: комментарий от Deleted

поди в /etc/profile.d/lang.sh и (внезапно!) lang.csh от обновления бит исполнения слетел. Они должны быть исполняемыми. в первый пишешь:

export LANG=ru_RU.UTF-8
export LC_COLLATE=C
во второй :
setenv LANG=ru_RU.UTF-8
setenv LC_CTYPE=ru_RU.UTF-8
setenv LC_NUMERIC=ru_RU.UTF-8
setenv LC_TIME=ru_RU.UTF-8
setenv LC_MONETARY=ru_RU.UTF-8
setenv LC_MESSAGES=ru_RU.UTF-8
setenv LC_PAPER=ru_RU.UTF-8
setenv LC_NAME=ru_RU.UTF-8
setenv LC_ADDRESS=ru_RU.UTF-8
setenv LC_TELEPHONE=ru_RU.UTF-8
setenv LC_MEASUREMENT=ru_RU.UTF-8
setenv LC_IDENTIFICATION=ru_RU.UTF-8
setenv LESSCHARSET=UTF-8
setenv LC_COLLATE=C

и будет тебе счастье.(/)

Gramozeka ★★ ()
Ответ на: комментарий от Gramozeka

оба файла есть и оба исполняемые

lang.sh с таким содержимым и был

в lang.csh вписал вашу портянку, ничего не поменялось

Deleted ()
Ответ на: комментарий от Deleted
bash-4.3# slackpkg search glibc

Looking for glibc in package list. Please wait... DONE

The list below shows all packages with name matching "glibc".

[ Status           ] [ Repository               ] [ Package                                  ]
   installed               multilib                     glibc-2.23_multilib-x86_64-4alien         
   installed               multilib                     glibc-debug-2.23_multilib-x86_64-4alien   
   installed               multilib                     glibc-i18n-2.23_multilib-x86_64-4alien    
   installed               multilib                     glibc-profile-2.23_multilib-x86_64-4alien  
   installed               multilib                     glibc-solibs-2.23_multilib-x86_64-4alien  
   installed               patches                      glibc-zoneinfo-2019a-noarch-1_slack14.2   
  uninstalled(masked)      patches                      glibc-2.23-x86_64-4_slack14.2             
  uninstalled(masked)      patches                      glibc-i18n-2.23-x86_64-4_slack14.2        
  uninstalled(masked)      patches                      glibc-profile-2.23-x86_64-4_slack14.2     
  uninstalled(masked)      patches                      glibc-solibs-2.23-x86_64-4_slack14.2      
  uninstalled(masked)      slackware64                  glibc-2.23-x86_64-1                       
  uninstalled(masked)      slackware64                  glibc-i18n-2.23-x86_64-1                  
  uninstalled(masked)      slackware64                  glibc-profile-2.23-x86_64-1               
  uninstalled(masked)      slackware64                  glibc-solibs-2.23-x86_64-1                
  uninstalled(masked)      slackware64                  glibc-zoneinfo-2016e-noarch-1             

You can search specific files using "slackpkg file-search file".


bash-4.3# 

Deleted ()

Нафлудили в теме знатно...

Начнем с простого, выясним, в каком режиме консоль (utf8 или однобайтный):
# stty
смотрим на строчку c utf8, есть ли перед utf8 дефис.
Если дефис в наличии, то консолька в однобайтном режиме, убеждаемся, что в загрузчике ядра ему передают параметр «vt.default_utf8=1» или «vt.default_utf8» вовсе не передают.
Заодно можно посмотреть на тот же предмет на
cat /proc/cmdline

Смотрим на доступные локали
# locale -av | grep ru_UA

Проверяем, нет ли ругани на выбранную ru_UA.UTF-8
# LANG=ru_UA.UTF-8 locale

Если ругань на отсутствующий каталог, проверяем, а на месте ли файлы локали, в данном случае — в /usr/lib64/locale/ru_UA.utf8

Если ругани нет, то локаль ставится без ошибок.

За язык сообщений отвечает LC_MESSAGES внутри каталога локали в /usr/share/locale/ (ах да, это для gettext и совместимых). И вот если там нет переводов для той или иной программы, то сообщений на выбранном языке и не будет. Но это вовсе не значит, что с локалью что-то не так. Для mc обычно есть, можно посмотреть:
LANG=ru_UA.UTF-8 mc

Где попробует взять переводы сообщений и где возьмет на самом деле?
/usr/share/locale/ru_UA.utf8/LC_MESSAGES/mc.mo — такого нет
/usr/share/locale/ru_UA/LC_MESSAGES/mc.mo — такого нет
/usr/share/locale/ru.utf8/LC_MESSAGES/mc.mo — такого нет,
/usr/share/locale/ru/LC_MESSAGES/mc.mo — бинго! Вот отсюда будут в действительности взяты сообщения.

Пожалуй отвлекся...
Если тут все было нормально, то для задания ru_UA.UTF-8 для всех достаточно:
/etc/profile.d/lang.sh:
export LANG=ru_UA.UTF-8
export LC_COLLATE=C

/etc/profile.d/lang.csh:
setenv LANG=ru_UA.UTF-8
setenv LC_COLLATE=C

Первый вызывается при запуске bash (sh и аналогичных) в качестве регистрационной оболочки (login shell), второй — при запуске csh (tcsh) и аналогичных. Из profile.d/ вызываются сценарии только с установленным битом исполнения.

Нетрудно догадаться, что выбором параметров локали управляют всего лишь переменные окружения. Подробнее см. «man locale».

Посмотреть текущее окружение на предмет указанных переменных несложно при помощи:
declare | grep '^LANG\|^LC_'

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от bormant

Спасибо. Днем сделаю, что вы показали.

Но у меня симптомы точно как здесь

Slackware слетела локаль (комментарий)

Мне кажется, что все это из-за апгрейдов и glibc. Все что вы сказали, перепроверял 100500 раз.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от bormant

Проверить юникодность консольки можно и без stty, достаточно попытаться вывести пару двубайтовых букв в utf8 и посмотреть, сколько знакомест будет использовано, 2 (utf8 обрабатывается) или 4 (однобайтный режим). Если при этом и шрифт правильный, то и правильные буквы увидим ;-) Например для «АБ»:

$ echo '\xd0\x90\xd0\x91'
АБ

bormant ★★★★★ ()
Ответ на: комментарий от Deleted

Еще раз.
Не надо путать локаль и отображение тех или иных символов, в общем случае это не одно и тоже. За правильное отображение отвечает в том числе и шрифт (который в общем случае к локали не имеет отношения), и его таблицы перекодировки.
Причем нужно помнить, что для ядерной консоли и для терминала в X-ах это совсем не одни и те же шрифты и не одни и те же параметры.

Вопрос-то про что? Ни в исходном сообщении, ни по ходу темы никакой значимой информации в этой части не приведено.

bormant ★★★★★ ()
Ответ на: комментарий от bormant

В меню XFCE все на английском, в консоли и mc вместо кирилицы вопросы

Deleted ()
Ответ на: комментарий от bormant

Смотрим на доступные локали
# locale -av | grep ru_UA

bash-4.3$ locale -av | grep ru_UA
locale: ru_UA           directory: /usr/lib64/locale/ru_UA
locale: ru_UA.utf8      directory: /usr/lib64/locale/ru_UA.utf8
bash-4.3$ 

Проверяем, нет ли ругани на выбранную ru_UA.UTF-8
# LANG=ru_UA.UTF-8 locale

locale: �������������������� �������������������� LC_ALL �� ������������ ���� �����������������: ������ ������������ ���������� ������ ����������������
LANG=ru_UA.UTF-8
LC_CTYPE="ru_UA.UTF-8"
LC_NUMERIC="ru_UA.UTF-8"
LC_TIME="ru_UA.UTF-8"
LC_COLLATE=C
LC_MONETARY="ru_UA.UTF-8"
LC_MESSAGES="ru_UA.UTF-8"
LC_PAPER="ru_UA.UTF-8"
LC_NAME="ru_UA.UTF-8"
LC_ADDRESS="ru_UA.UTF-8"
LC_TELEPHONE="ru_UA.UTF-8"
LC_MEASUREMENT="ru_UA.UTF-8"
LC_IDENTIFICATION="ru_UA.UTF-8"
LC_ALL=
bash-4.3$ 

Если ругань на отсутствующий каталог, проверяем, а на месте ли файлы локали, в >данном случае — в /usr/lib64/locale/ru_UA.utf8

файл на месте

Посмотреть текущее окружение на предмет указанных переменных несложно при помощи:
declare | grep '^LANG\|^LC_'

bash-4.3# declare | grep '^LANG\|^LC_'
LANG=ru_UA.utf8
LC_COLLATE=C
bash-4.3# 
Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

По совокупности stty и вывода об ошибке от locale видно, что консоль в однобайтном режиме, не в режиме utf8, попытка вывести многобайтные символы приводит к выводу вместо единого символа каждого составного байта, например:

$ echo '\xd0\x90\xd0\x91'
����  # а должно быть или АБ, или ��

Поэтому вперед на проверку, кто включил этот режим.
Начать стоит с
cat /proc/cmdline

Кроме ядра его могли переключить unicode_stop или прямой вывод ANSI-последовательности в терминал.


UPD:
Хотя стоп, это же вывод из эмулятора терминала в иксах?
Тогда смотрим в настройки этого эмулятора терминала, как там включается utf8.

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от bormant

В терминале вместо кирилицы - вопросительные знаки. В xfce текст частично на русском, частично на английском.

bash-4.3$ cat /proc/cmdline
BOOT_IMAGE=Slackware ro root=811 vt.default_utf8=1
bash-4.3$ 
bash-4.3$ echo '\xd0\x90\xd0\x91'
\xd0\x90\xd0\x91
bash-4.3$ 

Deleted ()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

В терминале вместо кирилицы - вопросительные знаки. В xfce текст частично на русском, частично на английском.

А в огороде бузина. А в Киеве дядька. А солнце всходит и заходит.

А в настройках терминала отключен utf8, поэтому при попытке вывести ДВА юникодных символа в utf8 echo -e '\xd0\x90\xd0\x91' в выводе получается ЧЕТЫРЕ знакоместа вместо двух. На этом этапе уже не важно, вопросы там или иной какой бред.

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от Deleted

Я через liloconf выставлял utf8
... vt.default_utf8=1

Это всё про ядерную консоль. К эмулятору терминала в иксах не имеет никакого отношения.

bormant ★★★★★ ()
Ответ на: комментарий от Deleted

bash-4.3$ echo -e '\xd0\x90\xd0\x91'
����
bash-4.3$ echo $'\xd0\x90\xd0\x91'
����

Я уже про это несколько раз написал, что может быть непонятно-то?

А в настройках терминала отключен utf8, поэтому при попытке вывести ДВА юникодных символа в utf8 echo -e '\xd0\x90\xd0\x91' в выводе получается ЧЕТЫРЕ знакоместа вместо двух. На этом этапе уже не важно, вопросы там или иной какой бред.

По совокупности stty и вывода об ошибке от locale видно, что консоль в однобайтном режиме, не в режиме utf8, попытка вывести многобайтные символы приводит к выводу вместо единого символа каждого составного байта, например:

$ echo '\xd0\x90\xd0\x91'
���� # а должно быть или АБ, или ��

Хотя стоп, это же вывод из эмулятора терминала в иксах?
Тогда смотрим в настройки этого эмулятора терминала, как там включается utf8.

bormant ★★★★★ ()
Ответ на: комментарий от bormant

Тогда смотрим в настройки этого эмулятора терминала, как там включается utf8.

Хз о чем речь но в xfce4-terminal utf8 включается в «Настройки»->«Дополнительно»->«Кодировка по умолчанию»

Deleted ()
Ответ на: комментарий от bormant

xfce4-terminal

во всех остальных терминалах, что были установлены по умодчанию тоже вопросы

Deleted ()
Последнее исправление: Deleted (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.