6 votes

Passage dynamique de la langue PHP, Javascript, jQuery UI

Je viens de commencer à mettre en œuvre des options de langue pour mon site web. Voici comment cela fonctionne en gros :

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;

Il charge le fichier de langue approprié en haut de chaque page de mon site web. Cependant, des problèmes sont apparus lors de l'utilisation du datepicker de l'interface utilisateur de jQuery. J'ai trouvé un fichier de paramètres régionaux pour le datepicker en ligne et j'ai créé un fichier séparé pour cela :

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

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']);
});

Le problème est que j'ai besoin de charger dynamiquement jquery.ui.datepicker-fr.js chaque fois qu'un changement de langue est détecté afin que mon datepicker passe en français. Ce que je pensais faire est de créer une fonction PHP que je mettrais dans mon qui écrirait mon fichier, mais le problème est que toutes mes pages web ne sont pas en PHP et je ne trouve pas cela méthode très efficace. Avez-vous d'autres idées sur la manière de faire cela ?

1voto

Moeed Farooqui Points 3574

Vous devez mettre une vérification dans votre header.php qui ressemblera à ceci :

">

Ainsi, il détectera automatiquement le fichier datepicker en fonction de votre paramètre de langue.

1voto

Borik Points 300

Je ferais de cette manière, avoir un fichier PHP séparé responsable de récupérer le bon fichier JS, de cette façon vous pouvez l'utiliser également dans des pages HTML simples...

0voto

Dimitri Points 1120

Que pensez-vous de cette approche?

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");
            break;
        default:
            document.write("");
    }
}
getLang();

Les fonctions seraient situées dans un fichier js commun et j'appellerais la fonction getLang() sur toutes mes pages...

0voto

shin Points 6280

Que diriez-vous d'utiliser .change() et .post()? Vous ajoutez l'id de lang à votre formulaire où un utilisateur peut changer la langue.

$('#lang').change(function(){
           //lien vers votre fichier php
    var findlangfile = "
    $.post(findlangfile, {
        lang: $('#lang').val(),
    }, function(response){
        // vous faites des choses
    });
    return false;
});

0voto

Piero Points 156

Vous pourriez utiliser le plugin cookie jQuery, un bon plugin. Ensuite, effectuez la même procédure avec jQuery comme avec php. Si la langue est fournie en tant que paramètre d'URL - définissez le cookie avec le plugin (obtenez la valeur de la langue avec la fonction getBaseURL() ci-dessus). Sinon, chargez le cookie puis chargez le fichier javascript approprié. Quelque chose comme $('head').append(' devrait faire l'affaire.

``

Assurez-vous d'exécuter le script entier lors du chargement de la page avec $(function() { /* code ici */ });

Bien qu'il soit possible d'accomplir la tâche de cette manière, je recommanderais vivement de passer toutes vos pages à php, car cela simplifierait des choses comme celle-ci.

``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X