👏

Drupalで翻訳がないノードの一覧を取得する

2024/05/22に公開

概要

Drupalで翻訳がないノードの一覧を取得する機会がありましたので、備忘録です。

方法

色々とやり方があるかと思いますが、今回はjsonapiを使用します。

マスタ言語が日本語(ja)、追加したい翻訳言語を英語(en)とします。

jsonapiによって、例えばcollectionというタクソノミーであれば、以下で取得できます。

https://xxx/jsonapi/taxonomy_term/collection

また、以下のように/enを追加することで、翻訳ノードがある場合には、その情報が返却されます。

https://xxx/en/jsonapi/taxonomy_term/collection

この時、翻訳ノードがある場合には、attributes/langcodeenになりますが、翻訳がないノードについては、jaのままとなりました。

{
"jsonapi": {
"version": "1.0",
"meta": {
"links": {
"self": {
"href": "http://jsonapi.org/format/1.0/"
}
}
}
},
"data": [
{
"type": "taxonomy_term--collection",
"id": "1e3d1e6f-5178-4980-96bd-7b045f2cc66e",
"links": {
"self": {
"href": "https://xxx/en/jsonapi/taxonomy_term/collection/1e3d1e6f-5178-4980-96bd-7b045f2cc66e?resourceVersion=id%3A19"
}
},
"attributes": {
"drupal_internal__tid": 19,
"drupal_internal__revision_id": 19,
"langcode": "en",
"revision_created": null,
"revision_log_message": null,
...

この性質を利用して、指定した言語と異なる言語コードがlangcodeに含まれた場合、その言語に対する翻訳がないノードとして抽出できそうです。

なお、JSON:APIの仕様に基づき、以下のようなpageクエリを使用することで、ページネーションを行うことができます。これを使って、データの一括取得を行います。

https://xxx/en/jsonapi/taxonomy_term/collection?page[offset]=50&page[limit]=50

まとめ

他にも良い方法があるかと思いますが、参考になりましたら幸いです。

Discussion