একটি এএসপি. নেট এমভিসি অ্যাপে সংস্কৃতি সেট করুন


85

একটি এএসপিএনভি এমভিসি অ্যাপে সংস্কৃতি / ইউআই সংস্কৃতি সেট করার জন্য সেরা স্থানটি কী

বর্তমানে আমার কাছে একটি সংস্কৃতি নিয়ন্ত্রণকারী ক্লাস রয়েছে যা দেখতে এটির মতো দেখাচ্ছে:

public class CultureController : Controller
{
    public ActionResult SetSpanishCulture()
    {
        HttpContext.Session["culture"] = "es-ES";
        return RedirectToAction("Index", "Home");
    }

    public ActionResult SetFrenchCulture()
    {
        HttpContext.Session["culture"] = "fr-FR";
        return RedirectToAction("Index", "Home");
    }
}

এবং হোমপৃষ্ঠায় প্রতিটি ভাষার হাইপার লিঙ্ক যেমন একটি লিঙ্ক সহ:

<li><%= Html.ActionLink("French", "SetFrenchCulture", "Culture")%></li>
<li><%= Html.ActionLink("Spanish", "SetSpanishCulture", "Culture")%></li>

যা ভাল কাজ করে তবে আমি ভাবছি এটি করার জন্য আরও উপযুক্ত উপায় আছে।

আমি নিম্নলিখিত ক্রিয়াকলাপ http://www.iansuttle.com/blog/post/ASPNET-MVC-Action-Filter- for-Localized-Sites.aspx ব্যবহার করে সংস্কৃতিটি পড়ছি । আমি কিছুটা এমভিসি নুব তাই আত্মবিশ্বাসী না যে আমি এটিকে সঠিক জায়গায় স্থাপন করছি। আমি এটি ওয়েবকনফিগ পর্যায়ে করতে চাই না, এটি কোনও ব্যবহারকারীর পছন্দের উপর ভিত্তি করে তৈরি করতে হবে। আমি তাদের ব্রাউজার সেটিংস থেকে সংস্কৃতি পেতে তাদের এইচটিপি-হেডারগুলিও পরীক্ষা করতে চাই না।

সম্পাদনা করুন:

কেবল পরিষ্কার করার জন্য - আমি সেশনটি ব্যবহার করব কিনা তা সিদ্ধান্ত নেওয়ার চেষ্টা করছি না। আমি এই বিট দিয়ে খুশি। আমি যে কাজটি করার চেষ্টা করছি তা হ'ল যদি সংস্কৃতি নিয়ন্ত্রকের মধ্যে এটি করা ভাল তবে প্রতিটি সংস্কৃতি সেট করার জন্য একটি অ্যাকশন পদ্ধতি আছে বা এমভিসি পাইপলাইনে এটি করার জন্য আরও ভাল জায়গা আছে কি?


ব্যবহারকারী সংস্কৃতি নির্বাচন করতে সেশন স্টেট ব্যবহার করা ভাল পছন্দ নয়। সর্বোত্তম উপায় হ'ল সংস্কৃতিটিকে ইউআরএল এর অংশ হিসাবে অন্তর্ভুক্ত করা , যা বর্তমান পৃষ্ঠাটিকে অন্য সংস্কৃতির সাথে "সোয়াপ" করা সহজ করে তোলে।
নাইটওয়েল ৮৮৮

উত্তর:


114

আমি এই স্থানীয়করণ পদ্ধতিটি ব্যবহার করছি এবং একটি রুট প্যারামিটার যুক্ত করেছি যা সংস্কৃতি এবং ভাষা নির্ধারণ করে যখনই কোনও ব্যবহারকারী উদাহরণস্বরূপ / XXX-xx/

উদাহরণ:

routes.MapRoute("DefaultLocalized",
            "{language}-{culture}/{controller}/{action}/{id}",
            new
            {
                controller = "Home",
                action = "Index",
                id = "",
                language = "nl",
                culture = "NL"
            });

আমার কাছে এমন একটি ফিল্টার রয়েছে যা আসল সংস্কৃতি / ভাষা সেটিং করে:

