Исходный пост

Предисловие

В современном мире спрос на мобильные приложения, которыми пользуются люди из разных стран и регионов, значительно увеличился. Для разработчиков важно сделать свои приложения доступными на нескольких языках. Локализация приложения может предложить много преимуществ:

  • Расширение аудитории: Локализация вашего приложения вы можете охватить пользователей, которые не могут говорить на языке вашего приложения по умолчанию. Это может помочь вам подключиться на новые рынки и увеличить вашу пользовательскую базу.

  • Улучшение пользовательского опыта: Пользователи с большей вероятностью будут использовать и наслаждаться приложением, которое доступно на их родном языке. Локализация вашего приложения может помочь вам обеспечить лучший пользовательский опыт, что может привести к лучшим обзорам, рейтингам и показателям удержания. Локализация вашего приложения может дать вам конкурентное преимущество в регионах, где ваши конкуренты, возможно, не локализовали свои приложения.

  • Увеличение доходов: Локализация вашего приложения может привести к увеличению доходов, поскольку пользователи с большей вероятностью будут делать покупки в приложении или оплатить подписки, если приложение доступно на их родном языке.

Но есть также несколько проблем и потенциальных проблем, с которыми могут столкнуться разработчики. Локализация может занять много времени и ресурсов, особенно, для приложений с большим количеством контента и длинным списком поддерживаемых языков.

Но мы бы не были разработчиками, если бы пытались всегда все автоматизировать. Автоматизированная локализация может быстро и эффективно переводить контент, снизить затраты, связанные с ручным переводом, например, наем профессиональных переводчиков или выделение внутренних ресурсов для этой задачи. Это особенно эффективно, если приложение создается одним разработчиком.

Подготовьте свой проект

Я не буду вдаваться в подробности о том, как локализация строк работает в xcode проектах, по этому вопросу уже есть много других учебных пособий. Я только выделю несколько ключевых шагов:

  1. Создайте файл Localizable.strings и заполните его строками, которые вы хотите локализовать.

    /* optional description */
    "[key]" = "[string]";
    /* Example: */
    "welcome text" = "Welcome to XCodelocalize";
  2. Перейдите в настройки файла проекта, добавьте желаемые языки. Apple рекомендует EFIGS (английский французский итальянский немецкий испанский) + китайский язык в качестве основы.

  3. Создайте файлы Localizable.strings для всех выбранных языков. Скорее всего, вы так же захотите локализовать файлы plist, storyboard и intentdefinition.

Установка XCodeLocalize

Неожиданно, инструмент для iOS разработки оказался написанным на питоне, так что убедитесь, что у вас есть python 3.9+

После этого вы можете установить xcodelocalize с помощью pip:

pip3 install xcodelocalize

Также доступна установка из .whl файла на странице релизов или с помощью poetry из исходников.

Запустите автоматическую локализацию

cd к корневой папке проекта и запустите

xcodelocalize [OPTIONS]

или

python3 -m xcodelocalize [OPTIONS]

Параметры

  • --base-language: код языка, с которого будут переведены все строки. [по умолчанию: 'en']

  • --override / --no-override: булево значение; указывает, будут ли переведены строки, которые уже существуют в файле. Перевести, если override; пропустить, если no-override[по умолчанию: no-override]

  • --format-base / --no-format-base: сортировать строки base файла по ключу. [по умолчанию: no-format-base]

  • --file: Имена .strings файлов для перевода. Можно указать несколько файлов. Если не указано, все файлы будут переведены. [по умолчанию: None]
    Пример:

    xcodelocalize --file InfoPlist
    xcodelocalize --file InfoPlist --file MainStoryboard --file Localizable
  • --key: Ключи, которые должны быть переведены. Можно указать несколько ключей. Если не указано, все будут переведены. [по умолчанию: None]

  • --language: Код языков, которые будут переведены. Допускается множество значений. Если не указано, все файлы будут переведены. [по умолчанию: None]

  • --log-level: Один из [progress|errors|group|string]. [по умолчанию: group]

  • --help: Информация о параметрах

Автоматизация

Вы можете перейти в Target -> Build Phases -> New Run Script Phase в вашем проекте Xcode и ввести xcodelocalize. Это будет переводить необходимые строки во время сборки и ваши файлы всегда будут локализованы.

Заключение

Теперь вы знаете, как быстро локализовать свои iOS приложения. Поставьте звезду репозиторию, если вам понравилось.

