2009-08-13 17 views
7

Mam etykietę na stronie, która pobiera zlokalizowany tekst za pomocą atrybutu meta:resourcekey. Mam problem polegający na tym, że chcę, aby wyświetlał inny tekst w zależności od tego, w którym widoku multiview się znajdują.Ustawienie meta: resourcekey na ładowanie strony

Próbowałem dodać atrybut, ale label.Attributes.Add("meta:resourcekey", "label"), ale to nie wydaje się załadować żadnego tekstu. Próbowałem go na PreRender i tej samej transakcji. Atrybut pojawia się, gdy patrzę na źródło, ale nie wyświetla się żaden tekst.

Czy można to zrobić? Inną opcją jest posiadanie 2 etykiet i zmiana widoczności przy ładowaniu strony, ale wydaje się to mniej eleganckim rozwiązaniem.

Dzięki.

+0

Czy "są" w widoku wielu kanałów, na których się znajdują. odnoszą się do etykiety, użytkownika lub czegoś innego? – Greg

Odpowiedz

3

Podejście polegające na przypisaniu atrybutu meta:resourcekey nie działa po prostu dlatego, że są one traktowane specjalnie przez analizator stron i zastępowane przed rozpoczęciem cyklu życia strony.

Ale meta:resourcekey jest w zasadzie deklaratywnym zamiennikiem kodu równoważnego dostępowi do lokalnych plików zasobów. Innymi słowy:

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

odpowiada:

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

jest odpowiednikiem kodu:

MyLabel.Text = Resources.MyResXFile.MyResourceKey; 

Wygląda jakbyś już do czynienia z etykiety w kodzie, jeżeli próbujesz przypisać do niego atrybuty. Dlaczego nie ustawić wartości w kodzie?

+0

To nie do końca prawda, ponieważ pierwsza metoda używająca atrybutu meta spowoduje niejawne powiązanie zestawu wierszy "Key.Property" w pliku zasobów. Dwie pozostałe metody wymagają jawnej identyfikacji właściwości, do których odnoszą się klucze. –

7

myślę co chcesz za programowej lokalizacji w kodzie tyłu jest tak proste, jak to:

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

Korzystanie LocalResource oznacza, że ​​na stronie o nazwie MyPage.aspx, został utworzony plik zasobów nazwie MyPage.aspx .resx i/lub MyPage.aspx. {culturename} .resx w specjalnym katalogu App_LocalResource.

Jeśli podoba Ci się światowymi zasobami zamiast lokalnym, należy użyć specjalnego katalogu App_GlobalResource trzymać plik zasobów nazwie MyResourceFileName.resx i zadzwonić:

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

copied from a blog about localization in the code behind

- PS powodem, dla którego Attributes.Add ("meta: resourcekey", "label") nie działa, jest to, że "meta: resourcekey" nie jest prawdziwym atrybutem, a jego użycie w aspxie nie jest poprawnym znacznikiem aspx - raczej jest to przetwarzanie wstępne dyrektywy, że cau Skonsultuje kompilator, aby przekształcić go w dłuższą listę par nazwa/wartość atrybutów, w oparciu o to, co umieściłeś w pliku zasobów.

Powiązane problemy