* @see javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)
*/
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException
{
PortletSession session = request.getPortletSession();
String language = request.getParameter(PREFERED_LOCALE_SESSION_KEY);
if (language != null)
{
String[] localeArray = language.split("[-|_]");
String country = "";
String variant = "";
for (int i = 0; i < localeArray.length; i++)
{
if (i == 0)
{
language = localeArray[i];
}
else if (i == 1)
{
country = localeArray[i];
}
else if (i == 2)
{
variant = localeArray[i];
}
}
Locale preferedLocale = new Locale(language, country, variant);
if (request.getRemoteUser() != null)
{
// Set the prefered locale to user's perferences(persistent storage) if not anon user
try
{
User user = userManager.getUser(request.getRemoteUser());
// TODO if preferred lang or locale is defined in PLT.D, it's better to use it
SecurityAttributes secAttrs = user.getSecurityAttributes();
secAttrs.getAttribute(PortalReservedParameters.PREFERED_LOCALE_ATTRIBUTE, true).setStringValue(JetspeedLocale.convertLocaleToString(preferedLocale));
userManager.updateUser(user);
}
catch (SecurityException e)
{
logger.error("Failed to update security attributes with preferred locale.", e);
}
}
session.setAttribute(PortalReservedParameters.PREFERED_LOCALE_ATTRIBUTE, preferedLocale,
PortletSession.APPLICATION_SCOPE);
RequestContext requestContext = (RequestContext) request
.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
requestContext.setLocale(preferedLocale);
requestContext.setSessionAttribute(PortalReservedParameters.PREFERED_LOCALE_ATTRIBUTE, preferedLocale);