Skip to content
Snippets Groups Projects
Commit bacdea24 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Chinese translations. Simpler language selection for the user.

parent 0329f515
No related branches found
No related tags found
No related merge requests found
Showing
with 557 additions and 457 deletions
...@@ -165,7 +165,6 @@ public class MessageController extends HttpServlet { ...@@ -165,7 +165,6 @@ public class MessageController extends HttpServlet {
request.getParameter("messageLocale") request.getParameter("messageLocale")
: SessionLocaleUtil.getCurrentLocale(request).getLanguage(); : SessionLocaleUtil.getCurrentLocale(request).getLanguage();
request.setAttribute("messageLocale", messageLocale); request.setAttribute("messageLocale", messageLocale);
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
// If whe have existing versions of the message in other languages, // If whe have existing versions of the message in other languages,
// we must find the most relevant translation and use as reference // we must find the most relevant translation and use as reference
if(message.getMessageLocaleSet().size() > 1) if(message.getMessageLocaleSet().size() > 1)
...@@ -239,7 +238,6 @@ public class MessageController extends HttpServlet { ...@@ -239,7 +238,6 @@ public class MessageController extends HttpServlet {
request.getParameter("messageLocale") request.getParameter("messageLocale")
: SessionLocaleUtil.getCurrentLocale(request).getLanguage() : SessionLocaleUtil.getCurrentLocale(request).getLanguage()
); );
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.setAttribute("unusedTags", em.createNamedQuery("MessageTag.findAll").getResultList()); request.setAttribute("unusedTags", em.createNamedQuery("MessageTag.findAll").getResultList());
request.setAttribute("organizations", SessionControllerGetter.getUserBean().getOrganizations()); request.setAttribute("organizations", SessionControllerGetter.getUserBean().getOrganizations());
request.setAttribute("allCropCategoryIds", em.createNamedQuery("CropCategory.findByOrganizationId").setParameter("organizationId",user.getOrganizationId().getOrganizationId()).getResultList()); request.setAttribute("allCropCategoryIds", em.createNamedQuery("CropCategory.findByOrganizationId").setParameter("organizationId",user.getOrganizationId().getOrganizationId()).getResultList());
...@@ -352,7 +350,6 @@ public class MessageController extends HttpServlet { ...@@ -352,7 +350,6 @@ public class MessageController extends HttpServlet {
request.getParameter("messageLocale") request.getParameter("messageLocale")
: SessionLocaleUtil.getCurrentLocale(request).getLanguage() : SessionLocaleUtil.getCurrentLocale(request).getLanguage()
); );
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.getRequestDispatcher("/messageForm.ftl").forward(request, response); request.getRequestDispatcher("/messageForm.ftl").forward(request, response);
} }
} }
......
...@@ -143,7 +143,6 @@ public class UserController extends HttpServlet { ...@@ -143,7 +143,6 @@ public class UserController extends HttpServlet {
{ {
request.setAttribute("viewUser", viewUser); request.setAttribute("viewUser", viewUser);
request.setAttribute("countries", userBean.getUserCountries()); request.setAttribute("countries", userBean.getUserCountries());
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("userStatusIds", userBean.getUserStatusIds()); request.setAttribute("userStatusIds", userBean.getUserStatusIds());
request.setAttribute("vipsLogicRoles", em.createNamedQuery("VipsLogicRole.findAll").getResultList()); request.setAttribute("vipsLogicRoles", em.createNamedQuery("VipsLogicRole.findAll").getResultList());
...@@ -175,7 +174,6 @@ public class UserController extends HttpServlet { ...@@ -175,7 +174,6 @@ public class UserController extends HttpServlet {
request.setAttribute("viewUser", viewUser); request.setAttribute("viewUser", viewUser);
request.setAttribute("countries", userBean.getUserCountries()); request.setAttribute("countries", userBean.getUserCountries());
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.setAttribute("defaultLocale", user.getOrganizationId().getDefaultLocale()); request.setAttribute("defaultLocale", user.getOrganizationId().getDefaultLocale());
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("userStatusIds", userBean.getUserStatusIds()); request.setAttribute("userStatusIds", userBean.getUserStatusIds());
...@@ -350,7 +348,6 @@ public class UserController extends HttpServlet { ...@@ -350,7 +348,6 @@ public class UserController extends HttpServlet {
request.setAttribute("formValidation", formValidation); request.setAttribute("formValidation", formValidation);
request.setAttribute("viewUser", viewUser); request.setAttribute("viewUser", viewUser);
request.setAttribute("countries", userBean.getUserCountries()); request.setAttribute("countries", userBean.getUserCountries());
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("userStatusIds", userBean.getUserStatusIds()); request.setAttribute("userStatusIds", userBean.getUserStatusIds());
request.setAttribute("vipsLogicRoles", em.createNamedQuery("VipsLogicRole.findAll").getResultList()); request.setAttribute("vipsLogicRoles", em.createNamedQuery("VipsLogicRole.findAll").getResultList());
...@@ -500,7 +497,6 @@ public class UserController extends HttpServlet { ...@@ -500,7 +497,6 @@ public class UserController extends HttpServlet {
request.setAttribute("userAuthenticationTypeId", userAuthenticationTypeId); request.setAttribute("userAuthenticationTypeId", userAuthenticationTypeId);
// Get available organizations, add for select list // Get available organizations, add for select list
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response); request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response);
} }
...@@ -591,7 +587,6 @@ public class UserController extends HttpServlet { ...@@ -591,7 +587,6 @@ public class UserController extends HttpServlet {
{ {
request.setAttribute("formValidation", formValidation); request.setAttribute("formValidation", formValidation);
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("availableLocales", LanguageUtil.getAvailableLocalesWithDistinctLanguage());
request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId()); request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId());
request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response); request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response);
} }
......
...@@ -21,6 +21,9 @@ package no.nibio.vips.logic.i18n; ...@@ -21,6 +21,9 @@ package no.nibio.vips.logic.i18n;
import com.ibm.icu.util.ULocale; import com.ibm.icu.util.ULocale;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import static java.util.stream.Collectors.toList;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; import javax.servlet.FilterConfig;
...@@ -28,20 +31,24 @@ import javax.servlet.ServletException; ...@@ -28,20 +31,24 @@ import javax.servlet.ServletException;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import no.nibio.vips.i18n.LanguageUtil;
import no.nibio.vips.logic.util.SystemTime; import no.nibio.vips.logic.util.SystemTime;
/** /**
* This filter checks if there are any changes in locale requests, and * This filter checks if there are any changes in locale requests, and
* changes servlet session settings accordingly * changes servlet session settings accordingly. It also keeps
* @copyright 2013 <a href="http://www.nibio.no/">NIBIO</a> * track of available languages
* @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no> * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/ */
public class LocalizationFilter implements Filter{ public class LocalizationFilter implements Filter{
private List<ULocale> availableLocales;
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException { public void init(FilterConfig filterConfig) throws ServletException {
this.availableLocales = LanguageUtil.getAvailableLocalesWithDistinctLanguage();
} }
@Override @Override
...@@ -95,8 +102,11 @@ public class LocalizationFilter implements Filter{ ...@@ -95,8 +102,11 @@ public class LocalizationFilter implements Filter{
} }
} }
// Set the available locales
((HttpServletRequest)request).getSession().setAttribute("availableLocales", this.availableLocales);
// We always make the system time available for FreeMarker templates // We always make the system time available for FreeMarker templates
request.setAttribute("systemTime", SystemTime.getSystemTime()); //request.setAttribute("systemTime", SystemTime.getSystemTime());
chain.doFilter(request, response); chain.doFilter(request, response);
......
...@@ -19,9 +19,6 @@ ...@@ -19,9 +19,6 @@
package no.nibio.vips.logic.util; package no.nibio.vips.logic.util;
import com.ibm.icu.util.ULocale;
import java.util.Locale;
/** /**
* @copyright 2013 <a href="http://www.nibio.no/">NIBIO</a> * @copyright 2013 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no> * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
......
/*
* Copyright (c) 2016 NIBIO <http://www.nibio.no/>.
*
* This file is part of VIPSLogic.
* VIPSLogic is free software: you can redistribute it and/or modify
* it under the terms of the NIBIO Open Source License as published by
* NIBIO, either version 1 of the License, or (at your option) any
* later version.
*
* VIPSLogic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* NIBIO Open Source License for more details.
*
* You should have received a copy of the NIBIO Open Source License
* along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>.
*
*/
package no.nibio.vips.logic.web;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import no.nibio.vips.logic.util.SystemTime;
import no.nibio.vips.util.ServletUtil;
/**
* Global settings for FreeMarker templates
* @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/
public class TemplateConfigFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest sRequest = (HttpServletRequest) request;
String requestURL = ServletUtil.getCleanedQueryString(ServletUtil.getFullRequestURI(sRequest), "userRequestedLocale");
sRequest.getSession().setAttribute("requestURL", requestURL);
sRequest.getSession().setAttribute("systemTime", SystemTime.getSystemTime());
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
...@@ -20,23 +20,23 @@ ...@@ -20,23 +20,23 @@
# Localizes the error messages given from the passay properties files # Localizes the error messages given from the passay properties files
# @see UserBean.isPasswordValid() and http://www.passay.org/reference/ # @see UserBean.isPasswordValid() and http://www.passay.org/reference/
# for usage # for usage
HISTORY_VIOLATION=Password matches one of %1$s previous passwords. HISTORY_VIOLATION=\u5bc6\u7801\u7b26\u5408 of %1$s \u4ee5\u524d\u5bc6\u7801
ILLEGAL_WORD=Password contains the dictionary word '%1$s'. ILLEGAL_WORD=\u5bc6\u7801\u5305\u542b\u5b57\u5178\u5b57 '%1$s'.
ILLEGAL_WORD_REVERSED=Password contains the reversed dictionary word '%1$s'. ILLEGAL_WORD_REVERSED=\u5bc6\u7801\u5305\u542b\u4fee\u6539\u7684\u5b57\u5178\u5b57 '%1$s'.
ILLEGAL_MATCH=Password matches the illegal pattern '%1$s'. ILLEGAL_MATCH=\u5bc6\u7801\u7b26\u5408\u975e\u6cd5\u7684\u6a21\u5f0f '%1$s'.
ALLOWED_MATCH=Password must match pattern '%1$s'. ALLOWED_MATCH=\u5bc6\u7801\u5fc5\u987b\u7b26\u5408\u6a21\u5f0f '%1$s'.
ILLEGAL_CHAR=Password contains the illegal character '%1$s'. ILLEGAL_CHAR=\u5bc6\u7801\u542b\u6709\u975e\u6cd5\u5b57\u7b26 '%1$s'.
ALLOWED_CHAR=Password contains the illegal character '%1$s'. ALLOWED_CHAR=\u5bc6\u7801\u542b\u6709\u975e\u6cd5\u5b57\u7b26 '%1$s'.
ILLEGAL_SEQUENCE=Password contains the illegal sequence '%1$s'. ILLEGAL_SEQUENCE=\u5bc6\u7801\u542b\u6709\u975e\u6cd5\u5b57\u7b26\u4e32 '%1$s'.
ILLEGAL_USERNAME=Password contains the user id '%1$s'. ILLEGAL_USERNAME=\u5bc6\u7801\u542b\u6709\u7528\u6237id '%1$s'.
ILLEGAL_USERNAME_REVERSED=Password contains the user id '%1$s' in reverse. ILLEGAL_USERNAME_REVERSED=\u5bc6\u7801\u5305\u542b\u65b9\u5411\u7528\u6237id'%1$s'
ILLEGAL_WHITESPACE=Password cannot contain whitespace characters. ILLEGAL_WHITESPACE=\u5bc6\u7801\u4e0d\u80fd\u542b\u6709\u7a7a\u767d\u5b57\u7b26
INSUFFICIENT_UPPERCASE=Password must contain at least %1$s uppercase characters. INSUFFICIENT_UPPERCASE=\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u81f3\u5c11%1$s\u5927\u5199\u5b57\u7b26
INSUFFICIENT_LOWERCASE=Password must contain at least %1$s lowercase characters. INSUFFICIENT_LOWERCASE=\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u81f3\u5c11%1$s\u5c0f\u5199\u5b57\u7b26
INSUFFICIENT_ALPHABETICAL=Password must contain at least %1$s alphabetical characters. INSUFFICIENT_ALPHABETICAL=\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u81f3\u5c11%1$s\u5b57\u6bcd\u5b57\u7b26
INSUFFICIENT_DIGIT=Password must contain at least %1$s digit characters. INSUFFICIENT_DIGIT=\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u81f3\u5c11%1$s\u6570\u5b57\u5b57\u7b26
INSUFFICIENT_SPECIAL=Password must contain at least %1$s special characters. INSUFFICIENT_SPECIAL=\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u81f3\u5c11%1$s\u7279\u6b8a\u5b57\u7b26
INSUFFICIENT_CHARACTERISTICS=Password matches %1$s of %3$s character rules, but %2$s are required. INSUFFICIENT_CHARACTERISTICS=\u5bc6\u7801\u7b26\u5408 %1$s \u4e2d %3$s \u7684\u5b57\u7b26\u89c4\u5219, \u4f46\u662f %2$s \u9700\u8981.
SOURCE_VIOLATION=Password cannot be the same as your %1$s password. SOURCE_VIOLATION=\u5bc6\u7801\u4e0d\u80fd\u4e0e\u4f60 %1$s \u5bc6\u7801\u76f8\u540c.\n
TOO_LONG=Password must be no more than %2$s characters in length. TOO_LONG=\u5bc6\u7801\u7684\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7 %2$s \u5b57\u7b26
TOO_SHORT=Password must be at least %1$s characters in length. TOO_SHORT=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11 %1$s \u5b57\u7b26\u957f\u5ea6
\ No newline at end of file
...@@ -167,6 +167,10 @@ ...@@ -167,6 +167,10 @@
<filter-name>LocalizationFilter</filter-name> <filter-name>LocalizationFilter</filter-name>
<url-pattern>*</url-pattern> <url-pattern>*</url-pattern>
</filter-mapping> </filter-mapping>
<filter-mapping>
<filter-name>TemplateConfigFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
<servlet> <servlet>
<servlet-name>FrontpageController</servlet-name> <servlet-name>FrontpageController</servlet-name>
<servlet-class>no.nibio.vips.logic.controller.servlet.FrontpageController</servlet-class> <servlet-class>no.nibio.vips.logic.controller.servlet.FrontpageController</servlet-class>
...@@ -183,6 +187,11 @@ ...@@ -183,6 +187,11 @@
<description>Authenticates users</description> <description>Authenticates users</description>
<filter-name>AuthenticationFilter</filter-name> <filter-name>AuthenticationFilter</filter-name>
<filter-class>no.nibio.vips.logic.authenticate.AuthenticationFilter</filter-class> <filter-class>no.nibio.vips.logic.authenticate.AuthenticationFilter</filter-class>
</filter>
<filter>
<description>Sets config values for FreeMarker</description>
<filter-name>TemplateConfigFilter</filter-name>
<filter-class>no.nibio.vips.logic.web.TemplateConfigFilter</filter-class>
</filter> </filter>
<filter> <filter>
<filter-name>LocalizationFilter</filter-name> <filter-name>LocalizationFilter</filter-name>
......
...@@ -268,4 +268,26 @@ legend { ...@@ -268,4 +268,26 @@ legend {
div.popover { div.popover {
min-width: 350px; min-width: 350px;
max-width: 400px !important; max-width: 400px !important;
}
#loginAndLanguageInfo {
position: absolute;
top: 0px;
right: 5px;
/*background-color: #31ab6e;*/
padding: 0px 3px;
font-size: small;
}
@media (max-width: 500px)
{
#siteTitle {display: none;}
#loginAndLanguageInfo {
top: 70px !important;
right: auto !important;
left: 15px;
}
#languageSelect {
display: block !important;
}
} }
\ No newline at end of file
src/main/webapp/images/logo_vips.png

