Подтвердить что ты не робот

Разница между этими двумя способами локализации строки в файле aspx/ascx?

Когда я впервые начал локализацию веб-сайта, я просто сделал локализацию следующим образом:

<%= Resources.ResourceFile.ResourceName %>

и, похоже, работает отлично. Однако бета-версия ReSharper 5.0 делает это следующим образом:

<asp:Localize Text="<%$ Resources: ResourceFile, ResourceName %>" runat="server">
  Value
</asp:Localize>

Имеет ли значение, каким образом это делается?

Также, почему ReSharper сохраняет исходный текст внутри элемента управления localize? Я думал, что это было там, в случае, если значение внутри файла ресурсов было пустым, оно могло отображать текст по умолчанию. Это, похоже, не так. Безопасно ли это удалить и просто закрыть локализацию?

4b9b3361

Ответ 1

ну, вы не можете использовать тег сервера <% =% > на сервере управления ASP.

так

<asp:Localize Text="<%= Resources.ResourceFile.ResourceName %>" runat="server">
  Value
</asp:Localize>

приведет к ошибке компиляции. К сожалению, вы не можете передавать динамические данные в свойства управления сервером, если это не привязка к базе данных, где вы можете применить тег сервера <%# %>, например:

<asp:Repeater runat="server">
...
  <asp:Localize Text="<%# Resources.ResourceFile.ResourceName %>" runat="server">
   Value
  </asp:Localize>
...
</asp:Repeater>

Вы всегда можете переместить это в код, но это отстой.

<%$ %> "вещь" работает, однако, если вы пройдете мимо нее, подготовьтесь к введению адского обслуживания (если, конечно, мы говорим о приложении из 3-х страниц...)

Лично я использую <%= %>, и я никогда не использую re-sharpper для глобализации/локализации моих приложений. Кроме того, я никогда не использовал серверный элемент управления <asp:Localize />, и у меня не было проблем...

Ответ 2

Следующая информация, которую я нашел в msdn, которая может помочь вам понять разницу, которую вы хотите

Чтобы получить глобальные ресурсы, используя сильную типизацию

Resources.ResourceFile.ResourceName используется to retrieve global resources using strong typing

Ресурсы компилируются в пространство имен Resources, и каждый ресурс по умолчанию становится членом класса Resources. Например, если вы создали файл ресурсов по умолчанию WebResources.resx, и файл содержит ресурс с именем WelcomeText, вы можете ссылаться на ресурс в коде, как показано в следующем коде

Добро пожаловать; welcome = Resources.WebResources.WelcomeText;

для более подробной информации: http://msdn.microsoft.com/en-us/library/ms227982.aspx

Явная локализация

<asp:Button ID="Button1" runat="server" 
    Text="<%$ Resources:WebResources, Button1

Caption% >

Выражение ресурса принимает следующий вид: Класс не является обязательным, если только ресурс не является глобальным, и требуется ResourceID:

Значение класса определяет файл ресурсов, который будет использоваться при использовании глобальных ресурсов. Когда файлы .resx скомпилированы, имя базового файла без расширений используется явно как имя класса результирующей сборки. Если вы хотите использовать ресурсы из файла локального ресурса (который соответствует имени текущей страницы), вам не нужно включать имя класса. Это связано с тем, что ASP.NET соответствует классу страницы классу ресурсов.

Значение ResourceID является идентификатором ресурса для чтения. В предыдущем примере свойство Text для кнопки считывается из файла глобальных ресурсов WebResources.resx(или соответствующей локализованной версии). В этом файле ASP.NET использует значение ресурса с идентификатором Button1Caption и самой страницей. Чтобы установить свойства страницы, вы можете использовать выражения ресурсов в директиве @Page

подробнее об этом: http://msdn.microsoft.com/en-us/library/ms227427(v=VS.100).aspx

Ответ 3

Первый. Создайте отдельный файл Rsource foreach (модуль), а второй - Create One (или немного) и укажите все его ключи ресурса.

Второй подход позволяет легко создавать новые языки для вашего приложения, потому что все строки собраны в одном месте, и вы можете передать их кому-либо для перевода.

Ответ 4

afaik есть разница, и это вопрос времени.

Я не подтвердил это, но я действительно ожидал бы <% $, чтобы произойти намного раньше в жизненном цикле страницы.

  • <% = его в значительной степени a <% Response.Write( "Some Text" )% > , поэтому вы не можете использовать его во множестве мест в aspx, то есть это необходимо сделать, когда страница отображается
  • <% # встречается во время DataBind/, который далек от инициализации страницы/элемента управления. Обратите внимание, что код DataBind может использовать другие свойства, установленные ранее, так что важная разница.
  • Учитывая вышеизложенное и вы можете использовать <% $в свойствах управления, я действительно ожидаю, что это произойдет в начале жизненного цикла страницы/управления.