PowerPoint Presentation - Localization & Internationalization

advertisement
Sakai: Localization &
Internationalization
Beth Kirschner
University of Michigan
beth.kirschner@umich.edu
Localization (l10n) versus
Internationalization (i18n)
 Localization of a web interface is usually limited
to isolating the language dependencies such
that they can be easily translated.
 Internationalization of a web interface takes into
account many aspects beyond strict translation
of the text, such as cultural differences, space
allocation and formatting.
 Sakai needs to consider both.
Enabling Sakai Localization





Velocity templates
Java Server Faces templates
Java code
Static HTML (e.g. help text)
Database information
Sakai Presentation Environments
Sakai
Portal
Sakai JSF
Widget Set
Velocity
Templates
Sakai Legacy
Tools
Sakai Legacy
Services
Sakai
Framework APIs
The Sakai Tool Environment
The Sakai Legacy Environment
Sakai Velocity
Support Layer
Java Server
Faces in JSP
Java Tool Logic
Java Beans
Sakai Application
Services
Localizing Velocity Templates (before)
<form name="viewForm" class="toolbarForm"
method="post" action="#toolForm("CalendarAction")">
<input type="hidden" name="eventSubmit_doView"
value="view" />
View:
<select name="view" size="1" tabindex="3"
onchange="blur();document.viewForm.submit();">
#foreach ($view in ["Calendar by day", "Calendar by
week", "Calendar by month", "Calendar by year", "List of
events"])
Localizing Velocity Templates (after)
<form name="viewForm" class="toolbarForm"
method="post" action="#toolForm("CalendarAction")">
<input type="hidden" name="eventSubmit_doView"
value="view" />
$tlang.getString(“view.view”)
<select name="view" size="1" tabindex="3"
onchange="blur();document.viewForm.submit();">
#foreach ($view in ["$tlang.getString('java.byday')",
"$tlang.getString('java.byweek')",
"$tlang.getString('java.bymonth')",
"$tlang.getString('java.byyear')",
"$tlang.getString('java.listeve')"])
Localizing JSF Templates
<f:loadBundle
basename="org.sakaiproject.tool.annc.bundle.Messages"
var="msgs"/>
<f:view>
<sakai:view_container title="#{msgs.annc_list_title}">
<h:form>
<sakai:tool_bar>
<sakai:tool_bar_item
action="#{AnnouncementTool.processActionListNew}"
value="#{msgs.annc_list_new}" />
Localizing Java Code (before)
private static final String STATE_SELECTED_VIEW
= "state_selected_view";
private static final String VIEW_BY_DAY
= "Calendar by day";
private static final String VIEW_BY_WEEK
= "Calendar by week";
private static final String VIEW_BY_MONTH
= "Calendar by month";
private static final String VIEW_BY_YEAR
= "Calendar by year";
…
context.put("selectedView", VIEW_BY_DAY);
Localizing Java Code (after)
private static ResourceBundle rb =
ResourceBundle.getBundle("calendar")
private static final String STATE_SELECTED_VIEW
= "state_selected_view";
private static final String VIEW_BY_DAY
= rb.getString("java.byday");
private static final String VIEW_BY_WEEK
= rb.getString("java.byweek");
private static final String VIEW_BY_MONTH
= rb.getString("java.bymonth");
private static final String VIEW_BY_YEAR
= rb.getString("java.byyear");
…
context.put("selectedView", VIEW_BY_DAY);
Localization Status
 Thanks to the developers at University of Lleida,
almost every English phrase has been localized
into Resource Bundles (almost 4000 separate
phrases)
 Translation mostly completed in Japanese,
Korean and Chinese
 Interest has been expressed in Slovokian,
Portugese, Catalonia, Spanish, Armenian,
Hebrew, …
Asian Translations for NEESgrid portal
Chinese
Japanese
Korean
How to Translate… in 5 easy steps
1) Ingest properties files into MS Excel
Spreadsheet
2) Translate English Text in spreadsheet
3) Export into Unicode UTF-16 representation
4) Convert from UTF-16 into UTF-8
5) Ascii-encode UTF-8 representation and save as
property file for target language locale
(see “I18N and L10N” worksite at
http://collab.sakaiproject.org/portal for tips and
conversion utilities)
Dynamic Language Detection
 What about portals that need to support multiple
language locales?
 Requirements:
• Minimum change to existing code and tools
• Use existing ResourceBundle properties files
• Simple for users to use
 Tatsuki Sugiura at Nagoya University has
developed an elegant solution
New ResourceLoader class
 New ResourceLoader class replaces
java.util.ResourceBundle
 ResourceLoader works as a ManagedBean for
Java Server Faces (JSF)
 ResourceLoader works as a wrapper for
ResourceBundle for java and Velocity templates
 Language Locale retrieved from HTTP request
Users define language preference in browser
(IE, Netscape, Safari, Firefox, …)
ResourceLoader Implementation
Enabling Sakai Internationalization








Page Layout and design
Sentence construction (subject/verb/object)
Timezone differences
Date & Time construction
Definition of a Week
Numbers & Currency
Language dependent sorting
Other culturally dependent data
Page Layouts (skins)
 Page layouts can differ for application specific
reasons or cultural reasons (e.g. right-to-left
languages)
 Layout is completely configurable using CSS
(Cascading Style Sheets)
 Different skins can affect:
•
•
•
•
Color & Fonts
Icons & Background Images
Layout & Format
Navigation
Skin Directory Structure
/library/skin/
tool_base.css
/default/
/tool.css
/portal.css
/images/
/new-skin/
banner_inst.gif
check.gif
headback.gif
headmid.gif
headright.gif
help.gif
help_h.gif
info.gif
linkoff.gif
linkover.gif
linksel.gif
logo_inst.gif
reload.gif
reload_h.gif
title.1.gif
topleft-tab.gif
title22.gif
topleft-tab_hov.gif
titleback.gif
topright-p-title.gif
titleleft.gif
warn.gif
titleright.gif
topleft-curtab.gif
topleft-p-title.gif
Define your skin here
Sakai Stylesheet Definitions
Right-justified Skins
(thanks to Gonzalo Silverio for screenshots)
Page Layout: Space Allocation
What’s not done yet
 Problem: Subject/Verb/Object, Subject/Object/Verb,
Verb,Subject,Object constructions
• Solution: Need to rewrite to use MessageFormat for these
compositions
 Problem: Timezone differences
• Solution: Add timezone option to user preferences and modify affected
tools (e.g. Calendar, Chat)
 Problem: Date & Time construction
• Solution: Java provides date/time constructions specific to language
locale -- code needs to be audited for consistent usage
What’s not done yet (continued)
 Problem: Definition of a week
• Solution: Configuration option needs to be built into Schedule tool
 Numbers & Currency
• Solution: Java provides number/currency constructions specific to
regional locales -- code needs to be audited for consistent usage
 Language independent sorting
• Solution: Java provides correct unicode string comparisons -- code
needs to be audited for consistent usage
Questions?
Download