الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

( اقتراح ) بناء على موضوع التعريب فى قسم السى

بدأه ASDen في 27 يناير 2008 · 33 رد · 3,618 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

صراحة الفكرة مبنية الموضوع الخصص للترجمة فى قسم السى وهى تتلخص فى التالى :-

الفكرة :-موضوع الترجمة - فى رأيي الشخصى - لن يكون قويا الا اذا كان حاضرا محسوسا و الفكرة هى أن يتم فحص كل رد مكتوب بحيث يتم تحويل مصطلحات مذكورة فى قاموس متفق علية من أعضاء المنتدى (موضوع الترجمة مثلا )

و الناتج أن القارىء أمامة اللاثنان المصطلح العربى و الانجليزى و هنا يكون الربط حقيقى وذو تأثير على القارىء

و أحب أن أوضح أننى برمجيا لا أهذى فافكرة مطبقة فى مجالات أخرى و أنا لا أعرف ان كان هناك اضافة للIPB تصنع هذا و لكنى كتبت واحدة و هى تقوم بالمهمة بسهولة

مستقبل مأمول :- صراحة أرى الفريق العربى فى المستقبل يوفر Open API للترجمة خدمة للمنتديات المشابهة و تقوية للربط الحقيقى بين الكلمتان

هذا هو اقتراحى الذى حاولت ايجازة فما رأيكم دام فضلكم :rolleyes: :rolleyes:

#2

يمكن كلامى مش واضح على العموم نقول تانى

الفكرة أنا أول مرة شوفتها كانت فى منتديات PHP كانت تقوم بالتعديل على أى جملة من اللغة موجودة فى أى رد و تحولها الى لنك لشرح الدالة فى ال Manual

و كان موضوع مفيد ثم أثارنى موضوع التعريب و فكرت أن الكلام التراص فى قاموس لن يفيد و لكن التعديل بحيث تظهر الكلمات بجوار بعضها البعض أو كنوع من TipText فسيكون لة أثر قوى و فعال

و من هنا قمت بكتابة مايشبة اضافة للIPB لدعم هذا الموضوع و أحب أسمع ارءكم

برمجيا الموضوع مش قضية المهم فكريا اية الآراء و هل مستعدين لدعمة

#3
اقتباس
و من هنا قمت بكتابة مايشبة اضافة للIPB لدعم هذا الموضوع و أحب أسمع ارءكم

الفكرة جميلة طبعا , لكن كيف تعمل هذه الإضافة , لاأتكلم على البرمجة وإنما على شكل ظهورها للقرايء العادي , كيف سيكون شكلها ؟

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#4
اقتباس
الفكرة جميلة طبعا , لكن كيف تعمل هذه الإضافة , لاأتكلم على البرمجة وإنما على شكل ظهورها للقرايء العادي , كيف سيكون شكلها ؟

هنا هناك فكرتان :-

1. أن تظهر الكلمة العربى و بجوارها الانجليزى وحواليهم قوس

2. أن تكتب العربى و الانجليزى على هيئة لنك فارغ بغرض عرض الكلمة الانجليزى أو لنك يحوى شرح كامل للكلمة

3. كما فى اثنان مع تبديل العربى والانجليزى

طبعا هذا ليس كل شىء و أكيد عندكم مقترحات أفضل

#5

شكل بردة الموضوع لسة مش واضح أنا حادى هنا أمثلة عملية من القاموس الصغير هنا

نفترض أن الكاتب كتب التالى

اقتباس
هناك Object حدث لة Explicit Casting الى Object اخر و أيضا هناك Procedure يحوى مجموعة من ال Arguments

عند ارسال الرد يغرض كالتالى (قف بالموس على ما تحتة خط متقطع )

اقتباس
هناك Object حدث لة Explicit Casting الى Object اخر و أيضا هناك Procedure يحوى مجموعة من ال Arguments

أو

