2013-07-10 24 views
8

Tôi đang viết một ứng dụng WPF và đang gặp một số khó khăn với các nền văn hóa.Văn hóa mặc định được đặt ở đâu trong ứng dụng .NET

Tôi muốn biết vị trí các ứng dụng .NET nhận giá trị cho CurrentThread.CurrentCulture khi không có giá trị nào được đặt rõ ràng. Nó không phải từ thông tin văn hóa Windows vì tôi đã thay đổi từ en-US thành en-GB mà không nhận thấy bất kỳ thay đổi nào trong ứng dụng khi chạy.

Vui lòng trợ giúp!

Đánh dấu

+0

hãy xem đây http://stackoverflow.com/questions/2764615/wpf-stringformat-0c-showing-as-dollars này nên giải quyết vấn đề của bạn –

Trả lời

6

Từ the fine manual:

Xem CultureInfo.CurrentCulture tài sản để học cách văn hóa mặc định của một chủ đề được xác định, và cách người dùng thiết lập thông tin văn hóa cho máy tính của họ.

One laborious click later...

Làm thế nào văn hóa của Chủ đề được xác định

Khi một thread được bắt đầu, văn hóa của nó ban đầu được xác định như sau:

  • Bằng cách lấy nền văn hóa đó là được chỉ định bởi thuộc tính DefaultThreadCurrentCulture trong miền ứng dụng mà chuỗi đang thực thi, nếu thuộc tính va lue không phải là null.

  • Bằng cách gọi hàm Windows GetUserDefaultLocaleName.

Lưu ý rằng nếu bạn đặt một nền văn hóa cụ thể mà là khác nhau từ văn hóa hệ thống cài đặt sẵn hoặc văn hóa ưa thích của người dùng, và ứng dụng của bạn bắt đầu nhiều chủ đề, văn hóa hiện tại của những chủ đề sẽ là văn hóa được trả về bởi hàm GetUserDefaultLocaleName, trừ khi bạn chỉ định một nền văn hóa cho thuộc tính DefaultThreadCurrentCulture trong miền ứng dụng mà chuỗi đang thực thi.

Để biết thêm thông tin về cách xác định văn hóa của chuỗi, hãy xem phần "Văn hóa và chủ đề" trong chủ đề CultureInfo.

I didn't budget for another click, but clicked anyway.

Văn hóa Chủ đề

Khi một thread ứng dụng mới được bắt đầu, văn hóa hiện tại của mình và văn hóa giao diện người dùng hiện tại được xác định bởi văn hóa hệ thống hiện tại, chứ không phải bởi văn hóa thread hiện hành. Ví dụ sau minh họa sự khác biệt. Nó đặt văn hóa hiện tại và văn hóa giao diện người dùng hiện tại của một chuỗi ứng dụng sang nền văn hóa Pháp (Pháp) (fr-FR). Nếu văn hóa hiện tại đã là fr-FR, ví dụ sẽ đặt nó thành văn hóa tiếng Anh (Hoa Kỳ) (en-US). Nó hiển thị ba số ngẫu nhiên dưới dạng giá trị tiền tệ và sau đó tạo một chuỗi mới, trong đó, lần lượt, hiển thị ba số ngẫu nhiên hơn dưới dạng giá trị tiền tệ. Nhưng như đầu ra từ ví dụ cho thấy, các giá trị tiền tệ được hiển thị bởi chuỗi mới không phản ánh các quy ước định dạng của văn hóa Pháp (Pháp), không giống như đầu ra từ chuỗi ứng dụng chính.

Lưu ý rằng nó nói khi a thread ứng dụng mới được bắt đầu. Vì vậy, cho rằng bạn nói:

Nó không phải từ thông tin văn hóa Windows vì tôi đã thay đổi từ en-US thành en-GB mà không nhận thấy bất kỳ thay đổi nào trong ứng dụng khi chạy.

Bạn có thể muốn xem lại this answer.

+0

Cảm ơn vì điều đó, tôi không thấy điều này thông tin khi tôi duyệt MSDN lần đầu tiên. – serlingpa

+0

@ user343159 Đừng đọc quá nhiều vào mỉa mai của tôi. Tôi hy vọng câu trả lời cho câu hỏi của bạn là một trong những liên kết tôi đã đưa vào. –

0

Khi văn hóa cụ thể không được chỉ định hoặc khi chuỗi rỗng được sử dụng thay cho tên văn hóa, sử dụng InvariantCulture.

Nó được liên kết với ngôn ngữ tiếng Anh nhưng không được liên kết với bất kỳ quốc gia/khu vực nào.

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