Как сделать локализацию

Добавил пользователь Алексей Ф.
Обновлено: 10.09.2024

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

Чем ближе Global Launch, тем острее стоит вопрос локализации. И в предпоследнюю неделю задача по локализации проскочит из бэклога в спринт. И знаете, из моего опыта — это поздно. Практика показала, что готовая локализация с альфы значительно упрощает работу с UI, текстами в игре, текстами в пушах и прочих неочевидных местах игры, таких как, например, хинты в туториале.

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

Бизнес ценность:

Влияет на Вовлечение в целом и во время широкого масштабирования (выхода на мир, высокой маркетинговой активности с разными таргетами траффика).

Влияет на долгосрочное удержание, при активной работе с внешними пушами.

Коротко, для тех, кто только пришел, и не понимает о чем речь. Локализацией мы называем функционал, который позволяет определить язык игрока, и сразу же все тексты (иногда даже арт и звук) на лету переключить на нужный язык. Языков много, и нужно эргономично с ними работать. Если на пальцах объяснить, как оно работает, то получится примерно следующее:

  1. считываем с девайса игрока локаль
  2. считываем из файлика (csv или google таблицы) нужный язык
  3. по ключам вставляем текст в игру

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

Вместе с Романом (SunGear Games) мы провели небольшие исследования, и собрали экспертизу по расширенному функционалу локализации. Теперь эта экспертиза доступна всем читателям.

Во первых, вам надо представить, на какие языки вы собираетесь переводить игру. Но знайте, после того как вы выйдете, все равно захотите еще пару языков добавить. Так что не парьтесь, если что-то не учтете в начале.

Топ языки латинской группы — Английский и Испанский. Нужно учесть, что французы и немцы, очень ревностно относятся к играм не на родном языке, и ценят локализацию, хоть и хорошо владеют английским. Отдельно стоит отметить, что азиатская локализация требует отдельного, культурного подхода. Арабская локализация не сложная, главное учтите шрифтовые особенности. Обязательно сделайте возможность писать справа налево. Ну и русский — он у нас есть по умолчанию.

Лайфхак

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

Определитесь с вашим тех.лидом в чем будете хранить тексты. На сегодня активно используются 2 варианта, примерно 50 на 50:

  1. csv файл — хранится на вашем cdn, легко обновляется и правится на компе специалиста
  2. google таблица — парсится клиентом, легко обновляется, можно регулировать доступ

Таблица содержит поля:

У таблиц должна быть версионность. Хорошая практика управлять версией таблиц с сервера — т.е. вы с админки указываете клиенту, с какой версией таблицы работать. Так вам не нужно будет переподавать билд, если вы внесли какие-то изменения.

А изменения — это частая вещь: будь то правки, или вы решили под День Независимости США изменить текст пушей для Английской версии.

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

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

Формат ключей может иметь любое значение. Но практика показывает, что хорошо указывать имя окошка, место и/или месседж. Например: shop.button.cancel

Роман Ильин дополнительно разделяет ключи на два типа:

Static и default. Обычные доступны по тех.имени. Для статик генерится код, и можно обращаться к ним, как к методу. Для временных ключей мы заводим один статик LL.not_localized(text). Очень просто потом в коде искать и заменять нелокализованные тексты. Проще, чем строку “Настройки”.

За советом, я обратился к моему другу и эксперту в работе с мобильными играми — Андрею Щербаню, который собрал опыт локализации 4х крупных компаний воедино:

В тексте могут использоваться теги форматирования фрагментов текста (bold, italic, цвет, выравнивание, размер). Как доп. параметры: возможность подгона размера шрифта (autosize) под размеры текстового поля, перенос слов, разрешены ли несколько линий (multiline).

Тексты зачастую содержать переменную информацию. Вам нужно иметь синтаксис на эти случаи:

Также не стоит забывать про множественные формы (монета, монеты, монет).

Совет: Старайтесь избегать параметров вида %n1%, и заменять на осмысленные текстовыми типа , так переводчику проще понять о чем речь и что означает параметр.