Комментарии (9)


  1. mironoffsky
    00.00.0000 00:00
    +1

    Разделяю вашу боль, но вроде в начале статьи говорится о локализации в целом.
    Да и не надо быть таким категоричным к машинному переводу, он хоть и не может с достаточной точностью перевести те или иные обороты речи, но позволяет хотя-бы из контекста понять, что к чему.
    Что касается предмета статьи, то лично я бы рассматривал этот инструмент как возможность создать "предварительный" перевод, к которому можно привлекать переводчиков и команду тестирования, "вычитывать" его. Что-то мне подсказывает, что большая часть односложных конструкций будет переведена верно, и ресурсы переводчика будут брошены на действительно важные моменты.
    Ну и даже автоматизированный перевод поможет получить прирост аудитории на языках, отличных от стандартного языка приложения, они тогда помогут поправить перевод на свой язык (в коммерческой компании за плюшки, в опенсорсе за идею).


  1. plFlok
    00.00.0000 00:00
    +2

    Улучшение пользовательского опыта: Пользователи с большей вероятностью будут использовать и наслаждаться приложением, которое доступно на их родном языке.

    Ух, спорное утверждение, что автоматический перевод улудшает UX.

    У меня наоборот появляется дискомфорт, когда я вижу в интерфейсе слово "продолджать" вместо "продолжить" (от continue), "следующий" вместо "далее" (от next). Автоматика совсем ничего не знает об устоявшемся в интерфейсе применении слов.

    Или как в одном приоложении todo-list, который ещё и денег за "про-версию" требовал, было написано: "В день ещё нет задач. Добавить новый?". Прямо чувствуется стиль переводов али-экспресса.

    Захотелось снести и поставить низкую оценку в сторе за наглость.

    Помогло ли это авторам увеличить доходы? Сомнительно.


    1. mironoffsky
      00.00.0000 00:00
      +1

      Разделяю вашу боль, но вроде в начале статьи говорится о локализации в целом.
      Да и не надо быть таким категоричным к машинному переводу, он хоть и не может с достаточной точностью перевести те или иные обороты речи, но позволяет хотя-бы из контекста понять, что к чему.
      Что касается предмета статьи, то лично я бы рассматривал этот инструмент как возможность создать "предварительный" перевод, к которому можно привлекать переводчиков и команду тестирования, "вычитывать" его. Что-то мне подсказывает, что большая часть односложных конструкций будет переведена верно, и ресурсы переводчика будут брошены на действительно важные моменты.
      Ну и даже автоматизированный перевод поможет получить прирост аудитории на языках, отличных от стандартного языка приложения, они тогда помогут поправить перевод на свой язык (в коммерческой компании за плюшки, в опенсорсе за идею).


    1. lymes
      00.00.0000 00:00
      +1

      Apple рекомендует EFIGS (английский французский итальянский немецкий испанский) + китайский язык в качестве основы.

      Не скажу о качестве автоматического перевода на китайский и немецкий, не силён, но переводы на французский, испанский и итальянский получаются очень даже неплохо.


  1. varton86
    00.00.0000 00:00

    Локализовать приложение не проблема, проблема перевести портянки текста ключей Localizable.strings на нужные языки. И уж 20 языков в ручном режиме copy/paste это точно не 5 минут)


    1. MarkParker5 Автор
      00.00.0000 00:00

      В статье под локализацией как раз подразумевается перевод Localizable.strings на нужные языки


      1. varton86
        00.00.0000 00:00

        ЗдОрово, из статьи это не оч понятно, сорри) Надо будет опробовать инструмент.

        И у вас какое-то сложное расширение в readme, так не проще?

        extension String {

            var localized: String {

                return Bundle.main.localizedString(forKey: self, value: nil, table: nil)

            }

        }


        1. MarkParker5 Автор
          00.00.0000 00:00
          +1

          Можно еще проще, если не передавать параметры с дефолтным значением

          extension String {
              var localized: String {
                  NSLocalizedString(self, comment: "")
              }
          }
          


  1. debug45
    00.00.0000 00:00

    Это ужасный подход. Есть такое приложение для macOS — Wondershare UniConverter, отличный видеоконвертер. И оно переведено на русский язык машиной. Переведено так, что пользоваться им совершенно невозможно. Просто вообще ничего не понятно в интерфейсах. Лучше бы подобной «локализации» не было вовсе.

    К счастью, система позволяет принудительно заставить его работать на английском, но мало кто вообще знает о такой возможности.


    1. varton86
      00.00.0000 00:00
      +1

      Ну не всё так страшно) Я в своих приложениях прошу присылать исправления, если что-то не так переведено и присылают. Даже новые языки появляются (венгерский, голландский).