اقتباس
هناك كائن حدث لة تحويل صريح الى كائن اخر و أيضا هناك إجراء يحوى مجموعة من ال وسيط مرسل

ومن الممكن و ضع لنكات فيها شرح وافى للكلمة أيضا

و العكس بالعكس (أى وضع عربى و يحول انجليزى) (أو اتجاة ثابت على حسب اقتراحات الأعضاء)

أتمنى أن تزيد المشاركة و أتمنى ممن نقل الموضوع أن نسمع رأية لا أن يحدث الموضوع (سكيتى <_< )

#6

يا جماعة اية المشكلة ...... طب حتى حد يناقشنى بس مش ممكن التجاهل التام

#7
ASDen كتب:
أتمنى أن تزيد المشاركة و أتمنى ممن نقل الموضوع أن نسمع رأية لا أن يحدث الموضوع (سكيتى <_< )

أنا قمت بنقل الموضوع لأن هذا هو المكان الأنسب ولم أعلق حتى اتضحت لي الصورة.. هل هناك اعتراض ؟ 01201038702dh4.gif

هههههه

أما بخصوص الاقتراح فهو جميل جداً والأمر متروك بيد الإدارة الآن للتنفيذ حسب الأولويات :)

بارك الله بك عليه

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8
اقتباس
أنا قمت بنقل الموضوع لأن هذا هو المكان الأنسب ولم أعلق حتى اتضحت لي الصورة.. هل هناك اعتراض ؟

طبعا الموضوع كان هنا ثم أصبح هنااااااااك :tantrum: :tantrum:

بس صراحة عندما أعدت قراءة الموضوع وجدت انة غير مفهوم :blink: وكان لازم مثال عملى

اقتباس
أما بخصوص الاقتراح فهو جميل جداً والأمر متروك بيد الإدارة الآن للتنفيذ حسب الأولويات regular_smile.gif

بارك الله بك عليه

شكررررا على التشجيع

#9

الموضوع ناام بس على أى حتى تتضح الصورة و يكون الأمر مفتوح لأى من أراد وضعة فى منتدى IPB الشرح و الفكرة الأساسية فى التالى

قبل الشرح هناك طلب نقل الموضوع لقسم الPHP فبصيغتة الحالية سيكون أنسب هناك

---------------------------------------------------------------------------------------

أولا الجداول المستخدمة طبعا احنا حنستغل هيكل البيانات فى الIPB و حنضيف علية جدول صغير حنسمية ibf_Tran

الهيكل بتاعة بسيط و بدائى جدا


