」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 帶有 API 的簡單語言翻譯器

帶有 API 的簡單語言翻譯器

發佈於2024-10-31
瀏覽:372

Simple Language Translator with API

#100daysofMiva 编码挑战的第 8 天,我研究了一个简单的翻译模型,可以将一种语言翻译成另一种语言?
这是JS,这很神奇✨?

?语言翻译器脚本文档

概述

此 JavaScript 代码旨在创建一个有趣的交互式语言翻译器!它利用 MyMemory API 在不同语言之间翻译文本,并允许您交换语言、复制翻译,甚至大声朗读文本。 ??


特征

  • ?语言选择:用户可以从多种语言中进行选择,从阿姆哈拉语到祖鲁语!
  • ?语言交换: 单击按钮即可轻松在源语言和目标语言之间交换。
  • ?文本转语音: 聆听所选语言的原始文本或翻译文本。
  • ?复制到剪贴板: 单击即可复制原始文本或翻译文本。

代码分解

语言数据

const countries = { /*...*/ } 

该对象包含可用的语言及其各自的国家代码。例如,“en-GB”:“English”将语言代码与其名称配对。

动态下拉菜单

selectTag.forEach((tag, id) => {
    /*...*/
});

此代码使用国家对象中列出的所有语言动态填充下拉菜单。第一个下拉列表默认为英语(“en-GB”),第二个下拉列表默认为印地语(“hi-IN”)。

语言交换

exchageIcon.addEventListener("click", () => {
    /*...*/
});

单击交换图标允许用户在“从”和“到”字段之间交换文本和所选语言。

实时翻译

translateBtn.addEventListener("click", () => {
    /*...*/
});

单击“翻译”按钮时,文本将发送到 MyMemory API,翻译后的文本将显示在“目标文本”字段中。在等待响应时,会显示“正在翻译...”占位符。

文本转语音和复制

icons.forEach(icon => {
    /*...*/
});

本部分处理文本转语音和复制功能:

  • 语音:以所选语言大声播放文本。
  • 复制:将文本复制到剪贴板。

它是如何运作的

  1. 选择语言 ?:从下拉列表中选择您的语言。
  2. 输入或粘贴文本 ✍️:输入要翻译的文本。
  3. 翻译 ?:点击“翻译”按钮,观看奇迹发生!
  4. 交换、聆听或复制 ???:交换语言、聆听翻译或将文本复制到剪贴板。

依赖关系

  • MyMemory API:翻译功能由 MyMemory API 提供支持。确保您有有效的互联网连接才能正常工作。

潜在的增强功能

  • 语言自动检测:自动检测输入文本的语言。
  • 高级错误处理:改进对翻译错误或 API 故障的响应。
  • 多种翻译:显示可用的替代翻译。

以下是代码的工作原理及其用途的逐步细分:

第 1 步:定义可用语言

const countries = { /*...*/ }
  • 它的作用:该对象包含键值对,其中键是语言国家代码(例如英语的“en-GB”),值是语言的名称(例如“English” ).
  • 目的:此数据用于填充语言选择下拉列表,以便用户可以选择其源语言和目标语言。

第 2 步:选择 DOM 元素

const fromText = document.querySelector(".from-text"),
      toText = document.querySelector(".to-text"),
      exchageIcon = document.querySelector(".exchange"),
      selectTag = document.querySelectorAll("select"),
      icons = document.querySelectorAll(".row i");
      translateBtn = document.querySelector("button"),
  • 它的作用:此代码从 HTML 文档中选择各种元素并将它们存储在变量中以便以后轻松访问。
    • fromText 和 toText:用户输入文本并查看翻译的文本区域。
    • exchageIcon: 用于交换语言和文本的图标。
    • selectTag:用于选择语言的下拉菜单。
    • 图标:复制和语音功能的图标。
    • translateBtn: 触发翻译的按钮。

第 3 步:填充语言下拉列表

