। নেট কোর 3 আইএসট্রিংলোকলাইজার.বিধ সংস্কৃতি (সংস্কৃতিআইএনফো) অপ্রচলিত


9

আমি নেট প্রকল্প 2.2 থেকে। নেট কোর 3.0 তে একটি প্রকল্প আপগ্রেড করেছি।

সমস্ত সতর্কতা এবং ত্রুটিগুলি ঠিক করার চেষ্টা করার পরে আমি এখন এই সতর্কতার কোনও সমাধানের জন্য তহবিল দেওয়ার চেষ্টা করছি:

'IStringLocalizer.WithCulture(CultureInfo)' is obsolete: 'This method is obsolete.
 Use `CurrentCulture` and `CurrentUICulture` instead.'

আমি লগ-ইন করা ব্যবহারকারী হিসাবে ওয়েবসাইটের ভাষা পরিবর্তন করতে এটি ব্যবহার করছি। ব্যবহারকারী হিসাবে ওয়েবসাইট সংস্কৃতি পরিবর্তন করার জন্য আমার এই বাস্তবায়ন রয়েছে:

public class CultureLocalizer : ICultureLocalizer
{
    private readonly IStringLocalizer localizer;
    public CultureLocalizer(IStringLocalizerFactory factory)
    {
        var type = typeof(Resources.PageResources);
        var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
        localizer = factory.Create("PageResources", assemblyName.Name);
    }

    // if we have formatted string we can provide arguments         
    // e.g.: @Localizer.Text("Hello {0}", User.Name)
    public LocalizedString Get(string key, params string[] arguments)
    {
        return arguments == null ? localizer[key] : localizer[key, arguments];
    }

    public LocalizedString Get(Enum key, params string[] arguments)
    {
        return arguments == null ? localizer[key.ToString()] : localizer[key.ToString(), arguments];
    }

    public LocalizedString Get(CultureInfo culture, string key, params string[] arguments)
    {
        // This is obsolete
        return arguments == null ? localizer.WithCulture(culture)[key] : localizer.WithCulture(culture)[key, arguments];
    }

    public LocalizedString Get(CultureInfo culture, Enum key, params string[] arguments)
    {
        // This is obsolete
        return arguments == null ? localizer.WithCulture(culture)[key.ToString()] : localizer.WithCulture(culture)[key.ToString(), arguments];
    }
}

এবং এটি ডামি ক্লাস যা কেবল .resxঅনুবাদগুলির জন্য ফাইলটি ধারণ করে :

// dummy class for grouping localization resources
public class PageResources
{
}

আমি ওয়েবে এমন কিছু খুঁজে পাইনি যা এই সতর্কতাটি কীভাবে সমাধান করবেন তা বোঝাতে গিথুব সম্পর্কিত এই আলোচনা ব্যতীত যেটির কোনও সমাধান নেই বলে মনে হচ্ছে except

অন্য কেউ যদি এই সতর্কবাণীতে হোঁচট খায় এবং এর সমাধান খুঁজে পেয়েছেন?

উত্তর:


4

ইতিমধ্যে এখানে উত্স কোড উল্লেখ আছে

    /// <summary>
    /// Creates a new <see cref="IStringLocalizer"/> for a specific <see cref="CultureInfo"/>.
    /// </summary>
    /// <param name="culture">The <see cref="CultureInfo"/> to use.</param>
    /// <returns>A culture-specific <see cref="IStringLocalizer"/>.</returns>
    [Obsolete("This method is obsolete. Use `CurrentCulture` and `CurrentUICulture` instead.")]
    IStringLocalizer WithCulture(CultureInfo culture);

তারা। নেট কোর 3.0 এ কীভাবে ব্যবহার করে তা এখানে

public static void Main()  
   {
      // Display the name of the current thread culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

      // Change the current culture to th-TH.
      CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

      // Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

      // Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
   }

আপডেট: মাইক্রোসফ্ট থেকে অফিশিয়াল ঘোষণা না আসা পর্যন্ত এই পদ্ধতিটি কার্যকর

আপনি এই মত একটি পরিষেবা তৈরি করতে পারেন

public class LocalizationService
    {
        private readonly IStringLocalizer _localizer;

        public LocalizationService(IStringLocalizerFactory factory)
        {
            var type = typeof(SharedResource);
            var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
            _localizer = factory.Create("SharedResource", assemblyName.Name);
        }

        public LocalizedString GetLocalizedHtmlString(string key)
        {
            return _localizer[key];
        }
    }

তারপরে আপনার শুরুতে

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<LocalizationService>();
            services.AddLocalization(options => options.ResourcesPath = "Resources");

            services.Configure<RequestLocalizationOptions>(options =>
            {
                var supportedCultures = new[]
                {
                    new CultureInfo("en"),
                    new CultureInfo("nl")
                };

                options.DefaultRequestCulture = new RequestCulture(culture: "en", uiCulture: "en");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
                .AddDataAnnotationsLocalization(options =>
                {
                    options.DataAnnotationLocalizerProvider = (type, factory) =>
                    {
                        var assemblyName = new AssemblyName(typeof(SharedResource).GetTypeInfo().Assembly.FullName);
                        return factory.Create("SharedResource", assemblyName.Name);
                    };
                });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            var localizationOption = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(localizationOption.Value);

            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }

আপনি আমার পুরো কোডটি এখানে দেখতে পারেন


আমি যে কোডটি ব্যবহার করছি তা দিয়ে আমি আমার প্রশ্ন আপডেট করেছি। আপনি কি দয়া করে এটি দেখতে পারেন? কারণ এটি আপনার সমাধানের সাথে সামঞ্জস্যপূর্ণ দেখাচ্ছে না।
লিরান ফ্রিডম্যান

@ লিরানফ্রিডম্যান আপনি আইকালচারলোকলাইজারটি কোথায় পাবেন? আমি সেই ইন্টারফেসটি অনুসন্ধান করার চেষ্টা করছি তবে আমি এটি খুঁজে পাচ্ছি না
টনি এনগো

আপনি দয়া করে ব্যাখ্যা করতে পারেন যে প্রতি সংস্কৃতি কীভাবে ব্যবহারকারী পরিবর্তিত হয়? প্রতিটি ব্যবহারকারী তার প্রোফাইলে তার পছন্দসই ভাষা নির্বাচন করে। এছাড়াও, আমি এটি পরীক্ষা করে দেখতে পারি যে এটি কাজ করে?
লিরান ফ্রিডম্যান

যারা কনসোল অ্যাপ্লিকেশনটিতে এটি ব্যবহার করেন তাদের পক্ষে - এটি ব্যবহার করা গুরুত্বপূর্ণ CurrentUICultureকারণ CurrentCultureমনে হয় এর কোনও প্রভাব নেই StringLocalizer। যদি কোনও ওয়েব অ্যাপ্লিকেশন ব্যবহার করে services.Configure<RequestLocalizationOptions>আপনি বর্তমান ব্যবহারকারীর অনুরোধের ভাষা সনাক্ত করার জন্য আচরণটি সামঞ্জস্য করতে ব্যবহার করতে পারেন তবে স্বয়ংক্রিয় ভাষা সনাক্তকরণের জন্য মাইক্রোসফ্ট ডিফল্ট - শিরোনাম, কুকিজ, যাই হোক না কেন - সম্পর্কে সচেতন হন। এই কারণে আমি RequestCultureProvidersব্যবহারকারীর ভাষা সনাক্তকরণের জন্য আমার নিজের পরিচিত পদ্ধতির সাথে সামঞ্জস্য করতে পছন্দ করি ।
জাস্টামার্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.