跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Next.js next-i18next
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
预览
高级
特殊字符
帮助
标题
2级
3级
4级
5级
格式
插入
拉丁字母
扩展拉丁字母
国际音标
符号
希腊字母
希腊字母扩展
西里尔字母
阿拉伯字母
扩展阿拉伯字母
希伯来字母
孟加拉语字符集
泰米尔数字和符号
泰卢固语字符集
僧伽罗语字符集
梵文字符集
古吉拉特语字符集
泰语字符集
老挝语
高棉语字母
加拿大原住民音节文字
卢恩
Á
á
À
à
Â
â
Ä
ä
Ã
ã
Ǎ
ǎ
Ā
ā
Ă
ă
Ą
ą
Å
å
Ć
ć
Ĉ
ĉ
Ç
ç
Č
č
Ċ
ċ
Đ
đ
Ď
ď
É
é
È
è
Ê
ê
Ë
ë
Ě
ě
Ē
ē
Ĕ
ĕ
Ė
ė
Ę
ę
Ĝ
ĝ
Ģ
ģ
Ğ
ğ
Ġ
ġ
Ĥ
ĥ
Ħ
ħ
Í
í
Ì
ì
Î
î
Ï
ï
Ĩ
ĩ
Ǐ
ǐ
Ī
ī
Ĭ
ĭ
İ
ı
Į
į
Ĵ
ĵ
Ķ
ķ
Ĺ
ĺ
Ļ
ļ
Ľ
ľ
Ł
ł
Ń
ń
Ñ
ñ
Ņ
ņ
Ň
ň
Ó
ó
Ò
ò
Ô
ô
Ö
ö
Õ
õ
Ǒ
ǒ
Ō
ō
Ŏ
ŏ
Ǫ
ǫ
Ő
ő
Ŕ
ŕ
Ŗ
ŗ
Ř
ř
Ś
ś
Ŝ
ŝ
Ş
ş
Š
š
Ș
ș
Ț
ț
Ť
ť
Ú
ú
Ù
ù
Û
û
Ü
ü
Ũ
ũ
Ů
ů
Ǔ
ǔ
Ū
ū
ǖ
ǘ
ǚ
ǜ
Ŭ
ŭ
Ų
ų
Ű
ű
Ŵ
ŵ
Ý
ý
Ŷ
ŷ
Ÿ
ÿ
Ȳ
ȳ
Ź
ź
Ž
ž
Ż
ż
Æ
æ
Ǣ
ǣ
Ø
ø
Œ
œ
ß
Ð
ð
Þ
þ
Ə
ə
格式
链接
标题
列表
文件
讨论
参考
说明
输入内容
输出结果
斜体
''斜体文字''
斜体文字
粗体
'''粗体文字'''
粗体文字
粗斜体
'''''粗斜体文字'''''
粗斜体文字
说明
输入内容
输出结果
参考资料
页面文本。<ref>[https://www.example.org/ 链接文本],其他文本。</ref>
页面文本。
[1]
命名参考资料
页面文本。<ref name="测试">[https://www.example.org/ 链接文本]</ref>
页面文本。
[2]
复用参考资料
页面文本。<ref name="测试" />
页面文本。
[2]
显示参考资料列表
<references />
↑
链接文本
,其他文本。
↑
链接文本
= 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国际化与本地化]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)