Не забывайте форматировать числа и даты, с учетом культурных особенностей (резделитель разрядов: точка, запятая ; значек валюты — до или после цифры).

Всегда использовать шрифты, в которых есть все требуемые глифы (начертания символов), актуально для Западной Европы и Азии.

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

  • Ограничение на кол-во символов (если 0 то нет ограничения) для конкретного ключа.
  • Возможность в тексте для пушей использовать эмодзи с поддержкой кодов разных сервисов (сейчас я шлю через devtodev).
  • Варианты форматирования под различные экраны/разрешения. Под разные разрешения обрыв строки может стоять в разных местах. Вы можете в тег
    вставить условие, при котором тег работает:
    и
    — и строка разорвется в другом месте.
  1. Обсудите с вашим инженером, хочет ли он хранить все тексты в одном файле, или ему для каждого языка нужен отдельный файл. Я встречал оба варианта.
  2. Сделайте тестовый билд, с чит-кнопокой смены локалей на лету. QA вам спасибо скажет!

Стоит обратить внимание на самый юзабельный тул — L2Localization (для юньки). Хорошие отзывы коллег, которые не пилили свой функционал. Если у вас есть отзывы — оставляйте их в комментариях, пригодится для потомков.

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

Средним по цене/качеству — обратится в агентства локализаций. Дабы ни кого не обидеть и не рекламировать, не буду давать ссылки.

Есть и эконом вариант. Заказать перевод на Fiverr.

Если я что-то не упомянул, напишите в комментариях, что еще вы используете для локализации своей игры.

Если вам нужно перевести видеоролик, есть как минимум четыре способа сделать это: локализация, переозвучка, дубляж, субтитры. Рассмотрим специфику, преимущества и недостатки каждого варианта.

Локализация видеоролик

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

Вот классический пример локализации видео: англоязычный ролик полностью переведён на русский и китайский.

Работа над локализацией видео в Alconost обычно ведётся так.

Затем мы переводим и заменяем все текстовые элементы в видеоряде, при необходимости — обновляем скриншоты или видеозахваты и синхронизируем видео с новой дикторской дорожкой.

После этого мы заново монтируем музыку и звуковые эффекты, делаем сведение — и локализация готова!

Для наилучшего результата при локализации видеоролика необходим его исходник.

Что такое исходник ролика и зачем он нужен

Исходник — это проект видеоролика, где хранятся сотни, если не тысячи, его компонентов: разложенная по слоям графика, логотипы, скриншоты, 3D-модели, анимированные эффекты, траектории движения всех объектов, дорожка диктора, музыкальное оформление и многое другое.

Содержимое одного видеоролика может храниться в нескольких проектах. Например, в одном проекте — только исходная графика, во втором — только элементы 3D, в третьем — элементы анимации, в четвёртом — музыка и звуковые эффекты. А смонтировано и сведено всё в пятом проекте. При локализации ролика понадобятся все пять проектов.

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

Зачем заменять элементы видеоряда при локализации

Замена текстовых элементов актуальна для всех типов роликов, но особенно — для видеоинфографики , где максимум смысловой нагрузки — как раз на диаграммах и текстовых расшифровках их значений.

Замена текста понадобится и в видеороликах-презентациях, если в них есть сцены, где функции или преимущества продуктов перечисляются списком.

Вот пример, где подписи, сопровождающие видеоряд, критически важны для понимания смысла.

При локализации видеоролика о приложении, сервисе или сайте важно учитывать, локализован ли сам продукт на язык будущего видео. Если да, то целесообразно переснять скриншоты или видеозахваты экрана, на которых демонстрируется использование продукта. Заодно вы ненавязчиво сообщите зрителям важный факт: продукт доступен на их родном языке!

Вот пример локализации ролика о сервисе с заменой скриншотов.

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

Вот пример локализации ролика об игре с заменой логотипа.

Зачем изменять длительность сцен при локализации

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

Синхронизацию можно делать двумя способами. Первый — подгонка озвучки под видеоряд. Чтобы добиться совпадения, ограничение на длительность звучания каждой реплики нужно учитывать ещё при переводе, а затем — и при записи диктора. Иногда результат получается хорошим, а иногда — не очень. Если переведённая озвучка короче оригинальной, при сведении в дикторской дорожке появятся неуместные паузы. А если перевод пришлось сократить, чтобы вписаться в тайминг, то часть смысла текста может быть утрачена.

Фактически, первый способ синхронизации скорее относится к переозвучке ролика, чем к полной локализации видео.

Второй способ синхронизации — подгонка видеоряда под озвучку. В этом случае нужно ускорять или замедлять сцены в видеоряде, что технически усложняет процесс локализации. Зато в результате получается гармоничный ролик, в котором аудиоряд идеально сбалансирован с видеорядом. Без неуместных пауз, без накладок и без ущерба смыслу.

Мы предпочитаем второй способ.

Взгляните сами: при локализации видео с английского языка на немецкий ролик стал длиннее на 11 секунд, но благодаря корректировке длительности сцен диктор отлично совпал с анимацией.

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

Переозвучка или дубляж видеоролика

Переозвучка или дубляж — это упрощённые варианты локализации ролика, предполагающие внесение изменений только в аудиоряд. Эти варианты можно реализовать без исходника и при более скромных, в сравнении с локализацией, затратах времени и бюджета.

Переозвучка видео — это полная замена всего аудиоряда. При переозвучке ролика заново записывается профессиональный диктор — носитель целевого языка. Подбирается новый музыкальный трек, добавляются новые звуковые эффекты.

Дубляж видеоролика — более экономичный вариант переозвучки. При дубляже новая дикторская начитка накладывается поверх существующего ролика, а оригинальные голоса приглушаются. Музыка и звуковые эффекты при переозвучке сохраняются оригинальные.

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

Если ролик нужно перевести как можно быстрее и как можно дешевле, остаётся ещё один вариант — субтитры.

Создание субтитров

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

Вот что нужно, чтобы сделать субтитры.

То есть, превратить звучащий текст в печатный.

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

Готовые субтитры лучше всего не вшивать в видео. А сохранить как отдельный файл (например, srt или txt). Ведь интерфейс Youtube позволяет добавить субтитры с переводом к уже опубликованному видео: значит, вам не придётся заливать новый вариант ролика и заново набирать просмотры и лайки.

Хотя субтитры отвлекают внимание от действия (зрителю приходится читать, а не наслаждаться просмотром), механически закрывают часть экрана и с непривычки мешают погружению в атмосферу ролика — у них есть и преимущества. Субтитры быстро делаются, относительно недорого стоят, легко внедряются и их удобно переводить на другие иностранные языки.

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

Наталья Хайду

Наталья Хайду 29 марта 2021 Connected Translation Компания


Когда вы только начинаете создавать программное обеспечение для продукта, вы вряд ли задумываетесь о том, что однажды может понадобиться перевести его на другие языки. Но чем глобальнее ваш проект, тем вероятнее, что в какой-то момент придётся его локализовывать. В конце концов, по-английски в Интернете говорят всего 20-30% пользователей — остальные желают получать контент на родном языке, при этом требования к качеству у них очень высокие. Они предпочитают версии сайтов и приложений на языке страны, где родились или живут.

Итак, что надо знать, чтобы начать локализовать своё программное обеспечение, или просто понять, что вам это нужно? Читайте, чтобы узнать!

Что такое локализация программного обеспечения?

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

Конечно, локализовать программное обеспечение прямо сейчас необязательно. Но подумайте о Facebook, который начинался как легкомысленное приложение для студентов из Гарварда, и со временем превратился в одну из крупнейших социальных сетей, локализованную более чем на 100 языков. Предвидел ли это Марк Цукерберг?

Что такое интернационализация?

Для интернационализации важно, чтобы:

  • Поддерживались международные символы.
  • Можно было извлекать весь отображаемый текст из строковых переменных.
  • Были согласованы форматы файлов, которые будут использоваться в строках.
  • Применялся централизованный подход к публикации контента.
  • Отсутствовал код, исполнение которого зависит от конкретных региональных настроек / языкового стандарта.

Полезно будет также обдумать следующее:

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

Соответственно, программист, который думает об интернационализации, напишет что-то вроде:

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

Нужна ли специальная команда локализаторов?

Очень может быть. Хоть вариант передать интернационализацию и локализацию существующим инженерам и кажется заманчивым, работы может оказаться намного больше, чем вы или они ожидали. Локализация программного обеспечения затрагивает широкий круг вопросов, от пользовательского интерфейса (UI) до службы технической поддержки, и все они должны решаться организованно и последовательно.

В идеале, в команде локализаторов должно быть минимум три человека:

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

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

Как мне перевести строки?

Вам и не нужно, для этого существуют специально обученные люди. Во-первых, есть бюро переводов; во-вторых, переводчики-фрилансеры. Есть также платформы, которые снимают груз организации с ваших плеч, чтобы не приходилось отправлять файлы туда и обратно бюро и переводчикам. Smartcat как раз одна из таких платформ. Если ещё не знакомы с ней, загляните по ссылке. Есть и другие варианты, они собраны в этой статье.

Гадаете, на какие языки переводить? Начать стоит с 5-10 языков, на которых говорит большинство людей в мире и сети — например, с китайского, японского, испанского, немецкого, французского, португальского, итальянского, русского, корейского и арабского. Хотя иногда в зависимости от вашего продукта и аудитории есть смысл исключить часть европейских языков и добавить больше азиатских, таких как хинди, малайский, вьетнамский, индонезийский или тайский. Это особенно полезно при локализации видеоигр и интерактивного программного обеспечения, которые популярны на Востоке.

Что точно поможет повысить качество локализованного контента, так это наличие редполитики для переводчиков, или style guide. В ней должно быть написано о том, что из себя представляет ваш продукт и бренд, кто ваша основная аудитория, какой будет тон, какие термины нужно переводить и транслитерировать, а какие оставлять как есть и так далее. Это потребует дополнительных вложений, зато убережёт вас от некоторых досадных ошибок в будущем.

Как выглядит процесс локализации программного обеспечения?

Вариантов множество, но основных подхода два: ручная и непрерывная локализация.

Выполняя работу вручную, менеджер локализационного проекта загружает строки из вашего программного обеспечения не сразу скопом, а время от времени.

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

Другой вариант — это непрерывная локализация, процесс, когда любые новые строки самостоятельно передаются на платформу для локализации, а после, переведённые, возвращаются обратно в репозиторий. Это экономит часы ручного труда и снижает риск человеческой ошибки. Недостатком является то, что для настраивания процесс локализации требуются опытные инженеры. В Smartcat в один из тарифных планов включена помощь локализационных инженеров.

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

Наталья Хайду

Управляет вниманием с помощью букв и влюбляет в продукт через тексты. В свободное время исследует самые красивые уголки планеты.


Этот пост – попытка систематизировать всю имеющуюся на данный момент у меня информацию, касающуюся локализации приложений.

Пока мы пишем программы “для себя”, то о локализации, интернационализации и пр. заморочках мы как-то и не задумываемся. А зачем? Врядли кому-то в здравом уме придет в голову мысль “А не перевести ли мне свою утилиту на иврит, чтобы потом с такой программой работать?” Совсем другое дело, когда программа “вырастает из коротких штанишек” и на неё появляется спрос в других странах. Тогда, если спрос достаточно большой, можно (и нужно) взяться за локализацию – найти подходящий инструмент, нанять переводчиков (или переводить самому) и работать, работать, работать. Решение типа “Сделаю INI-файлик” вполне может подойти для небольших программок, но никак не для серьезных проектов с развитым интерфейсом, большим количеством форм, русурсов и т.д. – в этом случае стоит подыскать подходящее готовое решение. Собственно, основные цели поиска решения для локализации, которые были мне поставлены – это найти решение, которое позволит:

  1. проводить локализацию руками не-программистов
  2. работать с собственными словарями для перевода
  3. поддержка XE2

