Spud, :-) Brilliant, yes -- I had no idea sprintf() could do argument swapping.
Thanks! Hans On Wed, 2002-07-24 at 11:47, a.h.s.boy wrote: > 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 > > -- PHP Internationalization Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php