2

我创建了一个简单的电子商务 Web 应用程序。当我制作应用程序时,我认为它会部署为单个网站,因此.cshtml文件如下所示:

<head>
    <title>My Company Storefront</title>
    <meta name="description" content="Welcome to My Company online store" />
    ....
</head>

现在 Web 应用程序将被部署为第二个网站。部分内容需要更改:

<head>
    <title>Second Company Storefront</title>
    <meta name="description" content="Welcome to Second Company online store" />
    ....
</head>

两个部署将共享相同的代码,但.cshtml文件中的某些文本内容会有所不同。

什么是实现这一目标的好方法?

系统我看过.resx​​,但是感觉有点重。每个部署只有一个资源文件。此外,我希望外部程序员/管理员对资源进行更改。

.resx合适吗?

4

2 回答 2

2

听起来你可以做得比在后端拥有一个数据库(如果这是一个在线商店,你可能已经拥有)更糟糕,你可以在其中保留一个翻译表,然后可以在每个站点的基础上进行修改.

_id     _expression    _translation
-----------------------------------
1       msgtitle        Welcome to My Company online store

当然可以在第二个网站中进行修改。

要使用翻译,请在应用程序初始化期间将它们加载到某种字典中,并使用表达式作为键和翻译作为值:

<head>
    <title>Second Company Storefront</title>
    <meta name="description" content="@MyCache.Translate["msgtitle"]" />

</head>
于 2013-07-16T12:20:37.567 回答
2

有几种方法可以实现这一点。您已经探索了resx选项(可行)。该内容也可以从某种数据库中提取。既然您使用的是 asp.net,为什么不看看Web.configand transforms 选项。

在您的基线 Web.config 中:

<appSettings>
    <add key="Description" value="Welcome to My Company online store"/>
</appSettings>

如果你有一个项目配置SecondCompany(以及通常的调试和发布),你可以有一个Web.SecondCompany.config

<?xml version="1.0" encoding="utf-8"?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="Description" value="Welcome to Second Company online store"
         xdt:Locator="Match(key)" xdt:Transform="SetAttributes"/>
  </appSettings>
</configuration>

部署后,您可以将 Web.config 配置为根据已部署的配置进行转换。配置的部署SecondCompany将导致:

<appSettings>
    <add key="Description" value="Welcome to Second Company online store"/>
</appSettings>

无需部署即可直接修改,因为 Web.config 是一个简单的 XML 文件。

在您看来,您可以将内容部分替换为:

<head>
    <title>My Company Storefront</title>
    <meta name="description" 
          content="@System.Configuration.ConfigurationManager.AppSettings["Description"]" />
    ....
</head>

有关 Web.config 转换的更多信息,请点击此处

于 2013-07-16T12:25:53.273 回答