This is a guest post by Tim FitzGerald and is being published along with his detailed chart of localization add-ons for ExpressionEngine. Bookmark both pieces so you can refer to them during your next project. –Ryan
A recurring use case for an ExpressionEngine site is to provide content in two or more languages. EE’s framework includes the ability to translate its own control panel interface, but it doesn’t offer much help when it comes to the site itself.
This article explores the third-party add-ons that exist and compares their features. It may also help you ask important questions as you plan the development of your site.
Full disclosure: I’m not an entirely disinterested party here. I’ve started writing my own open-source add-on, listed my objectives, and wanted to see how it stacked up. I decided to share this list because I thought it could also help others evaluate the different options and find the tool that best meets their need. My goal was not to compete but complement the marketplace; you can find out more on my add-on’s wiki.
Specifically, I looked at:
- How they decide what language to serve (taking into consideration Google’s recommendations, among others);
- How they handle URLs (important for SEO in your target language overall);
- How they translate strings (i.e. form labels, banners, tag lines, and other content that isn’t served from entries); and
- How they manage translated content.
My results (see my comparison table) are based on documentation found online, personal experience when I have some, and in the case of open-source add-ons, inspection of the code. I invite add-on developers and users to report any inaccuracies to @tfitzgee and I will correct.
Remember that there is no one solution; it’s all a question of how important each of these factors are to you, how you like to resolve them, and the time and money you (or your client) are willing to invest.
We’re All Getting it Wrong to Some Degree
One thought that occurred to me while finishing up this census, and was reinforced by a recent article by John Faulds, is that we’re all talking about multilingual (actually most EE developers write “multi-lingual” with a hyphen)… Should we not instead be talking about localization (L10N)?
This is more than a semantic argument. Multi-language assumes that the only variation you need to address is language. But ask a New Zealander if American content is appropriate for him? Maybe yes, if you’re reading reviews on technology products; maybe not, if you’re looking to buy. Currency, store locations, timezones, units of measure (metric vs US/Imperial), legal framework, cultural reference, even spelling… these are all facets beyond just language that may lead you to having different content for different contexts. That is localization. (Or localisation with an s, if you’re a Kiwi.)
Faulds demonstrates these multilingual tools can serve the purpose of L10N, to some extent, but it’s not fully there.
The assumption may be that if you are so concerned about localizing your content to that degree, you should be running multiple sites with different templates altogether. Perhaps so. But I contend that there are scenarios where it makes sense to have it in a single site, and we should be designing our tools with that expanded goal in mind.
Two Real Turnkey Solutions; You Get Your Money’s Worth
There are, to the best of my knowledge, two add-ons that come close to delivering the whole package: Transcribe and Publisher. Both have their shortcomings, but none of those are so great as to rule them out. Both, it should also be said, are paid add-ons. I think that’s fair for the value of the polishing they provide.
I can personally recommend Transcribe, having used it for two sites now. I have not used Publisher as of yet, but it looks promising, and if it’s as complete and if the workflow aspect works as well as advertised, it offers you more than Transcribe for your dollar.
Both of these solutions are database-centric. That is to say any new strings or variables are not in config files. Not that’s a bad thing per se, but a design consideration as your sites development goes through its workflow.
The only gap is that neither of these cover the other localization needs beyond translating strings and entries. You’ll need something else to convert numbers and dates.
Other Add-ons Can Fill the Gaps Left in Native
When it comes to freeware, there’s a hodgepodge of solutions out there. I’ve covered the main ones in this table, but there are other add-ons that can help, like Low Variables and Republic Variables.
To use most of these add-ons, you’ll need a way to tell what language to serve, and you’ll need to structure your entries. The more notable approaches:
All of these approaches you creating subdirectories for each language at your site’s root folder with duplicates of EE’s
index.php, setting a language global variable. With EE 2.8’s template routing you may have a way around this.
- Multi-lingual sites on different domains with ExpressionEngine and Transcribe, July 2013,by John Faulds
- News: Multi Language Module Now Free For Everyone, by Ben Croker
- ExpressionEngine & Multi-language: General approaches, pitfalls, brick walls and RTL languages, Sep 2012, by Peter Lewis
- Intro to multi-lingual sites in ExpressionEngine, May 2012, by Steven Grant
- EE Insider ExpressionEngine How-to Articles, “Multi-language Solutions for ExpressionEngine”, Oct 2011, by Christopher Sandin
- MultiLingual Websites in ExpressionEngine, Jan 2010, by Carl Crawley
We sent out our first devot:ee newsletter this past week. It only took us five years to get around to sending out an email! We’ll do our best to do a monthly recap of all the add-ons that have come out and to inform you of any other tidbits we find important. If you’re not already subscribed and want to see the contents of the first one, it is online here.
- CUHO Categories Groups ($) by Customhost
Change your categories groups in two easy steps: drag and save. This module will helps you to re-organize your categories structure by changing categories-to-groups assignment.
- Retina Already ($) by Evan R. Thompson
Retina Already is a simple to use solution for caching and serving retina and standard resolution images to the user.
Have a pending ecommerce project and don’t know where to start? What are the considerations for implementing an ecommerce solution for a client? Don’t fear—Jason Varga, creator of the Bison ecommerce add-on for Statamic is here for this week’s episode, to discuss ecommerce considerations in general, while breaking down what questions to ask clients, and to dispel myths regarding ecommerce, databases and flat files! We also talk about all these items through three perspectives: the client facing developer, the third-party add-on developer, as well as the developer of a CMS!
Tune in now! Thanks to Visual Chefs for sponsoring!
- In by Causing Effect (Aaron Waldon)
Include or Insert template files. A light alternative to snippets and embeds.
- Link Vault Logger by Ron Hickson
A simple plugin to extend the great Link Vault module. The plugin merely logs a download without generating a link which can be useful in some situations (like dynamic PDF creation).
A big update to Dash-ee was released today and it sports a a lot of improvements, like multiple dashboards and a new interface.
What’s Dash-ee? It’s a module that allows you to create a completely customizable EE control panel dashboard.
Watch the overview video to learn more.
This is only useful to the subset of ya’ll who use Alfred 2, a nice quick launcher utility for OS X.
It’s an Alfred workflow that makes it easy to search EE StackExchange and find what you need (hopefully a solution to a problem!).
The workflow was created by EllisLab and shared on their blog.
While we’re talking about EE StackExchange. If you have a moment, hop over to the site and answer any questions you can!
EE Conference recently added a new way that your agency can send a few people as attendees and sponsor the conference. The Agency Package consists of 3 conference tickets, a private Sunday night dinner, full conference access (including recordings) and 5 entries into the Best of Show awards. In addition, you get a conference sponsorship slot (which ends up only costing $500).
The package costs $2000 and is a great way to send a few people and support the conference.
- Related Open by Caddis
This extension adds links to related items in ExpressionEngine’s native multi-relationship field.
- PG by Caddis
A tag pair to loop through all GET/POST parameters in ExpressionEngine.
- Number by Rein de Vries
Create a real number field with the benefits of filtering due the nature of the field.
- Currency by Rein de Vries
Create a real currency field with the benefits of filtering due the nature of the field.
- Limitee by Caddis
Limit ExpressionEngine titles, text input field types, and textarea field types to a specific character count, with a counter to let you know how many characters are remaining.
- Snappy Concierge by UserScape
Deliver more than a CMS to your clients. Concierge integrates ExpressionEngine with the Snappy support system to manage your client support.
- Time From Now by jbueler (jbueler)
Time from now will let you add a string modifier to the current time and will return a datetime string in its place. This would be useful for performing channel entries loops with the start_on and stop_before parameters. This will let you use dynamic dates in situations where you may have had to enable PHP before.
- Hop Fasta ($) by Hop Studios
A Hop Studios Accessory that puts a Quick Update button on the Template editor.
- Resizer by Caddis
Use Resizer to to resize, cache, and retrieve images with a number of options.
- Codeebird by Dan Herd
An ExpressionEngine wrapper for the Codebird PHP Twitter library.
The nature of the web is constant change, and your code base should be no different. But updating your code shouldn’t be a one-time endeavor, and it shouldn’t be an all-or-nothing proposition. Instead, you should refactor iteratively as you need, whether it is to fix a bug or update a CSS vendor prefix.
For the latest CTRL+CLICK, Jina Bolton joins the show to discuss this process of refactoring, which involves iterative, narrow updates to the code base, without changing features or functionality. She shares her approach to refactoring by starting with the smallest element and keeping focused on a single change. She also suggests what areas can be commonly refactored, such as introducing a CSS preprocessor and establishing variables for CSS colors and typography. Jina also details her refactoring workflows, including using version control, documentation and supporting a “living” style guide.
We also comment on the paid support discussion going on in the Devot-ee forums. Tune in now!
Thanks to Hover for sponsoring this episode!
In an interview on Nublue, a web design agency, EllisLab Chief Creative Officer, shared a tiny bit about ExpressionEngine 3:
Are there any elements of the design within EllisLab applications that you are particularly proud of and why?
Yes. However, those elements aren’t public yet, as they are part of ExpressionEngine 3. I came to EllisLab after ExpressionEngine 2 was released, so aside from some small tweaks here and there, ExpressionEngine 2 is largely not my work. In the curious case of ExpressionEngine 3 I’ve taken my time trying to sculpt a user experience that will feel at once both new, and familiar. From that base, I plan to iterate and improve the control panel even further.
Read the entire (short) interview
Long-time community member Jim Wyse has an opening (or two):
That is a fine group of folks who do great work at the university. You could be part of the team.
The next Los Angeles ExpressionEngine Meetup takes place on Tuesday May 6th at 7pm. The topic will be “Refine or Reboot” and take a look at both ExpressionEngine and Craft.
ExpressionEngine is one of the primary tools we use to build websites. However, knowing a tool well is to also know its limits. Join us to discuss common pain points with ExpressionEngine and how one agency has found themselves turning to Craft CMS - a new CMS by the popular ExpressionEngine add-on developers Pixel & Tonic - to solve some of these problems.
There are a handful of prizes available for attendees, so be sure to RSVP to attend.
ExpressionEngine add-on developer and course author, Low Schutte is teaching a full day workshop on ExpressionEngine add-on development at his GeeUp Conference this coming June (that’s only a month away!).
Lodewijk “Low” Schutte will explain the thought process behind building an ExpressionEngine add–on. What choices have to be made, what resources can be used and how to write clean and efficient code. You’ll build an add–on from scratch, covering the not just the basics, but more advanced topics as well.
There will be a lunch provided and it will take place in the beautiful city of Leiden in The Netherlands.
Learn more and register now while there are still spots available.
This is a on-going series of entries where I highlight EE experiences.
The speaker lineup for the 2014 ExpressionEngine Conference has been announced. The complete list is on the speaker page.
It is highlighted by some notable speakers that are from outside the ExpressionEngine community but bring good knowledge to web design and development. This is in keeping with Brad Parscale’s goal of trying to expand the topics at the conference to fit the real world challenges people who use ExpressionEngine face.
The conference takes place in beautiful Alexandria, VA October 5-7, 2014.
If you buy a ticket now you’ll also get access to the videos from last year’s conference. This perk will “go away soon” according to a tweet from the conference organizers.
devot:ee is Five Years Old Today! Today we're five, and we're happy to continue helping ExpressionEngine developers everywhere day in and day out. Persistence is key (this is the 118th installment of This Week in devot:ee) and we're glad we've been able to remain viable and useful for so long. We'd like to make some (good!) changes, though, and we've outlined them on our devot:ee 2.0 page.
Buy a devot:ee T-Shirt
We launched a Teespring campaign. If you'd like to help support us and want a solid new shirt in the bargain, head over there and buy one now! Thank you!
Editor's Pick, May 2014: NavEE
NavEE is a very popular add-on from The Outfit that helps you build "any kind of navigation you like, without limitation." It's been a solid seller ever since its introduction in 2010, when it won 3rd place in the AcademEE Awards for New Module of the Year. If you need to provide a lot of control over navigation, this is your add-on.
New Add-ons This Week
Many of us use an .htaccess file to remove index.php from URLs or perhaps to apply a few 301 Redirects. But what else can .htaccess do for your site and its files? What about regex? In this week’s episode, Jonathan Penn drops by the show to give a primer on .htaccess, including what it’s primarily used for, what you should add and avoid, and advice on tools to use that’s already at your disposal! We also name a couple tools to help build a regular expression for the uninitiated!
Tune in now! Thanks to Hover for sponsoring!
- Email Template ($) by Rein de Vries
Simply wrap your default emails in a html template to match you style and taste.
- Structure Info by Bjorn Borresen
Structure info is an extension for Structure that will add some additional structure tags to the standard channel:entries tag.
- Entry API Parent Relationship by Rein de Vries
The Relationship (EE Relationship and Playa) extension for the Entry API will add a new value to the read_entry and search_entry that include the parents of the relationship child.
- Easy Auto Scroll Pagination ($) by Sekar Suresh
Easy Auto Scroll Pagination is a ExpressionEngine plugin allowing you to effortlessly implement infinite scrolling, lazy loading, or whatever catchy phrase you may know it as, within a template. I can create Ajax based auto loading script, which loads channel entries when user scrolls to bottom of the page A real-world example of this behavior is your Facebook News Feed, which automatically loads content as you scroll down and reach the end of the page.
This is a on-going series of entries where I highlight EE experiences.
A special edition of WTSAEE in honor of long time community member Sue Crocker, who passed away two days ago. She made an impression on a lot of people for her gentle, patient help online and off.