创建多语言数据库的最佳方法是什么?为每个表创建本地化表使设计和查询变得复杂,在其他情况下为每种语言添加列很简单但不动态,请帮助我理解什么是企业应用程序的最佳选择
可能重复:
多语言数据库的模式
这是一个例子:
[ products ]
id (INT)
name-en_us (VARCHAR)
name-es_es (VARCHAR)
name-pt_br (VARCHAR)
description-en_us (VARCHAR)
description-es_es (VARCHAR)
description-pt_br (VARCHAR)
price (DECIMAL)
Run Code Online (Sandbox Code Playgroud)
问题是:每种新语言都需要修改表结构.
这是另一个例子:
[ products-en_us ]
id (INT)
name (VARCHAR)
description (VARCHAR)
price (DECIMAL)
[ products-es_es ]
id (INT)
name (VARCHAR)
description (VARCHAR)
price (DECIMAL)
Run Code Online (Sandbox Code Playgroud)
问题是:每种新语言都需要创建新表,并且"价格"字段在每个表中都是重复的.
这是另一个例子:
[ languages ]
id (INT)
name (VARCHAR)
[ products ]
id (INT)
price (DECIMAL)
[ translation ]
id (INT, PK)
model (VARCHAR) // product
field (VARCHAR) // name
language_id (INT, …Run Code Online (Sandbox Code Playgroud) 我需要为一个多语言的Web应用程序创建一个大型数据库模型.
我每次想到如何做到这一点的一个疑问是我如何解决一个字段的多个翻译.一个案例.
管理员可以从后端编辑的语言级别表可以有多个项目,如:basic,advance,fluent,mattern ......在不久的将来,它可能会是另一种类型.管理员进入后端并添加一个新级别,它会将其排序在正确的位置..但我如何处理最终用户的所有翻译?
数据库国际化的另一个问题是,用户研究可能会有所不同,从美国到英国再到DE ......在每个国家,他们都有自己的水平(可能它会相当于另一个但最终不同).计费怎么样?
你如何大规模地模拟这个?
mysql database multilingual database-design internationalization
美好的一天!
我正在寻找实现多语言数据库模式的最佳方法,我使用的方法与此处相同:多语言数据库设计的最佳实践是什么?(一个表有语言中性数据,一个表用于所有翻译).它似乎很好,干净,并没有限制可能的语言数量.
但我想使用一个简单的ORM(如C#中的LINQ,PHP等出口),其中每个表都映射到实体类.这可以工作,但查询变得更加复杂.
可能有一些特殊技术可以使用这样的DB shema和ORM吗?或者我可以从支持更复杂映射的更复杂的ORM中受益?
提前致谢!
可能重复:
多语言数据库的模式
我正在开发一个我计划以多种语言提供的Web应用程序.在设计数据库时,我会在两种不同的方式之间来回传递,以便在数据库中存储本地化描述和诸如此类的东西.
第一个选项是众所周知的table_name,table_name_ml类型选项:
TABLE Category (
ID int,
ParentID int,
Name varchar(50),
Description varchar(255)
)
TABLE Category_ML (
ID int,
CategoryID int,
LocaleID int,
Name varchar(50),
Description varchar(255)
)
Run Code Online (Sandbox Code Playgroud)
第二种选择是根本不将文本存储在基表中,而是存储一个可用于在其他地方查找实际本地化文本的标记,如下所示:
TABLE Category (
ID int,
ParentID int,
NameToken varchar(50),
DescriptionToken varchar(50),
)
// Tables in a separate content management type system
TABLE Content (
ID int,
Token varchar(50)
)
TABLE Translation (
ID int
ContentID int,
LocaleID int,
Value text
)
Run Code Online (Sandbox Code Playgroud)
这里的想法是内容和转换表将保存数据库中许多不同实体的本地化文本.服务层将仅使用标记返回基础对象,视图层将使用内容/转换表查找实际文本值 - 这将被高度缓存.内容/翻译表还将用于存储其他CMS类型内容(网页上的静态文本等)
我喜欢第一个选项,因为它尝试过并且是真的,但第二个选项似乎还有很多其他优点:
由于我以前从未见过这样的设计,我认为我必须遗漏一些东西.有没有好的理由不以这种方式设计呢?或者也许有一个我没有想过的更好的选择?
可能重复:
多语言数据库的模式
我正在构建一个非常繁忙的Web应用程序,它具有多语言数据.所有这些数据都存储在MySQL数据库中.存储此数据的最佳方法是什么?我有一些猜测:
我们有一个PostgreSQL数据库.我们有几个表需要将某些数据保存在多种语言中(幸运的是,系统范围内定义了可能的语言列表).
例如,让我们从:
create table blah (id serial, foo text, bar text);
Run Code Online (Sandbox Code Playgroud)
现在,让我们多语言.怎么样:
create table blah (id serial, foo_en text, foo_de text, foo_jp text,
bar_en text, bar_de text, bar_jp text);
Run Code Online (Sandbox Code Playgroud)
这对Postgres的全文搜索很有用.只需为每种语言添加一个tsvector列.
但它是最佳的吗?也许我们应该使用另一张表来保存翻译?喜欢:
create table texts (id serial, colspec text, obj_id int, language text, data text);
Run Code Online (Sandbox Code Playgroud)
也许,只是也许,我们应该使用其他东西 - 来自SQL世界的东西?任何帮助表示赞赏.
我有一个用PHP编写的网站,有15-20页,他们有很多文字.我必须将它翻译成3种不同的语言.首先,我尝试使用strings($text_hello = "??";)但是这个选项变得非常繁琐且难以用50多个字符串来管理.我也发现了gettext选项,这很好.但我特别感兴趣的是(MySQL)数据库支持选项,其中所有翻译都将从数据库中获取.另外,我可能是错的,但是使用gettext,你必须拥有额外的index.php ?lang=en_US(?)我希望它在Twitter或Facebook上更改,就像URL不会改变一样.你能建议我怎么做或指导我这个主题的教程/文章/以前的问题吗?谢谢!
另外,我看到人们推荐Zend_Translate,但这是否需要我在Zend框架中重新编写我的网站?
在询问之前,我确实在搜索它,但我得到的结果并不是我想要的.
虽然这个问题可能与 其他许多问题类似, 但 我想就FuelYP上针对i18n的最佳方法提出意见/建议.
所以,这是我到目前为止所得到的:
数据库架构#1:
models (id, name_pt, name_es, name_en, description_pt, description_es, description_en)
Run Code Online (Sandbox Code Playgroud)
样本数据#1:
(1, 'Modelo', 'Modelo', 'Model', 'Descrição do modelo', 'Descripción del modelo', 'Model description')
Run Code Online (Sandbox Code Playgroud)
优点:
public function & __get($property)
{
if (array_key_exists($property, array('name', 'description')))
{
$property = $property.'_'.Session::get('lang_code');
}
return parent::__get($property);
}
Run Code Online (Sandbox Code Playgroud)
这样,我就可以打电话了:
$model->name;
$model->description;
Run Code Online (Sandbox Code Playgroud)
代替:
$model->{'name_'.Session::get('lang_code')};
$model->{'description_'.Session::get('lang_code')};
Run Code Online (Sandbox Code Playgroud)
缺点:
Model_Model::query()
->order_by('name_'.Session::get('lang_code'))
->get();
Run Code Online (Sandbox Code Playgroud)
数据库架构#2:
languages (id, code, name)
models (id)
i18n_models (id, …Run Code Online (Sandbox Code Playgroud) 我正在使用 NestJS 服务器和 TypeORM 开发一个应用程序。我需要本地化一些领域,经过研究我发现这个包typeorm-i18n。文档说如果你使用 NestJS,你应该使用这个包:vlzh/nest-typeorm-i18n。但是没有关于如何使用它的例子。而且我还查看了 test 文件夹,但没有运气。
有谁知道如何使用这个包?或者也许想出更好的解决方案?
database ×6
localization ×4
multilingual ×4
mysql ×3
orm ×2
php ×2
fuelphp ×1
gettext ×1
nestjs ×1
postgresql ×1
sql ×1
translation ×1
typeorm ×1
typescript ×1