Как правильно установить языковой стандарт Python в Windows? - PullRequest
74 голосов
/ 05 июня 2009

Я пытаюсь отсортировать список строк с учетом локали. Я использовал библиотеку 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

Что я делаю не так?

Ответы [ 6 ]

99 голосов
/ 05 июня 2009

Кажется, вы используете 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 есть список строк языка и строк страны / региона

12 голосов
/ 08 сентября 2009

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

import locale
locale.setlocale(locale.LC_ALL, '')
10 голосов
/ 27 марта 2017

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

import locale

locale.setlocale(category=locale.LC_ALL,
                 locale="German")  # Not locale="de_DE"
6 голосов
/ 18 февраля 2018

Я знаю, что об этом спрашивали много лет назад, но я подумал, что попробую добавить то, что узнал, используя 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 голосов
/ 30 июня 2014

Ubuntu

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

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

$> 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')

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

3 голосов
/ 26 апреля 2014

Из документов locale.setlocale:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...