我想将i18n添加到我的网站项目中。
但我打印出乱码,之前:
后:
以下是页面代码的页面摘要:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<c:set var="language"
value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}"
scope="session"/>
<fmt:setLocale value="${language}"/>
<fmt:setBundle basename="com.java.task11.i18n.text"/>
<html lang="${language}">
<head>
<title>Profile Info</title>
<jsp:include page="parts/header.jsp"/>
</head>
<body>
<div class="container-fluid users-table">
<%--navbar--%>
<div class="row">
<div class="col-md-10 col-xs-12 col-md-offset-1 table-nav">
<jsp:include page="parts/navbar.jsp"/>
</div>
</div>
和navbar.jsp
的摘要:
<li class="lang">
<a href="<%= request.getContextPath()%>?language=${language == 'ua' ? 'en' : 'uk'}">
${language == 'ua' ? 'EN' : 'UKR'}
</a>
</li>
以下是资源包:
我无法弄清楚为什么会这样?
如何解决这个问题?
答案 0 :(得分:0)
我的假设是你使用ResourceBundle
。
不幸的是,出于向后兼容性的原因,它无法以ISO-8859-1之外的任何其他编码方式读取属性文件。您的属性文件似乎以UTF-8编码。
演示:让我们在类路径的根目录中取一个文件名t.properties
,其内容以UTF-8编码:
mouton = bêêêê
现在,让我们尝试打印出这个mouton
密钥:
final ResourceBundle bundle = ResourceBundle.getBundle("t");
System.out.println(bundle.getString("mouton"));
输出:
bêêêê
垃圾。
这就是我开发this library没有这个问题的原因;它可以读取UTF-8中的i18n属性文件。示范:
// Reads in UTF-8 by default; can choose any encoding
final MessageBundle bundle = PropertiesBundle.forPath("t");
System.out.println(bundle.getMessage("mouton"));
输出:
bêêêê
正确!
“有趣”的是,它使用method which is available in Properties
(自1.6起)但ResourceBundle
不使用,也没有提供使用它的方法......
答案 1 :(得分:0)
我找到了解决方案:
写入 unicode 符号。为此:
IDEA - 具有特殊的“透明原生到ASCII转换”选项(设置&gt;文件编码)。