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

كلاس من إنتتاجي لدعم اللغة العربية لبرمجة جافا عربي واحتراف الجافا العربية

مغلق
بدأه double helix في 24 يونيو 2007 · 18 رد · 2,135 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أخوتي الآعزاء أقدم بين يديكم كلاس أربيك وهو كلاس من تصميمي

والهدف منه هو تمكين الكتابة باللغة العربية بكل يسر وسهولة

وقد بذلت جهداً كبيراً لانجاز هذا العمل الذي أتمنى أن يقدم خدمة كبيرة

لمبرمجي الجافا العرب وكل رجائي أن ينال هذا الموضوع حقه من النقد

وأن أتعرف على وجهات نظر أخواني المطلعين بهذه اللغة فأنا لا أزال في

بداية الطريق وفي أشد الحاجة لمثل هذه التوجيهات والانتقادات

فكره عامة عن كلاس أرابيك

الهدف العام : تحول الكتابة من الكيبوبور للغة العربية

طريقة عمل الكلاس : عند استدعاء هذا الكلاس وإضافةString سترنج بالحروف الاجنبية كما في هذا المثال

Arabic myName =new Arabic("lpl] hgolds");

يقوم أولا بتحويل الكلمات المدخلة إلى مصفوفة من الحروف الاجنبية char array

ثم يقوم بقراءة هذه الحروف بشكل تسلسلي و تحويلها الى مايقابلها باللغة العربية وفي النهاية يعيد تجميعها في سترنج ويخرجها باللغة العربية حيث يمكن استخراج الكلمة باللغة العربية كما بالمثال التالي

System.out.println(myName);

وهذا المثال كامل ويمكنك تجربته بعد وضع الكلاس في الكلاس ليبراري او بنفس مجلد الملف المنشأ

public class example

{public static void main( String args[])

{Arabic myName =new Arabic("lpl] hgolds");

System.out.println(myName);}}

هذا المثال كاملا موجود بالمرفقات إضافة الى أرابيك كلاس

أمل الا بتخلو علي بأرائكم واقتراحاتكم

Arabic.zip

تم تعديل هذه المشاركة بواسطة double helix في 24 يونيو 2007 في 10:25

#2

أهلا اخي ،،

لم اطلع على الكلاس ،، ولكن برنامج كاتب يعمل نفس الفكرة ، وقد تم مناقشته في هذا المنتدى منذ فترة

http://omlx.omanana.net/index.php?option=c...k=view&id=3

تحياتي

#3

الف شكر أخي OMLX على الرد والتفاعل مع الموضوع

أخي هذا الكلاس هو كلاس عام مستقل وليس محدد لبرنامج معين

يمكن أن يستخدم لكل البرامج وفكرته الآساسية تعتمد على

تعاقد مع اي برنامج تصممه تعطيه الكلمات الاجنبية ويعطيك اياها بالعربي

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

حروف ومن ثم المرور عليها على التوالي للتعرف على الحروف المدخلة وقراءة القيمة المقابلة لها باللغة العربية

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

#4

السلام،

أخي الكريم هل طريقك تعتمد Unicode لعملية التحويل؟

وبارك الله فيك أخي الكريم.

تم تعديل هذه المشاركة بواسطة Feras Nasser في 24 يونيو 2007 في 12:42

سبحان الله وبحمده عدد خلقه ورضا نفسه وزنة عرشه ومداد كلماته

#5
اقتباس
أهلا اخي ،،

لم اطلع على الكلاس ،، ولكن برنامج كاتب يعمل نفس الفكرة ، وقد تم مناقشته في هذا المنتدى منذ فترة

http://omlx.omanana.net/index.php?option=c...k=view&id=3

تحياتي

ما هو الهدف من هذه المشاركة !..

___________________________

البرنامج مفيد ولكن لدي تحفظ على الاسلوب في كتابة الكود ...

وشكرا

#6

عمل جيد و مفيد

لكن

اقتباس
البرنامج مفيد ولكن لدي تحفظ على الاسلوب في كتابة الكود ...

لانك تستخدم نفس الكود اكثر من موضع مثلا

