跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Next.js next-i18next
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Next.js next-i18next = '''next-i18next''' 是一个专为 [[Next.js]] 设计的国际化(i18n)库,基于流行的 [[i18next]] 生态系统构建。它简化了多语言网站的开发流程,允许开发者轻松管理翻译内容、切换语言以及实现本地化功能。本指南将详细介绍如何在 Next.js 项目中使用 next-i18next,涵盖从基础配置到高级用法的全面内容。 == 介绍 == 国际化(Internationalization,简称 i18n)是指设计和开发软件,使其能够适应不同语言和地区的过程。本地化(Localization,简称 l10n)则是将国际化软件适配到特定语言或地区的过程。next-i18next 结合了 Next.js 的静态生成(SSG)和服务器端渲染(SSR)能力,提供了一种高效的方式来实现多语言支持。 next-i18next 的核心功能包括: * 按语言加载翻译文件 * 自动检测用户语言偏好 * 支持静态和动态路由的国际化 * 与 React 组件无缝集成 == 安装与配置 == 首先,需要在 Next.js 项目中安装 next-i18next: <syntaxhighlight lang="bash"> npm install next-i18next # 或 yarn add next-i18next </syntaxhighlight> 然后创建基本的配置文件。通常在项目根目录下创建 <code>next-i18next.config.js</code>: <syntaxhighlight lang="javascript"> // next-i18next.config.js module.exports = { i18n: { defaultLocale: 'en', locales: ['en', 'fr', 'es'], }, reloadOnPrerender: process.env.NODE_ENV === 'development', }; </syntaxhighlight> == 基本用法 == 1. 首先,在 <code>pages/_app.js</code> 中包裹你的应用: <syntaxhighlight lang="javascript"> import { appWithTranslation } from 'next-i18next'; function MyApp({ Component, pageProps }) { return <Component {...pageProps} />; } export default appWithTranslation(MyApp); </syntaxhighlight> 2. 创建翻译文件。默认情况下,next-i18next 会在 <code>public/locales/{language}/common.json</code> 中查找翻译: <pre> // public/locales/en/common.json { "greeting": "Hello, world!", "welcome": "Welcome to our site" } // public/locales/fr/common.json { "greeting": "Bonjour le monde!", "welcome": "Bienvenue sur notre site" } </pre> 3. 在组件中使用翻译: <syntaxhighlight lang="javascript"> import { useTranslation } from 'next-i18next'; function Greeting() { const { t } = useTranslation('common'); return <h1>{t('greeting')}</h1>; } </syntaxhighlight> == 高级功能 == === 命名空间 === next-i18next 支持命名空间来组织翻译内容。创建额外的命名空间文件: <pre> // public/locales/en/home.json { "title": "Home Page" } </pre> 然后在组件中使用: <syntaxhighlight lang="javascript"> const { t } = useTranslation(['common', 'home']); // 使用 t('home:title'); </syntaxhighlight> === 动态语言切换 === 实现语言切换功能: <syntaxhighlight lang="javascript"> import { useRouter } from 'next/router'; import { useTranslation } from 'next-i18next'; function LanguageSwitcher() { const router = useRouter(); const { i18n } = useTranslation(); const changeLanguage = (lang) => { i18n.changeLanguage(lang); router.push(router.pathname, router.asPath, { locale: lang }); }; return ( <div> <button onClick={() => changeLanguage('en')}>English</button> <button onClick={() => changeLanguage('fr')}>Français</button> </div> ); } </syntaxhighlight> === 服务器端渲染 === 对于需要 SSR 的页面,使用 <code>serverSideTranslations</code>: <syntaxhighlight lang="javascript"> import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; export async function getStaticProps({ locale }) { return { props: { ...(await serverSideTranslations(locale, ['common', 'home'])), }, }; } </syntaxhighlight> == 实际案例 == 假设我们要构建一个多语言电子商务网站: 1. 配置支持英语、法语和西班牙语 2. 产品页面根据用户语言显示不同内容 3. 购物车和结账流程本地化 === 产品页面实现 === <syntaxhighlight lang="javascript"> import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; function ProductPage({ product }) { const { t } = useTranslation(['products', 'common']); return ( <div> <h1>{t(`products:${product.id}.title`)}</h1> <p>{t(`products:${product.id}.description`)}</p> <button>{t('common:add_to_cart')}</button> </div> ); } export async function getStaticProps({ locale }) { return { props: { ...(await serverSideTranslations(locale, ['products', 'common'])), product: getProductData(), }, }; } </syntaxhighlight> == 性能优化 == next-i18next 提供了一些性能优化选项: 1. 按需加载翻译:只加载当前页面需要的语言和命名空间 2. 持久化语言选择:使用 cookies 或 localStorage 记住用户偏好 3. 预加载语言:在用户可能切换语言前预加载翻译资源 == 常见问题 == === 翻译未更新 === 确保在开发环境中设置了 <code>reloadOnPrerender: true</code>,并检查翻译文件路径是否正确。 === 生产环境问题 === 确保在构建时包含所有语言文件,可以通过配置 <code>next.config.js</code> 来包含 <code>public/locales</code> 目录。 === SEO 考虑 === 使用 <code>hreflang</code> 标签来指示页面的替代语言版本: <syntaxhighlight lang="javascript"> // 在页面头部添加 <link rel="alternate" hrefLang="en" href="https://example.com/en/page" /> <link rel="alternate" hrefLang="fr" href="https://example.com/fr/page" /> </syntaxhighlight> == 总结 == next-i18next 为 Next.js 应用程序提供了强大的国际化支持,从简单的文本翻译到复杂的本地化场景都能胜任。通过合理的配置和使用,可以轻松构建支持多语言的现代 Web 应用。 <mermaid> graph TD A[用户访问网站] --> B{检测语言} B -->|浏览器设置| C[首选语言] B -->|URL参数| D[指定语言] C --> E[加载对应翻译] D --> E E --> F[渲染本地化内容] </mermaid> 随着应用程序规模的扩大,可以考虑: * 自动化翻译管理流程 * 集成专业翻译服务 * 实现更复杂的本地化策略(如货币、日期格式等) 通过掌握 next-i18next,开发者可以为全球用户提供更好的用户体验,扩大产品的国际影响力。 [[Category:后端框架]] [[Category:Next.js]] [[Category:Next.js国际化与本地化]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)