我正在构建一个支持7种不同语言/文化的CMS。对于无法通过CMS更改的图像,我想我将使用不同的资源文件。至于内容,我正在考虑单独的数据库。如果用户需要更改当前文件,我有一个下拉列表,将所选文化存储在cookie中,然后我读取cookie并在global.asax的Application_BeginRequest中设置文化。如何为不同的文化使用不同的连接字符串?资源文件也会处理这个吗?拥有多个数据库甚至是个好主意?这对我来说都是第一次,我正在寻找任何人可能有的任何指针。谢谢!
编辑:不同的语言/文化将由CMS中的不同用户管理,因此给定页面的内容可能不同,而不仅仅是翻译。
答案 0 :(得分:2)
我也反对为每种语言使用单独的数据库。这将是过于复杂的解决方案。 不知道你要保存到db的内容,但我们正在使用patern,因为每个表都有额外的事务表,需要一些文本来翻译。 E.g。
tblProduct (Id,Cost,Weight)
tblProductTranslation (Id, IdProduct, Culture, Name, Description)
您可以看到已翻译的字段已移至转换表。
下面是剪辑sql,它返回带有必需Culture的产品。此外,如果不需要文化,则返回默认文化。
SELECT
en.ID
,en.ProductCategoryId
,ISNULL(req.[Name], en.[Name]) AS [Name]
,ISNULL(req.[Description], en.[Description]) AS [Description]
,...
,en.IsActive
FROM (SELECT * FROM res_vwProducts where culture = @DefaultCulture) en
LEFT OUTER JOIN (select * from res_vwProducts where culture = @Culture) req on req.ID = en.ID
WHERE en.ID = @ID
我可以想象你会从一些在线html编辑器中转储代码,这可能会有所不同。在这种情况下,我会简单地将Culture添加到表中,例如
tblArticle (Id, Culture, Body, Title,...)
希望它有所帮助。干杯,X。
答案 1 :(得分:2)
根据您的说法,听起来数据库中的内容实际上并不需要翻译成不同的语言,因此您可能不需要单独的数据库来处理它。
如果有共享数据库内容,您可以使用类似于@Xabatcha提到的转换表,尽管我建议使用更简单的表结构。有点像...
CREATE TABLE TranslatedText
(
TextID INT,
LanguageID INT,
Text NVARCHAR(8000)
)
CREATE TABLE Product
(
ProductID INT,
NameTextID INT,
DescriptionTextID INT,
Cost MONEY,
Weight DECIMAL
)
任何需要翻译文本的表都可以引用TextID。密钥实际上需要是TextID和LanguageID的组合。如果您使用的是SqlServer,则可能需要创建一个数据库函数来获取已翻译的文本,这样您就不必为需要获取值的每个sql语句执行连接。
答案 2 :(得分:0)
我强烈建议您不要为每种语言设置数据库。您可以将每个可翻译的项保存到一个单独的表中,其中每一行代表给定语言的某些用户内容的翻译。