Перейти к содержимому

Справочник API интернационализации

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

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

Также обратите внимание, что URL-адреса, созданные этими функциями для вашей defaultLocale, будут отражать вашу конфигурацию i18n.routing.

Для ознакомления с функциями и примерами использования смотрите наше руководство по i18n-маршрутизации.

Импорты из astro:i18n

import { 
  getRelativeLocaleUrl,
  getAbsoluteLocaleUrl,
  getRelativeLocaleUrlList,
  getAbsoluteLocaleUrlList,
  getPathByLocale,
  getLocaleByPath,
  redirectToDefaultLocale,
  redirectToFallback,
  notFound,
  middleware,
  requestHasLocale,
 } from 'astro:i18n';

getRelativeLocaleUrl()

Тип: (locale: string, path?: string, options?: GetLocaleOptions) => string

Используйте эту функцию для получения относительного пути для локали. Если локаль не существует, Astro выдаст ошибку.

---
import { getRelativeLocaleUrl } from 'astro:i18n';

getRelativeLocaleUrl("fr");
// возвращает /fr

getRelativeLocaleUrl("fr", "");
// возвращает /fr/

getRelativeLocaleUrl("fr", "getting-started");
// возвращает /fr/getting-started

getRelativeLocaleUrl("fr_CA", "getting-started", {
  prependWith: "blog"
}); 
// возвращает /blog/fr-ca/getting-started

getRelativeLocaleUrl("fr_CA", "getting-started", {
  prependWith: "blog",
  normalizeLocale: false
}); 
// возвращает /blog/fr_CA/getting-started
---

getAbsoluteLocaleUrl()

Тип: (locale: string, path?: string, options?: GetLocaleOptions) => string

Используйте эту функцию для получения абсолютного пути для локали, когда [site] имеет значение. Если [site] не настроен, функция вернет относительный URL. Если локаль не существует, Astro выдаст ошибку.

---
import { getAbsoluteLocaleUrl } from 'astro:i18n';

// Если `site` установлен как `https://example.com`

getAbsoluteLocaleUrl("fr"); 
// возвращает https://example.com/fr

getAbsoluteLocaleUrl("fr", ""); 
// возвращает https://example.com/fr/

getAbsoluteLocaleUrl("fr", "getting-started"); 
// возвращает https://example.com/fr/getting-started

getAbsoluteLocaleUrl("fr_CA", "getting-started", {
  prependWith: "blog"
}); 
// возвращает https://example.com/blog/fr-ca/getting-started

getAbsoluteLocaleUrl("fr_CA", "getting-started", {
  prependWith: "blog",
  normalizeLocale: false
}); 
// возвращает https://example.com/blog/fr_CA/getting-started
---

getRelativeLocaleUrlList()

Тип: (path?: string, options?: GetLocaleOptions) => string[]

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

getAbsoluteLocaleUrlList()

Тип: (path?: string, options?: GetLocaleOptions) => string[]

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

getPathByLocale()

Тип: (locale: string) => string

Функция, которая возвращает path, связанный с одним или несколькими codes, когда настроены пользовательские пути локалей.

export default defineConfig({
  i18n: {
    locales: ["es", "en", {
      path: "french",
      codes: ["fr", "fr-BR", "fr-CA"]
    }]
  }
})
---
import { getPathByLocale } from 'astro:i18n';

getPathByLocale("fr"); // возвращает "french"
getPathByLocale("fr-CA"); // возвращает "french"
---

getLocaleByPath()

Тип: (path: string) => string

Функция, которая возвращает code, связанный с путем локали path.

export default defineConfig({
  i18n: {
    locales: ["es", "en", {
      path: "french",
      codes: ["fr", "fr-BR", "fr-CA"]
    }]
  }
})
---
import { getLocaleByPath } from 'astro:i18n';

getLocaleByPath("french"); // возвращает "fr", поскольку это первый настроенный код
---

redirectToDefaultLocale()

Тип: (context: APIContext, statusCode?: ValidRedirectStatus) => Promise<Response>

Добавлено в: astro@4.6.0

:::noteДоступно только когда i18n.routing установлен в значение "manual":::

Функция, которая возвращает Response с перенаправлением на настроенную defaultLocale. Она принимает необязательный валидный код статуса для перенаправления.

import { defineMiddleware } from "astro:middleware";
import { redirectToDefaultLocale } from "astro:i18n";

export const onRequest = defineMiddleware((context, next) => {
  if (context.url.pathname.startsWith("/about")) {
    return next();
  } else {
    return redirectToDefaultLocale(context, 302);
  }
})

redirectToFallback()

Тип: (context: APIContext, response: Response) => Promise<Response>

Добавлено в: astro@4.6.0

:::noteДоступно только когда i18n.routing установлен в значение "manual":::

Функция для использования резервных локалей i18n.fallback (EN) в вашем собственном мидлваре.

import { defineMiddleware } from "astro:middleware";
import { redirectToFallback } from "astro:i18n";

export const onRequest = defineMiddleware(async (context, next) => {
  const response = await next();
  if (response.status >= 300) {
    return redirectToFallback(context, response)
  }
  return response;
})

notFound()

Тип: (context: APIContext, response?: Response) => Promise<Response> | undefined

Добавлено в: astro@4.6.0

:::noteДоступно только когда i18n.routing установлен в значение "manual":::

Используйте эту функцию в мидлваре маршрутизации для возврата 404 в случаях, когда:

  • путь не является корневым (например, / или /<base>)
  • URL не содержит локаль

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

import { defineMiddleware } from "astro:middleware";
import { notFound } from "astro:i18n";

export const onRequest = defineMiddleware((context, next) => {
  const pathNotFound = notFound(context);
  if (pathNotFound) {
    return pathNotFound;
  }
  return next();
})

middleware()

Тип: (options: { prefixDefaultLocale: boolean, redirectToDefaultLocale: boolean }) => MiddlewareHandler

Добавлено в: astro@4.6.0

:::noteДоступно только когда i18n.routing установлен в значение "manual":::

Функция, которая позволяет программно создать мидлвар Astro i18n.

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

import { middleware } from "astro:i18n";
import { sequence, defineMiddleware } from "astro:middleware";

const customLogic = defineMiddleware(async (context, next) => {
  const response = await next();

  // Пользовательская логика после получения ответа.
  // Можно перехватить ответ, приходящий от мидлвара Astro i18n.

  return response;
});

export const onRequest = sequence(customLogic, middleware({
	prefixDefaultLocale: true,
	redirectToDefaultLocale: false
}))

requestHasLocale()

Тип: (context: APIContext) => boolean

Добавлено в: astro@4.6.0

:::noteДоступно только когда i18n.routing установлен в значение "manual":::

Проверяет, содержит ли текущий URL настроенную локаль. Внутри эта функция использует APIContext#url.pathname.

import { defineMiddleware } from "astro:middleware";
import { requestHasLocale } from "astro:i18n";

export const onRequest = defineMiddleware(async (context, next) => {
  if (requestHasLocale(context)) {
    return next();
  }
  return new Response("Not found", { status: 404 });
})
Внести свой вклад Сообщество Поддержать