返回顶部
首页 > 资讯 > 精选 >java怎么实现多语言配置i18n
  • 217
分享到

java怎么实现多语言配置i18n

2023-06-20 19:06:05 217人浏览 薄情痞子
摘要

本篇内容主要讲解“java怎么实现多语言配置i18n”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现多语言配置i18n”吧!java 实现多语言配置i18n1、创建资源包和资源文件

本篇内容主要讲解“java怎么实现多语言配置i18n”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现多语言配置i18n”吧!

java 实现多语言配置i18n

1、创建资源包和资源文件

一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。

例如:一个资源包的基名是“inspectionJSONMsg”,则与中文、英文环境相对应的资源文件名则为: "inspectionjsonMsg_zh_CN.properties" "inspectionJsonMsg_en_US.properties"

java怎么实现多语言配置i18n

2、资源文件的书写格式

资源文件的内容通常采用"关键字=值"的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,属性(properties)文件是不能保存中文的,对于像中文这样的非ACSII字符,须先进行编码

例如:

国际化的中文环境的properties文件

java怎么实现多语言配置i18n

国际化的英文环境的properties文件

java怎么实现多语言配置i18n

3、在spring配置文件中增加多语言配置

applicationContext.xml

<!--多语言的配置 开始--><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"><property name="basenames"><list><value>language/inspectionJsonMsg</value></list></property> <property name="defaultEncoding" value="UTF-8" /></bean>  <bean id="localeResolver" class="org.springframework.WEB.servlet.i18n.CookieLocaleResolver"><property name="cookieName" value="spmsLanguage"/><property name="cookieMaxAge" value="94608000"/><property name="defaultLocale" value="zh_CN" /></bean><!--多语言的配置 结束-->

4、如何使用