selectTag.forEach((tag, id) => {
    for (let country_code in countries) {
        let selected = id == 0 ? country_code == "en-GB" ? "selected" : "" : country_code == "hi-IN" ? "selected" : "";
        let option = ``;
        tag.insertAdjacentHTML("beforeend", option);
    }
});
  • 它的作用:此循环遍历国家对象并将每种语言添加为语言选择下拉列表中的选项。
    • 如果下拉菜单是第一个(id == 0),则默认选择英语(“en-GB”)。
    • 如果下拉菜单是第二个(id == 1),则默认选择印地语(“hi-IN”)。

第 4 步:交换语言和文本

exchageIcon.addEventListener("click", () => {
    let tempText = fromText.value,
        tempLang = selectTag[0].value;
    fromText.value = toText.value;
    toText.value = tempText;
    selectTag[0].value = selectTag[1].value;
    selectTag[1].value = tempLang;
});
  • 它的作用:单击交换图标时,此功能会在“从”和“到”文本区域以及所选语言之间交换文本。
    • tempText 暂时保存“from-text”字段中的原始文本。
    • tempLang 暂时保留第一个下拉列表中的原始语言。
    • 然后将“源文本”替换为“目标文本”,反之亦然。所选语言也会交换。

第5步:清除翻译文本

fromText.addEventListener("keyup", () => {
    if(!fromText.value) {
        toText.value = "";
    }
});
  • 它的作用:如果用户删除“from-text”字段中的所有文本,此函数也会自动清除“to-text”字段。
  • 目的:确保如果输入文本被清除,翻译也被清除,防止混淆。

第 6 步:翻译文本

translateBtn.addEventListener("click", () => {
    let text = fromText.value.trim(),
        translateFrom = selectTag[0].value,
        translateTo = selectTag[1].value;
    if(!text) return;
    toText.setAttribute("placeholder", "Translating...");
    let apiUrl = `https://api.mymemory.translated.net/get?q=${text}&langpair=${translateFrom}|${translateTo}`;
    fetch(apiUrl).then(res => res.json()).then(data => {
        toText.value = data.responseData.translatedText;
        data.matches.forEach(data => {
            if(data.id === 0) {
                toText.value = data.translation;
            }
        });
        toText.setAttribute("placeholder", "Translation");
    });
});
  • 它的作用:当单击“翻译”按钮时,此功能:
    1. 从“from-text”字段中提取文本
    2. 从下拉列表中标识所选语言
    3. 使用文本和所选语言向 MyMemory API 发送请求
    4. 从 API 接收翻译并将其显示在“目标文本”字段中。
    5. 更新占位符文本,同时等待翻译以指示该过程正在进行。

概括

该脚本允许用户通过动态和交互式界面在不同语言之间翻译文本。用户可以选择语言、输入文本、单击翻译、交换语言和文本、大声朗读翻译或将其复制到剪贴板。

享受不同语言的乐趣,让您的翻译之旅充满乐趣和互动! ??到下一个?✌?✨

在这里查看
https://app.marvelly.com.ng/100daysofMiva/day-8/

源代码
https://github.com/Marvellye/100daysofMiva/blob/main/Projects/Day_8-Simple_language_translator

版本聲明 本文轉載於:https://dev.to/marvellye/simple-language-translator-with-api-3bd7?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-07-12
  • 如何實時捕獲和流媒體以進行聊天機器人命令執行?
    如何實時捕獲和流媒體以進行聊天機器人命令執行?
    在開發能夠執行命令的chatbots的領域中,實時從命令執行實時捕獲Stdout,一個常見的需求是能夠檢索和顯示標準輸出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    程式設計 發佈於2025-07-12
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-07-12
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-07-12
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在銀光應用程序中,嘗試使用LINQ建立錯誤的數據庫連接的嘗試,無法找到以查詢模式的實現。 ”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例中,tblpersoon可能...
    程式設計 發佈於2025-07-12
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-07-12
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-07-12
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    程式設計 發佈於2025-07-12
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-07-12
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-07-12
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-07-12
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確預期操作結果的火災和...
    程式設計 發佈於2025-07-12
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-07-12
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c 的函數時,接受成員函數指針的函數時,必須同時提供對象的指針,並提供指針和指針到函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此)和成員函數指針。這可以通過修改Menubutton :: SetButton()(如下所示:[&& && && &&華)...
    程式設計 發佈於2025-07-12

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3