SpringBoot+Vue前后端分离项目国际化支持

这篇具有很好参考价值的文章主要介绍了SpringBoot+Vue前后端分离项目国际化支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前端国际化支持

1、安装i18n依赖

npm install --save vue-i18n@8.27.2 --force

2、src目录下面新建lang文件夹,新建i18n.js、language.en_US.js、language.zh_CN.js三个文件

springboot前后端分离国际化,vue.js,spring boot,前端
i18n.js文件

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import Cookies from 'js-cookie'
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang
import enLocale from './language.en_US'
import zhLocale from './language.zh_CN'

Vue.use(VueI18n)

const messages = {
  en_US: {
    ...enLocale,
    ...elementEnLocale
  },
  zh_CN: {
    ...zhLocale,
    ...elementZhLocale
  }
}

const i18n = new VueI18n({
  // 设置语言 选项 en_US | zh_CN
  locale: Cookies.get('language') || 'zh_CN', // 通过this.$i18n.locale的值实现语言切换
  // 设置文本内容
  messages
})

export default i18n

language.en_US.js文件

export default {
  login: {
    title: 'Device Cloud Management System',
    logIn: 'Log in',
    username: 'Username',
    password: 'Password'
  },
  //消息提示
  message:{
    setLanguageSuccess:"Set language success"
  },
  //菜单相关
  menus:{
    deviceManage:"Device Manage"
  }
}

language.zh_CN.js文件

export default {
  login: {
    title: '设备云管理系统',
    logIn: '登录',
    username: '账号',
    password: '密码'
  },
  //消息提示
  message:{
    setLanguageSuccess:"设置语言成功"
  },
  //菜单相关
  menus:{
    deviceManage:"设备管理"
  }
}

3、在src/main.js中添加i18n

import i18n from "./lang/i18n";

// use添加i18n
Vue.use(Element, {
  i18n: (key, value) => i18n.t(key, value)
})
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

4、在src/store/getters.js中添加language

const getters = {
  language: state => state.app.language,
}
export default getters

5、在src/store/modules/app.js中添加state–language

import Cookies from 'js-cookie'

const state = {
  language: Cookies.get('language') || 'zh_CN'
}

const mutations = {
  SET_LANGUAGE: (state, language) => {
    state.language = language
    Cookies.set('language', language)
  }
}

