Re: ASP.NET Internationalization bug?



re:
!> ASP.NET should make it easy for me--and, it does,
!> but there is a bug in the implementation.

The fact that you *can* set xml:lang programmatically, and that you *did* set it that way,
as I did, should tell you that it isn't much of a bug, but a question of using the correct implementation.

But, again, please let us know what the reply to your bug report is.



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:%239PIQvU2IHA.2384@xxxxxxxxxxxxxxxxxxxxxxx
Juan,

My use of language and culture in ASP.Net is a bit different than most. I have registered numerous
country-code-specific domains (mysite.ca, mysite.co.uk, mysite.com.au, etc.), which resolve to a singular "ASP.Net Web
Site". Nothing new there. However, I'm not doing the ASP.Net usual of letting the user agent (HTTP header
'accept-language') determine which language visitors get; I have the country-code TLD drive it. Also, it's not just
the language of my content that varies by cc TLD, it's the content, too; but, lang attributes play a critical role in
informing user agents (including search engine bots) for what "country" my content is aimed.

I have already found, first-hand, that the better of the major search engines use the cc TLD *and* the HTML
lang/xml:lang to determine whether a domain's documents (mysite.com.au/my-document.aspx) should show up when a
searcher searches with the 'Only from Australia' checkbox checked on Live.com, for example.

I'm not setting lang attributes for fun; I'm doing it to correct search engine results. ASP.NET should make it easy
for me--and, it does, but there is a bug in the implementation.

I appreciate your interest and effort to help.

, Lee


"Juan T. Llibre" <nomailreplies@xxxxxxxxxxx> wrote in message news:uBUnQxT2IHA.4164@xxxxxxxxxxxxxxxxxxxxxxx
re:
!> versus the spirit of what we're trying to accomplish: telling user agents who our
!> intended audiences is, by language, as best we can...which is why I'm *also*
!> setting lang in the HTTP headers and in page meta tags

What ? You don't set a language/culture in web.config, too ?
There's a use for overkill ! ( only kidding... )

I don't see too clearly the purpose of declaring a single language for a web page.

I do see a use for declaring specific language attributes in a *collection* of xml documents,
so that individual documents can be parsed for a particular language content.

But, ymmv...

I'd still be interested in knowing what the reply is to your bug report.
I bet you'll get back : "That's by design". <g>

Don't forget to let us all know what happens with that, OK ?
Thanks for an interesting discussion.




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:en1PZVT2IHA.524@xxxxxxxxxxxxxxxxxxxxxxx
Juan,

In theory, I like your idea of investigating "the standard"; but, in practice it has serious problems, as it often
does. First, you are referring to the XML standard, which is not as appropriate as HTML and XHTML standards.
Second, none of them are crystal clear on best practices for I18N. There is a lot of *legal* (by the standard)
syntax, that makes no sense, or makes some sense without being clearly best. The W3C site often states something to
the effect of, "some are doing this, some are doing that, on your own site, at least do something and only time will
tell what is best."

Check out these fine examples, which mirror my syntax, on the W3C site.

Internationalization Best Practices: Specifying Language in XHTML & HTML Content
http://www.w3.org/TR/i18n-html-tech-lang/#ri20040429.092928424


Tutorial: Declaring Language in XHTML and HTML (Draft)
http://www.w3.org/International/tutorials/language-decl/en/slides/Slide0160.html

Juan, you wrote:
But, it seems to me that setting xml:lang for the html tag's *attribute* values is unneeded, since they must
be in English, and they must be attributes set to a language identifier, as defined by IETF RFC 4646
(http://www.ietf.org/rfc/rfc4646.txt).

You're not setting it for "the tag's *attribute*", you're setting it for the *contents*, all contents, of the
element (unless overridden by a sub-setting), which makes perfect sense so that I don't have to set it individually
on every child element--that is the power of a hierarchy! You seem to be focused on the technical, with some
misunderstanding, versus the spirit of what we're trying to accomplish: telling user agents who our intended
audiences is, by language, as best we can...which is why I'm *also* setting lang in the HTTP headers and in page
meta tags.

, Lee


"Juan T. Llibre" <nomailreplies@xxxxxxxxxxx> wrote in message news:OYI4upK2IHA.5140@xxxxxxxxxxxxxxxxxxxxxxx
re:
!> I found an MSDN document that explains why what I'm trying to do should work

Lee,

From :

http://www.w3.org/TR/REC-xml/

"A special attribute named xml:lang may be inserted in documents to specify the
language used in the contents and attribute values of any element in an XML document."

If anything, I can see xml:lang being declared for specific content values, for example :

<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>

Then, an xml parser could identify regional US and British spellings but, given that *all* the attribute values
must be in English in an html doc, what would be the purpose of declaring xml:lang for the html markup ?

A similar explanation is given here :
http://www.simonstl.com/xmlprim/xmlupdate/atts.html

---000---
<SECTION>
<DESCRIPTION xml:lang="en">
Caesar begins by describing the geography of Gaul.
</DESCRIPTION>
<QUOTE xml:lang="la">
Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae,
aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.
</QUOTE>
---000---

That's perfectly good usage for xml:lang, as a parser could selectively identify content in different languages.

But, it seems to me that setting xml:lang for the html tag's *attribute* values is unneeded, since they must
be in English, and they must be attributes set to a language identifier, as defined by IETF RFC 4646
(http://www.ietf.org/rfc/rfc4646.txt).

So, I think that requisite pretty well establishes the futility
of setting xml:lang for all the attributes in an html document.

If anything, it seems that the xml:lang attribute is included in the
html server tag for compatibility purposes, or perhaps out of ignorance.

If there's a need to identify that the *contents* of a particular markup tag are in a
specific language, that identification can be included in the tag itself, for example :

<div lang="MX-es" xml:lang="MX-es">
Algo de contenido en español mejicano.
</div>

That makes a lot more sense than setting xml:lang for the attribute values in the html tag.



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:%23ocUnoI2IHA.2188@xxxxxxxxxxxxxxxxxxxxxxx
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: ASP.NET Internationalization bug?
    ... The Microsoft team has confirmed the bug. ... For every programming team that works like you do, ... My use of language and culture in ASP.Net is a bit different than most. ... I have already found, first-hand, that the better of the major search engines use the cc TLD *and* the HTML ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: ASP.NET Internationalization bug?
    ... Let's see what Microsoft's VS bug team says about the bug you filed, ... My use of language and culture in ASP.Net is a bit different than most. ... I have already found, first-hand, that the better of the major search engines use the cc TLD *and* the HTML ... I don't see too clearly the purpose of declaring a single language for a web page. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: ASP.NET Internationalization bug?
    ... it does not change the bug into a feature--regardless of your ... My use of language and culture in ASP.Net is a bit different than ... I don't see too clearly the purpose of declaring a single language ... HTML and XHTML standards. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: ASP.NET Internationalization bug?
    ... It's still a bug. ... My use of language and culture in ASP.Net is a bit different than most. ... HTML Content ... ASP.NET Web Server Controls Overview ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: ASP.NET Internationalization bug?
    ... My use of language and culture in ASP.Net is a bit different than most. ... I have already found, first-hand, that the better of the major search engines use the cc TLD *and* the HTML ... I don't see too clearly the purpose of declaring a single language for a web page. ... You can add any attributes you need to an HTML server control and the page framework will render them ...
    (microsoft.public.dotnet.framework.aspnet)