اقتباس
أخي الكريم هل طريقك تعتمد Unicode لعملية التحويل؟

نعم

بالاضافة الى اني ضد كتابة الارقام الهندية

عموما جهد ممتاز تشكر عليه

منقطع من حين لاخر

#7

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

http://www.fileformat.info/info/unicode/bl...abic/images.htm

#8

ألف شكر أخي أبو الفؤاد على هذه الاضافة والتوجيه القيم فعلا

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

للكلاسات العامة وأن يكون عاماً ومتيناً ويمكن أستخدامه لشتى الاحتياجات

وفي شتى المجالات فمثلاً انا في بارمجي المعتمده على هذا الكلاس لا أستخدم

الديفلت كونستركتر نهائياً ولا الميوتيتر ولا الإكول ميثود ولكنها موجوده لانه

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

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

أتمنى لو أمكن أن توجهني لطريقة لتلافي ذلك فهذا يساهم بشكل لتطوير هذا الكلاس

أشكرك أخي أبو الفؤاد مرة أخرى على هذه الاضافة القيمة

#9

مشكورين يا شباب على المجهود الأكثر من ممتاز،

الأخوة الكرام (ابو الفؤاد و double helix)

1-لدي استفسار أخر، هل يوجد Method للحصول على النتيجة على شكل Bytes بدل String؟

double helix :huh: هل تكتب العربي كذا -----> "lpl] hgolds"، اذا كان نعم، انسى السؤال الي جاي شوف الأخير

2-وما هي التعديلات اللازمة على الـــ Stream (مثل out) لتجعل الرموز تظهر بالشكل الصحيح عند العرض، كما هو الحال مع Console؟

,3-آخر استفسار عن المدخلات والمخرجات، عند الكتابة في شاشية السورس بالعربي وتمرر للــ Method ما ذا يكون الــ Encoding، يعني من أي Encoding إلى أي Encoding يتحول؟

وألف شكر ياشباب

فراس

تم تعديل هذه المشاركة بواسطة Feras Nasser في 24 يونيو 2007 في 16:26

سبحان الله وبحمده عدد خلقه ورضا نفسه وزنة عرشه ومداد كلماته

#10

بعد اذنك اخي دبل هيلكس قمت ببعض التعديل على الكود

/**************************************************************************
 *Arabic is a Class designed primarily to enable writing in   			  * 
 *Arabic within java													  *
 **************************************************************************
 *	   -How to use Arabic ?												  *
 *		here is an example of how to use it								  *	
 *		Arabic myName =new Arabic("lpl] hgolds");						  *	
 *		System.out.println(myName);										  *	
 *																		  *
 *	   Arabic is copyrighted to Mohammad Al Khamees						  *	
 *	   @version 1.00 2007/6/23											  *
 *	   mail: mohdk60@gawab.com											  *
 *	   Arabic is an open source free	software							*	
 *	   it can be used redistributed and/or modified freely with   		  *
 *	   acknowledging others contributions								  *	
 *																		  *	
 *	   This	program	is designed and distributed as an effort to  support  *
 *	   Arabic language in java programming making designed programs 	  *
 *	   more attractive, more friendly and popular. 							*	
 *	   																		*	
 *		مصمم البرنامج محمد الخميس										  *	
 **************************************************************************/
package classes;

import java.util.Map;
import java.util.HashMap;

public class Arabic{
	private static Map<Character, String> map=load();
	private static Map<Character, String> load(){	
		Map<Character, String> map = new HashMap<Character, String>();
		map.put('z', "\u0626");
		map.put('Z', "~");
		map.put('x', "\u0621");
		map.put('X', "\u0652");
		map.put('c', "\u0624");
		map.put('C', "}");
		map.put('v', "\u0631");
		map.put('V', "{");
		map.put('b', "\uFEFB");
		map.put('B', "\uFEF5");
		map.put('n', "\u0649");
		map.put('N', "\u0622");
		map.put('m', "\u0629");
		map.put('M', "\'");
		map.put(',', "\u0648");
		map.put('<', ",");
		map.put('.', "\u0632");
		map.put('>', ".");
		map.put('/', "\u0638");
		map.put('?', "\u061F");
		map.put('a', "\u0634");
		map.put('A', "\u0650");
		map.put('s', "\u0633");
		map.put('S', "\u064D");
		map.put('d', "\u064A");
		map.put('D', "[");
		map.put('f', "\u0628");
		map.put('F', "]");
		map.put('g', "\u0644");
		map.put('G', "\uFEF7");
		map.put('h', "\u0627");
		map.put('H', "\u0623");
		map.put('j', "\u062A");
		map.put('J', "\u0640");
		map.put('k', "\u0646");
		map.put('K', "\u060C");
		map.put('l', "\u0645");
		map.put('L', "/");
		map.put(';', "\u0643");
		map.put(':', ":");
		map.put('\'', "\u0637");
		map.put('q', "\u0636");
		map.put('Q', "\u064E");
		map.put('w', "\u0635");
		map.put('W', "\u064B");
		map.put('e', "\u062B");
		map.put('E', "\u064F");
		map.put('r', "\u0642");
		map.put('R', "\u064C");
		map.put('t', "\u0641");
		map.put('T', "\uFEF9");
		map.put('y', "\u063A");
		map.put('Y', "\u0625");
		map.put('u', "\u0639");
		map.put('U', "`");
		map.put('i', "\u0647");
		map.put('I', "\u00F7");
		map.put('o', "\u062E");
		map.put('O', "\u00D7");
		map.put('p', "\u062D");
		map.put('P', "\u061B");
		map.put('[', "\u062C");
		map.put('{', "<");
		map.put(']', "\u062F");
		map.put('}', ">");
		map.put('\\', "\\");
		map.put('|', "|");
		map.put('`', "\u0630");
		map.put('~', "\u0651");
		map.put('1', "\u0661");
		map.put('2', "\u0662");
		map.put('3', "\u0663");
		map.put('4', "\u0664");
		map.put('5', "\u0665");
		map.put('6', "\u0666");
		map.put('7', "\u0667");
		map.put('8', "\u0668");
		map.put('9', "\u0669");
		map.put('0', "\u0660");
		return map;
	}
	public static String getValue(char key){
		String keyStr = String.valueOf(key);
		if(keyStr==null)return null;
		String value=map.get(key);
		return (value==null)?keyStr:value;
	}

 	public static String setLetters(String inChangeLetters){
 		StringBuffer sb=new StringBuffer();
 		for(int i=0; i<inChangeLetters.length(); i++){
 			sb.append( getValue(inChangeLetters.charAt(i)) );
 		}
 		return sb.toString();
 	}
}

وهذا الكود للتجربة

package classes;

class Test{
	public static void main(String...args){
		javax.swing.JOptionPane.showMessageDialog(null, Arabic.setLetters("fsl hggi hgvplk hgvpdl "));
		javax.swing.JOptionPane.showMessageDialog(null, Arabic.setLetters("هذي حروف مدخله بالعربي"));
	}
}
#11

ألف شكر أخي فراس ناصر على هذا التفاعل الرائع والمشاركات القيمة

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

فيما لا أتمكن من معرفته فأنا ببداية الطريق

بالنسبة لسؤالك الأول

1-لدي استفسار أخر، هل يوجد Method للحصول على النتيجة على شكل Bytes بدل String؟

الكلاس حاليا لا يحتوي على هذه الميثود ولكن فكرة ممتازه وهي تضيف قوة إضافية للكلاس وسوف أضيفها

إن شاء الله وهي سهلة جدا وتتم عن طريق اخراج مصفوفة الحروف char arrayبدل من إخراج السترنج

المجمع

2 هل تكتب العربي كذا -----> "lpl] hgolds"، اذا كان نعم، انسى السؤال الي جاي شوف الأخير

نعم أنا أكتبهم كذا (أنا اثناء الكتابة انظر للحروف العربية بدون النظر لما يظهر لانها هي الناتج النهائي )

وهذا هو الهدف من هالكلاس

