يوفر ASP.NET 2.0 وظائف تحويل متعددة اللغات وتحويل السمات متعددة الأنماط. إن نموذجي التنفيذ متشابهان نسبيًا، لذا سيتم شرحهما معًا.
1. محول اللغة التبديل متعدد اللغات في البرنامج التعليمي للبدء السريع، يتم تعريف كيفية تخزين وتطبيق اللغة التي حددها المستخدم. بشكل عام، يتم استخدام قائمة DropDownList لعرض اللغات المدعومة ليختارها المستخدم، ويتم وضعها عادةً في الصفحة الرئيسية ويتم استخدام ملف تعريف ASP.NET 2.0 هنا بالطبع. يمكن أيضًا تخزينه في جلسة ملف تعريف الارتباط أو سلسلة الاستعلام. تجاوز طريقة التهيئة في الصفحة لاستخدام اللغة التي حددها المستخدم مسبقًا. نظرًا لأن عملية ضبط اللغة (هنا حدث SelectedIndexChanged) تحدث بعد وقت التهيئة، ومن أجل جعل الصفحة الحالية فعالة فور اكتمال عملية الإعداد، يلزم إعادة التوجيه لإعادة تحميل هذه الصفحة وتشغيل حدث التهيئة. يوجد أدناه جزء من التعليمات البرمجية في Quickstart، انتبه إلى الجزء الأحمر. نظرًا لاحتمال وجود سلسلة استعلام خلف بعض عناوين الصفحات، أعتقد شخصيًا أنه من الأفضل استبدال جزء الكود الأحمر بـ Response.Redirect(Request.Url.PathAndQuery);.
الفراغ المحمي DropDownLanguage_SelectedIndexChanged (مرسل الكائن، EventArgs e)
{
string SelectedLanguage = DropDownLanguage.SelectedValue.ToString();
// احفظ لغة المستخدم المحددة في الملف الشخصي
PreferredCulture
"، SelectedLanguage);
Response.Redirect(Request.Url.LocalPath);
}
تجاوز محمي باطلةInitializeCulture()
{
// تجاوز الطريقة الافتراضية ()InitializeCulture للتحقق مما إذا كان الملف الشخصي يحتوي على إعداد لغة المستخدم
سلسلة UserCulture = Profile.GetPropertyValue("PreferredCulture").ToString();
إذا (ثقافة المستخدم! = "")
{
// يوجد إعداد لغة المستخدم في الملف الشخصي: قم بالتبديل إليه
Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture);
}
}
من أجل تقليل تكرار التعليمات البرمجية، يتم تخصيص فئة الصفحة الأساسية للعملاء بشكل عام، مما يجعلها ترث فئة الصفحة، ثم إعادة تهيئة طريقة التهيئة في الفئة الأساسية للصفحة المخصصة. وأخيرًا، ارث كل صفحة من صفحاتك من الفئة الأساسية لصفحتك المخصصة. بهذه الطريقة لن تحتاج إلى تجاوز طريقة التهيئة في كل صفحة.
لكن الطريقة المذكورة أعلاه لا تزال غير مرضية للغاية، لأنه في كل مرة تضيف فيها صفحة، يتعين عليك تعديل الرمز البريدي لترث الفئة الأساسية للصفحة المخصصة.
لقد لاحظنا أنه في طريقة التهيئة، يتم تعديل الثقافة وUICulture للخيط الحالي فقط. فهل يمكن تعديل هاتين السمتين في حدث عالمي، مثل حدث التطبيق؟ لقد حاولت ذلك منذ وقت طويل، وقمت بتنفيذ تفاصيل التهيئة عند تشغيل حدث BeginRequest للتطبيق، على غرار التعليمة البرمجية التالية:
باطلة Application_BeginRequest (مرسل الكائن، EventArgs e)
{
string lang = string.Empty;// الافتراضي للثقافة الثابتة
lang = Profile.PreferredCulture;
إذا (string.IsNullOrEmpty(lang))
{
lang = string.Empty;
}
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
}
لاحظ أنه يجب استبدال الجزء الأحمر بطرق أخرى، لأن كائن ملف التعريف لم يتم إنشاؤه بعد بواسطة asp.net أثناء مرحلة تشغيل طلب البدء. يمكن استبداله بملفات تعريف الارتباط.
أتذكر أنه بعد القيام بذلك، لم ينجح الأمر بعد تعيين اللغة. في ذلك الوقت، اعتقدت أنه سيتم التعامل معه في حدث عالمي وقد تتم الكتابة فوقه لاحقًا، لذلك قد لا يعمل. لذلك كانت طريقة التهيئة الثقافية لا تزال مستخدمة في ذلك الوقت. رأيت اليوم شخصًا ما في منتدى asp.net يفعل هذا.
باطلة Application_BeginRequest(مرسل الكائن، EventArgs e){
string lang = string.Empty;// الافتراضي للثقافة الثابتة
HttpCookie cookie = Request.Cookies["DropDownName"];
if (cookie != null && cookie.Value != null)
lang = Request.Form[cookie.Value];
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
}
لذلك اعتقدت أنه ربما لم يتم ضبط شيء ما بشكل صحيح في ذلك الوقت، لذلك حاولت مرة أخرى وتبين أن هذا هو السبب وراء ظهور أمر رأس الصفحة <%@ Page UICulture="auto" Culture="auto" %> يتم تعيين الثقافة في الصفحة، وسوف تتجاوز الإعدادات العامة. بعد إزالته، دخلت الإعدادات العامة حيز التنفيذ. يبدو أن إعدادات الثقافة في الصفحة ستتجاوز الإعدادات العامة، وإعدادات أسلوب التهيئة في الصفحة (على وجه الدقة، جميع عناصر التحكم التي تدعم هذه الطريقة) ستتجاوز إعدادات الصفحة. في الواقع، التنفيذ الافتراضي لطريقة التهيئة الثقافية في فئة الصفحة فارغ، لذلك بعد إزالة تعليمات رأس الصفحة UICulture = "auto" Culture = "auto"، ستصبح الإعدادات العامة سارية المفعول.
بالإضافة إلى ذلك، إذا كنت تريد حقًا استخدام ملف التعريف (مثلي) لتخزين اختيارات المستخدم، فلا يمكنك التعامل معه في مرحلة البدء في الطلب، فأنا أتعامل معه عند تشغيل حدث PreRequestHandlerExecute:
باطل Application_PreRequestHandlerExecute (مرسل الكائن، EventArgs e)
{
string lang = string.Empty;// الافتراضي للثقافة الثابتة
lang = Profile.PreferredCulture;
إذا (string.IsNullOrEmpty(lang))
{
lang = string.Empty;
}
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
}
في هذا الوقت تم إنشاء ملف التعريف، بحيث يمكن استخدامه.
2. تبديل السمات المتعددة الأنماط
تتحدث هذه المقالة عن تبديل السمات، وأعتقد أن النموذج مشابه جدًا لتبديل اللغة. إنه يستخدم HttpModule، وأعتقد أنه يمكن وضعه مباشرة ضمن معالجة الأحداث المقابلة وتوزيعها في ملف Global.asax. يستخدم ملفات تعريف الارتباط للتخزين، وما زلت أعتقد أنه من الأفضل استخدام ملف التعريف نظرًا لأنه متوفر، يجب تخزين ملف التعريف مؤقتًا، لذلك لا ينبغي أن يمثل الأداء مشكلة.
المصدر: تراكم كثيف ومدونة مزدهرة