2009-08-24 29 views
6

Chúng tôi có một tệp tài nguyên với nhiều chuỗi dịch được sử dụng các vị trí khác nhau trong ứng dụng của chúng tôi. Có cách nào tốt hơn để ràng buộc ví dụ như văn bản của một nút đến một chuỗi nhất định không?C#: Cách liên kết văn bản của nút winforms với tài nguyên

Hiện nay chúng tôi thường chỉ làm một cái gì đó như thế này trong các nhà xây dựng, trong một xử lý sự kiện Load hoặc trong một phương pháp được gọi bằng một trong những:

someButton.Text = CommonTexts.SomeString; 
someMenuItem.Text = CommonTexts.SomeOtherString; 

Có cách nào tốt hơn để làm điều đó? Có lẽ trong nhà thiết kế? Hay đây là cách được khuyến khích để làm điều đó?


Chỉ để cho bạn biết cách chúng tôi thực hiện bản dịch thực tế: Chúng tôi có một dự án Thư viện lớp chỉ chứa tệp resx. Các tệp resx chính được viết bằng tiếng Anh (tất nhiên). Sau đó, chúng tôi mở các tệp cơ sở resx đó trong một ứng dụng có tên là ResEx nơi chúng tôi (hoặc một người nào khác) thực hiện bản dịch sang các ngôn ngữ khác. Khi biên dịch Visual Studio tự động tạo ra các hội đồng cho mỗi ngôn ngữ được sử dụng tự động tùy thuộc vào bộ văn hóa hiện tại. Điều này làm việc khá tốt, vì vậy tôi không thực sự cần thông tin về cách làm bản dịch và như vậy (mặc dù tôi luôn luôn tò mò để cải tiến tất nhiên). Những gì tôi hỏi là nếu có một cách tốt hơn để nhận được những chuỗi dịch từ hội đồng tài nguyên và vào tất cả các thuộc tính khác nhau Text.

+0

Re, chỉnh sửa: Câu hỏi truy cập là: tại sao bạn không sử dụng hệ thống FormLoad mặc định? Nó được xây dựng trong và vô hình. –

+1

Bởi vì tôi đã tự hỏi nếu có một cách tốt hơn. – Svish

Trả lời

3

Bạn có thể làm:

using System.Resources; 
using System.Reflection; 

Assembly assembly = this.GetType().Assembly; 
resman = new ResourceManager("StringResources.Strings", assembly); 
btnButton.Text = resman.GetString("ButtonName"); 
+3

Điều đó sẽ giống như cách tôi đã làm, ngoại trừ phức tạp hơn rất nhiều: p – Svish

+0

@Thomas: Tôi không nghĩ rằng áp phích có nghĩa là ràng buộc như trong "ràng buộc dữ liệu". – MusiGenesis

+0

Trong VS2008 (và có lẽ 2005) trình quản lý tài nguyên mặc định bạn nhận được từ việc thêm tệp tài nguyên vào dự án của bạn sẽ hiển thị các thuộc tính được đặt tên cho giá trị khóa, do đó sẽ chỉ là "btnButton.Text = resman.ButtonName", tiết kiệm lo lắng về lỗi chính tả chuỗi. –

0

cách của bạn là cách tốt nhất để làm điều này nếu bạn có phát triển những người không thông thạo cá nhân trong các ngôn ngữ bạn đang dịch ứng dụng của bạn vào. Tôi đã làm điều này trước đây với một ứng dụng tiếng Anh đã được dịch sang tiếng Tây Ban Nha, Bồ Đào Nha và Trung Quốc (tôi chỉ nói một trong những điều này một cách trôi chảy). Các hình thức ban đầu đều được tạo bằng tiếng Anh và trong sự kiện Tải biểu mẫu, mã được lặp qua mọi điều khiển và tìm kiếm thuộc tính Văn bản của mỗi điều khiển trong bảng tính bản dịch và thay thế bằng bản dịch phù hợp.

Cách tích hợp quốc tế hóa biểu mẫu (về cơ bản là biến thể của thừa kế biểu mẫu) giả định rằng người lập trình thông thạo ngôn ngữ bạn cần dịch, rất nhiều thời gian và yêu cầu bạn để nhập thủ công tất cả các giá trị văn bản đã dịch cho từng biểu mẫu và từng ngôn ngữ. Nó cũng làm cho tệp nhị phân của bạn lớn hơn (có khả năng lớn hơn nhiều), vì nó thêm tệp .resx cho mỗi biểu mẫu cho từng ngôn ngữ mà bạn hỗ trợ.

0

Hãy thử điều này:

someButton.DataBindings.Add ("Text", CommonTexts, "SomeString");

1

Có một công cụ tốt được gọi là LingoBit Localizer thực hiện công việc cho phần thời gian cần thiết để xây dựng tất cả các tệp tài nguyên.

Bạn không phải quan tâm đến các ngôn ngữ khác trong khi đang trong quá trình phát triển, bạn chỉ cần mã và đặt thuộc tính như bạn làm nếu bạn đang lập trình cho một phần mềm không phải là ngôn ngữ. Sau khi bạn đã hoàn tất, hoặc bất cứ khi nào bạn muốn, bạn chạy LingoBit Localizer qua ứng dụng DLL hoặc Windows Form của bạn. Thao tác này sẽ nhận các chuỗi có thể hiển thị của người dùng vào lưới cho bạn trong GUI của nó. Bây giờ, có lẽ một dịch giả chuyên nghiệp có thể sử dụng để dịch các từ nếu các lập trình viên của bạn không biết ngôn ngữ mà ứng dụng phải được dịch. Sau đó, bạn chỉ cần lưu dự án khi bạn hoàn tất. Điều này sẽ tạo ra một tập tin DLL mà bạn chỉ cần thêm vào thư mục triển khai nhị phân của bạn, sau đó ứng dụng của bạn sẽ tự động thiết lập chính nó sang ngôn ngữ phù hợp tùy thuộc vào thông tin văn hóa hiện tại mà trên đó ứng dụng. được cài đặt hoặc như vậy. Điều này tiết kiệm rất nhiều thời gian lập trình và đau đầu.

Hy vọng điều này sẽ giúp mặc dù đây không phải là giải pháp dựa trên tài nguyên.

+0

Đó là một cách tiếp cận hợp lý cho vấn đề này. Nếu họ chỉ hỗ trợ tiếng Bồ Đào Nha ... – MusiGenesis

+0

Bạn cũng có thể sử dụng VisualLocalize. Chúng tôi sử dụng công cụ đó rất thường xuyên. Điều tốt ở đây là sau này bạn có thể kiểm tra tất cả các hộp thoại nếu văn bản đã dịch khớp với các điều khiển và nếu bạn không thể thay đổi kích thước của điều khiển bằng ngôn ngữ này và kích thước mới sẽ được lưu trữ sang một bên văn bản được bản địa hóa trong một hội đồng sattelite. – PVitt

1

Điều này sẽ trích xuất giá trị của Từ khóa chủ và điền vào hộp Text1.

Text1.Text= Resource.Home.ToString(); 
3

Tôi hiểu, đó là một câu hỏi cũ, nhưng vẫn còn, tôi gặp vấn đề tương tự (VS 2010) và một trong những liên kết đầu tiên trong google là chủ đề này.

Để di chuyển tất cả văn bản sang tệp tài nguyên biểu mẫu - bạn cần đặt thuộc tính có thể sở hữu Localform thành True. Và đó là nó. :) (c) Cap. O.

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