Klearsky上で「翻訳する」ボタンを押した場合、KlearskyはMyMemoryを使用して翻訳を行います。この時、deパラメータにアカウントに使っているメールアドレスが指定されるのですが、このメールアドレス内の+がパーセントエンコーディングされていないために、以下のようなレスポンスが返ってきてしまいます:
{
"responseData": {
"translatedText": "INVALID EMAIL PROVIDED"
},
"quotaFinished": null,
"mtLangSupported": null,
"responseDetails": "INVALID EMAIL PROVIDED",
"responseStatus": "403",
"responderId": null,
"exception_code": null,
"matches": ""
}
URLのクエリストリングにおいて、+は を意味します。しかし、Klearskyはメールアドレス内の+を%2Bに置換しません。このためMyMemoryには が含まれるメールアドレスと認識され、「誤ったメールアドレス」と判定されるようです。
該当するコードは以下になります。encodeURIComponentによる変換処理は、mainState.atp.session?.emailにも必要です。
|
const url = `https://api.mymemory.translated.net/get?q=${encodeURIComponent(text)}&langpair=${langpair}|${dstLanguage}&de=${mainState.atp.session?.email}` |
Note
なお、encodeURIComponentによる変換は不完全です。RFC3986に基づく「URL内で許可されていない文字」の一部(!'()*)を変換しません。
参照:encodeURIComponentが世界基準だと誤解してた話 - Qiita
これによる問題はおそらく無いはずですが、念のために
のどちらかが良いかもしれません。
Klearsky上で「翻訳する」ボタンを押した場合、KlearskyはMyMemoryを使用して翻訳を行います。この時、
deパラメータにアカウントに使っているメールアドレスが指定されるのですが、このメールアドレス内の+がパーセントエンコーディングされていないために、以下のようなレスポンスが返ってきてしまいます:{ "responseData": { "translatedText": "INVALID EMAIL PROVIDED" }, "quotaFinished": null, "mtLangSupported": null, "responseDetails": "INVALID EMAIL PROVIDED", "responseStatus": "403", "responderId": null, "exception_code": null, "matches": "" }URLのクエリストリングにおいて、
+はを意味します。しかし、Klearskyはメールアドレス内の+を%2Bに置換しません。このためMyMemoryにはが含まれるメールアドレスと認識され、「誤ったメールアドレス」と判定されるようです。該当するコードは以下になります。
encodeURIComponentによる変換処理は、mainState.atp.session?.emailにも必要です。klearsky/src/components/Post.vue
Line 433 in 94a4cad