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

标签 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;

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

最佳答案

一个页面可以有多个翻译,所以你需要一对多的关系模式:

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/

相关文章:

php - 是否可以将 unicode 数字与 mysql int 列进行比较?

安卓应用程序 : how to display resultset in Listview?

mysql 创建表数据目录

mysql - NULL 或空字符串更有效/更自然?

database - AngularJS:我需要了解数据库结构才能实现吗?

rust - 使用 Project Fluent 的 Rust 实现匹配 None 和缺失值

html - 如何在没有laravel提交按钮的情况下插入值复选框

python - 您将如何为这种数据库关系建模?

internationalization - Libgdx国际化

python - Django 1.3 get_absolute_url 和 localeurl