ну и, как обычно, решение должно быть удобным в использовании, дешевым, по возможности, простым в освоении и т.д. и т.п. А так как я все равно решил пройтись в своем поиске по всем возможным вариантам (а точнее по максимально возможному количеству вариантов), то решил весь найденный материал систематизировать и оформить вот этим самым постом. Здесь Вы сможете узнать и о существующих компонентах Delphi и о библиотеках и о программах – в общем о всем, чего только душа пожелает. В общем, если Вы тоже задались целью отыскать во всем множестве предложений для локализации то, которое придется по душе именно Вам, то читайте далее :)

Содержание

TSILang components suite


Что говорят о своем продукте разработчики:

TsiLang ® Components Suite позволяет добавлять поддержку для неограниченного количества языков, а также, создавать полностью локализованные версии продуктов, основанные на базовой версии проекта. Автоматически находятся и заносятся в список для перевода все необходимые элементы интерфейса пользователя, предоставляются удобные способы сохранения и управления переводами, и конечно, переключение языка интерфейса осуществляется “налету” как во время работы приложения, так и в режиме дизайнера, что позволяет тестировать интерфейс даже без компиляции и запуска приложения.

Мой тест.

Для тестирования TsiLang я скачал и установил последнюю версию компонентов (6.5.4.7) и создал простенькое приложение на котором разместил Button, Label, OpenDialog, добавил ресурсные строки и константы. Специально на OnClick кнопки был создан такой “кривой” обработчик:

Локализация с TsiLang проводится следующим образом:

1. Запускаем TsiLang expert из меню Delphi: Tools ->TsiExpert


Здесь отображаются все формы проекта, а также компоненты TsiLang, расположенные на этих формах. Теперь выбираем в меню File->Languages и редактируем список языков для нашего приложения. По умолчанию все языки имею названия типа Language1, Language2 и т.д. я переименовал их так:


После того как была нажата кнопка “Ok” на главной (и единственной) форме приложения появился компонент TsiLang:

Теперь находим в эксперте кнопку “Save Project” и сохраняем наш проект. В TsiLang используется два типа файлов проекта:

  1. *.sib – бинарные файл с переводами. Этот тип файла разработчики рекомендуют использовать, т.к. загрузка таких файлов происходит значительно быстрее, чем при использовании второго типа файлов
  2. *.sil – текстовые файлы. Преимуществом этого типа файлов является то, что мы можем передать этот файл с утилитой “SIL Editor” другому человеку для перевода.

Теперь, находясь в эксперте дважды щелкаем мышкой по названию формы в списке – откроется окно редактора перевода:


В левой части окна (в дереве) редактора содержатся группы переводимых свойств компонентов и строк и, соответственно, справа – таблица для перевода. TsiLang может локализовать не только свойства компонентов типа Caption, Hint, Text и т.д., но также и строки из диалогов, например, на рисунке ниже представлены все строки для перевода из различных диалоговых окон, которые могут использоваться в приложении:


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

В принципе, назначение этого информационного окошка понятно – можно контролировать ситуации, когда переводимый текст не будет вписываться в границы компонента. Хотя, как по мне, так было бы удобно добавить в это окошко ещё и ширину самого компонента – что б было с чем сравнивать ширины строк.

После того, как все строки переведены снова сохраняем наш проект. Теперь sil-файл должен содержать примерно такой текст:

  • File -> Source -> WithForm– чтобы выбрать строки из секции implementation модуля,
  • File -> Source -> WithForm –чтобы выбрать все строковые константы и ресурсные строки

В итоге откроется окно с результатами поиска в котором Вы можете добавить строку в список исключений или заменить её на вызов функции TsiLang:

Открываем pas-файл и видим следующую странную картину:

После того как строки были помещены в перевод можно снова открыть редактор перевода и провести перевод группы Strings (благо в редактор строки попадают без искажений):


После того, как все строки переведены, а sil-файл сохранен, можно организовать переключение языков в своей программе. В TsiLang каждый язык имеет свой идентификатор типа integer. Например, в моем случае идентификаторы были такими:

Теперь, чтобы интерфейс моей программки переключился на английский язык достаточно где-нибудь вставить вот такой код:

Это приведет к тому, что TsiLang подгрузит из sil-файла строки на необходимом языке.
Что касается работы со словарем переводов, то TsiLang может передавать в словарь (предварительно созданные) только уже переведенные строки. Для этого можно воспользоваться все тем же редактором переводов – жмем в редакторе кнопку “Add All”, которая предназначена для передачи в словарь всех переводов и получаем вот такое окошко для выбора необходимых опций передачи:


выбираем здесь файл словаря, жмем “Ok” и получаем все переведенные строки в свой словарик, который, кстати, выглядит вот так:


Впоследствии этот словарь можно будет использовать для автоматических переводов строк в своих программах. Ну и, как я уже говорил выше, для работы с SIL-файлами имеется отдельная утилита под названием SIL Editor, которая предназначена для переводчиков. Для чистоты эксперимента я скопировал папку с SIL Editor на флэшку и запустил программу с виртуалки “Windows XP Mode”:


SIL Editor позволяет производить переводу по словарям и вручную, а также, если необходимо, добавлять новые языки в перевод.

Другие возможности TsiLang:

  1. Импорт словарей из doc-, html-, xls-, csv-, po-файлов
  2. Импорт ресурсных строк из исполняемых файлов
  3. Наличие собственных компонентов – диалоги открытия файлов, метки, списки и т.д.
  4. Ведение статистики по переводам

Довольно большой получился обзор, но инструмент того стоит. Подведем небольшой итог:

Достоинства:

  1. Просто подключается к проекту – бросили компонент на форму, вызвали 1 метод и интерфейс переведен
  2. Удобный редактор перевода – все строки разложены, что называется “по полочкам”, можно быстро ориентироваться по дереву в поиске нужных строк для перевода
  3. Поддерживает как бинарные так и текстовые файлы с переводами. Создали sil-файл, отдали переводчику, потом пересохранили в sib и все готово – и программа быстрее будет работать и никто больше в перевод не залезет.
  4. Наличие инструментов для переводчиков (SIL Editor, словари)

Недостатки:

  1. “Корежит” русские строки в pas-файле. Пусть они и заключаются в комментарии, но, тем не менее, факт на лицо.
  2. В процессе работы обнаружились непонятные ошибки при работе со словарями. Например, при переносе переведенных строк в словарь через раз появлялась ошибка выхода за границы диапазона.
  3. Небольшие проблемы с окнами TsiLang. Они, конечно, жить не мешают, но тем не менее, не хорошо, когда ты вызываешь словарь, а он какого-то лешего сворачивается в панели управления.

В принципе, указанные выше недостатки (за исключением второго) не такие уж и критичные.

DKLang Localization Package

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

Во-первых, настораживает дата последнего релиза – 2008 год – не факт, что компоненты заработают в XE2 без проблем.

Во-вторых пакет требует дополнительной установки компонентов Tnt Unicode Controls 2.3.0, которые в 2012 году уже как бы и лишние – юникод и так поддерживается.

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

UPDATE : Отзыв про DKLang Localization Package. Кратко и понятно.

UPDATE 2 : работоспособность DKLang в XE2

EMS Advanced Localizer

Что говорят о своем продукте разработчики:

Advanced Localizer™ – это незаменимый пакет компонентов для Borland® Delphi®, позволяющий добавлять языковую поддержку Вашим Delphi® приложениям. Широкие возможности пакета Advanced Localizer позволяют быстро и просто локализовать свойства компонентов каждой формы, создавать языковые файлы с текущими значениями свойств компонентов, управлять файлами локализаций, а также назначать компоненты и их свойства, подлежащие локализации. Язык приложений, использующих Advanced Localizer, может быть переключен на другой непосредственно во время работы без последующего перезапуска приложения. Advanced Localizer также предусматривает возможность написания приложений-потомков, использующих языковые файлы, заданные пользователем.

