Руководство: Как подготовить ваше приложение к i18n и l10n

Цель Localazy – сделать вашу жизнь проще и без хлопот, автоматизировав процесс локализации перевода вашего приложения.

🤔 Зачем интернационализировать мое программное обеспечение?

Диверсификация и расширение вашего программного обеспечения на международном уровне – это, несомненно, то, что добавит большую ценность вашему продукту/услуге и принесет больше безопасности вашему бизнесу.

⚔️ Международная конкуренция: Вместо того, чтобы ограничивать себя внутренним рынком, вы будете конкурировать с рынками со всего мира 🌍.

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

🔀 Дифференциация: Дифференциация может быть вариантом, который принесет большое преимущество; поскольку международный рынок может потребовать специфических изменений в продуктах/услугах, чтобы лучше адаптироваться к ним.

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

Для разработки многоязычного программного обеспечения нам необходимо пройти три этапа: i18n, l10n и, наконец, t9n.

Интернационализация известна в мире разработки и технологий как i18n. Это процесс создания или преобразования продуктов или услуг таким образом, чтобы их можно было легко адаптировать к конкретным местным языкам и культурам. Локализация, известная как l10n, – это процесс адаптации интернационализированного продукта к определенному региону или языку. Наконец, t9n означает перевод.

Если проект еще не спланирован

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

Обязательно выберите одну из них и тщательно следуйте инструкциям по ее настройке на ранних этапах разработки. Одной из самых популярных является библиотека i18next, поскольку она проста в использовании и поддерживает такие фреймворки, как React, Angular, Vue, Vanilla JavaScript и NodeJS.

Если вы хотите узнать больше о процессе i18n, как использовать библиотеку i18next или как она работает на пустом проекте, ознакомьтесь с нашей статьей Локализация приложений JavaScript с помощью i18next и Localazy.

Если проект находится в производстве

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

Тем не менее, если мы используем библиотеки типа React или фреймворки типа Angular и ASP.NET Core, наша ситуация будет лучше. Рекомендуется постепенно выпускать приложение или региональные обновления, чтобы в случае возникновения проблем пострадал только определенный процент пользователей.

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

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

Юридические аспекты

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

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

Использование данных также важно иметь в виду, поскольку в разных странах действуют разные законы в отношении хранения, обмена, безопасности и т.д. данных. Разница между этими законами и правилами заключается в необходимости получения разрешения на данные пользователя, в том, какие данные можно получить и как их использовать, включая личную информацию (например, имя, адрес электронной почты, номер социального страхования и т.д.) и любые действия или поведение пользователя. Это особенно актуально для стран ЕС, где действует GDPR (General Data Protection Regulation).

Разделение контента

Самое важное, что вам нужно сделать в отношении интернационализации проекта, – это отделить контент от кода.

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

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

Контент – это:

  • Медиа (изображение, видео, звук) 📷
  • Текст 📜
  • Формат даты ⌛
  • Числа 🔢
  • Валюта 💰

Внешнее представление строк

Текст, без сомнения, является самым распространенным способом общения с пользователем приложения, поэтому мы рассмотрим важность строк. Во-первых, не весь текст должен быть внешним, а только тот, который увидит пользователь. Есть много текста, который всегда будет оставаться внутри самого приложения в целях программирования, поэтому его не нужно извлекать или выводить наружу. Текст также должен использовать кодировку UTF-8, поскольку она способна кодировать все 1 112 064 допустимых кодовых точек символов в Unicode, что дает вам возможность поддерживать языки с различными алфавитами.

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

Учитывая все вышесказанное, вам нужно написать все строки, которые имеют отношение к переводу, и каждая из них будет иметь ключ, назначенный для идентификации местоположения. Все они будут записаны во внешнем источнике, например, в текстовом файле. Или в случае с ранее упомянутой библиотекой i18next будет использоваться JSON-файл.

Если ваш проект организован с помощью фреймворка, этот файл должен быть создан внутри папки locale, lang или подобной папки, и назван по языку, который вы будете использовать по умолчанию, если исходный язык вашего проекта – английский, то имя файла будет en.json.

Извлечение строк

Если вы начали проект без извлечения строк, есть несколько вариантов, которые помогут справиться с этой проблемой, один из них – GNU gettext.

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

Он доступен для различных языков (Python, C, PHP, Ruby, JavaScript и многих других) и большинство фреймворков уже имеют его поддержку. Вы можете ознакомиться с ним здесь.

Если вы выберете этот путь, вам повезет, потому что Localazy поддерживает gettext.

Альтернативами gettext являются:

  • OASIS XLIFF
  • GNU gettext po/mo файлы
  • POSIX каталоги
  • Qt ts/tm файлы
  • свойства Java,
  • ресурсы Windows.

Перевод строк

Используйте Localazy или найдите переводчиков

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

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

Localazy – это платформа управления локализацией, ориентированная на разработчиков, которая поддерживает широкий спектр фреймворков и еще более широкий спектр форматов через CLI.

Лучшие особенности Localazy

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

Нанять виртуального переводчика для непрерывного перевода

Управление внешними строками

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

Пример en.json:


{

  "hello_world": "Hello World!",

  "like_ice_cream": "I like ice cream";,

  "bread": "Bread"

}
Вход в полноэкранный режим Выйти из полноэкранного режима

Файл другого языка, например, польского в pl.json:


{

  "hello_world": "Witaj świecie!",

  "like_ice_cream": "Lubię lody";,

  "bread": "Chleb"

}
Войдите в полноэкранный режим Выход из полноэкранного режима

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

🏆 Проблемы i18n и заключительные соображения

Множественное число и интерполяция строк

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

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

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


<?php

return [

  'voted'=>"The city most voted by the users is :city",

  'name'=>"My name is :name",

  'carStatus'=>"There is :carNum car blocking the road | There are :carNum cars blocking the road"

]

 ?>
Войти в полноэкранный режим Выйти из полноэкранного режима

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


<?php

return [

  'voted_city'=>"A cidade mais votada pelos utilizadores foi :city",

  'name'=>"O meu nome é :nome"

  'carStatus'=>"Há :carNum carro a bloquear a estrada | Há :carNum carros a bloquear a estrada"

]

 ?>
Вход в полноэкранный режим Выход из полноэкранного режима

Используя префикс :, мы можем назначить переменные: город и имя. С помощью символа | мы можем различать единственное и множественное число.

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

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

Вы можете посмотреть некоторые примеры множественного числа и интерполяции строк в нашей статье Как создать многоязычное PHP-приложение с помощью Localazy и Laravel.

Как привлечь больше участников к переводу вашего приложения?

✔️ Заключительные слова

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

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

Оцените статью
Procodings.ru
Добавить комментарий