2013-06-10 9 views
6

मैंने हाल ही में अपनी वेबसाइट के लिए भाषा विकल्प लागू करना शुरू कर दिया है। यहां बताया गया है कि यह मूल रूप से कैसे काम करता है:गतिशील रूप से भाषा स्विचिंग PHP, जावास्क्रिप्ट, 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; 

यह मेरी वेबसाइट में प्रत्येक पृष्ठ के शीर्ष पर उचित भाषा फ़ाइल लोड करता है। हालांकि, jQuery के यूआई डेटपिकर का उपयोग करते समय आने वाले मुद्दे सामने आ रहे हैं।

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

मुद्दा मैं जब भी एक भाषा बदलने के लिए फ्रेंच ताकि मेरे datepicker स्विच का पता चला है गतिशील jquery.ui.datepicker-fr.js लोड करने के लिए की जरूरत है: मैं एक क्षेत्रीय सेटिंग datepicker के लिए फ़ाइल ऑनलाइन और इसके लिए एक अलग फाइल बनाया है पाया। मैं जो सोच रहा था वह एक PHP फ़ंक्शन बना रहा है जिसे मैं अपने <head> में डालूंगा जो मेरी फ़ाइल को प्रतिबिंबित करेगा, लेकिन इसके साथ समस्या यह है कि मेरे सभी वेब पेज PHP नहीं हैं और मुझे यह एक बहुत ही प्रभावी तरीका नहीं मिला है। यह कैसे करें इस पर कोई अन्य विचार?

+1

जावास्क्रिप्ट कुकी को क्यों नहीं पढ़ा है और फिर उस पर आधारित, सही स्थानीयकरण फ़ाइल डाउनलोड करें? –

+0

मुझे लगता है कि प्रभावी विधि 'datepicker.js' द्वारा' लैंग कुकी 'जानकारी निकालने और – progrrammer

+0

हम्म के अनुसार लोड हो सकती है, कुकी लोड करना एक विकल्प होगा .. – Dimitri

उत्तर

1

आप अपने header.php ऐसे ही चला जाता है होगा, जिसमें एक जांच डाल करने के लिए की जरूरत है।

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() समारोह कहेंगे ...

0

कैसे .change() और .post का उपयोग कर के बारे में()? आप अपने फॉर्म में लैंग की आईडी जोड़ते हैं जहां कोई उपयोगकर्ता भाषा बदल सकता है।

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

तो यह स्वचालित रूप से अपनी भाषा पैरामीटर के अनुसार datepicker फ़ाइल की पहचान करेगा:

$('#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 के साथ एक ही प्रक्रिया करें। यदि यूआरएल पैरामीटर के रूप में आपूर्ति की गई भाषा - प्लगइन के साथ कुकी सेट करें (उपरोक्त getBaseURL() फ़ंक्शन के साथ भाषा मान प्राप्त करें)। अन्यथा कुकी लोड करें और फिर उपयुक्त जावास्क्रिप्ट फ़ाइल लोड करें। $('head').append('<script..'); जैसे कुछ कार्य करना चाहिए।

$(function() { /* code here */ });

साथ पृष्ठ लोड पर इस पूरे स्क्रिप्ट चलाने के लिए हालांकि यह काम इस तरह से पूरा करने के लिए संभव है, मैं अत्यधिक, php के लिए आपके सभी पृष्ठों स्विच करने की अनुशंसा के रूप में यह इस तरह चीजों को आसान बनाने जाएगा सुनिश्चित करें।

1

मैं इस तरह से करना होगा, एक अलग PHP फ़ाइल सही जे एस फ़ाइल, इस तरह से आप के साथ-साथ योजना HTML पृष्ठों में इसका इस्तेमाल कर सकते हैं ...

<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 क का चयन करेंगे:



आप अपने header.php में एक चेक डालने के लिए जो इस तरह से चला जाता है होगा की जरूरत है ere ??? कुकी/सत्र-कुकी द्वारा दर्शाया गया मान है।

संबंधित मुद्दे