Directus多语言国际化i18n处理

后端开发Directus 328

Directus的国际化非常方便,我们以article为数据模型Data Model为例,其中包括title和body字段。

操作方法

一 建立数据模型

在后台创建名为articledatamodel

注意,该模型用于存放数据关系可将非翻译的字段存放在这个模型中,如作者、发布时间、状态等等,后面会补充RESTApi调用数据的方法

在模型中创建类型为Translations,并且名称也为translations的字段

最后article模型应该是这样的

点开translations字段可以看到数据关系

也可以对其进行相关配置

二 数据字段的配置

在创建完translations字段后我们会发现它自动创建了三个data model

注意,这里不可见也是最重要的就是article_translations,数据字段的配置都需要在这里进行,我们需要添加title和body的字段只需要在此添加即可

三 语言的管理

由于系统默认生成出非常多语言,我们不需要那么多或者添加其它语言,只需要在content下面的Languages添加或删除即可

最后返回article我们可以发现编辑页面多了语言的选择和内容的切换

四 数据的调用

Directus中查询translations中的翻译字段数据需要使用fields=translations.fieldName这样的参数来实现,例子:

查询单个item,并且语言为cn

/items/routes/1?fields=id,translations.name,route&deep[translations][_filter][languages_id][_eq]=cn

查询整个collection

/items/routes?fields=id,translations.languages_id,translations.name,route

根据语言查询数据

#Option 1

感谢热心网友亚伦的提示,20220919更新了API在原有Model中的筛选某语言的数据调用方式

语法格式为:

?deep[translations][_filter][languages_code][_eq]=cn

参考官方deep查询:https://docs.directus.io/reference/query.html#deep

#Option 2

以REST Api为例

我们需要查询数据只需要查询article_translations这个data model即可

http://localhost:8055/items/article_translations

显示指定字段

http://localhost:8055/items/article_translations?fields=title,body

查询某一条记录,如ID为1的数据

http://localhost:8055/items/article_translations/1?fields=title,body

根据语言筛选数据

筛选简体中文的内容

http://localhost:8055/items/article_translations?filter={%22languages_id%22:%20{%20%22_eq%22:%20%22zh-CN%22%20}}

语法

REST API

?filter[first_name][_eq]=Rijk

// or

?filter={ "first_name": { "_eq": "Rijk" }}

GraphQL

query {
	users(filter: { first_name: { _eq: "Rijk" } }) {
		id
	}
}

更多参考官网Query的用法:https://docs.directus.io/reference/query/

Read Comments

  • 亚伦2 years ago1

    其实直接从article使用deep来调用也可以. 类似这样:
    http://localhost:8055/items/article/2?fields=translations.*&deep[translations][_filter][languages_id][_eq]=en-US

    • Julian2 years ago0

      完全正确,非常感谢
      ?deep[translations][_filter][languages_id][_eq]=cn

Post Comment