You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现DeepL翻译应用前端选语言名后端传语言代码?

解决方案

核心思路

前端展示语言名称供用户选择,内部同时维护对应的语言代码,翻译时向后端传递代码而非名称。需同步修改后端接口返回格式与前端状态管理逻辑。


步骤1:修改后端server.js的/languages接口

原接口将语言名称与代码拼接为字符串返回,现改为返回包含name和code的完整对象数组,让前端能同时获取名称与代码:

app.get("/languages", async(req, res) => {
  const authKey = process.env.DEEPL_API_KEY;
  const translator = new deepl.Translator(authKey);
  const sourceLanguages = await translator.getSourceLanguages();

  try {
    // 返回保留name和code字段的对象数组
    res.status(200).json(sourceLanguages.map(lang => ({
      name: lang.name,
      code: lang.code
    })));
  } catch(err) {
    console.log(err);
    res.status(500).json({message: err});
  }
});

步骤2:修改前端App.js的状态与逻辑

2.1 更新语言状态存储结构

将inputLanguage和outputLanguage从字符串改为对象,同时存储名称与代码:

const [inputLanguage, setInputLanguage] = useState({name: "English", code: "EN"});
const [outputLanguage, setOutputLanguage] = useState({name: "Japanese", code: "JA"});

2.2 调整翻译请求参数

调用后端翻译接口时,传递语言代码而非名称:

const translate = async () => {
  const data = {
    textToTranslate, 
    outputLanguage: outputLanguage.code, 
    inputLanguage: inputLanguage.code
  }
  const response = await axios("http://localhost:8000/translation", {
    params: data,
  });
  setTranslatedText(response.data);
}

2.3 更新语言交换逻辑

交换输入输出语言时,直接交换整个对象:

const handleClick = () => {
  setInputLanguage(outputLanguage);
  setOutputLanguage(inputLanguage);
}

2.4 调整Modal组件的props传递

确保Modal接收完整的语言对象数组,并正确处理选择逻辑:

{showModal && <Modal 
  setShowModal={setShowModal}
  languages={languages}
  chosenLanguage={showModal === "input" ? inputLanguage : outputLanguage}
  setChosenLanguage={showModal === "input" ? setInputLanguage : setOutputLanguage}
/>}

步骤3:修改Modal组件的渲染与选择逻辑

在Modal中渲染语言名称供用户选择,选中时将完整语言对象返回给父组件:

// Modal核心代码示例
const Modal = ({ setShowModal, languages, chosenLanguage, setChosenLanguage }) => {
  const handleSelectChange = (e) => {
    const selectedLang = JSON.parse(e.target.value);
    setChosenLanguage(selectedLang);
  };

  return (
    <div className="modal">
      <select 
        value={JSON.stringify(chosenLanguage)} 
        onChange={handleSelectChange}
      >
        {languages?.map(lang => (
          <option key={lang.code} value={JSON.stringify(lang)}>
            {lang.name}
          </option>
        ))}
      </select>
      <button onClick={() => setShowModal(null)}>确认</button>
    </div>
  );
};

export default Modal;

步骤4:更新TextBox组件的显示

TextBox中展示选中的语言名称:

// TextBox组件内使用selectedLanguage.name
<div className="language-selector">
  {selectedLanguage.name}
</div>

内容的提问来源于stack exchange,提问作者echizenya_yota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:13:17