Search code examples
asp.netglobalization

Globalization difference in inline tags in ASP.NET


Is there any advantage/downfalls between using the inline write tag instead of the resource tag? Example:

<%=Resources.Site.SampleString %>

The resources tag (expression tag) as seen in any MSDN example:

<asp:Literal id="Literal1" runat="server" text="<%$ Resources:Site, SampleString %>" />

I find the first option far easier to use, and it has IntelliSense, but maybe it won't function the same?


Solution

  • These methods will function exactly the same. The latter simply calls first one; there is a reason why strongly-typed resources access code is being generated in the background. Therefore you can use whatever method you please.

    By the way, there is also another way - by using meta:resourcekey attribute. So you should be able to write:

    <asp:Literal id="Literal1" runat="server"
                 meta:resourcekey="SampleString" text="Default one" />
    

    and it all should work exactly the same.

    EDIT on implicit Localization.

    What I forgot to mention, is that with meta:resourcekey certain conditions have to be met. The conditions are:

    • Values are taken from App_LocalResources, therefore related resource file need to exist
    • Related resource file name must be pagename.resx, for example: Default.aspx.resx, Default.aspx.es.resx
    • The resource file must contain keys in form of resourcekey.propertyname, for example SampleString.Text, SampleString.ID (although I wouldn't localize control ID's)
    • Because of how resources are generated, the key mentioned above must exist in invariant resource file (Default.aspx.resx), or it won't be localized.