作者:
    Creation:2026-09-19Last update:2026-09-19

    useLocale 钩子文档

    remix-intlayer 中的 useLocale 钩子提供对当前正在处理的 HTTP 请求的语言环境,以及项目中配置的默认语言环境和可用语言环境的访问。

    使用方法

    在 Remix 组件中(例如语言切换器):

    src/components/LocaleSwitcher.tsx
    import { type FC } from "react";
    import { Link } from "@remix-run/react";
    import { useLocale } from "remix-intlayer";
    import { getLocalizedUrl, getPathWithoutLocale } from "intlayer";
    
    export const LocaleSwitcher: FC = () => {
      const { locale, availableLocales } = useLocale();
      const pathWithoutLocale = getPathWithoutLocale();
    
      return (
        <nav>
          <ul>
            {availableLocales.map((localeItem) => (
              <li key={localeItem} className="p-1">
                <Link
                  href={getLocalizedUrl(pathWithoutLocale, localeItem)}
                  aria-current={localeItem === locale ? "page" : undefined}
                >
                  {localeItem.toUpperCase()}
                </Link>
              </li>
            ))}
          </ul>
        </nav>
      );
    };
    

    在路由处理程序中:

    src/server.ts
    import { createRouter } from "remix/router";
    import { intlayer, useLocale } from "remix-intlayer";
    
    const router = createRouter({
      middleware: [intlayer()],
    });
    
    router.get("/api/locale-info", () => {
      const { locale, defaultLocale, availableLocales } = useLocale();
    
      return Response.json({
        locale,
        defaultLocale,
        availableLocales,
      });
    });
    

    返回值

    该钩子返回一个 UseLocaleResult 类型的对象:

    属性类型描述
    localeDeclaredLocales为当前请求解析出的语言环境。
    defaultLocaleDeclaredLocalesintlayer.config.ts 中配置的默认回退语言环境。
    availableLocalesDeclaredLocales[]intlayer.config.ts 中配置的所有可用语言环境的数组。

    说明

    1. 请求作用域解析: 在由 intlayer() 中间件处理的活动请求中,useLocale 从请求存储中读取解析出的语言环境。
    2. 平滑回退 (Fallback): 如果在请求上下文之外调用(例如在初始化脚本或测试套件中),它将默认返回配置的 defaultLocale

    相关文档