Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Интернационализация приложения


Автор: Tirael 21.4.2006, 11:05
Собственно решил пощупать интернационализацию приложения.
Создал в каталоге /WEB-INF/VChatProperties/ следующие файлы property
  • VChatBundle
  • VChatBundle_en_EN
  • VChatBundle_ru_RU
IDEA объединила их в структуру с названием Resource Bundle 'VChatBundle'. Во всех этих файлах только одна строчка: VChat.Greeting=HEllo
Создал ServletContextListener, в котором собственно считываю этот Bundle и записываю его ServletContext, чтоб познее получить к нему доступ из JSP страницы. (Листенер естественно прописан в  web.xml)

Вот код листенера :
Код

public class LocalePropertiesListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent sce) {

    }
    public void contextInitialized(ServletContextEvent sce) {
        ResourceBundle resourceBundle = ResourceBundle.getBundle("VChatBundle");
        sce.getServletContext().setAttribute("VChatBundle",resourceBundle);
    }
}


Вот код JSP странцы :
Код

<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<html>
  <head>
      <title></title>
  </head>
  <body>
    <fmt:setBundle basename="VChatBundle"></fmt:setBundle>
    <h3><fmt:message key="VChat.Greeting"/></h3>
  </body>
</html>


А вот то что мне выдается, как только пытаюсь развернуть приложение ( JBoss) 
Код

11:58:34,875 INFO  [TomcatDeployer] deploy, ctxPath=/vchat, warUrl=file:/D:/VJava/Projects/VChat/exploded.war/
11:58:35,046 ERROR [[/vchat]] Exception sending context initialized event to listener instance of class ru.vchat.web.listeners.LocalePropertiesListener
java.util.MissingResourceException: Can't find bundle for base name VChatBundle, locale ru_RU
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:837)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:806)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:550)
    at ru.vchat.web.listeners.LocalePropertiesListener.contextInitialized(LocalePropertiesListener.java:20)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3669)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
    at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:150)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.apache.catalina.core.StandardContext.init(StandardContext.java:5005)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
    at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:150)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeployInternal(TomcatDeployer.java:280)
    at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeploy(TomcatDeployer.java:88)
    at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:357)
    at org.jboss.web.WebModule.startModule(WebModule.java:68)
    at org.jboss.web.WebModule.startService(WebModule.java:46)
    at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:274)
    at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:230)
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:943)
    at $Proxy0.start(Unknown Source)
    at org.jboss.system.ServiceController.start(ServiceController.java:428)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
    at $Proxy30.start(Unknown Source)
    at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:400)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127)
    at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
    at $Proxy31.start(Unknown Source)
    at org.jboss.deployment.MainDeployer.start(MainDeployer.java:989)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:790)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:753)
    at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.jmx.connector.invoker.InvokerAdaptorService.invoke(InvokerAdaptorService.java:251)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.jboss.invocation.jrmp.server.JRMPProxyFactory.invoke(JRMPProxyFactory.java:164)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
    at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
    at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
    at sun.rmi.transport.Transport$1.run(Transport.java:153)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
    at java.lang.Thread.run(Thread.java:595)



Пробовал разные пути, но все равно та же ошибка  

Автор: tux 21.4.2006, 11:15
Попробуй в /WEB-INF/classes положить. 

Автор: Tirael 21.4.2006, 11:41
ны ны ны )) 
Все равно не пашет.....

 

Автор: ALKS 21.4.2006, 11:58
полагаю, надо положить в тот же каталог(или jar) где находиться пакет с LocalePropertiesListener.

ну например. /WEB-INF/classes/ если код задеплоин таким образом. или непосредствено в jar, если пакет в jar-e. 

Автор: Tirael 21.4.2006, 14:20
Я понял почему не находился бандл. 
У него должен быть суффикс .properties
Напрмер VChatBundle.properties, VChatBundle_ru.properties

Без него не работает. 

Автор: ALKS 21.4.2006, 14:58
smile

мне даже в голову не пришло что у тебя этого не было  

Автор: Tirael 22.4.2006, 00:59
Цитата(ALKS @  21.4.2006,  14:58 Найти цитируемый пост)
мне даже в голову не пришло что у тебя этого не было  

 smile 

А вообще  по мне так странно почему без .properties ничего не работает. Нехорошо как-то.... 

Автор: vepeter 26.4.2006, 13:32
Цитата(Tirael @ 22.4.2006,  00:59)
А вообще  по мне так странно почему без .properties ничего не работает. Нехорошо как-то....

А так реализовано в Java. По дефолту абстрактный класс java.util.ResourceBundle в методе getBundle вначале пробует найти загруженный/загрузить класс с именем бандла, указанным как параметр метода, а если не находит, то пытается создать инстанс класса java.util.PropertyResourceBundle на основании файла с именем, состоящим из имени бандла + суффикс ".properties". При этом точки в имени бандла заменяются на слеши, что значит, что этот файл свойств можно разместить в какой-нибудь папке, которая находится в класспасе. 

Автор: new 12.7.2006, 17:08
Цитата(Tirael @ 21.4.2006,  11:05)
Листенер естественно прописан в  web.xml

Покажи плиз этот кусок web.xml,а то какой-то ступор просто smile  

Автор: Tirael 12.7.2006, 19:54
Цитата(new @  12.7.2006,  17:08 Найти цитируемый пост)
Покажи плиз этот кусок web.xml,а то какой-то ступор просто 



ну пожалуйста 

Код

<listener>
    <listener-class>com.blabla.blaListener</listener-class>
  </listener>
 

Автор: new 14.7.2006, 01:28
Оказывается всё дело в IntelliJ IDEA 5.1.Если запускать томкат вручную (не из идеи),то все работает.А вот как ни старался чтобы IDEA запустила томкат так же - нифига не работает.Пробывал ставить CLASSPATH.
Когда я писал standalone i18n application  - тоже самое:если запускать вручную из консоли типа java somepackage.App все работает,в IDEA никак.Может кто-нибудь встречался с такими граблями ?
Или я все-таки пропустил кое-какие настройки ? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)