`Ar` varchar(30) NOT NULL,
`En` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `ibf_tran` (

وبعد كدة هنضيف الكود التالى للIndex.php وكل وظيفتة هى تحليل الردود و معاينتها بالقاموس مع محاولة عدم الاثقال على قاعدة البيانات

ضف الكود التالى بعد الجزئية التالية فى ملف الIndex.php


// REQUIRE AND RUN
//===========================================================================
//===========================================================================

الكود وهو هنا يضع ملاحظة acronym للكلمات الانجليزية بالغة العربية


$Max_Query_Len=3;
//check we have a post
if(isset($_POST['Post']))
{
$str=$_POST['Post'];
//find all words in post
preg_match_all("/\w+/",$str,$b);
//get unique words only (just an optimizer)
$b=array_values(array_unique($b[0]));
for($i=0;$i<count($b);$i+=$Max_Query_Len)
{
//build multi-worded query to decrease DB load
$Q="En = '$b[$i]' ";
$num=(count($b)>=$Max_Query_Len+$i)?$Max_Query_Len+$i:count($b);
for($j=$i;$j<$num;$j++)
$Q.="OR En = '$b[$j]' ";
//use IPB classes to access DB
$ipsclass->DB->build_query( array( 'select' => "*",
'from' => 'Tran',
'where' => $Q));
$ipsclass->DB->exec_query();
while( $r = $ipsclass->DB->fetch_row() )
{
//replace what u find with [acronym] bbcode
$reg="#(?<=^|\s|)".$r['En']."(?=\s|\$|)#i";
$rep='\[acronym='.$r['Ar']."]".$r['En'].'\[\/acronym]';
$str=preg_replace($reg,$rep,$str);
}
}
//put the result in the replies container
$_POST['Post']=$str;
}
//Important varaible in which the DB load depends

ملحوظة أخيرة : عند تصميم سكريبت اخر لملىء القاموس يجب أن تراعى فية عملية الEncoding

مثال بدائى لسكريبت ملىء القاموس


<form method="GET" action="Z.php">
Arabic<input type="text" name="a">

English<input type="text" name="e">
<input type="submit">
</form>
<?php
if(isset($_GET['a'])&&isset($_GET['e']))
{
$user='root';
$pass='';
$db='cdcol';
$Mylnk=mysql_connect('',$user,$pass);
mysql_select_db($db,$Mylnk);
$n=mysql_query("INSERT INTO `ibf_tran` VALUES ('".$_GET['a']."', '".$_GET['e']."')",$Mylnk);
echo mysql_error();
}
?>
<meta http-equiv="content-type" content="text/html; charset=Windows-1256" />

#10

ASDen هل صممت ال MOD بنفسك ؟ إن لا هل لديك خبرة في التعامل مع منتديات ipb بشكل عام .... ؟

عموما يمكن أن نجرب الموضوع في منتدى التجارب وإن نجحت الفكرة سنطبقها طبعا بكل سرور ,,, لكن لاأستطيع فعل شيء قبل يوم الجمعة القادم إن شاء الله , وإن نسيت الموضوع أرجو أن ترفعه من جديد لتذكيري , وجزاكم الله خيرا :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#11
اقتباس
ASDen هل صممت ال MOD بنفسك ؟

الحمد لله

اقتباس
هل لديك خبرة في التعامل مع منتديات ipb بشكل عام .... ؟

عندى خبرة و الحمد لله نتجت عن انى ماسك منتدى IPB خاص بالكلية بتاعتنا مع مجموعة من أصدقائى ومن هنا كان التعامل معاها

اقتباس
عموما يمكن أن نجرب الموضوع في منتدى التجارب

فى انتظار النتائج :rolleyes:

#12

هناك شىء أخير ناقص أو ملاحظة أخيرة :-

اسم الجدول وهو ibf_tran معتمد على البادئة التى تم اختيارها لجداول IPB عند فردها (بادئة الجداول ) ibf فى هذة الحالة

وبالمرة

UP

#13

ركبته أمس بالمناسبة وطبعا أعرف موضوع البادئة في إسم الجداول , لكن لم يعمل وكانت هناك مشكلة في الميل سيرفر شغلتني لبعض الوقت , عموما سأجربه بكثافة اليوم ويوم غد . والفكرة جميلة فعلا بإستخدام

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#14

تم التركيب يا ASDen لاحظ للكلمة acronym , لم أكتب جملة بالعربية مناسبة لها للتجارب , لكن ستظهر لك نفسة الكلمة acronym حيث هي في خانة العربي أيضا . :)

لكن لماذا لم تضع السكربت في المكان الخاص بإظهار الردود نفسها , حيث يقوم بعمل parse لأي رد موجود , لأن الحالي سيعمل فقط مع الردود من 2008 إلى المستقبل وستكون مشكلة إضافة الكلمات الجديدة التي ستضاف لاحقا لن تظهر أيضا ..

مارأيك في موضوع ال load الذي سيحدث ؟

--------

بالمناسبة يوجد أمرين إنتبه لهما لاحقا , إسم الجدول في create table لديك ibf_tran وفي الإستدعاء من كود ال Index.php سيكون Tran ال T حرف كبير , وسيعطي خطأ حيث أن الإسم حساس للأحرف ... يجب تغيير أحدهما ليصبح كالآخر .