(1)编写常量类
public class InspectionConst { //设备查询成功public static final String INSPECTION_DEVICE_QUERY_SUCCESS = "ny.spms.java.inspection.device.query.success";//设备查询失败public static final String INSPECTION_DEVICE_QUERY_ERROR = "ny.spms.java.inspection.device.query.error";}
(2)编写I18n工具类,I18nUtil.java
package com.hikvision.energy.util.i18n; import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.MessageSource;import org.springframework.context.MessageSourceResolvable;import org.springframework.context.i18n.LocaleContextHolder; import com.hikvision.energy.core.util.AppContext; import java.util.Locale; public class I18nUtil {     private static MessageSource messageSource;     private final static Logger log = LoggerFactory.getLogger(I18nUtil.class);     static {        messageSource = AppContext.getBean("messageSource");    }        public static String getMessage(String code){        return getMessage(code,null,getLocal());    }     public static String getMessage(String code,Locale locale){        return getMessage(code,null,locale);    }         public static String getMessage(String code,String defaultMessage){        return getMessage(code,null,defaultMessage,getLocal());    }        public static String getMessage(String code,Object[] args){        return getMessage(code,args,getLocal());    }     public static String getMessage(String code,Object[] args,String defaultMessage,Locale locale){        return messageSource.getMessage(code,args,defaultMessage,locale);    }     public static String getMessage(String code, Object[] args, Locale locale){        try{            return messageSource.getMessage(code,args,locale);        }catch (Exception e){            log.error("Query message value by key[{}] error. The reason is:"+e.getMessage(),code);            return null;        }     }     public static String getMessage(MessageSourceResolvable resolvable, Locale locale){        try{            return messageSource.getMessage(resolvable,locale);        }catch (Exception e){            log.error("Query message value error. The reason is:"+e.getMessage());            return null;        }     }     //解析用户区域    public static Locale getLocal() {        return LocaleContextHolder.getLocale();    }}
(3)具体使用:
I18nUtil.getMessage(InspectionConst.TEMPORARY_JOB_OVER_BEGIN_TIME, new Object[]{InspectionConst.TEMPORARA_TIME})

I18nUtil.getMessage(InspectionConst.INSPECTION_TEMPORARY_JOB_ADD_SUCCESS)

Java I18N国际化

i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。

这就要求,仅仅是页面语言的翻译是不够的,即便在一个国家在不同地区都可能会存在不同习惯方言操作习惯等等(例如我们国家搜索结果习惯左对齐,但是有的国家就习惯右对齐),这就导致了“本地化”(L10n)机制的出现。

国际化和本地化的出现,在语言、文化、书写习惯、阅读习惯、符合当地主题的全面配置,使得一个Web应用程序在运行时能够根据客户端请求所来自的国家和语言显示不同的用户界面。

【示例】

根据以上简介和查看的具体软件的配置,理解一下i18n吧,所以小编查看了一下QQ的i18n配置文件,如下:

<?xml version="1.0" encoding="utf-8" ?><i18n><!-- 默认的语言,以主程序的优?--><locale id="2052" /><!-- 语言文字列表 --><StringBundle><configfile name="GFStringBundle.xml"/><configfile name="StringBundle.xml"/><configfile name="UrlBundle.xml"/></StringBundle><!-- 地区信息,目前只需要一?--><Location2><configfile name="LocList.xml"/></Location2><LangList><configfile name="LangList.xml"/></LangList></i18n>

又查看了一下要读取的LangList.xml文件,很壮观,如下:

<?xml version="1.0" encoding="utf-8"?><Languages><Language LCID="1078" Name="南非荷兰语" Code="af"/><Language LCID="1052" Name="阿尔巴尼亚语" Code="sq"/><Language LCID="1025" Name="阿拉伯语" Code="ar"/><Language LCID="1067" Name="亚美尼亚语" Code="hy"/><Language LCID="2092" Name="阿塞拜疆语" Code="az"/><Language LCID="1059" Name="白俄罗斯语" Code="be"/><Language LCID="5146" Name="波斯尼亚语" Code="bs-ba"/><Language LCID="1026" Name="保加利亚语" Code="bg"/><Language LCID="1109" Name="缅甸语" Code="my"/><Language LCID="3076" Name="中文(繁体)" Code="zh-hk"/><Language LCID="1027" Name="加泰罗尼亚语" Code="ca"/><Language LCID="1050" Name="克罗地亚语" Code="hr"/><Language LCID="1029" Name="捷克语" Code="cs"/><Language LCID="1030" Name="丹麦语" Code="da"/><Language LCID="1043" Name="荷兰语" Code="nl"/><Language LCID="1033" Name="英语" Code="en-us"/><Language LCID="1061" Name="爱沙尼亚语" Code="et"/><Language LCID="1065" Name="波斯语" Code="fa"/><Language LCID="1035" Name="芬兰语" Code="fi"/><Language LCID="1036" Name="法语" Code="fr"/><Language LCID="2108" Name="盖尔语" Code="gd"/><Language LCID="1031" Name="德语" Code="de"/><Language LCID="1032" Name="希腊语" Code="el"/><Language LCID="1095" Name="古吉拉特语" Code="gu"/><Language LCID="1037" Name="希伯来语" Code="he"/><Language LCID="1081" Name="印地语" Code="hi"/><Language LCID="1038" Name="匈牙利语" Code="hu"/><Language LCID="1039" Name="冰岛语" Code="is"/><Language LCID="1057" Name="印度尼西亚语" Code="id"/><Language LCID="1040" Name="意大利语" Code="it"/><Language LCID="1041" Name="日语" Code="ja"/><Language LCID="1107" Name="高棉语" Code="km"/><Language LCID="1042" Name="朝鲜语" Code="ko"/><Language LCID="1108" Name="老挝语" Code="lo"/><Language LCID="1062" Name="拉脱维亚语" Code="lv"/><Language LCID="1063" Name="立陶宛语" Code="lt"/><Language LCID="1071" Name="马其顿语" Code="mk"/><Language LCID="1086" Name="马来西亚语" Code="ms"/><Language LCID="2052" Name="中文(简体)" Code="zh-cn"/><Language LCID="1104" Name="蒙古语" Code="mn"/><Language LCID="1044" Name="挪威语" Code="no"/><Language LCID="1045" Name="波兰语" Code="pl"/><Language LCID="2070" Name="葡萄牙语" Code="pt"/><Language LCID="1094" Name="旁遮普语" Code="pa"/><Language LCID="1048" Name="罗马尼亚语" Code="ro"/><Language LCID="1049" Name="俄语" Code="ru"/><Language LCID="3098" Name="塞尔维亚语" Code="sr"/><Language LCID="1113" Name="信德语" Code="sd"/><Language LCID="1051" Name="斯洛伐克语" Code="sk"/><Language LCID="1060" Name="斯洛文尼亚语" Code="sl"/><Language LCID="1143" Name="索马里语" Code="so"/><Language LCID="1034" Name="西班牙语" Code="es"/><Language LCID="1089" Name="斯瓦西里语" Code="sw"/><Language LCID="1053" Name="瑞典语" Code="sv"/><Language LCID="1097" Name="泰米尔语" Code="ta"/><Language LCID="1092" Name="鞑靼语" Code="tt"/><Language LCID="1054" Name="泰语" Code="th"/><Language LCID="1055" Name="土耳其语" Code="tr"/><Language LCID="1058" Name="乌克兰语" Code="uk"/><Language LCID="1056" Name="乌尔都语" Code="ur"/><Language LCID="1066" Name="越南语" Code="vi"/><Language LCID="1106" Name="威尔士语" Code="cy-gb"/><Language LCID="1085" Name="意第绪语" Code="yi"/><Language LCID="1130" Name="约鲁巴语" Code="yo"/></Languages>

【实践】

1.locale方法

Java.Util中有一个locale方法,该方法的其中一个构造方法为:

Locale(Stringlanguage,String country):根据语言和国家构造一个语言环境。每个国家都有一个locale信息,通过对象可以取得locale信息,locale信息来源于操作系统。如下:

package com.bjpowernode.i18n; import java.util.Locale; public class I18nSample {  public static void main(String[] args) {   Locale defaultLocale = Locale.getDefault();  System.out.println("country=" + defaultLocale.getCountry());  System.out.println("language=" + defaultLocale.getLanguage());  }}

运行结果为:

country=CN

language=zh

但是在我们下面的实践中,为了方便我们就直接进行设置了。

2.ResourceBundle资源包

我们需要将硬编码文本转移到外部的资源文件,对资源文件的命名必须使用一定的规则,一般是以“统一字符+locale信息”命名,如MessagesBundle_zh_CN.properties,MessagesBundle_en_US.properties。准备资源包的过程,就是把对应不同语言的用户所涉及的文本和图片保存在多个文本文件中,客户端根据不同的环境需要进行更换。这些文件被称为“属性文件”,所有属性文件合在一起被称为资源包(ResourceBundle)。

因为资源文件必须是Latin-1后者Unicode编码的字符,所以实践过程中,准备英文好说,准备中文的话,需要使用相应的Unicode编码,使用jdk自带的native2ascii.exe,将中文资源文件进行转换,如下:

如下:

java怎么实现多语言配置i18n

java怎么实现多语言配置i18n

也可以直接在资源文件中添加,会自动转换成Unicode编码,如下:

java怎么实现多语言配置i18n

结果如下:

java怎么实现多语言配置i18n

Demo中我们中文和英文准备的都是:k1=你好/hello,k2=再见/Goodbye。

【实践代码】

package com.bjpowernode.i18n; import java.text.MessageFORMat;import java.util.Locale;import java.util.ResourceBundle; public class I18nSample { public static void main(String[] args) {// 为了实验,就不每次都修改操作系统的语言了,直接设置locale信息// Locale currentLocale = new Locale("zh", "CN");Locale currentLocale = new Locale("en", "US"); System.out.println("country=" + currentLocale.getCountry());System.out.println("language=" + currentLocale.getLanguage()); // 根据locale信息寻找相应的资源包中的配置ResourceBundle rb = ResourceBundle.getBundle("com.bjpowernode.resources.MessagesBundle", currentLocale);System.out.println(rb.getString("k1"));System.out.println(rb.getString("k2"));// 在配置文件中用占位符来加入自定义设置,如登陆时显示:你好,***MessageFormat mf = new MessageFormat(rb.getString("k1"));System.out.println(mf.format(new Object[] { "张三" }));}}

运行结果为:

country=US

language=en

hello,{0}

good bye

hello,张三

到此,相信大家对“java怎么实现多语言配置i18n”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: java怎么实现多语言配置i18n

本文链接: https://lsjlt.com/news/299748.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java怎么实现多语言配置i18n
    本篇内容主要讲解“java怎么实现多语言配置i18n”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现多语言配置i18n”吧!java 实现多语言配置i18n1、创建资源包和资源文件...
    99+
    2023-06-20
  • java 如何实现多语言配置i18n
    java 实现多语言配置i18n 1、创建资源包和资源文件 一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。 例如:一...
    99+
    2024-04-02
  • 前端不使用i18n该如何优雅的实现多语言
    目录前言:一、业务需求1. 确定业务2.  实现思路二、实现步骤    1. 新建 VFrame.js 文件 2. main.js 中 使用我...
    99+
    2023-01-18
    前端实现多语言切换 前端多语言方案 多语言网站的实现
  • vue与vue-i18n如何实现后台数据的多语言切换功能
    小编给大家分享一下vue与vue-i18n如何实现后台数据的多语言切换功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在XXX...
    99+
    2024-04-02
  • 基于springboot i18n国际化后台多种语言设置的方式
    之前有做过手机端后台的国际化,因为手机统一传递了language参数 所以只要设置LocaleChangeInterceptor就行了 @Configuration publi...
    99+
    2024-04-02
  • C#中怎么实现多语言
    这篇文章给大家介绍C#中怎么实现多语言,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#实现多语言的方法是通过配置文件实现,通过从配置文件中读取资源,然后在显示窗口的时候,即Load()方法中,动态显示相应的选择语言。...
    99+
    2023-06-17
  • go语言多线程怎么实现
    在Go语言中,可以使用goroutine来实现多线程。goroutine是Go语言中的轻量级线程,可以同时运行在一个操作系统线程上。...
    99+
    2023-10-21
    go语言
  • Java语言怎么实现爬虫
    这篇文章给大家分享的是有关Java语言怎么实现爬虫的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么我们要爬取数据在大数据时代,我们要获取更多数据,就要进行数据的挖掘、分析、筛选,比如当我们做一个项目的时候,需...
    99+
    2023-06-22
  • .Net多语言配置的用法
    这篇文章主要介绍“.Net多语言配置的用法”,在日常操作中,相信很多人在.Net多语言配置的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.Net多语言配置的用法”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-15
  • thinkphp6配置多语言详细版
    一、项目架构 www  项目部署目录 │  ├─app  多应用目录 │  │  ├─api  应用目录 │  │  │  ├─config  应用配置目录 │  │  │  │  ├─lang.php  扩展多语言配置 │  │  │  ...
    99+
    2023-09-01
    php apache 服务器
  • MySQL中怎么实现多实例配置
    MySQL中怎么实现多实例配置,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是MySQL多实例?简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:...
    99+
    2023-06-20
  • c语言怎么实现多次输入
    在C语言中,可以使用循环结构来实现多次输入。常见的循环结构有while循环、do-while循环和for循环。以下是三种循环结构的示...
    99+
    2023-08-26
    c语言
  • ASP中怎么实现多语言网站
    在ASP中实现多语言网站可以通过以下步骤来实现: 创建多个资源文件:首先在项目中创建多个资源文件,每个资源文件对应一种语言,用来...
    99+
    2024-04-09
    ASP
  • 【android studio 简单配置多语言国际化app 一行代码实现切换语言】
    文章目录 前言一、语言文件二、一行代码切换语言1.切换语言2.保存语言状态3.界面闪动解决之返回主界面 总结 前言 新版本的android studio配置多语言其实很简单,不过目前网上找到的几个博客都搞得很复杂,可能是版...
    99+
    2023-08-16
    android studio android ide 自动翻译
  • 怎么在MySQL中实现多实例配置
    这篇文章将为大家详细讲解有关怎么在MySQL中实现多实例配置,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.1 什么是Mysql多实例简单的说,Mysql...
    99+
    2024-04-02
  • vue element plus多语言切换怎么实现
    这篇文章主要讲解了“vue element plus多语言切换怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue element plus多...
    99+
    2023-06-22
  • c语言多线程并行怎么实现
    在C语言中,可以使用pthread库来实现多线程并行。1. 首先,需要包含pthread.h头文件。```c#include ```...
    99+
    2023-09-14
    c语言
  • C语言怎么实现多项式加减
    在C语言中,可以使用数组来表示多项式。数组的下标表示多项式的指数,数组的值表示多项式的系数。以下是一个示例代码,用于实现两个多项式的...
    99+
    2023-08-18
    C语言
  • c语言怎么实现多项式相加
    在C语言中,可以通过定义一个多项式结构体来表示多项式,然后定义相应的函数来实现多项式的相加。首先,我们可以定义一个包含系数和指数的结...
    99+
    2023-08-18
    c语言
  • Java语言怎么实现基数排序
    这篇文章主要介绍Java语言怎么实现基数排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!算法思想:依次按个位、十位...来排序,每一个pos都有分配过程和收集过程,array[i][0]记录第i行数据的个数。pac...
    99+
    2023-05-30
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作