2012-01-09 24 views
6

Tôi đã tìm thấy một vài chủ đề tương tự, nhưng tôi không nhận được câu trả lời mà tôi đang tìm kiếm.Tải tất cả các tài nguyên bản địa hóa khi khởi động

Tôi chỉ đang cố gắng quốc tế hóa trước khi bắt đầu dự án "nghiêm túc hơn" (WinForms). Vì vậy, hiện tại trong ứng dụng thử nghiệm nhỏ của tôi, tôi đã giải quyết nội địa hóa bằng cách sử dụng các cụm vệ tinh (các tệp dll ngôn ngữ) và tôi điền vào các trường văn bản của điều khiển bằng ResourceManager và thay đổi ngôn ngữ được giải quyết bởi Thread.CurrentThread.CurrentCulture & Thread.CurrentThread. Phương pháp hiện tại.

CultureInfo ci = new CultureInfo(lang); 
Thread.CurrentThread.CurrentCulture = ci; 
Thread.CurrentThread.CurrentUICulture = ci; 

this.button1.Text = Resources.LocTest.String1; 

Tôi muốn tải tất cả các văn bản từ các tài nguyên trên các chương trình khởi động ban đầu, không chỉ là hình thức chính nhưng tất cả trong số họ (cũng trên những hình thức, đó không phải khởi tạo nào)! Tôi có thể thực hiện điều này bằng cách nào? Thủ tục này có khả thi không?

Tôi nhận được một số lời khuyên rằng tôi nên đơn giản hóa toàn bộ quá trình bản địa hóa, bằng cách đặt thuộc tính "có thể bản địa hóa" thành đúng và thực hiện các bản dịch. Và hầu hết các hướng dẫn đều theo cách này.

Có ai có ý tưởng nào không, phương pháp nào tôi nên sử dụng?

Cảm ơn trước!

Tôi rất bối rối với nội địa hóa ...

+1

Về cơ bản, bạn nên luôn tuân theo các phương pháp hay nhất và không cố gắng phát minh lại bánh xe (nhàm chán).Vì vậy nó là một ý tưởng tốt để sử dụng phương pháp tiếp cận tiêu chuẩn, đó là chuyển đổi Localizable thành sự thật và để cho Visual Studio để chăm sóc cho việc tạo ra quản lý tài nguyên và các công cụ khác. Bạn cũng không nên ** chỉ định các nền văn bản luồng, sẽ được chỉ định tự động, nếu không, cơ chế thu gọn được xây dựng sẵn sẽ không hoạt động. –

+1

Đối với tải tài nguyên, mọi thứ đều có thể cho những người cố gắng. Câu hỏi duy nhất là tại sao trên thế giới bạn muốn làm điều đó? –

+0

Cảm ơn câu trả lời của bạn! Tôi hiểu rằng bạn đã viết ("không cố gắng tái tạo lại bánh xe")! Tôi cố gắng thực hiện theo các phương pháp hay nhất. Trên thực tế, lý do duy nhất tôi muốn sử dụng phiên bản dll tài nguyên này, người dùng đó phải khởi động lại ứng dụng khi thay đổi ngôn ngữ ... –

Trả lời

2

hãy sử dụng phương pháp thứ hai bạn đã đề cập.

Tôi nhận được một số lời khuyên rằng tôi nên đơn giản hóa toàn bộ quá trình bản địa hóa, bằng cách đặt thuộc tính "có thể bản địa hóa" thành đúng và thực hiện các bản dịch. Và hầu hết các hướng dẫn đều theo cách này.

Vì đây là cách dự định về cách Microsoft nghĩ rằng việc bản địa hóa nên được thực hiện trong ứng dụng winforms. http://msdn.microsoft.com/en-us/library/y99d1cd3%28v=vs.90%29.aspx

Một vấn đề với giải pháp đầu tiên của bạn: Làm cách nào để duy trì văn bản bằng ngôn ngữ khác sẽ được hiển thị chính xác?
Đó là một trong những vấn đề xảy ra, Microsoft đã biết. Với một công cụ nhỏ được tìm thấy trong SDK được gọi là: WINRES.exe bạn có thể thấy các biểu mẫu được thiết kế và viết bản dịch cho chúng. http://msdn.microsoft.com/en-us/library/8bxdx003%28v=vs.90%29.aspx

Nếu bạn muốn thay đổi ngôn ngữ trên thời gian chạy và cập nhật tất cả các hình thức bài viết này có thể là một gợi ý dành cho bạn: http://msdn.microsoft.com/en-us/magazine/cc163609.aspx#S9
Những dòng này đưa ra một giải thích update howto bạn UI:

Dim crm As ComponentResourceManager 
crm = New ComponentResourceManager(GetType(Main)) 
crm.ApplyResources(cmdAddCustomer, cmdAddCustomer.Name) 
crm.ApplyResources(mnuFile, mnuFile.Name) 
crm.ApplyResources(mnuFileAddCustomer, mnuFileAddCustomer.Name) 

cuối cùng 3 dòng mã này có thể được tìm thấy trong mỗi hình thức (localizable = true) trong tập tin thiết kế.
Vì vậy, bạn có thể chỉ định giao diện cho phương thức cập nhật, mọi biểu mẫu sẽ triển khai, triển khai giao diện và sau khi thay đổi ngôn ngữ lặp qua tất cả các biểu mẫu và gọi phương thức này.

Hy vọng điều này có thể giúp bạn ...

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