Tôi đang gặp một số sự cố trong ứng dụng Windows 8 Metro (XAML & C#) về cài đặt khu vực của người dùng. Có vẻ như các ứng dụng sẽ không tôn trọng cài đặt vùng của người dùng, vì vậy ngay cả khi Windows 8 của bạn được đặt để hiển thị ngày và giờ ở định dạng Phần Lan, ứng dụng sẽ vẫn hiển thị chúng bằng định dạng của Hoa Kỳ. Nhưng đây là một vấn đề lớn mà phải có một cái gì đó tôi đang mất tích?Ứng dụng WinRT và cài đặt khu vực. Cách chính xác để định dạng ngày và số dựa trên cài đặt vùng của người dùng?
Để kiểm tra điều này, tôi bắt đầu bằng cách tạo một ứng dụng WP2 WPF. Ứng dụng này chỉ in ra CurrentCulture và DateTime.Now định dạng:
private void Culture_Loaded_1(object sender, RoutedEventArgs e)
{
this.Culture.Text = System.Globalization.CultureInfo.CurrentCulture.DisplayName;
}
private void Date_Loaded_1(object sender, RoutedEventArgs e)
{
this.Date.Text = DateTime.Now.ToString();
}
Dưới đây là các thiết lập mặc định của tôi trong khu vực:
Khi chạy, ứng dụng hiển thị ngày ở định dạng Phần Lan:
Sau đó, tôi đã thay đổi cài đặt khu vực thành US:
Và khi ứng dụng được chạy lại, văn hóa và định dạng thay đổi:
Đây là như tôi mong đợi tất cả mọi thứ để làm việc và đây cũng là cách mà tôi mong đợi các ứng dụng WinRT để làm việc.
Vì vậy, với bước tiếp theo, tôi đã tạo ứng dụng WinRT (XAML & C#) với cùng mã và hoàn nguyên cài đặt vùng trở về Phần Lan. Vấn đề:
Ngay cả khi tôi đã xác định thông qua các thiết lập khu vực mà các định dạng cần được "Phần Lan", ứng dụng sẽ hiển thị WinRT datetime với Mỹ-định dạng. sau đó tôi sửa đổi hồ sơ dự án của ứng dụng và làm fi-FI ngôn ngữ mặc định:
Sự thay đổi này cũng biến đổi văn hóa của ứng dụng:
Strange. Tôi đã thay đổi Ngôn ngữ mặc định về giá trị mặc định của nó và định dạng đã được khôi phục về Hoa Kỳ. Sau đó tôi tạo ra các thư mục "Strings - fi-FI" bên trong dự án và thêm rỗng "Resources.resw" vào dự án. tập tin rỗng này có vẻ là đủ, vì bây giờ tôi đã nhận được các định dạng Phần Lan:
Ngay sau khi tôi loại bỏ các tập tin tài nguyên trống, formattings quay ngược lại cung của Hoa Kỳ:
Rất lạ.
Điều này dẫn đến một vài câu hỏi, nhưng chính tôi nghĩ là: Các ứng dụng WinRT có cố ý không tuân theo các cài đặt khu vực của người dùng như các ứng dụng WPF không?
Vì vậy, acutally cách get/tôn trọng những người sử dụng thiết lập Format khu vực? Tôi đã khởi chạy trình mô phỏng điện thoại Windows 8.1 với cấu hình sau cho mục đích thử nghiệm: Giao diện người dùng Ngôn ngữ: Tiếng Đức, Vùng: Hoa Kỳ, Cài đặt định dạng: Ailen Tôi không tìm được cách nào để nhận thông tin. đến Ailen. Và điều ước duy nhất của tôi là định dạng DateTime như người dùng muốn xem nó. Và định dạng khu vực không tự động có nghĩa là khu vực của nó tôi thiết lập thiết bị hoặc Langauge UI tôi đã chọn. Trên thiết bị của tôi, tôi đặt giao diện người dùng sang tiếng Anh nhưng muốn xem tất cả các TimeStamps và Ngày ở định dạng tiếng Đức ... – Kornelis
cảm ơn, điều sau đây rất tuyệt, vì tôi cần ISO 3166-1 alpha2 https://en.wikipedia.org/ wiki/ISO_3166-1_alpha-2 GeographicRegion userRegion = new GeographicRegion(); chuỗi regionCode = userRegion.CodeTwoLetter; – Quincy
Điều này đã làm việc cho tôi nhưng bây giờ tôi cần số lớn và 'CurrencyFormatter' không hỗ trợ số thập phân vì vậy tôi cần giải pháp ... –