Re: Newbie asks about multi-lingual website strategies

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff Benetti wrote:
> I'm a noob so keep the comments to a noob's level please.
> 
> I am doing a website and my client wants the bulk of the text to be
> bilingual (French and English).  The last site I did used php and mysql so I
> am getting comfortable with that technology.  Typically I am using a single
> php file and my menu constantly points to the same file with different id
> options example "index.php?id=30" and I want to use the same idea to choose
> a language example "index.php?lang=fr&id=30".  Pretty straight forward for
> many of you folks but before I start reinventing the wheel I wondered if
> anyone could offer any suggestions.  I have a couple of approaches in mind.
> 
> 1: Session vars, I have never used this but it seems straight forward.
> Drawbacks?
> 2: Cookies again not too big a deal, never used cookies either but it
> doesn't seem to be mystifying however the fact that the user can turn
> cookies off makes me not want to go this route.
> 3: Use the mysql database and log each ip address and record the preference
> and maybe the last time on the site.  I am leaning in this direction because
> I think it is the most robust but will it be slow?  First I have to get the
> ip then I have to check to see if it is in my data base and then get the
> language preference.  It would be great to have a standardized function that
> I could use on all of my sites.  I live in a bilingual country (Canada) so
> this could be a real selling point for my services.
> 
> Any any and all comments are welcome, it will be a learning curve no matter
> which route I take so a little advice on the best direction pros cons would
> be great.
> 
> And of course knowing that I will have many many thousands of people on my
> site (hee hee) which option will perform best once I start accumulating
> vistors.  That's one problem I see with the mysql solution, I think it may
> start to be slow unless I start purging vistors who have not shown up in a
> while or limit the number of entries.


First of all you can use the browser supplied language preferences (if
available) to try and guess the users preferred language. It should be
obvious from phpinfo() and a half decent browser what vars you need to
inspect ($_SERVER['HTTP_LANG'] or something like that - can't remember
of hand!).

You could do soemthing like:
1. Check session for lang preference and use it.
2. Regardless of the result of 1, check GET for a preference and store
in session if present and use it.
3. If neither 1 nor 2 has any preference, use the browser supplied
preference.
4. If nothing else, use a hard coded default.



OK, that selection taken care of :)


For hard coded strings in your PHP code use Gettext and bind to standard
your catalog files and use the language choice from the above algorithm.
xgettext can extract strings from PHP files easily enough. You just have
to make sure you write in your default language and do not use variable
substition as you normally would in PHP.

e.g.
BAD:
echo gettext("Hello $user, welcome to my site");

GOOD:
printf(gettext("Hello %s, welcome to my site"), $user);

printf and sprintf are your friend!!


If you use modules, be sure to write all your strings with a gettext
domain. It's a pain to go back and do this later!!!


I'd recommend looking at the gallery2 codebase for a nice example of
well internationalised and modular string handling.



As for the database contained strings there are multiple approaches here.

You could have a general linking structure that uses tables to store the
different strings. This is simple conceptually but also a pain to
implement in terms of SQL code.

I've actually created a set of custom functions for MySQL (in C) which
pack and extract multilingual content into text fields. It's a bit of a
pain in terms of standards complient SQL but it makes coding much simpler.

I would do e.g. "INSERT INTO table (mystring) VALUES(LANG_PACK('en',
'Hello', 'fr', 'Bonjour'));

Then
SELECT LANG_EXTRACT(mystring) FROM table;
("Hello" - defaults to first string)
of
SELECT LANG_EXTRACT(mystring, 'de', 'fr') FROM table;
('Bonjour' - can't find de but finds fr).

I've wrapped up the calls to LANG_EXTRACT in the SQL to use the user's
language preference automatically which works quite well.

There are lots of solutions here and if I were to think about it again
I'd maybe reconsider what I've done. It's convenient in some ways but
not so in others!

Hope this gives food for thought.

Col

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux