Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Сергей Балалаев — Безопасная локализация строк iOS

Ozon Tech
February 16, 2023

Сергей Балалаев — Безопасная локализация строк iOS

Ozon Tech

February 16, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. 10 февраля 2023 Безопасная локализация строк iOS Сергей Балалаев Руководитель

    отдела разработки мобильного приложения “ПВЗ”
  2. Сергей Балалаев
 Руководитель отдела разработки мобильных приложений "ПВЗ" Карьера: -

    14 лет опыта в мобильной разработке - 9 лет руковожу людьми - 8 лет преподаю курсы iOS
  3. Сергей Балалаев
 Руководитель отдела разработки мобильных приложений "ПВЗ" Задачи: -

    iOS комитет - Формирование стека технологий - Координация и планирование - Route 256 - Построение архитектуры - Постановка технических задач - Написание статей на Habr - Выступления на митапах
  4. Маршрут Tech Talks План 4 1. Локализация в iOS •

    Простые строки • Плюрализм 2. Проблемы с локализацией 3. Инструменты и решения • Кодогенерация • Сервис переводов 4. Приложение Buyer 5. Приложение ПВЗ • Localinter 6. Итоги
  5. Плюрализм (лат. pluralis — множественный) — позиция, в соответствии с

    которой имеется не одна (монизм), не две (дуализм), а много сущностей, субстанций, существований и т.п. 2 17
  6. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П
  7. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д
  8. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО
  9. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H
  10. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H • И ИИИИ ИИИ И ИИИИ И И И И И И И И И ИИ ИИИИ И ИИ И И
  11. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H • И ИИИИ ИИИ И ИИИИ И И И И И И И И И ИИ ИИИИ И ИИ И И 4. Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н
  12. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H • И ИИИИ ИИИ И ИИИИ И И И И И И И И И ИИ ИИИИ И ИИ И И 4. Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н • К КККК КК КК К К К К К К К К К ККК К К К К К К КК
  13. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H • И ИИИИ ИИИ И ИИИИ И И И И И И И И И ИИ ИИИИ И ИИ И И 4. Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н • К КККК КК КК К К К К К К К К К ККК К К К К К К КК 5. М М М М М М М М М М М М М
  14. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H • И ИИИИ ИИИ И ИИИИ И И И И И И И И И ИИ ИИИИ И ИИ И И 4. Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н • К КККК КК КК К К К К К К К К К ККК К К К К К К КК 5. М М М М М М М М М М М М М • П П П П П П П П ПП П П П П ПП П ППП ПППП П П П П П П П
  15. Проблемы на типичном проекте iOS 25 1. О О О

    О О О О О О О О О О О О • П П П П П П П П ПП ППП ПП П П П П П П ПП ПП ПП П П П П П П 2. Д Д Д Д Д Д Д Д Д Д Д Д Д Д Д • О О ОО О О ОО О О О ООО О О О О ООО О О О О О О О О О О ОО 3. H H H H H H H H H H H H H H • И ИИИИ ИИИ И ИИИИ И И И И И И И И И ИИ ИИИИ И ИИ И И 4. Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н Н • К КККК КК КК К К К К К К К К К ККК К К К К К К КК 5. М М М М М М М М М М М М М • П П П П П П П П ПП П П П П ПП П ППП ПППП П П П П П П П 6. П П П П П П П П П П П П П П П П П П П П П П П
  16. Проблемы на типичном проекте iOS 25 1. Отсутствие ключа •

    Помарки, случайное удаление при мерже 2. Дубликаты ключей • Одинаковые ключи с разными переводами 3. Hardcode строки • Извечные поиски и сочинение регулярок 4. Неверный язык перевода • Копипасты из одного языка в другие 5. Мусорные ключи • После удаления использования в коде 6. Профессиональный перевод • Review и Approve сторонних переводчиков
  17. Известные инструменты на текущий момент 28 1. SwiftGen • Работа

    с другими ресурсами • Высокая скорость генерации • Есть шаблонирование • Нет проверки нескольких языков 2. R.swift • Работа с другими ресурсами • Есть проверка нескольких языков • Отсутствует шаблонирование • Скорость обработки низкая
  18. Известные инструменты на текущий момент 28 1. SwiftGen • Работа

    с другими ресурсами • Высокая скорость генерации • Есть шаблонирование • Нет проверки нескольких языков 2. R.swift • Работа с другими ресурсами • Есть проверка нескольких языков • Отсутствует шаблонирование • Скорость обработки низкая
  19. R.swift Проблемы решаемые кодогенерацией 36 1. Отсутствие ключа 2. Дубликаты

    ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  20. lokalise.com Проблемы решаемые lokalise.com 42 1. Отсутствие ключа 2. Дубликаты

    ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  21. lokalise.com Проблемы решаемые lokalise.com 42 + Обновление на лету через

    Swizzling 1. Отсутствие ключа 2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  22. lokalise.com Проблемы решаемые lokalise.com 42 + Обновление на лету через

    Swizzling 1. Отсутствие ключа 2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод + На обе платформы
  23. Решение Buyer Генерируем ресурсы из сервиса 47 1. localization.ozon.ru •

    Заводим переводы на сервисе. Проверяем-правим. 2. RemoteLocalizationConfig.json • Создаем файлы конфигураций 3. remote-localization config find-all • Выполняем команду генерации строковых файлов 4. SwiftGen • Генерируем код для использования ресурсов через константы и функции
  24. Buyer Проблемы, решаемые сервисом переводов и SwiftGen 54 1. Отсутствие

    ключа 2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  25. Buyer Проблемы, решаемые сервисом переводов и SwiftGen 54 + Генератор

    других ресурсов 1. Отсутствие ключа 2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  26. ПВЗ Проблемы, решаемые на нашем проекте 62 1. Отсутствие ключа

    2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  27. ПВЗ Проблемы, решаемые на нашем проекте 62 + Выполняется за

    60 мс 1. Отсутствие ключа 2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод
  28. ПВЗ Проблемы, решаемые на нашем проекте 62 + Выполняется за

    60 мс 1. Отсутствие ключа 2. Дубликаты ключей 3. Hardcode строки 4. Неверный язык перевода 5. Мусорные ключи 6. Профессиональный перевод + Просто и стандартно
  29. Не забывайте про региональные различия 64 1. DateFormatter • Локализованные

    даты 2. NumberFormatter • Валюта 3. MeasurementFormatter • Единицы измерения принятые в регионе
  30. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л
  31. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М
  32. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС
  33. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К
  34. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР
  35. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР 4. П П П П П П П П П П П П П П П П П П П П П П П П П П
  36. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР 4. П П П П П П П П П П П П П П П П П П П П П П П П П П • S S SSS SSS SSS S S SSS S SS SS SSS S S S SS S S SS S SS S SS S SS SS
  37. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР 4. П П П П П П П П П П П П П П П П П П П П П П П П П П • S S SSS SSS SSS S S SSS S SS SS SSS S S S SS S S SS S SS S SS S SS SS 5. Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р
  38. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР 4. П П П П П П П П П П П П П П П П П П П П П П П П П П • S S SSS SSS SSS S S SSS S SS SS SSS S S S SS S S SS S SS S SS S SS SS 5. Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р • Д ДДДД ДДДД Д Д Д Д Д Д ДД Д Д Д Д Д Д ДД ДД Д ДД Д Д ДД
  39. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР 4. П П П П П П П П П П П П П П П П П П П П П П П П П П • S S SSS SSS SSS S S SSS S SS SS SSS S S S SS S S SS S SS S SS S SS SS 5. Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р • Д ДДДД ДДДД Д Д Д Д Д Д ДД Д Д Д Д Д Д ДД ДД Д ДД Д Д ДД 6. I I I I I I I I I I
  40. Рекомендации 75 1. Л Л Л Л Л Л Л

    Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л Л 2. М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М М • С С СС С С СС СС С СС С СС С С ССС ССС 3. К К К К К К К К К К К К К К К К К К К К К • Р Р Р Р Р РР Р Р Р Р РР РР Р Р РР Р Р РРРРРРР РР Р Р Р Р Р Р Р Р РР Р РРРР 4. П П П П П П П П П П П П П П П П П П П П П П П П П П • S S SSS SSS SSS S S SSS S SS SS SSS S S S SS S S SS S SS S SS S SS SS 5. Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р Р • Д ДДДД ДДДД Д Д Д Д Д Д ДД Д Д Д Д Д Д ДД ДД Д ДД Д Д ДД 6. I I I I I I I I I I • Н ННН Н ННН Н НННН Н ННН Н Н Н Н Н Н Н ННН Н Н Н Н ННН НН НН Н ННН Н Н НННН ННН Н Н Н
  41. Рекомендации 75 1. Локализация хотяб с одним языком 2. Можно

    перенести в localization.ozon.ru • Сервис ничем не хуже внешних 3. Кодогенерация SwiftGen • Работает быстрее и гибче настраивается, чем R.swift 4. Проверяйте строки Localinter • Swift-скрипт, покрытие ошибок больше, чем R.swift 5. Региональные различия • Даты, валюта и другие единицы измерения 6. Info.plist • Название приложения, кастомизируемые системные сообщения из 7. Тексты и картинки с backend
  42. Рекомендации 75 1. Локализация хотяб с одним языком 2. Можно

    перенести в localization.ozon.ru • Сервис ничем не хуже внешних 3. Кодогенерация SwiftGen • Работает быстрее и гибче настраивается, чем R.swift 4. Проверяйте строки Localinter • Swift-скрипт, покрытие ошибок больше, чем R.swift 5. Региональные различия • Даты, валюта и другие единицы измерения 6. Info.plist • Название приложения, кастомизируемые системные сообщения из 7. Тексты и картинки с backend