我正在建立一个网站,允许人们创建内容并对内容发表评论。
对于表单标签,按钮和其他静态内容,我可以使用.resx
文件。我之前已经完成了它并且运行正常。
现在我处在一个十字路口,我不知道要走哪条路。两者对我来说同样好,但由于这将是我第一次进入这样的领域,我宁愿问一些我可能没有考虑的陷阱。
以下是我想实施的两个选项。两者都可以解决我向用户本地化和呈现用户生成内容的问题。
选项A:
我会创建整个MVC3应用程序的多个副本,并将每个本地化放入它自己的IIS应用程序中。
foobar.com
es.foobar.com
ru.foobar.com
我只需要更改web.config文件,为每个本地化使用不同的数据库。
我看到了一些问题,例如:
如果用户登录foobar.com
并且他要访问他本地化版本的网站,他就不会登录,因为他们是两个完全独立的应用程序。
没有统一的审核工具。我必须进入每个应用程序,登录,访问管理面板并从那里进行调整。
很难将更改/更新推送到所有版本的页面。我必须手动进入每个IIS应用程序文件夹并复制每个本地化版本的已发布文件。
选项B:
我会创建一个MVC3应用程序,并在后端数据库中为每个本地化创建多个字段。
例如:
Car
------
CarID
Name
esName
ruName
Make
esMake
ruMake
..and so on..
然后我会以某种方式根据选择的本地化动态选择要显示的字段。虽然我甚至不确定这是否可行,因为访问子域会将我带到一个完全不同的IIS应用程序,除非我可以绑定子域以指向我的IIS上的实际域。
foobar.com
es.foobar.com
ru.foobar.com
我用这种方法看到的问题是每个表的大小都很庞大,不仅在字段数量上,而且在记录数量上也是如此。我不确定这是不是一个问题。
对于如何在MVC3应用程序中实现用户生成内容的本地化,我将不胜感激。
意思是,访问西班牙语版本(es.foobar.com
)的用户会看到其他西班牙语内容和用户发表的评论,而不是其他版本。我不意味着翻译他们的内容并将其呈现给最终用户。
答案 0 :(得分:1)
另一种选择是拥有一个MVC应用程序,以正常方式进行本地化,并使用语言切换(您可以通过URL路由触发,例如es.foobar.com将语言设置为“es”,或通过accept-languages
标题,或通过UI选择器。)
您可以在包含用户生成内容的表格中添加语言ID列,而不是每种语言都有一列。并对用户生成的内容实施过滤器,以便只显示与活动语言匹配的行。
例如:
Car
----------
CarID
LanguageID
Name
Make
答案 1 :(得分:0)
一种方法是存储指向数据表中字段的指针。例如,您的Car表可以包含
CarId | Name | Make
123 | 0099 | 0100
然后有一个包含本地化字符串的表。
TextId | Lang | String
0099 | en | "Escape"
0099 | ru | "Russian Name"
0100 | en | "Ford"
0100 | ru | "Russian Ford"
在本地化字符串表上,在TextId和Lang上创建复合主键。这样,您的域/数据表保持简单,在选择数据时,您只需加入本地化的字符串表即可。合理?我可以编写一个快速SQL查询,以便在需要时为您提供建议。
这种方法确实需要对数据库进行额外的工作,但命中率并不算太差。我在适度加载的网站上使用过这种方法。如果它确实变成了问题,您可以为不同的语言创建物化视图。我也是这样做的,只要你的大多数查询都是读取,它就会非常快。
埃里克
答案 2 :(得分:0)
我认为你可以这样做:
<强> CONS:强>