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


Я пытаюсь отсортировать список строк в соответствии с языковым стандартом. Я использовал библиотеку Babel для других задач, связанных с i18n, но она не поддерживает сортировку. Питона 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:Python26Liblocale.py", line 494, in setlocale
locale.Error: unsupported locale setting

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

6 71

6 ответов:

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

вы должны не передавать явную локаль для 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 у вас может быть эта проблема, потому что у вас нет этого локального установленного в вашей системе.

из оболочки попробуйте 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')

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

от локали.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.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)