Internationalization and Localization for Translators

49
INTERNATIONALIZATION and LOCALIZATION for TRANSLATORS ATA 55 th ANNUAL CONFERENCE CHICAGO, IL

description

Presented at the ATA 55th Annual Conference

Transcript of Internationalization and Localization for Translators

Page 1: Internationalization and Localization for Translators

INTERNATIONALIZATION and

LOCALIZATION for TRANSLATORS

A T A 5 5 t h A N N U A L C O N F E R E N C E

C H I C A G O , I L

Page 2: Internationalization and Localization for Translators

[email protected]

dudgeoninternational.com

@rickyd2b

RICK DUDGEON DIANA DUDGEONR2k D3a

• Principal Software Engineer

• San Francisco Bay Area native

• Master of Dudgeon International

• Internationalization enthusiast

• C++ as a Second Language

• EN<>ES Translator

• Born and raised in Mexico City

• Founder of English Español

• Web design and social media bum

• Paul Mc Beatles groupie

[email protected]

englishespanol.com

@dianadudgeon

Hello? Is it me you’re looking for?

-Lionel Richie“

Page 3: Internationalization and Localization for Translators

CHECKLIST

What is what

What code looks like

What is needed

What is relevant for us

Size matters

Testing

Tools

Money talk

GENERAL CONSIDERATIONS

Ask away

Get the slides at

dudgeoninternational.com/ata

Find more resources in our glossy

handout

Tweet our tweetables (They are

cleverly marked with a )

Let’s get it started in here!

-Black Eyed Peas“

Page 4: Internationalization and Localization for Translators

Every minute 200+ million emails are sent, 600 websites are created and 60 hours of video are

uploaded on YouTube. #ata55

GOING GLO-CALIn times when communications and brands “go global”, ironically there is also an increasing need for them to “go local”.

By giving people the power to share, we're making the world more transparent.

-Mark Zuckerberg“

Page 5: Internationalization and Localization for Translators

United States

Japan

Somalia

Ch

ina

The translation industry enables the movement of information, not only by translating words,

but also by adding cultural relevance. #ata55

Page 6: Internationalization and Localization for Translators

INTERNATIONALIZATION and

LOCALIZATION for TRANSLATORS

i18n

L10n

Ain’t nobody got time for that.

-Sweet Brown“

Page 7: Internationalization and Localization for Translators

WHAT IS INTERNATIONALIZATION?i18n

Internationalization is the process of generalizing a

product so that it can handle multiple languages and

cultural conventions without the need for re-design.

Internationalization takes place at the level of program

design and document development.

“The Localisation Industry Standards Association (LISA)

defines it as follows:

#i18n is the technical design done at a programming level so that a software application

can be adapted to various locales. #ata55

Oh, smashing,groovy, yay capitalism!-Austin Powers“

Page 8: Internationalization and Localization for Translators

WHAT IS LOCALIZATION?L10n

Localization involves taking a product and making it

linguistically and culturally appropriate to the target

locale (country/region and language) where it will be

used and sold.“Again,

according to LISA (RIP):

To localize means to adapt a particular product or service for a specific country or region.

#i18n #L10n #ata55

Here, there and everywhere.-Paul McCartney“

Page 9: Internationalization and Localization for Translators

LOCALIZATIONL10n

Localization is the process of adapting software

for a particular locale.

What he said.

#i18n #L10n #ata55

What'chu talkin' 'bout, Willis?

-Arnold Jackson“

INTERNATIONALIZATIONi18n

Internationalization is the process of modifying

software so that it can be localized in multiple

languages for multiple regions.

Page 10: Internationalization and Localization for Translators

WHAT IS SOFTWARE?

• Programs that run on your computer

• Interactive web sites

• Apps that run on your tablet or phone

• Video games

While we’re off in the weeds…

If you need to log in, if it has a shopping cart, if it has a search box, if it asks you for your favorite

color, this is software. #ata55

Safety first.-Rick Dudgeon“

