2010-05-21 9 views
12

Cuando empecé la localización de un sitio web por primera vez, que acabo de hacer la localización de esta manera:¿Hay alguna diferencia entre estas dos formas de localizar una cadena en un archivo aspx/ascx?

<%= Resources.ResourceFile.ResourceName %> 

y parece que funciona perfectamente bien. Sin embargo, el ReSharper 5.0 Beta lo hace así:

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

¿Importa de qué manera se hace?

Además, ¿por qué ReSharper guarda el texto original dentro del control de localización? Pensé que estaba allí en caso de que el valor dentro del archivo de recursos estuviera vacío, podría mostrar el texto "predeterminado". Esto no parece ser el caso. ¿Es seguro eliminarlo y solo cerrar el control de localización?

+0

¿No tiene esta sintaxis <% = Resources.ResourceFile.ResourceName%> solo acceso a recursos globales? ¿Puedes acceder a App_LocalResources? No puedo parece. – User

Respuesta

2

así, no se puede utilizar la etiqueta =%> servidor <% en un control de servidor ASP.

por lo

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

dará lugar a un error de compilación. Por desgracia no se puede pasar datos dinámicos a las propiedades del control de servidor a menos que sea enlace de datos donde se puede aplicar la etiqueta <%# %> servidor, por ejemplo:

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

Siempre se puede mover esto al código subyacente, sino que chupa.

la <%$ %> 'cosa' trabaja sin embargo si vas por ella se preparan para entrar en el infierno de mantenimiento (a menos que, por supuesto, estamos hablando de una aplicación 3 página ...)

Personalmente yo uso el <%= %> y yo nunca uso re-sharper para globalizar/localizar mis aplicaciones. Además, nunca he usado el control de servidor <asp:Localize /> y no he tenido ningún problema ...

+0

¿No tiene esta sintaxis <% = Resources.ResourceFile.ResourceName%> solo acceso a los recursos globales?¿Puedes acceder a App_LocalResources? No puedo parece. – User

1

La primera Cree un archivo de recursos separado para cada página (módulo), pero el segundo crea uno (o más) y ponga todas las teclas de recursos en él.

El segundo enfoque le permite crear fácilmente nuevos idiomas para su aplicación porque todas las cadenas se reunieron en un solo lugar y puede dárselas a cualquiera para su traducción.

+0

No estoy seguro de entender. En el primer ejemplo, no crea un nuevo archivo de recursos para cada página. Tiene un recurso (llamado ResourceFile en el ejemplo) que contiene ResourceName. Ambos ejemplos llaman al mismo archivo de recursos para el mismo recurso. – Brandon

+0

@Brandon - El primer enfoque generalmente se usa para los recursos locales y el segundo generalmente se usa para GobalResources. pero detrás de la escena ambos usan el mismo método. p.ej. 'GetGlobalResource' y' GetLocalReource' que ambos dan algún parámetro de diferentes maneras y los pasan a un método 'Getresource' que es la sobrecarga principal o el método. –

+0

ah veo. Solo lo estaba usando incorrectamente entonces. Estaba haciendo referencia a un solo archivo de recursos globales cada vez que lo hice de esa manera. – Brandon

2

Siguiendo información que encontré en MSDN que podría ayudar a entender la diferencia de que deseas

Para recuperar los recursos globales mediante la tipificación estricta

Resources.ResourceFile.ResourceName se utilizan to retrieve global resources using strong typing

Los recursos son compilado en los Recursos del espacio de nombres, y cada recurso predeterminado se convierte en miembro de la clase Recursos. Por ejemplo, si ha creado el archivo de recursos predeterminado WebResources.resx y el archivo contiene un recurso llamado WelcomeText, puede hacer referencia al recurso en código como se muestra en el siguiente código

String welcome; welcome = Resources.WebResources.WelcomeText;

para más detalles: http://msdn.microsoft.com/en-us/library/ms227982.aspx

localización explícita

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

Leyenda%>

La expresión de recursos tiene la siguiente forma, donde la clase es opcional, a menos que el recurso es un mundial uno, y ResourceID es obligatorio:

El valor de Clase identifica el archivo de recursos que se usará cuando utilice recursos globales. Cuando se compilan archivos .resx, el nombre del archivo base, sin extensiones, se utiliza como el nombre de clase del ensamblaje resultante, explícitamente. Si desea utilizar recursos de un archivo de recursos local (uno que coincida con el nombre de la página actual), no es necesario que incluya un nombre de clase. Esto se debe a que ASP.NET compara la clase de página con la clase de recurso.

El valor ResourceID es el identificador del recurso a leer. En el ejemplo anterior, la propiedad Text para el botón se lee desde el archivo de recursos globales WebResources.resx (o la versión localizada apropiada). En ese archivo, ASP.NET usa el valor para el recurso con el identificador Button1Caption y para la página misma. Para establecer las propiedades de página, puede utilizar expresiones de recurso en la directiva @ Page

más: http://msdn.microsoft.com/en-us/library/ms227427(v=VS.100).aspx

+0

Considerando que está citando directamente la documentación de MSDN, probablemente debería poner ese texto en un presupuesto de bloque. – R0MANARMY

+0

hey man, ya he publicado el enlace de msdn allí y el texto pegado por mí después de leer la documentación en msdn –

1

afaik hay una diferencia, y es una cuestión de tiempo.

No lo he confirmado, pero realmente esperaría que <% $ ocurriera mucho antes en el ciclo de vida de la página.

  • <% = su más o menos un <% Response.Write ("Algunos de texto")%>, por lo que no se puede utilizar en una gran cantidad de lugares en el aspx es decir, que hay que hacer cuando la página se procesa
  • <% # se produce durante DataBind/que está lejos de la inicialización de la página/control. Tenga en cuenta que el código DataBind podría estar utilizando otras propiedades que se establecieron anteriormente, por lo que esa es una diferencia importante.
  • Dado lo anterior y que puede usar <% $ en propiedades de control, realmente esperaría que ocurra v. Al principio del ciclo de vida de la página/control.
Cuestiones relacionadas