views:

131

answers:

4

I am developing a site using php and mysql. I want to know... what's a good way to deal with multi-lingual support? I want a user to be able to select from a drop down and select their language. Then everything (content, buttons, links) except the user-written content is in their language.

What's a good way to approach this? Use a cookie? Session?

A: 

I think it's a good idea to consider working with a framework that has internationalization support.

Take a look at this example using CakePHP http://bakery.cakephp.org/articles/view/p28n-the-top-to-bottom-persistent-internationalization-tutorial

al3cs
A: 

Something like this works fine:

Langs.php

<?

// check if language switch as been set at url var
if ($_GET["lang_change"]) {

    $_SESSION['session_name']["lang"] = $_GET["lang_change"];

}


// set value to lang for verification
$active_lang = $_SESSION['session_name']["lang"];


// verify $lang content and set proper file to be load
switch ($active_lang) {

    case 'prt':
        $lang_file = 'prt.php';
        break;

    case 'gbr':
        $lang_file = 'gbr.php';
        break;

    case 'fra' :
        $lang_file = 'fra.php';
        break;

    case 'esp' :
        $lang_file = 'esp.php';
        break;

    case 'deu' :
        $lang_file = 'deu.php';
        break;

    default:
        $lang_file = 'gbr.php';

}


// load proper language file for site presentation
include_once ('$lang_file);

?>

LANG GBR FILE (gbr.php)

define("LANG_PAGETITLE_HOMEPAGE", 'Homepage');
define("LANG_BTN_KNOW_MORE", 'know more');

METHOD TO CHANGE LANGUAGE (url sample)

<a href="index.php?lang_change=gbr" title"">USE ENG</a>

Basically, you have PHP files with constants, each file with a lang.

On click you set a url var (ex: lang_change = lang).

That will force page reload, and the langs.php file include at top of your index.php will load the selected language...

If you need more explanation about this, leave a comment and I'll send you a working sample!

Ps: session variables shown in this code is usefully for interaction with login systems, or just to avoid having the url parameters...

Zuul
A: 

I think the following will help you get some basic idea of developing it.

In a website, specially a multilingual website should have user interfaces / templates where hardcoded labels should be linked to variables. These variables should be loaded with correct language values. This can be done easily by including the language file containing the values in that specific language. You can have as many language files in a folder.

You will need to write a script in php, as whenever the user selects the language from the drop down, the page can reload with a language session. Another php script to fetch the selected language inside this session data and include the relevant language file inside the template/UI.

The same approach can be used in fetching content data from a table, where in all MySQL queries, you can use an additional lookup for language type from the content table. so that that file will be loaded.

SELECT * FROM posts WHERE lang='en' AND featured = 1

In many cases, the languages require HTML and CSS to be set accordingly to make the language render perfectly inside the browser. This means, you can also define language inside the HTML and in CSS define the fonts and directions (right to left or left to right).

I am recommending you to read the following in order to get more information on how to do it. http://www.stylusinc.com/website/multilanguage_support.htm

Raf
A: 
  • Save all dynamic content flagged with actual language
  • Make use of gettext() for buttons, etc. This one is much faster than including .php files with arrays
fabrik