Page 11: Internationalization and Localization for Translators

WHAT IS GLOBALIZATION?G11n

Some view g11n as the combination of i18n with L10n,

but there is more involved. G11n is more of a marketing

or business concept. It describes the strategy for taking a

message and transmitting it to a variety of locales while

crossing languages barriers and geographic borders.

It’s up to you whether to use an upper-case or lower-case g.

Have fun with it!

To localize means to adapt a particular product or service for a specific country or region.

#i18n #L10n #ata55

Colour my world.-Chicago“

#G11n is the strategy for taking a message and transmitting it to a variety of locales by crossing

language barriers and geographic borders.

Page 12: Internationalization and Localization for Translators

It takes a very different set of skills to create a gourmet kitchen

than it does to create a gourmet meal. #i18n #L10n #ata55

Page 13: Internationalization and Localization for Translators

Rick’s Slides Here. Enjoy.

Suggested hashtag:

#codesnojoke

Page 14: Internationalization and Localization for Translators

protected function tableRowStart($row) {

?>

<td>

<input type='checkbox' id='task_id[]' name='task_id[]' value=<?php echo $row['task_id']; ?> />

</td>

<?

}

protected function tableRowEnd($row) {

?>

<td style='white-space: nowrap;'>

<button class='button' onclick='location.href = "activity.php?task_id=<?php echo

$row['task_id']; ?>"'>Start</button>

<button class='button' onclick='location.href = "completeTask.php?task_id=<?php echo

$row['task_id']; ?>"'>Done</button>

</td>

<?php

}

protected function preTable() {

?>

<form>

<div style='border-bottom: solid #aaa 2px;'>

<select onchange='takeAction(this);'>

<option value=''>Select Action</option>

<option value='completeTask'>Close</option>

<option value='postponeTasks'>Postpone</option>

</select>

</div>

<?php

}

protected function postTable() {

?>

</form>

<?php

}

Page 15: Internationalization and Localization for Translators

<div style='border-bottom: solid #aaa 2px;'>

<select onchange='takeAction(this);'>

<option value=''>Select Action</option>

<option value='completeTask'>Close</option>

<option value='postponeTasks'>Postpone</option>

</select>

</div>

Page 16: Internationalization and Localization for Translators

protegida función tablaFilaPrincipio($fila) {

?>

<fd>

<entrada tipo='casilla' id='tarea_id[]' nombre='tarea_id[]' valor=<?php eco $fila['tarea_id'];

?> />

</fd>

<?

}

protegida función tablaFilaFin($fila) {

?>

<fd estilo='espacio-blanco: noajuste;'>

<botón class='botón' conhacerclic='ubicación.href = "actividad.php?tarea_id=<?php eco

$fila['tarea_id']; ?>"'>Principio</botón>

<botón class='botón' conhacerclic='ubicación.href = "tareaCompletar.php?tarea_id=<?php eco

$fila['tarea_id']; ?>"'>Terminado</botón>

</fd>

<?php

}

protegida función preTabla() {

?>

<forma>

<div estilo='border-bottom: solido #aaa 2px;'>

<seleccionar concambio='llevarAcaboAcción(this);'>

<opción valor=''>Seleccionar Acción</opción>

<opción valor='tareaCompletar'>Cerrar</opción>

<opción valor='posponerTareas'>Postponer</opción>

</seleccionar>

</div>

<?php

}

protegida función postTabla() {

?>

</forma>

<?php

}

Page 17: Internationalization and Localization for Translators

<div estilo='border-bottom: sólido #aaa 2px;'>

<seleccionar concambio='llevarAcaboAcción(this);'>

<opción valor=''>Seleccionar Acción</opción>

<opción valor='tareaCompletar'>Cerrar</opción>

<opción valor='posponerTareas'>Posponer</opción>

</seleccionar>

</div>

Page 18: Internationalization and Localization for Translators

