]> git.mxchange.org Git - addressbook-war.git/commitdiff
Localization support almost finished:
authorRoland Haeder <roland@mxchange.org>
Mon, 4 Apr 2016 20:12:08 +0000 (22:12 +0200)
committerRoland Haeder <roland@mxchange.org>
Mon, 4 Apr 2016 20:12:08 +0000 (22:12 +0200)
- Locale setting from browser comes first
- User selected locale from web interfaces overrides it (in session bean)

TODO/FIXME:
- Add locale support to juser-core
- Still the selected locale is not re-selected in box

nbproject/faces-config.NavData
src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionBean.java
src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionController.java
src/java/org/mxchange/localization/bundle_de_DE.properties
src/java/org/mxchange/localization/bundle_en_US.properties
web/WEB-INF/faces-config.xml
web/WEB-INF/templates/base.tpl
web/WEB-INF/templates/generic/locale_selection_box.tpl
web/resources/css/cssLayout.css

index 9699a57504716445e402169abb9fe53ae85421b1..63d1cc1157695521ee2a6eb8364e17927a15195e 100644 (file)
         <Node id="bye.xhtml" x="650" y="750" zoom="true"/>
         <Node id="index.xhtml" x="650" y="450" zoom="true"/>
         <Node id="user/register_done.xhtml" x="1400" y="300" zoom="true"/>
-        <Node id="user/user_profile.xhtml" x="400" y="150" zoom="true"/>
         <Node id="login/login_change_personal_data.xhtml" x="150" y="600" zoom="true"/>
+        <Node id="user/user_profile.xhtml" x="400" y="150" zoom="true"/>
+        <Node id="*" x="650" y="150" zoom="true"/>
         <Node id="imprint.xhtml" x="1150" y="150" zoom="true"/>
         <Node id="user/show_addressbook.xhtml" x="900" y="300" zoom="true"/>
-        <Node id="*" x="650" y="150" zoom="true"/>
         <Node id="user/login_error.xhtml" x="1150" y="450" zoom="true"/>
         <Node id="login/login_other_addressbooks.xhtml" x="650" y="600" zoom="true"/>
         <Node id="user/show_addressbook_entries.xhtml" x="1650" y="300" zoom="true"/>
         <Node id="admin/admin_index.xhtml" x="650" y="300" zoom="true"/>
         <Node id="login/login_change_email_address.xhtml" x="150" y="1050" zoom="true"/>
         <Node id="user/lost_passwd.xhtml" x="400" y="300" zoom="true"/>
-        <Node id="login/login_list_sharing_addressbooks.xhtml" x="1400" y="150" zoom="true"/>
         <Node id="user/login.xhtml" x="400" y="450" zoom="true"/>
+        <Node id="login/login_list_sharing_addressbooks.xhtml" x="1400" y="150" zoom="true"/>
         <Node id="login/login_edit_user_data.xhtml" x="150" y="750" zoom="true"/>
     </Scope>
     <Scope Scope="All Faces Configurations">
index 9316575d1c24a57cc26e5c2eb7e25d72279817db..324a733577202f7d5062d41f8d002836d4dacdf2 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.mxchange.addressbook.beans.localization;
 
+import java.text.MessageFormat;
 import java.util.Locale;
 import javax.annotation.PostConstruct;
 import javax.faces.bean.SessionScoped;
@@ -38,7 +39,7 @@ public class AddressbookLocalizationSessionBean extends BaseDatabaseBean impleme
        /**
         * Serial number
         */
