文档服务 API:使用 locale 参数
页面摘要: 文档服务 API 中的
locale参数让你可以使用findOne()、findMany()、update()、delete()等方法,针对特定语言版本查询、创建、更新、删除、发布和取消发布文档。
默认情况下,文档服务 API 返回文档的默认本地化版本(即 'en',也就是英文版本,除非为应用设置了其他默认本地化,参见 国际化(i18n)功能)。本页介绍如何使用 locale 参数仅获取或操作特定本地化的数据。
在 findOne() 中获取本地化版本 {#find-one}
向 findOne() 传入 locale 以获取该本地化下的文档版本。
JavaScript
await strapi.documents('api::restaurant.restaurant').findOne({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
locale: 'fr',
});
响应
{
documentId: "a1b2c3d4e5f6g7h8i9j0klm",
name: "Biscotte Restaurant",
publishedAt: null, // 草稿版本(默认)
locale: "fr", // 如参数所请求的
// …
}
如果未传入 status 参数,默认返回 draft 版本。
在 findFirst() 中获取本地化版本 {#find-first}
向 findFirst() 传入 locale 以返回匹配该本地化的文档。
JavaScript
const document = await strapi.documents('api::article.article').findFirst({
locale: 'fr',
});
响应
{
"documentId": "cjld2cjxh0000qzrmn831i7rn",
"title": "Test Article"
// …
}
如果未传入 status 参数,默认返回 draft 版本。
在 findMany() 中获取本地化版本 {#find-many}
如果未传入 status 参数,默认返回 draft 版本。
向 findMany() 传入 locale 以返回所有拥有该可用本地化的文档。
JavaScript
// 默认 status: draft
await strapi.documents('api::restaurant.restaurant').findMany({ locale: 'fr' });
响应
[
{
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: 'Restaurant Biscotte',
publishedAt: null,
locale: 'fr',
// …
},
// …
]
说明:
给定以下 4 个拥有不同本地化的文档:
- 文档 A:
- en
fr- it
- 文档 B:
- en
- it
- 文档 C:
fr
- 文档 D:
fr- it
findMany({ locale: 'fr' }) 只会返回拥有 'fr' 本地化版本的文档的草稿版本,即文档 A、C 和 D。
为某个本地化 create() 文档 {#create}
向 create() 传入 locale 以针对该特定本地化创建文档。
JavaScript
await strapi.documents('api::restaurant.restaurant').create({
locale: 'es' // 若未传入,则为默认本地化创建草稿
data: { name: 'Restaurante B' }
})
响应
{
documentId: "pw2s0nh5ub1zmnk0d80vgqrh",
name: "Restaurante B",
publishedAt: null,
locale: "es"
// …
}
更新某个本地化版本 {#update}
向 update() 传入 locale 以仅更新文档中该特定本地化版本。
JavaScript
await strapi.documents('api::restaurant.restaurant').update({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
locale: 'es',
data: { name: 'Nuevo nombre del restaurante' },
});
响应
{
documentId: "a1b2c3d4e5f6g7h8i9j0klm",
name: "Nuevo nombre del restaurante",
locale: "es",
publishedAt: null,
// …
}
delete() 本地化版本 {#delete}
使用文档服务 API 的 delete() 方法 中的 locale 参数,仅删除部分本地化。除非传入特定的 status 参数,否则会同时删除草稿和已发布版本。
删除某个本地化版本
向 delete() 传入 locale 以仅删除文档中该特定本地化版本。
JavaScript
await strapi.documents('api::restaurant.restaurant').delete({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm', // documentId,
locale: 'es',
});
删除所有本地化版本
在 locale 参数中使用 * 通配符来删除文档的所有本地化版本。
JavaScript
await strapi.documents('api::restaurant.restaurant').delete({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm', // documentId,
locale: '*',
}); // 针对所有现有本地化
响应
{
"documentId": "a1b2c3d4e5f6g7h8i9j0klm",
// 返回所有被删除的本地化版本
"versions": [
{
"title": "Test Article"
}
]
}
publish() 本地化版本 {#publish}
要使用文档服务 API 的 publish() 方法 仅发布文档的某个特定本地化版本,请将 locale 作为参数传入:
发布某个本地化版本
向 publish() 传入 locale 以仅发布文档中该特定本地化版本。
JavaScript
await strapi.documents('api::restaurant.restaurant').publish({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
locale: 'fr',
});
响应
{
versions: [
{
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: 'Restaurant Biscotte',
publishedAt: '2024-03-14T18:38:05.674Z',
locale: 'fr',
// …
},
]
}
发布所有本地化版本
在 locale 参数中使用 * 通配符来发布文档的所有本地化版本。
JavaScript
await strapi
.documents('api::restaurant.restaurant')
.publish({ documentId: 'a1b2c3d4e5f6g7h8i9j0klm', locale: '*' });
响应
{
"versions": [
{
"documentId": "a1b2c3d4e5f6g7h8i9j0klm",
"publishedAt": "2024-03-14T18:45:21.857Z",
"locale": "en"
// …
},
{
"documentId": "a1b2c3d4e5f6g7h8i9j0klm",
"publishedAt": "2024-03-14T18:45:21.857Z",
"locale": "es"
// …
},
{
"documentId": "a1b2c3d4e5f6g7h8i9j0klm",
"publishedAt": "2024-03-14T18:45:21.857Z",
"locale": "fr"
// …
}
]
}
unpublish() 本地化版本 {#unpublish}
要使用文档服务 API 的 unpublish() 方法 仅发布文档的某个特定本地化版本,请将 locale 作为参数传入:
取消发布某个本地化版本
向 unpublish() 传入 locale 以仅取消发布文档中该特定本地化版本。
JavaScript
await strapi
.documents('api::restaurant.restaurant')
.unpublish({ documentId: 'a1b2c3d4e5f6g7h8i9j0klm', locale: 'fr' });
响应
{
versions: 1
}
取消发布所有本地化版本
在 locale 参数中使用 * 通配符来取消发布文档的所有本地化版本。
JavaScript
await strapi
.documents('api::restaurant.restaurant')
.unpublish({ documentId: 'a1b2c3d4e5f6g7h8i9j0klm', locale: '*' });
响应
{
versions: 3
}
取消发布文档的同时选择要返回的特定字段。
JavaScript
const document = await strapi.documents('api::article.article').unpublish({
documentId: 'cjld2cjxh0000qzrmn831i7rn',
fields: ['title'],
});
响应
{
"documentId": "cjld2cjxh0000qzrmn831i7rn",
// 返回所有被取消发布的本地化版本
"versions": [
{
"title": "Test Article"
}
]
}
针对本地化版本的 discardDraft() {#discard-draft}
要使用文档服务 API 的 discardDraft() 方法 仅丢弃文档部分本地化版本的草稿数据,请将 locale 作为参数传入:
丢弃某个本地化版本的草稿
向 discardDraft() 传入 locale 以丢弃该特定本地化版本的草稿数据。
JavaScript
await strapi
.documents('api::restaurant.restaurant')
.discardDraft({ documentId: 'a1b2c3d4e5f6g7h8i9j0klm', locale: 'fr' });
响应
{
versions: [
{
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: 'Restaurant Biscotte',
publishedAt: null,
locale: 'fr',
// …
},
]
}
丢弃所有本地化版本的草稿
在 locale 参数中使用 * 通配符来丢弃文档所有本地化版本的草稿。
JavaScript
await strapi
.documents('api::restaurant.restaurant')
.discardDraft({ documentId: 'a1b2c3d4e5f6g7h8i9j0klm', locale: '*' });
响应
{
versions: [
{
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: 'Biscotte Restaurant',
publishedAt: null,
locale: 'en',
// …
},
{
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: 'Restaurant Biscotte',
publishedAt: null,
locale: 'fr',
// …
},
{
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: 'Biscotte Restaurante',
publishedAt: null,
locale: 'es',
// …
},
]
}
统计某个本地化的文档数量 count() {#count}
要统计特定本地化的文档数量,请将 locale 与其他参数一起传给文档服务 API 的 count() 方法。
如果未传入 status 参数,则会统计草稿文档(即该本地化下可用文档的总数,因为即使是已发布文档也会被视为拥有一个草稿版本):
// 统计法语的已发布文档数量
strapi.documents('api::restaurant.restaurant').count({ locale: 'fr' });