
以下の【質問の主旨】についてご存知の方がいらっしゃいましたらご教示を願います。
【質問の主旨】
画像のアプリでピンク色で囲った矢印をクリックすると、テキストボックスにある英文が日本語文に翻訳されるというアプリを作成しています。
しかし現時点では矢印をクリックしても、何も翻訳されません。またコンソール画面を確認すると401
エラーが表示されます。
このエラーを表示させず、コンソール画面には200
OKを表示させ、かつ英文の翻訳となる日本語文を右のテキストボックスに表示させるためには、【質問の補足】に上げるコードをどのように修正すれば良いでしょうか?
【質問の補足】
1. App.js
import TextBox from "./components/TextBox"; import Arrows from "./components/Arrows"; import Button from "./components/Button"; import Modal from "./components/Modal"; import { useState } from "react"; import axios from "axios"; const App = () => { const [showModal, setShowModal] = useState(null); const [inputLanguage, setInputLanguage] = useState("EN"); const [outputLanguage, setOutputLanguage] = useState("JA"); const [textToTranslate, setTextToTranslate] = useState(""); const [translatedText, setTranslatedText] = useState(""); const translate = async () => { const options = { method: 'GET', url: 'https://deepl-translate-machine.p.rapidapi.com/v1/translate/text', params: { target: outputLanguage, source: inputLanguage, text: textToTranslate }, headers: { 'X-RapidAPI-Key': process.env.RAPID_API_KEY, 'X-RapidAPI-Host': process.env.RAPID_API_HOST } }; try { const response = await axios.request(options); console.log(response.data); setTranslatedText(response.data); } catch (error) { console.error(error); } } const handleClick = () => { setInputLanguage(outputLanguage); setOutputLanguage(inputLanguage); } return ( <div className="app"> {!showModal && <> <TextBox selectedLanguage={inputLanguage} style='input' setShowModal={setShowModal} textToTranslate={textToTranslate} setTextToTranslate={setTextToTranslate} setTranslatedText={setTranslatedText} /> <div className="arrow-container" onClick={handleClick}> <Arrows /> </div> <TextBox selectedLanguage={outputLanguage} style='output' setShowModal={setShowModal} translatedText={translatedText} /> <div className="button-container" onClick={translate}> <Button /> </div> </>} {showModal && <Modal setShowModal={setShowModal} chosenLanguage={showModal === "input" ? inputLanguage : outputLanguage} setChosenLanguage={showModal === "input" ? setInputLanguage : setOutputLanguage} />} </div> ); } export default App;
2. TextBox.js
import SelectDropDown from "./SelectDropDown"; const TextBox = ({ selectedLanguage, style, setShowModal, textToTranslate, setTextToTranslate, translatedText, setTranslatedText }) => { return ( <div> <SelectDropDown style={style} setShowModal={setShowModal} selectedLanguage={selectedLanguage} /> <textarea placeholder={style === "input" ? "Enter text" : "Translation"} disabled={style === "output"} onChange={(e) => setTextToTranslate(e.target.value)} value={style === "input" ? textToTranslate: translatedText } /> </div> ) } export default TextBox;
3. そのほかのコード
App.jsとTextBox.js以外のコードはこちらのGitHubのリポジトリにまとめています。
4. 英文翻訳のためのAPI
英文翻訳のためのAPIはRapid.api の中に登録されている”DeepL Translate Machine”を使用しています。
”DeepL Translate Machine”を利用するためには、Rapid.apiにアカウントを作成し、DeepL Translate Machineのクレジットカード番号を登録する必要がありますが、すでにどちらの作業も終えています。
なお、こちらのGitHubのリポジトリにある翻訳アプリは同じく”DeepL Translate Machine”を利用しており、異なる言語の翻訳が可能です。このことから今回の質問は”DeepL Translate Machine”ではなく、私のコード側に問題があると思います。
5. .envファイル
「3. そのほかのコード」で挙げたGitHubリポジトリ内には、.envファイルは含まれていませんが、ローカル開発環境内には.envファイルが存在します。
その.envファイルの内容は.env.sampleファイルの内容に準じており、”DeepL Translate Machine”が発行したkeyとHost名を使用しています。
6. 401エラーの確認
401エラーとは、ユーザー名・パスワードなどが間違っておりWebサイトの認証に失敗したときに表示されると思います。ですが.envファイルのkeyとHost名はコピペしたもので、間違いはないことを何度も確認しています。
7. 文章を翻訳するときのGETメソッド(2023年7月25日追記)
英語の文章を日本語の文章を翻訳するときに叩くAPIのコードスニペットは以下の通りです。
コードはRapid API内にある"DeepL Translate Machine"が提示しているものから、"X-RapidAPI-Key"とX-RapidAPI-Hostのプロパティ値を伏せたものです。
const axios = require('axios'); const options = { method: 'GET', url: 'https://deepl-translate-machine.p.rapidapi.com/v1/translate/text', params: { target: 'JA', source: 'EN', text: 'NASA was established in 1958, succeeding the National Advisory Committee for Aeronautics (NACA), to give the U.S. space development effort a distinctly civilian orientation, emphasizing peaceful applications in space science.' }, headers: { 'X-RapidAPI-Key': API_KEY, 'X-RapidAPI-Host': HOST_NAME } }; try { const response = await axios.request(options); console.log(response.data); } catch (error) { console.error(error); }
以上、ご確認のほどよろしくお願い申し上げます。



回答2件
あなたの回答
tips
プレビュー