Successfully reported this slideshow.

18 Оттенков I18n

1

Share

Upcoming SlideShare
Trees in RDBs
Trees in RDBs
Loading in …3
×
1 of 25
1 of 25

18 Оттенков I18n

1

Share

Download to read offline

Проекты становятся глобальными, когда этого никто не ждёт. Проблема перевода возникает не только у переводчиков, но и у инженеров. Разговор об основных трудностях перевода с точки зрения Web разработчика. Усвоенные уроки, инструменты и life hacks.

Проекты становятся глобальными, когда этого никто не ждёт. Проблема перевода возникает не только у переводчиков, но и у инженеров. Разговор об основных трудностях перевода с точки зрения Web разработчика. Усвоенные уроки, инструменты и life hacks.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

18 Оттенков I18n

  1. 1. Localization Internationalization
  2. 2. catgets VS gettext 1995
  3. 3. [language[_territory][.codeset][@modifier]] Locale en_GB.UTF-8@variant
  4. 4. Messages Dates Numbers Currency en_GB Locale
  5. 5. More about Localization • Images • Sound • Video • Cultural perception • Taxes
  6. 6. gettext features • Messages • Plural forms • Context
  7. 7. Django I18n tools
  8. 8. • gettext • Formats • Timezones I18n features
  9. 9. workflow Me InterpreterLocalized Product P O M O
  10. 10. from django.utils.translation import gettext_noop as _noop from django.utils.translation import gettext as _ { _noop(”Winnie rhyme”): _("It's a very funny thought that, if Bears were Bees," "They'd build their nests at the bottom of trees." "And that being so (if the Bees were Bears)," "We shouldn't have to climb up all these stairs.”) } ✪ python manage.py makemessages
  11. 11. Portable Objects PO files #: main.py:3 msgid "" "It's a very funny thought that, if Bears were Bees," "They'd build their nests at the bottom of trees." "And that being so (if the Bees were Bears)," "We shouldn't have to climb up all these stairs.” msgstr ""
  12. 12. Pootle Server
  13. 13. Custom Solution http://rannts.ru/meetups/1/l10n/ Legacy? Customer?
  14. 14. #: main.py:3 msgid "" "It's a very funny thought that, if Bears were Bees," "They'd build their nests at the bottom of trees." "And that being so (if the Bees were Bears)," "We shouldn't have to climb up all these stairs.” msgstr "" "Если б мишки были пчёлами, то они бы нипочём, никогда ” "и не подумали так высо́ко строить дом… Ой!" ✪ python manage.py compilemessages
  15. 15. Provide more context @classmethod def get_table_caption(cls): # Translators: Taxable or Non-Taxable Donations return cls.prefix + _(' Donations') #: Translators: Taxable or Non-Taxable Donations #: source.py:3 msgid "" "Donations" msgstr "" source PO
  16. 16. Avoid dynamic string creating @property def prefix(self): if self.gov_state in ['CA', 'TX', 'FL']: # Translators: Taxable Donations return _('Taxable') else: # Translators: Non-Taxable Donations return _('Non-Taxable') def get_table_caption(self): # Translators: Taxable or Non-Taxable Donations return self.prefix + _('Donations')) Words sequence cannot be changed
  17. 17. What if nothing to do? Insert right to the PO files
  18. 18. python-babel Flask-Babel Same features. Both uses gettext. babel-django
  19. 19. Python gettext standard library GNU gettext API import gettext gettext.gettext('EOD Report')
  20. 20. More – pymorphy – pymorphy2 Русский, Белорусский, Украинский. Морфологический анализ. (род, число, падеж) pymorphy-django
  21. 21. mystem Yandex Морфологический анализ cli интерфейс
  22. 22. Informative Links • History of GNU gettext https://www.gnu.org/software/gettext/manual/html_node/gettext_219.html#History https://www.w3.org/International/questions/qa-i18n.ru.php

Editor's Notes

  • Здравствуйте. Здравствуйте. Здравствуйте. Я – Алексей Кутепов и я люблю python. Работаю над переводом backoffice POS компании Revel . Компания сравнительно недавно, год назад, вышла на мировой рынок. Этот доклад будет про то, как это было. Надеюсь вам пригодится.


  • Интернационализация. Каждый определит его по-своему. Для этой презентации под интернационализацией будем понимать набор средств и подходов для упрощения локализации.

    Локализация -- это процесс адаптации продукта для определённой местности. Понятие очень широкое, это не только сам перевод текста (даже на изображениях), но и единицы измерений, форматы времени, чисел, особенности восприятия цветов в разных культурах, налогообложение (у нас это одна из основных проблем).

    Интернационализация – это процесс облегчающий локализацию. То есть набор средств и подходов. И всё-таки я предпочёл назвать этот доклад «интернационализация», потому что большей частью мы пишем то, что позволяет автоматизировать локализацию.

  • gettext comes from solaris catgets: The reason for this lies in the third argument of catgets: the unique message ID Neither method is a POSIX standard

    This all began in July 1994 Patrick D’Cruze I18n of fileutils
    Jim Meyering, the maintainer, asked Richard Stallman about standards and got glocale description. Jim implemented glocale with feedback from Richard Stollman, Patrick and Mitchum DSouza (catgets-like package mainteiner)
  • Люди придумали локаль. Локаль – это набор настроек определяющий UI для данного региона, включая и язык. Number format setting
    Сase conversion settings
    Date-time format setting
    String collation setting
    Currency format setting
    Paper size setting Keyboard layout
  • Люди придумали локаль. Локаль – это набор настроек определяющий UI для данного региона, включая и язык. Number format setting
    Сase conversion settings
    Date-time format setting
    String collation setting
    Currency format setting
    Paper size setting
  • Но, локализация это ещё не всё. Изображения (одежда персонажей) Звуковое сопровождение Видеоряд (пролог к игре fallout видеоряд начинается с ядерного взрыва, в локализации для Японии видеоряд начинается в подземелье) Разница восприятия цветов в разных культурах (броские цвета в Корее, Японии и Китае) Расчёт налогов это тоже локализация.
  • Ка
  • Форматы лежат в отдельном файле formats.py в формате Transifex, о котором я расскажу дальше.
  • Взлянем, как происходит процесс I18n на примере меня. Я помечаю строки в коде, нужно ли их переводить или нет. Затем отдаю переводчику в удобном для человека формате. Переводчик возвращает работу в том же формате. Я компилирую это всё в формат удобный для машины. И получаю локализованный продукт. Как видите, картинки остались нелокализованными, потому что gettext это не может, что и не удивительно.
  • Это работаю я, сначала я помечаю текст, который должен быть переведен. Я нашёл этот dictionary, и ключи помечаю как неподлежащие переводу, а
  • Это работаю я, сначала я помечаю текст, который должен быть переведен. Я нашёл этот dictionary, и ключи помечаю как неподлежащие переводу, а
  • Translation memory – перевод слов запоминается, если встречается уже переведенные слова, то они автоматически заменяются переводом. Это экономит очень много сил переводчиков.
  • Transifex – платный сервер переводов SaaS. Django использует формат Transifex для хранения файла форматов.
  • Не всегда удаётся внедрить проверенные решения. Поэтому фантазируем.
  • Полученный PO файл теперь можно скомпилировать в MO файл, удобный для использования нашей системой.
  • Переводчики хотят контекста.
  • Удобно составлять строки динамически, особенно в сложных системах. Английский язык позволяет конструировать предложения легче, чем, например, русский. В данном примере кажется за счёт интенсивного контекста все неоднозначности решены. Но перевод затруднён. При таком подходе невозможно изменить порядок слов, который необходим для качественного перевода.
  • ×