using System.Globalization;
using System.Threading;
using System.Web.Mvc;

public class InternationalizationAttribute : ActionFilterAttribute {

    public override void OnActionExecuting(ActionExecutingContext filterContext) {

        string language = (string)filterContext.RouteData.Values["language"] ?? "nl";
        string culture = (string)filterContext.RouteData.Values["culture"] ?? "NL";

        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));

    }
}

আন্তর্জাতিকীকরণের বৈশিষ্ট্যটি সক্রিয় করতে, কেবল এটি আপনার শ্রেণিতে যুক্ত করুন:

[Internationalization]
public class HomeController : Controller {
...

এখন যখনই কোনও ভিজিটর http://example.com/de-DE/Home/Index এ যান জার্মান সাইটটি প্রদর্শিত হয়।

আমি আশা করি এই উত্তরগুলি আপনাকে সঠিক দিকে নির্দেশ করবে।

আমি একটি ছোট এমভিসি 5 উদাহরণ প্রকল্পও তৈরি করেছি যা আপনি এখানে খুঁজে পেতে পারেন

কেবল ইংরাজীতে (মার্কিন) বর্তমান তারিখটি দেখতে http: // {yourhost}: {port} / en-us / home / সূচীতে যান বা এটি http: // {yourhost}: {Port} / de এ পরিবর্তন করুন -ডে / হোম / সূচক জার্মান এসেটেরার জন্য।


15
আমি ইউআরএলতে ল্যাং লাগাতেও পছন্দ করি কারণ এটি বিভিন্ন ভাষায় সার্চ ইঞ্জিন দ্বারা ক্রলযোগ্য হয়ে ওঠে এবং ব্যবহারকারীকে নির্দিষ্ট ল্যাং সহ কোনও ইউআরএল সংরক্ষণ বা পাঠাতে দেয় allow
এডুয়ার্ডো মোল্টেনি

50
ইউআরএলটিতে ভাষা যুক্ত করা REST লঙ্ঘন করে না। এটি ওয়েব রিসোর্সটিকে কোনও লুকানো সেশন স্টেটের উপর নির্ভরশীল না করে এটিকে মেনে চলা।
জেস রিয়া

4
ওয়েব সংস্থানটি কোনও লুকানো অবস্থার উপর নির্ভর করে না, এটি যেভাবে উপস্থাপিত হয় তা। । আপনি একটি ওয়েব পরিসেবা হিসাবে রিসোর্স অ্যাক্সেস করতে চান, আপনি একটি ভাষা নির্বাচন করতে তাতে এটি করতে হবে
Eynde গুহা ডেভ ভ্যান

4
এই ধরণের সমাধান নিয়ে আমার কিছু সমস্যা ছিল। বৈধতা ত্রুটি বার্তাগুলি অনুবাদ করা হচ্ছে না। সমস্যাটি সমাধান করার জন্য আমি সংস্কৃতি সেট করেছি Global.asax.cs ফাইলের অ্যাপ্লিকেশন_একুইয়াররেউকস্টেস্ট ফাংশনে।
এডিএইচ

4
এটি একটি ফিল্টারে রাখা ভাল ধারণা নয়। মডেল বাইন্ডিং কারেন্ট কালচার ব্যবহার করে, তবে অ্যাকশনফিল্টারটি মডেল বাইন্ডিংয়ের পরে ঘটে। গ্লোবাল.অ্যাসাক্স, অ্যাপ্লিকেশন_প্রেইকুয়েস্টহ্যান্ডলারএক্সেকুটে এটি করা ভাল।
স্টিফান

38

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আপনি যদি সত্যিই আপনার মডেলবাইন্ডারের সাথে কাজ করতে চান ( DefaultModelBinder.ResourceClassKey = "MyResource";পাশাপাশি ভিউমোডেল ক্লাসগুলির ডেটা টীকাতে নির্দেশিত সংস্থানসমূহের ক্ষেত্রে), নিয়ামক বা এমনকি ActionFilterখুব দেরিতে সংস্কৃতি সেট করুন

সংস্কৃতি সেট করা যেতে পারে Application_AcquireRequestState, উদাহরণস্বরূপ:

protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        // For example a cookie, but better extract it from the url
        string culture = HttpContext.Current.Request.Cookies["culture"].Value;

        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
    }

