---
createdAt: 2025-05-20
updatedAt: 2025-06-29
title: Як отримати локаль із cookie / заголовків?
description: Дізнайтеся, як отримати локаль із cookie / заголовків.
keywords:
  - cookie
  - headers
  - intlayer
  - locale
  - hook
  - useLocale
  - useLocaleCookie
  - next.js
  - react-intlayer
  - vue-intlayer
slugs:
  - frequent-questions
  - get-locale-cookie
---

# Як отримати локаль із cookie / заголовків

## Використання хуків (рекомендується)

У більшості випадків рекомендовано отримувати поточну локаль за допомогою хука `useLocale`, оскільки вона вирішується автоматично. Це працює аналогічно до `useLocale` composable у Vue.js.

```ts
import { useLocale } from "next-intlayer";
// or import { useLocale } from "react-intlayer";
// або імпортуйте { useLocale } з "vue-intlayer";

// Використання на клієнті
const { locale } = useLocale();
```

Для серверних компонентів ви можете імпортувати його з:

```tsx
import { useLocale } from "next-intlayer/server";

const Test = () => {
  const { locale } = useLocale();
  return <>{locale}</>;
};

const Page = async ({ params }) => {
  const { locale } = await params;

  return (
    <IntlayerServerProvider locale={locale}>
      <Test />
    </IntlayerServerProvider>
  );
};
```

Також існує хук `useLocaleCookie`, який лише повертає значення cookie.

## Ручна конфігурація cookie

Ви можете задати власну назву cookie, наприклад

```ts
import { type IntlayerConfig } from "intlayer";

const config: IntlayerConfig = {
  middleware: {
    cookieName: "myCustomLocaleCookie", // за замовчуванням 'intlayer-locale'
  },
};

export default config;
```

отримати його наступним чином

### На стороні клієнта

```ts
// Використання імені cookie за замовчуванням
const locale = document.cookie
  .split("; ")
  .find((row) => row.startsWith("intlayer-locale="))
  ?.split("=")[1];

// Використання користувацького імені cookie
const locale = document.cookie
  .split("; ")
  .find((row) => row.startsWith("myCustomLocaleCookie="))
  ?.split("=")[1];
```

### На сервері (Next.js)

```ts
import { cookies } from "next/headers";

// Використання імені cookie за замовчуванням
const locale = cookies().get("intlayer-locale")?.value;

// Використання користувацького імені cookie
const locale = cookies().get("myCustomLocaleCookie")?.value;
```

### Якщо локаль ще не встановлена

Локаль встановлюється в cookie лише після того, як користувач явно вибере локаль. За замовчуванням для нових відвідувачів локаль визначається за полями заголовків.

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

```ts
/**
 * Визначає локаль з заголовків запиту
 *
 * Заголовок accept-language є найважливішим для визначення локалі.
 * Він містить список кодів мов зі значеннями якості (q-values), які вказують
 * пріоритетні мови користувача в порядку переваги.
 *
 * Приклад: "en-US,en;q=0.9,fr;q=0.8,es;q=0.7"
 * - en-US, основна мова (q=1.0 мається на увазі)
 * - en, другий вибір (q=0.9)
 * - fr, третій вибір (q=0.8)
 * - es, четвертий вибір (q=0.7)
 */
import { localeDetector } from "@intlayer/core";

/**
 * Приклад negotiator headers, які зазвичай надсилають браузери
 * Ці заголовки допомагають визначити переважну мову користувача
 */
const exampleNegotiatorHeaders: Record<string, string> = {
  "accept-language": "en-US,en;q=0.9,fr;q=0.8,es;q=0.7",
  "accept":
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "user-agent":
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
};

// Приклад використання:
const detectedLocale = localeDetector(exampleNegotiatorHeaders);
```
