相关疑难解决方法(0)

多语言数据库的模式

我正在开发一种多语言软件.就应用程序代码而言,可本地化不是问题.我们可以使用特定于语言的资源,并拥有适合他们的各种工具.

但是,定义多语言数据库模式的最佳方法是什么?假设我们有很多表(100或更多),每个表可以有多个可以本地化的列(大多数nvarchar列应该是可本地化的).例如,其中一个表可能包含产品信息:

CREATE TABLE T_PRODUCT (
  NAME        NVARCHAR(50),
  DESCRIPTION NTEXT,
  PRICE       NUMBER(18, 2)
)
Run Code Online (Sandbox Code Playgroud)

我可以想到三种方法来支持NAME和DESCRIPTION列中的多语言文本:

  1. 每种语言的单独列

    当我们向系统添加新语言时,我们必须创建其他列来存储翻译后的文本,如下所示:

    CREATE TABLE T_PRODUCT (
      NAME_EN        NVARCHAR(50),
      NAME_DE        NVARCHAR(50),
      NAME_SP        NVARCHAR(50),
      DESCRIPTION_EN NTEXT,
      DESCRIPTION_DE NTEXT,
      DESCRIPTION_SP NTEXT,
      PRICE          NUMBER(18,2)
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 翻译表与每种语言的列

    不存储翻译的文本,而是仅存储翻译表的外键.转换表包含每种语言的列.

    CREATE TABLE T_PRODUCT (
      NAME_FK        int,
      DESCRIPTION_FK int,
      PRICE          NUMBER(18, 2)
    )
    
    CREATE TABLE T_TRANSLATION (
      TRANSLATION_ID,
      TEXT_EN NTEXT,
      TEXT_DE NTEXT,
      TEXT_SP NTEXT
    )
    
    Run Code Online (Sandbox Code Playgroud)
  3. 用于每种语言的行的转换表

    不存储翻译的文本,而是仅存储翻译表的外键.转换表仅包含一个键,而一个单独的表包含每个语言转换的行.

    CREATE TABLE T_PRODUCT (
      NAME_FK        int,
      DESCRIPTION_FK int,
      PRICE          NUMBER(18, 2)
    )
    
    CREATE TABLE T_TRANSLATION ( …
    Run Code Online (Sandbox Code Playgroud)

multilingual database-design localization

222
推荐指数
5
解决办法
9万
查看次数

什么是多语言数据库设计的最佳实践?

创建多语言数据库的最佳方法是什么?为每个表创建本地化表使设计和查询变得复杂,在其他情况下为每种语言添加列很简单但不动态,请帮助我理解什么是企业应用程序的最佳选择

sql database database-design

183
推荐指数
4
解决办法
11万
查看次数

用于国际和多语言目的的数据库建模

我需要为一个多语言的Web应用程序创建一个大型数据库模型.

我每次想到如何做到这一点的一个疑问是我如何解决一个字段的多个翻译.一个案例.

管理员可以从后端编辑的语言级别表可以有多个项目,如:basic,advance,fluent,mattern ......在不久的将来,它可能会是另一种类型.管理员进入后端并添加一个新级别,它会将其排序在正确的位置..但我如何处理最终用户的所有翻译?

数据库国际化的另一个问题是,用户研究可能会有所不同,从美国到英国再到DE ......在每个国家,他们都有自己的水平(可能它会相当于另一个但最终不同).计费怎么样?

你如何大规模地模拟这个?

mysql database multilingual database-design internationalization

34
推荐指数
2
解决办法
2万
查看次数

如何存储多语言数据?

可能重复:
多语言数据库的模式

我正在构建一个非常繁忙的Web应用程序,它具有多语言数据.所有这些数据都存储在MySQL数据库中.存储此数据的最佳方法是什么?我有一些猜测:

  1. 每种语言的表格中都有单独的列(例如title_en,title_fr)
  2. 每种语言的单独表格(如pages_en,pages_fr)
  3. 用于翻译的交叉表(在页面表中具有id并且在翻译表中具有此链接的id,其中存在多个列,例如trans_en,trans_fr)
  4. 在一个表中具有非多语言数据,例如每种语言在一个表中的页面和翻译(pages_en,pages_fr)
  5. 其他?

php mysql multilingual

6
推荐指数
1
解决办法
1167
查看次数

如何在 Trait 中配置 Laravel 模型属性?

我有一个名为的特征Multilingual,它使用模型及其lang属性translation_of(另请参阅/sf/answers/510984421/)来提供实体的多种翻译。

现在我想在调用translation_of时从模型中隐藏该字段$model->toArray(),这是最容易的通过将其添加到$hidden属性中来完成的。像这样:

class Model {
    use Multilingual;

    protected $hidden = ['translation_of'];
}
Run Code Online (Sandbox Code Playgroud)

但为了保持原始模型干净,我想通过使用的特征添加隐藏字段。

我努力了:

  1. 添加protected $hidden = ['translation_of'];到特征中,这是不允许的:Undefined: trait declaration of property 'hidden' is incompatible with previous declaration

    而且扩展性也不是很好(我认为它将被$hidden类的属性覆盖......)

  2. 向特征添加启动方法:

    static function bootMultilingual() {
        static::$hidden[] = 'translation_of';
    }
    
    Run Code Online (Sandbox Code Playgroud)

    由于范围的原因,这(正如我怀疑的那样)也是不允许的。

有什么干净的方法来做到这一点的想法吗?

请帮忙!


注意:为了保持动态,我认为可以通过两种方式完成:

  1. 内部:$this->hidden[] = 'translation_of';
  2. 外部:$model->setHidden(array_merge($model->getHidden(), ['translation_of']));

attributes model traits laravel eloquent

3
推荐指数
1
解决办法
3830
查看次数