Software Internationalization for Dummies

I had discussion today in Twitter regarding software i18n (i18n is a short for internationalization, and it means there’s 18 characters between letter ‘i’ and letter ‘n’). I was trying to find some simple, straightforward link that explains what this word monster actually means but I wasn’t able to find it. So here it goes:

Software Internationalization is a process to separate content from code so that it can be localized. Almost all programming languages and environments provide some kind of framework to do this. There is some popular examples like JavaScript that doesn’t provide i18n support out of the box. However, most well known JavaScript libraries such as jQuery do have plugins that provide the support.

As an example, the iPhone i18n framework provide a way to use following “strings” files that are then accessed from the code:

"Hello World" = "Hello World";


When this is translated, file is copied and typically saved under the corresponding language folder, in this example it would be Finnish strings file:

"Hello World" = "Heippa maailma";

Here we can see that “Hello World” is now translated to Finnish. Based on the language you’re using in your iPhone, the correct file is automatically loaded. It means that when in actual application code we use string “Hello World”, it will get automatically replaced with Finnish translation from the Finnish strings file (if your iPhone is in Finnish, of course).

The benefit of this whole process is that we don’t have to change the code when application goes to localization phase. Also in some cases, e.g. in HTML or other declarative languages we don’t have to duplicate the design or behavior to each localization variant as the languages reside in different files.

However, managing these i18n files will get tricky as soon as you have to deal with multiple languages, hundreds of strings and different character sets, file formats and versions. That’s why there’s new breed of software localization platforms that provide version management, editor, collaborative tools and API’s to manage these files more easily. You can learn more from Get Localization and this blog how to simplify the localization process as well.

If you wan’t to learn more? Please read the following blog post, it will give you more insights about the topic: 10 Internationalization tips for developers – I18N checklist

Agile/Lean Localization: Tell us what it means?

We are defining what Agile/Lean Localization actually means to digital product companies, please let us know what it means to you? Do you think it works or maybe that it really cannot work at all? Do you even understand what it means? Please share your experiences, feelings and ideas. Challenge or praise it. Especially if you are seeing red and your head bursts, share your feelings with us. It doesn’t matter who you are, e-mail them to petteri@synble.com or just drop a comment here. We will discuss about these topics and publish best of them here and in our upcoming e-book about Lean Localization!

Thanks in advance!

