views:

402

answers:

5

How do you keep the spoken languages strings in your program up to date? Is there an inexpensive way? Where can you find people to do the conversions over time?

+1  A: 

There are companies which will translate resource files in the standard formats for fees; I think that's how most large companies do it.

I asked a similar question recently here about the best way to structure code in a project to support this, with my additional desire to preserve the readable strings in code. This is not standard, though... usually you would put all the string resources into a separate file and refer to them by ID in the code, and have the file translated.

See .rc files for Windows C++, .resx files for .NET, not sure what exists for Linux/Mac/other, but I'm sure there are equivalents.

Nick
Thanks, do you know where to find these companies?
Brian R. Bondy
I don't have any particular recommendations, but a google search for 'windows localization' had about 10 adwords links from companies doing this or similar. It might be worth another question to SO for people's experiences and/or recommendations.
Nick
+1  A: 

I think it depends on how accessible you want the languages to be, which probably depends very much on what the project is in the first place (professional, hobby, etc)

In my hobby work I have the locale-specific strings stored in a simple external JSON file (XML or even a simple INI would work just as well, anything that can give you key-value pairs). This has the benefits of being cross-platform, easy to edit, and (if this is desired) allows anyone with the knowledge and the determination to translate your app into their language of choice. For open source projects and the like, that can be invaluable.

For projects that you may not want translated willy-nilly, then embedded resources are probably a safer bet, in that they are reasonably easy for the developers to swap out, but give at least a trivial roadblock to would-be translators. Even in this case, though, the method of storage doesn't need to be complex. Any of the given file types or a native string table will do.

Toji
+2  A: 

This was excerpted into Joel's Best Software Writing I: http://blogs.msdn.com/ericlippert/archive/2003/10/28/53298.aspx (How many Microsoft employees does it take to change a lightbulb?) , and at a high level it discusses how simple changes have big ramifcations. If you consider that MS has many internationalized applications, and this is the process they use to ensure their apps stay up to date with a thousand factors, including new / modified strings don't get missed in other languages.

For translation needs (an area I have a wee bit of knowledge in!), I would recommend OmniLingua Worldwide.

torial
+1  A: 

In the projects that I have worked on, we have taken two different approaches to localization, depending on the size of the project. For smaller projects where each developer "owns" a component, it is the developer's responsibility to maintain the list of what needs to be translated and into which languages.

For larger projects, we have tagged each string with a language prefix. For example, the German string for "Yes" is marked as "[de] Yes". After localization, the string is replaced by "Ja". This makes it easy to find things that have been missed as you can search by the prefix.

As for additional commercial sources, I have worked at various points with Net-Translators and BMT, the latter most recently.

DocMax
+1  A: 

I strongly recommend checking out the west wind db resource provider.

I manage an open source project management web application ( http://sharpforge.org/p/SharpForge.aspx ) and initially used the resx files. Here are the issues I had

  • I wanted to access those resources strongly typed from the BLL layer. It simply wasn't possible.
  • The resx files are also very difficult to maintain, adding/removing/changing resources keys can create all sorts of problems.
  • Finally I was having huge problems not saving the files using editors with the correct character map/encoding which would strip all of the translated text. The process of getting the resources from the translater into the code repository often resulted in munging the text.

I was able to implement the db provider as part of the application. It comes with an editor that you can give the translators access to. Their translation goes directly into the app with no double handling and is available as soon as the application is restarted. It also has the capability to create strongly typed objects to access the provider from any layer.

Once this was installed I simply created a translation project on getafreelancer and was able to get 25 translations done for my application within about 2 weeks. All for about $US50-100 each.

Get in touch on the sharpforge forums if you have any questions about how to implement it.

related questions