Skip to main content
Glama
get_locale_cookie.md4.15 kB
--- 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 / 头信息中获取语言环境 ## 使用 Hooks(推荐) 对于大多数使用场景,推荐使用 `useLocale` hook 来获取当前语言环境,因为它是自动解析的。这与 Vue.js 中的 `useLocale` 组合式函数类似。 ```ts import { useLocale } from "next-intlayer"; // or import { useLocale } from "react-intlayer"; // or import { useLocale } from "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` hook,仅解析 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; ``` ### 如果 locale 尚未设置 locale 只有在用户明确选择了语言后,才会被设置为 cookie。默认情况下,对于新访客,locale 是从请求头字段中解析的。 您可以从请求头中检测用户偏好的语言环境。以下是如何处理的示例: ```ts /** * 从请求头中检测语言环境 * * accept-language 头是语言环境检测中最重要的。 * 它包含一个带有质量值(q 值)的语言代码列表,表示用户偏好的语言顺序。 * * 示例: "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"; /** * 浏览器通常发送的协商者请求头示例 * 这些请求头有助于确定用户偏好的语言 */ ts; /** * 从请求头中检测用户的首选语言环境 * * accept-language 头是语言环境检测中最重要的头。 * 它包含带有质量值(q值)的语言代码列表, * 指示用户按偏好顺序排列的首选语言。 * * 示例: "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"; /** * 浏览器通常发送的协商头示例 * 这些头有助于确定用户的首选语言 */ 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); ```

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aymericzip/intlayer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server