# General Translation React SDKs (gt-react, gt-next): 翻译字符串 URL: https://generaltranslation.com/zh/docs/react/guides/translating-strings.mdx --- title: 翻译字符串 description: 如何在 React、Next.js、TanStack Start 和 React Native 中使用 General Translation 的 useGT 钩子翻译独立字符串,例如标签和占位符。 related: links: - /docs/react/guides/translating-jsx - /docs/react/guides/formatting-variables - /docs/react/guides/handling-plurals-and-branches - /docs/react/guides/translating-with-dictionaries --- 有些文本并不是 JSX——例如占位符、`aria-label`、alt 文本,以及你在代码中拼接出的字符串。请使用 [`useGT`](/docs/react/reference/hooks/use-gt) 钩子来翻译这些内容。在异步 App Router 组件中,请改用 [`getGT`](/docs/react/nextjs/reference/functions/get-gt)。 ## 使用 `useGT` 翻译 [#use-gt] 调用 `useGT` 获取翻译函数,然后向它传入源字符串。`useGT` 会直接返回这个函数。 ```tsx import { useGT } from 'gt-react'; function Search() { const gt = useGT(); return ; } ``` ```tsx title="同步组件" import { useGT } from 'gt-next'; function Search() { const gt = useGT(); return ; } ``` ```tsx title="异步 App Router 组件" import { getGT } from 'gt-next/server'; async function Search() { const gt = await getGT(); return ; } ``` ```tsx import { useGT } from 'gt-tanstack-start'; function Search() { const gt = useGT(); return ; } ``` ```tsx import { useGT } from 'gt-react-native'; function Search() { const gt = useGT(); return ; } ``` *注意:请写成 `const gt = useGT()`——这个钩子返回的是函数本身,不是对象。请传入字符串字面量,而不是模板字面量或拼接结果,这样 CLI 才能提取它。* ## 插入变量 [#variables] 使用 ICU 消息语法和命名占位符,并在 options object 中传入相应的值。各个框架中的用法都完全相同。 ```tsx const gt = useGT(); gt('Welcome back, {name}!', { name: user.name }); ``` ## 添加上下文 [#context] 传入 `$context` 以消除字符串的歧义,并传入 `$id` 为其指定一个稳定的标识符。 ```tsx gt('Bank', { $context: 'a bank of a river' }); ``` ## 复用在组件外定义的字符串 [#shared] 如果要在模块作用域中为常量、枚举或配置定义可翻译字符串,请用 [`msg`](/docs/react/reference/functions/msg) 注册,并用 [`useMessages`](/docs/react/reference/hooks/use-messages) 取出对应内容。在异步 App Router 组件中,则应改用 [`getMessages`](/docs/react/nextjs/reference/functions/get-messages)。用 `msg` 注册一次字符串,然后在渲染处取用即可。 ```tsx import { msg, useMessages } from 'gt-react'; const STATUS = { active: msg('Active'), paused: msg('Paused') }; function Badge({ status }: { status: 'active' | 'paused' }) { const m = useMessages(); return {m(STATUS[status])}; } ``` ```tsx title="同步组件" import { msg, useMessages } from 'gt-next'; const STATUS = { active: msg('Active'), paused: msg('Paused') }; function Badge({ status }: { status: 'active' | 'paused' }) { const m = useMessages(); return {m(STATUS[status])}; } ``` ```tsx title="异步 App Router 组件" import { msg } from 'gt-next'; import { getMessages } from 'gt-next/server'; const STATUS = { active: msg('Active'), paused: msg('Paused') }; async function Badge({ status }: { status: 'active' | 'paused' }) { const m = await getMessages(); return {m(STATUS[status])}; } ``` ```tsx import { msg, useMessages } from 'gt-tanstack-start'; const STATUS = { active: msg('Active'), paused: msg('Paused') }; function Badge({ status }: { status: 'active' | 'paused' }) { const m = useMessages(); return {m(STATUS[status])}; } ``` ```tsx import { msg, useMessages } from 'gt-react-native'; const STATUS = { active: msg('Active'), paused: msg('Paused') }; function Badge({ status }: { status: 'active' | 'paused' }) { const m = useMessages(); return {m(STATUS[status])}; } ``` ## Next steps - /docs/react/guides/translating-jsx - /docs/react/guides/formatting-variables - /docs/react/guides/handling-plurals-and-branches - /docs/react/guides/translating-with-dictionaries