Я пытаюсь отсортировать список строк с учетом языкового стандарта. Я использовал библиотеку Babel для других задач, связанных с i18n, но она не поддерживает сортировку. locale
Модуль Python предоставляет 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
Что я делаю неправильно?
Ubuntu 13.04
,Linux 3.8.0-19
с питоном2.7.4
при попытке установить локальfr_FR
. Настройкаfr_FR.UTF-8
сработала для меня.'eng_usa'
('en_US'
не сработало)Это единственно правильный способ его использования, в качестве примера для немецкого языка:
import locale locale.setlocale(category=locale.LC_ALL, locale="German" # Note: do not use "de_DE" as it doesn't work)
источник
German
наPortuguese_Brazil.1252
. Вы знаете документацию, в которой перечислены эти значения?Вы не должны передавать явную локаль в setlocale, это неправильно. Пусть узнает из окружающей среды. Вы должны передать ему пустую строку
import locale locale.setlocale(locale.LC_ALL, '')
источник
Ubuntu
В Ubuntu у вас может возникнуть эта проблема, потому что в вашей системе не установлен этот локальный компьютер.
Из оболочки попробуйте:
и проверьте, нашли ли вы интересующий вас язык. В противном случае вам необходимо установить его:
где XXX - ваш язык (в моем случае "xxx = it", итальянский язык) Затем запустите
dpkg-reconfigure
:После этого попробуйте еще раз в оболочке python:
>>> import locale >>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')
(это для итальянского языка, что мне было нужно)
источник
Я знаю, что об этом спрашивали много лет назад, но я подумал, что попробую добавить то, что узнал, используя 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)
источник
Из документов 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
источник