Как правильно установить языковой стандарт 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)