Многоязычная маршрутизация (i18n)
Функции интернационализации Astro позволяют вам адаптировать ваш проект для международной аудитории. Этот API маршрутизации помогает вам создавать, использовать и проверять URL-адреса, которые производит ваш многоязычный сайт.
Маршрутизация i18n Astro позволяет вам представлять ваше многоязычное содержимое с поддержкой настройки языка по умолчанию, вычисления относительных URL-адресов страниц и принятия предпочтительных языков, предоставляемых браузером вашего посетителя. Вы также можете указать резервные языки для каждого языка отдельно, чтобы ваши посетители всегда могли быть направлены к существующему контенту на вашем сайте.
Логика маршрутизации
Заголовок раздела Логика маршрутизацииAstro использует промежуточное программное обеспечение для реализации своей логики маршрутизации. Эта функция промежуточного ПО размещается в первой позиции, где она ожидает каждого Response
, поступающего от любого дополнительного промежуточного программного обеспечения, и каждого маршрута страницы, прежде чем, наконец, выполнить свою собственную логику.
Это означает, что сначала выполняются операции (например, перенаправления) из вашего собственного промежуточного программного обеспечения и логики вашей страницы, визуализируются ваши маршруты, а затем промежуточное программное обеспечение i18n выполняет свои собственные действия, такие как проверка соответствия локализованного URL-адреса допустимому маршруту.
Вы также можете добавить свою собственную логику i18n в дополнение или вместо промежуточного программного обеспечения Astro i18n, что даст вам ещё больший контроль над вашими маршрутами, сохраняя при этом доступ к вспомогательным функциям astro: i18n
.
Настройка i18n-маршрутизации
Заголовок раздела Настройка i18n-маршрутизацииИ язык по умолчанию (defaultLocale
), и список всех поддерживаемых языков (locales
) должны быть указаны в объекте конфигурации i18n
. Кроме того, можно настроить более конкретную маршрутизацию и резервное поведение в соответствии с желаемыми URL-адресами.
Создание локализованных папок
Заголовок раздела Создание локализованных папокОрганизуйте папки с контентом, локализованным по языку. Создайте отдельные папки /[locale]/
в любом месте src/pages/
, и маршрутизация на основе файлов Astro создаст ваши страницы по соответствующим URL-путям.
Имена ваших папок должны точно соответствовать элементам в locales
. Включите локализованную папку для вашей defaultLocale
, только если вы настроили prefixDefaultLocale: true
для отображения локализованного URL-пути для вашего языка по умолчанию (например, /en/about/
).
Directorysrc
Directorypages
- about.astro
- index.astro
Directoryru
- about.astro
- index.astro
Directorypt-br
- about.astro
- index.astro
Локализованные папки не обязательно должны находиться в корне директории /pages/
.
Создание ссылок
Заголовок раздела Создание ссылокНастроив маршрутизацию i18n, вы теперь можете вычислять ссылки на страницы вашего сайта, используя вспомогательные функции, такие как getRelativeLocaleURL()
, доступные из astro: i18n
. Эти сгенерированные ссылки всегда будут обеспечивать правильный локализованный маршрут и могут помочь вам правильно использовать или проверять URL-адреса на вашем сайте.
Вы также можете написать ссылки вручную.
routing
Заголовок раздела routingВстроенная файловая маршрутизация Astro автоматически создает для вас URL-маршруты на основе вашей файловой структуры в src/pages/
.
Когда вы настраиваете i18n-маршрутизацию, информация об этой структуре файлов (и соответствующие сгенерированные пути URL) доступна вспомогательным функциям i18n, чтобы они могли генерировать, использовать и проверять маршруты в вашем проекте. Многие из этих опций можно использовать вместе для ещё большей настройки и гибкости для каждого языка.
Вы даже можете реализовать собственную логику маршрутизации вручную для ещё большего контроля.
prefixDefaultLocale
Заголовок раздела prefixDefaultLocale
Добавлено в:
astro@3.5.0
Этот параметр маршрутизации определяет, должны ли URL-адреса вашего языка по умолчанию использовать языковой префикс (например, /en/about/
).
Все языки, поддерживаемые не по умолчанию, будут использовать локализованный префикс (например, /ru/
или /russian/
), а файлы содержимого должны находиться в соответствующих папках. Этот параметр конфигурации позволяет указать, должен ли язык по умолчанию также следовать локализованной структуре URL.
Этот параметр также определяет, где должны находиться файлы страниц для вашего языка по умолчанию (например, src/pages/about/
или src/pages/en/about
), так как структура файлов и структура URL должны совпадать для всех языков.
-
"prefixDefaultLocale: false"
(по умолчанию): URL-адреса на вашем языке по умолчанию не будут иметь префикса/[locale]/
. Все остальные локали будут. -
"prefixDefaultLocale: true"
: Все URL-адреса, включая язык по умолчанию, будут иметь префикс/[locale]/
.
prefixDefaultLocale: false
Заголовок раздела prefixDefaultLocale: falseЭто значение по умолчанию. Установите эту опцию, если URL-адреса на вашем языке по умолчанию не будут иметь префикс /[locale]/
, а файлы на вашем языке по умолчанию существуют в корне src/pages/
:
Directorysrc
Directorypages
- about.astro
- index.astro
Directoryru
- about.astro
- index.astro
Directoryfr
- about.astro
- index.astro
src/pages/about.astro
создаст маршрутexample.com/about/
src/pages/fr/about.astro
создаст маршрутexample.com/fr/about/
prefixDefaultLocale: true
Заголовок раздела prefixDefaultLocale: trueУстановите эту опцию, когда все маршруты будут иметь префикс /locale/
в своем URL и когда все файлы содержимого страницы, включая файлы для вашей defaultLocale
, существуют в локализованной папке:
Directorysrc
Directorypages
- index.astro // Примечание: этот файл всегда необходим
Directoryen
- index.astro
- about.astro
Directoryru
- about.astro
- index.astro
Directorypt-br
- about.astro
- index.astro
- URL-адреса без префикса локали, (например,
example.com/about/
) вернут код состояния 404 (страница не найдена), если вы не укажете резервную локаль.
redirectToDefaultLocale
Заголовок раздела redirectToDefaultLocale
Добавлено в:
astro@4.2.0
Определяет, будет ли URL главной страницы (/
), сгенерированный src/pages/index.astro
, перенаправляться на /<defaultLocale>
.
Установка prefixDefaultLocale: true
также автоматически установит redirectToDefaultLocale: true
в вашем объекте конфигурации routing
. По умолчанию требуемый файл src/pages/index.astro
автоматически перенаправляется на индексную страницу вашего языка по умолчанию.
Вы можете отказаться от такого поведения, установив redirectToDefaultLocale: false
. Это позволяет вам иметь домашнюю страницу сайта, которая существует за пределами настроенной вами структуры папок локали.
manual
Заголовок раздела manual
Добавлено в:
astro@4.6.0
Когда эта опция включена, Astro отключит свое промежуточное программное обеспечение i18n, чтобы вы могли реализовать свою собственную пользовательскую логику. Никакие другие параметры routing
(например, prefixDefaultLocale
) не могут быть настроены с помощью routing: "manual"
.
Вы будете нести ответственность за написание своей собственной логики маршрутизации или выполнение промежуточного программного обеспечения Astro i18n вручную наряду со своим собственным.
Astro предоставляет вспомогательные функции для вашего промежуточного программного обеспечения, чтобы вы могли самостоятельно управлять маршрутизацией по умолчанию, исключениями, резервным поведением, отслеживанием ошибок и т. д.: redirectToDefaultLocale()
, NotFound()
, и redirectToFallback()
:
Функция middleware
Заголовок раздела Функция middlewareФункция middleware
вручную создаёт промежуточное программное обеспечение Astro i18n. Это позволяет расширить маршрутизацию Astro i18n вместо её полной замены.
Вы можете запустить middleware
с параметрами маршрутизации в сочетании с вашим собственным промежуточным программным обеспечением, используя утилиту sequence
для определения порядка:
Пользовательские пути локалей
Заголовок раздела Пользовательские пути локалейВ дополнение к определению поддерживаемых вашим сайтом языковых стандартов в виде строк (например, en
, pt-br
), Astro также позволяет сопоставить произвольное количество языковых кодов, распознаваемых браузером с пользовательским URL-адресом path
. Хотя локали могут быть строками любого формата, если они соответствуют структуре папок вашего проекта, codes
должны соответствовать принятому в браузере синтаксису.
Передайте объект в массив locales
с ключом path
для определения пользовательского префикса URL-адреса и codes
для указания языков, сопоставленных с этим URL-адресом. В этом случае имя вашей папки /[locale]/
должно точно соответствовать значению path
, и ваши URL-адреса будут созданы с использованием значения path
.
Это полезно, если вы поддерживаете несколько вариантов языка (например, "fr"
, "fr-BR"
и "fr-CA"
) и хотите, чтобы все эти варианты отображались под одним и тем же URL-адресом /fr/
, или даже полностью настроить его (например, /french/
):
При использовании функций из виртуального модуля astro: i18n
для вычисления допустимых URL-путей на основе вашей конфигурации (например, getRelativeLocaleUrl()
), используйте path
как значение locale
.
Определение языка браузера
Заголовок раздела Определение языка браузераМаршрутизация Astro i18n позволяет вам получить доступ к двум свойствам для определения языка браузера на страницах, отображаемых по запросу: Astro.preferredLocale
и Astro.preferredLocaleList
. Все страницы, включая статические страницы с предварительным отображением, имеют доступ к Astro.currentLocale
.
Они объединяют заголовок Accept-Language
браузера и ваши locales
(строки или codes
) для автоматического учёта предпочитаемых языков вашего посетителя.
-
Astro.preferredLocale
: Astro может вычислить предпочтительный языковой стандарт для вашего посетителя, если предпочтительный языковой стандарт его браузера включен в ваш массивlocales
. Это значение не определено, если такого соответствия не существует. -
Astro.preferredLocaleList
: Массив всех локалей, которые запрашиваются браузером и поддерживаются вашим веб-сайтом. В результате выводится список всех языков, совместимых между вашим сайтом и посетителем. Значением является[]
, если ни один из запрошенных браузером языков не найден в массивеlocales
. Если в браузере не указаны предпочтительные языки, то это значение будетi18n.locales
. -
Astro.currentLocale
: Локаль, рассчитанная на основе текущего URL-адреса с использованием синтаксиса, указанного в опцииlocales
. Если URL-адрес не содержит префикс/[locale]/
, то значением по умолчанию будетi18n.defaultLocale
.
Чтобы успешно соответствовать предпочтениям ваших посетителей, предоставляйте свои codes
, используя тот же шаблон, используемый браузером.
Резервная локаль
Заголовок раздела Резервная локальМаршрутизация i18n от Astro позволяет настроить стратегию резервной маршрутизации. Если страница на одном языке не существует (например, страница, которая ещё не переведена), вместо отображения страницы 404 вы можете перенаправить пользователя с одной локали на другую для каждого языка отдельно. Это полезно, если у вас ещё нет страницы для каждого маршрута, но вы всё равно хотите предоставить посетителям некоторый контент.
Например, приведённая ниже конфигурация устанавливает ru
в качестве резервной локали для любых отсутствующих маршрутов fr
. Это означает, что пользователь, посещающий example.com/fr/my-page/
, будет перенаправлен на example.com/ru/my-page/
вместо перехода на страницу 404, если src/pages/fr/my-page.астро
не существует.
Astro гарантирует, что страница будет построена в src/pages/fr
для каждой страницы, существующей в src/pages/ru/
. Если страница ещё не существует, то будет создана страница с редиректом на соответствующий маршрут ru
.
domains
(экспериментально)
Заголовок раздела domains (экспериментально)
Добавлено в:
astro@4.3.0
Эта опция маршрутизации позволяет вам настраивать ваши домены для каждого языка для проектов, отображаемых на server
, с использованием @astrojs/node
или адаптера @astrojs/ vercel
с настроенным параметром site
.
Чтобы включить это в своем проекте, настройте маршрутизацию i18n, если вы ещё этого не сделали. Затем установите значение true
для опции experimental.i18nDomains
и добавьте i18n.domains
, чтобы сопоставить любые поддерживаемые вами locales
с пользовательскими URL-адресами:
Все несопоставленные locales
будут соответствовать вашей конфигурации prefixDefaultLocales
. Однако, даже если это значение равно false
, файлы для вашей defaultLocale
также должны существовать в локализованной папке. Для приведённой выше конфигурации требуется папка /en/
.
С вышеуказанной конфигурацией:
- Файл
/fr/about.astro
создаст URL-адресhttps://fr.example.com/about
. - Файл
/ru/about.astro
создаст URL-адресhttps://example.ru/about
. - Файл
/ja/about.astro
создаст URL-адресhttps://example.com/ja/about
. - Файл
/en/about.astro
создаст URL-адресhttps://example.com/about
.
Вышеуказанные URL-адреса также будут возвращены функциями getAbsoluteLocaleUrl()
и getAbsoluteLocaleUrlList()
.
Ограничения
Заголовок раздела ОграниченияЭта функция имеет некоторые ограничения:
- Опция
site
является обязательной. - Опция
output
должна иметь значение"server"
. - Не может быть отдельных пререндеренных страниц.
- Функция адаптера
functionPerRoute
не поддерживается.
Для поддержки этой функции Astro использует следующие заголовки:
X-Forwarded-Host
иHost
. Астро будет использовать первый вариант, а если его нет, то попробует второй.X-Forwarded-Proto
иURL#protocol
запроса сервера.
Убедитесь, что ваш прокси-сервер/хостинговая платформа способны предоставить эту информацию. Невозможность получить эти заголовки приведет к появлению страницы 404 (код состояния).
Learn