👏
Drupalで翻訳がないノードの一覧を取得する
概要
Drupalで翻訳がないノードの一覧を取得する機会がありましたので、備忘録です。
方法
色々とやり方があるかと思いますが、今回はjsonapiを使用します。
マスタ言語が日本語(ja)、追加したい翻訳言語を英語(en)とします。
jsonapiによって、例えばcollection
というタクソノミーであれば、以下で取得できます。
https://xxx/jsonapi/taxonomy_term/collection
また、以下のように/en
を追加することで、翻訳ノードがある場合には、その情報が返却されます。
https://xxx/en/jsonapi/taxonomy_term/collection
この時、翻訳ノードがある場合には、attributes/langcode
がen
になりますが、翻訳がないノードについては、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