views:

60

answers:

2

Hi all, I have a php/smarty/pear app that has it's own localization implementation that involves using ids for strings and the strings are stored in a db. currently the app is only in English but I will start adding other languages. The current implementation is very poor and basically I'm not a big fan of re-inventing the wheel.

Can anybody recommend what to use for localization? I had used gettext years ago, is that still used or is there something newer and better ?

thanks in advance.

A: 

My best advice is to look at how other apps (Drupal, Joomla, Wordpress) handle localization, and implement something similar.

A few of the apps I have delved into have a single ini file for each language that contains STRING-ID="String Value" definitions, where the STRING-ID is similar to a PHP CONSTANT name. These files are then loaded by a localization class, which has functions that handle setting the language to be used (based on a config value or user setting), loading the file, and handle the translation of the STRING-ID into the String Value. You would end up using it like this:

<?php
// config.php
$lang = "DE";

// languages/de.ini
HELLOWORLD="Hallo Welt"
OTHERSTRING="Anderer String"

// example.php
require_once("classes/localization.class.php");
$localize = localization::getInstance();
echo $localize->translate("HELLOWORLD");
?>

This should produce something like Hallo Welt.

phalacee
that's sort of what i have now, but i feel that keeping track of changes between the different ini files could be a nightmare. i have fond memories of editing po/gettext files using proper tools.
Sherif Buzz
+1  A: 

I would use gettext, since it's a mature system and provides features like singular/plural versions of translations. To be not dependant on the availability of the php extension, you should fall back to http://launchpad.net/php-gettext which provides a pure php implementation of gettext.

gettext has also the big advantage that dozens of tools exist that make it easy to translate those files.

cweiske
cheers.will check that out.
Sherif Buzz