2012-11-25 31 views
12

Làm thế nào tôi có thể đặt văn hóa của ui tự động dựa trên người dùng? Tất cả những gì tôi tìm thấy về điều này là Globalize.culture("pt-BR"); Nhưng nó đặt pt-BR làm mặc định và tôi không muốn đặt tùy chọn này theo mặc định! Tôi chỉ muốn thiết lập điều này nếu người dùng là pt-BR! Tôi có thể làm như thế nào? Và các phương pháp xác nhận hợp lệ, làm thế nào tôi có thể đặt chúng cho một nền văn hóa cụ thể?Đặt uiCulture tự động dựa trên ngôn ngữ chấp nhận của trình duyệt

Trả lời

18

Trong ASP.NET MVC, web.config là đúng vị trí. Có một bản tóm tắt nhanh, đoạn trích đầu tiên hiển thị, cách có thể là, ví dụ: pt-BR văn hóa buộc

<globalization 
    enableClientBasedCulture="false" 
    uiCulture="pt-BR" 
    culture="pt-BR" /> 

Nếu ứng dụng đã sẵn sàng để chấp nhận văn hóa từ client (trình duyệt), thiết lập nên

<globalization 
    enableClientBasedCulture="true" 
    uiCulture="auto" 
    culture="auto" /> 

Tùy chọn trên sẽ mất một Ngôn ngữ chọn trong trình duyệt của khách hàng (ví dụ như cs-CZ trong trường hợp của tôi). Nếu không có gì được xác định thì cài đặt hệ thống sẽ được sử dụng. cuối cùng show đoạn, làm thế nào để cho phép khách hàng để thiết lập và gửi văn hóa dự định, nhưng trong trường hợp đó không Ngôn ngữ là lựa chọn trước, ghi đè lên hệ thống thiết lập với một số giá trị mặc định khác pt-BR

<globalization 
    enableClientBasedCulture="true" 
    uiCulture="auto:pt-BR" 
    culture="auto:pt-BR" /> 

Extended: thiết lập văn hóa cho jQueryvalidator và nhập số

Lưu ý: tôi chắc chắn không phải là một chuyên gia trong jQuery và toàn cầu hóa kỹ thuật. Đây là ví dụ làm thế nào tôi làm điều chỉnh validator để xử lý một cách chính xác bất kỳ đầu vào số

dao cạo Xem phần (X() là một phím tắt cho new HtmlString()):

var defaultThousandSeprator = "@X(culture.NumberFormat.NumberGroupSeparator)"; 
var defaultDecimalSeprator = "@X(culture.NumberFormat.NumberDecimalSeparator)"; 

jQuery phần (phương pháp tùy chỉnh cho min và max)

$.validator.addMethod("min", function (value, element, param) 
{ 
    var num = value.replace(RegExp(" ", "g"), "") // remove spaces 
      .replace(RegExp('\\' + defaultThousandSeprator, "g"), "") // thousand separator 
      .replace(RegExp("\\" + defaultDecimalSeprator, "g"), "."); // fix decimals 
    return this.optional(element) || num >= param; 
}); 
$.validator.addMethod("max", function (value, element, param) 
{ 
    var num = value.replace(RegExp(" ", "g"), "") // remove spaces 
      .replace(RegExp('\\' + defaultThousandSeprator, "g"), "") // thousands 
      .replace(RegExp("\\" + defaultDecimalSeprator, "g"), "."); // decimals 
    return this.optional(element) || num <= param; 
}); 

Và sau đó jQuery.validator đánh giá các giá trị đầu vào cho cs-CZ: 10 000,00 chính xác cũng như vi-Hoa Kỳ: 10,000.00.

+0

Nhưng thay đổi ảnh hưởng doest'n này trong trình xác nhận jquery (các xác nhận hợp lệ giữ nguyên), vì vậy tôi cần thay đổi văn hóa bằng Globalize.js. – MuriloKunze

+0

Ok, tôi không biết Globalize.js. Để xử lý các công cụ JS, tôi sử dụng các biến JS được tạo động, ví dụ: 'var defaultCulture =" @ (CultureInfo.CurrentCulture.Name) "'; và sau đó mở rộng các thành phần JS như '$ .datepicker.regional [defaultCulture || '']; '.Nhưng câu trả lời của tôi đã giải thích làm thế nào để cho phép văn hóa khách hàng được sử dụng, như bạn đã yêu cầu ... Có thể có mặc định, nhưng overriden với khách hàng nếu được cung cấp –

+0

Vâng, cảm ơn. Nhưng tôi cần phải biết cách làm việc với toàn cầu hóa và các xác nhận hợp lệ. – MuriloKunze

1

Bạn cần phải viết ra kịch bản từ trang web (hoặc trang chủ):

<script type="text/javascript"> 
    Globalize.culture("<% = CultureInfo.CurrentCulture.ToString() %>"); 
</script> 

Vậy là xong. Hãy nhớ rằng tôi đã sử dụng CurrentCulture thay vì CurrentUICulture vì đây là những gì bạn nên sử dụng để định dạng. Nếu bạn cần các bản dịch (mà tôi sẽ không làm theo cách này vì nó sẽ làm tổn thương đến khả năng địa phương), bạn sẽ cần số CurrentUICulture gốc của mình.

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