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

طريقة عمل موقع عربي/انجليزي وأي لغة أخري, موضوع نادر

بدأه rozester في 21 يوليو 2009 · 13 رد · 10,005 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

في البداية, لاحظت أن الكثير من المبرمجين الجدد يسألون عن كيفية عمل موقع يدعم العديد من اللغات على الرغم من بساطة الطريقة وسهولتها.

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

يعني لو كان الأمر طريقة عمل موقع يدعم اللغة الانجليزية والفرنسية والألمانية ووو , لما كانت مشكلة.

على العموم هذا الموضوع سيثير عدة تساؤلات:-

1- ماهي الطريقة لكي أجعل موقعي يدعم العديد من اللغات وبالأخص العربية ؟

2- كيف يمكن جعل الصفحات حينما تكون باللغة العربية تظهر من اليمين لليسار, وتعديلها مرة أخرى عند الرجوع إلى اللغة الانجليزية؟

3- كيف يمكن الحفاظ على التنسيق الخاص بالصفحات إذا كانت الصفحة مرة ستكون dir="rtl" ومرة dir="ltr" ؟

4- أين يمكن معالجة التنقل بين اللغات, هل داخل الماستر بيج أم داخل جميع الفورم ؟

5- كيف يمكن تغيير اللغة من أي صفحة وليس شرطا الرجوع للصفحة الرئيسية أو صفحة معينة لتغييرها ؟

6- كيف يمكن ضبط باقي الـ Component المستوردة من الخارج مثل Ajax ToolKit مع اللغة العربية مرة ومع باقي اللغات مرة أخرى ؟

7- كيف يمكن تغير لغة الرسائل التي تظهر للمستخدم مثل الرسائل التنبيهية, وما هي أفضل طريقة لعمل الترجمة ؟

تعالوا سويا لنر الموضوع خطوة بخطوة:-

1- صمم موقع جديد بالدوت نت (2005 أو 2008- VB أو C#) وصمم صفحة MasterPage وصفحة Default وصفحة أخري للتجريب WebForm1, سأرفق المشروع في النهاية لا تقلق.

2- ضع في كل صفحة داخل التاج الخاص بالـ @Page السطر التالي Culture="en-US" UICulture="en-US" ليكون على الشكل التالي:

<%@ Page Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true"

CodeBehind="AboutUs.aspx.cs" Inherits="MultiLanguageTest.AboutUs" Title="Untitled Page"

Culture="en-US" UICulture="en-US" %>

ولا تضع هذا التاج في الماستر بيج وإلا سيسبب خطأ.

3- بعد الانتهاء من تصميم صفحاتك, اذهب على كل صفحة ثم اجعل الصفحة في وضع Design ثم اذهب إلى قائمة Tools واختر Generate Local Resources كما في الصورةpost-75999-1248201189_thumb.png

4- ستجد ظهور مجلد جديد داخل مشروعك اسمه App_LocalResources وستجد بداخله ملف الريسورس, قم بنسخه والصقه مرة أخري داخل نفس المجلد وعدل الاسم ليكون بالشكل التالي:-

post-75999-1248201448_thumb.png

5- افتح الملف الذي عدلته باللغة العربية واكتب النصوص داخله بالعربي كما في الشكل التالي:

post-75999-1248201874_thumb.png

6- اذهب إلى صفحة الماستر بيج وعدل السطر الخاص بالـ Body ليكون على الشكل التالي:

<body id="MasterBody" runat="server" dir="ltr" style="padding: 0px; margin: 0px;">

هذا السطر مهم للغاية لكي نستطيع قلب الصفحة لتكون مرة من اليمين لليسار مع العربي ومرة العكس مع الإنجليزي

7- ضع زر لتغيير اللغة إلى العربي, وزر لتغيير اللغة إلى الإنجليزي

post-75999-1248202253_thumb.png

8- إذهب إلى الحدث الخاص ببدء الـ Session وضع الأتي

protected void Session_Start(object sender, EventArgs e)

{

Session["SelectedLanguage"] = "English";

}

هذه السيشن مهمة لكي نستطيع قلب الصفحة ديناميكيا

9- اذهب إلى الماستر بيج وضع هذه الأوامر داخل حدث PageLoad

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

if (Session["SelectedLanguage"].ToString() == "Arabic")

{

MasterBody.Attributes["dir"] = "rtl";

}

else

{

MasterBody.Attributes["dir"] = "ltr";

}

}

}

10- اذهب لجميع الشاشات ما عد الماستر بيج, وضع الأوامر التالية:-

using System.Threading;

using System.Globalization;

protected override void InitializeCulture()

{

if (Session["SelectedLanguage"].ToString() == "English")

{

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

}

else if (HttpContext.Current.Session["SelectedLanguage"].ToString() == "Arabic")

{

Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");

Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-SA");

}

}

11- كل ما سبق كان التحضير لهذه الخطوة, والأن حان دور تغيير اللغة فعلياً, اذهب إلى الازرار التي صنعتها لكي تغير اللغة وضع هذه الأكواد عند الضغط عليها

protected void btnEnglish_Click(object sender, EventArgs e)

{

Session["SelectedLanguage"] = "English";

Server.Transfer(Request.Url.PathAndQuery);

}

protected void btnArabic_Click(object sender, EventArgs e)

{

Session["SelectedLanguage"] = "Arabic";

Server.Transfer(Request.Url.PathAndQuery);

}

12- والآن تستطيع تجريب هذا البرنامج, البرنامج مرفق

أسأل الله العظيم أن يتقبل منا ومنكم وأن يجعل هذا العمل خالصاً لوجهه الكريم

جزاكم الله خيراً

MultiLanguageTest.rar

تم تعديل هذه المشاركة بواسطة rozester في 21 يوليو 2009 في 22:15

Oracle Certified Professional Java Programmer 6 (SCJP)

#2

شكرا لك على الشرح الواضح

ان شاالله اجربه بس انا عندي منيو في الماستر بيج هل ينفع اسوي لها ريسورس فايل؟؟

#3

شكرا" لك

موضوع مهم و أبحث عنه من زمن

#4

جزاك الله خيرا rozester

تم تعديل هذه المشاركة بواسطة deepfreeze في 22 يوليو 2009 في 00:04

أُحبُّ الصَّالِحِينَ وَلسْتُ مِنْهُمْ ××× لَعَلِّي أنْ أنَالَ بهمْ شَفَاعَهْ

وَأكْرَهُ مَنْ تِجَارَتُهُ المَعَاصِي ××× وَلَوْ كُنَّا سَواءً في البضَاعهْ

#5

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

موضوع شيق للغايه

ولكن انا لا افهم بعض الاكواد

مثل

Server.Transfer(Request.Url.PathAndQuery);

ارجو التوضيح

#6

مشكور اخي على الشرح انا جربته لكن يظهر لي خطأ

1 موقعي اساسا عربي هل ينفع اضع الريسورس فايل للغة الانجليزية يعني عكس طريقتك

والا لابد ان تكون الاساس الانجليزيه

2 فنكشن Session_Start

اين اضعها انا وضعتها في صفحة الlogin

#7

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

يمكنك بدل ان تكتب الكود في كل صفحة ان تعمل base class ترث من System.Web.UI.Page وتجعل صفحاتك ترث منها

using System.Globalization;

using System.Threading;

using System.Web.UI;

public class MyBase:Page

{

protected override void InitializeCulture()

{

if (Session["SelectedLanguage"].ToString() == "English")

{

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

}

else if (System.Web.HttpContext.Current.Session["SelectedLanguage"].ToString() == "Arabic")

{

Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");

Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-SA");

}

base.InitializeCulture();

}

}

مثال public partial class Default :MyBase

يمكنك استخدام Profile لتخزين اعدادات خيارات اللغة ,,, سيكون افضل للمستخدم ان عاد للموقع مرة أخرى

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

The World Must Be Crazy

#8

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

أشكر ك أخي rozester

فعلا أسلوب سهلا ومبسط لطرحك للموضوع

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

لكن أعتقد أنك وفقت بطرح الموضوع :clapping:

والدليل عدد مشاركات الأعضاء

بتوفيق

تم تعديل هذه المشاركة بواسطة Al-Mohana في 22 يوليو 2009 في 13:42

تعلم فليس المرء يولد عالماً------ وليس أخو علماً كمن هو جاهلا

العلم نور وجمال يقتبس--------------- صاحبه مكرم اين ما جلس

من فاته العلم ساعة تظعظع ونتكس----شتان شتان بين حمار وفرس

#9

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

جزاكم الله خيراً, وجعل هذا العمل في ميزان حسناتنا جميعاً,

بالنسبة لطلب الأخ Programmer85

لما تسوي ريسورس فايل للفورمة بتاعتك هو هيشوف إيه الكونترول اللي فيها وهيعملها ملف ريسورس

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

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

وبالنسبة لطلبك الثاني:

لو إن موقعك أصلا عربي وعايز تخليه إنجليزي مفيش مشكلة برضه هتعمل نفس الخطوات السابقة بس هتعكس الخطوة دي

<%@ Page Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true"

CodeBehind="AboutUs.aspx.cs" Inherits="MultiLanguageTest.AboutUs" Title="Untitled Page"

Culture="ar-SA" UICulture="ar-SA" %>

والحدث الخاص Session_Start يوضع داخل ملف Global.asax

أما بالنسبة لطلب الأخ Alarm

Server.Transfer(Request.Url.PathAndQuery);

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

لأن الـ URL عبارة عن جزئين, مثال

http://mySite/Accounts/GetAccount.aspx?ID=1

الجز الأول يسمي الهوست وهو = http://mySite/

أما الجزء الثاني يسمي Path وهو = Accounts/GetAccount.aspx?ID=1

ارجو أن تكون قد وضحت الصورة

الموضوع لا يزال في البداية وهناك تساؤلات أنا لم أجب عنها بعد لضيق الوقت

قريباً سأفصلها إن شاء الله

Oracle Certified Professional Java Programmer 6 (SCJP)

#10

السلام عليكم طبقت نفس طريقتك

يظهر خطأ وقت run time في If Session("SelectedLanguage").ToString() = "Arabic" Then

NullReference not set to an instance of an object

Object reference not set to an instance of an object.

وفي الماستر بيج if (Session["SelectedLanguage"].ToString() == "Arabic")

واحيانا يشتغل البرنامج لكن مايطبق الي عملته

ماادري ايش المشكلة

هل فيه شي زيادة ممكن اضيفه

#11

يعطيك العافية أخي الكريم

وفرت علينا جهد الـ StyleSheet

موفق إن شاء الله

#12

شكرا جزيلا لك الموضوع فادني كثير

زاد الله العلم ومن كل خير

اللهم ما اصبح /امسى بي من نعمة أو بأحد من خلقك فمنك وحدك لا شريك لك فلك الحمد ولك الشكر

#13

موضوع رائع

مبرمج مصرى أبحث عن فرصة للسفر - Windows & Web Application

موبايل :201061837609+ الإيميل : Mohamed_Tegara@Yahoo.Com

www.mfouad.somee.com

#14

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

موضوع شيق للغايه

 ,,,بس حابي أعرف إذا أنا مصمم الماستر بيج بي أكواد اتش تي ام ال كيف راح يحصل عملية التعريب باستخدام ال localization خصوصا انو هي بتشتغل فقط مع أكواد ال asp

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