the 10 commandments of building global software

41
#speaksmartling The 10 Commandments of Building Global Software Andrey Akselrod CTO and Co-Founder Smartling Brian Kelly VP, Engineering TimeTrade

Upload: smartling

Post on 16-Jul-2015

150 views

Category:

Software


0 download

TRANSCRIPT

#speaksmartling

The 10 Commandments of

Building Global Software

Andrey AkselrodCTO and Co-Founder

Smartling

Brian KellyVP, Engineering

TimeTrade

Andrey@chelya

Brian@brikelly

#speaksmartling

Presenters

A quick word

&

#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

Rule #1

#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”

#speaksmartling

Expect User-Visible Strings

to Grow/Shrink

Rule #2

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

Rule #3

#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

#speaksmartling

Keep Images Free of Embedded Text

Rule #4

#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

Rule #5

#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

Rule #6

#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

Rule #7

#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

Rule #8

#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

Rule #9

#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

Test from Day One

for Multilingual Support

Rule #10

#speaksmartling

#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

Questions, anyone?We’ll be glad to answer.

#speaksmartling

Want a copy of our [email protected]

#speaksmartling

Want to learn more about the software

we’ve built for the world?

smartling.com

timetrade.com

#speaksmartling

Thanks.

#speaksmartling