Tôi có một ứng dụng ASP.NET Web API nên phản ứng với tiêu đề Accept-Language của người dùng một cách thích hợp.Cách tốt để thay đổi tài nguyên ngôn ngữ theo yêu cầu
Hiện tại, các chuỗi được lưu trữ trong resx và được truy cập theo cách biên dịch an toàn thông qua lớp được tạo của Visual Studio. Những gì tôi muốn làm là để giữ cho phương pháp tiếp cận hiện tại và tạo ra hội đồng vệ tinh cho mỗi phiên bản dịch của resx. Sau đó, để phân tích tiêu đề Accept-Language của người dùng để xem ngôn ngữ nào người dùng chấp nhận và tải các tài nguyên cho ngôn ngữ được yêu cầu từ lắp ráp vệ tinh.
Tôi cho rằng mình có thể tự mình thực hiện tất cả hành vi này bằng cách tạo một tập hợp các đối tượng cụ thể theo ngôn ngữ với sự trợ giúp của ResourceSet
nhưng sau đó sẽ không thể giữ an toàn biên dịch. tự động cập nhật lớp cho tệp resx.
Cách tốt nhất để chọn tài nguyên ngôn ngữ được bản địa hóa là gì?
Như bạn đã nói trong bài viết của mình, nếu tôi cố gắng gửi một tiêu đề Accept-Language như sau: 'Accept-Language: it, de, en; q = 0.5' và ASP.NET không thể tìm thấy tài nguyên được yêu cầu bằng tiếng Ý, nó không thử tiếng Đức tiếp theo mà thay vào đó lại quay trở lại văn hóa trung tính. Bất kỳ cách nào để khắc phục hành vi này? –
Có, có vẻ như chỉ tính đến ngôn ngữ hàng đầu trong tiêu đề chấp nhận ngôn ngữ (hoặc ít nhất là ngôn ngữ hàng đầu là tên văn hóa .NET hợp lệ?). Nó sẽ được tốt đẹp nếu nó thông minh hơn và thử những người khác tùy thuộc vào việc bản địa hóa có sẵn. Nhưng có lẽ không thể xác định nội dung được bản địa hóa (phương pháp lắp ráp vệ tinh có nghĩa là bạn có thể có bất kỳ thứ gì, ví dụ như tiếng Đức cho một dll và một tiếng Ý và một tải khác cho một thành phần chứ không phải thành phần khác) và thực tế, phần lớn người dùng cuối có lẽ chỉ quan tâm đến một. – Clafou
Điều đó nói rằng, tôi đã có cùng một vấn đề như bạn tuần trước và kết thúc việc thực hiện thay thế cho cài đặt "tự động" này. Trong trường hợp của tôi, đó là MVC và tôi đã xử lý điều này trong OnActionExecuting. Đó là một chút công việc để làm tất cả chính mình (tất cả các bạn nhận được là một chuỗi tiêu đề với cú pháp q đó, bạn phải phân tích cú pháp nó và xác nhận quá như .NET không cho phép bất kỳ tên văn hóa nào). Tôi đã kết thúc với một cái gì đó như 'var orderedValidAcceptLanguages = AcceptLanguage.Parse (httpContext.Request.Headers [" Accept-Language "]). Where (x => x.IsValid) .OrderByDescending (x => xQ). ToList(); ' – Clafou