[Using Sakai] anonymous visitor language

Daniel Merino daniel.merino at unavarra.es
Tue Oct 30 04:00:29 PDT 2012


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.


More information about the sakai-user mailing list