2012-11-13 30 views
7

Tôi đang làm việc trên một dự án nơi các chuỗi được bản địa hóa sẽ được chèn sau vào trang web/ứng dụng ASP.NET (MVC4) trực tiếp. Cách chúng ta lên kế hoạch để đạt được điều này (cho các thông báo xác thực, v.v.) là lấy các chuỗi từ các máy khách, đặt chúng trong một tệp .resx, biên dịch tệp .resx này thành tệp .resources và sau đó thành một .dll. Cuối cùng, tệp .dll này được đặt trong thư mục ngôn ngữ có liên quan trên trang web trực tiếp. Tuy nhiên, tệp .dll được tạo theo cách thủ công này hiện không được ứng dụng thu thập. Thay vào đó nó rơi trở lại ngôn ngữ mặc định .dll. Mặt khác, nếu tệp .resx được biên dịch qua Visual Studio (2012) thì tệp .dll sẽ được ứng dụng tải lên một cách vui vẻ và nó hiển thị văn bản được bản địa hóa từ nó.Tạo tệp chuỗi tài nguyên theo cách thủ công không hoạt động với Ứng dụng

Tôi đoán vấn đề nằm trong cách tôi tạo .dll theo cách thủ công, mặc dù tôi không thể tìm thấy bất kỳ điều gì sai trái với nó. Đây là những gì tôi chạy trong dòng lệnh giao diện điều khiển:

resgen Strings.fr-FR.resx Strings.fr-FR.resources 

sau đó,

al /t:lib /culture:fr-FR /embed:Strings.fr-FR.resources /out:MyApplication.resources.dll 
+1

bạn có đang ký hợp đồng mạnh mẽ không? – oasten

+0

Đã thử cả hai, có và không có ký kết mạnh mẽ. Cả hai dường như không hoạt động. –

+1

đâu là resx gốc của bạn trong giải pháp? là nó trong một hội đồng riêng biệt từ dự án MVC của bạn hoặc trong dự án MVC? – oasten

Trả lời

3

Nó có thể là vì không gian tên được sử dụng trong các DLL tài nguyên Pháp-cục bộ khi bạn đang tạo ra nó mà là khác nhau từ không gian tên được ứng dụng của bạn sử dụng cho các tệp tài nguyên.

Bạn phải đổi tên tệp tài nguyên của mình từ Strings.fr-FR.resources thành MyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources.

Theo mặc định, tệp tài nguyên được đặt trong thư mục Thuộc tính. Điều đó có nghĩa là bạn có thể truy cập chuỗi được bản địa hóa bằng cách sử dụng tên đủ điều kiện MyApplication.Properties.Resources.MyString.

Nếu ứng dụng của bạn được đặt tên MyApplication và các tập tin tài nguyên của bạn đều nằm trong thư mục Properties, tạo tập tin tài nguyên của mình theo cách này:

resgen Strings.fr-FR.resx MyApplication.Properties.Resources.fr-FR.resources 

Sau đó, tạo ra DLL theo cách này:

al /t:lib /Culture:fr-FR /embed:MyApplication.Properties.Resources.fr-FR.resources /out:MyApplication.resources.dll 

Bây giờ khi bạn đặt nó trong thư mục fr-FR của bạn trong thư mục bin của ứng dụng của bạn, nó sẽ được nhận ra.

Hãy xem qua tệp kê khai của hội đồng bạn đã tạo trước đó và tệp hiện được tạo bằng ildasm.exe. Bạn sẽ thấy trong trường hợp thứ hai bạn có dòng sau .mresource public 'MyApplication.Properties.Resources.fr-FR.resources' khi trong trường hợp đầu tiên nó phải là một cái gì đó như thế .mresource public 'Strings.fr-FR.resources'. Vì ứng dụng của bạn tìm kiếm các chuỗi đã bản địa hóa vào không gian tên 'MyApplication.Properties', nó không thể tìm thấy nó ... Tất nhiên, điều chỉnh 'MyApplication.Properties.Resources' thành bất kỳ thứ gì được sử dụng trong ứng dụng của bạn (có thể là 'MyApplication.Localization .Dây').

+0

Thư mục thuộc tính không áp dụng cho chúng tôi nhưng có đường dẫn phải được xem xét khi tạo tệp tài nguyên bằng cách sử dụng resgen.exe. Cảm ơn bạn! –

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