2-وما هي التعديلات اللازمة على الـــ Stream (مثل out) لتجعل الرموز تظهر بالشكل الصحيح عند العرض، كما هو الحال مع Console؟

هذا السؤال أنا ما عرف الاجابه عليه حالياً لكن أوعدك أني بحاول قدر إستطاعتي ايجاد إجابة له

3-آخر استفسار عن المدخلات والمخرجات، عند الكتابة في شاشية السورس بالعربي وتمرر للــ Method ما ذا يكون الــ Encoding، يعني من أي Encoding إلى أي Encoding يتحول؟

المدخل هو سترنج مكتوب بهذه الطريقه "lpl] hgolds"

المخرج هو سترنج باللغة العربية كذا "محمد الخميس"

Arabic myName =new Arabic("أكتب ماتريده أن يظر باللغة العربية هنا")

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

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

public class example

{public static void main( String args[])

{Arabic myName =new Arabic("lpl] hgolds");

System.out.println(myName);}}

تحياتي لك أخوي فراس

#12

ممتاز اخ علي هذا الي كنت داخل اكتبه !

منقطع من حين لاخر

#13

أنا ممتن لك أخي علي على التعديل والتوجيه الى إستخدام الماب انترفيس ويبدو لي أنها

فعلا أقل إستهلاك للذاكرة من الكيس ولكن أتمنى أخي علي أن

1أعرف ولو بشكل مختصر ماذا يجري داخل البرنامج عند استخدامها

2 الا تلاحظ أخي على ان الكلاس المعدل ليس أوبجكت أورينتد قياسي

فلا يوجد ديفلت ولا كوبي كونستركترز ولا ميوتيتر ولا إيكول ميثود

3 حاولت استدعاء الكلاس المعدل بالطريقه القياسية كما في الكلاس الاساسي

Arabic myName =new Arabic

ولم يستجيب

4 عند استخدام المثال المرفق تمت قراءة السطر الأول وظهر بسم الله الرحمن الرحيم

أما السطر الثاني فأظهر حروف بلغة الألة

أشكرك أخي على وأخي أبو الفؤاد على هذه التوجيهات القيمة وأنتظر بفارق الصبر وجهة نظركما

#14

1

عندما تستخدم الكلاس Arabic فان اول مايقوم به هو حفظ المتغيرات الستاتك في الذاكره (اي سيحفظ المتغير map).

وبما ان هذا المتغير يساوي القيمه العائده من الطريقة load فسيظهر الكلاس لتنفيذ هذه الطريقة. (اي تحميل البيانات -الحروف وما يقابلها من utf-8 - في الذاكره)

getValue : للحصول على قيمه utf-8.

setLetters : الطريقة الرئيسية للتحويل .

2 / 3

الا ترى بأني سأحتاج الى تحويل النصوص الى الحروف العربية في أي كلاس و في اي وقت.

فليس من المعقول ان اعيد تحميل الحروف و ما يقابلها (من utf-8) في كل مره احتاج الى ذلك. (وهذا يحدث عند انشاء اوبجكت جديد، اذا كان الاوبجت قياسي كما ذكرت)

فلتفادي اعادة تحميل البيانات جعلت طريقة التحويل ساكنه ( static method ) ، كما يمكنني استخدامها في اي مكان من الشفره البرمجية.

Arabic.setLetters("...")

قد لا يكون اسم الطريقة مثالي و لكن الهدف في الفكره..

واذا اردت استخدام OOP باسلوب مميز يمكنك الاطلاع على شفره ابو مازن و الاستفادة منها ، لعمل مطابق لهذا الهدف. abo_mazen.rar

ولرؤية الشفره كاملة هنا و البرنامج هنا

4

قد يكون ظهور الحروف الغريبة بسبب التشفير الافتراضي في جهازك، على اي حال هذا ما حدث عندى.

و بالتوفيق

#15

السلام عليكم،

أشكر جميع الأخوان على الردود،

وبارك الله في جهودكم ان شالله،

