在ASP.NET中进行本地化的技术?

时间:2011-09-21 19:26:20

标签: asp.net localization globalization

  

可能重复:
  What do I need to know to globalize an asp.net application?

默认的Visual Studio示例网站包含:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" 
       AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>Welcome to ASP.NET!</h2>
    <p>To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET
          Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

这是对本地化网站所需技术的一个很好的试验。你会如何本地化这些:

  1. <h2>Welcome to ASP.NET!</h2>

  2. <p>To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.</p>

  3. <p>You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409" title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.</p>
  4. 请注意用例

    • html元素:

      <H2>欢迎使用ASP!</H2>
        <H2> Bienvenue sur ASP.NET!</H2>
        <H2> ASP.NETxoşgəlmisiniz!</H2>

    • 带有嵌入式html的文本(注意链接如何移动)

      <P>要了解有关ASP.NET的更多信息,请访问www.asp.net</P>   <P> Pour en savoir plus sur www.asp.net visitez ASP.NET。</P>
        <P>ASP.NETssəfərwww.asp.nethaqqındadahaətraflıməlumatüçün。</P>

    • 带有嵌入式html的文本,带有嵌入的可本地化文本

      <P>您还可以找到<A title="Documentation on ASP.net">文档</A></P>
        <P> Vouspouvezégalementtrouverde la <A title="Documentation sur ASP.net">文档</A></P>
        <P>Sizhəmçinin<A title="ASP.net sənədləşdirilməsi">sənədlrinrin</A>tapabilərsiniz</P>

    另见


    一个可以使用asp:Localize元素翻译第一个示例中的文字:

    <H2><asp:Localize>欢迎使用ASP!</asp:Localize></H2>
       <H2><asp:Localize> Bienvenue sur ASP.NET!</asp:Localize></H2>
       <H2><asp:Localize> ASP.NETxoşgəlmisiniz!</asp:Localize></H2>

    问题是这个解决方案在下一个案例中崩溃了:

    <P><asp:Localize>要了解有关ASP.NET的更多信息,请访问www.asp.net</asp:Localize></P>    <P><asp:Localize> Pour en savoir plus sur www.asp.net visitez ASP.NET。</asp:Localize></P>
       <P><asp:Localize>ASP.NETssəfərwww.asp.nethaqqındadahaətraflıməlumatüçün。</asp:Localize></P>

    因为本地化字符串不能包含其他HTML元素。

    现在它开始需要类似的东西:

    <P><asp:Localize>要了解有关ASP.NET的更多信息,请访问%s。</asp:Localize></P>
       <P><asp:Localize>请使用浏览器来浏览ASP.NET。</asp:Localize></P>
       <P><asp:Localize>ASP.NETssəfər%shaqqındadahaətraflıməlumatüçün。</asp:Localize></P>

    然后包含链接的html可以嵌入%s所在的位置。但是本地化器必须本地化碎片短语:

    • 要了解有关ASP.NET的更多信息,请访问www.asp.net。

    变为

    • 要了解有关ASP.NET的更多信息,请访问%s。

    在其他语言中,伪转换为:

    • 要了解有关%s的更多信息,请访问ASP.net
    • ASP.net访问%s即将了解更多

    编辑:在ASP.net中本地化项目的批准技术是什么。

2 个答案:

答案 0 :(得分:1)

  • HTML元素,我通常只将文本放在resx文件中的HTML元素中,而不是整个HTML结构中。我发现它使本地化内容更易于重复使用
  • 带有嵌入式HTML的文字 - 在您的示例中,我会放置除&lt; p&gt;以外的所有内容。我的resx文件中的标签 - 所以我将保留在resx文件中的超链接
  • 带有嵌入式HTML的文本 - 这个场景看起来与第二个相同,我会使用相同的方法

需要考虑的另一个方案是,您需要动态地将内容注入资源字符串,即“下午好,史密斯先生,你好吗?”我建议使用单个资源键捕获这些,例如“下午好{0},你好吗?”为了避免将句子分解为多个资源键,例如“下午好”和“你好吗”,因为其他语言不遵循英语所遵循的相同语法规则。

有时将单个页面片段本地化为单独的资源字符串是没有意义的。例如,您引用的示例页面中的所有HTML都可以驻留在单独的英文文本文件中。然后,您可以根据需要创建其他语言文本文件。这些可能是文件系统上的XML文件,或者它们可能存储为数据库资源,然后您可以在运行时动态加载相应的语言部分。这有助于简化翻译过程并为每种语言提供更多灵活性。

我通常将标题,标题,单个术语,表单字段,标题,错误消息等本地化为单独的资源键,并且通常将整个静态页面/内容片段作为自己的资源片段,而不是将它们分解为小单位。

关于持久保存资源的主题,您可以使用.resx,或者自己动手(许多人使用基于文件系统的方法)或数据库驱动。如果您有兴趣将所有资源保存到数据库http://www.west-wind.com/weblog/posts/2009/Apr/02/A-Localization-Handler-to-serve-ASPNET-Resources-to-JavaScript,Rick Strahl已经共享了一个出色的数据库资源提供者。

答案 1 :(得分:0)

关于第3项(带链接),我曾写过a tiny little class to solve