当用户浏览某个页面然后切换语言时,应该发生以下操作:
- 如果他正在浏览的页面有翻译,则重定向到该页面。
- 如果该页面没有翻译版本,则重定向到主页。
因此,例如,用户浏览 /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;
应该添加哪些关系/列来实现这一点?
最佳答案
一个页面可以有多个翻译,所以你需要一对多的关系模式:
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'
关于mysql - 构建具有复杂内部化支持的站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22092480/