protected function tableRowStart($row) {

?>

<td>

<input type='checkbox' id='task_id[]' name='task_id[]' value=<?php echo $row['task_id']; ?> />

</td>

<?

}

protected function tableRowEnd($row) {

?>

<td style='white-space: nowrap;'>

<button class='button' onclick='location.href = "activity.php?task_id=<?php echo

$row['task_id']; ?>"'>Start</button>

<button class='button' onclick='location.href = "completeTask.php?task_id=<?php echo

$row['task_id']; ?>"'>Done</button>

</td>

<?php

}

protected function preTable() {

?>

<form>

<div style='border-bottom: solid #aaa 2px;'>

<select onchange='takeAction(this);'>

<option value=''>Select Action</option>

<option value='completeTask'>Close</option>

<option value='postponeTasks'>Postpone</option>

</select>

</div>

<?php

}

protected function postTable() {

?>

</form>

<?php

}

Page 19: Internationalization and Localization for Translators

<div style='border-bottom: solid #aaa 2px;'>

<select onchange='takeAction(this);'>

<option value=''>Select Action</option>

<option value='completeTask'>Close</option>

<option value='postponeTasks'>Postpone</option>

</select>

</div>

Page 20: Internationalization and Localization for Translators

protected function tableRowStart($row) {

?>

<td>

<input type='checkbox' id='task_id[]' name='task_id[]' value=<?php echo $row['task_id']; ?> />

</td>

<?

}

protected function tableRowEnd($row) {

?>

<td style='white-space: nowrap;'>

<button class='button' onclick='location.href = "activity.php?task_id=<?php echo

$row['task_id']; ?>"'><?php echo translate('Button.Start'); ?></button>

<button class='button' onclick='location.href = "completeTask.php?task_id=<?php echo

$row['task_id']; ?>"'><?php echo translate('Button.Done'); ?></button>

</td>

<?php

}

protected function preTable() {

?>

<form>

<div style='border-bottom: solid #aaa 2px;'>

<select onchange='takeAction(this);'>

<option value=''>><?php echo translate('Option.SelectAction'); ?></option>

<option value='completeTask'>>><?php echo translate('Option.Close');

?></option>

<option value='postponeTasks'>>><?php echo translate('Option.Postpone');

?></option>

</select>

</div>

<?php

}

Page 21: Internationalization and Localization for Translators

<select onchange='takeAction(this);'>

<option value=''>><?php echo translate('Option.SelectAction'); ?></option>

<option value='completeTask'>>><?php echo translate('Option.Close'); ?></option>

<option value='postponeTasks'>>><?php echo translate('Option.Postpone'); ?></option>

</select>

Page 22: Internationalization and Localization for Translators

RESOURCE FILES

How do I count words from a website?

-Anonymous LinkedIn Member in the Translation Industry“

Resource files may come in a variety of formats. At their most basic level, they should

be a map of unique identifiers with a corresponding string in the target language.

Greeting.Morning = Good MorningExhibit A

Numbers

as Identifiers

16 Good Morning

17 Good Afternoon

XML (Extensible Markup Language)

<string name='greeting_morning'>Good Morning</string>

Page 23: Internationalization and Localization for Translators

Greeting.Morning = Good Morning

Greeting.Afternoon = Good Afternoon

Greeting.Evening = Good Evening

Greeting.Night = Good Night

Button.Save = Save

Button.Cancel = Cancel

Button.Start = Start

Button.Done = Done

Option.SelectAction = Select Action

Option.Close = Close

Option.Postpone = Postpone

Page 24: Internationalization and Localization for Translators

...

16 Good Morning

17 Good Afternoon

18 Good Evening

19 Good Night

20 Save

21 Cancel

22 Start

23 Done

24 Select Action

25 Close

26 Postpone

...

Page 25: Internationalization and Localization for Translators

Greeting.Morning="Good Morning";

Greeting.Afternoon="Good Afternoon";

Greeting.Evening="Good Evening";

Greeting.Night="Good Night";

