2010-02-26 7 views
0

je suis venu avec un mini-cadre qui traite des sites multilingues sans utiliser Gettext ou Zend_Translate en joignant ensemble de très bonnes réponses à des questions précédentes, j'ai demandé comme this one.Comment dans ce mini-php-cadre puis-je nettoyer ce fichier « contrôleur » avec des offres avec des sites Web multilingues

langues/lang.en.php (la source de contenu multilingue):

<?php 
$lang = array(
    'tagline_h2' => 'I create <a href="#content">websites</a>...', 

langues/lang.es.php(la source de contenu multilingue dans d'autres langues):

<?php 
$lang = array(
    'tagline_h2' => 'Creo <a href="#content">sitios webs</a>...', 

common.php (le contrôleur de la source de contenu):

<?php 
session_start(); 
header('Cache-control: private'); // IE 6 FIX 

if(isSet($_GET['lang'])) 
{ 
$lang = $_GET['lang']; 

// register the session and set the cookie 
$_SESSION['lang'] = $lang; 

setcookie("lang", $lang, time() + (3600 * 24 * 30)); 
} 
else if(isSet($_SESSION['lang'])) 
{ 
$lang = $_SESSION['lang']; 
} 
else if(isSet($_COOKIE['lang'])) 
{ 
$lang = $_COOKIE['lang']; 
} 
else 
{ 
$lang = 'en'; 
} 

//use appropiate lang.xx.php file according to the value of the $lang 
switch ($lang) { 
    case 'en': 
    $lang_file = 'lang.en.php'; 
    break; 

    case 'es': 
    $lang_file = 'lang.es.php'; 
    break; 

    case 'tw': 
    $lang_file = 'lang.tw.php'; 
    break; 

    case 'cn': 
    $lang_file = 'lang.cn.php'; 
    break; 

    default: 
    $lang_file = 'lang.en.php'; 
} 

//translation helper function 
function lang($translation) { 
    global $lang; 
    return $lang[$translation]; } 

include_once 'languages/'.$lang_file; 
?> 

index.php (la sortie):

<div id="tagline"> 
    <h2><?php echo lang('tagline_h2'); ?></h2> 
</div> 

Je pense, je suis OK avec mes lang.xx.php fichiers et mon index.php. Depuis que je suis un débutant php, je ne suis pas sûr de mon common.php. Je pense qu'il ya inutile code php là (mais tout fonctionne bien).

Toutes les suggestions à nettoient ce code?

Répondre

1

Controller:

<?php 
session_start(); 
header('Cache-control: private'); // IE 6 FIX 

function get_lang(){ 
    if(!empty($_GET['lang'])) return $_GET['lang']; 
    if(!empty($_SESSION['lang'])) return $_SESSION['lang']; 
    if(!empty($_COOKIE['lang'])) return $_COOKIE['lang']; 
    return 'en'; 
} 

function set_lang($lang){ 
    setcookie("lang", $lang, time() + (3600 * 24 * 30)); 
    $_SESSION['lang'] = $lang; 
} 

function get_lang_file($lang){ 
    $lang_file = "languages/lang.$lang.php"; 
    if(file_exists($lang_file)) return $lang_file; 
    if($lang_file = get_lang_file('en')) return $lang_file; 
    return false; 
} 

//translation helper function 
function l($string){ 
    static $translation; 

    if(!isset($translation)){ 
     $lang = get_lang(); 
     $lang_file = get_lang_file($lang); 
     if($lang_file) set_lang($lang); 
     $translation = include $lang_file; 
    } 

    return $translation[$string]; 
} 

fichier Langue:

<?php 
return array(
    'tagline_h2' => 'I create <a href="#content">websites</a>...', 

Vue:

<div id="tagline"> 
    <h2><?=l('tagline_h2'); ?></h2> 
    <p><?=l('tagline_p'); ?></p> 
</div> 

Vous pouvez encore l'améliorer en utilisant POO.

+0

@Sam Dark Merci! Cela a fonctionné mais maintenant j'ai le problème suivant: http://stackoverflow.com/questions/2339289/php-variables-end-up-null-but-the-code-works. – alexchenco