Так как “незаменимых” у нас нет, то я провел свой небольшой тест этих компонентов все на том же маленьком приложении в 1 форму.
Мой тест
Скачал и установил пакет компонентов в Delphi XE2, открыл проект. В палитре компонентов Delphi появилась новая вкладка – EMS Advanced Localizer. С этой вкладки бросам на форму компоненты:

У TQFormLocalizer в свойстве Source указываем TQLanguageSource и приступаем к работе.

Первым делом создаем файлы для локализованных строк – делаем два пустых файлика с расширениями *.lng (расширение по умолчанию для EMS Localizer) и называем их просто – rus и eng.

Теперь дважды щелкаем мышкой по компоненту TQLanguageSource для вызова менеджера языковых файлов:

Жмем единственную активную кнопку и добавляем файлы:

Теперь, по идее разработчиков, в списке менеджера должна появиться новая запись…однако её нет. Вот значения, которые содержатся в свойстве Languages компонента:


Однако список визуального редактора девственно чист. Ну да Бог с ним со списком – пробуем перевести наше приложение. Дважды щелкаем по второму компоненту (TQFormLocalizer) для вызова редактора перевода:

В редакторе мы можем помимо перевода строк также добавить новый языковой файл, отредактировать имеющийся язык или выбрать язык, используемый по умолчанию. Как можно видеть на рисунке – в редактор попадают только строки, содержащиеся в свойствах компонентов, а ресурсные строки и константы остаются незамеченными, что можно записать в недостатки этих компонентов.

После перевода всех строк можно добавить в программу опцию для переключения языка интерфейса. Делается это примерно также как и в TsiLang – указанием индекса активного языка:

При этом, если используется язык по-умолчанию (отмечен как “Original”), то у него индекс равен -1, а у остальных – начинается с нуля и наращивается по порядку в списке Languages.

Другие возможности EMS Advanced Localizer:

  1. Компоненты просты в использовании – на то, чтобы разобраться что и как работает ушло от силы минут 5.
  2. Достаточно дешевые
  3. Есть возможность хранить переводы в БД
  1. Нет поддержки словарей и, соответственно, авто-переводов
  2. Проблемы в простеньком менеджере языков
  3. Не поддерживается перевод констант и ресурсных строк
  4. Нет инструментов для сторонних переводчиков

В целом мое мнение по поводу EMS Advanced Localizer – достаточно удобные компоненты для работы с небольшими проектами, но для более менее крупных проектов где требуется поддержка многих языков, работа нескольких человек над переводом и т.д. этот набор компонентов, к сожалению, слабоват.

Korzh Localizer


Что говорят о своем продукте разработчики:

Один EXE-файл может поддерживать несколько языков. Дополнительные языки могут быть добавлены без перекомпиляции. Нет необходимости создавать множество exe-файлов
Строковые данные могут храниться как в стандартных ресурсных DLL, так и в специальных языковых файлах
При локализации код программы либо изменяется очень мало (буквально пару строк), либо не изменяется вообще. Localizer не меняет проект приложения, т.к. не используются какие-либо дополнительные компоненты
Локализованный проект можно запускать на компиляцию без установленного Localizer
Localizer переводит как ресурсы из VCL, так и любые другие ресурсы
Поддерживается хранение переводов в стандартном Хранилище переводов (Translation Repository) и их повторное использование в будущем
Поддерживает все сторонние компоненты и пакеты (например, DevExpress, TurboPower, ElPack, RX и т.д.)
Процесс перевода можно осуществлять с помощью встроенной утилиты Language Manager, свободно доступной для закачки переводчиками
Простой переход из Borland ITE (Integrated Translation Environment — интегрированная среда перевода)

Мой тест

Скачал триал, отличие которого от полной версии заключается в том, что Localizer переводит только первые 30 строк из каждой формы/файла. Установил После чего в главном меню Delphi XE2 появился новый пункт:


Выбрал в меню “Start project localization” в итоге меня попросили выбрать основной язык для проекта и указать папку для хранения языкового файла:


После нажатия “Localize mu project!” была запущена перекомпиляция проекта, а в dpr-файле проекта добавились необходимые модули и вызов методов Korzh Localizer’а:

Читайте также: