Каков правильный способ установить языковой стандарт 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
Что я делаю неправильно?
Ответы
Ответ 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