Trong cố gắng để bản địa hoá ứng dụng của tôi, tôi đã làm theo các bước ở đây: https://docs.asp.net/en/latest/fundamentals/localization.htmlLocalization trong ASP.Net MVC lõi không hoạt động - không có khả năng xác định vị trí tập tin tài nguyên
Đây là mã của tôi:
Startup cs
public List<IRequestCultureProvider> RequestCultureProviders { get; private set; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(options => options.ResourcesPath = "Resources")
.AddDataAnnotationsLocalization();
services.AddOptions();
services.AddTransient<IViewRenderingService, ViewRenderingService>();
services.AddTransient<IEmailSender, EmailSender>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(locOptions.Value);
app.UseStaticFiles();
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory())),
EnableDirectoryBrowsing = true
});
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("fr"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("fr"),
// Formatting numbers, dates, etc.
SupportedCultures = supportedCultures,
// UI strings that we have localized.
SupportedUICultures = supportedCultures,
RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider
{
QueryStringKey = "culture",
UIQueryStringKey = "ui-culture"
}
}
});
}
MyController.cs
public class MyController : Controller
{
private readonly IViewRenderingService _viewRenderingService;
private IStringLocalizer<MyController> _localizer;
private MyOptions _options;
//Constructor for dependency injection principle
public MyController(IViewRenderingService viewRenderingService, IStringLocalizer<MyController> localizer, IOptions<MyOptions> options)
{
_viewRenderingService = viewRenderingService;
_localizer = localizer;
_options = options.Value;
}
[HttpGet]
public string Get()
{
// _localizer["Name"]
return _localizer["Product"];
}
}
Tệp *.resx
được lưu trữ trong thư mục Resources
, với tên Controllers.MyController.fr.resx
(có mục nhập cho "Sản phẩm").
Tuy nhiên, không thể tìm thấy tệp tài nguyên và "Sản phẩm" không bao giờ được trả về bằng tiếng Pháp. Tôi đang sử dụng chuỗi truy vấn, vì vậy đây là chuỗi truy vấn:
localhost:3333/my?culture=fr
Cũng trong View, @Localizer["Product"]
lợi nhuận "sản phẩm".
Có ai vui lòng giúp tôi tìm thấy những gì còn thiếu không?
EDIT:
Sau một số điều tra, tôi thấy rằng văn hóa là nhận thay đổi, tuy nhiên nó không thể xác định vị trí các tập tin tài nguyên. Tôi đang sử dụng VS2015. có ai giúp được không?
Chuỗi văn hóa cho Pháp là 'fr-FR' –
@JK. Vẫn còn kết quả tương tự và nếu bạn kiểm tra liên kết tôi đã cung cấp, họ cũng chỉ sử dụng văn bản "fr". – genericuser
Bạn đã tìm ra vấn đề là gì? – Simon