7

I am looking for a standards-compliant way to store multi-language content for a Web Application. Until now, I have employed my own "translate()" functions that read data from a file or a dictionary table in a database. However, keeping the dictionaries up to date in a database table is very cumbersome if you work with different copies of the web app.

I like gettext because there is a multitude of tools available for it. However, I develop applications for different platforms. I am absolutely unwilling to deal with the crappy ways of setlocale() and consorts - namely the dozens of different locale string variations differing from system to system that you need to provide for to get it working. Never ever. I have a set of languages - say de, en, and es - and I want to load the appropriate dictionary and work with _() without touching setlocale() or bindtexdomain() once.

Is this somehow possible using gettext? Or does somebody know another simple, small, fast (!) i18n solution for PHP that can work with .po/.mo files, preferably without requiring a PHP extension?

Pekka
  • 442,112
  • 142
  • 972
  • 1,088
  • 2
    It is not practically possible to use gettext in PHP without using gettext extension, but don't worry this is quite a common/standard extension of PHP and most installation do have it already activated. – sorin Dec 12 '09 at 17:25
  • 1
    @Sorin: It is possible, there is a native PHP implementation with most, if not all, the gettext functions. – Alix Axel Jul 27 '10 at 14:11
  • @votingmeisfree wordpress and cakephp, to name a few, use po and mo files without using gettext implementation. They open the file directly. – T0xicCode Aug 26 '12 at 16:22

2 Answers2

3

This method should work even with non-standard locales:

$locale = 'someWeirdLocale';

putenv('LC_MESSAGES=' . $locale);
bindtextdomain('domain', './locale');
textdomain('domain');

Enjoy!

Alix Axel
  • 151,645
  • 95
  • 393
  • 500
2

Zend_Translate works with it

http://framework.zend.com/manual/en/zend.translate.adapter.html#zend.translate.adapter.gettext

Valentin Golev
  • 9,965
  • 10
  • 60
  • 84
  • And it doesn't require the gettext extension :) They also have adapters for more friendly sources - array, xml, csv etc – David Snabel-Caunt Oct 25 '09 at 12:13
  • Thanks, this looks interesting. I have been looking and Zend for quite a while and maybe I will try it out. I would still prefer a lightweight stand-alone solution, if anybody knows one. – Pekka Oct 25 '09 at 17:53
  • Oh, it's more lightweight than it looks like. You can use only classes you need: for Zend_Translate, you need only Zend_Translate, Zend_Locale, Zend_Loader and Zend_Exception (maybe I'm wrong and you'll need more or less, just try it out) – Valentin Golev Oct 25 '09 at 19:58