2001-10-19: Helios Explains Localization

Helios Explains Localization

Oct 19 2001 11:09AM


This was originally posted to Development at uo.com.[1]


lo•cal•ize
v. lo•cal•ized, lo•cal•iz•ing, lo•cal•iz•es
v. tr.

1. To make local:
2. To confine or restrict to a particular locality

3. To attribute to a particular locality

v. intr.

To become local, especially to become fixed in one area or part. n. Source: The American Heritage® Dictionary of the English Language, Fourth Edition Copyright © 2000 by Houghton Mifflin Company. Published by Houghton Mifflin Company. All rights reserved --- lo'cal•i•za'tion n. —The Dark Art of transforming text into the native language of the end user.



Greetings once more fellow UO gamers! I’d like to take a moment to talk about the secret doctrine of localization, the power of words, and French bread. Well, okay — I won’t be talking about French bread.

What is localization? Why localize?

Having been recently declared the keeper of words, I will explain all of this and everything else you have ever wanted to know. Well, okay — I won’t be explaining everything you ever wanted to know — but I will try to explain localization. :)

We have all seen the following line of text in the game: gold coin : 500
It used to say, “500 gold coins.” Why the change?

To answer that question, we must consider the purpose of localization. Localization is the process of allowing text to be displayed in various languages, based on the settings of the end user machine. If your game is intended to be played by only one group, all speaking the same language, then you can just display everything in that language. However, if you have people from multiple countries playing your game (like UO, for instance), the need for translation and a unified way for displaying text becomes apparent.

In a traditional line of code we could say, for instance…

    print(“Hello, how are you today?”)

Which would print the phrase, “Hello, how are you today,” on the screen for our user. That’s wonderful…for English-speaking users. For someone who speaks exclusively German, for instance, that would be extremely useless. So, we know now that we have to translate the sentence. In German, the sentence would look something like this:

    print(“Hallo, wie geht es Ihnen?”)

This literally translates to “Hello, how goes it you (in a formal sense)?” As you can see, the rules of grammar are noticeably different for these two languages.

These differences in grammar do not necessarily pose difficulty for us at this point, since we can simply translate the entire statement, and the meaning of the phrase will still map over quite nicely.

                                                                                                                               The problem occurs when we start printing dynamic text groups (or strings) on the screen.  A typical statement to print a piece of dynamic text could look something like this:
    print(“you have $amount gold coins”)

Before displaying this string to the user, the part that says “$amount” would be replaced (by the computer) with the amount of gold the user has. If they have 5000 gold, the string would show as:

“You have 5000 gold coins.”

For someone that had 700 gold coins, the string would display as:

“You have 700 gold coins.”


That works great – for English. In another language, a language that doesn’t share the same language sentence structure, this particular arrangement of words would probably not work very well. So, now we have to come up with a generic way to create dynamic strings that work for all languages.

The only structure that innately works for all languages is the following:

“Static Text” : “Dynamic Text” or, alternatively “Dynamic Text” : “Static Text”.

The dynamic portion can never be anything other than proper nouns or numbers. Consequently, we come up with constructs that look like “gold coins : 500”, or “Bandages : 24”.

This is obviously a technological limitation, which we have been able to overcome, thanks to our programmers. We now have the ability to create localized text that allows our translators to arrange the various dynamic parts of a string to conform with local rules of grammar. As a result, we are now able to display fairly dynamic strings in all languages, without having to sacrifice game ambience for interoperability.

The most recent change that you may have noticed on the Test Centers is the change to corpses. No longer will you see “remains : Vexx,” but instead, you should see “the remains of Vexx.” :) Great stuff.

The recent localization efforts have been engineered with the latest technology advancements, so that many of you have not even noticed the most recent rounds of localization. Check out the fully localized version of Animal Lore on the Test Centers to see what I mean.

Well there you have it, and well…there it is.

Have fun and take care!

Helios
Keeper of Words
Designer, Ultima Online



References: