2011-01-31 31 views
9

có vẻ như có một số phương pháp tiếp cận về cách triển khai nhiều ngôn ngữ trong một ứng dụng WPF. Nhưng tôi muốn biết thêm một số thông tin về phương pháp tôi nên sử dụng với các yêu cầu sau:Phương pháp tiếp cận cho một ứng dụng WPF đa ngôn ngữ

  • Đây là một ứng dụng PRISM, vì vậy một số mô-đun độc lập (assembly) làm việc cùng nhau. Tôi muốn rằng mỗi hội đồng có bản dịch riêng của nó về các yếu tố giao diện người dùng.
  • Tôi cần một phương pháp đơn giản, không có công cụ cần thiết để tạo ra thứ
  • vẫn nên có thể sử dụng hỗn hợp để thiết kế giao diện người dùng
  • Tùy chọn có thể chuyển đổi ngôn ngữ mà không cần khởi động lại ứng dụng (không phải là một dealbreaker)

Ai đó có thể tư vấn cho tôi về cách đạt được điều này không?

Cảm ơn!

Trả lời

3

Trong khi đó tôi thấy một dự án mã nguồn mở hoạt động thực sự tốt: http://wpflocalizeextension.codeplex.com . Nó chỉ thêm một tham chiếu đến dll, thêm các tài nguyên với các bản dịch và sử dụng nó trong XAML. Nó hoạt động trong 5 phút. Tôi có thể thêm nhiều tài nguyên cho các mô-đun riêng lẻ; và nó hoạt động tốt trong thiết kế studio và pha trộn trực quan. Và, ngôn ngữ có thể được thay đổi khi đang bay. Đáp ứng yêu cầu của tôi :)

+0

chào bạn. Tôi đang cố gắng để tích hợp WPFLocalizeExtension vào ứng dụng lăng kính của tôi quá. Nhưng ứng dụng của tôi không thể giải quyết tài nguyên khi chạy. Tại thời điểm thiết kế nó là tốt.Bạn có một ví dụ làm việc tôi có thể có một cái nhìn tại? Cảm ơn bạn. –

+0

Bạn đã định cấu hình các tệp tài nguyên là 'tài nguyên được nhúng'? –

+0

yep. đặt công cụ sửa đổi truy cập để xuất bản quá, –

4

Một cách tiếp cận phổ biến là để ràng buộc các tài sản văn bản của TextBlocks bạn/nhãn vv .. đối với một số tài sản trên một nguồn lực nội địa tĩnh định nghĩa:

<Label Content="{Binding Source={x:Static loc:LanguageContext.Instance}, 
         Path=Dictionary, Mode=OneWay, 
         Converter={StaticResource languageConverter}, 
         ConverterParameter=TextId}" /> 

tức LanguageContext.Instance cho thấy một từ điển thông qua một từ điển tài sản, Bộ chuyển đổi sử dụng ConverterParameter đã cho để tra cứu văn bản được xác định qua TextId.

Đây là một cách tiếp cận cồng kềnh và sẽ không đáp ứng tất cả các yêu cầu của bạn.

Phương pháp tốt hơn là xác định tiện ích đánh dấu của riêng bạn để thực hiện loại logic này. Có một vài giải pháp tôi đã thấy trên web, bài viết này CodeProject đánh giá cao:

http://www.codeproject.com/KB/WPF/realtime_multilingual.aspx

Và một giải pháp tương tự ở đây cung cấp Blend, on-the-fly thay đổi ngôn ngữ, vì vậy có lẽ là một tốt sự lựa chọn dành cho bạn:

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx

với ví dụ trên bạn xác định một tài sản gắn liền trong đó xác định chìa khóa của mục dịch, và sử dụng Dịch mở rộng đánh dấu để xác định các tính chất đó được dịch.

Chú ý: nó không chỉ là văn bản mà đã được dịch ở đây, thường bạn phải thay đổi màu sắc/đồ họa vv ...

+0

Cảm ơn, liên kết thứ hai có vẻ là một cách tiếp cận tốt đẹp, nhưng tôi phải điều chỉnh nó vì hiện tại có vẻ như bạn chỉ có thể đăng ký tài nguyên một lần cho mỗi vùng; và tôi sẽ cần nhiều tài nguyên cho mỗi khu vực vì mỗi mô-đun sẽ đăng ký tài nguyên của riêng mình. Tôi sẽ xem xét xem nó có khả thi không! –

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