[Using Sakai] anonymous visitor language

joao carneiro jcarneiro at netcabo.pt
Tue Nov 6 06:00:40 PST 2012


Thanks a lot Daniel and Steve.
Haven't had the time to apply the patch yet but hope to do it soon.

Regards,

Joao


> CC: jcarneiro at netcabo.pt; sakai-user at collab.sakaiproject.org
> From: steve.swinsburg at gmail.com
> Subject: Re: [Using Sakai] anonymous visitor language
> Date: Tue, 6 Nov 2012 22:33:49 +1100
> To: daniel.merino at unavarra.es
> 
> Hi Daniel
> 
> That's great, I think a patch on the Jira would be good in case others want it also. Just indicate what kernel it's for. 
> 
> Cheers
> Steve
> 
> Sent from my iPhone
> 
> On 06/11/2012, at 20:30, Daniel Merino <daniel.merino at unavarra.es> wrote:
> 
> > Hi, Joao.
> > 
> > I have tested Steve's fix in trunk and it works nicely, but solution is for trunk version of kernel and it is not directly backportable for old kernels at 2.7.1 (1.1.x).
> > 
> > I have backported it for kernel 1.1.13, maybe you could be interested in it, so I send it attached to this mail.
> > 
> > I don't know if it's correct to upload this backport to JIRA (even when I have done that several times in the past). Should I?
> > 
> > Note that, after applying this patch, a full redeploy of Sakai is needed to make it work.
> > 
> > Best regards.
> > 
> > Joao Carneiro escribió:
> >> Thank you very much for the fast response and fixing a solution!
> >> Chrs,
> >> 
> >> Joao
> >> 
> >> -----Mensagem Original----- From: Steve Swinsburg
> >> Sent: Wednesday, October 31, 2012 8:17 AM
> >> To: Daniel Merino
> >> Cc: Joao Carneiro ; sakai-user at collab.sakaiproject.org
> >> Subject: Re: [Using Sakai] anonymous visitor language
> >> 
> >> Hi all,
> >> 
> >> This is now fixed, anonymous users now have the Locale setting applied from the site. Let me know if there are any issues.
> >> 
> >> See https://jira.sakaiproject.org/browse/KNL-984
> >> 
> >> cheers,
> >> Steve
> >> 
> >> 
> >> 
> >> On 30/10/2012, at 11:26 PM, Daniel Merino <daniel.merino at unavarra.es> wrote:
> >> 
> >>> Hi, Steve. Here it is: https://jira.sakaiproject.org/browse/SAK-22846
> >>> 
> >>> Thanks and best regards.
> >>> 
> >>> Steve Swinsburg escribió:
> >>>> Hi Daniel
> >>>> 
> >>>> Could you raise a new Jira for the .anon bug? Send it my way.
> >>>> Cheers
> >>>> Steve
> >>>> 
> >>>> Sent from my iPhone
> >>>> 
> >>>> On 30/10/2012, at 22:00, Daniel Merino <daniel.merino at unavarra.es> wrote:
> >>>> 
> >>>> 
> >>>>> We haven't been able to deal with this. I searched in the code but it seems to me that this behaviour is inside kernel and is not trivial to change. I was not able to find it.
> >>>>> 
> >>>>> When you enter a site with anonymous user, it always shows Tomcat's language. I have checked it in trunk and still happens there too.
> >>>>> 
> >>>>> I have written a comment in official JIRA ( https://jira.sakaiproject.org/browse/SAK-10393 ), maybe some expert developer will be able to fix it.
> >>>>> 
> >>>>> Best regards.
> >>>>> 
> >>>>> Joao Carneiro escribió:
> >>>>> 
> >>>>>> Thank you all for your replies.
> >>>>>> Your final note however worries me. I intended to use this patch to have a public site with a different language but you say it doesn't work for .anon role.
> >>>>>> Is there a workaround for this or how do you deal with this?
> >>>>>> Chrs,
> >>>>>> 
> >>>>>> Joao
> >>>>>> 
> >>>>>> 
> >>>>>> -----Mensagem Original----- From: Daniel Merino
> >>>>>> Sent: Tuesday, October 30, 2012 10:02 AM
> >>>>>> To: joao carneiro
> >>>>>> Cc: Miguel Carro Pellicer ; sakai-user at collab.sakaiproject.org
> >>>>>> Subject: Re: [Using Sakai] anonymous visitor language
> >>>>>> 
> >>>>>> Hi, Joao. I have taken a look on our 2.7.1 patch that allows to select a
> >>>>>> site language.
> >>>>>> 
> >>>>>> I think that Samoo's original patch works for 2.7.1 and is uploaded at
> >>>>>> https://jira.sakaiproject.org/browse/SAK-19449 . This patch has a little
> >>>>>> issue as default language is blank in the language list, but it works.
> >>>>>> 
> >>>>>> After that, patch was applied in trunk at
> >>>>>> https://jira.sakaiproject.org/browse/SAK-10393 . I think that trunk was
> >>>>>> 2.8.x in that moment, but a comment in that JIRA says that it works with
> >>>>>> 2.7.1 too. I don't know if this is true.
> >>>>>> 
> >>>>>> Finally, the issue with blank default language is addressed at
> >>>>>> https://jira.sakaiproject.org/browse/SAK-20756 . Again, I don't know if
> >>>>>> this works in 2.7.1 but is a very little patch, it should not be
> >>>>>> difficult to be applied handly.
> >>>>>> 
> >>>>>> If you want our locally modified patch, I can send it to you, but I must
> >>>>>> warn you that our patch doesn't include changes in properties (as we
> >>>>>> manage them separately) and we have another tiny local change to display
> >>>>>> "euskera" (basque) instead of "vascuence" in language list, as is what
> >>>>>> our users demanded.
> >>>>>> 
> >>>>>> Hope it helps.
> >>>>>> Best regards.
> >>>>>> 
> >>>>>> PD: Another issue with this patch that we discovered a few weeks ago is
> >>>>>> that site's selected language doesn't work with .anon role.
> >>>>>> 
> >>>>>> Miguel Carro Pellicer escribió:
> >>>>>> 
> >>>>>>> You're lucky!
> >>>>>>> 
> >>>>>>> BTW, i think the community did some changes on this original patch, they added a default language option in the selector and maybe more changes.
> >>>>>>> 
> >>>>>>> Can anyone give more information?
> >>>>>>> 
> >>>>>>> Miguel.
> >>>>>>> 
> >>>>>>> 
> >>>>>>> El 29/10/2012 13:18, joao carneiro escribió:
> >>>>>>> 
> >>>>>>>> Thanks Miguel, that would be great.
> >>>>>>>> 
> >>>>>>>> Chrs,
> >>>>>>>> 
> >>>>>>>> Joao
> >>>>>>>> 
> >>>>>>>> ------------------------------------------------------------------------ 
> >>>>>>>> Date: Mon, 29 Oct 2012 13:06:56 +0100
> >>>>>>>> From: farreri.sakai at gmail.com
> >>>>>>>> To: sakai-user at collab.sakaiproject.org
> >>>>>>>> Subject: Re: [Using Sakai] anonymous visitor language
> >>>>>>>> 
> >>>>>>>> We contributed that feature. I think i have the patches for 2.7 and 2.8, let me see our repo.
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> El 29/10/2012 13:01, Steve Swinsburg escribió:
> >>>>>>>> 
> >>>>>>>>  I believe this feature is in 2.9, perhaps trunk only. The
> >>>>>>>>  language of a site can be set differently to the default language
> >>>>>>>>  of the overall installation.
> >>>>>>>>  What version Sakai are you using?
> >>>>>>>> 
> >>>>>>>>  Cheers
> >>>>>>>>  Steve
> >>>>>>>> 
> >>>>>>>>  Sent from my iPhone
> >>>>>>>> 
> >>>>>>>>  On 29/10/2012, at 22:44, "Joao Carneiro" <jcarneiro at netcabo.pt
> >>>>>>>>  <mailto:jcarneiro at netcabo.pt>> wrote:
> >>>>>>>> 
> >>>>>>>>      Thanks Steve,
> >>>>>>>>       Wouldn’t it be possible to have different default languages
> >>>>>>>>      for different sites?
> >>>>>>>>       Chrs,
> >>>>>>>>       Joao
> >>>>>>>>       *From:* Steve Swinsburg <mailto:steve.swinsburg at gmail.com>
> >>>>>>>>      *Sent:* Monday, October 29, 2012 6:54 AM
> >>>>>>>>      *To:* Joao Carneiro <mailto:jcarneiro at netcabo.pt>
> >>>>>>>>      *Cc:* sakai-user at collab.sakaiproject.org
> >>>>>>>>      <mailto:sakai-user at collab.sakaiproject.org>
> >>>>>>>>      *Subject:* Re: [Using Sakai] anonymous visitor language
> >>>>>>>>       Hi Joao,
> >>>>>>>>       You can set the default language in your JAVA_OPTS. For
> >>>>>>>>      example for es_MX:
> >>>>>>>>       -Duser.language=es -Duser.region=MX
> >>>>>>>>       cheers,
> >>>>>>>>      Steve
> >>>>>>>>       On 29/10/2012, at 9:44 AM, Joao Carneiro
> >>>>>>>>      <jcarneiro at netcabo.pt <mailto:jcarneiro at netcabo.pt>> wrote:
> >>>>>>>> 
> >>>>>>>>          Hi all,
> >>>>>>>>           Can anyone tell me how is the language for anonymous
> >>>>>>>>          users defined?
> >>>>>>>>          When an unauthenticated user visits a sakai public page
> >>>>>>>>          (where .anon can visit) how is the language selected and
> >>>>>>>>          how can I change it?
> >>>>>>>>          Thanks,
> >>>>>>>>           Joao
> >>>>>>>>          _______________________________________________
> >>>>>>>>          sakai-user mailing list
> >>>>>>>>          sakai-user at collab.sakaiproject.org
> >>>>>>>>          <mailto:sakai-user at collab.sakaiproject.org>
> >>>>>>>>          http://collab.sakaiproject.org/mailman/listinfo/sakai-user
> >>>>>>>> 
> >>>>>>>>          TO UNSUBSCRIBE: send email to
> >>>>>>>>          sakai-user-unsubscribe at collab.sakaiproject.org
> >>>>>>>>          <mailto:sakai-user-unsubscribe at collab.sakaiproject.org>
> >>>>>>>>          with a subject of "unsubscribe"
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>  _______________________________________________
> >>>>>>>>  sakai-user mailing list
> >>>>>>>>  sakai-user at collab.sakaiproject.org <mailto:sakai-user at collab.sakaiproject.org>
> >>>>>>>>  http://collab.sakaiproject.org/mailman/listinfo/sakai-user
> >>>>>>>> 
> >>>>>>>>  TO UNSUBSCRIBE: send email to sakai-user-unsubscribe at collab.sakaiproject.org <mailto:sakai-user-unsubscribe at collab.sakaiproject.org> with a subject of "unsubscribe"
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> -- 
> >>>>>>>> 
> >>>>>>>> cid:image001.jpg at 01C9F98A.71C74E60 <http://www.samoo.es/>
> >>>>>>>> 
> >>>>>>>> <http://www.samoo.es/>
> >>>>>>>> 
> >>>>>>>> *Miguel Carro Pellicer*
> >>>>>>>> 
> >>>>>>>> *Technical Manager - Director técnico*
> >>>>>>>> 
> >>>>>>>> miguel.carro at samoo.es <mailto:miguel.carro at samoo.es>
> >>>>>>>> 
> >>>>>>>> +34 - 673 80 32 69
> >>>>>>>> 
> >>>>>>>> Skype: mcpellicer
> >>>>>>>> 
> >>>>>>>> www.samoo.es <http://www.samoo.es>
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> Este  correo  y  sus archivos asociados son privados y confidenciales y va dirigido  exclusivamente  a su destinatario. Si recibe este correo sin ser el  destinatario del mismo, le rogamos proceda a su eliminación y lo ponga en  conocimiento del emisor. La difusión por cualquier medio del contenido de  este  correo podría ser sancionada conforme a lo previsto en las leyes españolas, Ley Orgánica 15/1999 de Protección de Datos de Carácter Personal.  No  se autoriza la utilización con fines comerciales o para su incorporación a ficheros automatizados de las direcciones del emisor o del destinatario.”
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> This mail and its attached files are confidential and are only and exclusively intended to their addressee. In case you may receive this mail not being its addressee, we beg you to let us know the error by reply and to proceed to destroy it. The circulation by any mean of this mail could be penalised in accordance with the Spanish legislation. Is not allowed the use of both, the transmitter and the addressee’s, address with a commercial aim, or in order to be incorporated to automated data process or to any kind of files.
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> P Antes de imprimir este correo electrónico piense bien si es necesario hacerlo. El medioambiente es cosa de todos.
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> _______________________________________________ sakai-user mailing list sakai-user at collab.sakaiproject.org http://collab.sakaiproject.org/mailman/listinfo/sakai-user TO UNSUBSCRIBE: send email to sakai-user-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"
> >>>>>>> -- 
> >>>>>>> 
> >>>>>>> cid:image001.jpg at 01C9F98A.71C74E60 <http://www.samoo.es/>
> >>>>>>> 
> >>>>>>> <http://www.samoo.es/>
> >>>>>>> 
> >>>>>>> *Miguel Carro Pellicer*
> >>>>>>> 
> >>>>>>> *Technical Manager - Director técnico*
> >>>>>>> 
> >>>>>>> miguel.carro at samoo.es <mailto:miguel.carro at samoo.es>
> >>>>>>> 
> >>>>>>> +34 - 673 80 32 69
> >>>>>>> 
> >>>>>>> Skype: mcpellicer
> >>>>>>> 
> >>>>>>> www.samoo.es <http://www.samoo.es>
> >>>>>>> 
> >>>>>>> 
> >>>>>>> Este  correo  y  sus archivos asociados son privados y confidenciales y va dirigido  exclusivamente  a su destinatario. Si recibe este correo sin ser el  destinatario del mismo, le rogamos proceda a su eliminación y lo ponga en  conocimiento del emisor. La difusión por cualquier medio del contenido de  este  correo podría ser sancionada conforme a lo previsto en las leyes españolas, Ley Orgánica 15/1999 de Protección de Datos de Carácter Personal.  No  se autoriza la utilización con fines comerciales o para su incorporación a ficheros automatizados de las direcciones del emisor o del destinatario.”
> >>>>>>> 
> >>>>>>> 
> >>>>>>> This mail and its attached files are confidential and are only and exclusively intended to their addressee. In case you may receive this mail not being its addressee, we beg you to let us know the error by reply and to proceed to destroy it. The circulation by any mean of this mail could be penalised in accordance with the Spanish legislation. Is not allowed the use of both, the transmitter and the addressee’s, address with a commercial aim, or in order to be incorporated to automated data process or to any kind of files.
> >>>>>>> 
> >>>>>>> 
> >>>>>>> P Antes de imprimir este correo electrónico piense bien si es necesario hacerlo. El medioambiente es cosa de todos.
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> ------------------------------------------------------------------------ 
> >>>>>>> 
> >>>>>>> Index: portal/portal-impl/impl/src/java/org/sakaiproject/portal/charon/handlers/SiteHandler.java 
> >>>>>>> ===================================================================
> >>>>>>> ---  portal/portal-impl/impl/src/java/org/sakaiproject/portal/charon/handlers/SiteHandler.java (revision 84074)
> >>>>>>> +++ portal/portal-impl/impl/src/java/org/sakaiproject/portal/charon/handlers/SiteHandler.java (working copy)
> >>>>>>> @@ -27,6 +27,7 @@
> >>>>>>> import java.util.List;
> >>>>>>> import java.util.Map;
> >>>>>>> import java.util.Set;
> >>>>>>> +import java.util.Locale;
> >>>>>>> import javax.servlet.http.HttpServletRequest;
> >>>>>>> import javax.servlet.http.HttpServletResponse;
> >>>>>>> @@ -38,6 +39,7 @@
> >>>>>>> import org.sakaiproject.authz.cover.SecurityService;
> >>>>>>> import org.sakaiproject.component.cover.ServerConfigurationService;
> >>>>>>> import org.sakaiproject.entity.api.ResourceProperties;
> >>>>>>> +import org.sakaiproject.entity.api.ResourcePropertiesEdit;
> >>>>>>> import org.sakaiproject.entity.cover.EntityManager;
> >>>>>>> import org.sakaiproject.exception.IdUnusedException;
> >>>>>>> import org.sakaiproject.exception.PermissionException;
> >>>>>>> @@ -57,6 +59,7 @@
> >>>>>>> import org.sakaiproject.user.cover.PreferencesService;
> >>>>>>> import org.sakaiproject.user.cover.UserDirectoryService;
> >>>>>>> import org.sakaiproject.util.Web;
> >>>>>>> +import org.sakaiproject.util.ResourceLoader;
> >>>>>>> /**
> >>>>>>> * @author ieb
> >>>>>>> @@ -79,7 +82,8 @@
> >>>>>>> private int configuredTabsToDisplay = 5;
> >>>>>>> private boolean useDHTMLMore = false;
> >>>>>>> -
> >>>>>>> + + public SiteHandler()
> >>>>>>> {
> >>>>>>> setUrlFragment(SiteHandler.URL_FRAGMENT);
> >>>>>>> @@ -131,8 +135,8 @@
> >>>>>>> public void doSite(HttpServletRequest req, HttpServletResponse res, Session session,
> >>>>>>> String siteId, String pageId, String toolContextPath) throws ToolException,
> >>>>>>> IOException
> >>>>>>> - {
> >>>>>>> -
> >>>>>>> + { + boolean doFrameTop = "true".equals(req.getParameter("sakai.frame.top"));
> >>>>>>> boolean doFrameSuppress = "true".equals(req.getParameter("sakai.frame.suppress"));
> >>>>>>> @@ -201,7 +205,7 @@
> >>>>>>> }
> >>>>>>> return;
> >>>>>>> }
> >>>>>>> -
> >>>>>>> + // Lookup the page in the site - enforcing access control
> >>>>>>> // business rules
> >>>>>>> SitePage page = portal.getSiteHelper().lookupSitePage(pageId, site);
> >>>>>>> @@ -225,6 +229,10 @@
> >>>>>>> // should we consider a frameset ?
> >>>>>>> boolean doFrameSet = includeFrameset(rcontext, res, req, session, page);
> >>>>>>> + + + setSiteLanguage(site); + includeSiteNav(rcontext, req, session, siteId);
> >>>>>>> @@ -278,6 +286,8 @@
> >>>>>>> // This request is the destination of the request
> >>>>>>> portalService.setStoredState(null);
> >>>>>>> }
> >>>>>>> + + }
> >>>>>>> /**
> >>>>>>> @@ -405,6 +415,7 @@
> >>>>>>> {
> >>>>>>> skin = ServerConfigurationService.getString("skin.default");
> >>>>>>> }
> >>>>>>> + String skinRepo = ServerConfigurationService.getString("skin.repo");
> >>>>>>> rcontext.put("logoSkin", skin);
> >>>>>>> rcontext.put("logoSkinRepo", skinRepo);
> >>>>>>> @@ -731,5 +742,48 @@
> >>>>>>> }
> >>>>>>> return framesetRequested;
> >>>>>>> }
> >>>>>>> + + /**
> >>>>>>> + * *
> >>>>>>> + * + * @return Locale based on its string representation (language_region)
> >>>>>>> + */
> >>>>>>> + private Locale getLocaleFromString(String localeString)
> >>>>>>> + {
> >>>>>>> + String[] locValues = localeString.trim().split("_");
> >>>>>>> + if (locValues.length >= 3)
> >>>>>>> + return new Locale(locValues[0], locValues[1], locValues[2]); // language, country, variant
> >>>>>>> + else if (locValues.length == 2)
> >>>>>>> + return new Locale(locValues[0], locValues[1]); // language, country
> >>>>>>> + else if (locValues.length == 1)
> >>>>>>> + return new Locale(locValues[0]); // language
> >>>>>>> + else
> >>>>>>> + return Locale.getDefault();
> >>>>>>> + }
> >>>>>>> + + + void setSiteLanguage(Site site)
> >>>>>>> + {
> >>>>>>> + ResourceLoader rl = new ResourceLoader();
> >>>>>>> + + ResourcePropertiesEdit props = site.getPropertiesEdit();
> >>>>>>> + + String locale_string = props.getProperty("locale_string");
> >>>>>>> + + Locale loc;
> >>>>>>> + + // if no language was specified when creating the site, set default language to session
> >>>>>>> + if(locale_string == null || locale_string == "")
> >>>>>>> + { + loc = rl.setContextLocale(null);
> >>>>>>> + }
> >>>>>>> + + // if you have indicated a language when creating the site, set selected language to session
> >>>>>>> + else
> >>>>>>> + { + Locale locale = getLocaleFromString(locale_string); + loc = rl.setContextLocale(locale); + }
> >>>>>>> + }
> >>>>>>> }
> >>>>>>> Index: site-manage/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties 
> >>>>>>> ===================================================================
> >>>>>>> ---  site-manage/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties (revision 84077)
> >>>>>>> +++ site-manage/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties (working copy)
> >>>>>>> @@ -436,6 +436,8 @@
> >>>>>>> newsc.reqsite = Request Site
> >>>>>>> newsc.crsite = Create Site
> >>>>>>> +newsc.language.none = No Language provided
> >>>>>>> +
> >>>>>>> #NewSiteCourse
> >>>>>>> nscourse.creating = Course/Section Information
> >>>>>>> ### (moot) nscourse.step = Step 1 of
> >>>>>>> @@ -541,6 +543,9 @@
> >>>>>>> sinfo.means = means required information.
> >>>>>>> sinfo.stitle = Site Title
> >>>>>>> sinfo.url_alias = Site URL Alias
> >>>>>>> +
> >>>>>>> +sinfo.language = Site Language
> >>>>>>> +
> >>>>>>> sinfo.descr = Description
> >>>>>>> sinfo.display = (displayed on the site's homepage)
> >>>>>>> sinfo.short = Short Description
> >>>>>>> @@ -582,6 +587,8 @@
> >>>>>>> sitediconf.siticonema = Site Contact Email
> >>>>>>> sitediconf.sittit     = Site Title
> >>>>>>> +sitediconf.language = Site Language
> >>>>>>> +
> >>>>>>> sitediinf.alert     = Alert:
> >>>>>>> sitediinf.app       = Appearance (Icon)
> >>>>>>> ### (moot) sitediinf.app.none  = *default*
> >>>>>>> Index: site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/LocaleComparator.java 
> >>>>>>> ===================================================================
> >>>>>>> ---  site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/LocaleComparator.java (revision 0)
> >>>>>>> +++ site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/LocaleComparator.java (revision 0)
> >>>>>>> @@ -0,0 +1,73 @@
> >>>>>>> +/********************************************************************************** 
> >>>>>>> + * $URL: https://source.sakaiproject.org/svn/trunk/sakai/admin-tools/su/src/java/org/sakaiproject/tool/su/SuTool.java $
> >>>>>>> + * $Id: SuTool.java 6970 2006-03-23 23:25:04Z zach.thomas at txstate.edu $
> >>>>>>> + *********************************************************************************** 
> >>>>>>> + *
> >>>>>>> + * Copyright (c) 2005, 2006, 2008 The Sakai Foundation
> >>>>>>> + *
> >>>>>>> + * Licensed under the Educational Community License, Version 2.0 (the "License");
> >>>>>>> + * you may not use this file except in compliance with the License.
> >>>>>>> + * You may obtain a copy of the License at
> >>>>>>> + *
> >>>>>>> + *       http://www.osedu.org/licenses/ECL-2.0
> >>>>>>> + *
> >>>>>>> + * Unless required by applicable law or agreed to in writing, software
> >>>>>>> + * distributed under the License is distributed on an "AS IS" BASIS,
> >>>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> >>>>>>> + * See the License for the specific language governing permissions and
> >>>>>>> + * limitations under the License.
> >>>>>>> + *
> >>>>>>> + **********************************************************************************/ 
> >>>>>>> +
> >>>>>>> +package org.sakaiproject.site.tool;
> >>>>>>> +
> >>>>>>> +import java.util.Comparator;
> >>>>>>> +import java.util.Locale;
> >>>>>>> +
> >>>>>>> +/**
> >>>>>>> + * Comparator for sorting locale by DisplayName
> >>>>>>> + */
> >>>>>>> +public final class LocaleComparator implements Comparator
> >>>>>>> +{
> >>>>>>> + /**
> >>>>>>> + * * Compares Locale objects by comparing the DisplayName * *
> >>>>>>> + * + * @param obj1
> >>>>>>> + *        1st Locale Object for comparison *
> >>>>>>> + * @param obj2
> >>>>>>> + *        2nd Locale Object for comparison *
> >>>>>>> + * @return negative, zero, or positive integer * (obj1 charge is less than, equal to, or greater than the obj2 charge)
> >>>>>>> + */
> >>>>>>> + public int compare(Object obj1, Object obj2)
> >>>>>>> + {
> >>>>>>> + if (obj1 instanceof Locale && obj2 instanceof Locale)
> >>>>>>> + {
> >>>>>>> + Locale localeOne = (Locale) obj1;
> >>>>>>> + Locale localeTwo = (Locale) obj2;
> >>>>>>> +
> >>>>>>> + String displayNameOne = localeOne.getDisplayName();
> >>>>>>> + String displayNameTwo = localeTwo.getDisplayName();
> >>>>>>> +
> >>>>>>> + return displayNameOne.compareTo(displayNameTwo);
> >>>>>>> + }
> >>>>>>> + else
> >>>>>>> + {
> >>>>>>> + throw new ClassCastException("Inappropriate object class for LocaleComparator");
> >>>>>>> + }
> >>>>>>> + }
> >>>>>>> +
> >>>>>>> + /**
> >>>>>>> + * * Override of equals method * *
> >>>>>>> + * + * @param obj
> >>>>>>> + *        LocaleComparator object *
> >>>>>>> + * @return true if equal, false if not equal
> >>>>>>> + */
> >>>>>>> + public boolean equals(Object obj)
> >>>>>>> + {
> >>>>>>> + if (obj instanceof LocaleComparator)
> >>>>>>> + return super.equals(obj);
> >>>>>>> + else
> >>>>>>> + return false;
> >>>>>>> + }
> >>>>>>> +}
> >>>>>>> Index: site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java 
> >>>>>>> ===================================================================
> >>>>>>> ---  site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java (revision 84077)
> >>>>>>> +++ site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java (working copy)
> >>>>>>> @@ -156,6 +156,7 @@
> >>>>>>> import org.sakaiproject.util.Validator;
> >>>>>>> import org.sakaiproject.util.Web;
> >>>>>>> +
> >>>>>>> /**
> >>>>>>> * <p>
> >>>>>>> * SiteAction controls the interface for worksite setup.
> >>>>>>> @@ -299,6 +300,9 @@
> >>>>>>> private final static String PROP_SITE_TERM_EID = "term_eid";
> >>>>>>> + + private final static String PROP_SITE_LANGUAGE = "locale_string";
> >>>>>>> + /**
> >>>>>>> * Name of the state attribute holding the site list column list is sorted
> >>>>>>> * by
> >>>>>>> @@ -659,6 +663,12 @@
> >>>>>>> /** the course set definition from CourseManagementService **/
> >>>>>>> private final static String STATE_COURSE_SET = "state_course_set";
> >>>>>>> + + private List prefLocales = new ArrayList();
> >>>>>>> + private String SAKAI_LOCALES = "locales";
> >>>>>>> + private String SAKAI_LOCALES_MORE = "locales.more";
> >>>>>>> + private LocaleComparator localeComparator = new LocaleComparator(); + /**
> >>>>>>> * what are the tool ids within Home page?
> >>>>>>> * If this is for a newly added Home tool, get the tool ids from template site or system set default
> >>>>>>> @@ -1629,6 +1639,19 @@
> >>>>>>> context.put("short_description", siteInfo.short_description);
> >>>>>>> context.put("siteContactName", siteInfo.site_contact_name);
> >>>>>>> context.put("siteContactEmail", siteInfo.site_contact_email);
> >>>>>>> + + /// site language information
> >>>>>>> + + String locale_string_selected = (String) state.getAttribute("locale_string");
> >>>>>>> + if(locale_string_selected == ""  || locale_string_selected == null) + context.put("locale_string_selected", ""); + else
> >>>>>>> + {
> >>>>>>> + Locale locale_selected = getLocaleFromString(locale_string_selected);
> >>>>>>> + context.put("locale_string_selected", locale_selected);
> >>>>>>> + }
> >>>>>>> + + siteType = (String) state.getAttribute(STATE_SITE_TYPE);
> >>>>>>> toolRegistrationSelectedList = (List) state
> >>>>>>> .getAttribute(STATE_TOOL_REGISTRATION_SELECTED_LIST);
> >>>>>>> @@ -2016,6 +2039,11 @@
> >>>>>>> // revising a existing site's tool
> >>>>>>> context.put("existingSite", Boolean.TRUE);
> >>>>>>> context.put("continue", "14");
> >>>>>>> + + ResourcePropertiesEdit props = site.getPropertiesEdit();
> >>>>>>> + + String locale_string = props.getProperty(PROP_SITE_LANGUAGE);
> >>>>>>> + context.put("locale_string",locale_string);
> >>>>>>> } else {
> >>>>>>> // new site
> >>>>>>> context.put("existingSite", Boolean.FALSE);
> >>>>>>> @@ -2144,6 +2172,15 @@
> >>>>>>> context.put("form_site_contact_name", siteInfo.site_contact_name);
> >>>>>>> context.put("form_site_contact_email", siteInfo.site_contact_email);
> >>>>>>> + // available languages in sakai.properties
> >>>>>>> + List locales = getPrefLocales();
> >>>>>>> + + // insert blank item in the first position to give the option not to select any language + if(locales.get(0) != "")
> >>>>>>> + locales.add(0,"");
> >>>>>>> + + context.put("locales",locales); + return (String) getContext(data).get("template") + TEMPLATE[13];
> >>>>>>> case 14:
> >>>>>>> /*
> >>>>>>> @@ -2163,7 +2200,29 @@
> >>>>>>> }
> >>>>>>> context.put("oTitle", site.getTitle());
> >>>>>>> context.put("title", siteInfo.title);
> >>>>>>> -
> >>>>>>> + + // get updated language
> >>>>>>> + String new_locale_string = (String) state.getAttribute("locale_string"); + if(new_locale_string == ""  || new_locale_string == null) + context.put("new_locale", ""); + else
> >>>>>>> + {
> >>>>>>> + Locale new_locale = getLocaleFromString(new_locale_string);
> >>>>>>> + context.put("new_locale", new_locale);
> >>>>>>> + }
> >>>>>>> + + // get site language saved
> >>>>>>> + ResourcePropertiesEdit props = site.getPropertiesEdit(); + String oLocale_string = props.getProperty(PROP_SITE_LANGUAGE); + if(oLocale_string == "" || oLocale_string == null) + context.put("oLocale", ""); + else
> >>>>>>> + {
> >>>>>>> + Locale oLocale = getLocaleFromString(oLocale_string);
> >>>>>>> + context.put("oLocale", oLocale);
> >>>>>>> + }
> >>>>>>> + + context.put("description", siteInfo.description);
> >>>>>>> context.put("oDescription", site.getDescription());
> >>>>>>> context.put("short_description", siteInfo.short_description);
> >>>>>>> @@ -5432,6 +5491,7 @@
> >>>>>>> EmailService.send(from, to, message_subject, content,
> >>>>>>> headerTo, replyTo, null);
> >>>>>>> // revert back the local setting to default
> >>>>>>> + rb.setContextLocale(Locale.getDefault());
> >>>>>>> }
> >>>>>>> catch (Exception e)
> >>>>>>> @@ -5444,7 +5504,7 @@
> >>>>>>> // To Support
> >>>>>>> from = cUser.getEmail();
> >>>>>>> - // set locale to system default
> >>>>>>> + // set locale to system default rb.setContextLocale(Locale.getDefault());
> >>>>>>> to = requestEmail;
> >>>>>>> headerTo = requestEmail;
> >>>>>>> @@ -5518,7 +5578,7 @@
> >>>>>>> // To the Instructor
> >>>>>>> from = requestEmail;
> >>>>>>> to = cUser.getEmail();
> >>>>>>> - // set the locale to individual receipient's setting
> >>>>>>> + // set the locale to individual receipient's setting rb.setContextLocale(rb.getLocale(cUser.getId()));
> >>>>>>> headerTo = to;
> >>>>>>> replyTo = to;
> >>>>>>> @@ -5531,13 +5591,13 @@
> >>>>>>> content = buf.toString();
> >>>>>>> EmailService.send(from, to, message_subject, content, headerTo,
> >>>>>>> replyTo, null);
> >>>>>>> - // revert the locale to system default
> >>>>>>> + // revert the locale to system default rb.setContextLocale(Locale.getDefault());
> >>>>>>> state.setAttribute(REQUEST_SENT, Boolean.valueOf(true));
> >>>>>>> } // if
> >>>>>>> - // reset locale to user default
> >>>>>>> + // reset locale to user default rb.setContextLocale(null);
> >>>>>>> } // sendSiteRequest
> >>>>>>> @@ -5607,7 +5667,7 @@
> >>>>>>> }
> >>>>>>> // To Support
> >>>>>>> - //set local to default
> >>>>>>> + //set local to default rb.setContextLocale(Locale.getDefault());
> >>>>>>> from = UserDirectoryService.getCurrentUser().getEmail();
> >>>>>>> to = requestEmail;
> >>>>>>> @@ -5643,6 +5703,7 @@
> >>>>>>> } // if
> >>>>>>> // reset locale to user default
> >>>>>>> + rb.setContextLocale(null);
> >>>>>>> } // sendSiteNotification
> >>>>>>> @@ -6310,7 +6371,14 @@
> >>>>>>> if (contactEmail != null) {
> >>>>>>> siteProperties.addProperty(PROP_SITE_CONTACT_EMAIL, contactEmail);
> >>>>>>> }
> >>>>>>> -
> >>>>>>> + + /// site language information
> >>>>>>> + + String locale_string = (String) state.getAttribute("locale_string"); + + siteProperties.removeProperty(PROP_SITE_LANGUAGE); + siteProperties.addProperty(PROP_SITE_LANGUAGE, locale_string);
> >>>>>>> + if (state.getAttribute(STATE_MESSAGE) == null) {
> >>>>>>> try {
> >>>>>>> SiteService.save(Site);
> >>>>>>> @@ -6722,9 +6790,10 @@
> >>>>>>> ParameterParser params = data.getParameters();
> >>>>>>> String publishUnpublish = params.getString("publishunpublish");
> >>>>>>> String include = params.getString("include");
> >>>>>>> -
> >>>>>>> + if (sEdit != null) {
> >>>>>>> // editing existing site
> >>>>>>> + // publish site or not
> >>>>>>> if (publishUnpublish != null
> >>>>>>> && publishUnpublish.equalsIgnoreCase("publish")) {
> >>>>>>> @@ -6772,10 +6841,11 @@
> >>>>>>> }
> >>>>>>> } else {
> >>>>>>> // adding new site
> >>>>>>> + if (state.getAttribute(STATE_SITE_INFO) != null) {
> >>>>>>> SiteInfo siteInfo = (SiteInfo) state
> >>>>>>> .getAttribute(STATE_SITE_INFO);
> >>>>>>> -
> >>>>>>> + if (publishUnpublish != null
> >>>>>>> && publishUnpublish.equalsIgnoreCase("publish")) {
> >>>>>>> siteInfo.published = true;
> >>>>>>> @@ -6828,6 +6898,7 @@
> >>>>>>> state.setAttribute(STATE_TEMPLATE_INDEX, "10");
> >>>>>>> }
> >>>>>>> }
> >>>>>>> + } // doUpdate_site_access
> >>>>>>> @@ -8073,6 +8144,7 @@
> >>>>>>> addAlert(state, rb.getString("site_group_title_length_limit_1") + SiteConstants.SITE_GROUP_TITLE_LIMIT + " " + rb.getString("site_group_title_length_limit_2")); }
> >>>>>>>       }
> >>>>>>> + if (params.getString("description") != null) {
> >>>>>>> StringBuilder alertMsg = new StringBuilder();
> >>>>>>> String description = params.getString("description");
> >>>>>>> @@ -9066,6 +9138,13 @@
> >>>>>>> }
> >>>>>>> ResourcePropertiesEdit rp = site.getPropertiesEdit();
> >>>>>>> + + /// site language information
> >>>>>>> + + String locale_string = (String) state.getAttribute("locale_string"); + + rp.addProperty(PROP_SITE_LANGUAGE, locale_string);
> >>>>>>> + site.setShortDescription(siteInfo.short_description);
> >>>>>>> site.setPubView(siteInfo.include);
> >>>>>>> site.setJoinable(siteInfo.joinable);
> >>>>>>> @@ -10157,6 +10236,7 @@
> >>>>>>> public String site_contact_email = NULL_STRING; // site contact email
> >>>>>>> public String term = NULL_STRING; // academic term
> >>>>>>> + public String getSiteId() {
> >>>>>>> return site_id;
> >>>>>>> @@ -10224,7 +10304,7 @@
> >>>>>>> public void setTerm(String term) {
> >>>>>>> this.term = term;
> >>>>>>> - }
> >>>>>>> + } } // SiteInfo
> >>>>>>> @@ -11841,7 +11921,11 @@
> >>>>>>> SessionState state = ((JetspeedRunData) data).getPortletSessionState(((JetspeedRunData) data).getJs_peid());
> >>>>>>> ParameterParser params = data.getParameters();
> >>>>>>> -
> >>>>>>> + + String locale_string = params.getString("locales"); + + state.setAttribute("locale_string",locale_string);
> >>>>>>> + String option = params.getString("option");
> >>>>>>> if ("removeSection".equals(option))
> >>>>>>> {
> >>>>>>> @@ -11859,6 +11943,70 @@
> >>>>>>> doCancel(data);
> >>>>>>> }
> >>>>>>> }
> >>>>>>> + + /**
> >>>>>>> + * *
> >>>>>>> + * + * @return Locale based on its string representation (language_region)
> >>>>>>> + */
> >>>>>>> + private Locale getLocaleFromString(String localeString)
> >>>>>>> + {
> >>>>>>> + String[] locValues = localeString.trim().split("_");
> >>>>>>> + if (locValues.length >= 3)
> >>>>>>> + return new Locale(locValues[0], locValues[1], locValues[2]); // language, country, variant
> >>>>>>> + else if (locValues.length == 2)
> >>>>>>> + return new Locale(locValues[0], locValues[1]); // language, country
> >>>>>>> + else if (locValues.length == 1)
> >>>>>>> + return new Locale(locValues[0]); // language
> >>>>>>> + else
> >>>>>>> + return Locale.getDefault();
> >>>>>>> + }
> >>>>>>> + /**
> >>>>>>> + * @return Returns the prefLocales
> >>>>>>> + */
> >>>>>>> + + public List getPrefLocales()
> >>>>>>> + {
> >>>>>>> + // Initialize list of supported locales, if necessary
> >>>>>>> + if (prefLocales.size() == 0)
> >>>>>>> + {
> >>>>>>> + Locale[] localeArray = null;
> >>>>>>> + String localeString = ServerConfigurationService.getString(SAKAI_LOCALES);
> >>>>>>> + String localeStringMore = ServerConfigurationService.getString(SAKAI_LOCALES_MORE);
> >>>>>>> + + if ( localeString == null )
> >>>>>>> + localeString = "";
> >>>>>>> + if ( localeStringMore != null && !localeStringMore.equals("") )
> >>>>>>> + localeString += ","+localeStringMore;
> >>>>>>> +
> >>>>>>> + if ( !localeString.equals("") )
> >>>>>>> + {
> >>>>>>> + String[] sakai_locales = localeString.split(",");
> >>>>>>> + localeArray = new Locale[sakai_locales.length + 1];
> >>>>>>> + for (int i = 0; i < sakai_locales.length; i++)
> >>>>>>> + localeArray[i] = getLocaleFromString(sakai_locales[i]);
> >>>>>>> + localeArray[localeArray.length - 1] = Locale.getDefault();
> >>>>>>> + }
> >>>>>>> + else
> >>>>>>> + // if no locales specified, get default list
> >>>>>>> + {
> >>>>>>> + localeArray = new Locale[] { Locale.getDefault() };
> >>>>>>> + }
> >>>>>>> +
> >>>>>>> + // Sort locales and add to prefLocales (removing duplicates)
> >>>>>>> + Arrays.sort(localeArray, localeComparator);
> >>>>>>> + for (int i = 0; i < localeArray.length; i++)
> >>>>>>> + {
> >>>>>>> + if (i == 0 || !localeArray[i].equals(localeArray[i - 1]))
> >>>>>>> + { + prefLocales.add(localeArray[i]);
> >>>>>>> + }
> >>>>>>> + }
> >>>>>>> + }
> >>>>>>> +
> >>>>>>> + return prefLocales;
> >>>>>>> + }
> >>>>>>> + }
> >>>>>>> Index: site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-newSiteConfirm.vm 
> >>>>>>> ===================================================================
> >>>>>>> ---  site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-newSiteConfirm.vm (revision 84077)
> >>>>>>> +++ site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-newSiteConfirm.vm (working copy)
> >>>>>>> @@ -217,7 +217,23 @@
> >>>>>>> </td>
> >>>>>>> </tr>
> >>>>>>> <tr>
> >>>>>>> + + <tr>
> >>>>>>> + <th>
> >>>>>>> + $tlang.getString("sitediconf.language")
> >>>>>>> + </th>
> >>>>>>> + <td> + #if ($locale_string_selected == "")
> >>>>>>> + <span class="instruction">$tlang.getString("newsc.language.none")</span>
> >>>>>>> + #else
> >>>>>>> + $validator.escapeHtml($locale_string_selected.getDisplayName())
> >>>>>>> + #end + </td>
> >>>>>>> + </tr>
> >>>>>>> + + + <tr>
> >>>>>>> <th colspan="2">
> >>>>>>> <h4>
> >>>>>>> $tlang.getString("newsc.descr")
> >>>>>>> Index: site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-editInfo.vm 
> >>>>>>> ===================================================================
> >>>>>>> ---  site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-editInfo.vm (revision 84077)
> >>>>>>> +++ site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-editInfo.vm (working copy)
> >>>>>>> @@ -184,6 +184,18 @@
> >>>>>>> $!selectedTerm
> >>>>>>> </p> #end
> >>>>>>> +
> >>>>>>> + <div class="shorttext">
> >>>>>>> + <label for="language">
> >>>>>>> + $tlang.getString("sinfo.language")
> >>>>>>> + </label> + <select name="locales" class="indnt2" id="locales" size="5"> + #foreach($locale in $locales) + <option value="$locale.toString()" #if ($locale.toString() == $locale_string)selected="true" #elseif($locale.toString() == "")selected="true" #end>$validator.escapeHtml($locale.getDisplayName())</option> + #end + </select>
> >>>>>>> + </div>
> >>>>>>> + <div class="longtext">
> >>>>>>> <label for="description" class="block">
> >>>>>>> $tlang.getString("sitediinf.des")
> >>>>>>> Index: site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-editInfoConfirm.vm 
> >>>>>>> ===================================================================
> >>>>>>> ---  site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-editInfoConfirm.vm (revision 84077)
> >>>>>>> +++ site-manage/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-editInfoConfirm.vm (working copy)
> >>>>>>> @@ -42,6 +42,28 @@
> >>>>>>> </td> </tr>
> >>>>>>> #end
> >>>>>>> + + <tr>
> >>>>>>> + <th>
> >>>>>>> + $tlang.getString("sitediconf.language")
> >>>>>>> + </th>
> >>>>>>> + <td> + #if (!$new_locale.equals("") && !$oLocale.equals(""))
> >>>>>>> + #if (!$new_locale.toString().equals($oLocale.toString()))
> >>>>>>> + <span class="highlight">$validator.escapeHtml($new_locale.getDisplayName())</span> 
> >>>>>>> + #else
> >>>>>>> + $validator.escapeHtml($new_locale.getDisplayName())
> >>>>>>> + #end
> >>>>>>> + #elseif (!$new_locale.equals(""))
> >>>>>>> + <span class="highlight">$validator.escapeHtml($new_locale.getDisplayName())</span> 
> >>>>>>> + #elseif ($oLocale.equals(""))
> >>>>>>> + <span class="instruction">$tlang.getString("newsc.language.none")</span>
> >>>>>>> + #else
> >>>>>>> + <span class="highlight">$tlang.getString("newsc.language.none")</span>
> >>>>>>> + #end
> >>>>>>> + </td>
> >>>>>>> + </tr>
> >>>>>>> + #if($!description)
> >>>>>>> <tr>
> >>>>>>> <th>
> >>>>>>> 
> >>>>>>> ------------------------------------------------------------------------ 
> >>>>>>> 
> >>>>>>> _______________________________________________
> >>>>>>> sakai-user mailing list
> >>>>>>> sakai-user at collab.sakaiproject.org
> >>>>>>> http://collab.sakaiproject.org/mailman/listinfo/sakai-user
> >>>>>>> 
> >>>>>>> TO UNSUBSCRIBE: send email to sakai-user-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"
> >>>>> -- 
> >>>>> Daniel Merino Echeverría
> >>>>> daniel.merino at unavarra.es
> >>>>> Gestor de teleformación - Centro Superior de Innovación Educativa.
> >>>>> Tfno: 948-168489 - Universidad Pública de Navarra.
> >>>>> -- 
> >>>>> Los amigos van y vienen, pero los enemigos se acumulan.
> >>>>> _______________________________________________
> >>>>> sakai-user mailing list
> >>>>> sakai-user at collab.sakaiproject.org
> >>>>> http://collab.sakaiproject.org/mailman/listinfo/sakai-user
> >>>>> 
> >>>>> TO UNSUBSCRIBE: send email to sakai-user-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"
> >>> 
> >>> -- 
> >>> Daniel Merino Echeverría
> >>> daniel.merino at unavarra.es
> >>> Gestor de teleformación - Centro Superior de Innovación Educativa.
> >>> Tfno: 948-168489 - Universidad Pública de Navarra.
> >>> -- 
> >>> En teoría, no existe diferencia entre teoría y práctica; en la práctica sí la hay.
> > 
> > -- 
> > Daniel Merino Echeverría
> > daniel.merino at unavarra.es
> > Gestor de teleformación - Centro Superior de Innovación Educativa.
> > Tfno: 948-168489 - Universidad Pública de Navarra.
> > --
> > Sólo los peces muertos se dejan llevar por la corriente del río. (Anónimo)
> > Index: kernel-util/src/main/java/org/sakaiproject/util/ResourceLoader.java
> > ===================================================================
> > --- kernel-util/src/main/java/org/sakaiproject/util/ResourceLoader.java    (revision 97491)
> > +++ kernel-util/src/main/java/org/sakaiproject/util/ResourceLoader.java    (working copy)
> > @@ -187,13 +187,14 @@
> >    /**
> >     ** Return user's prefered locale
> >     **     First: return locale from Sakai user preferences, if available
> > -     **     Second: return locale from user session, if available
> > +     **     Second: return locale from session, if available
> >     **     Last: return system default locale
> >     **
> >     ** @return user's Locale object
> >    **
> >    ** @author Sugiura, Tatsuki (University of Nagoya)
> >    ** @author Jean-Francois Leveque (Universite Pierre et Marie Curie - Paris 6)
> > +    ** @author Steve Swinsburg (steve.swinsburg at gmail.com)
> >     **/
> >    public Locale getLocale()
> >    {             
> > @@ -208,29 +209,37 @@
> >             
> >             else
> >             {
> > -                 loc = (Locale) SessionManager.getCurrentSession().getAttribute(LOCALE_SESSION_KEY+SessionManager.getCurrentSessionUserId());
> > +                 /*loc = (Locale) SessionManager.getCurrentSession().getAttribute(LOCALE_SESSION_KEY+SessionManager.getCurrentSessionUserId());
> >                 
> >                 // The locale is not in the session. 
> >                 // Look for it and set in session
> >                 if (loc == null) 
> > -                     loc = setContextLocale(null);
> > +                     loc = setContextLocale(null);*/
> > +                 
> > +                 String sessionId = SessionManager.getCurrentSession().getId();
> > +                 M_log.debug("Retrieving locale for sessionId: "+sessionId);
> > +                 loc=(Locale) SessionManager.getCurrentSession().getAttribute(LOCALE_SESSION_KEY+sessionId);
> >             }
> >         }
> >         catch(NullPointerException e) 
> >         {
> > +            loc = null;
> >            if (M_log.isWarnEnabled()) {
> >                M_log.warn("getLocale() swallowing NPE");
> >                e.printStackTrace();
> >            }
> > -             // The locale is not in the session. 
> > -             // Look for it and set in session
> > +         }
> > +        
> > +        // The locale is not in the session at all, so set in session
> > +         if (loc == null) 
> >             loc = setContextLocale(null);
> > -         } 
> > 
> >        if (loc == null) {
> >            M_log.info("getLocale() Locale not found in preferences or session, returning default");
> >            loc = Locale.getDefault();
> >        }
> > +        
> > +        M_log.debug("Locale: " + loc.toString());
> > 
> >         return loc;
> >    }
> > @@ -285,6 +294,7 @@
> >    **
> >    ** @author Sugiura, Tatsuki (University of Nagoya)
> >    ** @author Jean-Francois Leveque (Universite Pierre et Marie Curie - Paris 6)
> > +    ** @author Steve Swinsburg (steve.swinsburg at gmail.com)
> >     **/
> >    public Locale setContextLocale(Locale loc)
> >    {         
> > @@ -293,7 +303,13 @@
> >        {
> >            try
> >            {
> > -                loc = getLocale( SessionManager.getCurrentSessionUserId() );
> > +                //loc = getLocale( SessionManager.getCurrentSessionUserId() );
> > +                String userId = SessionManager.getCurrentSessionUserId();
> > +                
> > +                if (M_log.isDebugEnabled()) {
> > +                    M_log.debug("setContextLocale(Locale), checking user preferences for userId: " + userId);
> > +                }
> > +                loc = getLocale(userId);
> >            }
> >            catch (Exception e)
> >            {
> > @@ -309,6 +325,9 @@
> >        {
> >            try
> >            {
> > +                if (M_log.isDebugEnabled()) {
> > +                        M_log.debug("setContextLocale(Locale), checking browser session.");
> > +                    }
> >                loc = (Locale) SessionManager.getCurrentSession().getAttribute("locale");
> >            }
> >            catch (NullPointerException e)
> > @@ -326,7 +345,7 @@
> >            // fallback to default.
> >            loc = Locale.getDefault();
> >            if (M_log.isDebugEnabled()) {
> > -                M_log.debug("setContextLocale(Locale), default locale");
> > +                M_log.debug("setContextLocale(Locale), using default locale");
> >            }
> >        }
> >        else if (!Locale.getDefault().getLanguage().equals("en") && loc.getLanguage().equals("en") && !loc.toString().equals(DEBUG_LOCALE))
> > @@ -337,13 +356,26 @@
> >                M_log.debug("setContextLocale(Locale), Tweak for English");
> >            }
> >        }
> > +        
> > +        if (M_log.isDebugEnabled()) {
> > +                M_log.debug("Locale is: "+ loc.toString());
> > +            }
> > 
> > -        //Write the sakai locale in the session    
> > +        //Write the sakai locale into the session with sessionId as key.
> > +        //We do it this way so that anon users can also leverage the locale settings of sites, since anon users have a session.
> > +        //see KNL-984
> >        try 
> >        {
> > -            String sessionUser = SessionManager.getCurrentSessionUserId();
> > +            /*String sessionUser = SessionManager.getCurrentSessionUserId();
> >            if ( sessionUser != null )
> > -                SessionManager.getCurrentSession().setAttribute(LOCALE_SESSION_KEY+sessionUser,loc);
> > +                SessionManager.getCurrentSession().setAttribute(LOCALE_SESSION_KEY+sessionUser,loc);*/
> > +            String sessionId = SessionManager.getCurrentSession().getId();
> > +            
> > +            if (M_log.isDebugEnabled()) {
> > +                M_log.debug("Setting locale into session: " + sessionId);
> > +            }
> > +            
> > +            SessionManager.getCurrentSession().setAttribute(LOCALE_SESSION_KEY+sessionId,loc);
> >        }
> >        catch (Exception e) 
> >        {
> > @@ -479,7 +511,7 @@
> > 
> > 
> >    /**
> > -     ** Return ResourçceBundle properties as if Map.keySet() 
> > +     ** Return ResourceBundle properties as if Map.keySet() 
> >     **/
> >    public Set keySet()
> >    {
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-user/attachments/20121106/49088f02/attachment-0001.html 


More information about the sakai-user mailing list