সম্পাদনা

প্রকৃতপক্ষে একটি কাস্টম রুটহ্যান্ডার ব্যবহারের আরও ভাল উপায় রয়েছে যা ইউআরএল অনুসারে সংস্কৃতি নির্ধারণ করে যা তার ব্লগে অ্যালেক্স অ্যাডামায়ান দ্বারা নিখুঁতভাবে বর্ণনা করা হয়েছে ।

করণীয় হ'ল GetHttpHandlerপদ্ধতিটি ওভাররাইড করা এবং সেখানে সংস্কৃতি সেট করা set

public class MultiCultureMvcRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        // get culture from route data
        var culture = requestContext.RouteData.Values["culture"].ToString();
        var ci = new CultureInfo(culture);
        Thread.CurrentThread.CurrentUICulture = ci;
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
        return base.GetHttpHandler(requestContext);
    }
}

দুর্ভাগ্যজনকভাবে রুটডেটা ইত্যাদি "অ্যাপ্লিকেশন_একুইয়ারআরেস্টেস্টেট" পদ্ধতিতে পাওয়া যায় না তবে সেগুলি কন্ট্রোলার ক্রিয়েট অ্যাকশনআইভোকারে () থাকে। সুতরাং আমি "IActionInvoker CreateActionInvoker ()" র সুরক্ষিত ওভাররাইড করার পরামর্শ দিচ্ছি এবং ঠিক সেখানে সংস্কৃতিInfo সেট করুন।
স্কোরুনকা ফ্রান্টিয়েক

আমি সেই ব্লগটি পড়েছি। কুকি নিয়ে এগিয়ে গেলে কি কোন সমস্যা আছে? যেহেতু আমার এটিকে পরিবর্তন করার অনুমতি নেই। দয়া করে আমাকে জানান এই পদ্ধতির সাথে কোন সমস্যা আছে?
kbvishnu

@ ভিকিবিবি আপনার সাইটটি সর্বজনীন থাকলে সুরক্ষিত সাইটগুলির জন্য কুকি ব্যবহার করার সময় সমস্ত ভাষাগুলি যথাযথভাবে সূচিকর্মিত হবে না you're
মারাপেট

এটি প্রকাশ্যে নয় আপনি কি "ইনডেক্সড" শব্দটি সম্পর্কে একটি ইঙ্গিত দিতে পারেন?
kbvishnu

4
আপনার নিজের প্রশ্ন জিজ্ঞাসা করা উচিত এবং এসইওতে পড়া উচিত, মূল প্রশ্নের সাথে এর আর কিছুই করার নেই। ওয়েবমাস্টার্স.স্ট্যাক্কেঞ্জঞ্জ
প্রশ্নগুলি

25

আমি এটি নিয়ামকের সূচনা ইভেন্টে এটি করব ...

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        const string culture = "en-US";
        CultureInfo ci = CultureInfo.GetCultureInfo(culture);

        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }

4
সংস্কৃতি স্ট্রিং একটি কনস্ট হতে পারে না, কারণ ব্যবহারকারীরা সাইটে যে সংস্কৃতিটি তারা ব্যবহার করতে চান তা নির্দিষ্ট করতে সক্ষম হতে হবে।
NerdFury

4
আমি এটি বুঝতে পারি, তবে প্রশ্নটি ছিল কীভাবে এটি সেট করা যায় না তা সংস্কৃতি সেট করা সবচেয়ে ভাল।
জেস রিয়া

কনস্টের পরিবর্তে, আপনি এর মতো কিছু ব্যবহার করতে পারেন: var newC فرهن = নতুন সংস্কৃতিআইফোন (রুটডাটা.ভ্যালুগুলি ["ল্যাং"] To টুস্ট্রিং ());
Nordes

