SlideShare a Scribd company logo
#SummitNow
Internationalising a Share
Customisation
November 2013, Barcelona & Boston
David Webster / Alfresco Engineer
#SummitNow#SummitNow
Terminology:
Internationalisation or i18n
The engineering process to enable a piece
of software to be customised to a user’s
region.
#SummitNow#SummitNow
Terminology:
Localisation or L10n
The process of taking internationalised
software and doing the customisation.
#SummitNow#SummitNow
Terminology:
Locale
1. The user’s language and region
2. The identifier for the user’s language and
region, e.g. en_GB
#SummitNow#SummitNow
#SummitNow#SummitNow
Now in 11 Languages:
German: de
English (US): en
Spanish: es
French: fr
Italian: it
Japanese: ja
Dutch: nl
Russian: ru
Chinese (simplified):
zh_CN
Norwegian: nb_no
Brazilian
Portuguese: pt_BR
#SummitNow#SummitNow
Internationalising Share
#SummitNow#SummitNow
$ cat slingshot.properties
#SummitNow#SummitNow
$ ls slingshot*.properties
slingshot.properties
slingshot_de.properties
slingshot_es.properties
slingshot_fr.properties
slingshot_it.properties
slingshot_ja.properties
slingshot_nb_NO.properties
slingshot_nl.properties
slingshot_pt_BR.properties
slingshot_ru.properties
slingshot_zh_CN.properties
#SummitNow#SummitNow
Using messages in your code
#SummitNow#SummitNow
Else: Anywhere in JavaScript:
Alfresco.util.message(key, scope, var1…varN)
#SummitNow#SummitNow
Setting messages in ftl
(Alfresco.component)
setMessages(${messages});
#SummitNow#SummitNow
Setting messages in ftl
Alfresco.util.addMessages(${messages}, scope);
#SummitNow#SummitNow
If: JavaScript extends
Alfresco.component.Base
this.msg(key, var1…varN)
#SummitNow#SummitNow
If: AMD style widget in Share
4.2
i18nRequirements: [{i18nFile: “./i18n/name.properties”}],
[…]
this.message(key, var1…varN)
#SummitNow#SummitNow
if AMD style widget:
• i18nRequirements: [{i18nFile: path}]
• this.messages(key, var1…varN)
else if Alfresco.component.Base
• .setMessages(${messages})
• this.msg(key, var1…varN)
else
• Alfresco.util.addMessages(${messages},
scope)
• Alfresco.util.message(key, scope, var1…varN)
#SummitNow#SummitNow
In FreeMarker templates:
${msg(key, var1…varN)}
#SummitNow#SummitNow
In JavaScript backed
webscripts:
msg.get(key, var1…varN)
#SummitNow#SummitNow
File Encoding
#SummitNow#SummitNow
Use ascii in *.properties files:
• 月 === u6708
• ê === u00ea
• ß === u00df
#SummitNow#SummitNow
Convert using native2ascii:
• native2ascii -encoding UTF8
file.utf8.properties file.acsii.properties
• native2ascii -reverse -encoding UTF8
file.ascii.properties file.utf8.properties
#SummitNow#SummitNow
Best Practices
#SummitNow#SummitNow
1. Don’t concatenate messages
BAD:
//search.results.start=There are
//search.results.end=search results
var msg = this.msg(“search.results.start”)
+ “ ” + results.length + “ ”
+ this.msg(“search.results.end”);
#SummitNow#SummitNow
1. Don’t concatenate messages
Good:
//search.results =There are {0} search
results
var msg = this.msg(“search.results”,
results.length);
#SummitNow#SummitNow
//search.results.none=There are no search
results
//search.results.singular=There is one search
result
//search.results.plural=There are {0} search
results
if (results) {
msg = this.msg(“search.results.” +
(results.length === 1) ? “singular” :
“plural”, results.length);
} else {
msg= this.msg(“search.results.none”);
#SummitNow#SummitNow
1. Don’t concatenate messages
EN:
search.results.found=Showing {0} of {1} results for "{2}" within {3}…
DE:
search.results.found={0} von {1} Ergebnissen fu00fcr ''{2}'' in {3}
werden angezeigt...
JA:
search.results.found={3}''{2}''u3067u898bu3064u304bu3063u305f
u7d50u679cu306e{0} / {1}u4ef6u3092u8868u793au3059u308b...
Or (UTF8)
search.results.found={3}''{2}''で見つかった結果の{0} / {1}件を表示する...
#SummitNow#SummitNow
2. Separate Contexts
#SummitNow#SummitNow
3. Be careful with single quotes
• Double the apostrophe (’’) when you see bracket(s) ({})
in the same message.
• Do not double the apostrophe( ’) if there is no bracket
({}) in the same message.
• Do not double the apostrophe( ’) if you see an
apostrophe in the original English contents since it
should have been confirmed to be displayed properly.
http://blogs.sun.com/byuan/entry/best_practices_of_handling_apostrophes
#SummitNow#SummitNow
4. Avoid localised commas
## Dates
days.initial=S,M,T,W,T,F,S
days.short=Su,Mo,Tu,We,Th,Fr,Sa
days.medium=Sun,Mon,Tue,Wed,Thu,Fri,Sat
days.long=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,
Saturday
months.short=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
months.long=January,February,March,April,May,June,July,August,
September,October,November,December
#SummitNow#SummitNow
4. Avoid localised commas
• u3001 === 、
• u3001 !== ,
#SummitNow#SummitNow
5. Use OOTB date formats
#SummitNow#SummitNow
http://xkcd.com/1179/
#SummitNow#SummitNow
6. Format dates client side
#SummitNow#SummitNow
7. Allow for growth
#SummitNow#SummitNow
8. No config in *.properties
10. Don’t forget number formats
9. Internationalise everything
#SummitNow#SummitNow
Best practices:
1. Don’t concatenate
2. Separate contexts
3. Be careful with
single quotes
4. Avoid localised
commas
5. Use OOTB date
formats
6. Format dates client
side
7. Allow for growth
8. No config in
*.properties
9. Internationalise
everything
10. Don’t forget number
formats
#SummitNow#SummitNow
Localisation Community
http://crowdin.net/project/alfresco
http://addons.alfresco.com/
#SummitNow#SummitNow
Questions?
• david.webster@alfresco.com
• @davidcognite
#SummitNow

More Related Content

PPTX
A path from Share to ADF
PPTX
Do no Evil?
PPTX
Process backed governance
PPTX
Amazon Macie hackathon presentation
PPTX
Why search and rescue is like software development
PDF
Records Management - the api story
PPTX
Extending share: from the outside in
PPTX
BeeCon 2016 Alfresco Engineering lightning talk
A path from Share to ADF
Do no Evil?
Process backed governance
Amazon Macie hackathon presentation
Why search and rescue is like software development
Records Management - the api story
Extending share: from the outside in
BeeCon 2016 Alfresco Engineering lightning talk

More from David Webster (6)

PPTX
Extending Share: Real World Examples
PPTX
OxSAR Water Safety - June 2015
PPTX
Dynamic Risk Assessment, March 2013
PPTX
OxSAR Water Safety - Nov 2014
PPTX
Alfresco Records Management Tech Talk Live September 2015
PDF
Aikau testing tech talk live 83 20150204
Extending Share: Real World Examples
OxSAR Water Safety - June 2015
Dynamic Risk Assessment, March 2013
OxSAR Water Safety - Nov 2014
Alfresco Records Management Tech Talk Live September 2015
Aikau testing tech talk live 83 20150204
Ad

Recently uploaded (20)

DOCX
How to Use SharePoint as an ISO-Compliant Document Management System
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PDF
MCP Security Tutorial - Beginner to Advanced
PDF
Ableton Live Suite for MacOS Crack Full Download (Latest 2025)
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
DOCX
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
PDF
Time Tracking Features That Teams and Organizations Actually Need
PPTX
Patient Appointment Booking in Odoo with online payment
PDF
Cost to Outsource Software Development in 2025
PDF
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
PPTX
GSA Content Generator Crack (2025 Latest)
PDF
Salesforce Agentforce AI Implementation.pdf
PDF
Digital Systems & Binary Numbers (comprehensive )
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Autodesk AutoCAD Crack Free Download 2025
PPTX
Oracle Fusion HCM Cloud Demo for Beginners
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
PDF
STL Containers in C++ : Sequence Container : Vector
PDF
How Tridens DevSecOps Ensures Compliance, Security, and Agility
PDF
DNT Brochure 2025 – ISV Solutions @ D365
How to Use SharePoint as an ISO-Compliant Document Management System
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
MCP Security Tutorial - Beginner to Advanced
Ableton Live Suite for MacOS Crack Full Download (Latest 2025)
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
Time Tracking Features That Teams and Organizations Actually Need
Patient Appointment Booking in Odoo with online payment
Cost to Outsource Software Development in 2025
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
GSA Content Generator Crack (2025 Latest)
Salesforce Agentforce AI Implementation.pdf
Digital Systems & Binary Numbers (comprehensive )
Computer Software and OS of computer science of grade 11.pptx
Autodesk AutoCAD Crack Free Download 2025
Oracle Fusion HCM Cloud Demo for Beginners
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
STL Containers in C++ : Sequence Container : Vector
How Tridens DevSecOps Ensures Compliance, Security, and Agility
DNT Brochure 2025 – ISV Solutions @ D365
Ad

Internationalising a Share Customisation