-       private static final long serialVersionUID = 1_867_671_657_629_601_528L;
+       private static final long serialVersionUID = 158_768_216_759_107L;
 
        /**
         * Current Locale
@@ -47,35 +48,72 @@ public class AddressbookLocalizationSessionBean extends BaseDatabaseBean impleme
 
        @Override
        public String getLanguage () {
-               return this.getLocale().getLanguage();
+               this.getLoggerBeanLocal().logTrace(MessageFormat.format("JobsLocalizationSessionBean::getLanguage(): locale.language={0} - EXIT!", this.getLocale().getLanguage())); //NOI18N
+               return this.getLocale().getLanguage().toLowerCase();
        }
 
        @Override
        public void setLanguage (final String language) {
-               this.setLocale(new Locale(language));
-               FacesContext.getCurrentInstance().getViewRoot().setLocale(this.getLocale());
+               // Log trace message
+               this.getLoggerBeanLocal().logTrace(MessageFormat.format("JobsLocalizationSessionBean::setLanguage: language={0} - CALLED!", language)); //NOI18N
+
+               // Language splits
+               String[] splits = language.split("_");
+               if (null == splits[1]) {
+                       splits[1] = "";
+               }
+
+               // Get new locale with upper-case country code
+               Locale loc = new Locale(splits[0], splits[1]);
+
+               // Log debug message
+               this.getLoggerBeanLocal().logDebug(MessageFormat.format("JobsLocalizationSessionBean::setLanguage: loc={0}", loc)); //NOI18N
+
+               // Set it here and in the JSF context
+               this.setLocale(loc);
+               FacesContext.getCurrentInstance().getViewRoot().setLocale(loc);
+
+               // Log trace message
+               this.getLoggerBeanLocal().logTrace("JobsLocalizationSessionBean::setLanguage: EXIT!"); //NOI18N
        }
 
        @Override
        public Locale getLocale () {
+               this.getLoggerBeanLocal().logTrace(MessageFormat.format("JobsLocalizationSessionBean::getLocale(): locale={0} - EXIT!", this.locale)); //NOI18N
                return this.locale;
        }
 
        @Override
        public void setLocale (final Locale locale) {
+               this.getLoggerBeanLocal().logTrace(MessageFormat.format("JobsLocalizationSessionBean::setLocale(): locale={0} - CALLED!", locale)); //NOI18N
                this.locale = locale;
        }
 
+       @Override
+       public Locale[] getSelectableLocalizations () {
+               Locale[] locales = {Locale.GERMANY, Locale.US};
+               return locales;
+       }
+
        /**
         * Initializer for this bean
         */
        @PostConstruct
        public void init () {
+               // Log trace message
+               this.getLoggerBeanLocal().logTrace("JobsLocalizationSessionBean::init: CALLED!"); //NOI18N
+
                // Create locale instance from context
                Locale loc = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
 
+               // Log debug message
+               this.getLoggerBeanLocal().logDebug(MessageFormat.format("JobsLocalizationSessionBean::init: loc={0}", loc)); //NOI18N
+
                // Set it here
                this.setLocale(loc);
+
+               // Log trace message
+               this.getLoggerBeanLocal().logTrace("JobsLocalizationSessionBean::init: EXIT!"); //NOI18N
        }
 
 }
index 81bda8f1becd24284f7900494ce081101f510056..00fef9916bf95032cfcea3d7cdb3bb9caafd8461 100644 (file)
@@ -54,4 +54,11 @@ public interface AddressbookLocalizationSessionController extends Serializable {
         */
        void setLanguage (final String language);
 
+       /**
+        * Getter for selectable localizations
+        * <p>
+        * @return Selectable localizations
+        */
+       Locale[] getSelectableLocalizations ();
+
 }
index ccfb1ff9c464d09c37fde0d0c9573b7e96db797e..eb503caa7d010273ab6d3dcd8425c3bf5ce884a6 100644 (file)
@@ -316,3 +316,6 @@ CONTENT_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS=Neue Email-Adresse eingeben:
 PAGE_TITLE_LOGIN_CHANGE_PERSONAL_DATA=Ihre persoenlichen Daten aendern
 #TODO: Please fix German umlaut!
 CONTENT_TITLE_LOGIN_CHANGE_PERSONAL_DATA=Aendern Ihrer Adresse, Telefonnummer usw.:
+SELECT_LANGUAGE=Sprache:
+DE_DE=Deutsch (DE)
+EN_US=Englisch (US)
index 7c57bd62581a41e399e80488ac09d74e8f89c1dc..71ab7f5c2a32e05b5ee783932263ff64359417ef 100644 (file)
@@ -290,3 +290,6 @@ PAGE_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS=Change your email address
 CONTENT_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS=Enter new email address:
 PAGE_TITLE_LOGIN_CHANGE_PERSONAL_DATA=Change your personal data
 CONTENT_TITLE_LOGIN_CHANGE_PERSONAL_DATA=Change your address, phone number or others:
+SELECT_LANGUAGE=Language:
+DE_DE=German (DE)
+EN_US=English (US)
index c7261f8009b06d5a00bb6ee3b7012f05afce87da..60dd856039aaa90c4fa043c330a9aee7a823f065 100644 (file)
@@ -5,7 +5,7 @@
                          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
        <application>
                <locale-config>
-                       <default-locale>de</default-locale>
+                       <default-locale>de_DE</default-locale>
                        <supported-locale>en_US</supported-locale>
                </locale-config>
        </application>
