有没有办法翻译 resx 文件以外的网站?

Is there a way to translate web sites other than resx files?

我一直在阅读如何使用本地或全局 resx 文件翻译网站。虽然这通常对按钮和小段文本非常有用,但当我面对大块文本的翻译时,我觉得不得不在 resx 文件中存储长字符串,并在小键中间隔文本,这对我来说似乎有点奇怪让我无法重新阅读刚刚写的内容。

例如:

<p> <%$ Resources:MyResources, Welcome %> <%$ Resources:MyResources, to %> <%$ Resources:MyResources, my %> <%$ Resources:MyResources, wonderful %> <%$ Resources:MyResources, Website %> , <%$ Resources:MyResources, Where %> <%$ Resources:MyResources, you %> <%$ Resources:MyResources, can %> <%$ Resources:MyResources, Find %> <%$ Resources:MyResources, amazing %> <%$ Resources:MyResources, information %> <%$ Resources:MyResources, about %> <%$ Resources:MyResources, this %><%$ Resources:MyResources, and %><%$ Resources:MyResources, that %> <p>

或者:

<%$ Resources:MyResources, WelcomeToMyWonderfulWebsiteWhereYouCanFindAmazingInformationAboutThisAndThat %>

有没有更好的方法来处理多语言支持? 谢谢,

(忘记补充一点,我使用的是 VS2013,这是针对带有 aspx 和 ascx 的 C# WebForms 站点)

您可以直接从 Resources 渲染,您不需要使用 <%$ 语法。您可以使用 <%=(或自动编码 <%: 版本):

在你的情况下,我的项目中会有一个 Resources.resx 文件,其中包含一个带有快捷键的 Welcome Blurb 条目:

Key: WelcomeMessage
Value (in `Resources.resx`): "Welcome to my website where..."
Value (in `Resources.de-DE.resx`): "Willkommen auf meiner Website..."

并且在我的 .aspx 文件中使用 <%:

<p><%: Resources.WelcomeMessage %>

或者如果你想渲染原始 HTML:

使用 <%=
<p><%= Resources.WelcomeMessage %>

Razor 语法:

<p>@Resources.WelcomeMessage</p>

或为了可读性:

<p>@( Resources.WelcomeMessage )</p>

Resources 是一个 static class 存在并根据您当前的线程文化值自动检索正确的资源值(因此请确保您有正确更改线程文化的代码),返回您的翻译不适用时的回退值。

您可以通过将鼠标悬停在每个 属性 值上来查看 Visual Studio 中的原始值,因为 Resx 设计器生成的 XML 注释包括前 100 个左右的字符资源字符串。