অনাইজএক্সেকিউটিংয়ের আগে অথরিজকোরকে ডাকা হয়, সুতরাং আপনার অথরাইজকোর ওভাররাইড পদ্ধতিতে আপনার কোনও সংস্কৃতির বিবরণ থাকবে না। কন্ট্রোলারের ইনিশিয়াল পদ্ধতিটি আরও ভালভাবে কাজ করতে পারে, বিশেষত যদি আপনি একটি কাস্টম অথরিজঅ্যাট্রিবিউট বাস্তবায়ন করছেন, যেহেতু আর্নিজাইজ পদ্ধতিটি অ্যাডাইজকোরের আগে ডাকা হয় (অথোরিজকোরের মধ্যে আপনার সংস্কৃতির বিবরণ থাকবে)।
নাথান আর

7

এটি প্রতি ব্যবহারকারী হিসাবে সঞ্চিত একটি সেটিং হিসাবে, সেশনটি তথ্য সংরক্ষণের জন্য উপযুক্ত জায়গা।

প্রতিটি সম্ভাব্য সংস্কৃতির জন্য আলাদা ক্রিয়া পদ্ধতি না রেখে সংস্কৃতি স্ট্রিংটিকে প্যারামিটার হিসাবে নিতে আমি আপনার নিয়ামককে পরিবর্তন করব। পৃষ্ঠায় একটি লিঙ্ক যুক্ত করা সহজ এবং কোনও নতুন সংস্কৃতি প্রয়োজন হলে যে কোনও সময় আপনাকে বার বার একই কোডটি লেখার প্রয়োজন হবে না।

public class CultureController : Controller    
{
        public ActionResult SetCulture(string culture)
        {
            HttpContext.Session["culture"] = culture
            return RedirectToAction("Index", "Home");
        }        
}

<li><%= Html.ActionLink("French", "SetCulture", new {controller = "Culture", culture = "fr-FR"})%></li>
<li><%= Html.ActionLink("Spanish", "SetCulture", new {controller = "Culture", culture = "es-ES"})%></li>

উত্তরের জন্য ধন্যবাদ, আমি অধিবেশন ব্যবহার করার চেষ্টা করব কিনা তা অস্বীকার করার চেষ্টা করছি না। আমি এই বিট দিয়ে খুশি। আমি যে কাজটি করার চেষ্টা করছি তা হ'ল যদি কোনও সংস্কৃতি নিয়ন্ত্রকের কাছে এটি করা ভাল যে প্রতিটি সংস্কৃতি সেট করার জন্য একটি অ্যাকশন পদ্ধতি আছে বা এটি করার জন্য এমভিসি পাইপলাইনে আরও ভাল জায়গা রয়েছে
ক্রিসকা

আমি একটি সম্পাদিত উত্তর সরবরাহ করেছি যা প্রশ্নের সাথে আরও ভাল ফিট করে।
NerdFury

হ্যাঁ, এটি অবশ্যই পরিষ্কার, তবে আমি যা জানতে চাই তা হ'ল এটি যদি কোনও নিয়ামকের মধ্যে করা উচিত। বা সংস্কৃতি সেট করার জন্য যদি এমভিসি পাইপলাইনে আরও ভাল জায়গা থাকে। বা যদি এটি অ্যাকশন ফিল্টার, হ্যান্ডলার, মডিউল ইত্যাদিতে আরও ভাল হয়
ChrisCa

একজন হ্যান্ডলার এবং মডিউলটি বোঝায় না কারণ ব্যবহারকারীর একটি নির্বাচন করার সুযোগ নেই। ব্যবহারকারীর একটি নির্বাচন করার জন্য আপনার একটি উপায় প্রয়োজন এবং তারপরে ব্যবহারকারীদের নির্বাচনের প্রক্রিয়া করুন, এটি একটি নিয়ামকের মাধ্যমে করা হবে।
NerdFury

