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

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

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

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

когда я запускаю это, я получаю это:

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

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

6 ответов


похоже, вы используете Windows. Строки локали там разные. Взгляните на doc более точно:

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

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

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

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


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

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

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

import locale

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

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

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


от локали.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

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

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

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

а затем вы просто установите locale:

locale.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)