the 10 commandments of building global software
TRANSCRIPT
#speaksmartling
The 10 Commandments of
Building Global Software
Andrey AkselrodCTO and Co-Founder
Smartling
Brian KellyVP, Engineering
TimeTrade
&
#speaksmartling
…but make it easy to take it
to a global market later?
Is it possible to write software for a
single region first…
The Global Challenge
Global-Ready Software
Internationalization is hard.
Conventional wisdom
It isn’t really that difficult,
if you consider some
important things during design
and development.
&
#speaksmartling
Reality
#speaksmartling
Carefully Manage User-Visible Strings
Global Software Development Rule #1
Maintain user-visible strings separate from
application code
This makes it easier to send strings to translators
and incorporate their work
String values must be changeable without
breaking application behavior
#speaksmartling
Carefully Manage User-Visible Strings
Global Software Development Rule #1
Favor existing platform tools rather than
inventing your own
For example:
ResourceBundles for Java
.resx resources for .NET
gettext for C
NSLocalizedString for Objective-C
Carefully Manage User-Visible Strings
Global Software Development Rule #1
Concatenation is a recipe for i18n pain
Bad: user + “has logged on”
Good: “{0} has logged on”
Carefully Manage User-Visible Strings
Global Software Development Rule #1
Include punctuation in your localizable strings
Helps prevent breakages on other locales
Even more valuable if text flows right-to-left“Don’t forget your spaces!” in French is ”N’oubliez pas vos espaces !”
UI sorting order should be based on translated
stringsExample: “Korea” in Spanish is “Corea”
Expect User-Visible Strings to Grow/Shrink
Global Software Development Rule #2
English phrases may double in size when
translated into other languages“Read more” is “Weitere informationen” in German
They may also drastically shrink when translated into
other languages“To fall in love at first sight” is “一见钟情” in Chinese
UIs will have to adapt accordingly to
accommodate different string lengths
#speaksmartling
Remember the Importance of Context
Global Software Development Rule #3
Context is everything for the translator
The source string might not be enough
Make as much information as possible available to
them: UI screenshots, documentation, personas, etc.Or best of all, access to the product itself
#speaksmartling
Keep Images Free of Embedded Text
Global Software Development Rule #4
For anything except a company or product
logo, avoid creating graphics that have text
embedded directly
Instead of a low-cost string
translation, you’ll incur graphic
design costs if you embed text
in graphics
#speaksmartling
Consider Calendar Differences
Global Software Development Rule #5
Time formats differ from country to country 2:30p.m. 14:30 2:30PM
Date formats vary tremendouslydd/mm/yyyy mm-dd-yyyy YYYYMMDD
Don’t rely on abbreviations to denote days, such as
M T W T F S S “M” works for German (“Montag”),
but not for Spanish (“lunes”) or Japanese (“月曜日”)
#speaksmartling
Consider Calendar Differences
Global Software Development Rule #5
Not everyone in the world has a weekend on
Saturday and Sunday
Not all weeks start on Sunday
Not all countries use the Gregorian calendar
#speaksmartling
Plan for Different Time Zones
Global Software Development Rule #6
There are hundreds of different time zones
And they’ve changed a lot through historyEven in recent history!
Some zones have partial-hour offsetsNewfoundland, Nepal
#speaksmartling
Plan for Different Time Zones
Global Software Development Rule #6
Always, always store times in UTC
And convert to the user’s local time zone when they
need to be rendered
Don’t reinvent the wheel
Use things like Joda (now included in Java 8 as
java.time), Noda, NSDate, and Moment.js to make
time, date, and time zone handling easy
#speaksmartling
Use Established Data Standards
Global Software Development Rule #7
Stand on the shoulders of giants
Always use established, globally-focused standards
when parsing and storing data
#speaksmartling
Use Established Data Standards
Global Software Development Rule #7
International phone numbers?
Use E.164
Example: +16175551234
Timestamps?
Use ISO-8601
Example: 2014-11-05T13:15:30Z
#speaksmartling
Use Established Data Standards
Global Software Development Rule #7
Language codes?
Use ISO-639Example: “zh” for Chinese
Country codes?
Use ISO-3166
Example: “GB” for the United Kingdom
Time zones?
Use the Olson database
Example: “America/New York” for Eastern Time
#speaksmartling
Avoid ASCII, Use Unicode
Global Software Development Rule #8
The days of the ASCII bit-flip trick are gone
“a” = 01100001
“A” = 01000001
Unicode is here to stay
And has been around for years already
#speaksmartling
Avoid ASCII, Use Unicode
Global Software Development Rule #8
To use Unicode properly, you must use it
consistently throughout your application
Always use Unicode-capable types and libraries
Never assume that characters are encoded in ASCII
Need to choose an encoding? Use UTF-8
Avoid ASCII, Use Unicode
Global Software Development Rule #8
Strings in databases should be given extra scrutiny
Never assume that one character equals one byte –
especially important for column sizing
Use Unicode-compatible DB types for user-visible
stringsutf8mb4 for MySQL, nvarchar for SQL Server
#speaksmartling
Assume Text May Flow from Right to Left
Global Software Development Rule #9
Arabic, Hebrew, Persian, Urdu (and more) all flow
from right to left
But what if left-to-right content is quoted within?
And what about embedded numerals?
#speaksmartling
#globalsoftware
Assume Text May Flow from Right to Left
Global Software Development Rule #9
When building a web application, regularly test how
it displays when you apply this CSS3 property
globally: direction: rtl;
Use R2 (or similar) to flip css:https://github.com/ded/R2
#speaksmartling
Test from Day One for Multilingual Support
Global Software Development Rule #10
“Pseudo-internationalization” is one of the most
valuable future-proofing tests you can add to your
automated suite
If you ever plan to bring your application to global
markets, testing with pseudo-i18n will identify
architectural issues early
#speaksmartling
Test from Day One for Multilingual Support
Global Software Development Rule #10
Instead of using test data like “John Doe”, use “John-
假会河 Doe-沖鈈批” instead
Doing so will verify that all APIs, libraries, databases,
and code within your application can parse and store
Unicode
You don’t have to localize your application to test it
for basic i18n effectiveness, and your team doesn’t
have to be bilingual
Web
Browser
Web
Server
App
Server DB
“John-假会河Doe-沖鈈批”
“John-假会河Doe-沖鈈批”
“John-假会河Doe-沖鈈批”
“John-??????
Doe-??????”
“John-??????
Doe-??????”“John-假会河Doe-沖鈈批”
Example of Pseudo-i18n
#speaksmartling
Test from Day One for Multilingual Support
Global Software Development Rule #10
Want to learn more about the software
we’ve built for the world?
smartling.com
timetrade.com
#speaksmartling