সম্মত, হ্যান্ডলার এবং মডিউলগুলি ব্যবহারকারীর কথোপকথনের অনুমতি দেওয়ার জন্য তাড়াতাড়ি। তবে আমি এমভিসিতে বেশ নতুন, তাই পাইপলাইনটি সেট করার জন্য এটি সেরা জায়গা কিনা তা সম্পর্কে আমি নিশ্চিত নই। আমি যদি কিছুক্ষণ পরে না শুনি তবে আমি আপনার উত্তরটি গ্রহণ করব। আপনি যদি কোনও অ্যাকশন পদ্ধতিতে প্যারামিটারটি ব্যবহার করতে চান তবে সিনট্যাক্সটি কাজ করছে বলে মনে হচ্ছে না। এটিতে কোনও নিয়ামক সংজ্ঞায়িত হয় না তাই কেবলমাত্র ডিফল্ট ব্যবহার করে (যা এই ক্ষেত্রে সঠিক নয়)। এবং সেখানে আরও একটি ওভারলোড উপযুক্ত বলে মনে হচ্ছে না
ক্রিসকা

6

সবচেয়ে ভাল জায়গাটি আপনার প্রশ্ন। কন্ট্রোলার.ইনিটায়ালাইজ পদ্ধতিতে সেরা জায়গা । এমএসডিএন লিখেছেন যে এটি কনস্ট্রাক্টরের পরে এবং ক্রিয়া পদ্ধতির আগে ডাকা হয়েছিল। অন্যাকশনএক্সেকুটিংকে ওভাররাইড করার বিপরীতে, আপনার কোডটি ইনিশিয়েল পদ্ধতিতে স্থাপন করা আপনাকে আপনার ক্লাসে এবং আপনার সম্পত্তিগুলিতে সমস্ত কাস্টম ডেটা টীকা এবং বৈশিষ্ট্যটি উপকারের সুযোগ দেয়।

উদাহরণস্বরূপ, আমার স্থানীয়করণের যুক্তিটি কোনও ক্লাস থেকে আসে যা আমার কাস্টম নিয়ামককে ইনজেক্ট করা হয়। ইনিশিয়ালটি কনস্ট্রাক্টরের পরে ডাকার পরে আমার এই অবজেক্টে অ্যাক্সেস রয়েছে। আমি থ্রেডের সংস্কৃতি অ্যাসাইনমেন্টটি করতে পারি এবং প্রতিটি ত্রুটি বার্তা সঠিকভাবে প্রদর্শিত হচ্ছে না।

 public BaseController(IRunningContext runningContext){/*...*/}

 protected override void Initialize(RequestContext requestContext)
 {
     base.Initialize(requestContext);
     var culture = runningContext.GetCulture();
     Thread.CurrentThread.CurrentUICulture = culture;
     Thread.CurrentThread.CurrentCulture = culture;
 }

আপনার যুক্তি যেমন আমার দেওয়া উদাহরণের মতো শ্রেণীর ভিতরে না থাকলেও আপনার কাছে অনুরোধকন্টেক্সট অ্যাক্সেস রয়েছে যা আপনাকে ইউআরএল এবং এইচটিপিপেক্সটেক্সট এবং রুটডেটা রাখতে পারবেন যা আপনি মূলত যেকোন পার্সিং সম্ভব করতে পারবেন।


এটি আমার এইচটিএমএল 5 টেলিগ্রিক রিপোর্টলোক্যালাইজেশন! ধন্যবাদ @ পেট্রিক দেশজার্ডিনস
কোডার রোলার

4

সাবডোমেনগুলি ব্যবহার করে, উদাহরণস্বরূপ, "pt.mydomain.com" এর মতো পর্তুগিজ সেট করতে উদাহরণস্বরূপ, অ্যাপ্লিকেশন_একুইয়ারআরেস্টেস্টেট ব্যবহার করা কার্যকর হবে না, কারণ এটি পরবর্তী ক্যাশে অনুরোধগুলিতে ডাকা হয়নি।

