Итак, я перепробовал все, что мог найти в Google, но настройки локали не изменились (вид, вы поймете, что я имею в виду).

Для начала желаемая локаль (lv_LV.UTF-8) доступна в системе:

$ locale -a
C
C.UTF-8
en_US.utf8
lv_LV.utf8
POSIX

Я попытался установить локаль с помощью sudo update-locale lv_LV.UTF-8

Также попытался установить вручную в /etc/default/locale и /etc/environment без удачи:

LANG=lv_LV.UTF-8
LC_MESSAGES=POSIX

Если я проверю, какая локаль установлена, то получу:

$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES=POSIX
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Так что на самом деле работает то, что я получаю латышский текст в календаре Gnome и вижу запись в настройках региона и языка "Латвия". Но если я попытаюсь запустить Libre Calc, он распознает точку как десятичный разделитель вместо комы (что установлено в латышских локалях).

Так что еще я могу / должен сделать, чтобы полностью включить латышские локали в Debian? По сути, мне это нужно, потому что, когда я делаю вставки в базу данных из проекта PHP, он обвиняет, что, например, «1,25» является недопустимым числом и должно быть «1,25», но на рабочем сервере оно принимает наоборот: должно быть «1,25» а не «1,25».

2 ответа2

4

Пара разных вещей:

  1. Забудьте о /etc/environment - Debian переключился на использование /etc/default/locale вместо Etch (4.0).

  2. Смысл /etc/default/locale состоит в том, чтобы пара переменных окружения появилась в процессе, который инициирует сеанс входа пользователя в систему.

    Теперь есть несколько способов войти в систему Debian; назвать несколько:

    • Через виртуальные консоли - те текстовые экраны, на которых вы видите приглашение Login: обычно вы видите в системе без системы X Window или при нажатии Ctrl - Alt - F1 при работе с X diplay.
    • Через "Диспетчер отображения" X Window - это графическая вещь, которая позволяет пользователю предоставить свои учетные данные для аутентификации, а затем запускает сервер X Window, на котором для него выполняется какая-то среда рабочего стола.
    • Через SSH.

    (Могут быть и другие, но это не имеет значения.)

    Здесь важно то, что создание сеанса пользователя в системах на основе Linux обычно проходит через так называемый уровень PAM , конфигурация которого находится в /etc/pam . Теперь, если вы делаете

    $ grep -r locale /etc/pam.d
    

    вы увидите, что файл /etc/default/locale читается там в нескольких местах.

    Я веду вас к тому, что для того, чтобы "увидеть" измененные настройки локали, вам нужно создать еще один сеанс входа в систему - независимо от того, как вы это делаете. Например, войдите в другую виртуальную консоль или выйдите из сеанса X на рабочем столе и снова войдите в систему.

  3. Так как /etc/default/locale устанавливает только несколько переменных среды, они могут быть переопределены.

    К чему я вас веду, если предположим, что вы входите на виртуальную консоль; в конце ваша оболочка входа в систему запускается и показывает вам ее приглашение. Но когда оболочка запускается, она читает свои скрипты запуска. Например, bash при запуске в качестве оболочки входа в систему читает ~/.bash_profile если таковой существует, или /etc/bash_profile если первая не удалась. Ваш местный ~/.bash_profile может связываться с чем-то вроде

    export LANG=en_US
    

    ... и альт - настройки вашей среды переопределены.

    Оболочки, не входящие в систему, также читают сценарии запуска (bash читает ~/.bashrc), и эти сценарии также могут изменять переменные среды.

    Поэтому, пожалуйста, дважды проверьте, что у вас нет переопределений ни при каких условиях. Обратите внимание, что сложно получить более точные указатели, потому что существует множество способов получить рабочий сеанс в системе Debian, и способ его настройки зависит от его типа.

  4. Если взаимодействие вашего PHP-кода с вашей базой данных базы данных зависит от активной локали, которую видит процесс PHP, ваш проект серьезно испортился, и вам лучше сконцентрироваться на его исправлении, а не на локали. В противном случае это укусит вас в шею, рано или поздно.

    Вся концепция языковых настроек существует исключительно для программного обеспечения для взаимодействия с пользователем - таким образом, что это естественно для определенных групп пользователей, имеющих различные культурные предпочтения и т.д. Это, конечно, не включает взаимодействие с серверами баз данных. То есть настройки локали могут (и должны) использоваться, когда вы анализируете все, что пользователь ввел, скажем, в веб-форму, но когда вы передаете эти данные в серверную часть базы данных, данные должны быть уже нормализованы - в вашем случае они имеют быть числами с плавающей точкой, а не их строковыми представлениями. И используйте параметризованные запросы SQL, если это применимо и возможно.

0

Во-первых, вы обязательно должны прочитать сообщение @kostix.

Лично я переконфигурирую локали с помощью dpkg-reconfigure locales в Debian.

Например:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
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=

$ su -
[Password]

# dpkg-reconfigure locales
[Select C.UTF-8 for example]

# exit
$ su -
# locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .