2013-06-10 56 views
6

Gần đây, tôi đã bắt đầu triển khai các tùy chọn ngôn ngữ cho trang web của mình. Đây là cách hoạt động cơ bản:Tự động chuyển đổi ngôn ngữ 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; 

Nó tải tệp ngôn ngữ thích hợp ở đầu mỗi trang trong trang web của tôi. Tuy nhiên, các vấn đề bắt đầu phát sinh khi sử dụng trình chỉnh sửa ngày tháng UI của jQuery. Tôi tìm thấy một tập tin thiết lập khu vực cho datepicker trực tuyến và đã tạo ra một tập tin riêng biệt cho nó:

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

Vấn đề là tôi cần phải tự động tải jquery.ui.datepicker-fr.js bất cứ khi nào có sự thay đổi ngôn ngữ được phát hiện do đó công tắc datepicker tôi để Pháp. Những gì tôi đã nghĩ là tạo ra một hàm PHP mà tôi sẽ đặt trong <head> của tôi sẽ lặp lại tệp của tôi, nhưng vấn đề là không phải tất cả các trang web của tôi đều là PHP và tôi không thấy đây là một phương pháp rất hiệu quả. Bất kỳ ý tưởng nào khác về cách thực hiện điều này?

+1

Tại sao javascript không đọc cookie và sau đó dựa trên đó, tải xuống tệp bản địa hóa chính xác? –

+0

tôi nghĩ rằng phương pháp hiệu quả có thể được trích xuất thông tin 'lang cookie' bởi' datepicker.js' và tải tương ứng – progrrammer

+0

Hmm, tải cookie sẽ là một tùy chọn .. – Dimitri

Trả lời

1

Bạn cần phải đặt một tấm séc trong header.php của bạn mà sẽ đi như thế:

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

Vì vậy, nó sẽ tự động phát hiện các datepicker tập tin theo tham số ngôn ngữ của bạn.

0

Bạn nghĩ gì về phương pháp này?

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

Các chức năng sẽ được đặt trong một file js chung và tôi sẽ gọi getLang() chức năng trên tất cả các trang của tôi ...

0

Làm thế nào về việc sử dụng .change() và .post()? Bạn thêm id lang vào biểu mẫu của bạn, nơi người dùng có thể thay đổi ngôn ngữ.

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

Bạn có thể sử dụng plugin cookie jQuery, một plugin tốt. Sau đó làm thủ tục tương tự với jQuery như với php. Nếu ngôn ngữ được cung cấp dưới dạng tham số url - hãy đặt cookie bằng plugin (nhận giá trị ngôn ngữ bằng hàm getBaseURL() ở trên). Nếu không tải cookie và sau đó tải tập tin javascript thích hợp. Một cái gì đó như $('head').append('<script..'); nên làm nhiệm vụ.

Hãy chắc chắn để chạy kịch bản này toàn trên tải trang với $(function() { /* code here */ });

Mặc dù nó có thể để hoàn thành nhiệm vụ theo cách này, tôi rất muốn giới thiệu chuyển đổi tất cả các trang của bạn để php, vì nó sẽ đơn giản hóa mọi thứ như thế này.

1

tôi sẽ làm theo cách này, có một file PHP riêng biệt chịu trách nhiệm cho việc đúng JS File, cách này bạn có thể sử dụng nó trong kế hoạch trang HTML cũng ...

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

Phiên bản cải tiến của câu trả lời Moeed của :



bạn cần phải đặt một tấm séc trong header.php của bạn mà sẽ đi như thế:

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

này dynamicly sẽ chọn datepicker-???.js wh 01 ??? là giá trị được biểu thị bằng cookie/phiên cookie.

Các vấn đề liên quan