Base solution for your next web application
Open Closed

change System.Threading.Thread.CurrentThread in startup #534


User avatar
0
omital created

Hi, I try to change System.Threading.Thread.CurrentThread in project startup

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Enable the application to use a cookie to store information for the signed in user
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login")
            });

            // Use a cookie to temporarily store information about a user logging in with a third party login provider
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
        }
    }

but it does not work. also I set this in AbpModule's Preinitialize class.

public override void PreInitialize()
        {
            //Add/remove languages for your application

            Configuration.Localization.Languages.Add(new LanguageInfo("fa-IR", "فارسی", "famfamfam-flag-ir", true));
            Configuration.Localization.Languages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", false));
            

            Configuration.Localization.Sources.Extensions.Add(
     new LocalizationSourceExtensionInfo("AbpWeb",
         new XmlFileLocalizationDictionaryProvider(
             HttpContext.Current.Server.MapPath("~/Localization/AbpWebExtensions")
             )
         )
     );

but it did not work and lang attribute in html tag is en

Markdown is supported
Copy & paste or drag & drop images (max 30 MB per image)

8 Answer(s)
  • User Avatar
    0
    hikalkan created
    Support Team

    Setting CurrentThread.CurrentCulture on startup can not work because it's a thread-specific property as you see. Every request uses a different thread. So, you should set it for every request.

    Add this code to your Global.asax file:

    protected override void Application_BeginRequest(object sender, EventArgs e)
    {
        base.Application_BeginRequest(sender, e);
    
        System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
    }
    

    But you say HTML's lang attribute.. maybe it's hard-coded to "en", have you checked it?

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    omital created

    Hi, Thank you for your response. Yes I Checked it and it was

    lang=@System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName>
    

    in layout.cshtml page. I want to when user visit site for the first time ,[lang] attribute be "fa-ir" and then user can change it from language menu.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ddnils created

    have you tried changing

    <html lang="en">
    

    to

    <html lang="fa-ir">
    

    (in _Layout.cshtml)

    • This should set your primary language.
    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    omital created

    Yes this should, but it is hard code and Language menu (user select language from drop down menu) does not work anymore. Dose any other suggestion?

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    hikalkan created
    Support Team

    Have you added

    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");

    to Application_BeginRequest as I write before?

    This always sets current thread to the given culture. So, in layout, @System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName should get the true language. If not, what is System.Threading.Thread.CurrentThread.CurrentCulture in your controller?

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    omital created

    Hi. I use webApi+AngularJS and can not find "Application_BeginRequest ". if use your solution does menu language work correctly?

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    hikalkan created
    Support Team

    How to initialize AbpBootstrapper? Your Web project should contain a global.asax. Or you are using just Owin middleware. Where and how to host your layout.cshtml file (is it cshtml or plain html). If you have a cshtml file, you should have an MVC application.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    omital created

    Thank you. I Added

    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
    

    to Application_Start and work.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)