Điều gì sẽ là một sản phẩm tốt để bản địa hóa một bản phân phối WPF dựa trên MVVM có thể thay đổi ngôn ngữ của nó khi chạy? Tất nhiên tôi có thể tạo một thuộc tính chuỗi trong ViewModel cho mỗi và mọi chuỗi được hiển thị ở đâu đó trong View nhưng điều đó dường như khá tẻ nhạt với tôi. Có cách tiếp cận chung/thực tiễn tốt nhất cho việc này không?Bản địa hóa các ứng dụng dựa trên MVVM dựa trên WPF
Trả lời
WPF has a lot of support for localization. Có lẽ bạn có thể tận dụng điều đó? Thật không may tôi nghĩ rằng việc thay đổi ngôn ngữ giao diện người dùng tại thời gian chạy là hơi khó khăn và bạn có thể cần phải đi lên với chương trình của riêng bạn.
Ngoài ra, vì mô hình chế độ xem là thuyết bất khả tri giao diện người dùng, tôi không nghĩ lưu trữ chuỗi giao diện người dùng trong mô hình chế độ xem là giải pháp tốt. Chúng thuộc về khung nhìn.
Thay vì có chuỗi giao diện người dùng trong mô hình quan điểm của bạn, bạn có thể lưu trữ chúng trong nguồn lực của lắp ráp và truy cập chúng trực tiếp từ XAML, sử dụng x:Static
:
<TextBlock Text="{x:Static props:Resources.MyLabel}"/>
Các namespace props
nên tham khảo namespace Properties
của assembly của bạn :
xmlns:props="clr-namespace:My.Assembly.Properties"
Chỉ cần đảm bảo rằng quyền truy cập Tài nguyên của bạn đã được sửa đổi là Công khai chứ không phải Nội bộ. – midspace
Dưới đây là một vài điều mà có thể được quan tâm:
Dưới đây là một excellent article about WPF localization. Nó đề cập đến các kỹ thuật nội địa hóa của Microsoft hỗ trợ, và một vài người khác
tôi sẽ không giới thiệu các giải pháp "chính thức" cho nội địa hóa ... nó thực sự là một nỗi đau để sử dụng, nó sẽ thay đổi bạn XAML (thêm x: Uid các thuộc tính cho mọi phần tử có thể được bản địa hóa) và không có công cụ tốt nào từ MS để làm cho nó trở thành một giải pháp dễ dàng. Bản địa hóa resx cũ tốt dễ sử dụng hơn nhiều và tích hợp khá tốt với WPF chỉ với một vài thủ thuật (cụ thể là các phần mở rộng đánh dấu và/hoặc các thuộc tính đính kèm). Ngoài ra, bạn có thể dễ dàng thay đổi ngôn ngữ giao diện khi chạy nhờ hệ thống ràng buộc.
+1 cho bài viết của Rick Strahl. Cái này tốt. Trên thực tế, hệ thống ràng buộc không tuân theo nguyên tắc văn hóa của chuỗi giao diện người dùng hiện tại, nhưng bài viết này cho bạn biết cách khắc phục vấn đề này trong số những thứ khác. Sự lựa chọn tốt. –
+1 câu trả lời rất hữu ích. Cảm ơn bài viết – gyurisc
Bạn có thể sử dụng Tiện ích đánh dấu tùy chỉnh để tra cứu các giá trị được bản địa hóa và cập nhật chúng khi văn hóa giao diện người dùng thay đổi.
Dưới đây là một ví dụ về cách này có thể làm việc:
<Label x:Name="lblResxHelloWorldMarkupExtension1Value"
Content="{res:Res Id=HelloWorld,Default=Hello#}"
Margin="{res:Res Id=HelloWorldMargin,Default=10}"
Width="{res:Res Id=HelloWorldWidth,
ResourceSet=WpfClickOnce.MyFormRes, Default=50}" />
Ví dụ này được lấy từ tuyệt vời WPF Localization Hướng dẫn tác giả Rick Strahl và Michele Leroux Bustamante ở đây: http://wpflocalization.codeplex.com/. Tải xuống hướng dẫn từ trang web này, nơi kỹ thuật này được mô tả chi tiết ở dạng tài liệu và với một ứng dụng mẫu.
Một ưu điểm khác của phương pháp này là nó hoạt động trong nhà thiết kế.
Nếu bạn gần như quan tâm đến chủ đề này, bạn có thể xem thư viện của tôi mà tôi đang phát triển trên codeplex.
LocalizationLibrary: http://localizationlibrary.codeplex.com/
- 1. Ứng dụng dựa trên văn bản Java
- 2. Bật/tắt hộp văn bản dựa trên lựa chọn hộp kiểm trong WPF bằng cách sử dụng MVVM
- 3. Ứng dụng dựa trên plugin trong C#
- 4. Mã hóa tệp văn bản đơn giản dựa trên khóa
- 5. Giám sát các ứng dụng dựa trên web sản xuất
- 6. Tải các ứng dụng ajax dựa trên jQuery
- 7. Ứng dụng dựa trên Visual Studio mới có dựa trên năm 2008 hoặc 2010 không?
- 8. Cách sử dụng .NET 4 SplashScreen trong ứng dụng dựa trên lăng kính WPF?
- 9. Triển khai Chơi 2.1-SNAPSHOT ứng dụng dựa trên Heroku
- 10. Vị trí địa lý dựa trên Địa chỉ IP - PHP
- 11. Bất kỳ trình hiển thị Markdown dựa trên WPF nào?
- 12. dealloc sớm trong ứng dụng dựa trên ARC
- 13. WPF - Cách thanh lịch vô hiệu hóa và cho phép các điều khiển khác nhau dựa trên các trạng thái khác nhau của Mô hình sử dụng MVVM
- 14. Vô hiệu/Bật các tab trong UITabBarController trong ứng dụng dựa trên kịch bản
- 15. Có cách nào để bản địa hóa một ứng dụng trên các nền tảng khác nhau
- 16. Xcode 4.2 iOS SDK 5 Xem ứng dụng dựa trên
- 17. Cách tạo ứng dụng dựa trên chủ đề?
- 18. websphere 7 và (ứng dụng dựa trên) open-jpa 2
- 19. Chọn phần tử dựa trên văn bản
- 20. Định dạng địa chỉ dựa trên ngôn ngữ trong android
- 21. Trò chuyện văn bản dựa trên web?
- 22. Nhận văn bản dựa trên chiều cao
- 23. ứng dụng c/C++ dựa trên kiến trúc plug-in
- 24. Kiến trúc ứng dụng web dựa trên Akka
- 25. Ứng dụng web Thư viện dựa trên Python?
- 26. Chế độ xem dựa trên lớp VS Các chế độ xem dựa trên chức năng
- 27. Node.JS dựa trên ESB
- 28. Chuyển đổi Java Swing sang ứng dụng dựa trên web
- 29. Chuyển ứng dụng dựa trên Qt trong Android
- 30. Thực hiện PayPal trong ứng dụng dựa trên Java/Spring
Xét rằng View-Model là một mô hình của View, cá nhân tôi nghĩ rằng đây là nơi lý tưởng để đặt nội địa hóa.Điều này cũng sẽ cho phép giao diện người dùng Silverlight và WPF cục bộ từ cùng một kiểu xem. –
Tôi phải không đồng ý với Pete Davis. Bản địa hóa thuộc về chế độ xem chứ không phải chế độ xem. Mô hình xem không cần phải lo lắng về cách chế độ xem muốn hiển thị chính nó. Và, nội địa hóa chỉ là cách mà chế độ xem có thể tự thể hiện bằng các ngôn ngữ thay thế. –