mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
User options to change UI language as well as content filter language.
Some small rationalizing of common code for above. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4754 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1168,6 +1168,9 @@ new_password=New Password
|
|||||||
edit_user_details=Edit User Details
|
edit_user_details=Edit User Details
|
||||||
edit_user_details_description=Use this view to change your user details and email address
|
edit_user_details_description=Use this view to change your user details and email address
|
||||||
start_location=Start Location
|
start_location=Start Location
|
||||||
|
interface_language=Interface Language
|
||||||
|
content_language_filter=Content Language Filter
|
||||||
|
content_all_languages=All Languages
|
||||||
|
|
||||||
# Delete Space Dialog messages
|
# Delete Space Dialog messages
|
||||||
select_delete_operation=What do you want to delete?
|
select_delete_operation=What do you want to delete?
|
||||||
|
@@ -76,6 +76,8 @@
|
|||||||
<!-- the list of available language files -->
|
<!-- the list of available language files -->
|
||||||
<languages>
|
<languages>
|
||||||
<language locale="en_US">English</language>
|
<language locale="en_US">English</language>
|
||||||
|
<language locale="fr_FR">French</language>
|
||||||
|
<language locale="jp_JP">Japanese</language>
|
||||||
</languages>
|
</languages>
|
||||||
</config>
|
</config>
|
||||||
|
|
||||||
|
@@ -21,7 +21,6 @@ import java.util.Locale;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
import javax.faces.context.FacesContext;
|
import javax.faces.context.FacesContext;
|
||||||
import javax.portlet.PortletContext;
|
import javax.portlet.PortletContext;
|
||||||
@@ -33,6 +32,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import org.alfresco.config.ConfigService;
|
import org.alfresco.config.ConfigService;
|
||||||
|
import org.alfresco.i18n.I18NUtil;
|
||||||
import org.alfresco.repo.importer.ImporterBootstrap;
|
import org.alfresco.repo.importer.ImporterBootstrap;
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
import org.alfresco.web.app.servlet.AuthenticationHelper;
|
import org.alfresco.web.app.servlet.AuthenticationHelper;
|
||||||
@@ -495,7 +495,7 @@ public class Application
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static void setLanguage(FacesContext context, String code)
|
public static void setLanguage(FacesContext context, String code)
|
||||||
{
|
{
|
||||||
Locale locale = parseLocale(code);
|
Locale locale = I18NUtil.parseLocale(code);
|
||||||
|
|
||||||
// set locale for JSF framework usage
|
// set locale for JSF framework usage
|
||||||
context.getViewRoot().setLocale(locale);
|
context.getViewRoot().setLocale(locale);
|
||||||
@@ -515,38 +515,12 @@ public class Application
|
|||||||
*/
|
*/
|
||||||
public static void setLanguage(HttpSession session, String code)
|
public static void setLanguage(HttpSession session, String code)
|
||||||
{
|
{
|
||||||
Locale locale = parseLocale(code);
|
Locale locale = I18NUtil.parseLocale(code);
|
||||||
|
|
||||||
session.setAttribute(LOCALE, locale);
|
session.setAttribute(LOCALE, locale);
|
||||||
session.removeAttribute(MESSAGE_BUNDLE);
|
session.removeAttribute(MESSAGE_BUNDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param code Locale code (java format with underscores) to parse
|
|
||||||
* @return Locale object or default if unable to parse
|
|
||||||
*/
|
|
||||||
private static Locale parseLocale(String code)
|
|
||||||
{
|
|
||||||
Locale locale = Locale.getDefault();
|
|
||||||
|
|
||||||
StringTokenizer t = new StringTokenizer(code, "_");
|
|
||||||
int tokens = t.countTokens();
|
|
||||||
if (tokens == 1)
|
|
||||||
{
|
|
||||||
locale = new Locale(code);
|
|
||||||
}
|
|
||||||
else if (tokens == 2)
|
|
||||||
{
|
|
||||||
locale = new Locale(t.nextToken(), t.nextToken());
|
|
||||||
}
|
|
||||||
else if (tokens == 3)
|
|
||||||
{
|
|
||||||
locale = new Locale(t.nextToken(), t.nextToken(), t.nextToken());
|
|
||||||
}
|
|
||||||
|
|
||||||
return locale;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the language Locale for the current user context
|
* Return the language Locale for the current user context
|
||||||
*
|
*
|
||||||
|
@@ -18,18 +18,14 @@ package org.alfresco.web.bean;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.faces.application.FacesMessage;
|
import javax.faces.application.FacesMessage;
|
||||||
import javax.faces.component.UIComponent;
|
import javax.faces.component.UIComponent;
|
||||||
import javax.faces.context.FacesContext;
|
import javax.faces.context.FacesContext;
|
||||||
import javax.faces.model.SelectItem;
|
|
||||||
import javax.faces.validator.ValidatorException;
|
import javax.faces.validator.ValidatorException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.alfresco.config.Config;
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationException;
|
import org.alfresco.repo.security.authentication.AuthenticationException;
|
||||||
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
|
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
|
||||||
@@ -42,7 +38,6 @@ import org.alfresco.web.app.servlet.AuthenticationHelper;
|
|||||||
import org.alfresco.web.app.servlet.FacesHelper;
|
import org.alfresco.web.app.servlet.FacesHelper;
|
||||||
import org.alfresco.web.bean.repository.Repository;
|
import org.alfresco.web.bean.repository.Repository;
|
||||||
import org.alfresco.web.bean.repository.User;
|
import org.alfresco.web.bean.repository.User;
|
||||||
import org.alfresco.web.config.LanguagesConfigElement;
|
|
||||||
import org.alfresco.web.ui.common.Utils;
|
import org.alfresco.web.ui.common.Utils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@@ -166,62 +161,6 @@ public class LoginBean
|
|||||||
return this.password;
|
return this.password;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the available languages
|
|
||||||
*/
|
|
||||||
public SelectItem[] getLanguages()
|
|
||||||
{
|
|
||||||
Config config = Application.getConfigService(FacesContext.getCurrentInstance()).getConfig("Languages");
|
|
||||||
LanguagesConfigElement langConfig = (LanguagesConfigElement)config.getConfigElement(
|
|
||||||
LanguagesConfigElement.CONFIG_ELEMENT_ID);
|
|
||||||
|
|
||||||
List<String> languages = langConfig.getLanguages();
|
|
||||||
SelectItem[] items = new SelectItem[languages.size()];
|
|
||||||
int count = 0;
|
|
||||||
for (String locale : languages)
|
|
||||||
{
|
|
||||||
// get label associated to the locale
|
|
||||||
String label = langConfig.getLabelForLanguage(locale);
|
|
||||||
|
|
||||||
// set default selection
|
|
||||||
if (count == 0 && this.language == null)
|
|
||||||
{
|
|
||||||
// first try to get the language that the current user is using
|
|
||||||
Locale lastLocale = Application.getLanguage(FacesContext.getCurrentInstance());
|
|
||||||
if (lastLocale != null)
|
|
||||||
{
|
|
||||||
this.language = lastLocale.toString();
|
|
||||||
}
|
|
||||||
// else we default to the first item in the list
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.language = locale;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
items[count++] = new SelectItem(locale, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Returns the language selection.
|
|
||||||
*/
|
|
||||||
public String getLanguage()
|
|
||||||
{
|
|
||||||
return this.language;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param language The language selection to set.
|
|
||||||
*/
|
|
||||||
public void setLanguage(String language)
|
|
||||||
{
|
|
||||||
this.language = language;
|
|
||||||
Application.setLanguage(FacesContext.getCurrentInstance(), this.language);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
// Validator methods
|
// Validator methods
|
||||||
@@ -419,9 +358,10 @@ public class LoginBean
|
|||||||
session.put(AuthenticationHelper.SESSION_INVALIDATED, true);
|
session.put(AuthenticationHelper.SESSION_INVALIDATED, true);
|
||||||
|
|
||||||
// set language to last used
|
// set language to last used
|
||||||
if (this.language != null && this.language.length() != 0)
|
String language = preferences.getLanguage();
|
||||||
|
if (language != null && language.length() != 0)
|
||||||
{
|
{
|
||||||
Application.setLanguage(context, this.language);
|
Application.setLanguage(context, language);
|
||||||
}
|
}
|
||||||
|
|
||||||
return externalAuth ? "logout" : "relogin";
|
return externalAuth ? "logout" : "relogin";
|
||||||
@@ -451,9 +391,6 @@ public class LoginBean
|
|||||||
/** password */
|
/** password */
|
||||||
private String password = null;
|
private String password = null;
|
||||||
|
|
||||||
/** language locale selection */
|
|
||||||
private String language = null;
|
|
||||||
|
|
||||||
/** PersonService bean reference */
|
/** PersonService bean reference */
|
||||||
protected PersonService personService;
|
protected PersonService personService;
|
||||||
|
|
||||||
|
@@ -16,13 +16,20 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.web.bean;
|
package org.alfresco.web.bean;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import javax.faces.context.FacesContext;
|
import javax.faces.context.FacesContext;
|
||||||
import javax.faces.model.SelectItem;
|
import javax.faces.model.SelectItem;
|
||||||
|
|
||||||
|
import org.alfresco.config.Config;
|
||||||
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
|
import org.alfresco.i18n.I18NUtil;
|
||||||
import org.alfresco.web.app.Application;
|
import org.alfresco.web.app.Application;
|
||||||
import org.alfresco.web.bean.repository.PreferencesService;
|
import org.alfresco.web.bean.repository.PreferencesService;
|
||||||
|
import org.alfresco.web.config.LanguagesConfigElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple bean backing the user preferences settings.
|
* Simple bean backing the user preferences settings.
|
||||||
@@ -37,6 +44,131 @@ public class UserPreferencesBean
|
|||||||
private static final String MSG_COMPANYHOME = "company_home";
|
private static final String MSG_COMPANYHOME = "company_home";
|
||||||
private static final String MSG_GUESTHOME = "guest_home";
|
private static final String MSG_GUESTHOME = "guest_home";
|
||||||
|
|
||||||
|
private static final String PREF_CONTENTFILTERLANGUAGE = "content-filter-language";
|
||||||
|
private static final String MSG_CONTENTALLLANGUAGES = "content_all_languages";
|
||||||
|
|
||||||
|
/** language locale selection */
|
||||||
|
private String language = null;
|
||||||
|
|
||||||
|
/** content language locale selection */
|
||||||
|
private String contentFilterLanguage = null;
|
||||||
|
|
||||||
|
private SelectItem[] getLanguageItems(boolean includeAllLanguages)
|
||||||
|
{
|
||||||
|
Config config = Application.getConfigService(FacesContext.getCurrentInstance()).getConfig("Languages");
|
||||||
|
LanguagesConfigElement langConfig = (LanguagesConfigElement)config.getConfigElement(
|
||||||
|
LanguagesConfigElement.CONFIG_ELEMENT_ID);
|
||||||
|
|
||||||
|
List<String> languages = langConfig.getLanguages();
|
||||||
|
List<SelectItem> items = new ArrayList<SelectItem>(20);
|
||||||
|
if (includeAllLanguages)
|
||||||
|
{
|
||||||
|
ResourceBundle msg = Application.getBundle(FacesContext.getCurrentInstance());
|
||||||
|
String allLanguagesStr = msg.getString(MSG_CONTENTALLLANGUAGES);
|
||||||
|
items.add(new SelectItem(MSG_CONTENTALLLANGUAGES, allLanguagesStr));
|
||||||
|
}
|
||||||
|
for (String locale : languages)
|
||||||
|
{
|
||||||
|
// get label associated to the locale
|
||||||
|
String label = langConfig.getLabelForLanguage(locale);
|
||||||
|
items.add(new SelectItem(locale, label));
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectItem[] result = new SelectItem[items.size()];
|
||||||
|
return items.toArray(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the available languages
|
||||||
|
*/
|
||||||
|
public SelectItem[] getLanguages()
|
||||||
|
{
|
||||||
|
// Get the item selection list
|
||||||
|
SelectItem[] items = getLanguageItems(false);
|
||||||
|
// Change the current language
|
||||||
|
if (this.language == null)
|
||||||
|
{
|
||||||
|
// first try to get the language that the current user is using
|
||||||
|
Locale lastLocale = Application.getLanguage(FacesContext.getCurrentInstance());
|
||||||
|
if (lastLocale != null)
|
||||||
|
{
|
||||||
|
this.language = lastLocale.toString();
|
||||||
|
}
|
||||||
|
// else we default to the first item in the list
|
||||||
|
else if (items.length > 0)
|
||||||
|
{
|
||||||
|
this.language = (String) items[0].getValue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new AlfrescoRuntimeException("The language list is empty");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the language selection.
|
||||||
|
*/
|
||||||
|
public String getLanguage()
|
||||||
|
{
|
||||||
|
return this.language;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param language The language selection to set.
|
||||||
|
*/
|
||||||
|
public void setLanguage(String language)
|
||||||
|
{
|
||||||
|
this.language = language;
|
||||||
|
Application.setLanguage(FacesContext.getCurrentInstance(), this.language);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentFilterLanguage()
|
||||||
|
{
|
||||||
|
if (this.contentFilterLanguage == null)
|
||||||
|
{
|
||||||
|
Locale locale = (Locale) PreferencesService.getPreferences().getValue(PREF_CONTENTFILTERLANGUAGE);
|
||||||
|
// Null means All Languages
|
||||||
|
if (locale == null)
|
||||||
|
{
|
||||||
|
this.contentFilterLanguage = MSG_CONTENTALLLANGUAGES;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.contentFilterLanguage = locale.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return contentFilterLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param languageStr A valid locale string or {@link #MSG_CONTENTALLLANGUAGES}
|
||||||
|
*/
|
||||||
|
public void setContentFilterLanguage(String languageStr)
|
||||||
|
{
|
||||||
|
this.contentFilterLanguage = languageStr;
|
||||||
|
Locale language = null;
|
||||||
|
if (languageStr.equals(MSG_CONTENTALLLANGUAGES))
|
||||||
|
{
|
||||||
|
// The generic "All Languages" was selected - persist this as a null
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// It should be a proper locale string
|
||||||
|
language = I18NUtil.parseLocale(languageStr);
|
||||||
|
}
|
||||||
|
PreferencesService.getPreferences().setValue(PREF_CONTENTFILTERLANGUAGE, language);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SelectItem[] getContentFilterLanguages()
|
||||||
|
{
|
||||||
|
// Get the item selection list
|
||||||
|
SelectItem[] items = getLanguageItems(true);
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getStartLocation()
|
public String getStartLocation()
|
||||||
{
|
{
|
||||||
|
@@ -112,8 +112,8 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<%-- language selection drop-down --%>
|
<%-- language selection drop-down --%>
|
||||||
<h:selectOneMenu id="language" value="#{LoginBean.language}" style="width:150px" onchange="document.forms['loginForm'].submit(); return true;">
|
<h:selectOneMenu id="language" value="#{UserPreferencesBean.language}" style="width:150px" onchange="document.forms['loginForm'].submit(); return true;">
|
||||||
<f:selectItems value="#{LoginBean.languages}" />
|
<f:selectItems value="#{UserPreferencesBean.languages}" />
|
||||||
</h:selectOneMenu>
|
</h:selectOneMenu>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -153,6 +153,28 @@
|
|||||||
</h:selectOneMenu>
|
</h:selectOneMenu>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h:outputText value="#{msg.interface_language}" />:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%-- Interface Language drop-down selector --%>
|
||||||
|
<h:selectOneMenu id="language" value="#{UserPreferencesBean.language}" onchange="document.forms['user-console'].submit(); return true;">
|
||||||
|
<f:selectItems value="#{UserPreferencesBean.languages}" />
|
||||||
|
</h:selectOneMenu>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h:outputText value="#{msg.content_language_filter}" />:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%-- Content Language Filter drop-down selector --%>
|
||||||
|
<h:selectOneMenu id="content-filter-language" value="#{UserPreferencesBean.contentFilterLanguage}" onchange="document.forms['user-console'].submit(); return true;">
|
||||||
|
<f:selectItems value="#{UserPreferencesBean.contentFilterLanguages}" />
|
||||||
|
</h:selectOneMenu>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</a:panel>
|
</a:panel>
|
||||||
</td>
|
</td>
|
||||||
|
Reference in New Issue
Block a user