2011-10-17 13 views
6

मैं स्थापित करने की कोशिश कर रहा हूं, जो मैंने सोचा था, एक साधारण भाषा स्विच। मैंने सोचा कि मैं PHP कुकीज़ का उपयोग करूंगा, लेकिन वे इरादे से व्यवहार नहीं कर रहे हैं।एक साधारण PHP कुकी भाषा टॉगल कैसे बनाएं?

मैंने कुछ कुकी ट्यूटोरियल पढ़े हैं और यहां कुछ समान उदाहरणों को देखा है जो स्टैक ओवरफ्लो पर हैं, लेकिन मुझे कुछ याद आना चाहिए क्योंकि यह ठीक से काम नहीं कर सकता है।

मैं इसे URL चर (lang = en या lang = ru) के रूप में पास करके भाषा सेट कर रहा हूं। यह सब ठीक लगता है। हालांकि, इस समय मेरे पास कोड है जो कुकी सेट करता है, एक कदम पीछे लगता है, इसलिए शुरुआत में इसका कोई मूल्य नहीं है (मैं इसे डिफ़ॉल्ट रूप से 'एन' होना चाहता हूं), यदि उपयोगकर्ता 'ईएनजी' पर क्लिक करता है बटन पर अभी भी कोई मूल्य नहीं है, और फिर यदि उपयोगकर्ता रूसी क्लिक करता है तो मूल्य 'एन' के रूप में दिखाता है, और फिर यदि मैं फिर से 'ईएनजी' बटन पर क्लिक करता हूं तो मान 'ru' के रूप में दिखाता है।

यहाँ कोड मैं एक साथ पत्थर है या नहीं:

if($_GET['lang']) { 
    $lang = (string)$_GET['lang']; 
    setcookie('lang', $lang, time() + 60*60*24*30); 
} elseif(!isset($_COOKIE['lang'])) { 
    $lang = 'en'; 
} else { 
    $lang = $_COOKIE['lang']; 
} 

एक बार मैं इस काम के मैं कुकी का मान उपयोग करना चाहते हैं या तो अंग्रेजी या रूसी मेनू सशर्त पीएचपी का एक सा का उपयोग कर प्रदर्शित करने के लिए मिल गया है ।

धन्यवाद।

+2

भाषा का निर्धारण करने के लिए कुकीज़ का उपयोग करना एक अच्छा विचार नहीं है। अलग-अलग यूआरएल बेहतर शर्त हैं, लोग सीधे उसी भाषा में सामग्री से लिंक कर सकते हैं क्योंकि वे लिंक पर रखे गए पेज पर उपयोग कर रहे हैं, और सर्च इंजन दो अलग-अलग पेज देखते हैं। – Quentin

+0

@ क्वांटिन एक बिंदु अच्छी तरह से बनाया गया। हालांकि, मैं एक कड़े बजट के लिए काम कर रहा हूं ताकि एक त्वरित और सरल समाधान की आवश्यकता हो। मूल रूप से वहां दो मुख्य मेनू होते हैं, एक अंग्रेजी के लिए और एक रूसी के लिए। साइट संपादक दोनों भाषाओं में लेख बनाएगा और फिर उन्हें प्रासंगिक मेनू में असाइन करेगा। उपयोगकर्ता की पसंद के आधार पर और सशर्त बयान का उपयोग करके इन मेनू में से केवल एक प्रदर्शित किया जाएगा। यह करने का सबसे आसान तरीका यह है कि मैं इसे करने के बारे में सोच सकता हूं ... – Matt

+0

@ क्वांटिन अगर अलग यूआरएल बनाए जाते हैं, तो साइट को कैसे याद रखना चाहिए कि फ्रेंच में एक पृष्ठ को फ्रेंच में साइट पर किसी अन्य पृष्ठ से लिंक करना चाहिए? – compguy24

उत्तर

6

।। सभी सुझावों के लिए धन्यवाद - @ मोब ने मुझे सही दिशा में सेट किया है, यानी कुकी को दूसरे पृष्ठ पर प्रोसेस करना और फिर आपको पहले वापस भेजना।

मैंने थोड़ा और सोच और प्रयोग किया और मैंने अंततः इसे हल कर लिया। मैं नीचे दिए गए कोड को पोस्ट करूंगा और कोई भी इसका उपयोग करना चाहता है।

अपने मुख्य पृष्ठ पर डाल इस:

$lang = "en"; 
if(isset($_POST["lang"])) { 
    $lang = $_POST["lang"]; 
    setcookie ('language', $lang, time() + 60*60*24*30, '/', 'mydomain.com'); 
    header("Location: /previous_page_url.php"); 
} 

उपयोगकर्ता एक भाषा और क्लिक 'भाषा का चयन चुनता है:

<form action="language_switcher.php" method="post"> 
    <select name="lang"> 
     <option value="en"<?php if($_COOKIE["language"] == "en") { echo " selected"; } ?>>English</option> 
     <option value="ru"<?php if($_COOKIE["language"] == "ru") { echo " selected"; } ?>>Russian</option> 
    </select> 
    <input type="submit" value="Select Language"> 
</form> 

<p>Language: <?php if(isset($_COOKIE["language"])) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p> 
' language_switcher.php 'नामक एक और फ़ाइल में

तो निम्न कोड डालें '। फॉर्म फिर फॉर्म मान को 'language_switcher.php' भेजता है, जो कुकी सेट करता है और फिर उपयोगकर्ता को पिछले पृष्ठ पर वापस भेजता है।