طريقة جميع البرامج الواردة منكم ممتازة و عملت بأفضل الممارسات، ولكن هناك مشكلة واحد وهي طريقة التعامل مع إدخال النصوص. فأعذروني ولكن طريقة الكي بورد ليست مجده جدا إلا في حالات معينة. .قراءة موضوع منذ فترة كن كيفية تهيئة VM لبيئة عمل باللغة العربية، سأوافيكم لاحقا بالمصدر، لأنه حرام يا شباب يكون عندنا OS و VM قابلة لتعامل باللغه العربية ولا تستغل بالشكل المطلوب. والسبب الرئيسي لتخوفي هذا، وجود برامج كثيرة تدعم Unicode ولا يوجد بها (البرامج) دعم للعربي، ولكن ينقصها بعض الإعدادات وكم كود فتصبح برامج عربية أصيلة.

وبالنسبة لجواب الـــ Encoding، لا أعتقد أخي الكريم هذا هو الجواب. لأنها بشكل مبدئي Encoding En و Encoding Ar الموجود في برنامجك، وحسب ما أ'علم إذا لم تحدد نوع معين يتم أعتماد الـــ Encoding الديفولت.

سأوافيكم بزيد من النقاط التي أرغب مناقشتها مكم أخواني الكريم. والهدف تطوير طريق لجعل الــــ Java ينطق بالعربية.

فراس

تم تعديل هذه المشاركة بواسطة Feras Nasser في 25 يونيو 2007 في 10:17

سبحان الله وبحمده عدد خلقه ورضا نفسه وزنة عرشه ومداد كلماته

#16
ali7876 كتب:
ما هو الهدف من هذه المشاركة !..

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

لرؤية والاستفادة من المناقشة برنامج كاتب تجده هنا

/index.php?showtopic=69922

تحياتي

#17

اخ فراس للكتابة بالعربي جرب:

public class Test
{

	public static void main(String args[]){

		try{

		String s =new String ( " محمد".getBytes() , "CP1256");


		javax.swing.JOptionPane.showMessageDialog( null , s );
		}catch( java.io.UnsupportedEncodingException e){ e.printStackTrace( ); }
	}
}

منقطع من حين لاخر

#18

السلام عليكم

لقد قمت بتجربة كود الأخ أبو الفؤاد و لم يعطي نتيجة صحيحة

و أعتقد بسبب إختيار Encoding

لأني عند إستخدامي ل UTF-8 بدل من CP1256

عمل الكود بشكل سليم

فكرة الأخ الفاضل أبو الفؤاد أظنها حلا جيدا للمشكلة اللغة العربية

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#19

السلام،

كان عندي مشروع Coop مع أرامكو في صيف 2003، وكان عبارة عن برنامج SMS Server الأستفسار عبر الرسائل القصيرة لقسم المشتريات، واستخدمت Java + MySql، وتمكنت والحمدلله من جلب الرسائل والرد عليها باللغة العربية. وواجهتني مشكلة العربي ،حيث كان الجوال يرسل Encoding مختتلف عن الي يتعامل معه الجافا. فكانت العملية معتمدة على Encoding بالدرجة الأولى. ويوجد تشابه كبير بين ما هو مطروح في هذا الموضوع وما قمت به سابقا في المشروع، ولكن الفرق أن مصدر الكلامات مختلف (في المشروع المصدر الجوال أما في هذا الموضوع هو الكي بورد). ومن باب أولى تنفع نفس الطريقة لأن Windows يعدعم العربي أكثر من الجوال.

ولكن للأسف الكود مفقود للمشروع حيث لا أمتلك إلى Jar أما السوسر للأسف ضيعته مع تغيري للأجهزة والفرمته خلال السنوات الماضية. حيث كنت متمني مشاركنها معكم، وسأقوم بمحاوله عمل Decomplie للــ Jar عساه يشتغل أو أقوم ببناء Converter جديد ومشاركتها معكم.

فراس

تم تعديل هذه المشاركة بواسطة Feras Nasser في 25 يونيو 2007 في 13:15

سبحان الله وبحمده عدد خلقه ورضا نفسه وزنة عرشه ومداد كلماته

هذا الموضوع مغلق.

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