2009-08-13 21 views
7

Tôi có nhãn trên trang được văn bản được bản địa hóa thông qua thuộc tính meta:resourcekey. Vấn đề tôi có là tôi muốn nó hiển thị văn bản khác nhau tùy thuộc vào quan điểm của một multiview họ đang ở trên.Đặt meta: resourcekey khi tải trang

Tôi đã thử thêm thuộc tính mặc dù label.Attributes.Add("meta:resourcekey", "label"), nhưng điều đó dường như không tải bất kỳ văn bản nào. Tôi đã thử nó trên PreRender và cùng một thỏa thuận. Thuộc tính xuất hiện khi tôi nhìn vào nguồn, nhưng không có văn bản nào được hiển thị.

Điều này có thể thực hiện được không? Tùy chọn khác là có 2 nhãn và thay đổi mức hiển thị khi tải trang, nhưng điều đó có vẻ như giải pháp ít thanh lịch hơn.

Cảm ơn.

+0

Chúng có phải là "chúng" trong "chế độ xem tổng quan của chúng hay không." tham khảo nhãn, người dùng hoặc cái gì khác? – Greg

Trả lời

3

Phương pháp cố gắng gán thuộc tính meta:resourcekey sẽ không hoạt động đơn giản vì chúng được xử lý đặc biệt bởi trình phân tích cú pháp trang và được thay thế trước khi mã vòng đời thực sự bắt đầu.

Nhưng meta:resourcekey về cơ bản là một thay thế khai báo cho mã tương đương với việc truy cập các tệp tài nguyên cục bộ. Nói cách khác:

<asp:Label ID="MyLabel" meta:resource-key="MyResourceKey" /> 

tương đương với:

<asp:Label ID="MyLabel" Text="<%$ Resources: myResXFile, MyResourceKey %>" /> 

là tương đương với các mã:

MyLabel.Text = Resources.MyResXFile.MyResourceKey; 

Dường như bạn đã đối phó với nhãn của bạn trong mã nếu bạn đang cố gán các thuộc tính cho nó. Tại sao không đặt giá trị của nó trong mã?

+0

Điều đó không hoàn toàn đúng, bởi vì phương pháp đầu tiên sử dụng thuộc tính meta, sẽ ngầm ràng buộc tập các dòng "Key.Property" trong tệp tài nguyên. Hai phương thức thứ hai yêu cầu xác định rõ ràng các thuộc tính trong đó các khóa áp dụng. –

7

Tôi nghĩ rằng những gì bạn muốn cho nội địa hóa theo chương trình trong mã đằng sau cũng đơn giản như thế này:

ctrl.Text = (string)GetLocalResourceObject(“myCtrlKey.Text”); 
ctrl.AnotherAttribute = (string)GetLocalResourceObject(“myCtrlKey.AnotherAttribute”); 

Sử dụng LocalResource có nghĩa là cho một trang gọi là MyPage.aspx, bạn đã tạo ra một tập tin tài nguyên được gọi là MyPage.aspx .resx và/hoặc MyPage.aspx. {culturename} .resx trong thư mục đặc biệt App_LocalResource.

Nếu bạn thích tài nguyên toàn cầu thay vì địa phương, sử dụng thư mục đặc biệt App_GlobalResource tổ chức một tập tin tài nguyên được gọi là MyResourceFileName.resx và gọi:

ctrl.Text= (string)GetGlobalResourceObject(“MyResourceFileName”, “myGlobalKey”); 

copied from a blog about localization in the code behind

- PS Lý do mà Attributes.Add ("meta: resourcekey", "label") không hoạt động là "meta: resourcekey" không phải là thuộc tính thực sự và việc sử dụng nó trong aspx không thực sự là đánh dấu aspx hợp lệ - thay vì đó là tiền xử lý chỉ thị rằng cau ses trình biên dịch để biến nó thành một danh sách dài hơn các cặp thuộc tính/giá trị thuộc tính, dựa trên những gì bạn đã đặt trong tệp tài nguyên của mình.

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