可能的重复:
我需要了解什么才能实现全球化一个 ASP.NET 应用程序?
默认的 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&clcid=0x409"
title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
</p>
</asp:Content>
这是对本地化网站所需技术的一个很好的尝试。您将如何本地化这些:
-
欢迎使用 ASP.NET!
-
要了解有关 ASP.NET 的更多信息,请访问 www.asp.net.
-
您还可以找到 MSDN 上的 ASP.NET 文档.
注意用例
html 元素:
欢迎使用 ASP!
欢迎 ASP.NET!
ASP.NET xoş gəlmisiniz!
-
嵌入 html 的文本(注意链接如何移动)
要了解有关 ASP.NET 的更多信息,请访问 www.asp.net< /a>.
在 www.asp.net 上访问 ASP,充分发挥自己的才能。 NET.
ASP.NET səfər www.asp.net haqında daha ətraflı məlumat üçün.
-
嵌入 html 的文本,嵌入可本地化的文本
您还可以找到
文档
< /P>
您可以阅读
文档
Siz həmçinin
sənədlərin
tapa bilərsiniz
另请参阅
可以使用 asp:Localize
元素来翻译第一个示例中的文本:
;
欢迎使用 ASP!
欢迎 ASP.NET!
ASP.NET xoş gəlmisiniz!
问题是这个解决方案在下一个案例:
要了解有关 ASP.NET 的更多信息,请访问 www.asp.net.
< br>
充分了解 www.asp.net< /a> 访问 ASP.NET。
ASP.NET səfər www.asp.net haqqında daha ətraflı məlumat üçün.
因为本地化字符串不能包含其他 HTML 元素。
现在它开始需要如下内容:
要了解有关 ASP.NET 的更多信息,请访问 %s。
;
充分发挥 %s 访问 ASP.NET 的能力。
ASP.NET səfər %s haqqında daha ətraflı məlumat üçün.
然后包含链接的 html 可以嵌入到 %s 所在的位置。但是本地化人员必须本地化零散的短语:
- 要了解有关 ASP.NET 的更多信息,请访问 www.asp.net。
变为
- 要了解有关 ASP.NET 的更多信息,请访问 %s。
在其他语言中,它伪翻译为:
- 要了解有关 %s 的更多信息,请访问 ASP.net
- ASP.net 请访问 %s 了解更多信息
编辑: 在 ASP.net 中本地化项目的批准技术是什么。
Possible Duplicate:
What do I need to know to globalize an asp.net application?
The default Visual Studio sample web-site contains:
<%@ 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&clcid=0x409"
title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
</p>
</asp:Content>
This is a good trial on needed techniques for localizing a web-site. How would you localize these:
-
<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&clcid=0x409"
title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.</p>
Note the use cases
-
html element:
<H2>
Welcome to ASP!</H2>
<H2>
Bienvenue sur ASP.NET!</H2>
<H2>
ASP.NET xoş gəlmisiniz!</H2>
-
text with embedded html (notice how the link moves)
<P>
To learn more about ASP.NET visit www.asp.net.</P>
<P>
Pour en savoir plus sur www.asp.net visitez ASP.NET.</P>
<P>
ASP.NET səfər www.asp.net haqqında daha ətraflı məlumat üçün.</P>
-
text with embedded html, with embedded localizable text
<P>
You can also find <A title="Documentation on ASP.net">
documentation</A></P>
<P>
Vous pouvez également trouver de la <A title="Documentation sur ASP.net">
documentation</A></P>
<P>
Siz həmçinin <A title="ASP.net sənədləşdirilməsi">
sənədlərin</A>
tapa bilərsiniz</P>
See also
One could use an asp:Localize
element to translate the text in the first example:
<H2><asp:Localize>
Welcome to ASP!</asp:Localize></H2>
<H2><asp:Localize>
Bienvenue sur ASP.NET!</asp:Localize></H2>
<H2><asp:Localize>
ASP.NET xoş gəlmisiniz!</asp:Localize></H2>
problem is this solution falls apart in the next case:
<P><asp:Localize>
To learn more about ASP.NET visit 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.NET səfər www.asp.net haqqında daha ətraflı məlumat üçün.</asp:Localize></P>
because the localized string cannot contain other HTML elements.
Now it starts to require something like:
<P><asp:Localize>
To learn more about ASP.NET visit %s.</asp:Localize></P>
<P><asp:Localize>
Pour en savoir plus sur %s visitez ASP.NET.</asp:Localize></P>
<P><asp:Localize>
ASP.NET səfər %s haqqında daha ətraflı məlumat üçün.</asp:Localize></P>
And then the html containing the link can be embedded where %s is. But then the localizer must localize fragmented phrases:
- To learn more about ASP.NET visit www.asp.net.
becomes
- To learn more about ASP.NET visit %s.
and in other languages it pseudo translates to:
- To learn more about %s visit ASP.net
- ASP.net visit %s about to learn more
Edit: What is the approved technique to localize items in ASP.net.
发布评论
评论(2)
之外的所有内容都放在我的 resx 文件中的标签 - 因此我将在 resx 文件中保留超链接
另一种需要考虑的情况是当您需要将内容动态注入到资源字符串,即“下午好,史密斯先生,你好吗?”我建议使用单个资源键捕获这些内容,例如“下午好 {0},你好吗?”为了避免将句子分解为多个资源键,例如“下午好”和“你好吗”,因为其他语言不遵循英语所遵循的相同语法规则。
有时,将各个页面片段本地化为单独的资源字符串是没有意义的。例如,您引用的示例页面中的所有 HTML 都可以驻留在单独的英文文本文件中。然后您可以根据需要创建其他语言的文本文件。这些可能是文件系统上的 XML 文件,也可能存储为数据库资源,然后您可以在运行时动态加载适当的语言部分。这有助于简化翻译过程并为每种语言提供更大的灵活性。
我通常将标题、标题、单个术语、表单字段、说明文字、错误消息等本地化为单独的资源键,并且经常将整个静态页面/内容片段保留为其自己的资源片段,而不是将它们分解为小单元。
关于在哪里保存资源的问题,您可以使用 .resx,或者自己推出(许多人使用基于文件系统的方法),或者数据库驱动的。如果您有兴趣将所有资源保存到数据库,Rick Strahl 分享了一个很棒的数据库资源提供程序,http://www.west-wind.com/weblog/posts/2009/Apr/02/A-Localization-Handler-to-serve-ASPNET-Resources-to-JavaScript。
Another scenario to consider is when you need to dynamically inject content into a resource string, i.e. "Good afternoon Mr. Smith, how are you doing?" I recommend capturing these with a single resource key such as "Good afternoon {0}, how are you doing?" in order to avoid breaking sentences down into multiple resource keys such as "Good afternoon", and "how are you doing", since other languages don't follow the same grammar rules that English follows.
Sometimes it doesn't make sense to localize individual page fragments as separate resource strings. All of the HTML in the sample page that you've referenced could reside in a separate English text file for instance. Then you could create other language text files as need be. These might be XML files on your file system, or they might be stored as database resources, where you then dynamically load the appropriate language part at runtime. This can help to simplify the translation process and provide a lot more flexibility per language.
I usually localize titles, headings, individual terms, form fields, captions, error messages, etc., as separate resource keys, and often leave entire static pages/content snippets as their own resource fragments, rather than breaking them down into small units.
On the subject of where to persist your resources, you can use .resx, or roll your own (many people use filesystem-based approaches), or database driven. Rick Strahl has shared a great database resource provider if you're interested in persisting all of your resources to database, http://www.west-wind.com/weblog/posts/2009/Apr/02/A-Localization-Handler-to-serve-ASPNET-Resources-to-JavaScript.
关于第三项(带有链接),我曾经写过一个小类来解决。
Regarding the 3rd item (with the link), I once wrote a tiny little class to solve.