【问题标题】:Explicit localization problem显式本地化问题
【发布时间】:2010-03-16 06:42:23
【问题描述】:

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

在“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>

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

更新:

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

仅显示默认英文文本。

另一个更新:

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

【问题讨论】:

    标签: asp.net localization


    【解决方案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>
    

    当我们查看您的代码时,您意识到您实际上是在构建一个 标签,对吧?因此,为什么不只是构建一个 并为自己省点心呢?

    最后,下一个项目为什么不放弃内置的 ASP.NET 本地化噩梦,转而使用像 FairlyLocal 这样的理智的东西,在这种情况下你会写这个:

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

    【讨论】:

    • 听起来你已经经历了我正在经历的一些头痛。将 LinkBut​​on 更改为服务器站点锚不会让我感到悲伤。分离 javascript MarkInvoice 函数是解决该问题的好方法。我看过 FairlyLocal,印象非常深刻。唯一的缺点是 id 不会生成 UTF8 文件。我喜欢它是开源的。
    • 谢谢。我忘了否认我写了 FairlyLocal 代码。 UTF8 的东西很容易修复,但它可能不会很快引起人们的注意,因为它实际上每个项目只发生一次,而且只有当你不简单地手动创建一个 .po 文件并将其放入右侧时目录。在编辑器中加载/保存文件以修复编码后,它将保持这种状态以供将来合并。
    【解决方案2】:

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

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

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

    【讨论】:

    • >"您是否使用 .NET 资源管理器和附属程序集来存储本地化资源?"是的,卫星程序集是使用位于相应 App_LocalResources 文件夹中的资源文件创建的。当用户在前面的步骤之一中选择一个标志时,本地化信息将分配给当前线程。
    • 以下页面可能有助于解决您的问题:asp.net/ajax/documentation/live/tutorials/…
    【解决方案3】:

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

    【讨论】:

    • 根据daffodilsw.com/blog/2009/11/… 需要元标记。因为它不起作用,我看到试图覆盖所有基地。我检查了 msdn,它似乎不需要显式本地化。
    • 显式本地化当然需要它。但是您将其与 OnClientClick="" 行的隐式本地化混合在一起。如果您删除它并确保 return confirm('Er du sikker?'); 也在您的默认 resx 文件中,应该没问题。
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 2012-03-26
    • 1970-01-01
    • 2011-02-18
    • 2011-07-11
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多