前言
ORM(Object-Relational Mapping)是一种对数据库进行操作的思想,它将对象和数据库映射起来,通过操作对象来操作数据库。而 Sequelize 是一个 Node.js 的 ORM 框架,它将对象和 MySQL、PostgreSQL、SQLite、MS SQL Server 等数据库映射起来。在多语言的应用程序中,需要 ORM 框架支持多语言,才能更方便地进行国际化处理。Sequelize 如何支持多语言 ORM 呢?
多语言 ORM 思路
在多语言应用程序中,需要在数据库中存储多语言文本信息。一般情况下,需要创建一个表来存储多语言信息,这个表需要包含多个字段,每个字段对应一种语言,然后在程序中根据当前语言选取对应的字段。比如下面的示例:
CREATE TABLE `product` ( `id` INT(11) NOT NULL, `name_en` VARCHAR(255) DEFAULT NULL, `name_cn` VARCHAR(255) DEFAULT NULL, `name_jp` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
上面的示例中,product 表包含 id、name_en、name_cn 和 name_jp 四个字段,分别存储英文、中文和日文的商品名称。在程序中,可以根据当前语言选择对应的字段进行展示。
使用 Sequelize 支持多语言 ORM,需要新增一个 Model 层并继承原来的 Model,增加支持多语言的字段。代码如下:
-- -------------------- ---- ------- ----- - ----- - - --------------------- ----- -------------- ------- ----- - ------ ---------------- -------- - ----- ----- - ------------- -- ------ ------ ----- ---- - ------------------------ ------------------ -- - -- ------------------- --- --- - --------------- - - ----- --------------------- ---------- ----- -- - --- ---------------------- --------- - --- - ---------- - ------ -------- ---- -- - ------ -------- ---- --- - -------- -------- ----- -- ------ --------------- ----- - ------ ---- - --- - ----- - --- - ---------- - ------ -------- ---- -- - ------ -------- ------ - - -------- -------- --- -- ------ ----------------- ------- - ----- ------ - --- --------------------------------- -- - -- ----------------- - ------ - ----- ---- - ------------ ---- ------------ - ------------ - ---- - ----------- - ------------ - --- ------ ------- - --- - ---------- - ------ -------- ---- -- - ------ -------- ------ - - -------- -------- --- -- ------ -------------------- ------- - ----- ------ - --- --------------------------------- -- - ----- ------- - -------------------- ----- --------------- - ------------ --- ------ ------- - --- - --------- - ------ -------- ------- ---- - ------ -------- ---- -- - -------- -------- ---- -- ------ ----- --------------------- ----- - ----- ------- - -------------------- -------- ------------------ - ------------------------- ------------------ -- ---- ----------- - ----- ----- ------- - ----- ---------------------- --------------------- -- - ------------ - ------------ -- --------- ------ --------- --- ------ -------- - - -------------- - ---------------
上面的代码中,继承了 Sequelize 的 Model 类,并重写了 init 方法和一些实用方法。init 方法用来初始化 Model,它会循环属性列表,为支持多语言的属性新增字段。支持的语言列表通过 options.langs 在定义 Model 时进行传递。fieldName 方法用来获取指定语言的字段名,setFieldValues 和 fieldValues 用来设置和获取指定语言的字段值。findWithLang 方法用来获取带语言信息的查询结果。
Sequelize 多语言 ORM 示例
在使用 Sequelize 支持多语言 ORM 时,需要继承前面的 TranslateModel 并定义新的 Model,定义时需要指定支持的语言列表。下面是一个示例代码:
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- -------------- - ---------------------------- ----- ------- ------- -------------- - ------ --------------- - ----------- - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- -- -- - ---------- ------ ------ ----- ------ -- -- - - -------------- - --------
上面的代码中,Product 继承了 TranslateModel 并定义了新的 Model,定义时指定了支持的语言列表。
在程序中使用例子:
-- -------------------- ---- ------- ----- ------- - ---------------------------- ----- --------- - --- --------------- -- ---- ----- ---------------- -------- ----------- -------- ------ --- -- ---- ----- ------- - ----- ---------------------- ------ - --- -- -- -- ------ --------------------- -- - - --- -- ----- ---------- - -
上面的例子中,首先定义了一个 Product Model,然后创建了一条记录,记录中指定了英文和中文名称。接着调用了 findWithLang 方法查询记录,查询时指定了语言为英文。查询结果只包含了英文名称,中文名称被忽略掉了。
总结
本篇文章介绍了 Sequelize 如何支持多语言 ORM,包括多语言 ORM 的思路、多语言 ORM 示例和相关代码。使用 Sequelize 支持多语言 ORM,可以方便地进行国际化处理,提高应用程序的多语言支持能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/664c3757d3423812e4b07bd5