Nuxt3 + i18n国际化,多语言切换服务器渲染详细配置,包你成功。

废话不多说直接开整!!!

i18n国际化nuxt3配置:vue-i18n.intlify.dev/guide/integ... Nuxt I18n (@nuxtjs/i18n): i18n.nuxtjs.org/docs/gettin...

这是我得package.json 仅供参考

js 复制代码
{
  "name": "nuxt-app",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "nuxt dev --dotenv .env.development",
    "dev:development": "nuxi dev --dotenv .env.development",
    "dev:production": "nuxi dev --dotenv .env.production",
    "build": "nuxt build --dotenv .env.production",
    "generate": "nuxt generate",
    "preview": "nuxt preview",
    "postinstall": "nuxt prepare"
  },
  "dependencies": {
    "@nuxt/image": "^1.7.0",
    "@nuxtjs/i18n": "^8.3.1",
    "@pinia-plugin-persistedstate/nuxt": "^1.2.0",
    "@pinia/nuxt": "^0.5.1",
    "element-plus": "^2.7.4",
    "nuxt": "^3.11.2",
    "pinia": "^2.1.7",
    "vue": "^3.4.27",
    "vue-router": "^4.3.2"
  },
  "devDependencies": {
    "@element-plus/nuxt": "^1.0.9",  
    "sass": "^1.77.4",
    "vue-i18n": "^9.13.1"
  }
}

安装 `

java 复制代码
npm install vue-i18n -D

npx nuxi@latest module add i18n // 往nuxt.config.ts中添加 i18n,也可以手动添加
创建自定义语言目录及设置方式
js 复制代码
不用关心其他的配置,只要关心i18n的配置即可,都写出来是方便新手找位置
export default defineNuxtConfig({
	devtools: { enabled: true },
	ssr: true,
	css: ['~/assets/css/global.scss', '~/assets/css/layout.scss', '~/assets/css/mixin.scss'],
	modules: ['@nuxtjs/i18n', '@pinia/nuxt', '@pinia-plugin-persistedstate/nuxt','@element-plus/nuxt', '@nuxt/image'], // 这里的@nuxtjs/i18n 一定要添加进来哦,要不然就没有自动动导入了
	experimental: {
		clientFallback: true,
	},
	plugins: ['~/plugins/http.ts', '~/plugins/api.ts', '~/plugins/burialPoint.ts'],
	i18n: {
		langDir: './locales/', // 设置的语言目录
		defaultLocale: 'en', // 默认选择英文
		locales: [ // 设置对应的语言文件列表
			{ code: 'zh', iso: 'CN', file: 'zh.json' },
			{ code: 'ko', iso: 'KR', file: 'ko.json' },
			{ code: 'en', iso: 'GB', file: 'en.json' },
			{ code: 'ja', iso: 'JP', file: 'ja.json' },
		],		
		strategy: 'prefix_except_default',// 策略 默认就行
		// detectBrowserLanguage: false,// 浏览器是否检测,不检测直接使用配置设置为false
		detectBrowserLanguage: { // 配置后会读取浏览器策略,根据当当前所在国家自动选择语言
			// 检测浏览器默认语言设置,强制跳转策略,有利于不同国家的seo优化
			useCookie: true, // cookie持久化
			cookieKey: 'i81n_redirected', //cookie的名字
			alwaysRedirect: false, // 没有找到是否重定向
			redirectOn: 'root', // recommended
		},
	},
	runtimeConfig: {
		// public对象中的属性,服务端和客户端都能获取到
		public: {
			apiUrl: process.env.NUXT_API_URL,
		},
	},
	imports: {
		dirs: [
			// 扫描顶级模块
			'composables',		
			'stores'	
		],
	},
	sourcemap: {
		server: true,
		client: true,
	},
});
剩下就是使用方式了,贼简单
js 复制代码
<template>
// 我这是element-plus ui
<el-select
        v-model="locale"
        placeholder="Select"
        size="small"
        @change="setLocale" // 设置语言的方法,这是 i18n内置的方法
        style="width: 120px">
        <el-option  // availableLocales 对应的是多语言的key值,他是个数组: [zh,ja,ko,en]
                v-for="(locale, index) in availableLocales"
                :key="index"
                :label="t(`headers.settings.${locale}`)" // 这里是用模版的找到对应的字段参考locales文件中的相关字段
                :value="locale" />
</el-select>

// 对应的模版渲染,请参考locales文件中的相关字段 $t是I18n提供的全局渲染模版的方法,{ name: '变量' } 可以传变量
<label for="locale-select">{{ $t('language') }}: </label>
<h1>{{ $t('title') }}</h1>
<h1>{{ $t('keywords') }}</h1>
<h1>{{ $t('description', { name: '变量' }) }}</h1>


<NuxtLinkLocale to="/about"> // 这里是跳转的路由不要用其他的哦
        <el-button type="primary">跳转到 about</el-button>
</NuxtLinkLocale>		
<NuxtLink :to="localePath('/about')">nuxtLink 跳转about</NuxtLink>// 使用NuxtLink 跳转方式
<SwitchLocalePathLink locale="en">Dutch</SwitchLocalePathLink> // 跳转直接切换成另一种语言
<NuxtLink :to="switchLocalePath('en')">Dutch</NuxtLink>
</template>

<script setup lang="ts">
const { setLocale, t, locale, availableLocales } = useI18n();
// 页面跳转的时候切记使用@nuxtjs/i18n提供的跳转方式,这样多语言切换才会被ssr渲染。浏览器会多一个语言路径
const localePath = useLocalePath()
const switchLocalePath  = useSwitchLocalePath()

</script>

简单plus 全是干货,vue3版spa面渲染的也类似这个,如果有人需要请留言,我在出一个vue SPA渲染的。到这基本就结束了,再见。

相关推荐
fishmemory7sec1 分钟前
Electron 使⽤ electron-builder 打包应用
前端·javascript·electron
豆豆1 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
twins35202 小时前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky2 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~2 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n03 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。3 小时前
案例-任务清单
前端·javascript·css
zqx_74 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己4 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5