2010-08-26 5 views
1

J'essaie de localiser une application Web asp.net. Considérez le code asp.net suivant. Je cours avec CurrentCulture et CurrentUICulture mis en allemand ("DE-DE").Syntaxe correcte pour les balises de ressources intégrées asp.net

<%= ReportTitles.EndOfDay %> 
<asp:Literal ID="litLabel" runat="server" Text="<%$ Resources:ReportTitles, EndOfDay %>"/> 

je me attends à ces deux lignes pour donner le même résultat, mais je reçois ceci:

Auswertungen für den Tagesabschluss
Fin de la journée

En d'autres termes, la première syntaxe <%= ReportTitles.EndOfDay %> avec succès récupère la valeur du fichier ReportTitles.de.resx que nous utilisons, mais la seconde syntaxe <asp:Literal ID="litLabel" runat="server" Text="<%$ Resources:ReportTitles, EndOfDay %>"/> récupère la valeur du fichier US English ReportTitles.resx par défaut.

Quel est le problème avec la 2ème ligne? Merci

+0

Pourriez-vous nous fournir un exemple comment (et _when_) vous avez défini CurrentCulture/CurrentUICulture? – sisve

+0

Il est défini dans Page_Load de la page maître, et il se produit plus ou moins comme ceci ... Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ("DE-DE"); Thread.CurrentThread.CurrentUICulture = new CultureInfo ("DE-DE"); – Booberry

Répondre

3

La mise en culture pendant la charge se situe quelque part au milieu du cycle de vie. C'est après que le contrôle littéral a été créé.

Fondamentalement, l'arborescence de contrôle est créée lorsque Page.ProcessRequest appelle FrameworkInitialize, qui appelle __BuildControlTree, une méthode générée automatiquement à partir de votre fichier de code. Il va instancier un nouveau contrôle Literal, définir toutes les propriétés et l'ajouter à l'arbre de contrôle. Il a déjà été lu depuis le ResourceManager actif. C'est avant Load, c'est même avant PreInit. Cela signifie que vous n'avez pas encore changé de culture.

<% = ...%> sera analysé dans un appel à HtmlTextWriter.Write pendant le rendu. C'est à la fin du cycle de vie, et il utilisera la nouvelle culture.

L'emplacement habituel pour implémenter ceci est soit en utilisant un HttpModule/HttpHandler soit en redéfinissant Page.InitializeCulture.

Jetez un coup d'œil à http://ghferr.free.fr/wiki/Articles/images/aspnet_page-control-life-cycle.jpg, un aperçu qui vaut la peine d'être imprimé et posé sur un mur à proximité. ;)

+0

Merci pour l'info. J'ai remplacé l'InitializeCulture dans notre classe BasePage et cela a fait l'affaire. Dès que j'ai le représentant, je vais vous voter. :) – Booberry

Questions connexes