2013-06-10 16 views
6

Recentemente ho iniziato a implementare le opzioni di lingua per il mio sito web. Ecco come funziona in pratica:Cambio lingua in modo dinamico PHP, Javascript, interfaccia utente jQuery

if(isset($_GET['lang'])) 
{ 
    $langr= $_GET['lang']; 
    $_SESSION['lang'] = $langr; 
    setcookie('lang', $langr, time() + (3600 * 24 * 30)); 
} 
elseif(isset($_SESSION['lang'])) 
{ 
    $langr = $_SESSION['lang']; 
} 
elseif(isset($_COOKIE['lang'])) 
{ 
    $langr = $_COOKIE['lang']; 
} 
else 
{ 
    $langr = 'en'; 
} 
switch ($langr) 
{ 
    case 'en': 
    $lang_file = $_SERVER['DOCUMENT_ROOT']."/includes/lang/en.php"; 
    break; 
    case 'fr': 
    setlocale (LC_ALL, 'fr_FR.utf8','fra'); 
    $lang_file = $_SERVER['DOCUMENT_ROOT']."/includes/lang/fr.php"; 
    break; 

    default: 
    $lang_file = $_SERVER['DOCUMENT_ROOT']."/includes/lang/en.php"; 

} 
include_once $lang_file; 

Carica il file della lingua appropriato nella parte superiore di ogni pagina del mio sito web. Tuttavia, i problemi che iniziano a venire fuori quando si utilizza datepicker dell'interfaccia utente di jQuery. Ho trovato un file di impostazioni regionali per la DatePicker on-line e hanno creato un file separato per esso:

///jquery.ui.datepicker-fr.js file 

jQuery(function($){ 
    $.datepicker.regional['fr'] = { 
     closeText: 'Fermer', 
     prevText: 'Précédent', 
     nextText: 'Suivant', 
     currentText: 'Aujourd\'hui', 
     monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 
      'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], 
     monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin', 
      'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], 
     dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'], 
     dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], 
     dayNamesMin: ['D','L','M','M','J','V','S'], 
     weekHeader: 'Sem.', 
     dateFormat: 'dd/mm/yy', 
     firstDay: 1, 
     isRTL: false, 
     showMonthAfterYear: false, 
     yearSuffix: ''}; 
    $.datepicker.setDefaults($.datepicker.regional['fr']); 
}); 

Il problema è che ho bisogno di caricare dinamicamente jquery.ui.datepicker-fr.js ogni volta che viene rilevata una modifica di lingua in modo che i miei interruttori DatePicker a Francese. Quello che stavo pensando è la creazione di una funzione PHP che avrei inserito nel mio file <head> che avrebbe echo il mio file, ma il problema è che non tutte le mie pagine web sono PHP e non trovo questo un metodo molto efficace. Qualche altra idea su come farlo?

+1

Perché non leggere il cookie in javascript e quindi, in base a ciò, scaricare il file di localizzazione corretto? –

+0

penso che un metodo efficace possa estrarre le informazioni '' lang cookie' dal 'datepicker.js' e carichi di conseguenza – progrrammer

+0

Hmm, il caricamento del cookie sarebbe un'opzione .. – Dimitri

risposta

1

è necessario mettere un controllo nella vostra header.php che sarà va così:

<script type="text/javascript>" src="/js/<?php if($_SESSION['lang'] == "en"){ echo 'datepicker-en.js'}else echo 'datepicker-fr.js'; ?>"></script> 

Così rileverà automaticamente il file didatepicker secondo il vostro parametro di lingua.

0

Cosa ne pensi di questo approccio?

function getBaseURL() 
{ 
    var url = location.href; 
    var baseURL = url.substring(0, url.indexOf('/', 14)); 
    if (baseURL.indexOf('http://localhost') != -1) 
    { 
     var url = location.href; 
     var pathname = location.pathname; 
     var index1 = url.indexOf(pathname); 
     var index2 = url.indexOf("/", index1 + 1); 
     var baseLocalUrl = url.substr(0, index2); 
     return baseLocalUrl + "/"; 
    } 
    else 
    { 
     return baseURL + "/"; 
    } 
} 

function getCookie(c_name) 
{ 
    var i,x,y,ARRcookies=document.cookie.split(";"); 
    for (i=0;i<ARRcookies.length;i++) 
    { 
     x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); 
     y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); 
     x=x.replace(/^\s+|\s+$/g,""); 
     if (x==c_name) 
     { 
      return unescape(y); 
     } 
    } 
} 


function getLang() 
{ 
    var lang = getCookie("lang"); 
    switch(lang) 
    { 
     case "fr": 
      document.write("<script src='"+getBaseURL()+"js/lang/jquery.ui.datepicker-"+lang+".js'></script>"); 
      break; 
     default: 
      document.write(""); 
    } 
} 
getLang(); 

Le funzioni sarebbe situato in un file js comune e vorrei richiamare la funzione getLang() su tutte le mie pagine ...

0

Come sull'utilizzo .Per passare() e .post()? Aggiungi id of lang al tuo modulo in cui un utente può cambiare la lingua.

$('#lang').change(function(){ 
      //link to your php file 
    var findlangfile = "<?php echo index.php/findlang.php;?> 
    $.post(findlangfile, { 
     lang: $('#lang').val(), 
    }, function(response){ 
     // you do things 
    }); 
    return false; 
}); 
0

È possibile utilizzare il plugin per i cookie jQuery, uno buono. Quindi fai la stessa procedura con jQuery come con php. Se lingua fornita come parametro url - configura il cookie con il plugin (ottieni il valore della lingua con la funzione getBaseURL() sopra). In caso contrario, carica il cookie e carica il file javascript appropriato. Qualcosa come $('head').append('<script..'); dovrebbe fare il compito.

Assicurarsi di eseguire tutto questo script al caricamento della pagina con $(function() { /* code here */ });

Anche se è possibile per realizzare il compito in questo modo, vi consiglio vivamente di commutazione tutte le pagine a PHP, come sarebbe semplificare le cose come questo.

1

vorrei fare in questo modo, avere un file PHP separato responsabile per ottenere, questo modo è possibile utilizzare in pagine HTML piano così ...

<script type="text/javascript" src="/getCorrectJsFile.php"></script> 
0

Versione migliorata della risposta di Moeed corretta JS File :



Hai bisogno di mettere un controllo nella vostra header.php che sarà va così:

<script src="/js/<?php echo 'datepicker-' . *COOKIE/SESSION VALUE, LIKE en* . '.js'; ?>"></script> 

Ciò dynamicly selezionare datepicker-???.js wh precedente ??? è il valore rappresentato dal cookie/cookie di sessione.

Problemi correlati