Okay, here is what I've done: I have a file /www/test.php: <? header('Content-Type: text/plain; charset=ISO-8859-1'); putenv('LANG=en'); putenv('LANGUAGE=en'); setlocale(LC_ALL, ''); bindtextdomain("messages", "/usr/local/easydns/locale"); textdomain("messages"); echo _("Hello world."); ?> I then do: xgettext --keyword=_ -C /www/test.php This makes "messages.po" which looks like: # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2001-08-01 17:13-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <[EMAIL PROTECTED]>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: /www/test.php:9 msgid "Hello world." msgstr "" I then do: mkdir /usr/local/easydns/locale/fr mkdir /usr/local/easydns/locale/fr/LC_MESSAGES cp messages.po /usr/local/easydns/locale/fr/LC_MESSAGES I then edit that messages.po so it reads: msgid "Hello world." msgstr "Bonjour monde." Then: msgfmt /usr/local/easydns/locale/fr/LC_MESSAGES/messages.po \ -o /usr/local/easydns/locale/fr/LC_MESSAGES/messages.mo I then check the test.php file in a browser: it's in english. I edit test.php to read: <? header('Content-Type: text/plain; charset=ISO-8859-1'); putenv('LANG=fr'); putenv('LANGUAGE=fr'); setlocale(LC_ALL, ''); bindtextdomain("messages", "/usr/local/easydns/locale"); textdomain("messages"); echo _("Hello world."); ?> Reload in a browser, and it's still english. What am I missing?!?! - Colin -- PHP Internationalization Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]