تطبيق ويب متعدد اللغات - كيف يمكنني اكتشاف لغة المستخدم في ASP.NET؟

StackOverflow https://stackoverflow.com/questions/256229

سؤال

أقوم بإنشاء تطبيق ويب ASP.NET، ويتم تخزين كافة سلاسلي في ملف مورد.أرغب في إضافة لغة ثانية إلى تطبيقي، ومن الناحية المثالية، أرغب في اكتشاف لغة متصفح المستخدم تلقائيًا (أو لغة Windows) وتحديدها افتراضيًا، بدلاً من جعله يختار شيئًا إلى جانب اللغة الإنجليزية.حاليًا، أتعامل مع جميع الموارد يدويًا، لذا فإن إضافة ملف مورد ثانٍ ولغة أمر تافه من وجهة نظري، إذا كان لدي طريقة سهلة لمعرفة اللغة التي سيتم عرضها تلقائيًا.

هل قام أي شخص بذلك، أو هل لديك أي أفكار حول كيفية استرداد هذه القيمة؟نظرًا لأن ASP.NET يعتمد على الخادم، فلا يبدو أن لدي أي إمكانية للوصول إلى إعدادات متصفح معينة.

دقة:وإليكم ما انتهى بي الأمر بفعله.لقد استخدمت "لكل" للمرور عبر "HttpContext.Current.Request.UserLanguages" والبحث عن لغة أدعمها.أنا في الواقع أتحقق فقط من الحرفين الأيسرين، نظرًا لأننا لا ندعم أي لهجات حتى الآن - فقط الإنجليزية والإسبانية.شكرا لجميع التعليمات!

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

المحلول

وهذا <وأ href = "http://web.archive.org/web/20080930115525/http://microsoft.apress.com/asptodayarchive/71804/website-internationalization-using-asp" يختلط = "noreferrer" > المادة (المرتبطة archive.org كما الرابط الأصلي هو الآن ميت) قد يكون من المفيد مع السيارات كشف عن إعداد لغة المتصفح.

[تحرير] نعم. ونقل المقال عن عدم استخدام ASP.NET. هذا يفعل.

نصائح أخرى

وجرب هذا في الملف web.config:

<globalization culture="auto" uiCulture="auto" />

وهذا سوف يسبب ASP.NET لصناعة السيارات في الكشف عن ثقافة العميل من رأس الطلب. يمكنك أيضا تعيين هذا على أساس لكل الصفحات عبر صفحة السمة.

Request.UserLanguages ​​في ASP.NET 4 يوزع هذا كمصفوفة سلسلة.

معلومات جيدة: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

هذا سؤال عظيم، مثل التوطين في أسب.نت يتم التغاضي عنها من قبل العديد من المطورين.

أسب.نت يجب التقاط إعدادات متصفح المستخدم تلقائيًا وفرضها CultureInfo.CurrentCulture إلى لغة المتصفح الخاص بالمستخدم.يمكنك فرض المشكلة باستخدام خط Page_OnInit() يحب:

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);

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

ويحدد العميل عموما قبول اللغة في رأس طلب HTTP مع كميا قائمة اللغة المفضلة والتقليدية (ولكن ليس بالضرورة) وسجل في ترتيب الأكثر حظا لالأقل حظا. يمكن تحليل ذلك، ولكن كما لاحظ MAXAM، ASP.NET لديها آلية للقيام بذلك نيابة عنك.

    /// <summary>
    /// Sets a user's Locale based on the browser's Locale setting. If no setting
    /// is provided the default Locale is used.
    /// </summary>

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
    HttpRequest Request = HttpContext.Current.Request;
    if (Request.UserLanguages == null)
        return;

    string Lang = Request.UserLanguages[0];
    if (Lang != null)
    {
        // *** Problems with Turkish Locale and upper/lower case
        // *** DataRow/DataTable indexes
        if (Lang.StartsWith("tr"))
            return;

        if (Lang.Length < 3)
            Lang = Lang + "-" + Lang.ToUpper();
        try
        {
            System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
            if (CurrencySymbol != null && CurrencySymbol != "")
                Culture.NumberFormat.CurrencySymbol = CurrencySymbol;

            System.Threading.Thread.CurrentThread.CurrentCulture = Culture;

            if (SetUiCulture)
                System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
        }
        catch
        { ;}
    }
}

ومصدر هذه المادة هو هنا: كيفية الكشف عن لغة المستعرض

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top