Re: ASP.NET Internationalization bug?



I found an MSDN document that explains why what I'm trying to do should
work.

ASP.NET Web Server Controls Overview
http://msdn.microsoft.com/en-us/library/zsyt68f1.aspx

Note the distinction between HTML Server Controls and Web Server Controls in
the document. Also, note the explanation of "pass-through" attributes for
HTML Server Controls.

Two quotes that sum it up:
1. Any HTML element on a page can be converted to an HTML server control
by adding the attribute runat="server".
2. You can add any attributes you need to an HTML server control and the
page framework will render them without any change in functionality.

, Lee

"Lee C." <no.spam@xxxxxxxxxxx> wrote in message
news:Oe38JYI2IHA.4772@xxxxxxxxxxxxxxxxxxxxxxx
Juan,

I appreciate your trying to help, but you're wrong, and you are the one
who is confused. :]

I am *not* disputing that when inserted programmatically, the xml:lang
attribute renders to the browser. I did just that as a work around (right
after I discovered this bug); but, I should not have to.

I am *not* confusing html attributes with runat="server" attributes, as
you call them. Using your logic, none of the declarative (html)
attributes should render to the browser after I add the runat="server" in
ASP.NET; yet all of them (xmlns, lang, and dir) do--except xml:lang.

I started with an html element with 4 attributes (xmlns, lang, xml:lang,
and dir) all set declaratively. With *no* 5th attribute of
runat="server", all 4 attributes render. If I add the 5th attribute of
runat="server", which does not and should not render, I no longer get all
4 attributes that should render (xmlns, lang, xml:lang, and dir), I only
get 3 (xmlns, lang, and dir). My logic says I should get 4, your says I
should get 3? It would be 4 or 0, and 4 is right. Not 0...and not 3.

When I add runat="server", it does not magically make the xml:lang
attribute a server-side attribute, while keeping the other three
attributes as "html" attributes. All four are still "html"
attributes--which should render.

I think the simplification of my example may be confusing you. It is odd
that, in my example, I set runat="server" but do not have any server-side
attributes. (I have all 4 as literal strings, for simplicity of an
example.) Well, in my real-world use, I do have server-side attributes,
which I want set declaratively (no code-beside and no script). I have:

<html runat="server" xmlns="http://www.w3.org/1999/xhtml";
xml:lang="<%$ Resources:GlobalLang, ContentAudienceLanguage %>"
lang="<%$ Resources:GlobalLang, ContentAudienceLanguage %>"
dir="ltr">

Both of those declarative explicit localization expressions should work
without my having to write any more "procedural" (code-beside) code or
script. It actually does work fine for the lang attribute--as it should;
but not for the xml:lang attribute--***which is a bug***.

, Lee

"Juan T. Llibre" <nomailreplies@xxxxxxxxxxx> wrote in message
news:u0WzB9H2IHA.4188@xxxxxxxxxxxxxxxxxxxxxxx
re:
!> I think you are misunderstanding, Juan.

Well, I think you are misunderstanding *me*.

re:
!> I had the xml:lang attribute in the html tag (declaratively), like
this:
...and it renders to the browser, as it should.

Yes, because it's standard html.

re:
!> If I simply add runat="server"

That declares the control to run server side.

For any attribute to be programmed server-side you need a script,
just as you need a script to modify any server control's attributes.

Did you run the sample page I sent ?

It iterates throught the attributes for the html server control,
and shows that the xml:lang attribute *is* added programmatically.

re:
!> If I simply add runat="server", leaving in the xml:lang attribute that
!> renders without runat="server", all of the (declarative) attributes
are
!> rendered to the browser--except the xml:lang attribute! That is a
bug.

I think you're confusing html attributes with runat="server" attributes.

Html attributes can be inserted in normal html.
Server-side attributes must be inserted in code.

Maybe I'm not explaining this as well as I should.
Try to get someone else's opinion on this matter, if you don't accept
mine.



Juan T. Llibre, asp.net MVP
asp.net faq : http://asp.net.do/faq/
foros de asp.net, en español : http://asp.net.do/foros/
======================================
"Lee C." <no.spam@xxxxxxxxxxx> wrote in message
news:enam1gH2IHA.4552@xxxxxxxxxxxxxxxxxxxxxxx
I think you are misunderstanding, Juan. I had the xml:lang attribute in
the html tag (declaratively), like this:

<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en-US" lang="en-US"
dir="ltr">

...and it renders to the browser, as it should.

If I simply add runat="server", leaving in the xml:lang attribute that
renders without runat="server", all of the (declarative) attributes are
rendered to the browser--except the xml:lang attribute! That is a bug.

<html runat="server" xmlns="http://www.w3.org/1999/xhtml";
xml:lang="en-US" lang="en-US" dir="ltr">

Cordially,
Lee


