Serialization 翻译动态内容的设计模式?

Serialization 翻译动态内容的设计模式?,serialization,localization,internationalization,Serialization,Localization,Internationalization,我想为用户提供的内容存储翻译 我见过一些应用程序在每个语言环境中存储单独的翻译记录,但是 我的意思是,我想通过序列化翻译将所有翻译存储在一个记录中 $post_title=serialize(['en_US'=>$enUS['title'], 'fr_FR'=>$frFR['title']]); $post_content=serialize(['en_US'=>$enUS['conttent'], 'fr_FR'=>$frFR['conttent']); $sql=

我想为用户提供的内容存储翻译

我见过一些应用程序在每个语言环境中存储单独的翻译记录,但是 我的意思是,我想通过序列化翻译将所有翻译存储在一个记录中

$post_title=serialize(['en_US'=>$enUS['title'], 'fr_FR'=>$frFR['title']]);
$post_content=serialize(['en_US'=>$enUS['conttent'], 'fr_FR'=>$frFR['conttent']);


$sql="INSERT INTO `posts` (`title`, `content`) VALUES(:post_title, :post_content)"
这是一种不好的做法吗?

假设(从您的
INSERT
查询)您正在使用关系数据库,这可能被认为是一种不好的做法,因为:

  • 时间和内存开销:要以任何语言加载帖子,您必须查询所有语言的序列化数据
    $post\u title
    $post\u content
    ,因此您的DB查询结果会占用更大的内存。然后,您必须取消字段序列化以获得所需语言的内容,如果前端设计不需要,这也意味着额外的周期和不必要的开销;i、 e.您没有同时以所有可用语言显示帖子

  • :如果两名翻译人员同时将同一篇文章的翻译更新为各自的语言,该怎么办

  • 破坏不透明度:正如其中一条评论中提到的,在这种情况下,序列化的另一个问题是破坏DB接口提供的预期抽象和封装。在处理本地化数据时,这可能不是一个大问题,但如果您的DBMS为您提供列级权限,那么序列化一列中的所有内容将阻止您使用该功能

  • 数据建模中的不一致性:在这种情况下,通过使用序列化,概念数据模型(包含多种语言的帖子内容的网站)最终与逻辑数据模型不一致(
    $post_content
    不是所需语言的帖子内容)。简单地说,通过查看数据模型,我们不能说这些表是由多语言网站使用的

  • i18n问题:在一列中混合各种语言作为序列化值,限制了对内容使用多种编码的可能性;e、 g.保持日文为日文,德文为拉丁文,其他语言为UTF8。此外,在不取消数据序列化的情况下,它使检查mojibake或其他编码问题变得更加困难

如果满足以下条件,则可将其视为良好的解决方法:

  • 将所有语言显示在一起:…您从不单独显示翻译,它们总是一起显示或编辑
  • 保留旧数据模型:…您希望保留旧模型中的数据。人们不必改变现有的数据模型来为多语言内容让路。这有助于将遗留软件国际化,而不会过多地干扰数据模型和处理数据库迁移

在每个语言环境中分别存储翻译记录的原因是隔离。这是有道理的,因为当用户请求英语时,您不必访问法语或西班牙语。是英国的英语还是美国的英语。