سؤال

هل من الممكن تجاوز CurrentCulture و ال CurrentUICulture لمكافحة محددة في WinForms؟ بحيث يستخدم عنصر التحكم المحدد هذا ثقافة مختلفة؟

هل كانت مفيدة؟

المحلول

يمكنك تحقيق ذلك عن طريق إنشاء مثيل للثقافة التي تختارها وتمرير ذلك كمعلمة لتنسيق الوظائف (مثل Tostring). فقط لا تقوم بتعيينه إلى Third.CurrentThread.currentCulture أو Read.CurrentThread.currentuiculture، لأن ذلك سيغير الثقافة للتطبيق على هذا النحو.

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

CultureInfo myCulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(DateTime.Now.ToString(myCulture));

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

عينة الخيط:

string formattedDate = string.Empty;
Thread t = new Thread(delegate()
{
    // call external code without specifying culture
    formattedDate = DateTime.Now.ToString();  
    waitHandle.Set();
});
t.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
t.Start();
waitHandle.WaitOne(); // wait for the thread to finish
Console.WriteLine(formattedDate);

كقطة الأخيرة؛ لا أدري، لا أعرف لماذا تريد تجاوز كل من تربية الإكراهية، لكنني أقترح أن تفكر مرتين قبل القيام بذلك. يستخدم المستخدمون لرؤية التواريخ منسقة أرقام حسب لغةها؛ التغيير الذي قد يكون مربكا، خاصة إذا حدث ذلك في جزء واحد فقط من واجهة المستخدم.

نصائح أخرى

لا أعتقد أنه يمكنك القيام بذلك لمراقبة واحدة، ولكن بالنسبة للخيط الحالي، يمكنك التبديل مثل هذا:

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top