Directus多语言国际化i18n处理
Directus的国际化非常方便,我们以article
为数据模型Data Model为例,其中包括title和body字段。
操作方法
一 建立数据模型
在后台创建名为article
的data
model
注意,该模型用于存放数据关系,可将非翻译的字段存放在这个模型中,如作者、发布时间、状态等等,后面会补充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/