基于数据库实现网站国际化的设计

前言

  之前写过,公司给任务让设计一个cms的管网系统,大致分成三部分 网站部分,栏目部分,内容部分,以往国家化的做法是使用i18n来做,但以我们的业务来讲行不通的,因为我们内容可能涉及长篇大论是其一,其二是内容数量会很多,比如帮助中心这个栏目,会延伸出很多内容,所以选择直接在数据库中存储翻译的内容,实现动态切换。

一、数据库设计

        1、栏目表设计

        因为我们栏目表是一个层级关系的表结构,刚开始是想直接存储一模一样字段信息的数据放进数据库,比如中文和英文直接每条数据对应,但是这样会产生两个问题,第一 加入只有一种语言的情况,会破坏树的层级结构,第二 栏目和内容的对应关系不复存在 会出现两个或多个栏目对应两个多个内容情况 失去一一对应关系。这样设计直接pass掉。

        第二种情况 可以在中文,英文(暂时分两种)每条记录上再抽取一层相当于中文,英文记录在抽取一层的分支,这样 抽取出来的那一层用来维护树结构,查询语言时直接替换掉显示的记录即可。但是这种情况下,维护某一种语言的层级,需要在代码里一顿查询,整理,业务能实现,大会稍微麻烦一些。

        最后采取加一个字段,内容存json,所有的语言以key-value的形式存储成一条记录,即可解决。

        二、内容表设计

        和栏目对比来看,栏目需要翻译的只有标题一个字段,二内容表里字段就多了 如标题、内容、图片、描述、来源等字段,所以如果像栏目表那样直接存放一个字段k-v肯定行不通了,最终决定,重新生成一张表,表内容专门用来存语言翻译信息,一种语言,一条记录,每种语言都和栏目关联即可,语言切换时,直接根据前端传的类型切换即可。

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值