(What is Lean? See here: http://en.wikipedia.org/wiki/Lean_manufacturing)

Covering Latest Get Localization Release


We’ve been extremely busy implementing a bunch of new features lately. Or actually they’ve been out already week or so but now it is good time to cover all of them.

Project feed

Project feed is a great new addition to service. Actually we’ve asked ourselves why it hasn’t been here before. It is pretty similar to Facebook news feed but project specific. It means everybody can see easily what is happening in the project. Here’s example what is happening in AppUpdateNotifier project:

Cool huh? It’s an awesome addition and will make managing projects and translations much more fun!

Statistics

This is a second feature we thought that we are really late with, but better late than never! It is Statistics and we’ve even reserved own tab for them. For example we’ve added list of contributors, you can get them for whole project or just for single language. Here for example we’ve top translators for German from GoogaSync project.

We are now in the works for providing new stats and also improving current offering.

Discussion

Discussion is now back in Editor as well. We had comments in previous editor but now they are back in our new version as well. Here’s screenshot how it looks:

And much more…

We’ve lots of other smaller improvements in as well. This also means that we are starting to be feature complete in a sense that we can soon finally come out of beta. This will hopefully happen soon. So stay tuned and let us know what you think!

Wake Up, You are Going to Die

Facebook has Director of Monetization. It’s funny that company like Facebook really has to have somebody responsible for making money. Being valuation of 30 something billion, some people might think it is CEO’s job and the whole purpose of the company. Well it doesn’t always work like that, especially when you want to create something good. You have to have huge vision and you need to devote all your time and energy while working towards it. The bigger the goal is, the more strongly we want to achieve it.

Get Localization’s goal has and have been to revolutionize whole software localization industry. Our background is in developing software and we do that really well. We are not localization professionals and in fact when people have asked why we started to develop something like this, the answer has been “Because we hate localization”. We came to this business because we asked ourselves “Why this needs to be so difficult?”.

Well I think we are half-way there. We have had success cases, for example our own products have been translated to over 20 languages among many other cases. Just following our own way of doing things, we’ve managed to build software localization community that is totally unique and stands on its own. But to really revolutionize this industry, there needs to be new business models. Why?

“While demand for language services has continued to grow (at a rate of over 13% per year), for the most part the price of translation and localization services has dropped.” – Common Sense Advisory, August 2010

That sounds healthy to you? Come on, is it really so that couple of nerds needs to come and tell you that this doesn’t make sense? Localization industry needs their own Director of Monetization. But uttermost localization industry needs to wake up and start thinking how to improve their product. It is not ideal if us, developers, your customers need to enter this business in order to make things happen.

To make money, you need to have that HUGE vision. How long you can make business just by screwing translators? Are you thinking out of the box? Are you really asking what your customers need? Are you really thinking where and how you can make that money? Do you understand that everything will change?

If not, you are going to die.


We are alive!

Current status

Just a brief status report to remind you guys that the blog and Get Localization itself is really going well and we don’t have plans to go anywhere, except up! We’ve been really busy on improving the site, for example we’ve increased reliability, added some requested format supports like Adobe AIR, Android and basic INI file used in PHP, Windows and others. We have also a demo project that can be used for playing around with the service, see the demo project link at our main page http://www.getlocalization.com.

Regarding reliability, we’ve been doing lots of fixing and polishing so you wouldn’t see any errors when for example importing or exporting your files. We are really happy with the result so you can except Get Localization to get out of the Beta stage hopefully soon.

Nokia World and other events

Get Localization was attending Nokia World and Nokia Developer Summit this year. Nokia released lots of great devices and with Qt the development for mobile devices is easier than ever! We’ve been doing some Qt development here as well and can really agree with the message, it’s easy and really powerful platform. With single source code, you can get your application running on Symbian, MeeGo, Maemo, Windows, Mac OS X and Linux etc. Community is also porting it to Android, iPhone and many others it so it’s truly a cross-platform environment.

Get Localization also fully supports Qt localization format. Just upload the file and use crowdsourcing or professional translators do the translation for you. It can’t be easier!

We will be attending numerous events and conferences this fall. Currently confirmed are:

And possibly many others! Let us know if you want to meet (also outside of the list, we are happy to get tips of new conferences). Also if your conference needs a speaker about how localization should be done in year 2010, just let us know!

    What makes good translation editor?

    We are in process of designing a brand new translation editor for Get Localization and would like to hear your opinion. In order to avoid broken keyboards, what is important for you when working with translation in feature wise?  We’ve identified some important use cases but definitely it would be great to hear feedback from you.

    Translation memory

    This is of course one of the most important features in translation editor nowadays. It’s a great help especially with longer texts. There’s lots of buzz and marketing around these solutions but do they meet your expectations? How they’ve worked for you? (We’ve currently our own TM in the works)

    Related translations

    This is feature we think is important. It’s quite close to translation memory but the idea is more like providing tips how to translate text based on previous translations in the project. This especially helps in case there’s multiple translators working on same project. Think it like automatically generated glossary.

    Dictionary

    Fast access to dictionary on translation page doesn’t harm, doesn’t it?

    Glossary

    It’s good to have access to project specific predefined glossary in translation editor.

    Context information

    Often programmers are lazy to add any valid context information. Mostly because it’s quite time consuming work. What kind of context information is most valuable?

    Automatic spell checking and validation

    How important this is for you?

    Tag formatting in Editor

    When working on software translation, you will always bump to tags like “%s”, “%d”, “{hello_word}” or similar. Changing these is not something translator should do as it will break the software. It should be possible to move these tags along the sentence but also prevent changing them. Do you prefer that these tags are “locked” so that editing is not even possible and moving happens with your mouse? Or do you prefer full editing and validating after translation is submitted?

    Well I think there’s some of the features we like to incorporate to our new translation editor that will be part of our new professional (i.e. not crowdsourcing) offering. What do you think, is some important feature missing? Let us know in the comments!

    New version of Get Localization released

    We’ve couple of cool new improvements in Get Localization.

    Improved translator view

    We have now related translations available in translation view. We search automatically strings that are somehow related to string currently translated. This helps especially in crowdsourcing projects as translators might not be always aware of the other users’ terminology.

    We’ve also dictionary available. It is searching from project glossary and normal dictionary.

    Files

    Instead of components, we are now simplified the file management and replaced old “Import & Export” tab simply with “Files” tab.

    Using this is as straightforward as it looks, simply upload your master files and you’re ready to go.

    Glossary (available for private projects)

    When working with professional translators, it’s often good to define project specific glossary first. This is now possible from “Glossary” tab in private projects.

    Some other improvements

    Lots of usability improvements based on feedback we’ve received. Please keep them coming, it’s easy via our support desk.

    Localization how-to’s

    I’ve gathered couple of good recent how-to’s and blog posts related localization. These are not in any particular order.

    Dynamic localization in Silverlight

    Dynamic localization is hot topic right now. Recommended reading for Silverlight fans.

    jQuery Globalization Plug-in from Microsoft

    Great to see Microsoft entering jQuery game as well. This useful plug-in will provide all the necessary data for creating truly global site.  If interested, check also our post regarding CLDR project.

    Android localization for beginners

    Brief introduction to Android localization. Looks quite simple. (See also our Android market report)

    String Localization in C#

    Old but still great tutorial how to localize C# software.

    Tutorial: iPhone Localization in Xib (Nib) Files
    iPhone Tutorial (Part 2): Localizing your iPhone application

    Good articles about iPhone localization (see also our iPhone market report).

    Localization in JavaScript

    Great library to localize JavaScript. We really love this approach so we also added our support.

    Lots of Symbian related localization articles

    Forum Nokia Wiki contains a lot of localization articles and help regarding Nokia platforms.

    Simple Python command-line client for Get Localization

    GLToolkit is very trivial command-line client that gives you opportunity to download/upload localization files from command-line. This is especially useful when you integrate e.g. uploading of master strings with your build/SCM commit process. This means that you’ve always up-to-date master strings in Get Localization server.

    Installation

    Download installation file from Google Code

    Additionally you can checkout gltoolkit project from Google Code with this command:

    hg clone https://gltoolkit.googlecode.com/hg/ gltoolkit

    Usage

    Upload your project master strings:

    pygl.py upload localizationfile.po project-name master [component-name] --username=gluser --password=glpass

    Upload specific language files:

    pygl.py upload localizationfile_fr.po project-name fr [component-name] --username=gluser --password=glpass
    (replace fr with any IANA code)
    
    
    Download language files:
    pygl.py get project-name fr --username=gluser --password=glpass
    (replace fr with any IANA code)