So, you're ready to take over the world. You want to internationalize your service to enter new markets. The question now is "where do we start? "Should you just hire a translator, give him a spreadsheet, and wish him luck? It should be easy as that right? Well no, at least no if you want good results. In this series of articles I will give you specific tips and advice for streamlining the localization process, highlighting special challenges and key parts of a successful process from the technology side.
We started internationalizing one of our sites, VoiceBunny.com, about eight months ago. This is by no means easy, and honestly, it’s been a “hit or miss” learning process from the beginning. Now, after a lot of learning, fixing, and implementing, we are happy to have our site translated into 4 languages (not counting English of course).
You can visit our sites in:
- Spanish (http://es.voicebunny.com/)
- German (http://voicebunny.de/).
- Japanese and Chinese are coming soon!
Unfortunately, there’s not a lot of literature on how to internationalize your website, mainly because most startups never get to this global expansion point. Google helps to an extent, but there are not many helpful articles and there’s no source than give you the complete picture.
That's what this series is for. In the first part, we'll discuss the technology aspect to make your site international. Stay tuned for other parts of this series.
Code and string keys
First things first, you must make sure your code has all the strings as keys. For this you need coding skills, if you don’t know, ask one of your engineers. This is programming 101 for them.
What does a key look like? Like this:
You may ask,“ALL THE STRINGS WHAT?!” Yes all of them. The key (to the keys :P) here is that the earlier the stage of your project you start using translatable keys, the better. You have to make sure that every single piece of copy on your site is a key or inside a key parser function.
There are some things that will dramatically improve the quality of your keys’ translations:
Consistency: Avoid splitting sentences into different keys that makes no sense whatsoever: For instance:
Do not do this!
__('You don\'t have to worry about') . __(' billing the client; we will take care of it for you.')
__('You don\'t have to worry about billing the client; we will take care of it for you.')
This way, translators won’t be left wondering, “this phrase is connected with what again?”
Named placeholders: This is more of a technical challenge depending on the technology and framework you use. Make sure that you use named placeholders. What is a placeholder? Simple. When you want to print a variable inside a string, make sure you name them. Not all languages have the same phrase structure and not all the variables go in the same order. For example:
Traditional approach, ye’ olde sprintf:
sprintf(‘Pay the project "%s" to get your %s.’, $project.name, $deliverable)
Named placeholders approach:
Pay the project "$project.name" to get your $deliverable.
In this example the variables switched positions. If we hadn’t used placeholders for this case, the variables wouldn’t have matched the actual translation.
Now that you have your translation files ready, you have to send them and communicate with your translators and proofreaders. This may not be a must for your internationalization, depending on the technology you use and the kind of service you’re building. However, this will save you a lot of work and time by automatizing the most time consuming part, if implemented correctly.
If you’re not a programmer, chances are you have never heard about control versioning or continuous integration. Have you ever wondered how thousands of coders can build open source applications at the same time? Well, control versioning is the answer. In this case, I’m not suggesting using GIT, even when it might be possible. However, I highly recommend you have a repository in which multiple translators can work at the same time. For us, the answer was OneSky.com. It allows us using their API to send our strings to the platform automatically as part of our site continuous integration process. The translators interact within OneSky and don’t have to deal with a lot of emails back and forth. They can communicate in real time while having a translation memory.
This might sound like a lot of work initially, but after setting it up and getting it running, you don’t have to worry about sending files to a translator and double checking their work. Here’s how it looks on our end:
Now that you have your keys and continuous integration set up, there are a couple of things that might help you in the long run.
Fuzzy translations: These will make a difference when you update or add a key to avoid random words/phrases without translation on your site.
Graphic adjustments: Why are German words so long?!
The key here is checking, tweaking, and sometimes, changing and repeating.
I hope these tips come in handy as you work on your translation and localization process. Remember these are things that have worked for us, but there’s no magic formula for localizing. This is a difficult process but not impossible, and with the help of technology and software design, can be made easy. In my next article, I will give some advice about successful localization from the business side.
Stay turned for Part II of The Ultimate Guide To Internationalize Your Website: Processes and Communication