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