كيفية الحفاظ على اللغة المحددة مسبقًا (استخدمت صفائف PHP و؟ lang =) بعد النقر فوق رابط؟
سؤال
لدي الرمز التالي:
<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);