Button.Save="Save";

Button.Cancel="Cancel";

Button.Start="Start";

Button.Done="Done";

Option.SelectAction="Select Action";

Option.Close="Close";

Option.Postpone="Postpone";

Page 26: Internationalization and Localization for Translators

The kitchen has been built. Bring the cooks!

#xlatorsarenice #ata55

Page 27: Internationalization and Localization for Translators

Focus.

We interrupt this broadcast to draw our attention to the String Theory.

We hope you visually enjoy Robin Williams.

Page 28: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

“Greeting.Morning = Good Morning

Page 29: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

“Greeting.Morning = Good Morning

Greeting.Morning = Buenos Días

Page 30: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Everything breaks down if we translate the identifier.

Do NOT translate the identifier.

Page 31: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Do NOT translate the identifier.

Everything breaks down if we translate the identifier.

Localization becomes obfuscation.

L10n o9n

Page 32: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Primer.Emphasis = "Some words are <em>emphasized</em>.";

Example of web localization

Notice here the use of the HTML tags <em> and </em>. In this case,

these tags tell the browser to italicize the enclosed text. We don’t want

to translate the tags or this formatting won’t work.

Page 33: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

You might see a string like this:

Here the dollar sign ($) is a special character that tells the interpreter

that $color is a variable. The actual color is inserted into the string at

run time. You do not want to translate the variable name or what the

user will actually see is an empty string. We’re using a placeholder.

Dress.Alternate = "The dress is also available in $color.";

Page 34: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Here’s another placeholder you might see:

Again, you don’t want to modify the placeholder in any way.

Dress.Alternate = "The dress is also available in %s.";

Page 35: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Sometimes you might see multiple placeholders in the same string:

This string tells the compiler that we will insert two strings at run time.

These placeholders are numbered so that the string can be reordered

in the target language, if necessary.

Container.2args = "%1$s is in %2$s.";

Page 36: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Sometimes you might see multiple placeholders in the same string:

The localized string must contain the same number of placeholders as

the original string, and the placeholders should not be

modified in any way.

Container.2args = "%2$s contiene %1$s.";

Page 37: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

How would you localize this string?

Misc.String2 = "%s to %s.";

A to F

10 to 15

Monday to Friday

transport to market

soup to nuts

Page 38: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

A special consideration is the use of plurals. Consider this string:

Cart.Apples = "You have %d apples in your shopping cart.";

You have 1 apples in your shopping cart.

Page 39: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Multiple rules need to be created for this case:

Cart.Apple1 = "You have one apple in your shopping cart.";

Cart.AppleMore = "You have %d apples in your shopping cart.";

Page 40: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

Different languages and frameworks have various ways to handle plurals.

This is how it might look in XML:

<plurals name='cart_apples'>

<item name='one'>one apple</item>

<item name='other'>%d apples</item>

</plurals>

Page 41: Internationalization and Localization for Translators

STRING THEORY</>

#L10n is generally more complicated than translating strings. That’s why you’re making

the big bucks now. #ata55

Okra tastes like snot. The more you cook it the more

it turns to string.-Robin Williams

This discussion would be incomplete without a comment about comments.

// This is a single line comment. It ends with the newline

/*

This is a multiline comment.

It ends with these characters: */

#This is different style of single line comment.

Page 42: Internationalization and Localization for Translators

LOCALIZATION KIT

A subset of tools, source files, binary files, test scripts

and appropriate instructions that can be used to

create a localized edition of a program. Generally

given to translators, localization agencies or

international distributors.

“Nadine Kano defines it in her book

Developing International Software (Microsoft Press, 1995) as:

A localization kit contains tools, instructions and resources that will allow a software

product to be localized. #L10n #lockit #ata55

This is how we do it.

-Montell Jordan“

Page 43: Internationalization and Localization for Translators

LOCKIT CONTENTS

It’s all here.-City of Sunnyvale

Slogan“A kit should include a Statement of Work accompanied with a detailed Bill of

