2012-10-04 35 views
10

Tôi có 2 tệp tài nguyên, một tệp có tiếng Anh và một ngôn ngữ khác. Khi tôi gọiPhương thức ResourceManager.GetString() trả về chuỗi sai từ các assembly khác nhau

ResourceManager.GetString("Hello") 

từ tệp .Designer.cs nó luôn trả về bản dịch tiếng Anh. Tôi đã kiểm tra ngôn ngữ và ngôn ngữ của tôi, v.v. và mọi thứ đều chính xác.

nó trả về các chuỗi được dịch đúng từ hội đồng chính của tôi, nhưng từ các hội đồng được tải, nó luôn trả về tiếng Anh.

+0

Làm thế nào bạn đã thiết lập ngôn ngữ? Nó nên được thiết lập bằng cách sử dụng UICulture. Bạn đã làm điều này à? –

+0

Bạn có thể đăng mã bạn sử dụng để khởi tạo ResourceManager không? – tranceporter

+0

Có ngôn ngữ được đặt, tất cả những gì là chính xác. Nó chỉ ra rằng có nó như là một nguồn lực nhúng là vấn đề là gì. Dường như bỏ qua ngôn ngữ và tải tiếng Anh. Có nó như là một tài nguyên giải quyết điều này và ngôn ngữ chính xác được nạp. chỉ xảy ra với các hội đồng nhúng, điều tra tại sao bây giờ. – pengibot

Trả lời

9

Đây là những gì đang diễn ra. Tôi đã có một hội đồng với một số tập tin tài nguyên dịch thuật. Đây là tất cả các tài nguyên được nhúng.

Khi tôi biên soạn bản lắp ráp, nó đã đặt tiếng Anh mặc định bên trong .dll của nó. Đối với các ngôn ngữ khác, nó đã tạo thư mục, fr, da, de, v.v. với các ngôn ngữ.

Tôi cũng phải di chuyển tất cả những thứ này nếu tôi muốn chúng được chọn bởi ứng dụng chính đang tải trong tất cả các hội đồng khác. Suy nghĩ như tôi đã nói với hội đồng rằng họ đã được tất cả các tập tin tài nguyên nhúng nó thực sự sẽ nhúng chúng!

Tôi hiện có AssemblyLoader tải tất cả các .dll cần thiết khi không thể tìm thấy chúng từ vị trí hiện tại của chúng, đóng gói nó sẽ được xác định xem tôi có muốn bao gồm tất cả ngôn ngữ hay không. Nhiều công việc hơn tôi đã hy vọng, nhưng cuối cùng cũng được giải quyết.

Bất kỳ ai có bất kỳ câu hỏi nào, vui lòng hỏi.

+0

Làm thế nào chính xác bạn đã làm để giải quyết này? Tôi đang gặp vấn đề chính xác này. –

+0

bạn đã đặt NeutralLanguage của ứng dụng chưa? có lẽ đó là toàn bộ vấn đề của bạn – batmaci

2

Không chắc chắn làm thế nào bạn đang instantiating ResourceManager, nhưng khi bạn gọi ResourceManager.GetString(), bạn có thể chỉ định CultureInfo, giúp bạn lấy chuỗi trong miền địa phương chính xác. Vì vậy, bạn có thể làm điều gì đó như:

var string = ResourceManager.GetString("ResourceKey", new CUltureInfo("en-GB")); 

Điều này sẽ đảm bảo rằng khóa chuỗi là từ tệp Tài nguyên cụ thể en-GB.

+0

Vấn đề của tôi là các tệp tài nguyên đó với các bản dịch nước ngoài không được tải. Phát hiện điều này là bởi vì nó đã được đóng gói chúng vào dll riêng biệt bên trong mỗi thư mục ngôn ngữ mà loại có ý nghĩa, nhưng nghĩ rằng nó sẽ có nhúng chúng trong .dll của tôi ở nơi đầu tiên – pengibot

2

Quá tải đầu tiên của GetString, ResourceManager.GetString(string), sử dụng CurrentUICulture của luồng hiện tại (Thread.CurrentThread.CurrentUICulture).

Đề cập đến MSDN: -

Tài nguyên được trả về được bản địa hoá cho văn hóa giao diện người dùng của thread hiện hành, theo quy định của bất động sản CurrentUICulture.

Trong chủ đề nền, không giả định CurrentUICulture của luồng giống với CurrentUICulture của luồng chính (hoặc UI).

Cách tốt hơn để truy cập vào tài nguyên từ một sợi nền là sử dụng giống như sau để có được những chuỗi cục bộ chính xác: -

var localString = Properties.Resources.ResourceManager.GetString("ResourceKey", CultureInfo.CurrentCulture); 
0

Trong bài toán trường hợp của tôi là với resx-file.dây nguồn không hợp lệ có định dạng không đúng trong resx-file:

<data name="HeaderColumnsCountGreaterThenDataColumnsCountTestData" xml:space="preserve"> 
    <settings> 
    Month Date Department 
    01.05.2015 01.05.2015 OIR 
    01.05.2015 02.05.2015 OIR 
    </settings> 
</data> 

đúng định dạng:

<data name="HeaderColumnsCountGreaterThenDataColumnsCountTestData" xml:space="preserve"> 
    <value> 
    Month Date Department 
    01.05.2015 01.05.2015 OIR 
    01.05.2015 02.05.2015 OIR 
    </value> 
</data> 
Các vấn đề liên quan