[prev in list] [next in list] [prev in thread] [next in thread]
List: php-i18n
Subject: Re: [PHP-I18N] RE: How to structure a multilingual app
From: Hans Lellelid <hans () forumone ! com>
Date: 2002-07-24 15:48:03
[Download RAW message or body]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic