GWT-Dynamic-Locale
Den ich einstellen will gwt-locale
unter Benutzer ausgewählte Gebietsschema mit Hilfe von Spring LocaleContextHolder
.
public static final String getCurrentLocale() {
return LocaleContextHolder.getLocale().getLanguage();
}
Habe ich eigentlich login-interface in Spring MVC und innen Armaturenbrett in gwtp
. Das Gebietsschema der Benutzer wählt in der äußeren Oberfläche vor dem login übergeben werden, um gwt
als gut.
Leider sehe ich keine eingebaute gwt-Locale-setter.
Meine X.gwt.xml
mit Standard-locale als kh
ist :
<inherits name="com.google.gwt.uibinder.UiBinder" />
<inherits name="com.google.gwt.inject.Inject" />
<inherits name="com.gwtplatform.mvp.Mvp" />
<inherits name="gwtquery.plugins.droppable.Droppable"/>
<source path="client" />
<source path="shared" />
<define-configuration-property name="gin.ginjector" is-multi-valued="false"/>
<set-configuration-property name="gin.ginjector" value="com.prayagupd.client.mvp.XGInjector"/>
<set-configuration-property name="UiBinder.useSafeHtmlTemplates" value="true" />
<extend-property name="locale" values="kh" />
<extend-property name="locale" values="en" />
<set-property name="locale" value="kh"/>
<set-property-fallback name="locale" value="kh"/>
<entry-point class="com.prayagupd.client.XEntryPoint"/>
Meine XEntryPoint.java
liest wie :
public class XEntryPoint implements EntryPoint {
private final IUserServiceAsync rpc = GWT.create(IUserService.class);
@Override
public void onModuleLoad() {
//
rpc.getLocale(new AsyncCallback<String>() {
@Override
public void onSuccess(String locale) {
GWT.log("Locale From Spring : " + locale);
GWT.log("Locale From GWT : " + LocaleInfo.getCurrentLocale().getLocaleName());
//here i want to set locale to gwt
//something like GWTLocale.setLocale(locale);
}
@Override
public void onFailure(Throwable caught) {
GWT.log(caught.getMessage());
}
});
DelayedBindRegistry.bind(ginjector);
ginjector.getPlaceManager().revealCurrentPlace();
}
}
Hause.jsp für gwt-laden
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<%@tag import="java.util.Calendar"%>
<%@ tag body-content="scriptless"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spr" tagdir="/WEB-INF/tags"%>
<%@ attribute name="isgwt" required="true" type="java.lang.Boolean"%>
<!-- <!DOCTYPE html> -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="image/png" href="/images/favicon.png" />
<script type="text/javascript" src="js/reload.captcha.js"></script>
<script type="text/javascript" src="js/date.picker.js"></script>
<link href="/styles/innerstyle.css" type="text/css" />
<c:if test="${not isgwt}">
<link href="/styles/mainstyler.css" type="text/css" />
<script type="text/javascript" src="js/modernizer.custom.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-ui-custom.min.js"></script>
<script src="js/jquery.thumbnailScroller.js"></script>
</c:if>
<c:if test="${isgwt}">
<meta name="gwt:property" content="locale=${locale}">
<script type="text/javascript" language="javascript" src="upd/upd.nocache.js"></script>
</c:if>
<script type="text/javascript">
$(window).load(function() {
$('#slider').nivoSlider();
});
</script>
<title><c:out value="${locale}"></c:out><spring:message code="page.header" /></title>
</head>
<body>
<c:choose>
<c:when test="${empty username}">
<div class="header_con">
<div class="header_in">
<spr:header />
<spr:login />
<div class="clear"></div>
</div>
<div class="main_con">
<jsp:doBody />
<spr:footer />
</div>
<div class="clear"></div>
</div>
</c:when>
<c:otherwise>
<div id="mainHolder">
<div id="wrapper">
<spr:headerInner />
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1'
style="position: absolute; width: 0; height: 0; border: 0"></iframe>
<div>
<div id="gwt_holder">
<c:if test="${isgwt}">
<div id="loader" class="loader">
</div>
</c:if>
<div id="gwt"></div>
</div>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</body>
</html>
Hinzufügen ?locale=en
oder ?locale=kh
zu gwt url funktioniert perfekt, aber sagen wollen GWT nur einmal, dass ich möchte diese locale programmgesteuert und wollen, dass es funktioniert immer mit diesem Gebietsschema ab.
Wenn ich mir die *.html
source-code sehe ich, dass die injizierten <meta>
tag mit der richtigen locale
bestanden aus SpringController
.
Referenzen
GWT dynamische Internationalisierung, Colin Alworth
Wie ich ändern die Gebietsschema-Sprache der Anwendung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden dynamische host-Seite, wo Sie injizieren die richtige
<meta name="gwt:property" content="locale=XXX">
.Erinnere mich an die GWT bootstrap-Sequenz: sobald Ihr
onModuleLoad
genannt worden ist, ist die Wahl der permutation (die enthält die locale -) wurde bereits vorgenommen. Sie müssen ändern Sie das bootstrap-Sequenz, so wählt es die richtige permutation für den Benutzer.?locale=XXX
diese (weil dielocale
Eigenschaft hat eine<Eigentum-provider>
liestlocale
query-string-parameter, u.a.), sowie die<meta>
oben.Siehe auch https://code.google.com/p/google-web-toolkit-incubator/wiki/ServerSideLocaleSelection für einige Idee (ACHTUNG: veraltet-Projekt!)
Schließlich gibt es ein paar Probleme mit Ihrem
*.gwt.xml
, beginnend mitkh
nicht gültige Gebietsschema -.Den workflow für die Internationalisierung Ihrer app ist wie folgt:
Liste Ihrer locales:
entfernen Sie die
default
Gebietsschema an, indem Sie die Einstellung derlocale
- Eigenschaft, um die komplette Liste der unterstützten locales:legen Sie den fallback-Gebietsschema:
Optional können Sie auswählen, wie das Gebietsschema wird festgelegt über die Eigenschaften
locale.queryparam
,locale.cookie
,locale.usemeta
,locale.useragent
, undlocale.searchorder
(sieheI18N.gwt.xml
für Ihre Standard-und akzeptierte Werte).Und schließlich, fügen Sie code hinzu, um wählen Sie das Gebietsschema (z.B. die dynamische
<meta>
oben)<c:if test="${isgwt}"> <meta name="gwt:property" value="locale=${locale}"> </c:if>
zuhome.jsp
als gut.(aktualisierthome.jsp
oben) Bin passing "locale" paramater ausSpringController
. AberLocaleInfo.getCurrentLocale().getLocaleName()
ist immer wiederkehrendenkh
auch wenn leitelocale=en
ausSpringController
. Etwas fehlt oder fehl am Platz??<set-property name="locale" value="kh"/>
, entfernen Sie entweder die Zeile oder einer Reihevalue
zukh,en
; aber dann?locale=en
sollte nicht gearbeitet haben. Sind Sie sicher, dass die${locale}
ab Frühjahr ist die richtige?<set-property name="locale" value="kh"/>
zu<extend-property name="locale" values="kh" /> <extend-property name="locale" values="en" /> <set-property name="locale" value="kh, en"/>
. True?locale=kh
funktioniert nicht. Ich habe aktualisiert screenshot oben zu beweisen, die richtigelocale
übergeben vonSpringController
. html-Quelle-mit-meta GWT warnt michcom.google.gwt.core.ext.BadPropertyValueException: Property 'locale' cannot be set to unexpected value 'default'
<meta name="gwt:property" value="locale=${locale}">
funktioniert nicht.<set-property-fallback name="locale" value="kh"/>
zu erklären, dass die Standard locale; das Attribut name für die<meta>
solltecontent
, nichtvalue
(my bad, ich falsch es zunächst in meiner Antwort)Den Lösung inspiriert von Thomas Broyer,
X.gwt.xml
Und
home.jsp
locale übergeben wird ab Frühjahr Controller
Thomas Broyer ist die Antwort richtig, außer eine Sache. Sie müssen nicht zwingend verwenden müssen "dynamische host-Seite", " meta-tag definiert werden können, die dynamisch auf client-Seite:
Diese Weise alle zusätzlichen änderungen kann getan werden, auf der client-Seite vor dem GWT-app startet.