DerekAllard.com

Internationalizing your application cannot be an afterthought

BambooInvoice has been released for almost a year now, and I have to say that its picked up much more momentum then I ever thought it would.  The lowly “proof of concept” application has grown so much.  I have no idea how many people use Bamboo to keep their invoicing straight, but I do know that those who choose to use it are a very diverse group.  We seem to run the gamut from hard-core developer to freelance writers.  I’ve been contacted by artists and programmers, designers and architects (well ok, only 1 architect).  There are “Bamboo-ers” in at least 7 countries, and at least 5 languages.  And if my “request for translators” post showed me anything, its that there is interest there for many more.

Bamboo’s users are also very giving; constantly offering suggestions, improvements and support.  To that end, I’ve tried to be responsive and incorporate the ideas, or at least offer workarounds until I have the opportunity to fully implement their ideas.  Custom logos come to mind here, as do extra reporting capability and newer invoice formats.  But I’m not always able to build in everything - and that’s what this post is about.

I desperately want to enable users to use Bamboo in their native languages - and not force English on them.  As the author of the application, I initially thought “hey no problem, Bamboo is built on CodeIgniter, and CI has fantastic tools for easing internationalization and localization available - this should be no problem”.  Boy was I wrong - and I’ve learned a huge lesson here about software development.  Namely, internationalizing cannot be an afterthought as it’s just too difficult.

I’m now faced with needing to re-write all the hard-coded “text” into a format that can take advantage of the language class.  Essentially, this means replacing every scrap of text in my views with a variable.  That’s HARD!  And there is so much text you don’t think about.  Every error message, notification, snippet in the sidebar, everything.  The only feasible way to do this is at the start of your project, because going back and trying to do it after the fact is idiotic.

Another thing I didn’t think about when I first built Bamboo was differing character sets.  On the web, switching character sets is reasonably easy, but Bamboo relies on DOMPDF for PDF generation, and that library just can’t handle non-English charsets.  Heck, it can’t even do umlauts or French characters very easily.  So in addition to all the extra crap of rewriting the views to handle the language class, now I’m going to have to swap out the PDF library.  Yuck.

And what’s the lesson here?  From now on all my applications will be built from the start to handle internationalization, instead of going in after the fact and bastardizing it until it “works”.

So the BambooInvoice translation project is on temporary hiatus.  I still want to get it internationalized, but at this stage I’m just not able to make it happen.

Sorry guys (and gals) - my dream of an international BambooInvoice is on vacation.

This entry was made on and filed into BambooInvoice.

Comments

Alex Williams wrote on

Hi Derek,

To quote from a famous commercial “You are coming to a sad realisation” ;)

I know how depressing it can be when you see how much work is actually involved in translating a completed web app.

You should keep in mind that thanks your efforts, your work is greatly appreciated by many people.

The fact that BambooInvoice is open source is a GREAT thing. You will definitely receive help from the community to make this happen, including me.

I think the best option for now is to setup the basic multilanguage functions. If you split the task into small pieces we can all pitch-in and help out.

Eric wrote on

I ran into this same situation with the script I developed.  In the beginning I only built it for English because I really didn’t know how popular it would be.  After the momentum picked I pretty much had to have different language files. 

In the end it took about a month or more to translate it out and it was a slow painful process.