我的网页应用程序适用于远程用户浏览器语言设置时遇到一些问题.我使用了ResourceBundleMessageSource.它看起来像这样:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="resources/messages" /> </bean>
Run Code Online (Sandbox Code Playgroud)
我有两个.properties文件:
messages.properties
messages_ru.properties
它们位于src/resources/messages中.
我想以这样的方式配置我的应用程序,当远程用户浏览器语言设置包含俄语时,我的应用程序应该使用俄语消息(messages_ru),否则(如果语言没有配置或者它不是俄语),它应该使用meessages.properties(它包含英文消息).
当我在浏览器中设置俄语时,它工作正常.当我擦除所有设置时,它也显示俄语(我认为这取决于系统区域设置).当我设置另一种语言时,它也会显示俄语消息.
让我的应用程序显示英文消息的唯一方法是将messages.properties重命名为messages_en.properties并在浏览器中设置英语lang.但是我希望我的应用程序适用于所有语言设置(如果需要则使用俄语,任何其他设置和任何其他国家使用英语).
有任何想法吗?
我试图在春季连接一个messageSource以用于我的应用程序。它不起作用,给出此错误:
org.springframework.context.NoSuchMessageException:在代码“ validation_required”下找不到区域“ en”的消息。
我的applicationContext.xml包含messageSource的以下定义:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:messages</value>
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
我的邮件属性文件位于:
/WEB-INF/classes/messages/messages_en_US.properties
Run Code Online (Sandbox Code Playgroud)
最后,我拨打的产生错误的电话是:
String message = messageSource.getMessage("validation_required", null, Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)
这个小时有人可以帮我吗?
在Java EE环境中,我们通常用于在属性/资源文件中存储文本.并且该属性文件与某些视图HTML标记文件相关联.例如,如果您的标签"名字"在HTML页面上更改为"全名",则可以使用该属性进行更新.
firstName=First Name
someOtherData=This is the data to display on screen, from property file
Run Code Online (Sandbox Code Playgroud)
如果您所处的环境很难定期更新这些属性文件,那么开发人员使用哪种架构来更改通常位于属性文件中的文本/标签内容?或者假设您需要在重新部署属性文件更改之前更改该内容.一个糟糕的解决方案是将其存储在数据库中?开发人员使用memcache吗?这通常用于缓存解决方案吗?
编辑-1数据库实际上不是为这类任务设计的(拉动文本显示在屏幕上),但数据库有用例.我可以添加区域设置列或状态字段,也可以按组添加列过滤器.如果我不使用数据库或属性文件,那么分布式键/值解决方案将允许我添加自定义过滤器?
编辑-2你会在java框架之外使用解决方案吗?像键/值数据存储一样?memcachedb?
需要将HTML内容存储为资源包中的值(XML格式).HTML标记与XML标记冲突.如何在不使用字符实体引用的情况下存储HTML字符串(< and >)
我试图通过该方法keyvalue(message to display)将动态参数传递package.properties给Action类getText().要获取消息,我们可以使用getText(String keyvalue)方法.我该怎么做才能通过方法传递一些参数并通过消息检索参数getText()?
我看到一些API来传递动态参数.但我不知道如何使用,这些是以下API,点击这里查看Struts 2 API文档.
getText(String aTextName, List<Object> args)getText(String key, String[] args) getText(String key, String defaultValue, String[] args)提前致谢..
我想在Struts2中以两行显示错误消息
User Name is not valid
Password is not valid
Run Code Online (Sandbox Code Playgroud)
我的财产是:
username.password.errrorMsg: User Name is not valid \n Password is not valid.
Run Code Online (Sandbox Code Playgroud)
我添加\n但它以单行显示.
你能建议用两行显示吗?
我正在尝试“学习Java”中关于RersourceBundles 的示例。
我使用的是 Windows 7 和 NetBeans
示例代码为:
import java.util.*;
public class Hello {
public static void main(String[] args) {
ResourceBundle bun;
bun = ResourceBundle.getBundle("Message", Locale.ITALY);
System.out.println(bun.getString("HelloMessage"));
bun = ResourceBundle.getBundle("Message", Locale.US);
System.out.println(bun.getString("HelloMessage"));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行代码我得到:
线程“main”中的异常 java.util.MissingResourceException:找不到基名称消息的包,在 java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) 处的 java.util.ResourceBundle.getBundleImpl(ResourceBundle. java:1322)在java.util.ResourceBundle.getBundle(ResourceBundle.java:795)在学习java4.Hello.main(Hello.java:14)Java结果:1
即使我写了并保存
import java.util.*;
public class Message_it_IT extends ListResourceBundle {
public Object[][] getContents() {
return contents;
}
static final Object[][] contents = {
{"HelloMessage", "Buon giorno, world!"},
{"OtherMessage", "Ciao."},
};
}
Run Code Online (Sandbox Code Playgroud)
我仍然有同样的错误。文件 Message_it_IT 保存在另一个文件的同一目录中,出了什么问题?
谢谢
为了从资源包中检索字符串,我试图比较这两种方法的结果,下面是代码示例:
第一个例子:
baseName:资源包的完全限定名称(<base-name>in <resource-bundle>).
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
ResourceBundle bundle = app.getResourceBundle(context, baseName);
Run Code Online (Sandbox Code Playgroud)
第二个例子:
varName:是表示<var></var>in 的String<resource-bundle>
FacesContext context = FacesContext.getCurrentInstance();
Locale locale = context .getViewRoot().getLocale();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
ResourceBundle bundle = ResourceBundle.getBundle(varName, locale, loader);
Run Code Online (Sandbox Code Playgroud)
这两个例子有什么区别?如果没有区别,获得ResourceBundle(使用Application#getMessageBundle()或ResourceBundle#getBundle())的最佳做法是什么?
如何从java代码访问消息包以根据当前区域设置获取消息?
我尝试使用@ManagedProperty如下:
@Named
@SessionScoped
public class UserBean implements Serializable {
@ManagedProperty("#{msg}")
private ResourceBundle bundle;
// ...
public void setBundle(ResourceBundle bundle) {
this.bundle = bundle;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它仍然存在null.它似乎在一个内部不起作用@Named.
这是我在faces-context.xml以下方面注册资源包的方式:
<application>
<message-bundle>validator.messages</message-bundle>
<locale-config>
<supported-locale>en_US</supported-locale>
<supported-locale>ua_UA</supported-locale>
</locale-config>
<resource-bundle>
<base-name>lang.messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
Run Code Online (Sandbox Code Playgroud)
作者的作者:
@BalusC我收到错误
16:29:10,968 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/WEBSearchPrime_JB_lang].[Faces Servlet]] (http-localhost-127.0.0.1-8080-1) Servlet.service() for servlet Faces Servlet threw exception: org.jboss.weld.exceptions.IllegalProductException: WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans\\n\\nProducer\: Producer Method [PropertyResourceBundle] with …
我的组件库目录树设置如下:
resources
mylib
css
mycomponent.css
properties
mycomponent.properties
mycomponent.xhtml
Run Code Online (Sandbox Code Playgroud)
我想加载 mycomponent.xhtml 中的属性文件以用于消息。这样做的正确方法是什么?是否有 f:loadbundle 类型的解决方案?
resourcebundle ×10
java ×5
jsf ×3
spring ×2
struts2 ×2
cdi ×1
facescontext ×1
java-ee ×1
jsf-2 ×1
jsp ×1
localization ×1
spring-mvc ×1
validation ×1
xml ×1