Почему эта линия локализации ведет себя так? - PullRequest
2 голосов
/ 16 февраля 2011

Я локализую веб-сайт ASP.NET. Обычно для локализации текста на странице .aspx я просто использую

<%= Resources.ResourceFile.ResourceName %>

Для элементов управления asp.net это не будет работать. Я должен использовать синтаксис

<%$ Resources:ResourceFile, ResourceName %>

Однако, если у меня есть кнопка и я локализую свойство Text таким образом, но добавляю после него все дополнительные символы, локализация прерывается и отображается в виде открытого текста.

Так Text="<%$ Resources:ResourceFile, ResourceName %> &raquo;" отображается как
<% $ Resources: ResourceFile, ResourceName%> "

Я уверен, что для этого есть веская причина, я просто не могу найти объяснение в MSDN о том, как свойство Text оценивает это. Я даже не уверен на 100% в том, что на самом деле делает <%$.

1 Ответ

1 голос
/ 16 февраля 2011

Происходит то, что ASP.net вызывает Expression Builder . То, что здесь происходит, заключается в том, что компилятор ASP.net вместо перевода вашего:

<asp:AControlWithATextProperty runat="server" Text="Some Text">

до:

AControlWithATextProperty ctl1 = new AControlWithATextProperty();
ctl1.Text = "Some Text";

Когда он преобразует разметку в файле .aspx в файл .cs в сочетании с выделенным кодом, он фактически делает что-то похожее на это:

<asp:AControlWithATextProperty runat="server" Text="<%$ Resources:ResourceFile, ResourceName %>">

становится:

AControlWithATextProperty ctl1 = new AControlWithATextProperty();
ctl1.Text = ResourceExpressionBuilder.EvaluateExpression("ResourceFile, Resourcename");

Может показаться, что компилятор asp.net не может обрабатывать конкатенацию содержимого тегов <%$ %> с любым дополнительным текстом в свойстве разметки. Либо баг, либо по дизайну. то есть вы не получите ctl1.Text = ResourceExpressionBuilder.EvaluateExpression("ResourceFile, Resourcename") + "&raquo;".

Вы можете узнать больше о ResourceExpressionBuilder в msdn, ExpressionBuilder в целом или, если вы действительно хотите; реализация одного для локализации (база данных поддерживается, отсюда тот факт, что я не использовал ResourceExpressionBuilder) в мой блог (3 части).

...