Артем Первухин "Язык программирования GO"
В докладе будет рассказано, чем сможет заинтересовать Python-разработчика язык программирования Go. Будут описаны базовые идиомы языка Go и даны ответы на следующие вопросы: Насколько применим к Go "Zen of Python"? Какая у этого языка область применения? В чём можно выиграть, использовав Go вместо Python?
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Спросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший за долгие годы множество языков и фреймворков. Действительно, "человеку свойственно ошибаться". Так что же делать, если из человека это свойство не выбить? Как сократить это бездарно потраченное время?
Тот же программист вам и ответ: "отлаживать, конечно". Это искуство сродни магии, доступно всем и покоряется немногим. Но к счастью, помимо проверенной временем практики "вставь сюда print" к услугам питонистов целый зоопарк инструментов.
В этом докладе я постараюсь обобщить самые частые практики отладки, описать их плюсы/минусы и как они соотносятся с Python. Кроме этого, мы совершим обзорный экскурс по экосистеме и посмотрим, чем можно помочь себе в этой нелегкой борьбе. Для особенных эстетов мы рассмотрим техники получения информации из уже запущенного кода. Buckle up!
======
Ссылки
======
Python Debugger Uncovered
https://www.youtube.com/watch?v=2sEPipctTxw
How I built a power debugger out of the standard library and
things I found on the internet
https://www.youtube.com/watch?v=g8kF9tuYZ6s
Architecture of Open Source Applications: GDB
http://www.aosabook.org/en/gdb.html
Advanced Python Debugging Techniques Using GDB
https://www.youtube.com/watch?v=rB9rPdMRxIA
pdb – Interactive Debugger
https://pymotw.com/2/pdb/
bdb — Debugger framework
https://docs.python.org/2/library/bdb.html
Распространено мнение, что навык пакетирования своих наработок необходим только гуру в Open Source. Стас развенчал этот миф и показал несколько практических задач, решаемых при помощи пакетирования кода.
Артем Первухин "Язык программирования GO"
В докладе будет рассказано, чем сможет заинтересовать Python-разработчика язык программирования Go. Будут описаны базовые идиомы языка Go и даны ответы на следующие вопросы: Насколько применим к Go "Zen of Python"? Какая у этого языка область применения? В чём можно выиграть, использовав Go вместо Python?
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Спросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший за долгие годы множество языков и фреймворков. Действительно, "человеку свойственно ошибаться". Так что же делать, если из человека это свойство не выбить? Как сократить это бездарно потраченное время?
Тот же программист вам и ответ: "отлаживать, конечно". Это искуство сродни магии, доступно всем и покоряется немногим. Но к счастью, помимо проверенной временем практики "вставь сюда print" к услугам питонистов целый зоопарк инструментов.
В этом докладе я постараюсь обобщить самые частые практики отладки, описать их плюсы/минусы и как они соотносятся с Python. Кроме этого, мы совершим обзорный экскурс по экосистеме и посмотрим, чем можно помочь себе в этой нелегкой борьбе. Для особенных эстетов мы рассмотрим техники получения информации из уже запущенного кода. Buckle up!
======
Ссылки
======
Python Debugger Uncovered
https://www.youtube.com/watch?v=2sEPipctTxw
How I built a power debugger out of the standard library and
things I found on the internet
https://www.youtube.com/watch?v=g8kF9tuYZ6s
Architecture of Open Source Applications: GDB
http://www.aosabook.org/en/gdb.html
Advanced Python Debugging Techniques Using GDB
https://www.youtube.com/watch?v=rB9rPdMRxIA
pdb – Interactive Debugger
https://pymotw.com/2/pdb/
bdb — Debugger framework
https://docs.python.org/2/library/bdb.html
Распространено мнение, что навык пакетирования своих наработок необходим только гуру в Open Source. Стас развенчал этот миф и показал несколько практических задач, решаемых при помощи пакетирования кода.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
DevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
Применение фреймворка GStreamer в системе видеонаблюденияcorehard_by
Я хочу рассказать о фреймворке GStreamer, который предназначен для обработки аудио/видеоданных. А также для чего мы его использовали в одном из наших проектов.
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
Владимир Яковлев - Python Developer / Odesk / Россия, Санкт-Петербург
- выбор фреймворка: TkInter/PySide/PyQt/PyGI; - что делать если не хватает одного потока; - взаимодействие с системой и другими приложениями; - сборка и публикация пакетов.
http://www.it-sobytie.ru/events/2040
Документация на тему архитектуры языка PHP скудна и разрозненна, несмотря на то что тема интересна многим. В моем докладе я постараюсь заполнить этот пробел и рассказать о модулях PHP: как они работают, зачем и как их пишут. В процессе мы рассмотрим опыт Badoo в этой сфере на примерах двух модулей. И еще напишем очень небольшой собственный модуль.
— Что такое модули PHP, как они работают
— Как начать писать свой модуль PHP
— Скелет модуля — Функции, классы, методы
— Разбор параметров функции
— Сборка модуля
— Подгрузка модуля
— Простой пример модуля из Badoo
— Сложный пример модуля из Badoo
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
Вы разрабатываете веб-приложения и используете хранимые процедуры? Вы пишите SELECT … WITH(NOLOCK)? Вы считаете, что ORMы снижают быстродействие приложений? Тогда этот доклад для вас!
В докладе будут развенчаны популярные мифы о применении библиотек Object-Relational Mapping (ORM) в ASP.NET при работе с Microsoft SQL Server. Также будут рассмотрены конкретные методики увеличения быстродействия работы с данными в веб-приложениях.
В докладе рассматривается текущее состояние механизмов поиска и установки необходимых библиотек и утилит. Мы пробежим по общему определению менеджера пакетов и рассмотрим несколько распространенных примеров. Взглянем на типичные сценарии использования и на то, какие возможности были использованы в качестве критериев сравнения, а также составим представление о существующих решениях в мире С++ их конструктивных особенностях и примерах решаемых задач.
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
В докладе речь пойдёт о языке Go. Вячеслав расскажет о внутреннем устройстве языка (структуре, оптимизации, сборщике мусора и т.д.), о том, как и почему Go используют в Яндексе и что о нём говорят разработчики на С++. Отдельно Вячеслав остановится на многопоточном программировании и особенностях отладки и профилирования в Go.
Как показывает практика, применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход, основанный на прозрачном использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая его в понятный, легко читаемый и структурируемый код.
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
В докладе речь пойдёт о языке Go. Вячеслав расскажет о внутреннем устройстве языка (структуре, оптимизации, сборщике мусора и т.д.), о том, как и почему Go используют в Яндексе и что о нём говорят разработчики на С++. Отдельно Вячеслав остановится на многопоточном программировании и особенностях отладки и профилирования в Go.
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
DevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
Применение фреймворка GStreamer в системе видеонаблюденияcorehard_by
Я хочу рассказать о фреймворке GStreamer, который предназначен для обработки аудио/видеоданных. А также для чего мы его использовали в одном из наших проектов.
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
Владимир Яковлев - Python Developer / Odesk / Россия, Санкт-Петербург
- выбор фреймворка: TkInter/PySide/PyQt/PyGI; - что делать если не хватает одного потока; - взаимодействие с системой и другими приложениями; - сборка и публикация пакетов.
http://www.it-sobytie.ru/events/2040
Документация на тему архитектуры языка PHP скудна и разрозненна, несмотря на то что тема интересна многим. В моем докладе я постараюсь заполнить этот пробел и рассказать о модулях PHP: как они работают, зачем и как их пишут. В процессе мы рассмотрим опыт Badoo в этой сфере на примерах двух модулей. И еще напишем очень небольшой собственный модуль.
— Что такое модули PHP, как они работают
— Как начать писать свой модуль PHP
— Скелет модуля — Функции, классы, методы
— Разбор параметров функции
— Сборка модуля
— Подгрузка модуля
— Простой пример модуля из Badoo
— Сложный пример модуля из Badoo
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
Вы разрабатываете веб-приложения и используете хранимые процедуры? Вы пишите SELECT … WITH(NOLOCK)? Вы считаете, что ORMы снижают быстродействие приложений? Тогда этот доклад для вас!
В докладе будут развенчаны популярные мифы о применении библиотек Object-Relational Mapping (ORM) в ASP.NET при работе с Microsoft SQL Server. Также будут рассмотрены конкретные методики увеличения быстродействия работы с данными в веб-приложениях.
В докладе рассматривается текущее состояние механизмов поиска и установки необходимых библиотек и утилит. Мы пробежим по общему определению менеджера пакетов и рассмотрим несколько распространенных примеров. Взглянем на типичные сценарии использования и на то, какие возможности были использованы в качестве критериев сравнения, а также составим представление о существующих решениях в мире С++ их конструктивных особенностях и примерах решаемых задач.
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
В докладе речь пойдёт о языке Go. Вячеслав расскажет о внутреннем устройстве языка (структуре, оптимизации, сборщике мусора и т.д.), о том, как и почему Go используют в Яндексе и что о нём говорят разработчики на С++. Отдельно Вячеслав остановится на многопоточном программировании и особенностях отладки и профилирования в Go.
Как показывает практика, применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход, основанный на прозрачном использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая его в понятный, легко читаемый и структурируемый код.
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
В докладе речь пойдёт о языке Go. Вячеслав расскажет о внутреннем устройстве языка (структуре, оптимизации, сборщике мусора и т.д.), о том, как и почему Go используют в Яндексе и что о нём говорят разработчики на С++. Отдельно Вячеслав остановится на многопоточном программировании и особенностях отладки и профилирования в Go.
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
House for sale. Exquisite 2700 sq ft Avon Ranch with over 1000 sq ft of unfinished 2nd floor available.Inground pool, spacious, extra bathrooms, and a full basement with extra high ceilings.
This Month in Real Estate, September 2001, is brought to you by Paul W. Drury, Real Estate Broker with Keller Williams Realty Greater Cleveland West. It is a collection of national news, information, and statistics as well as information specific to the North Central Ohio Region between Lakewood and Sandusky and south to the Lodi / Ashland Area.
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
О докладе:
Про Python и Django: зачем нужна красота и простота перфекционистам с дедлайнами, на примере Яндекс.Погоды.
Когда число сервисов, которые делаются в Яндексе, стало возрастать, дедлайны — поджимать, а от процесса разработки требовалось стать более гибким, возникла потребность в свежих решениях. В докладе на примере Яндекс.Погоды рассказывается, как в Яндексе делают сервисы с помощью языка Python и веб-фреймворка Django.
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
Наша команда в DevExpress недавно выпустила Preview версию нового продукта, RTF web-редактора – ASPxRichEdit.
Продукт требует высокой отзывчивости на действия пользователя и максимальной производительности. Поэтому клиент получился «толстым» в отличие от «тонких клиентов» большинства бизнес-приложений.
В составе продукта два полнофункциональных компонента - клиентский и серверный текстовые процессоры. Оба компонента работают независимо друг от друга. Клиентская часть создавалась как оптимизированная версия серверного компонента, переписанного с .NET на TypeScript.
Клиентская часть не уступает в сложности серверной. Кроме того, возникают дополнительные проблемы синхронизации состояний моделей на клиенте и сервере и глубокого тестирования клиент-серверного взаимодействия.
В этом докладе вы узнаете, как мы разрабатывали этот продукт, какие проблемы встретили и какие методики тестирования использовали.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Flame graph: новый взгляд на старое профилированиеКирилл Борисов
Все хотят знать, как выполняется их код. Многие догадываются, чем это можно измерить. И лишь немногие находят в себе силы продраться через результаты измерений. Проблема ещё более усложняется, если приложение исполняется в нескольких процессах, потоках или на разных серверах. Вал измерений захлестывает разработчика, и уже не видно конца...
В этом докладе мы попытаемся упростить все это с помощью визуализации, а именно — flame graph'ов, красивых и наглядных . Также вместе рассмотрим процесс сбора данных, их подготовку и на примерах поучимся читать получившиеся графики.
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
Теория языков программирования (немного об интерпретаторах, триадах, оптимизации, парсерах и прочее)
Compilers construction some lectures of whole course, it covers some methods on interpreters, optimisations, antlr, dsl (introduction)
Internationalization and localization of the python applications with gettext by Alexander Belchenko
1. Интернационализация и локализация
python-приложений
с использованием gettext
Александр Бельченко (bialix)
http://bialix.com/pycamp/gettext.pdf
v.1.2
2. Вступительное слово
Это будет еще один доклад про Джанго
Это доклад про GUI desktop приложения.
Частично может быть применимо для web
Локализация нужна пользователям
Серебряной пули нет (и ложки тоже нет)
Пример одного из возможных вариантов
использования gettext. Мы используем его
в Bazaar GUI
3. Стандартный модуль gettext
в Python
Предоставляет два вида API:
Функции GNU gettext API
Класс GNUTranslations
Функциональное API лишь обертка вокруг
классов; в общем случае работает несколько
медленнее
4. Функции gettext.py
Пара функций-переводчиков:
gettext — перевод простых строк
ngettext — перевод с выбором между
единственным и множественным числом
Варианты функций с различными
префиксами:
u — возвращает перевод как unicode строку
l — перевод в нужной кодировке
d — перевод ищется в указанном домене
5. Файлы с переводами
Где gettext ищет файлы переводов
(sys.prefix/share/locale):
Linux: /usr/local/share/locale
Windows: C:PythonXYsharelocale
Путь поиска можно указать вручную
Стандартная локация:
Linux: /usr/share/locale
Windows: ???
{app}/locale
6. Язык пользователя
Язык для перевода:
Можно указать вручную
По умолчанию берется из переменных
окружения:
LANGUAGE, LC_ALL, LC_MESSAGES, LANG
Эти переменные окружения отсутствуют на
Windows (сюрприз-сюрприз!)
7. Кратко о GNU gettext, PO и MO
Библиотека общего назначения: годится для
консоли, GUI и web
Стандарт де-факто
Существует развитая инфраструктура
инструментов: специальные редакторы,
поддержка в web-сервисах для перевода
Файлы:
POT — шаблон для перевода
PO — файлы перевода на конкретные языки
MO — бинарные файлы перевода (runtime)
8. Формат PO-файлов
1) Заголовок файла (информация о
переводчике, кодировка, выражение для
множественного числа)
2) Тело файла состоит из записей вида:
#: foo.py:3
msgid "Hello"
msgstr ""
9. Работа с GNU gettext утилитами
Сбор строк для перевода (py → pot):
xgettext myapp.py myapplib/*.py -o myapp.pot
Создание файла перевода для конкретного
языка (pot → po):
msginit -l ru -i myapp.pot -o myapp-ru.po
Трансляция в бинарный формат (po → mo):
msgfmt -o locale/ru/LC_MESSAGES/myapp.mo
myapp-ru.po
Обновление файлов с переводами (pot→po):
msgmerge myapp-ru.po myapp.pot -o new.po
10. Python-утилиты
В стандартной поставке Python:
pygettext.py
msgfmt.py
В production использовать НЕ рекомендую
Единственное видимое достоинство
pygettext: умение извекать docstrings
Недостатки: не знает про ngettext, dgettext
Для Windows: http://gnuwin32.sf.net
11. Кавалерийская атака на танки
Документация на модуль gettext рекомендует
очень простой способ включения:
import gettext
gettext.install('myapp', unicode=True)
В коде приложения не надо ничего
импортировать и можно делать:
s = _('Hello, world!')
В чем подвох?
12. В чем подвох gettext.install
Такой короткий код нормально работает на
Linux и в большинстве случаев НЕ работает
на Windows
Нарушается принцип: явное лучше неявного
Перевод строк сразу «включается» для
языка пользователя (LANG)
Что в свою очередь влияет на юнит-тесты, если
вы проверяете строки
14. Мы пойдём другим путём
Будем использовать функции и методы
модуля gettext напрямую и импортировать
имена явно
Включать перевод когда это нам нужно
Следовать уставу в чужом монастыре
15. Использование gettext
в среде Windows
Кто украл $LANG? (Известно, кто)
locale.getdefaultlocale()[0]
Получение идентификатора локали LCID
(через pywin32 или ctypes):
GetUserDefaultLCID()
GetSystemDefaultLCID()
Преобразование LCID в строку при помощи
стандартного модуля locale:
locale.windows_locale[lcid]
17. Использование методов gettext
Работаем с API класса(-ов) GNUTranslations:
import gettext as _gettext
_t = _gettext.NullTranslations()
_t = _gettext.translation('myapp',
localedir=xxx,
fallback=True)
19. Использование в основном коде
import i18n
...
print i18n.gettext('Hello, world!')
Либо:
from i18n import gettext
...
print gettext('Hello, world!')
20. Выбор формы
множественного числа
«Найдено %d документов»
Английский:
Found 1 document
Found 2 documents
Русский:
Найден 1 документ
Найдено 2 документа
Найдено 5 документов
22. gettext и unit-тесты
Всегда включать перевод явно для основного
режима и не включать для режима тестов
_t = _gettext.NullTranslations()
def install():
global _t
if sys.platform == 'win32':
_check_win32_locale()
_t = _gettext.translation('myapp',
localedir=_get_locale_dir(),
fallback=True)
23. Тестирование
интернационализации
Используем специальный класс
ZzzTranslations(), который декорирует
строки
Включаем явно через командную строку:
python myapp.py --zzz
24. Класс ZzzTranslations
class _ZzzTranslations(object):
def zzz(self, s):
return 'zz{{%s}}' % s
def ugettext(self, s):
return self.zzz(
_null_t.ugettext(s))
def ungettext(self, s, p, n):
return self.zzz(
_null_t.ungettext(s, p, n))
27. Нужен ли перевод с дефолтного
языка на английский?
● Это не шутка, он реально нужен
(LANG=en:ja)
● Генерируется автоматически
из POT-шаблона утилитой msginit
либо msgen
28. Строки форматирования
Неправильно:
s = gettext('Page ' + number +
' of ' + count + ' pages')
s = gettext('Page %d of %d pages' %
(number, count))
Плохо:
s = gettext('Page %d of %d pages') %
(number, count)
Хорошо:
s = gettext('Page %(number)d of '
'%(count)d pages') %
dict(number=number,
count=count)
29. Web-сервисы для совместной
работы над переводами
Один из сервисов: переводы на
https://translations.launchpad.net/
●Удобно для разработчиков: все языки в одном
месте
●Удобно для переводчиков: подсказки о
переводах таких же фраз из других проектов
30. Применение gettext в PyQt4?
В собственном коде использовать gettext()
вместо tr()
Формы/диалоги создаваемые в QtDesigner:
трансляция *.ui → ui_*.py
используется скрипт для автоматической
замены вызовов
QtGui.QApplication.translate()
на gettext()
31. Ссылки
GNU gettext: http://www.gnu.org/software/gettext
Утилиты для Windows:
http://gnuwin32.sf.net/packages/gettext.htm
Код поддержки gettext для Windows:
https://launchpad.net/gettext-py-windows
Примеры основаны на коде проектов:
https://launchpad.net/qbzr
https://launchpad.net/bzr-explorer