Internationalization and Localization for Translators
-
Upload
english-espanol -
Category
Software
-
view
308 -
download
0
description
Transcript of 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
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
englishespanol.com
@dianadudgeon
Hello? Is it me you’re looking for?
-Lionel Richie“
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“
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“
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
INTERNATIONALIZATION and
LOCALIZATION for TRANSLATORS
i18n
L10n
Ain’t nobody got time for that.
-Sweet Brown“
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“
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“
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.
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“
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.
It takes a very different set of skills to create a gourmet kitchen
than it does to create a gourmet meal. #i18n #L10n #ata55
Rick’s Slides Here. Enjoy.
Suggested hashtag:
#codesnojoke
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
}
<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>
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
}
<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>
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
}
<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>
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
}
<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>
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>
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
...
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
...
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";
The kitchen has been built. Bring the cooks!
#xlatorsarenice #ata55
Focus.
We interrupt this broadcast to draw our attention to the String Theory.
We hope you visually enjoy Robin Williams.
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
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
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.
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
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.
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.";
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.";
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.";
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.";
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
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.
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.";
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>
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.
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“
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
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%
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:
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
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
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.
THANK YOU
You’ve been a wonderful audience
If I’m lying,I’m crying.
-Tow Mater“