Suivant este sur la manière de mettre en œuvre la globalisation et la localisation à l'aide de .NET Core, mon objectif est de stocker toutes mes ressources dans un seul fichier de ressources globales situé dans un projet différent (bibliothèque de classes).
Projet 1 - Startup.cs
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
builder.AddApplicationInsightsSettings(developerMode: true);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry(Configuration);
services.AddLocalization(lo => lo.ResourcesPath = "/MYCLASSLIBRARY"); //External project ~ How?
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
services.Configure<RequestLocalizationOptions>(
opts =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("sv-SE")
};
opts.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRequestLocalization(app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value);
app.UseMvc();
app.UseDefaultFiles();
app.UseStaticFiles();
}
}
Projet 2 - Bibliothèque de classe
Projet 1 - Contrôleur
using MYCLASSLIBRARY; //External project
[Route("api/[controller]")]
public class HelloController : Controller
{
private readonly IStringLocalizer<Test> _localizer; //External project class
public OrganisationController(IStringLocalizer<Test> localizer)
{
_mapper = mapper;
_localizer = localizer;
}
[HttpGet("GetResource")]
public string GetResource()
{
return _localizer["Help"];
}
}
Comment puis-je faire référence à un projet externe lors de la définition de ResourcesPath ?
services.AddLocalization(lo => lo.ResourcesPath = "/MYCLASSLIBRARY");