2016-08-24 18 views
6

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?

+0

Chuỗi văn hóa cho Pháp là 'fr-FR' –

+0

@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

+0

Bạn đã tìm ra vấn đề là gì? – Simon

Trả lời

20

Tôi gặp sự cố tương tự. Hơn tôi đã tìm ra rằng "Localization.AspNetCore.TagHelpers" gói nuget bị thiếu trong dự án của tôi. Có vẻ như đó là gói bắt buộc cho QueryStringRequestCultureProvider.

+1

Làm việc cho tôi cảm ơn :) – OrcusZ

+1

Cảm ơn bước * không có giấy tờ này! – Alessandro

+0

Làm việc cho tôi quá ... –

Các vấn đề liên quan