GraphQL/Relay
コミュニティ内の誰かがこの問題を抱えていると思います。Relayを使用しているときにGraphQLの結果をローカライズ
私たちは多言語システムを持っています。つまり、結果はローカライズされています。したがって、フィールドリゾルバに引き渡される引数はlang
です。
クエリは、このようなように書かれています。
返しますquery {
viewer(lang: ja) {
books { <- Type is `Book`
id
title <- This would be localized to Japanese.
}
}
}
:
{
"data": {
"viewer": {
"books": [
{
"id": "SOMETHINGSOMETHING123",
"name": "ハリー・ポッター" // "Harry Potter" in Japanese.
}
]
}
}
}
これは、このように見て翻訳可能なフィールドのリゾルバ(私はdataloaderを使用していますことに注意してください)することが可能です。
...
resolve: (parent, args, ast, { rootValue }) => {
const { language } = rootValue
const { BookLoader } = rootValue.loaders
return BookLoader.TranslationsLoader(language).load(parent.id).then(translations => translations[parent.id].title || parent.title)
}
翻訳が存在する場合は、代わりにそれを使用しますeオリジナル値。 Relay
をプロジェクトに導入するまで、これはうまくいきました。
我々は言語を渡す方法はありません 、できるリレーのnode
を利用したい、それが部分的に動作してきた、すなわち:
query {
node(id: "SOMETHINGSOMETHING123") {
...b
}
}
fragment b on Book {
id
name
}
しかしnode
を使用しているのでviewer
のように引数を取ることができません。
language parameters
を標準クエリとノードの両方で動作するリゾルバに渡すにはどうすればよいですか?
答えてくれてありがとう:ここに明示-graphqlを使用してgraphqlリゾルバでセッションを処理する例です。コンテキストを使用していますが、ノードID経由でリレーを照会するときは機能しません。 –
あまりにも編集をありがとう。私はこれを反映するために私の答えを編集しますが、これらのクエリはユーザーに代わって投げられます。結果は日本語でもいいかもしれませんが、英語で欲しいかもしれません。 –