2010-01-16 3 views
1

Je travaille sur une application web Spring et mon application est multilingue. J'ai créé les fichiers de propriétés ResourceBundle comme messages.properties et messages_ar.properties.Problème d'application Web multilingue

Dans ma page de démarrage, j'ai défini par défaut les paramètres régionaux en anglais. par:

<fmt:setLocale value="en" scope="session"/> 

Sur la même page, j'ai fourni aux utilisateurs un accès à d'autres langues (arabe) à travers un lien comme:

<a href="index.htm?locale=ar">Arabic Version</a> 

Et je charger les textes de forme, le titre de la page et d'autres communes éléments des fichier de propriétés par la balise de message de printemps:

<spring:message code="title"/> 

application fonctionne très bien pour l'anglais, mais quand je sélectionne la version arabe, les valeurs de meaages_ar.properties n'est pas chargé . Quelle est mon erreur ou comment peut-elle être chargée et que l'application soit multilingue?

Merci d'avance pour l'aide. Cordialement, Abdel Olakara

+0

mise à jour, Une fois que l'utilisateur a cliqué sur la version arabe, j'ai défini les paramètres régionaux en utilisant . Mais toujours le texte arabe ne se charge pas. –

+0

vous ne pouvez pas obtenir l'environnement local arabe si vous codez "en" – Bozho

+0

avez-vous résolu votre problème? Comment? – Bozho

Répondre

1

Spring MVC fait un très bon travail pour soutenir l'internationalisation. Vous pouvez enregistrer un LocaleChangeInterceptor dans votre contexte d'application pour faire ce travail. Voici un exemple de ce à quoi ressemblerait Spring 3 et le nouvel espace de noms mvc.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <!-- use the annotation driven programming model --> 
    <mvc:annotation-driven /> 

    <!-- register interceptors --> 
    <mvc:interceptors> 
     <!-- change the locale when a request parameter locale is received e.g. /?locale=de --> 
     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> 
    </mvc:interceptors> 

    <!-- save the locale using a cookie --> 
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> 

    <!-- associate view names with jsp files in the directory /WEB-INF/views/ --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

</beans> 

Vous pouvez trouver plus de détails dans la section de la documentation officielle:
http://static.springsource.org/spring/docs/1.2.9/reference/mvc.html#mvc-localeresolver

Il y a aussi un exemple d'application très utile dans le référentiel Exemples de speing:
https://src.springframework.org/svn/spring-samples/mvc-basic/

0

Lors de la configuration <fmt:setLocale value="en" scope="session"/>, vous dites à l'application d'utiliser uniquement l'anglais. le value de setLocale doit être une expression qui évalue les paramètres régionaux en cours. Quelque chose <fmt:setLocale value="${localeController.currentLocale}" />

+0

set Je suis d'accord, mais ce n'est que sur la page d'index. Sur cette page, l'utilisateur peut continuer en anglais ou sélectionner l'arabe ou le français. –

+0

Je n'ai pas eu votre commentaire. – Bozho

-1

ou de changer de culture. pour le changement entre les cultures que vous devez changer la culture et UICulture comme

public event CultureChanged OnCultureChanged; 
    public string LastCultureName 
    { 
     get 
     { 
      string lastCultureName = (string)Session["lastCulture"]; 

      if (lastCultureName == null) 
      { 
       Session["lastCulture"] = Thread.CurrentThread.CurrentCulture.Name; 
       //lastCultureName = "ar-EU"; 
      } 

      return lastCultureName; 
     } 
     set 
     { 
      Session["lastCulture"] = value; 
     } 
    } // Session["lastCulture"] = "en-US"; // Session["lastCulture"] = "ar-EU"; 


protected override void InitializeCulture() 
    { 
     string lang = (string)Session["lastCulture"]; 

     if (lang == null || lang == String.Empty) 
      lang = LastCultureName; 
     if (lang != string.Empty) 
     { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo(lang); 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang); 
     } 
    } 
+0

cela semble être une solution .Net? –

+0

Oui, il s'agit d'une solution. Net et je l'ai mentionné parce que convrting cela au printemps est si facile et vous avez juste besoin d'utiliser equevalent. cette solution fonctionnera bien –

+0

Je pense que cet exemple ne résoudra pas le problème - seulement va confondre le PO. – Bozho