الشيء الثاني لاحظ هذا السطر :

$rep='\[[acronym=acronym]acronym[/acronym]='.$r['Ar']."]".$r['En'].'\[\/[acronym=acronym]acronym[/acronym]]';

يجب أن يكون هكذا :

$rep='[[acronym=acronym]acronym[/acronym]='.$r['Ar']."]".$r['En'].'[/[acronym=acronym]acronym[/acronym]]';

.

عدلته فإشتغل بشكل جيد , بقي شيء واحد ,هل توجد طريقة لعمل popup box صغير أنيق ليظهر المعلومة !؟ بالإعتماد أيضا على ال BBCode بحيث نصمم BBCode يظهر بشكل أجمل من هذا أو يمكن أن نعدل على نفس ال acronym بحيث تغير لون الكلمة أو تصبح بخط مائل أو شيء آخر لينتبه لها الجميع أنها كلمة لها ترجمة .

وتشكر جزيلا وبارك الله فيك , وسيتم إضافة السكربت بإسمك في قائمة مطوري الفريق العربي للبرمجة :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#15

الحمد لله قمت بتطوير السكريبت وغيرت فى تأثيرة (كما هو مذكور فى الأسفل)

اعذرنى فى شىء فقط أنى حاليا بتكلم من الكلية و النت فاصل :( فى البيت فسأضعة أما عند رجوعة (يا رب :rolleyes: ) أو يوم الأحد القادم (من الكلية) أيهما أقرب

اقتباس
لكن لماذا لم تضع السكربت في المكان الخاص بإظهار الردود نفسها , حيث يقوم بعمل parse لأي رد موجود , لأن الحالي سيعمل فقط مع الردود من 2008 إلى المستقبل وستكون مشكلة إضافة الكلمات الجديدة التي ستضاف لاحقا لن تظهر أيضا ..

هذا متضمن فى التحديث بحيث أن الاضافة ستشمل منطقة العرض و بالتالى سيظهر تأثيرها فى المنتدى بأكملة

وهذة نقطة جدلية أيضا فعندما يكون السكريت فى منطقة العرض فهو سيوفر فى المساحة (لن يشغل مساحة اضافية + أى اضافة للقاموس ستظهر مباشرة)

أما فى حالة تخزينة (السكريبت القديم) فهو سيشغل مساحة اضافة و التطبيق لن يكون بأثر رجعى (الاضافات الجديدة فى القاموس لن تظهر )

أين التكلفة اذا :cash: ؟ طبعا فى الحمل على قاعدة البيانات سيكون أكبر فى الحالة الثانية (التحديث) ولكنى أعتقد انة حمل بسيط و خاصة مع زيادة عدد الكلمات فى ال Query ( التجربة هى الفيصل فى كل حال )

اقتباس
مارأيك في موضوع ال load الذي سيحدث ؟

هذا موضوع نقاشى المفترض أن الحمل على قاعدة البيانات سيكون صغير بالنسبة للحمل الأساسى للمنتدى

ولكن التجربة هى الفيصل

اقتباس
بالإعتماد أيضا على ال BBCode بحيث نصمم BBCode يظهر بشكل أجمل من هذا أو يمكن أن نعدل على نفس ال [acronym=acronym]acronym[/acronym] بحيث تغير لون الكلمة أو تصبح بخط مائل أو شيء آخر لينتبه لها الجميع أنها كلمة لها ترجمة .

هذا أيضا متاح فى التحديث فالآن يتم الوصول مباشرة للHtml بمعنى اخر يمكنك أن تفعل أى شىء من حيث الشكل B)

#16

بسم الله الرحمن الرحيم

قمت بتحرير ردك السابق و قمت بالتبديل بين المحرر العادي و المحرر المطور فقط بدون أي تغيير في الجمل وكل تبديل بين الطورين يتم كتابة الأمر تلقائيا حتى أصبح بذلك الشكل .

[acronym=acronym]acronym[/acronym]

