Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 232

File "/Library/Frameworks/Python.framework/Versions/3.3/lib/

python3.3/_strptime.py", line 494, in _strptime_time

tt = _strptime(data_string, format)[0]

File "/Library/Frameworks/Python.framework/Versions/3.3/lib/

python3.3/_strptime.py", line 337, in _strptime

(data_string, format))

ValueError: time data '2012-13-29' does not match format '%Y-%m-%d'

Имена соответствуют вашей локали — набору настроек операционной системы

для интернационализации. Чтобы вывести на экран другие названия месяцев

и дней, измените свою локаль с помощью функции setlocale(): ее первый аргумент

должен быть равен locale.LC_TIME для даты и времени, а второй аргумент — это

строка, содержащая сокращение языка и страны. Пригласим на нашу вечеринку

в честь Дня всех святых наших иностранных друзей. Мы выведем на экран дату

(месяц, число и день недели) на английском, французском, немецком, испанском

и исландском. (А что? Думаете, исландцы не любят вечеринки? У них даже есть

настоящие эльфы.)

>>> import locale

>>> from datetime import date

>>> halloween = date(2014, 10, 31)

>>> for lang_country in ['en_us', 'fr_fr', 'de_de', 'es_es', 'is_is',]:

... locale.setlocale(locale.LC_TIME, lang_country)

... halloween.strftime('%A, %B %d')

...

'en_us'

'Friday, October 31'

'fr_fr'

'Vendredi, octobre 31'

'de_de'

'Freitag, Oktober 31'

'es_es'

'viernes, octubre 31'

'is_is'

'föstudagur, október 31'

>>>

Откуда можно взять эти волшебные значения аргумента lang_country? Это не-

много ненадежно, но вы можете получить их все сразу (всего их несколько сотен):

>>> import locale

>>> names = locale.locale_alias.keys()

300

Глава 10. Системы

Из переменной names получим только те имена локалей, которые будут работать

с методом setlocale(), вроде тех, что мы использовали в предыдущем примере, —

двухсимвольный код языка (http://bit.ly/iso-639-1), в котором после подчеркивания

следует двухсимвольный код страны (http://bit.ly/iso-3166-1):

>>> good_names = [name for name in names if \

len(name) == 5 and name[2] == '_']

Как будут выглядеть первые пять из них?

>>> good_names[:5]

['sr_cs', 'de_at', 'nl_nl', 'es_ni', 'sp_yu']

Если вы хотите получить все локали для Германии, используйте следующий