[Using Sakai] anonymous visitor language

Daniel Merino daniel.merino at unavarra.es
Tue Nov 6 01:30:57 PST 2012


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)
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: parche_kernel-1.1.13_site_language_with_anon_role.patch
Url: http://collab.sakaiproject.org/pipermail/sakai-user/attachments/20121106/4e99a7c4/attachment-0001.pl 


More information about the sakai-user mailing list