index 3b6ccd29f3701e96b49dd6573155c5b72dc0efd6..f03edab73eb6a934489f84928517094166633bb2 100644 (file)
@@ -6,48 +6,49 @@
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://xmlns.jcp.org/jsf/core">
 
-       <h:head>
-               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <f:view locale="#{localization.locale}" contentType="text/html">
+               <h:head>
+                       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
-               <f:loadBundle var="msg" basename="org.mxchange.localization.bundle" />
-               <f:view locale="#{localization.locale}" />
+                       <f:loadBundle var="msg" basename="org.mxchange.localization.bundle" />
 
-               <h:outputStylesheet name="/css/default.css" />
-               <h:outputStylesheet name="/css/cssLayout.css" />
+                       <h:outputStylesheet name="/css/default.css" />
+                       <h:outputStylesheet name="/css/cssLayout.css" />
 
-               <title>Addressbook - <ui:insert name="title">Default title</ui:insert></title>
-       </h:head>
+                       <title>Addressbook - <ui:insert name="title">Default title</ui:insert></title>
+               </h:head>
 
-       <h:body>
-               <div id="top">
-                       <div id="header">
-                               <div id="title">
-                                       <h1>Addressbook - <ui:insert name="title">Default title</ui:insert></h1>
+               <h:body>
+                       <div id="top">
+                               <div id="header">
+                                       <div id="title">
+                                               <h1>Addressbook - <ui:insert name="title">Default title</ui:insert></h1>
+                                       </div>
                                </div>
                        </div>
-               </div>
 
-               <div id="menu_content">
-                       <div id="left">
-                               <ui:insert name="menu">Default menu</ui:insert>
-                               <ui:include src="/WEB-INF/templates/generic/locale_selection_box.tpl" />
-                       </div>
-
-                       <div id="content_outer" class="left_content">
-                               <div id="content_header">
-                                       <ui:insert name="content_header">Default content header</ui:insert>
+                       <div id="menu_content">
+                               <div id="left">
+                                       <ui:insert name="menu">Default menu</ui:insert>
+                                       <ui:include src="/WEB-INF/templates/generic/locale_selection_box.tpl" />
                                </div>
 
-                               <div id="content">
-                                       <ui:insert name="content">Default content</ui:insert>
+                               <div id="content_outer" class="left_content">
+                                       <div id="content_header">
+                                               <ui:insert name="content_header">Default content header</ui:insert>
+                                       </div>
+
+                                       <div id="content">
+                                               <ui:insert name="content">Default content</ui:insert>
+                                       </div>
                                </div>
-                       </div>
 
-                       <div class="clear"></div>
-               </div>
+                               <div class="clear"></div>
+                       </div>
 
-               <div id="footer">
-                       <ui:insert name="footer">Default footer</ui:insert>
-               </div>
-       </h:body>
+                       <div id="footer">
+                               <ui:insert name="footer">Default footer</ui:insert>
+                       </div>
+               </h:body>
+       </f:view>
 </html>
index 16860b2d3cb83c7c4356275329a59ac9bb9c1fac..baea374b89333f6eb756a73061b73a814dd55496 100644 (file)
@@ -6,9 +6,9 @@
        xmlns:ui="http://java.sun.com/jsf/facelets">
 
        <h:form id="locale_selection">
-               <h:selectOneMenu value="#{localization.language}" onchange="submit()">
-                       <f:selectItem itemValue="de" itemLabel="Deutsch" />
-                       <f:selectItem itemValue="en" itemLabel="English" />
+               <h:selectOneMenu id="language_selection" value="#{localization.language}" onchange="submit()">
+                       <f:selectItem itemLabel="#{msg.SELECT_LANGUAGE}" noSelectionOption="true" />
+                       <f:selectItems value="#{localization.selectableLocalizations}" var="l" itemValue="#{l}" itemLabel="#{msg[l.toString().toUpperCase()]}" />
                </h:selectOneMenu>
        </h:form>
 </ui:composition>
index 18ff572bafa8ca69733c0b595e6070c2cb4e2c2b..22a6f9f4650eb8f58947ac46f1a36bfd26762233 100644 (file)
@@ -23,7 +23,7 @@ div, table {
        float: left;
        background-color: #ece3a5;
        padding: 5px;
-       width: 150px;
+       width: 170px;
 }
 
 #right {
@@ -41,7 +41,7 @@ div, table {
 
 .left_content {
        padding: 5px;
-       margin-left: 170px;
+       margin-left: 190px;
 }
 
 #top a:link, #top a:visited {