6

最近、Web サイトに言語オプションの実装を開始しました。基本的な仕組みは次のとおりです。

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であるとは限らず、これが非常に効果的な方法だとは思わない. これを行う方法に関する他のアイデアはありますか?

4

6 に答える 6

1

次のように、header.php にチェックを入れる必要があります。

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

そのため、言語パラメーターに従って、 datepickerファイルが自動的に検出されます。

于 2013-06-20T10:04:29.887 に答える
1

私はこのようにして、正しいJSファイルを取得する責任を負う別のPHPファイルを用意します。このようにして、計画のHTMLページでも使用できます...

<script type="text/javascript" src="/getCorrectJsFile.php"></script>
于 2013-08-08T15:16:32.547 に答える
0

jQuery cookie プラグインを使用できます。これは優れたプラグインです。次に、jQuery で php と同じ手順を実行します。url パラメーターとして言語が指定されている場合 - プラグインで Cookie を設定します (上記の getBaseURL() 関数で言語値を取得します)。それ以外の場合は、Cookie をロードしてから、適切な JavaScript ファイルをロードします。のようなもの$('head').append('<script..');がタスクを実行する必要があります。

ページの読み込み時にこのスクリプト全体を必ず実行してください$(function() { /* code here */ });

この方法でタスクを達成することは可能ですが、すべてのページを php に切り替えることを強くお勧めします。

于 2013-08-06T19:52:23.220 に答える
0

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

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();

関数は共通のjsファイルに配置され、getLang()すべてのページで関数を呼び出します...

于 2013-06-10T01:53:14.667 に答える
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;
});
于 2013-06-10T01:55:51.483 に答える
0

Moeedの回答の改良版:



次のように、header.php にチェックを入れる必要があります。

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

これにより、cookie/session-cookie によって表される値datepicker-???.jsがどこにあるかが動的に選択されます。???

于 2015-05-23T12:17:41.573 に答える