SlideShare a Scribd company logo
1 of 26
Localizing Sakai for Multiple Locales
Apereo Conference June 2013
Cris J. Holdorph | holdorph@unicon.net
Phillip Ball | pball@unicon.net
Localizing Sakai
Sakai Community Process
How to Translate Sakai - Confluence Page
https://confluence.sakaiproject.org/x/HYDbAQ
Locale Leads
https://source.sakaiproject.org/svn/reference/trunk/docs/readme_i18n.txt
Sakai I18N mailing list
http://collab.sakaiproject.org/mailman/listinfo/i18n
Property Files
key = value based text file
over 140 different files in Sakai 2.9.x-all
Most in different directories
No consistent location for the files
Property Files
Example Files
announcement/announcement-impl/impl/src/bundle/annc-access.properties
announcement/announcement-impl/impl/src/bundle/siteemaanc.properties
announcement/announcement-tool/tool/src/bundle/announcement.properties
announcement/announcement-tool/tool/src/bundle/announcement_fr_FR.properties
polls/tool/src/bundle/org/sakaiproject/poll/bundle/Messages.properties
polls/tool/src/java/poll.properties
polls/tool/src/java/poll-option.properties
Property Files
Example Properties
English
custom.number = Number of days in the past
French
custom.number = Nombre de jours dans le passu00e9
Property Files
!! DEVELOPERS
Please do not CHANGE the meaning of a property
CREATE a new property and remove the old one
Help Files
HTML based files, with an XML table of contents file
Over 35 help DIRECTORIES in Sakai 2.9.x-all
Directories will have between 1 (resetpass) to 30 (samigo)
files to translate
Example files
announcement/announcement-help/src/sakai_announcements/
help.xml
aqyk.html
aqyk_pt_BR.html
aqzq.html
aqzq_pt_BR.html
Email Service
XML based file
All translations within that file
Loaded into database, with some support for reloading
Email Template Administration Tool available in Administration
Workspace
Supports Macros
Not all tools use this
Example File
site-manage/site-manage-impl/impl/src/bundle/notifyNewuser.xml
Areas Not Multi-Localizable
Areas that do not support multi-locale localization
Grading Scales
Site Types
Roles
Date Formats
Many fields in Sakai serve as both a display and input field, this is
common when editing data in forms
Displaying dates is typically locale specific
If you vary the display / entry of a form field, you must process it differently
ie: MM-DD-YYYY versus DD-MM-YYYY
Parsing MMM-DD-YYY in multiple locales can also be tricky if you have
not correctly localized your datepicker (and/or you allow users to type in
their own month)
Passing Timestamp (number of milliseconds from epoch) can simplify
server to client communication, however, be careful of time zones (more
on this later)
Localizing Date Formats
The SSP Date Bug
https://wiki.jasig.org/x/8JFuAw
java.util.Date - represents the number of milliseconds from epoch
java.sql.Date - represents a java.util.Date where the hours, minutes, seconds and
milliseconds are set to 0 in the particular instance time zone
java.sql.Timestamp - represents a java.util.Date with additional support for
nanoseconds
If you pass a Timestamp (number of milliseconds/nanoseconds from epoch) to the
browser and let javascript interpret the value, it will do it using the browser's Time zone
If the server and browser do not share a time zone, then dates that have no time
component (i.e., java.sql.Date) can shift
Midnight (0:00, 12:00am) on 2013 June 5 in the Eastern time zone is the same as
9:00pm (21:00) on 2013 June 4 in the Pacific time zone
Date Picker
https://jira.sakaiproject.org/
browse/SAK-23662
The purpose of this new
datepicker implementation
in our project was to
maintain full control over
language generation and
create constancy
throughout various tool's
date and time selection
mechanisms.
Javascript Localization
Methods for localization
Dirty DOM Methods
Render translated text into a hidden HTML element.
Render translated text as javascript on the page
within script tags
Clean DOM, Preferred
Load pre-generated external language files
Pulling text from HTML
Strings are rendered inside an HTML element, which is
then hidden with CSS.
<div class="hide" id="selectall">
<h:outputText value="#{msgs.selectAll}"/>
</div>
Use Javascript to grab the text rendered in the
element.
$('#selectall').text();
Grab JS off the page
Translated strings are rendered into JavaScript on the page.
<script>
var lang = {
! nodata: "<h:outputText value="#{msgs.selectAll}"/>",
! numbererror: "<h:outputText value="#{msgs.numTypeError}"/>"
};
</script>
Since language strings are already a JavaScript object,
properties can be called directly.
$(‘#message’).text( lang.numbererror );
External JavaScript File
Most JavaScript code-sets implement this method of
language translation
Language files are pre-generated ahead of time, not
during page load
Benefit of native JS translations, without a dirty DOM,
but at the cost of an HTTP request (but with the added
benefit of browser caching)
The Datepicker Setup
Maven plugin
generates JavaScript
language files
Datepicker detects
language, loads lang
file:
js/lang-datepicker/
datepicker_de.js
datepicker_fr_FR.js
datepicker_ja.js
...
Localization Odds and Ends
First Time Login
The Non-Logged in experience in Sakai is in one
Locale
There is no "Locale" picker
Can work around this problem using external login
systems like CAS
Site Language vs. My Workspace
Locale specific Skin or Logo
Integration with Other
Systems
What language/locale should the user receive in the
other system?
What language/locale should the user receive when
they first come to Sakai?
Basic LTI with non-ASCII characters
SSO
CK Editor
Work by Noah to support Localized CK editor
Not all CK Editor plugins are localized
No external way to add localizations to CK editor
plugins that are missing them
Questions and Answers
Thanks!
Apereo Conference June 2013
Cris J. Holdorph | holdorph@unicon.net
Phillip Ball | pball@unicon.net

More Related Content

What's hot

mobile in the cloud with diamonds. improved.
mobile in the cloud with diamonds. improved.mobile in the cloud with diamonds. improved.
mobile in the cloud with diamonds. improved.Oleg Shanyuk
 
RESTful Web Services with Spring MVC
RESTful Web Services with Spring MVCRESTful Web Services with Spring MVC
RESTful Web Services with Spring MVCdigitalsonic
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVCIndicThreads
 
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...Codemotion
 
Infrastructure as code terraformujeme cloud
Infrastructure as code   terraformujeme cloudInfrastructure as code   terraformujeme cloud
Infrastructure as code terraformujeme cloudViliamPucik
 
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Fwdays
 
AngularJS and REST - #omrs15 tutorial
AngularJS and REST - #omrs15 tutorialAngularJS and REST - #omrs15 tutorial
AngularJS and REST - #omrs15 tutorialSaptarshi Purkayastha
 
REST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkREST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkChris Weldon
 
Web application apis
Web application apisWeb application apis
Web application apis재환 이
 
Building Your First App with MongoDB
Building Your First App with MongoDBBuilding Your First App with MongoDB
Building Your First App with MongoDBMongoDB
 
Designing REST services with Spring MVC
Designing REST services with Spring MVCDesigning REST services with Spring MVC
Designing REST services with Spring MVCSerhii Kartashov
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Eventstkramar
 
Ch7(publishing my sql data on the web)
Ch7(publishing my sql data on the web)Ch7(publishing my sql data on the web)
Ch7(publishing my sql data on the web)Chhom Karath
 
REST Web API with MongoDB
REST Web API with MongoDBREST Web API with MongoDB
REST Web API with MongoDBMongoDB
 

What's hot (20)

mobile in the cloud with diamonds. improved.
mobile in the cloud with diamonds. improved.mobile in the cloud with diamonds. improved.
mobile in the cloud with diamonds. improved.
 
RESTful Web Services with Spring MVC
RESTful Web Services with Spring MVCRESTful Web Services with Spring MVC
RESTful Web Services with Spring MVC
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...
 
Infrastructure as code terraformujeme cloud
Infrastructure as code   terraformujeme cloudInfrastructure as code   terraformujeme cloud
Infrastructure as code terraformujeme cloud
 
AWS KSS
AWS  KSSAWS  KSS
AWS KSS
 
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
 
Taste of RxJS
Taste of RxJSTaste of RxJS
Taste of RxJS
 
AngularJS and REST - #omrs15 tutorial
AngularJS and REST - #omrs15 tutorialAngularJS and REST - #omrs15 tutorial
AngularJS and REST - #omrs15 tutorial
 
REST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkREST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend Framework
 
Javantura v3 - ELK – Big Data for DevOps – Maarten Mulders
Javantura v3 - ELK – Big Data for DevOps – Maarten MuldersJavantura v3 - ELK – Big Data for DevOps – Maarten Mulders
Javantura v3 - ELK – Big Data for DevOps – Maarten Mulders
 
Web application apis
Web application apisWeb application apis
Web application apis
 
Building Your First App with MongoDB
Building Your First App with MongoDBBuilding Your First App with MongoDB
Building Your First App with MongoDB
 
Designing REST services with Spring MVC
Designing REST services with Spring MVCDesigning REST services with Spring MVC
Designing REST services with Spring MVC
 
Ajax ppt
Ajax pptAjax ppt
Ajax ppt
 
Jquery Ajax
Jquery AjaxJquery Ajax
Jquery Ajax
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Events
 
Ch7(publishing my sql data on the web)
Ch7(publishing my sql data on the web)Ch7(publishing my sql data on the web)
Ch7(publishing my sql data on the web)
 
L18 REST API Design
L18 REST API DesignL18 REST API Design
L18 REST API Design
 
REST Web API with MongoDB
REST Web API with MongoDBREST Web API with MongoDB
REST Web API with MongoDB
 

Viewers also liked

Benchmarking APIs - LNUG February 2014
Benchmarking APIs - LNUG February 2014Benchmarking APIs - LNUG February 2014
Benchmarking APIs - LNUG February 2014Matteo Figus
 
The problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about itThe problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about itFrancois Marier
 
Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014
Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014
Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014Dana Pylayeva
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeWim Godden
 
All out in the Cloud - CloudEast 2012
All out in the Cloud - CloudEast 2012All out in the Cloud - CloudEast 2012
All out in the Cloud - CloudEast 2012Jan Jongboom
 
Instant LAMP Stack with Vagrant and Puppet
Instant LAMP Stack with Vagrant and PuppetInstant LAMP Stack with Vagrant and Puppet
Instant LAMP Stack with Vagrant and PuppetPatrick Lee
 

Viewers also liked (6)

Benchmarking APIs - LNUG February 2014
Benchmarking APIs - LNUG February 2014Benchmarking APIs - LNUG February 2014
Benchmarking APIs - LNUG February 2014
 
The problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about itThe problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about it
 
Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014
Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014
Chocolate, LEGO and Scrum Jambalaya at SGNOLA2014
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the code
 
All out in the Cloud - CloudEast 2012
All out in the Cloud - CloudEast 2012All out in the Cloud - CloudEast 2012
All out in the Cloud - CloudEast 2012
 
Instant LAMP Stack with Vagrant and Puppet
Instant LAMP Stack with Vagrant and PuppetInstant LAMP Stack with Vagrant and Puppet
Instant LAMP Stack with Vagrant and Puppet
 

Similar to Using Sakai with Multiple Locales

Java Script - A New Look
Java Script - A New LookJava Script - A New Look
Java Script - A New Lookrumsan
 
Intro to-html-backbone
Intro to-html-backboneIntro to-html-backbone
Intro to-html-backbonezonathen
 
Get Ahead with HTML5 on Moible
Get Ahead with HTML5 on MoibleGet Ahead with HTML5 on Moible
Get Ahead with HTML5 on Moiblemarkuskobler
 
Krug Fat Client
Krug Fat ClientKrug Fat Client
Krug Fat ClientPaul Klipp
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...SPTechCon
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2Geoffrey Fox
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web appsyoavrubin
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Codemotion
 
Scout xss csrf_security_presentation_chicago
Scout xss csrf_security_presentation_chicagoScout xss csrf_security_presentation_chicago
Scout xss csrf_security_presentation_chicagoknaddison
 
Performance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best PracticesPerformance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best PracticesDoris Chen
 
Internationalizing Your AngularJS App
Internationalizing Your AngularJS AppInternationalizing Your AngularJS App
Internationalizing Your AngularJS AppSarah Hudson
 
J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012ghnash
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWRgouthamrv
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web DevelopmentRobert J. Stein
 
Cape Cod Web Technology Meetup - 2
Cape Cod Web Technology Meetup - 2Cape Cod Web Technology Meetup - 2
Cape Cod Web Technology Meetup - 2Asher Martin
 

Similar to Using Sakai with Multiple Locales (20)

Java Script - A New Look
Java Script - A New LookJava Script - A New Look
Java Script - A New Look
 
Intro to-html-backbone
Intro to-html-backboneIntro to-html-backbone
Intro to-html-backbone
 
Get Ahead with HTML5 on Moible
Get Ahead with HTML5 on MoibleGet Ahead with HTML5 on Moible
Get Ahead with HTML5 on Moible
 
Krug Fat Client
Krug Fat ClientKrug Fat Client
Krug Fat Client
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web apps
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
 
your browser, my storage
your browser, my storageyour browser, my storage
your browser, my storage
 
Html5
Html5Html5
Html5
 
js.pptx
js.pptxjs.pptx
js.pptx
 
Scout xss csrf_security_presentation_chicago
Scout xss csrf_security_presentation_chicagoScout xss csrf_security_presentation_chicago
Scout xss csrf_security_presentation_chicago
 
Performance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best PracticesPerformance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best Practices
 
Internationalizing Your AngularJS App
Internationalizing Your AngularJS AppInternationalizing Your AngularJS App
Internationalizing Your AngularJS App
 
J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWR
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
 
Cape Cod Web Technology Meetup - 2
Cape Cod Web Technology Meetup - 2Cape Cod Web Technology Meetup - 2
Cape Cod Web Technology Meetup - 2
 
Web workers
Web workersWeb workers
Web workers
 

Recently uploaded

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Recently uploaded (20)

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

Using Sakai with Multiple Locales

  • 1. Localizing Sakai for Multiple Locales Apereo Conference June 2013 Cris J. Holdorph | holdorph@unicon.net Phillip Ball | pball@unicon.net
  • 3. Sakai Community Process How to Translate Sakai - Confluence Page https://confluence.sakaiproject.org/x/HYDbAQ Locale Leads https://source.sakaiproject.org/svn/reference/trunk/docs/readme_i18n.txt Sakai I18N mailing list http://collab.sakaiproject.org/mailman/listinfo/i18n
  • 4. Property Files key = value based text file over 140 different files in Sakai 2.9.x-all Most in different directories No consistent location for the files
  • 6. Property Files Example Properties English custom.number = Number of days in the past French custom.number = Nombre de jours dans le passu00e9
  • 7. Property Files !! DEVELOPERS Please do not CHANGE the meaning of a property CREATE a new property and remove the old one
  • 8. Help Files HTML based files, with an XML table of contents file Over 35 help DIRECTORIES in Sakai 2.9.x-all Directories will have between 1 (resetpass) to 30 (samigo) files to translate Example files announcement/announcement-help/src/sakai_announcements/ help.xml aqyk.html aqyk_pt_BR.html aqzq.html aqzq_pt_BR.html
  • 9. Email Service XML based file All translations within that file Loaded into database, with some support for reloading Email Template Administration Tool available in Administration Workspace Supports Macros Not all tools use this Example File site-manage/site-manage-impl/impl/src/bundle/notifyNewuser.xml
  • 10. Areas Not Multi-Localizable Areas that do not support multi-locale localization Grading Scales Site Types Roles
  • 12. Many fields in Sakai serve as both a display and input field, this is common when editing data in forms Displaying dates is typically locale specific If you vary the display / entry of a form field, you must process it differently ie: MM-DD-YYYY versus DD-MM-YYYY Parsing MMM-DD-YYY in multiple locales can also be tricky if you have not correctly localized your datepicker (and/or you allow users to type in their own month) Passing Timestamp (number of milliseconds from epoch) can simplify server to client communication, however, be careful of time zones (more on this later) Localizing Date Formats
  • 13. The SSP Date Bug https://wiki.jasig.org/x/8JFuAw java.util.Date - represents the number of milliseconds from epoch java.sql.Date - represents a java.util.Date where the hours, minutes, seconds and milliseconds are set to 0 in the particular instance time zone java.sql.Timestamp - represents a java.util.Date with additional support for nanoseconds If you pass a Timestamp (number of milliseconds/nanoseconds from epoch) to the browser and let javascript interpret the value, it will do it using the browser's Time zone If the server and browser do not share a time zone, then dates that have no time component (i.e., java.sql.Date) can shift Midnight (0:00, 12:00am) on 2013 June 5 in the Eastern time zone is the same as 9:00pm (21:00) on 2013 June 4 in the Pacific time zone
  • 14. Date Picker https://jira.sakaiproject.org/ browse/SAK-23662 The purpose of this new datepicker implementation in our project was to maintain full control over language generation and create constancy throughout various tool's date and time selection mechanisms.
  • 16. Methods for localization Dirty DOM Methods Render translated text into a hidden HTML element. Render translated text as javascript on the page within script tags Clean DOM, Preferred Load pre-generated external language files
  • 17. Pulling text from HTML Strings are rendered inside an HTML element, which is then hidden with CSS. <div class="hide" id="selectall"> <h:outputText value="#{msgs.selectAll}"/> </div> Use Javascript to grab the text rendered in the element. $('#selectall').text();
  • 18. Grab JS off the page Translated strings are rendered into JavaScript on the page. <script> var lang = { ! nodata: "<h:outputText value="#{msgs.selectAll}"/>", ! numbererror: "<h:outputText value="#{msgs.numTypeError}"/>" }; </script> Since language strings are already a JavaScript object, properties can be called directly. $(‘#message’).text( lang.numbererror );
  • 19. External JavaScript File Most JavaScript code-sets implement this method of language translation Language files are pre-generated ahead of time, not during page load Benefit of native JS translations, without a dirty DOM, but at the cost of an HTTP request (but with the added benefit of browser caching)
  • 20. The Datepicker Setup Maven plugin generates JavaScript language files Datepicker detects language, loads lang file: js/lang-datepicker/ datepicker_de.js datepicker_fr_FR.js datepicker_ja.js ...
  • 22. First Time Login The Non-Logged in experience in Sakai is in one Locale There is no "Locale" picker Can work around this problem using external login systems like CAS Site Language vs. My Workspace Locale specific Skin or Logo
  • 23. Integration with Other Systems What language/locale should the user receive in the other system? What language/locale should the user receive when they first come to Sakai? Basic LTI with non-ASCII characters SSO
  • 24. CK Editor Work by Noah to support Localized CK editor Not all CK Editor plugins are localized No external way to add localizations to CK editor plugins that are missing them
  • 26. Thanks! Apereo Conference June 2013 Cris J. Holdorph | holdorph@unicon.net Phillip Ball | pball@unicon.net