Materials including a list of the build, compiled, and documentation files, as well

as expected deliverables in a directory structure and the drivers to create them.

Localization

Kit

Requirements

Product Description

Contacts

Deliverables

File and Folder Names

Schedule

Process Definition

Source Material

Word Counts

Ownership

Page 44: Internationalization and Localization for Translators

TEXT EXPANSION

One of the most common problems encountered during

localization is the expansion or contraction of text.

That escalated quickly.

-Ron Burgundy“

Language From English Into English

Arabic +20% to +25% -20% to -25%

Finnish -25% to -30% +30% to +40%

French +15% to +20% -10% to -15%

German +10% to +35% -20% to -30%

Greek +10% -5% to -15%

Hebrew -20% to -30% +20% to +30%

Hindi +15% to +35% -15%

Japanese -10% to -55% +20% to +60%

Korean -10% to -15% +15% to +20%

Portuguese +15% to +30% -5% to -15%

Russian +15% -5% to -15%

Spanish +15% to +30% -5% to -15%

Page 45: Internationalization and Localization for Translators

It’s too damn high!-Jimmy McMillan“RESIZING

If you’re going to call yourself an engineer, you’ll need to be able to change the size of a button.

#L10n #ata55

You should have the same

number of buttons when you are

finished as when you started

They should be the same size on

every page

If there were two buttons on the

page with the same size, you

should resize them both

PUSHBUTTON "ENVIAR",3,280,175,60,15

Translation: We have a button whose label is

ENVIAR with an ID of 3, and that is 280 pixels from

the left of the dialog box, 175 pixels from the top,

and 60 pixels wide by 15 pixels high.

Some guidelines for resizing controls:

Page 46: Internationalization and Localization for Translators

TESTING

Release the Kraken!

-Zeus“Linguistic Testing

Quality of the translation

Correct terminology

Consistency with the feel

of the source

Strings out of context

In-country review

Cosmetic Testing Functional Testing

There are at least three kinds of testing involved in any #L10n project: linguistic, cosmetic and

functional. All equally delightful.

Check that the look, feel

and flow of the software

hasn’t been changed

Expansion hasn’t caused

the text to be truncated

or hidden

Look for broken layout of

the page

Usually doesn’t involve

L10n engineers

Defect-free code is the

exception, not the rule

Check test framework if

you were given one

Compile source code

Page 47: Internationalization and Localization for Translators

LOCALIZATION TOOLS

Toodles is a helpful magical device whose main function is to distribute the Mousekatools to Mickey

and his friends. Learned this at #ata55

Oh, Toodles!-Mickey Mouse“

Text

Editor

One that supports

Unicode (UTF-8)

We recommend using

one with syntax

highlighting

Don’t use one that

adds the UTF byte-

order mark (BOM)

Software Development Kit

or Resource Editor

A good SDK includes

one or more resource

editors

Most languages have a

specific SDK

Microsoft Visual Studio

Eclipse

Software Localization Tools

or Translation Memories

Catalyst

Passolo

Transit

Trados

Page 48: Internationalization and Localization for Translators

HOW TO CHARGE$

Here’s where the rubber meets the road. Love linguistics, but need to pay for groceries. Charge by

the word, the project, or the hour. #win

By the project

Duh,winning.

-Charlie Sheen“Both the customer and

you know up front how

much.

Plan how you will charge

for changes.

If you underestimate,

you lose. If you

overestimate, you lose.

By the unit

If all you’re localizing is

text-based resource files

that contain strings.

If you’re expected to

resize controls and

allocate hot key

assignments.

Makes no sense if you’re

doing i18n.

By the hour

Client has an incentive

not to waste your time.

You have an incentive

to do quality work

without rushing.

Not always possible

when budgets have to

be met and costs need

to be justified.

Page 49: Internationalization and Localization for Translators

THANK YOU

You’ve been a wonderful audience

If I’m lying,I’m crying.

-Tow Mater“