构建具有复杂内部化支持的站点

时间:2014-02-28 10:28:50

标签: mysql database-design internationalization

当用户浏览某个页面然后切换语言时,应执行以下操作:

  • 如果他正在浏览的页面有翻译,那么请重定向到该页面。
  • 如果该页面没有翻译版本,请重定向到主页。

例如,用户浏览/about-us页面然后他切换到德语,如果存在德语/uber-uns的翻译,则应将其重定向到/about-us

目前我有这样的结构,

CREATE TABLE `pages` (

  `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT
  `language` varchar(3),
  `urlSegment` varchar(250), 
  `content` TEXT

) DEFAULT CHARSET=UTF8;

应该添加哪些关系/列来实现这一目标?

1 个答案:

答案 0 :(得分:3)

一个页面可以有多个翻译,因此您需要一对多的关系架构:

CREATE TABLE pages (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
);

CREATE TABLE page_translations (

  page_id INT NOT NULL
  language varchar(3),
  url_segment varchar(250) UNIQUE,
  content TEXT,
  FOREIGN KEY (page_id) REFERENCES pages(id),
  PRIMARY KEY(page_id,language)

) DEFAULT CHARSET=UTF8;

pages表中,您可以存储与页面的所有翻译相关的一些有用数据。

然后,在了解当前页面的url_segment后,您可以轻松地以其他语言获取此页面的url_segment

SELECT new.url_segment
FROM page_translations AS new,
     page_translations AS cur
WHERE new.page_id = cur.page_id
  AND cur.url_segment = '/about-us'
  AND new.language = 'de'