1018 B | W: | H:

src/main/webapp/images/logo_vips.png

2.45 KiB | W: | H:

src/main/webapp/images/logo_vips.png
src/main/webapp/images/logo_vips.png
src/main/webapp/images/logo_vips.png
src/main/webapp/images/logo_vips.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a class="navbar-brand" href="/"><img src="/images/logo_vips.svg" alt="VIPS logo" style="height:48px;"/></a><span id="siteTitle" class="navbar-brand">${i18nBundle.VIPSLogicTitle}</span> <a class="navbar-brand" href="/"><img src="/images/logo_vips.png" alt="VIPS logo" style="height:48px;"/></a><span id="siteTitle" class="navbar-brand">${i18nBundle.VIPSLogicTitle}</span>
</div> </div>
<!-- Collect the nav links, forms, and other content for toggling --> <!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse navbar-ex1-collapse"> <div class="collapse navbar-collapse navbar-ex1-collapse">
...@@ -70,13 +70,26 @@ ...@@ -70,13 +70,26 @@
</li> </li>
<li><a href="/userguide/VIPSLogic_user_guide.html">${i18nBundle.help}</a></li> <li><a href="/userguide/VIPSLogic_user_guide.html">${i18nBundle.help}</a></li>
</ul> </ul>
<form class="navbar-form navbar-right" action="/logout" method="POST" role="logout"> <div id="loginAndLanguageInfo" >
<div class="form-group"> <form action="${requestURL}" id="languageSelect" method="post" style="display: inline;">
<!--input type="hidden" name="logout" value="true"/--> <label for="language">${i18nBundle.language}</label>
${i18nBundle.loggedinas} <a href="/user?action=viewUser&userId=${user.userId}">${user.firstName} ${user.lastName}</a> (${user.organizationId.organizationName}) <select name="userRequestedLocale" onchange="this.form.submit();" >
</div> <#list availableLocales as locale>
<button type="submit" class="btn btn-default">${i18nBundle.logout}</button> <option value="${locale.language}<#if locale.country?has_content>_${locale.country}</#if>"
</form> <#if locale == currentLocale> selected="selected"</#if>
>${locale.getDisplayLanguage(locale)}</option>
</#list>
<!-- get language codes>
<option value="" {% if language.code == LANGUAGE_CODE %} selected="selected" {% endif %}>{{ language.name_local }}</option>
<-->
</select>
</form>
&nbsp;&nbsp;
${i18nBundle.loggedinas} <a href="/user?action=viewUser&userId=${user.userId}">${user.firstName} ${user.lastName}</a> (${user.organizationId.organizationName})
<form action="/logout" method="POST" role="logout" style="display: inline;">
<button type="submit">${i18nBundle.logout}</button>
</form>
</div>
</div><!-- /.navbar-collapse --> </div><!-- /.navbar-collapse -->
</nav> </nav>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment