Folks have been able to run sites with multiple languages by hand since the get-go, but these new changes will make it far easier to run a multi-lingual site in the future.

There is a fundamental architecture choice to any multi-lingual application. Either you honor the data set first, and add translated content to its taxonomy, OR you treat each language as its own beast and duplicate the taxonomy. We've always recommended the latter approach with concrete5: duplicate the whole site tree for each language.

So if you need a tree for each language, what can we do to help? Well any number of things. We've made some improvements to the core, we're going to release a free Internationalization Add-on, and we will have a Commercial Internationalization Add-on as well.

User Session Specific Languages

In the past, you could setup concrete5's UI to run in a different language, but everyone had to use the same one. Now you can pick on login which language you want to use for your editing experience. That preference can be stored against your user account as well. We're very likely going to start including language packs with the core distribution so you can pick a default language on install.

Define Language Trees

We maintain that having a unique tree for each language gives you the flexibility you'll need to deal with different markets. Our new free internationalization add-on will let you take one part of the site tree and define that as the source. You can then make a new holder page for each language you want to include and automatically copy the whole tree over. This will let you create and manage relationships between duplicate pages for different languages. So now when you're on Product-X for French and you hit the English button, you'll goto the same page in the English tree. You also get a block with some different UI choices for selecting a language.

If you don't want each and every page to have a relation for each language, you can go through and choose to ignore sections, or even remap them to different areas.

Computer Aided Translation for Content

If you've got a big site to convert, sending your translation staff through page by page to make inline edits may be a real time suck. We've added a "Translate Content" report that gives you a centralized UI to get to all the content that needs to be translated for a language tree. We even added some simple workflow tools there to keep track of where you are in the process. This report will likely be part of the commercial Internationalization Extension.

We're looking at adding some mass search and replace as well as a language specific custom dictionary to this part of the toolset in the big picture.

Language Files for Interface

We've extended the use of the glorious t() function to themes, custom forms, custom templates - basically any code in your concrete5 PHP files. If you know what you're doing you can make language specific .MO & .PO files yourself. If you use the commercial Internationalization Add-on you'll get a sexy Web GUI for generating the list of strings automatically, and then translating each string individually.

Cost & Timeline

This is actually done already and we have one client actively using it on a site they're about to launch. We need to fold the changes we made back into the core. Expect this stuff to all be part of the release of 5.4.2 which is slated for mid August.

The majority of what we did here will be free to everyone. We are packing up tools that we think are only useful to a mid-sized organization with a staff of resources who need to collaborate - so the CAT tool and the Web GUI for language files would cost something, but they're just process value ads on the bulk of the changes which we'd release for nuthin'. We are likely to price the commercial side high for a typical add-on, but low for enterprise software. $2,500 sounds about right today.

Here's some screen caps with client content blurred out.