Next.js国际化概述
外观
Next.js国际化概述[编辑 | 编辑源代码]
Next.js国际化(i18n)与本地化(l10n)是构建多语言网站的核心功能,允许开发者根据用户的语言或地区动态调整内容。Next.js通过内置的路由系统、内容协商和组件级渲染支持,简化了这一流程。
核心概念[编辑 | 编辑源代码]
国际化(i18n)[编辑 | 编辑源代码]
国际化是设计应用程序以支持多语言和区域格式的过程。Next.js通过以下方式实现:
- 路由本地化:URL路径包含语言标识(如
/en/about
或/es/about
)。 - 内容协商:根据用户浏览器设置自动重定向到首选语言。
本地化(l10n)[编辑 | 编辑源代码]
本地化是将国际化内容适配到特定区域的过程,包括:
- 翻译文本
- 日期、货币、数字的格式化
- 方向性(如RTL语言支持)
配置基础[编辑 | 编辑源代码]
在next.config.js
中启用i18n:
// next.config.js
module.exports = {
i18n: {
locales: ['en', 'fr', 'de'], // 支持的语言列表
defaultLocale: 'en', // 默认语言
},
}
路由处理[编辑 | 编辑源代码]
Next.js自动处理路由本地化:
用户访问路径 | 实际渲染路径 | 说明 |
---|---|---|
/about |
默认语言重定向 | |
/fr/about |
显式法语路径 |
内容翻译[编辑 | 编辑源代码]
使用next-translate
或next-intl
等库管理翻译:
// pages/[locale]/about.js
import useTranslation from 'next-translate/useTranslation'
export default function About() {
const { t } = useTranslation()
return <h1>{t('about:title')}</h1> // 根据locale加载对应翻译
}
翻译文件结构示例:
locales/ en/ about.json fr/ about.json
区域感知格式化[编辑 | 编辑源代码]
使用JavaScript的Intl
API处理区域差异:
new Intl.DateTimeFormat(locale).format(date) // 本地化日期
new Intl.NumberFormat(locale).format(number) // 本地化数字
实际案例[编辑 | 编辑源代码]
案例:电商网站多语言切换
1. 用户从法国访问 → 自动重定向到/fr
2. 价格显示为欧元格式(1.234,56 €)
3. 日期显示为法式格式(31/12/2023)
高级特性[编辑 | 编辑源代码]
动态导入翻译[编辑 | 编辑源代码]
按需加载翻译文件减少初始负载:
const translations = await import(`../locales/${locale}.json`)
混合模式[编辑 | 编辑源代码]
支持子路径(/fr
)和域名(fr.example.com
)混合路由:
// next.config.js
i18n: {
domains: [
{ domain: 'example.com', defaultLocale: 'en' },
{ domain: 'example.fr', defaultLocale: 'fr' },
]
}
数学公式支持[编辑 | 编辑源代码]
当需要处理复数形式时,可使用语言特定的复数规则:
最佳实践[编辑 | 编辑源代码]
1. 始终提供回退语言(默认语言)
2. 使用标准语言代码(如zh-CN
而非cn
)
3. 分离可翻译文本与代码逻辑
4. 测试RTL语言布局
常见问题[编辑 | 编辑源代码]
Q: 如何强制切换语言?
A: 使用next/router
:
import { useRouter } from 'next/router'
const router = useRouter()
router.push('/about', '/about', { locale: 'fr' })
Q: 静态生成如何处理多语言?
A: 在getStaticPaths
中返回所有语言路径:
export async function getStaticPaths() {
return {
paths: ['en', 'fr'].map(locale => ({ params: { locale } })),
fallback: false
}
}
通过以上实现,Next.js开发者可以构建真正全球化的应用程序,同时保持开发体验的一致性和高效性。