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

دعم اللغات في ASP.Net

مغلق
بدأه toad في 1 سبتمبر 2004 · 8 رد · 1,301 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

كيف استطيع أن اجعل الصفحة تعمل باللغتين العربية والانكليزية دون أن انشأ الصفحة مرتين

مثال:

صفحة تحتوي

Label Text=User Name

Label Text=Password

TextBox id=userTxt

TextBox id=passTxt

Button id=login Text=Login

أريد ان تعمل الصفحة باللغتين العربية والانكيزية دون أن أنشأ صفحتين

أنا اعمل التطبيق من خلال ASP.Net

وما من كاتب إلا سيبلى ويبقي الدهر ما كتبت يداه

فلا تكتب بكفك غير شيء يسرك في القيامة أن تراه

#2

حقيقه لا اعلم بوجود مثل هذا الذلى تتحدث عنه بداخل ال asp.net و لكن سابحث

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#3

ممكن ، بعمل متغير يمرر للصفحة ثنائية اللغة التي تريد عملها ، هذا المتغير يحدد اللغة ،وبناء على قيمته يتم إعداد النص الذي سيعرض على الtexts و الlabels من داخل الكود.

فكر بطريقة أخرى

#4

لا اعتقد انه يمكن عمل ذلك فى صفحة واحدة .. انا جربت كتير وبلا فائدة ..

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

walcom ممكن تشرح بشكل مفصل او بمثال ..

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

#5

وليد ارجو مزيداً من التوضيح انا قرات عن تعديل بعض سطور ال xml فى web.config و إن لم اكن واثقاً

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#6

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

أقوم الأن بالشغل بعمل موقع يحتاج التعامل بأكثر من لغة

ولذلك جلست أفكر في عمل هذا الغرض من خلال صفحة واحدة لكل اللغات وبشكل تقني لا يزعجني عند إجراء الديبج debugging والأختبار Testing

والحمد لله توصلت للتالي : ( ولعل ما توصلت له ينتفع به الأخرين )

- أولا : عمل قاعدة بيانات

تخزين الرسائل والعناوين الخاصة باللغات في قاعدة بيانات

نقوم بتصميم الجداول التالية :

    - Languages : وهو الجدول الخاص بتخزين أسماء اللغات المتعامل بها
     وحقوله الأساسية هي :
              - LanguageID
              - LanguageName
              - IsRTL
              - IsDefault

ومجتواه

LanguageID   LanguageName  IsRTL  IsDefault
________________________________________
1                    arabic                    1        1
2                    english                   0        0
3                    French                   0        0

    - Messages : وهو الجدول الخاص بتخزين أسماء معرفات الرسائل message Keys
     وحقوله الأساسية هي :
              - MessageID
              - MessageKey

ومجتواه

MessageID  MessageKey
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــ
1                 LoginNameLabel
2                 LoginPasswordLabel

    - LangMessages : وهو الجدول الخاص بتخزين قيم لأسماء معرفات الرسائل لكل 
      اللغات الموجودة
     وحقوله الأساسية هي :
              - LanguageID
              - MessageID
              - MessageContent


ومجتواه
LanguageID  MessageID  MessageContent
1                   1                   أسم المستخدم
1                   2                   كلمة المرور
2                   1                   user name
2                   2                   password
3                   1                   france user
3                   2                   france password