===

صورة
صورة

حسابي في الفيس بوك
http://goo.gl/XIzwL

حسابي في تويتر
http://goo.gl/6p4e3

 

 
 
#17

نعم يافيصل تحرير المشاركات تقوم بالعملية أيضا وتشغل عليها السكربت من جديد ... تحرير المشاركات والمشاركات الجديدة حاليا ..

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#18

ASDen تمام , سأنتظر سكربتك المطور , وإن كانت هناك مشكلة في اللود يجب أن نقوم بعمل rebuild لجميع ال Posts في المنتدى بحيث نحشر التعديل ضمن عملية البناء وتكون العملية دورية , لكنها مرهقة جدا لقاعدة البيانات نظرا لأن جدول ال posts فقط حجمه حولي جيجابايت حاليا .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#19
اقتباس
وإن كانت هناك مشكلة في اللود يجب أن نقوم بعمل rebuild لجميع ال Posts في المنتدى بحيث نحشر التعديل ضمن عملية البناء وتكون العملية دورية

أرجو الا يكون الامر كذلك بس منطقيا لا أعتقد أن اللود سيمثل تلك النسبة التى تصل بنا الى هذا الحد

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

أولا سيتم مسح السكريبت القديم من Index.php

ثانيا اذهب الى upload\sources\action_public\topics.php فى مجلد الIPB

قم باضافة الدالة التالية تحت جزئية

اقتباس
/*-------------------------------------------------------------------------*/

// Parse post

/*-------------------------------------------------------------------------*/

الدالة هى

