إنشاء سكربت متعدد اللغات PHP (شرح تفصيلي)
جهد رائع لدي بعض الملاحظات
بعد العناصر المتغير الاب مثل $GLOBALS['langConfig'] غير موجود لذلك إن اظهرت جميع الاخطاء ستجد خطاء لذلك يجب تعريفه اولًا
$GLOBALS['langConfig'] = [];
لماذا تضع رقم لمعرف كل منها الرقم سيعرف تلقائي بدلًا من
$GLOBALS['langConfig']['enabled_languages'] => array(
0 => 'ar',
1 => 'en',
2 => 'de'
);
اكتب
$GLOBALS['langConfig']['enabled_languages'] => array(
'ar',
'en',
'de'
);
يجب الاول التأكد ان المكتبة تخصك وهي موجودة أم لا قبل إستدعائها
spl_autoload_register(function($class) {
require_once CLS . SP . $class . '.php';
});
افترض انك تستخدم مكتبة خارجية مع هذا حين إستدعاء كلاسس غير موجود وكانت مكتبتك هي الاولى ستحاول إستدعاءه ولانك تستخدم require_once سيتوقف عمل الاسكربت إن لم يجده يجب الاول التاكد من أن الملف موجود أم لا
يوجد بعض الملاحظات الاخرى :)
عد العناصر المتغير الاب مثل $GLOBALS['langConfig'] غير موجود لذلك إن اظهرت جميع الاخطاء ستجد خطاء لذلك يجب تعريفه اولًا
نعم صحيح , شكرا للتنبيه فهي كانت هكذا :
$GLOBALS['langConfig'] = array(
'database' => array(
'host' => 'localhost',
.....
),
);
ولكن للتوضيح وتقسيم الكود قمت بتغييرها ويبدو ان نسيت هذا ساقوم بالتعديل
لماذا تضع رقم لمعرف كل منها الرقم سيعرف تلقائي بدلًا من
هي للتوضيح فقط لا غير.
يجب الاول التأكد ان المكتبة تخصك وهي موجودة أم لا قبل إستدعائها
الموضوع مقسم الى عدة اجزاء , في الجزء الثالث ساتكلم عن هذه الامور صديقي وعن الحماية كذلك ^_^ .
يوجد بعض الملاحظات الاخرى :)
افدني بها
أعلم أن هذا الكود للشرح فقط لكن يمكنك تنقيحه حتى يتعلم من يراه الكتابة بشكل صحيح يوجد العديد من الدوال في الكائن link ليس لها فائدة فعليا مثل VALIDURL يمكن إختصاره في هذا السطر
(FILTER_VAR($URL, FILTER_VALIDATE_URL)) ? true : false;
الاولى يكون العنصر الذي تستخدمه أكثر, هنا على الاغلب لن يُستخدم $link كثيرًا لذا يكون $link بعد $lang
PUBLIC FUNCTION CREATE($LINK = '', $LANG = '') {
بصراحة الكائن link يمكن إختصاره في
function urlWithLang($lang,$url="")
{
if(empty($url)){
$url = ($_SERVER["HTTPS"] == "on") ? "
https:/ " : " http:/ "; $url .= ($_SERVER["SERVER_PORT"] != "80") ? $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"] : $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } $url .= (strpos($url,"?") === false) ? "?lang=$lang" : "&lang=$lang"; return $url; } echo urlWithLang("ar");
العمل الذي تقوم به رأئع وهذه فقط بعض الملاحظات شكرًا لك.
شكرا لك على هذه الملاحظات , ولكن هذا الكود سيواجه بعض المشاكل ( التي واجهتني ) .
مثل :
لو كان الرابط يحتوي على باراميتر اللغة من الاصل
بعد المرور على هذه الدالة سيصبح
http://example.com?lang=ar &lang=en
ايضا لو فرضنا ان الرابط يحتوي بالنهاية على علامة استفهام
بعد المرور على الدالة سيصبح
&lang=ar
حاولت ان اضع جميع الاحتمالات والعمل عليها ^_^
الخطأ الاول لن يسبب مشكلة لان الاخير هو من يعرف
الثاني نعم خطأ سيكون حله بسيط هكذا
function urlWithLang($lang,$url="")
{
if(empty($url)){
$url = ($_SERVER["HTTPS"] == "on") ? "
https:/ " : " http:/ "; $url .= ($_SERVER["SERVER_PORT"] != "80") ? $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"] : $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } $url .= (strpos($url,"?") === false) ? "?lang=$lang" : (!empty($_GET) ? "&lang=$lang" : "lang=$lang"); return $url; } echo urlWithLang("ar");
التعليقات