明确的本地化问题

时间:2010-03-02 04:41:40

标签: asp.net localization

尝试将确认消息翻译为挪威语时,我收到以下错误:

  

在'System.Web.UI.WebControls.LinkBut​​ton'上的属性'OnClientClick'上不能有多个绑定。确保此属性未通过隐式表达式绑定,例如,使用meta:resourcekey。

我以下列方式使用显式本地化:

<asp:LinkButton ID="lnkMarkInvoiced" runat="server" OnClick="lnkMarkInvoiced_OnClick"
            OnClientClick="<%# Resources: lnkMarkInvoicedResource.OnClientClick%>"
            Visible="False" CssClass="stdtext" meta:resourcekey="lnkMarkInvoicedResource" ></asp:LinkButton>

这是本地资源文件条目:

  <data name="lnkMarkInvoicedResource.OnClientClick" xml:space="preserve">
<value>return confirm('Er du sikker?');</value>

如果我删除元属性,我会得到英文文本(默认)。 如何在不使用背后的代码的情况下显示挪威文本?

更新

删除meta属性可防止发生异常,但原始问题仍然存在。我无法显示挪威文字。

仅显示默认的英文文本。

另一个更新:

我知道这个问题已经老了,但我仍然无法显示挪威文字。 如果有人有一些提示,请发表回复。

3 个答案:

答案 0 :(得分:1)

您是否使用.NET资源管理器和附属程序集来存储本地化资源?看起来您已经在标记中硬编码了替代语言,而不是将其存储在特定于语言的资源程序集中......

.NET具有一些非常丰富的本地化和全球化功能。如果你正确使用它们,本地化应该是一个非常自动的东西(假设你的客户端提供他们的语言代码作为HTTP标头的一部分)。即使您的客户端没有使用适当的语言配置浏览器,通过用户请求(单击标志图标,配置设置等)手动更改UI文化仍然很容易。

这篇文章可能会有帮助:ASP.NET Web Page Resources Overview

答案 1 :(得分:1)

看起来你通过内联onclick使问题变得更难。为什么不将它拆分成一个单独的行?

<script>
  function markInvoiced()
  {
    return confirm('<%= Resources.SomehowGet.lnkMarkInvoicedResource.OnClientClick%>');
  }
</script>
<asp:LinkButton ID="lnkMarkInvoiced" runat="server" OnClick="lnkMarkInvoiced_OnClick"
        OnClientClick="return markInvoiced();"
        Visible="False" CssClass="stdtext" meta:resourcekey="lnkMarkInvoicedResource" ></asp:LinkButton>

在我们查看您的代码时,您意识到您实际上构建的是&lt; a&gt;标签,对吗?因此,为什么不建立一个&lt; a&gt;并为自己保留一些悲伤?

最后,下一个项目为什么不放弃内置的ASP.NET本地化nighmare而选择像FairlyLocal那样的理智,在这种情况下你会写下这个:

<a href="#" onclick="return confirm(<%=_"really?"%>) onserverclick="lnkMarkInvoiced_OnClick" runat="server">
  <%=_("Mark Invoice")%>
</a> 

答案 2 :(得分:0)

当您在OnClientClick中使用显式本地化时,该元标记正在使用隐式本地化。您需要选择一种方法或另一种方法。如果要使用显式本地化,则需要进行必要的工作,以便在代码隐藏中在应用程序中设置正确的文化信息。