[

function Translate(&$str)
	{
		$Max_Query_Len=3;
		preg_match_all("/\w+/",$str,$b);
		$b=array_values(array_unique($b[0]));
		for($i=0;$i<count($b);$i+=$Max_Query_Len) {
			$Q="En = '$b[$i]' ";
			$num=(count($b)>=$Max_Query_Len+$i)?$Max_Query_Len+$i:count($b);
			for($j=$i;$j<$num;$j++)
			$Q.="OR En = '$b[$j]' ";
			//	echo $Q.'<br>';
			$this->ipsclass->DB->simple_construct( array( 'select' => "*",
			'from'   => 'Tran',
			'where'  => $Q));

			$this->ipsclass->DB->simple_exec();
			while( $r = $this->ipsclass->DB->fetch_row() )
			{
				$reg="#(?<=^|\s|<br>|<br />)".$r['En']."(?=\s|$|<br>|<br />)#i";
				//$rep='\[acronym='.$r['Ar']."]".$r['En'].'\[\/acronym]';
				$rep="<acronym title='".$r['Ar']."'>".$r['En'].'</acronym>';
				$str=preg_replace($reg,$rep,$str);
			}
		}
	}

الان تبقى جزئية استدعاء الدالة وهنا الموضوع النقاشى أمامك واحد من خياران :-

1. أن تضع استدعاء الدالة بعد اكتمال تكوين الصفحة وقبل الرسم مباشرة ومميزات هذا الحل أنة خفيف وفى الحقيقة عملى جدا لتفادى اللود

أما العيوب فهى أنة سيتعرض لجزئيات الHtml و الJS الموجودة فى الصفحة وربما تحدث مشكلة عند تطابق أسماء الكلمات مع الKeywords أو Tags ربما تحدث مشاكل (أنا اقول ربما لأنى جربت و لم تحدث أى مشكلة و أنصح بالتجريب)

لتطبيق هذة الطريقة اذهب الى الدالة auto_run() و أذهب الى اخر جزء فيها الى الجزء

//-----------------------------------------
			  // Topic multi-moderation - yay!
			  //-----------------------------------------

و قم باضافة سطر استدعاء الدالة ليبدو الجزء الأخير منها كالتالى (لاحظ أننا داخل Class ولهذا الاستدعاء يبدو $this->Translate($this->output);

//-----------------------------------------
			  // Topic multi-moderation - yay!
			  //-----------------------------------------

			  $this->output = str_replace( "<!--IBF.MULTIMOD-->", $this->multi_moderation(), $this->output );
			  $this->Translate($this->output);
			  // Pass it to our print routine
			  $this->ipsclass->print->add_output( $this->output );
			  $this->ipsclass->print->do_output( array( 'TITLE'	=> $this->topic['title'] . ' - ' . $this->ipsclass->vars['board_name'],
			  'JS'	   => $this->ipsclass->compiled_templates['skin_global']->get_rte_css(),
			  'NAV'	  => $this->nav,
			  )	  );

2. الحل الآخر هو أن يتم تنقية كل Post فى الصفحة قبل عرضها على حدى و مشاكل هذا الحل أن عدد المعاملات مع قاعدة البيانات أكبر ولكن المميزات أنك لن تتعامل الا مع الPost فقط

فى هذة الحالة اذهب الى الدالة parse_row و قم باضافة سطر الاستدعاء الى أولها لتبدو بدايتها كالتالى

function parse_row( $row = array() )
		  {
			  //-----------------------------------------
			  // Translate
			  //-----------------------------------------
			  $this->Translate($row['post']);

هناك شىء أخير ومهم بالنسبة لطلبك أخ هيثم فى موضوع شكل الكلمة المترجمة كل ما عليك هو الذهاب الى السطر التالى فى الدالة Translate (المضافة)

$rep="<acronym title='".$r['Ar']."'>".$r['En'].'</acronym>';

فى هذا السطر وصول مباشر للHtml أنا هنا حاطط موضوع الacronymبامكانك ان اردت أن تضع اى شىء (خطوط \ ألوان \ لنكات ) على حسب رغبتك

فى انتظار النتائج و شكرا على التشجيع

تم تعديل هذه المشاركة بواسطة ASDen في 27 فبراير 2008 في 23:51

#20

أخ هيثم واضح ان حصل مشكلة فى السكريبت القديم (هناك تغييرات حصلت فية )أنا سأضع المشاركة فى المرفقات

Document.rar

#21

ASDen متأكد أن السطر هذا هكذا :؟

$rep="<[acronym=acronym]acronym[/acronym] title='".$r['Ar']."'>".$r['En'].'</[acronym=acronym]acronym[/acronym]>';

لأن مثلا في جملة Congratulations بإستخدام الطريقة 1 تصبح هكذا :

LEFT TO RIGHT

<acronym title='?????'>Congratulations Started Guide and Administrator Documentation

دعك من علامات الإستفهام فهي من الترميز لكن سطر ال replace فيه مشكلة ! هنا نتعامل على مستوى HTML أليس كذلك ؟ يوجد شيء ناقص ..

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#22
اقتباس
ASDen متأكد أن السطر هذا هكذا :؟

لا بالطبع المفروض هكذا

$rep="<acronym title='".$r['Ar']."'>".$r['En'].'</acronym>';

وهنا بالظبط تضع ما تشاء على مستوى الHtml

أنا عدلت فى الPost الأصلية و الأمور اتعدلت

تم تعديل هذه المشاركة بواسطة ASDen في 27 فبراير 2008 في 23:52

#23

تمام , تم التعديل ويعمل حاليا بشكل ممتاز ..

بقي أن نقوم ببعض التعديلات على المظهر , قبل أن نعلم الأعضاء بالموضوع ..

بارك الله فيك يا ASDen :)

----------

تجربة acronym

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#24

تم نقل الموضوع لقسم php بناء على رغبة الأخ ASDen ..

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#25
اقتباس
تم نقل الموضوع لقسم php بناء على رغبة الأخ ASDen

ألف شكر ومرة أخرى شكرا على التفاعل الممتاز من الادارة :thumb_up:

وعقبال بناء القاموس :rolleyes:

تم تعديل هذه المشاركة بواسطة ASDen في 28 فبراير 2008 في 17:47

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…