كيفية الحفاظ على اللغة المحددة مسبقًا (استخدمت صفائف PHP و؟ lang =) بعد النقر فوق رابط؟

StackOverflow https://stackoverflow.com/questions/2301850

  •  21-09-2019
  •  | 
  •  

سؤال

لدي الرمز التالي:

  <html>
        <head>
            <title><?php echo $GLOBALS['L']['title']; ?></title>
        </head>
        <body>
            <ul id="language-selection">
                <li><a href="index.php?lang=english">English</a></li>
                <li><a href="index.php?lang=french">French</a></li>
            </ul>
            <h1><?php echo $GLOBALS['L']['h1']; ?></h1>
            <p><?php echo $GLOBALS['L']['p1']; ?></p>
            <ul id="language-selection">
                <li><a href="about.php">About Page</a></li>
                <li><a href="contact.php">Contact Page</a></li>
            </ul>
        </body>
    </html>

set_locale.php:

<?php
/*
 * File: set_locale.php
 */

// Get the language from the query string, or set a default.
($language = @$_GET['lang']) or $language = 'english';

// Set up a list of possible values, and make sure the
// selected language is valid.
$allowed_locales = array('english', 'french');
if(!in_array($language, $allowed_locales)) 
    $language = 'english'; // Set default if it is invalid.


// Inlclude the selected language
include "locale/$language.php";

// Make it global, so it is accessible everywhere in the code.
$GLOBALS['L'] = $locale;
?>

إنه يعمل بشكل جيد ، ولكن إذا قمت بالنقر فوق about.php و contact.php حلقة الوصل. تعود الصفحة إلى اللغة الافتراضية: اللغة الإنجليزية. ماذا يمكنني أن أفعل ذلك عندما أنقر about.php أو contact.php ينتهي مثل هذا:

about.php?lang=english
contact.php?lang=french

على التوالي ، وبعبارة أخرى أريد أن يتذكر عنوان URL ?lang= النهاية. ما هي أفضل طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

سيتعين عليك إلحاقه بكل رابط صادر:

 <li><a href="about.php<?php echo "?lang=".$GLOBALS['L']; ?>">About Page</a></li>

هناك طريقة لطيفة للتعامل مع مواقع متعددة اللغة بشكل عام ، إذا كان الخادم الخاص بك يدعمه ، mod_rewrite لإعادة كتابة عناوين URL "الظاهرية" مثل

www.example.com/en/about.php

ورسم خريطة لهم داخليًا

www.example.com/about.php?lang=en

هناك دليل المبتدئين على ذلك هنا والوثائق الرسمية هنا.

أنا لست معلمًا mod_rewrite لكن هذا يعمل بالنسبة لي:

 RewriteEngine on
 Options +FollowSymlinks

 RewriteCond %{REQUEST_URI} ^/([a-z][a-z])(/.*)?$      
 RewriteRule (.*) %2?lang=%1&%{QUERY_STRING}

خرائط

  • www.domain.com/en/about.php ل /about.php?lang=en

  • www.domain.com/fr/about.php ل /about.php?lang=fr

  • www.domain.com/es/ ل /?lang=es = عادة الفهرس

يقوم بتخطيط أي حدوث من أحرف صغيرة www.example.com/xy, ، لذلك لا ينبغي أن يكون لديك أي أدلة مع رسالتين على مستوى الجذر الخاص بك للعمل مع هذا.

نصائح أخرى

سترغب في معرفة تخزين المعلومات في الجلسات.

http://learnitscreencasts.net/2009/07/18/beginners/beginners-guide-php-sessions/

قد ترغب في النظر في جلسات وتخزين الخيارات المستمرة هناك. يتمتع بميزة السماح للأشخاص بنسخ الروابط إلى الآخرين دون إجبار إعداداتهم عليهم ، إذا كنت ترغب في ذلك.

يمكنك استخدام output_add_rewrite_var لإضافة هذه الحجة إلى عناوين URL. فقط اتصل بما يلي قبل إخراج محتوياتك:

output_add_rewrite_var('lang', $language);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top