Изучение решений i18n для перевода вашего веб-сайта на Angular

    В сегодняшнем взаимосвязанном мире предоставление вашего веб-сайта на нескольких языках может значительно расширить ваш охват и улучшить пользовательский опыт. Для разработчиков, работающих с Angular, внедрение интернационализации (i18n) имеет решающее значение для эффективного управления переводами, сохраняя структуру приложения, SEO и производительность. В этой статье мы рассмотрим различные подходы к i18n — от встроенных решений Angular до популярных сторонних библиотек — чтобы помочь вам определить, что лучше всего подходит для вашего проекта.


    i18n illustration

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

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

    Узнайте больше о основах i18n, прочитав нашу статью: Что такое интернационализация (i18n)? Определение и проблемы.


    Проблема перевода для приложений на Angular

    Перевод приложения на Angular вводит несколько проблем:

    • Модульная структура: Модульный подход Angular (с компонентами, модулями и сервисами) означает, что строки перевода могут быть разбросаны по вашему кодовой базе, что требует их централизации и эффективного управления.
    • Динамический контент: Обработка контента в реальном времени (например, данные из REST API, контент, создаваемый пользователем) требует тщательного рассмотрения, чтобы гарантировать, что новые строки также переводятся.
    • SEO соображения: Если вы используете Angular Universal для серверного рендеринга, вам нужно будет настроить локализованные URL, мета-теги и карты сайта, чтобы сделать ваши многоязычные страницы удобными для поисковых систем.
    • Маршрутизация и состояние: Обеспечение правильного языка при навигации между маршрутами включает управление состоянием и, возможно, пользовательские охранники маршрутов или перехватчики.
    • Масштабируемость и обслуживание: Файлы переводов могут быстро увеличиваться в объеме, и поддержание их в организации, версиях и синхронизации с развитием вашего приложения может быть постоянной задачей.

    Ведущие решения i18n для Angular

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

    1. Встроенное i18n Angular

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

    Ключевые особенности

    • Нативная интеграция: Дополнительная библиотека не требуется; оно работает сразу из коробки с проектами Angular.
    • Переводы на этапе компиляции: CLI Angular извлекает текст для переводов, и вы создаете отдельные пакеты для каждого языка. Этот подход может привести к более быстрому времени выполнения, потому что переводы включены в компиляцию.
    • Легкая обработка плюрализации и гендера: Встроенные функции для сложной плюрализации и интерполяции сообщений.
    • AOT & производственные сборки: Полностью совместимо с компанией Angular AOT, обеспечивая оптимизированные производственные пакеты.

    Рассмотрения

    • Несколько сборок: Каждый язык требует своей сборки, что может привести к более сложным сценариям развертывания.
    • Динамический контент: Обработка контента в реальном времени или контента, созданного пользователем, может потребовать дополнительной логики, так как встроенное решение Angular сильно ориентировано на переводы на этапе компиляции.
    • Ограниченная гибкость времени выполнения: Смена языков на лету (без перезагрузки приложения) может быть сложной, так как переводы включены на этапе сборки.

    2. ngx-translate

    Сайт: https://github.com/ngx-translate/core

    Обзор
    ngx-translate — одна из самых известных сторонних библиотек i18n в экосистеме Angular. Она позволяет переводить это в режиме выполнения, позволяя загружать языковые файлы по мере необходимости и переключать локали динамически без пересборки всего вашего приложения.

    Ключевые особенности

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

    Рассмотрения

    • Состояние и сложность: Управление большим количеством файлов перевода может стать сложным в больших приложениях.
    • SEO и SSR: Если вам нужен серверный рендеринг с Angular Universal, ngx-translate требует дополнительной настройки для обеспечения корректных переводов, которые будут переданы краулерам и браузерам при первой загрузке.
    • Производительность: Хотя оно гибко во время выполнения, обработка большого количества переводов на больших страницах может иметь последствия для производительности, поэтому рекомендуется использовать стратегии кэширования.

    3. Transloco

    Сайт: https://ngneat.github.io/transloco/

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

    Ключевые особенности

    • Интеграция управления состоянием: Совместимость с библиотеками управления состоянием, такими как NgRx и Akita.
    • Ленивая загрузка: Разделите переводы на отдельные части и загружайте их только по мере необходимости.
    • Богатая экосистема плагинов: Обработайте всё от интеграции с SSR до автоматического извлечения сообщений.
    • Время выполнения или время сборки: Предлагает гибкость для различных рабочих процессов перевода, будь то вы предпочитаете переключение времени выполнения или предварительно собранную локализацию.

    Рассмотрения

    • Кривая обучения: Хотя документация хорошая, подход, основанный на плагинах, может потребовать дополнительных шагов для расширенных случаев использования (например, SSR, маршруты с несколькими языками).
    • Размер сообщества: Transloco имеет активное сообщество, но всё ещё растет по сравнению с встроенным решением Angular или ngx-translate.
    • Структура папок: Сохранение переводов в организации может быть сложной задачей для очень больших приложений. Хорошая структура папок и соглашения об именах крайне важны.

    Заключительные мысли

    При выборе подхода к i18n для вашего Angular приложения:

    • Оцените требования проекта: Учитывайте такие факторы, как динамическое переключение языков, скорость разработки и потребности в интеграции сторонних библиотек.
    • Проверьте SSR и SEO: Если вы используете Angular Universal для серверного рендеринга, убедитесь, что ваше выбранное решение легко интегрируется с локализованными метаданными и обработкой маршрутов.
    • Производительность и стратегия сборки: Оцените, нужны ли вам несколько выходов сборки (на язык) или вы предпочитаете один пакет с переводами времени выполнения.
    • Поддерживаемость и масштабирование: Для больших приложений убедитесь, что ваша библиотека поддерживает чистую файловую структуру, типизированные ключи (если это необходимо) и простой процесс обновления.
    • Опыт разработчика: Автозаполнение TypeScript, экосистема плагинов и инструменты CLI могут значительно снизить трение при обновлении или добавлении новых переводов.

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

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

    Ссылка на блог GitHub