"Juan T. Llibre" <nomailreplies@xxxxxxxxxxx> wrote in message
news:eyrwjUH2IHA.3920@xxxxxxxxxxxxxxxxxxxxxxx
Here's a full example which shows that the xml:lang attribute is added
programmatically :

attributes.aspx:
----------------------
<%@ Page Language="C#" AutoEventWireup="True" %>
<html xmlns="http://www.w3.org/1999/xhtml"; runat="server" id="Myid" >
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
Myid.Attributes.Add("xml:lang", "es");
Message.InnerHtml = "<h4>The html control attributes collection
contains:</h4>";
IEnumerator keys = Myid.Attributes.Keys.GetEnumerator();
while (keys.MoveNext())
{
String key = (String)keys.Current;
Message.InnerHtml += key + "=" + Myid.Attributes[key] + "<br />";
}
}
</script>
<head id="Head1" runat="server">
<title>The html control attributes collection</title>
</head>
<body>
<form id="Form1" runat="server">
<h3>HtmlControl Attribute Collection Example</h3>
<br />
<span id="Message" enableviewstate="false" runat="server" />
</form>
</body>
</html>
----------------

I don't think it's a bug to have to add an attribute programmatically,
because the runat="server" tag only *declares* the html control as a
programmable control.

To actually program it, you must use a script.




Juan T. Llibre, asp.net MVP
asp.net faq : http://asp.net.do/faq/
foros de asp.net, en español : http://asp.net.do/foros/
======================================
"Lee C." <no.spam@xxxxxxxxxxx> wrote in message
news:e0rLaPG2IHA.4772@xxxxxxxxxxxxxxxxxxxxxxx
Thanks, Juan.

I already added similar code to a page event in my masterpage
code-beside.

elHtml.Attributes.Add("xml:lang",
Resources.GlobalLang.ContentAudienceLanguage)

To me, that is a temporary workaround. I still want to understand
whether the "eating" of the attribute I originally
posted about is a bug, or if this is actually happening for a reason.

Cordially,
Lee


"Juan T. Llibre" <nomailreplies@xxxxxxxxxxx> wrote in message
news:%23gBUqSC2IHA.4772@xxxxxxxxxxxxxxxxxxxxxxx
Hi, Lee.

re:
!> <html runat="server" xmlns="http://www.w3.org/1999/xhtml";
xml:lang="en-US" lang="en-US" dir="ltr">
!> no xml:lang attribute is rendered to the browser!
!> Remove the runat="server", and, voila, the xml:lang attribute is
rendered.

Try this :

<html xmlns="http://www.w3.org/1999/xhtml"; runat="server"
id="someID">

<script runat="server">
someID.Attributes("xml:lang") = "en-US"
</script>



Juan T. Llibre, asp.net MVP
asp.net faq : http://asp.net.do/faq/
foros de asp.net, en español : http://asp.net.do/foros/
======================================

"Lee C." <nomail@xxxxxxxx> wrote in message
news:O%23KsAQA2IHA.4572@xxxxxxxxxxxxxxxxxxxxxxx
I think I have discovered a bug in ASP.NET, related to I18N.

In ASP.NET 3.5 I have to set runat="server" on the html element to
use explicit expressions. It appears that
ASP.NET
eats the xml:lang attribute on the html element when it is set to
runat="server".

Of course I want to replace the hardcoded "en-US" values with
(resource) explicit expressions; but, for simplicity,
try this:

<html runat="server" xmlns="http://www.w3.org/1999/xhtml";
xml:lang="en-US" lang="en-US" dir="ltr">

...And you will find that no xml:lang attribute is rendered to the
browser! Remove the runat="server", and, voila,
the
xml:lang attribute is rendered. :[

...Any ideas?

Cordially,
Lee


















.



Relevant Pages

  • Re: ASPX now with methods and classes
    ... > - color coding of html and javascript and dhtml dom ... > - volatile storage (session object) ... >> ASP.NET, from the Page class to all of the server controls, is nothing ... >> but a bunch of rendering libraries. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: ASPX now with methods and classes
    ... - color coding of html and javascript and dhtml dom ... - volatile storage (session object) ... > ASP.NET, from the Page class to all of the server controls, is nothing ... > but a bunch of rendering libraries. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Question about separating logic from html?
    ... > the bottom of the page (html). ... ASPX Page Template in code blocks if you like. ... ASP.Net uses objects (Server Controls) to render HTML in the page. ... Controls have a server-side and a client-side aspect to them, ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Converting HTML to ASPX
    ... some considerable time. ... way that happens is the one person builds HTML pages (usually first) and ... convert a HTML file to an aspx/codebehind pair. ... server controls mapping to them, you can add a runat="server" attribute ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: asp:TableCell & Background image
    ... the "the original architects ... ASP.NET has provided the HtmlControls which are mapped to the original html ... html element in the HtmlView at design time. ... #The Forgotten Controls: HTML Server Controls ...
    (microsoft.public.dotnet.framework.aspnet)