目錄
約束API
翻譯自定義表單驗證消息
方法一:利用瀏覽器的語言設置
方法二:在本地存儲中設置首選語言
總結
參考
首頁 web前端 css教學 為HTML表單創建自定義翻譯消息的兩種方法

為HTML表單創建自定義翻譯消息的兩種方法

Mar 08, 2025 am 09:57 AM

Two Ways to Create Custom Translated Messaging for HTML Forms

HTML表單內置了驗證表單輸入和其他控件的方法,這些方法基於預定義規則,例如:設置輸入為必填項、設置範圍滑塊的最小值和最大值約束,或為電子郵件輸入設置模式以檢查格式是否正確。原生HTML和瀏覽器為我們提供了許多“免費”功能,無需複雜的腳本即可驗證表單提交。

如果某些內容未正確驗證?我們會得到“免費”的錯誤消息來顯示給使用表單的人。

這些通常足以完成工作,但如果我們需要更具體的錯誤內容,我們可能需要覆蓋這些消息——尤其是在我們需要跨瀏覽器處理翻譯內容的情況下。以下是它的工作原理。

約束API

約束API用於覆蓋默認的HTML表單驗證消息,並允許我們定義自己的錯誤消息。 Chris Ferdinandi甚至在CSS-Tricks上對此進行了詳細介紹。

簡而言之,約束API旨在提供對輸入元素的控制。 API可以在單個輸入元素或直接從表單元素調用。

例如,假設我們正在使用這個簡單的表單輸入:

<label for="fullName">Full Name</label>
<input type="text" id="fullName" required>
<button type="submit" id="btn">Submit</button>
登入後複製
登入後複製

我們可以通過獲取fullNameInput元素並在其上調用setCustomValidity()方法,然後向其傳遞自定義消息來設置我們自己的錯誤消息:

const fullNameInput = document.getElementById("fullName");
fullNameInput.setCustomValidity("This is a custom error message");
登入後複製
登入後複製

單擊提交按鈕時,指定的郵件將顯示在默認郵件的位置。

翻譯自定義表單驗證消息

自定義錯誤消息的一個主要用例是更好地處理國際化。我們可以通過兩種主要方法來實現這一點。還有其他方法可以實現這一點,但我在這裡介紹的是我認為最直接的方法。

方法一:利用瀏覽器的語言設置

第一種方法是使用瀏覽器語言設置。我們可以從瀏覽器獲取語言設置,然後檢查我們是否支持該語言。如果我們支持該語言,則可以返回翻譯後的消息。如果我們不支持該特定語言,則提供備用響應。

繼續使用之前的HTML,我們將創建一個翻譯對象來保存您首選的語言(在腳本標籤內)。在這種情況下,該對象支持英語、斯瓦希里語和阿拉伯語。

const translations = {
  en: {
    required: "Please fill this",
    email: "Please enter a valid email address",

  },
  sw: {
    required: "Sehemu hii inahitajika",
    email: "Tafadhali ingiza anwani sahihi ya barua pepe",
  },
  ar: {
    required: "هذه الخانة مطلوبه",
    email: "يرجى إدخال عنوان بريد إلكتروني صالح",
  }
};
登入後複製

接下來,我們需要提取對象的標籤並將它們與瀏覽器的語言進行匹配。

// 翻译对象
const supportedLangs = Object.keys(translations);
const getUserLang = () => {
  // 拆分以获取第一部分,浏览器通常为 en-US
  const browserLang = navigator.language.split('-')[0];
  return supportedLangs.includes(browserLang) ? browserLang :'en';
};

// 翻译后的错误消息
const errorMsgs = translations[getUserLang()];
// 表单元素
const form = document.getElementById("myForm");
// 按钮元素
const btn = document.getElementById("btn");
// 名称输入
const fullNameInput = document.getElementById("fullName");
// 错误消息的包装器
const errorSpan = document.getElementById("error-span");

// 单击按钮时……
btn.addEventListener("click", function (event) {
  // 如果名称输入不存在……
  if (!fullNameInput.value) {
    // ……抛出错误
    fullNameInput.setCustomValidity(errorMsgs.required);
    // 为样式设置输入的 .error 类
    fullNameInput.classList.add("error");
  }
});
登入後複製

這裡的getUserLang()函數進行比較並返回支持的瀏覽器語言或英語的備用語言。運行示例,當單擊按鈕時,應顯示自定義錯誤消息。

方法二:在本地存儲中設置首選語言

第二種方法是使用在localStorage中用戶定義的語言設置。換句話說,我們要求用戶首先從包含可選<option></option>標籤的<select></select>元素中選擇他們的首選語言。一旦做出選擇,我們將他們的偏好保存到localStorage,以便我們可以引用它。

<label for="fullName">Full Name</label>
<input type="text" id="fullName" required>
<button type="submit" id="btn">Submit</button>
登入後複製
登入後複製

有了<select></select>元素,我們可以創建一個腳本,該腳本檢查localStorage並使用保存的偏好來返回翻譯後的自定義驗證消息:

const fullNameInput = document.getElementById("fullName");
fullNameInput.setCustomValidity("This is a custom error message");
登入後複製
登入後複製

該腳本將初始值設置為當前選定的選項,將該值保存到localStorage,然後根據需要從localStorage中檢索它。同時,該腳本在<select></select>元素觸發的每個更改事件中更新選定的選項,同時保持原始回退以確保良好的用戶體驗。

如果我們打開DevTools,當選擇語言偏好時,我們將看到用戶的首選值在localStorage中可用。

總結

就是這樣!我希望這個快速的小技巧能有所幫助。我知道我以前在弄清楚如何使用約束API時希望擁有它。這是網絡上那些你知道可能的事情之一,但確切的方法很難找到。

參考

  • 表單驗證系列(Chris Ferdinandi)
  • 了解偽類選擇器(Chris Coyier)
  • 約束驗證(MDN)
  • 客戶端表單驗證(MDN)

以上是為HTML表單創建自定義翻譯消息的兩種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1672
14
CakePHP 教程
1428
52
Laravel 教程
1333
25
PHP教程
1277
29
C# 教程
1257
24
靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom 每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom Apr 17, 2025 am 10:55 AM

在本週的平台新聞綜述中,Chrome引入了一個用於加載的新屬性,Web開發人員的可訪問性規範以及BBC Move

帶有HTML對話框元素的一些動手 帶有HTML對話框元素的一些動手 Apr 16, 2025 am 11:33 AM

這是我第一次查看HTML元素。我已經意識到了一段時間,但是尚未將其旋轉。它很酷,

紙張形式 紙張形式 Apr 16, 2025 am 11:24 AM

購買或建造是技術的經典辯論。自己構建東西可能會感覺更便宜,因為您的信用卡賬單上沒有訂單項,但是

'訂閱播客”鏈接應在哪裡? '訂閱播客”鏈接應在哪裡? Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

託管您自己的非JavaScript分析的選項 託管您自己的非JavaScript分析的選項 Apr 15, 2025 am 11:09 AM

有很多分析平台可幫助您跟踪網站上的訪問者和使用數據。也許最著名的是Google Analytics(廣泛使用)

See all articles