On Wednesday, July 24, 2002, at 10:57 AM, Hans Lellelid wrote:
> For translating text that might have dynamic values, I build a wrapper
> function for gettext() -- note that if you do this you'll probably need
> to use a shell/perl script to replace the wrapper function name with
> gettext() or _() before feeding it into thee xgettext tool.
I'm nearly finished with a huge gettext() based
internationalization...there are 650+ static strings in my pot file. But
I was a bit surprised to see your wrapper function, Hans.
The same result can be achieved using standard printf() functions around
the gettext() call. See the sprintf() manual page, especially the
section on "Argument swapping". (This applies only to PHP 4.0.6 or
later).
Example:
printf(gettext("Search found %1\$d pages for %2\$s"),$count,$query);
will achieve the same results without writing your own wrapper. A
translation would then look like
msgid "Search found %1\$d pages for %2\$s"
msgstr "En cherchant le database pour %2\$s, on a trouve %1\$d"
Other general app notes
-----------------------
1) I also have my app output a META content-type header with the
appropriate charset declaration, based on the user's selected language.
2) I modified my submission forms as well, to include "accept-charset="
with any character sets I support to be permissible.
3) I store the user-selected language as a cookie, though it can be
overridden by a $lang HTTP_GET_VAR. My "header.inc" file, which is
included at the top of each page, has a section like this:
///////////////////////////////////////////////////////////////
// Language localization based on cookie variable or passed in
///////////////////////////////////////////////////////////////
$g_default_lang = 'en_US';
if (isset($lang)) {
// GET_VARS trumps COOKIE_VARS
if (isset($HTTP_GET_VARS['lang'])) {
$g_lang = $HTTP_GET_VARS['lang'];
} else {
$g_lang = $HTTP_COOKIE_VARS['lang'];
}
} else {
$g_lang = $g_default_lang;
}
// Set language to desired language
putenv("LANG=$g_lang");
$checklang = setlocale(LC_ALL, $g_lang);
if ($checklang === FALSE) {
error_log('Failure setting language to '.$g_lang);
} else {
error_log("Setting language to $g_lang");
}
// Specify location of translation tables
bindtextdomain ("messages", "./locale");
textdomain ("messages");
setcookie('lang',$g_lang,time()+(60 * 60 * 24 *
60),'/',$GLOBALS['HTTP_HOST']);
///////////////////////////////////////////////////////////////
// End language localization
///////////////////////////////////////////////////////////////
You may want to replace the $HTTP_GET_VARS, etc with the new
superglobals, but the gist is still the same.
Cheers,
spud.
-------------------------------------------------------------------
a.h.s. boy
spud(at)nothingness.org "as yes is to if,love is to yes"
http://www.nothingness.org/
-------------------------------------------------------------------
--
PHP Internationalization Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php