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
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.
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.