এটি সমাধানের জন্য, আমি এটির মতো একটি প্রয়োগের পরামর্শ দিচ্ছি:

  1. আউটপুট ক্যাশে এর মতো ভ্যারিবি কাস্টম প্যারামিটার যুক্ত করুন:

    [OutputCache(Duration = 10000, VaryByCustom = "lang")]
    public ActionResult Contact()
    {
        return View("Contact");
    }
    
  2. Global.asax.cs এ, কোনও ফাংশন কল ব্যবহার করে হোস্টের কাছ থেকে সংস্কৃতিটি পান:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = GetCultureFromHost();
    }
    
  3. গ্লোবাল.অ্যাক্স্যাক্স সি-তে গেটকल्চারফ্রমহোস্ট ফাংশন যুক্ত করুন:

    private CultureInfo GetCultureFromHost()
    {
        CultureInfo ci = new CultureInfo("en-US"); // en-US
        string host = Request.Url.Host.ToLower();
        if (host.Equals("mydomain.com"))
        {
            ci = new CultureInfo("en-US");
        }
        else if (host.StartsWith("pt."))
        {
            ci = new CultureInfo("pt");
        }
        else if (host.StartsWith("de."))
        {
            ci = new CultureInfo("de");
        }
        else if (host.StartsWith("da."))
        {
            ci = new CultureInfo("da");
        }
    
        return ci;
    }
    
  4. এবং অবশেষে এই ফাংশনটি ব্যবহার করতে getVaryByCustomString (...) ওভাররাইড করুন:

    public override string GetVaryByCustomString(HttpContext context, string value)
    {
        if (value.ToLower() == "lang")
        {
            CultureInfo ci = GetCultureFromHost();
            return ci.Name;
        }
        return base.GetVaryByCustomString(context, value);
    }
    

অ্যাপ্লিকেশন_একুইয়ারআরেউয়েস্টস্টেট ফাংশনটি নন-ক্যাশেড কলগুলিতে ডাকা হয়, যা সামগ্রীটি উত্পন্ন এবং ক্যাশে দেয়। ক্যাটাগারে সামগ্রীটি উপলব্ধ কিনা তা পরীক্ষা করার জন্য গেটভ্যাইবাইকাস্টমস্ট্রিংকে ক্যাশেড কলগুলিতে ডাকা হয় এবং এই ক্ষেত্রে আমরা কেবলমাত্র বর্তমান সংস্কৃতি তথ্যের উপর নির্ভর না করে কেবল আগত হোস্ট ডোমেন মানটি পরীক্ষা করি যা নতুন অনুরোধের জন্য পরিবর্তিত হতে পারে (কারণ) আমরা সাবডোমেনগুলি ব্যবহার করছি)।


4

1: একটি কাস্টম বৈশিষ্ট্য তৈরি করুন এবং এ জাতীয় ওভাররাইড পদ্ধতি:

public class CultureAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
    // Retreive culture from GET
    string currentCulture = filterContext.HttpContext.Request.QueryString["culture"];

    // Also, you can retreive culture from Cookie like this :
    //string currentCulture = filterContext.HttpContext.Request.Cookies["cookie"].Value;

    // Set culture
    Thread.CurrentThread.CurrentCulture = new CultureInfo(currentCulture);
    Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(currentCulture);
    }
}

2: অ্যাপ_স্টার্টে ফিল্টারকনফিগ.সি.স. অনুসন্ধান করুন, এই বৈশিষ্ট্যটি যুক্ত করুন। (এটি পুরো আবেদনের জন্য কাজ করে)

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
    // Add custom attribute here
    filters.Add(new CultureAttribute());
    }
}    

এটাই !

আপনি যদি পুরো প্রয়োগের স্থলে প্রতিটি নিয়ামক / ক্রিয়াকলাপের জন্য সংস্কৃতি সংজ্ঞায়িত করতে চান তবে আপনি এই বৈশিষ্ট্যটি এটির মতো ব্যবহার করতে পারেন:

[Culture]
public class StudentsController : Controller
{
}

বা:

[Culture]
public ActionResult Index()
{
    return View();
}

0
protected void Application_AcquireRequestState(object sender, EventArgs e)
        {
            if(Context.Session!= null)
            Thread.CurrentThread.CurrentCulture =
                    Thread.CurrentThread.CurrentUICulture = (Context.Session["culture"] ?? (Context.Session["culture"] = new CultureInfo("pt-BR"))) as CultureInfo;
        }

4
কেন এটি সর্বোত্তম উপায় বলে মনে হচ্ছে দয়া করে তা ব্যাখ্যা করুন।
ম্যাক্স লেসেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.