2012-01-16 32 views
18

Tìm kiếm trên web, tôi nhìn thấy rất nhiều trường hợp mà sự kết hợp sau đây của các thuộc tính được sử dụng trong phần toàn cầu hóa: văn hóa = "auto", uiCulture = "auto", enableClientBasedCulture = "true", ví dụ:Thuộc tính enableClientBasedCulture trong Web.config có hoạt động không?

<globalization uiCulture="auto" culture="auto" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/> 

các tài liệu nói: http://msdn.microsoft.com/en-us/library/system.web.configuration.globalizationsection.enableclientbasedculture(v=VS.90).aspx

Khi bất động sản EnableClientBasedCulture được kích hoạt, văn hóa và tính UICulture được dựa trên header field AcceptLanguage giá trị được gửi bởi trình duyệt của khách hàng. Nếu giá trị tiêu đề AcceptLanguage không thể được ánh xạ tới một nền văn hóa cụ thể, các giá trị Nuôi trồng văn hóa và được sử dụng. Giá trị mặc định là sai.

Đối với các nền văn hóa và uiCulture thuộc tính, "tự động" được cho là có ý nghĩa http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx

Để có ASP.NET thiết lập văn hóa giao diện người dùng và văn hóa với ngôn ngữ đầu tiên được chỉ định trong các trình duyệt hiện tại cài đặt, đặt UICulture và Văn hóa để tự động. Ngoài ra, bạn có thể đặt giá trị này thành tự động: culture_info_name, trong đó culture_info_name là tên văn hóa. Để biết danh sách tên văn hóa, hãy xem CultureInfo. Bạn có thể đặt cài đặt này trong chỉ thị @ Trang hoặc tệp Web.config.

Giả sử trình duyệt gửi tên không hợp lệ hoặc không có văn hóa trong giá trị trường tiêu đề AcceptLanguage. Bởi vì enableClientBasedCulture = "true", máy chủ ứng dụng được cho là cố gắng sử dụng bất cứ điều gì trong trường header AcceptLanguage, nhưng với một tên văn hóa không hợp lệ, nó không làm như vậy và rơi trở lại culture = "auto" và uiCulture = "auto ", nhưng các cài đặt tự động/tự động sẽ không thực hiện bất kỳ việc sử dụng dữ liệu không hợp lệ nào.

Bây giờ giả sử chúng tôi gửi cho máy chủ tên văn hóa hợp lệ, ví dụ: "de-DE". Máy chủ ứng dụng vẫn được yêu cầu sử dụng giá trị của trường tiêu đề AcceptLanguage vì enableClientBasedCulture = "true", nhưng vì văn hóa và uiCulture được đặt thành "tự động", chúng sẽ vẫn sử dụng giá trị đó.

Câu hỏi đầu tiên của tôi là: Điểm kết hợp tự động/tự động với đúng là gì? Niềm tin của riêng tôi là nếu culture = "auto" và uiCulture = "auto", sử dụng enableClientBasedCulture = "true" sẽ là thừa. Các thử nghiệm của riêng tôi đã chỉ ra rằng tự động/tự động hoạt động giống như khi chúng được kết hợp với thuộc tính enableClientBasedCulture, nhưng khi tôi thấy kết hợp tự động/tự động/đúng được đề xuất trong nhiều ví dụ trên web, tôi tự hỏi nếu tôi đã bỏ qua một cái gì đó.

Tôi đã thử sử dụng enableClientBasedCulture = "true" mà không có cài đặt tự động/tự động, ví dụ:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/> 

Điều này dường như không hoạt động chút nào; có vẻ như khách hàng đang ép buộc văn bản của máy chủ và các cài đặt uiCulture, mặc dù enableClientBasedCulture = "true" được cho là (ngầm định?) chú ý thiết lập các thuộc tính đó cho giá trị của trường header AcceptLanguage.

Sau đó, tôi đã thử kết hợp enableClientBasedCulture với một nền văn hóa cụ thể cho văn hóa và uiCulture, ví dụ:

<globalization uiCulture="da-DK" culture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/> 

Trong trường hợp này, trình duyệt khách hàng buộc phải sử dụng "da-DK", bất kể cài đặt ngôn ngữ của nó là gì.

Nhìn vào http://msdn.microsoft.com/en-us/library/hy4kkhe0(v=VS.90).aspx Tôi thấy điều này cho enableClientBasedCulture:

Thuộc tính này không được sử dụng vào thời điểm này.

Sử dụng .NET Reflector, tôi đã biên dịch tất cả các phiên bản .NET 3.5 Framework và tìm kiếm enableClientBasedCulture. Tôi đã tìm thấy một số mã trong System.Web.Configuration \ GlobalizationSection mà đọc giá trị và làm cho nó có sẵn thông qua một tài sản, nhưng nếu không thì không có gì với nó.

Trong Hosting \ HostingMôi trường Tôi tìm thấy một phương thức có tên SetCultures lấy giá trị văn hóa và uiCulture từ tham số GlobalizationSection, nhưng tôi chưa tìm thấy mã nào sử dụng thuộc tính enableClientBasedCulture.

Vì vậy, câu hỏi thứ hai của tôi là: Sản phẩm enableClientBasedCulture thuộc tính thực sự được sử dụng bất cứ nơi nào ở tất cả và nếu như vậy, làm thế nào tôi nên cấu hình một chương trình thử nghiệm để chứng minh bản thân mình rằng nó có bất kỳ tác dụng?

Trả lời

5

Bạn có thể muốn thử:

<globalization uiCulture="auto:da-DK" culture="auto:da-DK" requestEncoding="utf-8" responseEncoding="utf-8" /> 

Tôi tin rằng điều này sẽ sử dụng văn hóa từ tiêu đề AcceptLanguage đầu tiên nếu có, dự phòng khác để mặc định theo quy định.

+1

Có, nhưng câu hỏi là 1) mục đích bao gồm tất cả ba thuộc tính với giá trị tự động/tự động/đúng là gì và 2) là thuộc tính enableClientBasedCulture đang được sử dụng cho bất kỳ thứ gì. Ví dụ của bạn không bao gồm ví dụ về cách sử dụng thuộc tính enableClientBasedCulture. –

+1

@Joergen: Tài liệu về trạng thái toàn cầu < globalization> của enableClientBasedCulture: "Thuộc tính này không được sử dụng tại thời điểm này" - http://msdn.microsoft.com/en-us/library/hy4kkhe0(v=VS .100) .aspx Vì vậy, tôi sẽ kết luận rằng nó hiện không được sử dụng cho bất cứ điều gì, mà dường như phù hợp với kinh nghiệm của bạn. – Joe

+0

Vâng, như bạn thấy, tôi liên kết với 3.5 phiên bản của trang đó trong câu hỏi của tôi và nó xác nhận những gì tôi thấy (hoặc không) trong mã nguồn, nhưng trong tài liệu lớp GlobalizationSection, không có đề cập rằng tài sản này sẽ không có hiệu lực. Các tài sản được đề cập trong bài viết blog khác nhau và hướng dẫn cài đặt, đó là lý do tại sao tôi đang tìm kiếm một số sự kiện khó khăn trước khi tôi làm như vậy. Nơi duy nhất tôi đã thấy ai đó thay đổi ý định của họ về việc sử dụng cài đặt này là http://www.devexpress.com/Support/Center/p/B150103.aspx - nhưng khác với nhận xét "lỗi thời", không có chi tiết nào khác. –

7

MSDN nói rằng enableClientBasedCulture không được sử dụng.

"enableClientBasedCulture - Thuộc tính tùy chọn. Thuộc tính này không được sử dụng tại thời điểm này".

0

Bạn sẽ phải triển khai phát hiện Accept-Lang của riêng mình và chuyển sang các nền văn hóa bạn cung cấp cho phù hợp.

.NET không hỗ trợ chuyển đổi "tự động ma thuật".

enableClientBasedCulture không làm gì cả.

Đặt văn hóa thành tự động cũng không làm gì cả. Bạn có thể thấy rằng bằng cách thiết lập "auto: en" trên cả hai và loại bỏ danish từ ngôn ngữ trình duyệt của bạn, bạn sẽ nhận thấy nó sẽ mặc định để Đan Mạch anyway.

Chúc may mắn.

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