- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在互联网上我找到了一本书叫JSF 2.0 cookbook .
我骑了第 7 章(国际化),我发现它很简单,我自己尝试了那里的一切,除了使用来自俄语、阿拉伯语、塞尔维亚语等语言的字符外,一切都很好
书上是这样说的:
A common problem when using Arabic, Chinese, Russian characters (and so on) sounds like this: "I can type such characters in an inputText component, but when I submit the form, the inserted text is displayed in Unicode characters, instead of human readable characters. How to fix this?". The solution is very simple. All you have to do is to write the following line in your JSF page:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
这正是我所做的。我在我的主要 JSF 模板的第一行代码中添加了该行。但它没有用。我错过了什么?我所有的本地化属性文件都配置为使用 UTF-8:
我也在我的 h:head 标签中尝试了这一行:
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
我还需要什么才能在我的页面中看到用俄语、阿拉伯语编写的文本...当我更改为 ru、ar 或 sr 语言环境时,我唯一看到的是这样的文本:
ÙبØØ« Ù٠صÙØات ÙÙÙØ© ÙÙسÙ
更新在阅读了一些关于本地化的文章后,我得出的结论是我的应用程序需要进行转换才能呈现特殊字符(我不喜欢属性文件中转义字符的解决方案)。我在这个链接上关注一个例子:http://jdevelopment.nl/internationalization-jsf-utf8-encoded-properties-files/
我了解其中的大部分内容,但是当我尝试在我的应用程序中执行此操作时,我发现我仍然在浏览器上看到垃圾信息。我尝试了各种方法,但都没有用:
这是我组织文件的方式:
这是我的 faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<message-bundle>resources.application</message-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<supported-locale>it</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>sr</supported-locale>
<supported-locale>ar</supported-locale>
<supported-locale>ru</supported-locale>
</locale-config>
<!-- Localization files configuration -->
<resource-bundle>
<!-- Path to the file -->
<base-name>resources.messages</base-name>
<!-- Variable representation of the file -->
<var>msgs</var>
</resource-bundle>
</application>
</faces-config>
这是我在上面的链接中找到的一个文件,能够进行转换:
package support;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Enumeration;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import javax.faces.context.FacesContext;
public class TextBunddle extends ResourceBundle {
protected static final String BUNDLE_NAME = "resources.messages";
protected static final String BUNDLE_EXTENSION = "properties";
protected static final Control UTF8_CONTROL = new UTF8Control();
public TextBunddle() {
setParent(ResourceBundle.getBundle(BUNDLE_NAME,
FacesContext.getCurrentInstance().getViewRoot().getLocale(), UTF8_CONTROL));
}
@Override
protected Object handleGetObject(String key) {
return parent.getObject(key);
}
@Override
public Enumeration getKeys() {
return parent.getKeys();
}
protected static class UTF8Control extends Control {
public ResourceBundle newBundle
(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException
{
// The below code is copied from default Control#newBundle() implementation.
// Only the PropertyResourceBundle line is changed to read the file as UTF-8.
String bundleName = toBundleName(baseName, locale);
String resourceName = toResourceName(bundleName, BUNDLE_EXTENSION);
ResourceBundle bundle = null;
InputStream stream = null;
if (reload) {
URL url = loader.getResource(resourceName);
if (url != null) {
URLConnection connection = url.openConnection();
if (connection != null) {
connection.setUseCaches(false);
stream = connection.getInputStream();
}
}
} else {
stream = loader.getResourceAsStream(resourceName);
}
if (stream != null) {
try {
bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
} finally {
stream.close();
}
}
return bundle;
}
}
}
我认为错误在 faces-config.xml 中,但我不知道我应该如何配置文件,以便在我的页面中使用这样的命令时能够看到本地化消息:
#{msgs.mainbaner}
当我请求更改语言时,firebug 是这样说的:
最佳答案
<%@page contentType="text/html" pageEncoding="UTF-8"%>
这就是 JSP 语法。这是没有意义的。您使用的 Facelets 已经默认使用 UTF-8。
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
如果您通过 HTTP 服务页面而不是从本地磁盘文件系统打开,这是毫无值(value)的。
如果您看到垃圾,则问题是由其他原因引起的。我建议您花些时间阅读这篇文章:Unicode - How to get the characters right?
至少,JSF2/Facelets 的关键点是:
ResourceBundle
风格的解决方法,这样您就可以在属性文件中使用 UTF-8。关于java - 如何以塞尔维亚语、俄语和阿拉伯语显示文本 (JSF 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7060752/
这个问题已经有答案了: What is the Java ?: operator called and what does it do? (17 个回答) 已关闭 8 年前。 ltVal = node
我是一名 Java 学生,我在嵌套该程序的条件语句时遇到问题 Exercise CozaLozaWoza (Loop & Condition): Write a program called Coza
首先,我想给出用户想要留下的句子的数量,当他的写作结束时,我的代码开始将每个单词的第一个字母大写(在 Java 中)。 import java.util.Scanner; public class I
我尝试在基类中实现一个函数,该函数使用子函数(defiend 作为基类中的抽象函数)。我认为一个例子可以最好地说明这个问题。 abstract class Animal{ public void
就像在口吃中一样,如果文本为“dean”并且乘数为 3,则结果将是“dddeeeaaannn”。 public static void repeatLetters() { String text
public void insert(int data) { if (root == null) root = new AVLNode(data); else {
我是 XPATH 的新手,并且遇到以下问题: 我有以下代码片段,但似乎无法按我的预期工作: String XML = cdataContent;
例如,Java 数据类型字节将数据从 -128 到 127 存储在单个字节中。为了能够区分 - 1 到 -128 从 0 到 127 将需要额外的数据,这些数据将采用数据类型覆盖其分配的存储空间。不可
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
Dataset: P1: Lion, Snow, Chair P2: Min: 0, Max: 28 P3: Min: 34, Max is 39. 我的程序 以一系列数组列表的形式提供上述数据集(P
我正在构建一个应该 24/7 全天候运行的客户端服务器应用程序。应用程序指定检测网络故障(使用心跳)并尽快重新连接到服务器。 我做的第一个测试只是停止客户端或服务器,然后重新启动,一切正常。我想知道是
我怀疑它是编写它的类的类型,但我不是 100% 确定,有人可以证实我的怀疑并可能提供对定义此行为的 Java 语言规范的引用吗? 假设类 A 有一个方法 a(),它在其主体中使用了 this 关键字,
我已经在谷歌上搜索了两个小时,但没有成功。 如果我有一个模板函数并且我想在模板类型上强制执行一个接口(interface),我该怎么做? 例如。 void doStuff(T)(bool param)
我正在尝试获取用户输入并对其进行修改,以便打印不带任何元音的字符串。我已经能够使用以下代码成功完成此操作。 Scanner in = new Scanner(System.in); Syste
每当我使用 Thread.sleep(); 时在 do while 循环中,提示告诉我,“在循环中调用 Thread.sleep 可能会导致性能问题。”我从许多其他网站和书籍上听到过这一点。我可以用什
请不要将其视为以下内容的重复项而将其忽略: How to generate random positive and negative numbers in java 我需要使用带有种子的随机数生成器。
我想在一个数字范围内选择随机数,但权重偏向该范围的一部分。例如: 选择1-10之间的随机数 对其进行加权,使 1-5 比 6-10 的可能性高 20% 这可能吗?我该怎么做? 最佳答案 这取决于您希望
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我有一个付款 Activity 和启动 Activity ,它在用户购买后显示内容应用程序。付款 Activity 是Manifest.xml中的默认启动器,我想将启动器 Activity 设置为启动
我有一个指针和长度。如何从他们那里得到一个动态数组? 最佳答案 设ptr是一个指针,len是一个长度,那么很容易如下: ptr[0..len] 请注意,这不会复制数组,而是就地使用数据。 如果要复制数
我是一名优秀的程序员,十分优秀!