const actions = {
  setLanguage({ commit }, language) {
    commit('SET_LANGUAGE', language)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

6、新建language.js文件,changeLanguages方法用于访问后端接口,修改语言

import request from '@/utils/request'

/**
 * * 获取信息
 * @param address
 * @returns {AxiosPromise}
 */
export function changeLanguages(lang){
  return request({
    url: '/changeLanguages',
    method: 'get',
    headers: {
      isToken: false,
    },
    params: {
      lang: lang
    }
  })
}

7、在src/components/LangSelect/index.vue中创建语言切换组件

<template>
  <el-dropdown trigger="click" class="international" @command="handleSetLanguage">
    <div>
      <svg-icon class-name="international-icon" icon-class="language" />
    </div>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item :disabled="language==='zh_CN'" command="zh_CN">
        中文
      </el-dropdown-item>
      <el-dropdown-item :disabled="language==='en_US'" command="en_US">
        English
      </el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>

<script>
import {changeLanguages} from "../../api/system/language";
import Cookies from "js-cookie";
export default {
  computed: {
    language() {
      return this.$store.getters.language
    }
  },
  methods: {
    handleSetLanguage(lang) {
      this.$i18n.locale = lang
      this.$store.dispatch('app/setLanguage', lang)
      //请求后端,后端切换语言
      changeLanguages(lang).then(response => {
        console.info("change-language:" + lang);
        window.location.reload();
        this.$message({
          message: this.$t("message.setLanguageSuccess"),
          type: 'success'
        })
      });
    }
  }
}
</script>

8、使用方式

普通文本使用方:    {{ $t('login.title') }}
标签内使用方式:   :placeholder="$t('login.password')"
js内使用方式:     this.$t('login.user.password.not.match')

二、后端国际化支持

1、添加I18nConfig配置文件

@Configuration
public class I18nConfig implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        //设置默认语言,中文
        slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        //参数名与前端changeLanguages方法携带参数名一致
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

2、添加messages_en_US.properties和messages_zh_CN.properties文件

springboot前后端分离国际化,vue.js,spring boot,前端
messages_en_US.properties文件

addSuccess=Add Success
#......

messages_zh_CN.properties文件文章来源地址https://www.toymoban.com/news/detail-761540.html

addSuccess=新增成功
#......

3、application.yml配置

# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages

4、新建controller文件,添加接口changeLanguages供给前端调用,修改语言使用

@RestController
public class LanguageController {

    @GetMapping("/changeLanguages")
    public AjaxResult changeLanguages(String lang) {
        return AjaxResult.success();
    }

    /**
     * 测试接口--后端根据前端设置的语言返回相应语言的文字 MessageUtils.message("addSuccess")
     * @return
     */
    @GetMapping("/test")
    public AjaxResult test(){
        return AjaxResult.success(MessageUtils.message("addSuccess"));
    }
}

5、MessageUtils.java文件

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import com.dcms.common.utils.spring.SpringUtils;

public class MessageUtils
{
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String message(String code, Object... args)
    {
        MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}

三、异常报错处理

1、前端报错 in ./node_modules/vue-i18n/dist/vue-i18n.esm-bundler.js "export ‘Fragment’ was not found in ‘vue’

报错原因是:
	i18n版本太高了,与当前VUE版本不谦容;
解决:
	查看版本:npm view vue-i18n versions。选择其中一个低版本,不要太低的。
	我的项目vue版本是:2.6.14,选择的vue-i18n如下:npm install vue-i18n@8.23.0

到了这里,关于SpringBoot+Vue前后端分离项目国际化支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot复习:(36)国际化

    一、Resources目录下建立一个目录(比如international)来存储资源文件 message.properties 空的,但不能没有 message_zh_CN.properties message_en_us.properties 二、自动配置类MessageSourceAutoConfiguration 常量MESSAGE_SOURCE_BEAN_NAME为messageSource,也就是有这个名字的bean,则自动配置失效。 因为有@Conditional(R

    2024年02月13日
    浏览(43)
  • SpringBoot集成国际化多语言配置

    在当今全球化的环境下,为了更好地满足用户的多语言需求,越来越多的应用程序需要支持国际化多语言配置。Spring Boot作为一种快速开发框架,提供了方便的国际化支持,使得应用程序可以轻松地适应不同的语言环境。通过集成Spring Boot的国际化多语言配置,应用程序可以根

    2024年02月07日
    浏览(48)
  • springboot~国际化Locale正确的姿势

    Java中的Locale.getDefault()获取的是操作系统的默认区域设置,如果需要获取客户端浏览器的区域设置,可以从HTTP头中获取\\\"Accept-Language\\\"的值来进行解析。 Java网站中实现国际化(多语言支持)通常需要涉及以下几个方面: 为所有可见的文本(如按钮、标签、提示等)都提供多语言

    2024年02月05日
    浏览(37)
  • vue2+element-ui使用vue-i18n进行国际化的多语言/国际化

    注意:vue2.0要用8版本的,使用9版本的会报错 在src目录下,创建新的文件夹,命名为i18n zh.js en.js index.js main.js 使用方式一 效果图 使用方式二 效果图 使用方式三,在 效果图 ` 注意:这种方式存在更新this.$i18n.locale的值时无法自动切换的问题,需要刷新页面才能切换语言。解

    2024年02月07日
    浏览(61)
  • SpringBoot第13讲:SpringBoot接口如何参数校验国际化

    本文是SpringBoot第13讲,上文我们学习了如何对SpringBoot接口进行参数校验,但是如果需要有国际化的信息(比如返回校验结果有中英文),应该如何优雅处理呢? 软件的国际化 :软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相

    2024年02月12日
    浏览(33)
  • 项目国际化的难点痛点是什么

    如果有做过项目国际化的应该了解, 国际化的工作项大概包括以下几项: 【词条相关工作】 文本包裹翻译函数,如 $t 提取翻译词条到 json 文件里 翻译并更新 json 文件 【三方库相关工作】 组件库的国际化配置,如 element-ui 组件库 其他有词条场景的三方库的国际化配置 【图片

    2024年02月03日
    浏览(41)
  • 国内项目国际化后金额处理方案

      目标 : 已有的国内项目,需要部署国际化。需要考虑币种、金额货币精度、多语言、汇率、税等一系列问题。这里主要说的就是其中金额精度的处理。 现状 : 日常国内项目里,界面输入的金额是元,然后数据库存储以及与其他系统交互都是用的分,也是就固定的货币精

    2024年02月05日
    浏览(54)
  • SpringBoot - SpringBoot整合i18n实现消息国际化

    在我们开发WEB项目的时候,项目可能涉及到在国外部署或者应用,也有可能会有国外的用户对项目进行访问,那么在这种项目中, 为客户展现的页面或者操作的信息就需要根据客户系统的环境来使用不同的语言,这就是我们所说的项目国际化。 1. MessageSource源码 Spring中定义了

    2024年02月03日
    浏览(43)
  • vue 前端 + 若依(ruoyi)后端 实现国际化

    记录一下,前端使用vue,后端使用若依(ruoyi,基于spring-boot)实现页面,后端返回提示信息国际化 vue:2.6.12 vue-i18n:^8.27.2 安装vue-i18n,注:最新的交于该版本有差异,所以指定使用版本:8.27.2 添加国际化js文件:language.en_US.js 添加国际化js文件:language.zh_CN.js 添加i18n.js ma

    2024年02月12日
    浏览(47)
  • Vue 国际化之 vue-i18n 的使用

    目录 一、安装 二、使用 1、准备语言包 2、准备翻译的语言环境 3、实现语言翻译 三、整合 ElementUI 语言包 1、扩展中文 2、扩展英文  3、使用扩展语言翻译 四、问题记录 五、扩展 vue3 中使用 vue-i18n 如果在一个模块系统中使用它,你必须通过  Vue.use()  明确地安装  vue-i18n

    2024年03月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包