Tôi có một ứng dụng WinForms mà tôi muốn dịch sang nhiều ngôn ngữ. Tuy nhiên, tôi không có bất kỳ kinh nghiệm nào với việc bản địa hóa một ứng dụng WinForms, và tôi thấy thông tin rất mâu thuẫn về chủ đề này.Địa phương hóa thích hợp của ứng dụng WinForms
Về cơ bản, những gì tôi muốn là:
- Trong mã nguồn, tôi muốn chỉ có một tập tin cho mỗi ngôn ngữ
- tập tin này được biên dịch vào các ứng dụng chính trên biên soạn - không lắp ráp vệ tinh hoặc các tập tin dữ liệu bên ngoài sau khi tạo ứng dụng
- Người dùng có thể chọn ngôn ngữ, tôi không cần/muốn tự động phát hiện dựa trên hệ điều hành
- Chủ yếu nên chứa chuỗi và int, nhưng cũng là CultureInfo
Hầu hết các giải pháp tôi đã thấy hoặc có một tệp .resx trên mỗi biểu mẫu và/hoặc các cụm vệ tinh ngoài.
Tôi có phải tự cuộn của riêng mình không? Hoặc là có cái gì đó trong khuôn khổ đã?
.net Framework 3.5 SP1 nếu vấn đề đó quan trọng.
Chỉnh sửa: Đối với hầu hết các phần, Visual Studio đã cung cấp hỗ trợ cho những gì tôi muốn, nhưng có hai vấn đề. Khi tôi đặt Form.Localizable thành true Tôi có hỗ trợ thiết kế đẹp, nhưng điều này tạo ra một resx cho mỗi hình thức. Ý tưởng ghi đè thủ công nó trong InitializeComponent không thành công vì mã được thiết kế riêng của nó sẽ thường xuyên bị ghi đè. Về mặt lý thuyết, tôi chỉ muốn a) ghi đè lên việc tạo ra ComponentResourceManager để trỏ nó vào resx toàn cục của tôi và b) thay đổi cuộc gọi đến ApplyResources thành quá tải lấy một tham số thứ ba là CultureInfo.
Có vẻ như tôi phải thêm lệnh gọi hàm vào hàm dựng của tôi mà được gọi sau InitializeComponent() và ghi đè hành vi của nó. Điều đó có vẻ khủng khiếp không hiệu quả, nhưng Visual Studio là đúng khi nó cảnh báo về việc chạm vào InitializeComponent. Tại thời điểm này, tôi thực sự đang cuộn Khung nội địa hóa WinForms của riêng tôi ...
Không phải như vậy chắc chắn nếu bạn đang yêu cầu một 'thích' của cho một cách địa phương hóa 'rất tùy chỉnh'. –
Có gì sai với phương pháp "một .resx trên mỗi hình thức, một vệ tinh lắp ráp cho mỗi ngôn ngữ và lắp ráp"? Đó thực sự là cách .NET làm việc - nếu bạn không thích điều đó, bạn sẽ phải tự mình cuộn nhiều mã, tôi sợ. –
Sai nghĩa là "một .resx trên mỗi biểu mẫu" (+ ít nhất một đối với tất cả nội dung không phải là một phần của biểu mẫu) tăng theo cấp số nhân thay vì tuyến tính và một assembly cho mỗi ngôn ngữ chỉ là sự lộn xộn bổ sung. chỉ được phép với các bản phát hành mới của ứng dụng. Ngoài ra, hãy xem http://redsolo.blogspot.com/2006/11/localisation-gone-wrong-in-c.html –