Наше решение .NET Core 6 содержит множество проектов, большинство из которых — API-интерфейсы RESTful, которые может делиться ресурсами для локализации.
Итак, теперь цель состоит в том, чтобы создать проект SharedLocResources, содержащий все resx-файлы с переводами, к которым затем можно будет получить доступ во всех других проектах. . Языковой стандарт запроса предоставляется заголовком Accept-Language. Заставить это работать не проблема. У меня возникают проблемы с настройкой использования файлов ресурсов.
Код: Выделить всё
RestfulAPI.csproj
| - Controllers/MyController.cs
SharedLocalizationResources.csproj
|
| - Properties
| - LocalizationService.cs
| - SharedResource.cs //Dummy class to group shared resources
| - Resources.resx
| - Resources.ar.resx
| - Resources.bn.resx
....
Код: Выделить всё
SharedResources.csКод: Выделить всё
namespace SharedLocalizationResources;
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);
}
}
namespace SharedLocalizationResources;
///
/// Dummy class to group shared resources
///
public class SharedResource{}
Код: Выделить всё
builder.Services.AddSingleton();
builder.Services.AddLocalization(options => options.ResourcesPath = "SharedLocalizationResources"); // Resource-containing project name
builder.Services.AddMvc().AddViewLocalization()
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
var assemblyName = new AssemblyName(typeof(SharedResource).GetTypeInfo().Assembly.FullName);
return factory.Create("SharedResource", assemblyName.Name);
};
});
builder.Services.Configure(
options =>
{
var supportedCultures = new List
{
new("ar"),
new("bn"),
new("bg"),
new("en"),
new("de")
};
options.DefaultRequestCulture = new RequestCulture(culture: "de", uiCulture: "de");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders.Insert(0, new QueryStringRequestCultureProvider());
});
Код: Выделить всё
public MyController( IStringLocalizer sharedLocalizer)
{
sharedLocalizer = sharedLocalizer;
}
public ActionResult Version()
{
var res = new ActionResult(sharedLocalizer["Test"]);
return res;
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... -shared-pr
Мобильная версия