[Using Sakai] anonymous visitor language

Steve Swinsburg steve.swinsburg at gmail.com
Tue Oct 30 05:04:58 PDT 2012


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"


More information about the sakai-user mailing list