【第18章】spring-mvc之国际化(i18n)

文章目录


前言

【第19章】spring-i8n

在mvc的基础上,我们可以通过界面完成浏览器和服务端的交互,可以更好地展示国际化功能;

本章节依旧以北京车展为案例。


一、准备

1. resource

2. 数据

数据文件已上传附件

二、前端

界面只展示关键部分

1.界面

html 复制代码
<div id="smv_con_382_54" ctype="text" class="esmartMargin smartAbs "
    cpid="30536" cstyle="Style1" ccolor="Item2" areaid="Area0"
    iscontainer="False" pvid="con_1_35" tareaid="" re-direction="all"
    daxis="All" isdeletable="True"
    style="height: 85px; width: 761px; left: 11px; top: 385px; z-index: 1000012;">
   <div class="yibuFrameContent con_382_54  text_Style1  "
        style="overflow: hidden; z-index: 1;">
       <div id="txt_con_382_54" style="height: 100%; z-index: 1;">
           <div class="editableContent" id="txtc_con_382_54"
                style="height: 100%; overflow-wrap: break-word; z-index: 1;">
               <p style="z-index: 1;"><span
                       style="color: rgb(238, 238, 238); z-index: 1;"><strong
                       style="z-index: 1;"><span
                       style="font-size: 40px; z-index: 1;"><span id="message_001"
                       style="font-family: &quot;Source Han Sans&quot;, Geneva, sans-serif; z-index: 1;">2024(第十八届)北京国际汽车展览会</span></span></strong></span>
               </p>

           </div>
       </div>

       <script style="z-index: 1;">
           var tables = $(' #smv_con_382_54').find('table')
           for (var i = 0; i < tables.length; i++) {
               var tab = tables[i]
               var borderWidth = $(tab).attr('border')
               if (borderWidth <= 0 || !borderWidth) {
                   console.log(tab)
                   $(tab).addClass('hidden-border')
                   $(tab).children("tbody").children("tr").children("td").addClass('hidden-border')
                   $(tab).children("tbody").children("tr").children("th").addClass('hidden-border')
                   $(tab).children("thead").children("tr").children("td").addClass('hidden-border')
                   $(tab).children("thead").children("tr").children("th").addClass('hidden-border')
                   $(tab).children("tfoot").children("tr").children("td").addClass('hidden-border')
                   $(tab).children("tfoot").children("tr").children("th").addClass('hidden-border')
               }
           }
       </script>
   </div>
</div>

2.脚本

javascript 复制代码
<script type="text/javascript" style="z-index: 1;">

    $(function () {
        i18n("zh-CN");
        $('#smv_con_392_54').on("click", "li.w-language-item a", function () {
            var locale = $(this).attr("languageculture");
            i18n(locale);
        })
        $("#div_con_391_2").remove();
    });
    function i18n(locale){
        console.log(locale)
        $.ajax({
            url: '${pageContext.request.contextPath}/i18n',
            type: 'POST', // 或者 'POST', 'PUT' 等
            beforeSend: function(xhr) {
                xhr.setRequestHeader('accept-language', locale);
            },
            success: function(data) {
                console.log(data); // 打印返回的数据
                $("#message_001").text(data.message_001)
                // 创建新的子元素
                var newChild = $('<div id="txt_con_383_29" style="height: 100%; z-index: 1;">'+
                    '    <div class="editableContent" id="txtc_con_383_29" style="height: 100%; overflow-wrap: break-word; z-index: 1;">'+
                    '        <p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;"><strong style="z-index: 1;"><span style="font-family: &quot;Source Han Sans&quot;, Geneva, sans-serif; z-index: 1;">'+data.message_002+'</span></strong></span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_003+'</span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_004+'</span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_005+'</span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_006+'</span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;">&nbsp;</p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;"><strong style="z-index: 1;"><span style="font-family: &quot;Source Han Sans&quot;, Geneva, sans-serif; z-index: 1;">'+data.message_007+'</span></strong></span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_008+'</span></span></span></p>'+
                    '<p style="text-align: justify; z-index: 1;"><span style="color: rgb(238, 238, 238); z-index: 1;"><span style="line-height: 1.75; z-index: 1;"><span style="font-size: 18px; z-index: 1;">'+data.message_009+'</span></span></span></p>'+
                    '    </div>'+
                    '</div>');
                $('#txt_con_383_29').remove();
                $('#smv_con_391_2 >.yibuFrameContent').append(newChild);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.error('Error: ' + textStatus, errorThrown);
            }
        });
    }
</script>

三、后端

java 复制代码
package org.example.springmvc.i18n;

import com.alibaba.fastjson2.JSONObject;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;

/**
 * Create by zjg on 2024/5/4
 */
@RestController
public class I18nController {
    @RequestMapping("/i18n")
    public JSONObject i18n(HttpServletRequest request, AcceptHeaderLocaleResolver localeResolver){
        Locale locale = localeResolver.resolveLocale(request);
        ResourceBundle bundle = ResourceBundle.getBundle("autoshow", locale);
        Set<String> strings = bundle.keySet();
        JSONObject jsonObject=new JSONObject();
        strings.forEach((k)->{jsonObject.put(k,bundle.getString(k));});
        return jsonObject;
    }
}

四、效果

1. 中文(默认)

2.英文


总结

回到顶部
官方文档

大公司,有专门的前端同学,搞两套界面就可以了,扩展性更好,这种方式更适合前后端在一块的项目。

在一起,才是中国汽车,祝雷总大卖!

相关推荐
摇滚侠15 分钟前
SpringMVC 入门到实战 配置类替换 XML 配置文件 86-91
xml·java·后端·spring·maven·intellij-idea
栗子~~17 分钟前
金融场景下BigDecimal 运算规范 + 常用场景使用 + 数据库字段设计详解
java·数据库·金融
我登哥MVP20 分钟前
SpringCloud Alibaba 核心组件解析:服务注册与发现(Nacos)
java·spring boot·后端·spring·spring cloud·java-ee·maven
兰令水26 分钟前
leecodecode【单调栈】【2026.6.12打卡-java版本】
java·开发语言·算法
云烟成雨TD31 分钟前
Agent Scope Java 2.x 系列【8】工具调用
java·人工智能·agent
AI人工智能+电脑小能手39 分钟前
【大白话说Java面试题 第112题】【并发篇】第12题:AQS 中节点的入队时机有哪些?
java·开发语言·面试
摇滚侠39 分钟前
SpringMVC 入门到实战 处理静态资源的过程 64
java·后端·spring·maven·intellij-idea
影寂ldy40 分钟前
C# 泛型委托
java·算法·c#
摇滚侠41 分钟前
MyBatis 入门到项目实战 MyBatis 核心配置文件 15-19
java·tomcat·mybatis
IT WorryFree41 分钟前
Zabbix 7.4 API 可同步全量参数清单(同步第三方系统专用)
java·开发语言·zabbix