概要

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

方法

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

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

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

https://xxx/jsonapi/taxonomy_term/collection

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

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

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

{""""""}}}}"{"""""}}""""""jvmlsh,dtilsh,addlrrseeieraydiertrraeeortnletp"nletuunvvnsakffae:kffrppgiiai"s""""s""iaacsspo:"::::""::blloiiin:1:u__doo""{{"["e{"tiienn::{ht3{henn"__tadtstt:cl{"tx1t"eero1poep:rr"eg.:n6snnea_0/of:{aantm"/m-/ll"ee,jy5/__,dss_1x__"sot7xtr:ane8xiegar-/dvnepm4e"iu"i-9n:sl:.-8/iloc0j1o,nro-s9nugl9o,_l/l6nilfebad,ocdp"rt-i:mi7/aobt1tn0a9/"4x,1,5o.fn02o/cm"cy6_6tee"r,m/collection/1e3d1e6f-5178-4980-96bd-7b045f2cc66e?resourceVersion=id%3A19"

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

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

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

まとめ

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