TRhIP is a website developed for the MGH Travel Clinic. It helps travelers prepare for a visit to their doctor before leaving on their journey.
TRhIP is available in multiple languages. I’m going to talk about my current solution to managing these translations and how I got there.
This discussion is about where I currently am with this project. If you have suggestions for ways to make it better, I’m all ears!
Some things that complicate matters:
The big problem with multiple templates is keeping the templates in sync when the structure changes.
If you're not really dealing with templates with various appearing and disappearing parts, you may be happy to have multiple copies of the same HTML file for serving up. Cf HTTP::AcceptLanguage and the way that Apache handles multiple language files.
These links are just in case people are interested in my home-rolled PO-like solution.
A standard part of Gettext. See here for some useful information on the format.
Lots of modules to work with PO files.
I opted for Locale::PO
. Sort of.
Locale::Maketext
, though touted all over the web and in TPJ13, is problematic (can't easily send to translators that aren't Perl programmers, non-standard).
Locale::TextDomain
is often listed as a better solution (or Locale::Maketext::Gettext
) as it fits into the Gettext standard.
All suffer from the problem that they’re intended for translating strings within a program, not for templates to be served by the same program in different languages.
AUTOLOAD
).pot
file.pot
file to create .po
files, send them to the translators, and you get back something like this: bn.poLooking at our complications, what still remains?
In particular, how to handle when people are travelling to multiple countries.
Initially, I used Text::Conjunct
, but it doesn’t work well for Arabic and Chinese (spacing issues).
However, the Unicode CLDR has information on how to make an “and” list.
How can we use this information? The Locales
module.
Annoyingly, though, the CLDR (and hence Locales) doesn’t have information for one of our target languages.
Also, I’m already using a ton of memory (each starman
instance is using 5% of the server memory).
Locales
makes that a lot larger, because of how much stuff it loads into memory.
So, let’s just simplify.
per the talk description, I need to also mention Plack. I will also note HTML::FillInForm, Package::Alias, and Set::Tiny as interesting modules.
Also, if needed, files