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渲染的。到这基本就结束了,再见。

相关推荐
王哈哈^_^1 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie2 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic2 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿3 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具3 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
qq_390161774 小时前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test4 小时前
js下载excel示例demo
前端·javascript·excel
Yaml44 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事4 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶4 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json