[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