2012-08-17 29 views
11

Tôi vừa xem xét hành vi kỳ lạ nhất trong Visual Studio 2010 trong khi làm việc với các tệp tài nguyên Resx và tôi không thể bao quanh đầu .Visual Studio 2010 không tạo ra mã tài nguyên (Resx) thiết kế nếu tệp được bản địa hóa

Vấn đề là như sau: Visual Studio sẽ không tạo ra các tập tin designer.cs cho một tập tin tài nguyên với một tên cục bộ (như resource.fr.resx), nhưng nó hoạt động tốt cho các tập tin khác với những cái tên đơn giản (như resource.resx).

Dưới đây là một bản chụp của thiết lập hình ảnh của tôi dự án phòng thu:

enter image description here

Như bạn có thể thấy tôi chỉ cần làm một thử nghiệm đơn giản với các tập tin 3 nguồn:

  • test.resx
  • test2.resx
  • test.fr.resx

designer.cs tệp cho test.resxtest2.resx được tạo tốt. Tuy nhiên test.fr.designer.cs được tạo nhưng luôn trống, bất kể tôi làm gì.

Tôi đã kiểm tra gấp đôi và gấp ba lần: thuộc tính công cụ tùy chỉnh được đặt chính xác cho tệp được bản địa hóa. Tất cả các thuộc tính đều giống nhau trên tất cả các tệp (tôi đang sử dụng PublicResxFileCodeGenerator, nhưng tôi nhận được cùng một hành vi nếu tôi đặt công cụ sửa đổi truy cập thành nội bộ và sử dụng ResxFileCodeGenerator).

Lưu ý: Tôi đã nhận thấy rằng khi tạo tệp tài nguyên, Visual Studio thường mặc định công cụ sửa đổi truy cập thành "Nội bộ". Tuy nhiên, khi tạo một tệp tài nguyên được bản địa hóa (resource.fr.resx), nó mặc định là "Không tạo mã". Chỉ cần thấy rằng thú vị để lưu ý vì nó chứng minh rằng Visual Studio là điều trị các tập tin địa phương khác nhau vì một lý do nào đó.

-> Có điều gì tôi thiếu ở đây không? Tôi sẽ đánh giá cao nếu có ai đó có một số cái nhìn sâu sắc về chủ đề này, điều này là lái xe cho tôi điên.

Trả lời

19

Trong khi tôi chưa xem xét vấn đề cụ thể này, tôi đã gặp nhiều sự cố khác với tệp ".resx". Visual Studio đôi khi lỗi (xử lý ".resx" tập tin trong số những thứ khác), và tôi đã chính thức báo cáo một số trong số này để MSFT (vì nó ảnh hưởng đến chương trình nội địa hoá thương mại của riêng tôi). Trong mọi trường hợp, bạn không nên đặt tên mọi thứ theo cách này. Nó có hiệu quả vi phạm các quy tắc nội địa hoá của MSFT. Các tệp ngôn ngữ mặc định thường không có mã ngôn ngữ được nhúng và có thể bị nghẹn vì lý do này. Tôi cần phải điều tra, nhưng những gì bạn nên làm là tạo ra "Test.resx", trong đó có một "Designer.cs" tập tin, và sau đó "Test.fr.resx", mà không. Tất cả các chuỗi ngôn ngữ mặc định sau đó được đặt trong "Test.resx" và các chuỗi tiếng Pháp tương ứng trong "Test.fr.resx". Trong mã, bạn sau đó truy cập vào tên gõ mạnh được tìm thấy trong "Test.Designer.cs", và chuỗi bạn lấy lại sẽ là chuỗi ngôn ngữ mặc định trừ khi bạn đặt "System.Threading.Thread.CurrentThread.CurrentUICulture" thành "fr" . Sau đó bạn sẽ lấy lại phiên bản tiếng Pháp của chuỗi từ "Test.fr.resx", trừ khi nó không được tìm thấy ở đó (không có bản dịch), trong trường hợp đó bạn sẽ lấy lại chuỗi dự phòng từ "Test.resx" (tức là, chuỗi ngôn ngữ mặc định). Đây là cách mô hình trung tâm và nói về cơ bản hoạt động.

+0

Tôi đoán tôi đã nhầm lẫn cách thức mà nó phải làm việc sau đó. Tuy nhiên, người quản lý tài nguyên không tìm thấy các chuỗi được bản địa hóa của tôi, đó là điều khiến tôi phải điều tra toàn bộ điều này. Nhưng điều này có thể là vì một lý do khác.Tôi sẽ điều tra lại theo giả định rằng không có gì sai với các tệp tài nguyên. – Aerendel

+0

Ok, hãy thử nó theo cách tôi mô tả tuy nhiên và nó sẽ làm việc. – Larry

+1

Thật vậy, tôi không hiểu rằng khung công tác chỉ cần tạo mã cho tệp tài nguyên chính đã dẫn tôi đi sai hướng. Cảm ơn bạn đã giải thích và chỉ ra điều đó! Visual Studio thực sự chocke vào việc tạo mã cho một tệp theo quy ước đặt tên được bản địa hoá, điều này thực sự có ý nghĩa. Mọi thứ đang hoạt động ngay bây giờ sau khi thay đổi các tệp đã bản địa hóa thành "Không có mã gen". Cảm ơn rất nhiều! – Aerendel

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