Подтвердить что ты не робот

Каков правильный способ установить языковой стандарт Python в Windows?

Я пытаюсь сортировать список строк в соответствии с языком. Я использовал библиотеку Babel для других задач, связанных с i18n, но не поддерживает сортировку. Модуль Python locale предоставляет функцию strcoll, но требует, чтобы локаль процесса был установлен в том, с которым я хочу работать. Вид боли, но я могу жить с ней.

Проблема заключается в том, что я не могу установить локаль. В документации для модуля locale приведен пример:

import locale
locale.setlocale(locale.LC_ALL, 'de_DE')

Когда я запустил это, я получаю следующее:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\Lib\locale.py", line 494, in setlocale
locale.Error: unsupported locale setting

Что я делаю неправильно?

4b9b3361

Ответ 1

Кажется, вы используете Windows. Строки локали там разные. Присмотритесь к документу:

locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform

В Windows я думаю, что это будет что-то вроде:

locale.setlocale(locale.LC_ALL, 'deu_deu')

MSDN имеет список языковых строк и строк страны/региона

Ответ 2

Вы должны не передавать явную локаль в setlocale, это неправильно. Пусть он узнает из окружающей среды. Вы должны передать ему пустую строку

import locale
locale.setlocale(locale.LC_ALL, '')

Ответ 3

Это единственный способ сделать это в Windows (пример для немецкого языка):

import locale

locale.setlocale(category=locale.LC_ALL,
                 locale="German")  # Not locale="de_DE"

Ответ 4

Ubuntu

В Ubuntu у вас может возникнуть эта проблема, потому что у вас нет этой локальной установки в вашей системе.

Из оболочки попробуйте a:

$> locale -a

и проверьте, не найден ли интересующий вас язык. В противном случае вы должны установить его:

$> sudo apt-get install language-pack-XXX

где XXX - ваш язык (в моем случае "xxx = it", итальянский язык) Затем запустите dpkg-reconfigure:

$> sudo dpkg-reconfigure locales

После этого повторите попытку в оболочке python:

>>> import locale
>>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')

(это для итальянской локали, которая была тем, что мне нужно)

Ответ 5

Я знаю, что это было задано несколько лет назад, но я подумал, что попробую добавить то, что я узнал, используя Python 3.6 для Windows:

import locale
for x in locale.windows_locale.values():
    print(x.replace('_','-'))

Я пробовал некоторые, и это также похоже на способ узнать, что доступно в Windows.

Полезно знать: это по какой-то причине несовместимо с strptime() в текущей стабильной версии Python

И тогда вы просто устанавливаете язык:

locale.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)

Ответ 6

Из locale.setlocale docs:

locale.setlocale(category, locale=None):
    """
    Set the locale for the given category.  The locale can be
    a string, an iterable of two strings (language code and encoding),
    or None.
    """"

В Linux (особенно Ubuntu) вы можете использовать

locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')

или

locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))

Вы получите ту же ошибку, если локаль не установлена ​​ в системе. Итак, убедитесь, что в вашей системе установлен языковой стандарт :

$ locale -a # to list the currently installed locales
$ (sudo) locale-gen de_DE.UTF-8 # to install new locale