हो गया! :)

0

यह एक प्रयास करें,

if (!isset($_GET['lang'])) { 
    if (isset($_COOKIE['lang'])) { 
     $lang = $_COOKIE['lang']; 
    } 
    else { 
     $lang = 'en'; 
    } 
} 
else { 
    $lang = (string)$_GET['lang']; 
    setcookie('lang', $lang, time() + 60*60*24*30); 
} 

लैंग निर्देश प्राप्त में सेट नहीं है, तो देखें कि वहाँ एक कुकी सेट है।

यदि यह इसका मूल्य उपयोग करता है, या डिफ़ॉल्ट रूप से 'en' का उपयोग करें। यदि लैंग निर्देश सेट है, तो कुकी सेट करें।

यह काफी समान कोड है, लेकिन थोड़ा अनुकूलित है। (ऐसा नहीं है कि भारतीय विदेश सेवा की चोटी पर सबसे दिखाई स्थिति डाल करने के लिए बेहतर है। जब तक सेटिंग पृष्ठ पुनः लोड कर दिया गया है या किसी अन्य पृष्ठ (पहुँचा दिया गया है, दूसरे शब्दों में

+0

इसके लिए धन्यवाद, लेकिन ऐसा लगता है कि यह वही काम है, यानी यह एक कदम पीछे है। वहां कुछ टाइपो थे जिन्हें मैंने यहां सही किया है: 'अगर (! जारी ($ _GET [' lang ']) { \t अगर (जारी ($ _COOKIE [' lang '])) { \t \t $ lang = $ _COOKIE ['लैंग']; \t} अन्य { \t \t $ lang = 'en'; \t} } अन्य { \t $ lang = (string) $ _ प्राप्त करें ['lang']; \t सेटकुकी ('लैंग', $ लैंग, समय() + 60 * 60 * 24 * 30); } ' – Matt

+0

वास्तव में, मैंने कुछ कोष्ठक – ikromm

2

एक कुकी सुलभ नहीं है, तो आप सेट नहीं कर सकता और एक कुकी का उपयोग एक ही पृष्ठ में)

चेक इस कोड को आउट:।

if($_GET['lang']) { 
    $lang = (string)$_GET['lang']; 
    setcookie('lang', $lang, time() + 60*60*24*30,'/'); 
} elseif( !$_GET['lang'])) { 
    $lang = 'en'; 
} else { 
    $lang = $_GET['lang']; 
} 
header("Location: redirect_file.php") 
फिर redirect_file.php में

, आप कुकी पृष्ठ पर वापस अनुप्रेषित कुछ जांच निष्पादित करें अगर आप छोरों अनुप्रेषित से बचना चाहते हैं

+0

याद किया, मैं समझता हूं, लेकिन क्या मैं संभव नहीं कर रहा हूं? यहां प्रवाह है: उपयोगकर्ता क्लिक 'ईएनजी' बटन, पेज यूआरएल वैरिएबल 'lang = en' भेजकर और कुकी मूल्य सेटिंग को पुनः लोड करता है। – Matt

+0

@ मैट संपादित! इसकी जांच - पड़ताल करें। – Mob

3
if (!empty($_GET['language'])) { 
    $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'nl'; 
} else if (empty($_COOKIE['language'])) { 
    $_COOKIE['language'] = 'nl'; 
} 
setcookie('language', $_COOKIE['language']); 
0

मैं PHP के $ _SERVER '[' PHP_SELF '] का इस्तेमाल किया वर्तमान पृष्ठ ताज़ा करें और खाते में चयनित भाषा लेने के लिए।

नमूना कोड संलग्न है। फ़ाइल का नाम: language_switcher.php

<?php 

    error_reporting(E_ERROR); 

    $lang = "en"; 

    if(isset($_COOKIE["language"])) { 
     $lang = $_COOKIE["language"]; 
    } 

    if(isset($_POST["lang"])) { 
     $lang = $_POST["lang"]; 
     setcookie ('language', $lang, time() + 60*60*24*30, '/','localhost'); 
     $refresh = $_SERVER['PHP_SELF']; 
     header("Location: $refresh"); 
    } 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Test Page Language Toggle</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 

<body> 

    <?php 
     // Text definitions 
     $text = array(
     'en' => array(
      'selectlang' => 'Select Language', 
      'lingua' => 'Language: ', 
      'filename' => 'You are in this location: ' 
     ), 
     'fr' => array(
      'selectlang' => 'Séléctionner', 
      'lingua' => 'Langue: ', 
      'filename' => 'Vous lisez ce fichier: ' 
     ) 
    ); 

    ?> 

    <form action="language_switcher.php" method="post"> 
     <select name="lang"> 
      <option value="en"<?php if($_COOKIE["language"] == "en") { echo "selected"; } ?>>English</option> 
      <option value="fr"<?php if($_COOKIE["language"] == "fr") { echo " selected"; } ?>>Français</option> 
     </select> 
     <input type="submit" value="<?php echo $text[$lang][selectlang]; ?>"> 
    </form> 

    <p><?php echo $text[$lang][lingua]; if(isset($_COOKIE["language"])) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p> 

    <br> 
    <p><?php echo $text[$lang][filename] . $_SERVER['PHP_SELF']; ?></p> 

</body> 
</html> 
संबंधित मुद्दे