- ثانيا : الجزء الخاص بالبرمجة بال asp.net ( مستخدما #c)

1 - نقوم بعمل فئة خاصة بالتعامل مع جدول اللغات

using System.Data;
using System.Data.SqlClient;

class Language
{
  public string LanguageID = "";
  public bool IsRTL = false;

  public static SqlDataReader GetLanguages()
  {
    SqlConnection conn = new SqlConnection( "your connection string" );
    conn.Open();
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "Select * From Languages";

    return cmd.ExecuteReader();
  }

  public static Language GetDefaultLanguage()
  {
    SqlConnection conn = new SqlConnection( "your connection string" );
    conn.Open();
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "Select LanguageID,IsRTL From Languages Where IsDefault=1";
    SqlDataReader dr = cmd.ExecuteReader();
    
    Language DefaultLanguage = new Language();
    if( dr != null ) {
      while( dr.Read() ) {
        DefaultLanguage.LanguageID = dr["LanguageID"].ToString();
        DefaultLanguage.IsRTL = (bool)dr["IsRTL"];
      }
    }

    return DefaultLanguage;
  }

  public static Language GetLanguageByLanguageID( string LanguageID )
  {
    SqlConnection conn = new SqlConnection( "your connection string" );
    conn.Open();
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "Select LanguageID,IsRTL From Languages Where LanguageID=" + LanguageID;
    SqlDataReader dr = cmd.ExecuteReader();
    
    Language DefaultLanguage = new Language();
    if( dr != null ) {
      while( dr.Read() ) {
        DefaultLanguage.LanguageID = dr["LanguageID"].ToString();
        DefaultLanguage.IsRTL = (bool)dr["IsRTL"];
      }
    }

    return DefaultLanguage;
  }

  public string GetMessageContent(string MessageKey)
  {
    SqlConnection conn = new SqlConnection(Language.connString);
    conn.Open();
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "Select MessageContent From " +
      "LangMessages join Messages on LangMessages.MessageID=Messages.MessageID " +
      "Where MessageKey='" + MessageKey + "'" +
      " AND LanguageID=" + this.LanguageID;

    object obj = cmd.ExecuteScalar();
    return ( obj == null )? "" : obj.ToString();
  }
}

2 - نقوم بعمل متغير أسمه curLanguage ثم نضع بهذا المتغير اللغة الأفتراضية

لاحظ أنه يجب أن تكون هناك لغة واحدة فقط هي اللغة الإفتراضية ( أي قيمة الحقل IsDefault يساوي true )

كما يلي

 .
 .
 .
 // set the curLanguage
 if( this.Session["curLanguage"] == null )
     this.Session["curLanguage"] = Language.GetDefaultLanguage();

لاحظ أننا جعلنا مستوي رؤية المتغير curLanguage علي مستوي السشن Session

3 - نضع علي اللنكات الخاصة بتغير لغة العرض للموقع قيمة ال LanguageID وال IsRTL المقابلة لكل لنك

فعلي سبيل المثال

<a href="?langID=1&IsRTL=1"> عربي </a>
<a href="?langID=2&IsRTL=0"> إنجليزي </a>
<a href="?langID=3&IsRTL=0"> فرنسي </a>

وطبعا هذه اللنكات يتم تكوينها بطريقة ديناميكية من خلال قراءة محتويات الجدول Languages

كما يلي :

public class WebForm1 : System.Web.UI.Page
{

 protected System.Web.UI.WebControls.Repeater repeaterSiteLangs;
 .
 .
 .
 // set the Languages
 this.repeaterSiteLangs.DataSource = Language.GetLanguages();
 this.repeaterSiteLangs.DataBind();

<asp:Repeater id="repeaterSiteLangs" runat="server">
 <ItemTemplate>
   <a href='?langID=<%#DataBinder.Eval(Container.DataItem, "LanguageID")%>&IsRTL=<%# (bool)DataBinder.Eval(Container.DataItem, "IsRTL")?1:0%>'>
   <%#DataBinder.Eval(Container.DataItem, "LanguageName")%>
   </a>
 </ItemTemplate>
 <SeparatorTemplate> | </SeparatorTemplate>
</asp:Repeater>

4 - وعند الضغط علي إحدي هذه اللنكات لتغير لغة العرض نقوم بتغير القيمة المخزنة بالمتغير curLanguage الموجود بالسيشن Session كما يلي

 .
 .
 .
 private void Page_Load(Object Source, EventArgs E)
 {
     if ( this.Request["langID"] != null  )
     {
          this.Session["curLanguage"] = Language.GetLanguageByLanguageID(this.Request["langID"]);
     }
 }

نحن الأن خزنا قيمة ال LanguageID و IsRTL المستخدمة حالية في في المتغير curLanguage

وبذلك نستطيع تحديد اللغة المستخدمة

- ثالثا : إسترجاع قيم الرسائل حسب اللغة الحالية

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

 protected System.Web.UI.WebControls.Label Label1;
 .
 .
 .
 private void Page_Load(Object Source, EventArgs E)
 {
   Language curLang = (Language)this.Session["curLanguage"];
   this.Label1.Text = curLang.GetMessageContent("LoginNameLabel");
 }

ولكني أفضل عمل كنترولات خاصة للتعامل مع هذه الحالة ( وقد قمت بعمل ذلك )

وهو عمل كنترول لل Labelو ال Button و ال LinkButton

توفر هذا العمل

أرجو أن لا أكون أطلت عليكم

وبالتوفيق

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

#7

طريقتي التي كنت أفكر فيها شرحها الأخ الحسين مشكورا

فكر بطريقة أخرى

#8

هذا مقال ربما يفيد أيضا

Creating multilingual websites - Part 1

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

#9

تم نقل الموضوع للقسم المختص

Mohamad Al-Karbi

www.mkarbi.me

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

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