2013-06-10 27 views
6

最近私のウェブサイトの言語オプションを実装し始めました。これは基本的にどのように動作するかです:動的切り替え言語PHP、Javascript、jQuery UI

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; 

私のウェブサイトの各ページの上部に適切な言語ファイルがロードされます。しかし、jQueryのUIのdatePickerを使用しているときに出てくる問題。私はオンライン日付ピッカーのための地域の設定ファイルを発見し、それのために別のファイルを作成しました:

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

問題は、私は、言語の変更が検出されるたびに、私の日付ピッカーがフランス語に切り替わるように動的にjquery.ui.datepicker-fr.jsをロードする必要があります。私が考えていたのは、自分のファイルをエコーアウトする私の<head>に入れるPHP関数を作成することですが、その問題はすべてのWebページがPHPではないということです。これを行う方法に関する他のアイデア?

+1

javascriptでCookieを読み取ってから、それに基づいて適切なローカリゼーションファイルをダウンロードするのはなぜですか? –

+0

iは効果的な方法は、 'datepicker.js'と負荷に応じて – progrrammer

+0

うーんによって' LANG cookie'情報を抽出することができると思い、クッキーをロードすることになりますオプション... – Dimitri

答えて

1

あなたはそのようになりますあなたのheader.phpのにチェック入れる必要があります。

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

だから、それは自動的にあなたの言語のパラメータに応じて日付ピッカーファイルを検出しますが。

0

このアプローチについてどう思いますか?

関数はJS共通のファイルに配置されることになると私は私のすべてのページに getLang()関数を呼び出します
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(); 

...

0

どう.changeを(使用について)および.post()?ユーザーが言語を変更できるフォームにlangのIDを追加します。

$('#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

jQueryのクッキープラグインを使用すると良いでしょう。その後、phpと同じようにjQueryで同じ手順を実行します。 urlパラメータとして提供された言語の場合 - プラグインでCookieを設定します(上記のgetBaseURL()関数で言語値を取得します)。それ以外の場合は、クッキーをロードし、適切なjavascriptファイルをロードします。 $('head').append('<script..');のようなものがその作業を行うべきです。

はそれがタスクをこのように実現することは可能ですが$(function() { /* code here */ });

で、ページの読み込みにこの全体のスクリプトを実行することを確認し、それはこの1つのようなものを単純化するように、私は非常に、PHPにすべてのページを切り替えることをお勧めします。

1

私はこの方法を行うだろう、あなたにも計画のHTMLページで使用することができ、この方法は 、正しいJSファイルを取得するための責任を別のPHPファイルを持っている...

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

Moeedの答えの改良版:

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

これはdynamicly datepicker-???.js WHを選択します:



あなたはそのようになりますされ、あなたのheader.phpの中にチェックを入れてする必要がありますere ???は、cookie/session-cookieで表される値です。