// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Globalization; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace LocalizationSample { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddLocalization(options => options.ResourcesPath = "My/Resources"); } public void Configure(IApplicationBuilder app, IStringLocalizer SR) { var supportedCultures = new[] { "en-US", "en-AU", "en-GB", "es-ES", "ja-JP", "fr-FR", "zh", "zh-CN" }; app.UseRequestLocalization(options => options .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures) .SetDefaultCulture(supportedCultures[0]) // Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB. //.AddRequestCultureProvider(new CustomRequestCultureProvider(async context => //{ //})); ); app.Use(async (context, next) => { if (context.Request.Path.Value.EndsWith("favicon.ico")) { // Pesky browsers context.Response.StatusCode = 404; return; } context.Response.StatusCode = 200; context.Response.ContentType = "text/html; charset=utf-8"; var requestCultureFeature = context.Features.Get(); var requestCulture = requestCultureFeature.RequestCulture; await context.Response.WriteAsync( $@" {SR["Request Localization"]} "); await context.Response.WriteAsync($"

{SR["Request Localization Sample"]}

"); await context.Response.WriteAsync($"

{SR["Hello"]}

"); await context.Response.WriteAsync("
"); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
"); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
"); await context.Response.WriteAsync(" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($"{SR["reset"]}"); await context.Response.WriteAsync("
"); await context.Response.WriteAsync("
"); await context.Response.WriteAsync(""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
Winning provider:{requestCultureFeature.Provider.GetType().Name}
{SR["Current request culture:"]}{requestCulture.Culture.DisplayName} ({requestCulture.Culture})
{SR["Current request UI culture:"]}{requestCulture.UICulture.DisplayName} ({requestCulture.UICulture})
{SR["Current thread culture:"]}{CultureInfo.CurrentCulture.DisplayName} ({CultureInfo.CurrentCulture})
{SR["Current thread UI culture:"]}{CultureInfo.CurrentUICulture.DisplayName} ({CultureInfo.CurrentUICulture})
{SR["Current date (invariant full):"]}{DateTime.Now.ToString("F", CultureInfo.InvariantCulture)}
{SR["Current date (invariant):"]}{DateTime.Now.ToString(CultureInfo.InvariantCulture)}
{SR["Current date (request full):"]}{DateTime.Now.ToString("F")}
{SR["Current date (request):"]}{DateTime.Now.ToString()}
{SR["Current time (invariant):"]}{DateTime.Now.ToString("T", CultureInfo.InvariantCulture)}
{SR["Current time (request):"]}{DateTime.Now.ToString("T")}
{SR["Big number (invariant):"]}{(Math.Pow(2, 42) + 0.42).ToString("N", CultureInfo.InvariantCulture)}
{SR["Big number (request):"]}{(Math.Pow(2, 42) + 0.42).ToString("N")}
{SR["Big number negative (invariant):"]}{(-Math.Pow(2, 42) + 0.42).ToString("N", CultureInfo.InvariantCulture)}
{SR["Big number negative (request):"]}{(-Math.Pow(2, 42) + 0.42).ToString("N")}
{SR["Money (invariant):"]}{2199.50.ToString("C", CultureInfo.InvariantCulture)}
{SR["Money (request):"]}{2199.50.ToString("C")}
{SR["Money negative (invariant):"]}{(-2199.50).ToString("C", CultureInfo.InvariantCulture)}
{SR["Money negative (request):"]}{(-2199.50).ToString("C")}
"); await context.Response.WriteAsync( @" "); }); } private static async System.Threading.Tasks.Task WriteCultureSelectOptions(HttpContext context) { await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); await context.Response.WriteAsync($" "); } public static void Main(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) .Build(); var host = new WebHostBuilder() .ConfigureLogging(factory => factory.AddConsole()) .UseKestrel() .UseConfiguration(config) .UseIISIntegration() .UseStartup() .Build(); host.Run(); } } }