ID Verification提供Web SDK,協助您在瀏覽器或內嵌webview中實現eKYC遠程身分識別驗證功能。本文介紹通過PC或移動端H5網頁接入ID Verification的流程。
前提條件
支援的最低作業系統版本:Android 5+、iOS 11+。
支援的瀏覽器:
iOS:Safari。從iOS 14.3開始支援Chrome、Firefox、Microsoft Edge和WKWebView。
安卓:推薦Chrome60+、Firefox58+。對於Android中的其他瀏覽器,行為可能因裝置而異。
要求的權限:網路和網路攝影機,媒體採集需要HTTPS部署。
整合過程中,不要對TransactionUrl做任何操作或修改,否則會報錯。
為保障認證安全有效,認證URL僅能使用一次,URL的重複使用也會報錯。
啟動eKYC
在代碼中引入如下JS檔案,並調用函數
getMetaInfo()
擷取MetaInfo。
<script type="text/javascript" src="https://hkwebcdn.yuncloudauth.com/cdn/jsvm_all.js" ></script>
在調用ID Verification-KYC服務端發起認證請求時,需傳入擷取的MetaInfo值。
調用您自己的商務服務端介面初始化,擷取 TransactionUrl,並在瀏覽器中載入該連結進行認證。
程式碼範例
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Title</title>
<!-- 引入該JS,全域注入getMetaInfo方法 -->
<!-- Introduce this JS, inject the getMetaInfo method globally -->
<script type="text/javascript" src="https://hkwebcdn.yuncloudauth.com/cdn/jsvm_all.js" ></script>
</head>
<body>
<div></div>
<script>
// 在調用服務端初始化請求時需要傳入該MetaInfo值
var MetaInfo = window.getMetaInfo();
// 接下來您進行調用服務端初始化請求擷取TransactionUrl
var TransactionUrl = ''; // 此處值應為調用服務端初始化介面返回的TransactionUrl
// 接下來直接跳轉TransactionUrl即可開始服務
window.location.href = TransactionUrl;
</script>
</body>
</html>
結果解析
在服務端初始化請求中傳入ReturnUrl參數為商戶自訂參數,認證結果會在認證完成後拼接在ReturnUrl後作為參數返回給商戶。由於傳入路由模式的不同,response解析結果會有差異。
路由模式 | ReturnUrl樣本 | 認證後開啟的ReturnUrl樣本 |
普通網頁 | https://aliyundoc.com | https://aliyundoc.com/?response=%7B%22resultCode%22%3A%22%22%2C%22resultMessage%22%3A%22%22%2C%22ocrResult%22%3A%7B%22code%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%2C%22faceResult%22%3A%7B%22code%22%3A%22%22%2C%22subCode%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%7D |
https://aliyundoc.com/index.html | https://aliyundoc.com/index.html?response=%7B%22resultCode%22%3A%22%22%2C%22resultMessage%22%3A%22%22%2C%22ocrResult%22%3A%7B%22code%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%2C%22faceResult%22%3A%7B%22code%22%3A%22%22%2C%22subCode%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%7D | |
history路由不帶頁面錨點(#) | https://aliyundoc.com/xxx/ | https://aliyundoc.com/xxx?response=%7B%22resultCode%22%3A%22%22%2C%22resultMessage%22%3A%22%22%2C%22ocrResult%22%3A%7B%22code%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%2C%22faceResult%22%3A%7B%22code%22%3A%22%22%2C%22subCode%22%3A%22%22%2C%22reason%22%3A%22%22%2C%22extInfo%22%3A%7B%22certifyId%22%3A%22%22%7D%7D%7D |
history路由帶頁面錨點(#) | https://aliyundoc.com/xxx/#xxx | https://aliyundoc.com/xxx?response=%257B%2522resultCode%2522%253A%2522%2522%252C%2522resultMessage%2522%253A%2522%2522%252C%2522ocrResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%252C%2522faceResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522subCode%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%257D#xxx |
hash路由 | https://aliyundoc.com/#/aaa/bbb | https://aliyundoc.com/?response=%257B%2522resultCode%2522%253A%2522%2522%252C%2522resultMessage%2522%253A%2522%2522%252C%2522ocrResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%252C%2522faceResult%2522%253A%257B%2522code%2522%253A%2522%2522%252C%2522subCode%2522%253A%2522%2522%252C%2522reason%2522%253A%2522%2522%252C%2522extInfo%2522%253A%257B%2522certifyId%2522%253A%2522%2522%257D%257D%257D/#/aaa/bbb |
解析response程式碼範例
普通網頁
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假設window.location.href為:
// window.location.href = https://aliyundoc.com
// 或
// window.location.href = https://aliyundoc.com/index.html
// 初始化url對象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(url.searchParams.get('response'));
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
history路由不帶頁面錨點(#)
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假設window.location.href為:
// window.location.href = https://aliyundoc.com/xxx
// 初始化url對象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(url.searchParams.get('response'));
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
history路由帶頁面錨點(#)
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假設window.location.href為:
// window.location.href = https://aliyundoc.com/xxx/#xxx
// 初始化url對象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(
decodeURIComponent(url.searchParams.get('response'))
);
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
hash路由
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script>
// 假設window.location.href為:
// window.location.href = https://aliyundoc.com/#/aaa/bbb
// 初始化url對象
var url = new URL(window.location.href);
// 解析response
var response = JSON.parse(
decodeURIComponent(url.searchParams.get('response'))
);
// response = {
// resultCode: '',
// resultMessage: '',
// ocrResult: {code: '',reason: '', extInfo: {certifyId: ''}},
// faceResult: {code: '',subCode: '',reason: '', extInfo: {certifyId: ''}}
// }
</script>
</body>
</html>
用戶端結果碼說明
結果碼 | 是否計費 | 結果碼描述 |
1000 | 是 | 使用者完成了刷臉過程,認證建議結果為通過。 該結果僅供參考,可通過調用服務端CheckResult介面擷取最終認證結果,進行下一步處理。 |
1001 | 是 | 使用者完成了刷臉過程,認證建議結果為未通過。 該結果僅供參考,可通過調用服務端CheckResult介面擷取最終認證結果,進行下一步處理。 |
1002 | 否 | 系統錯誤。 |
1003 | 否 | SDK初始化失敗,請確認用戶端時間是否正確。 |
1004 | 否 | 相機許可權錯誤。請參考以下步驟嘗試解決:
|
1005 | 否 | 網路錯誤。 |
1006 | 否 | 使用者退出。 |
1007 | 否 | TransactionId無效. |
1009 | 否 | 用戶端時間戳記錯誤。 |
1011 | 否 | 提交證件類型錯誤。 |
1012 | 否 | 識別出的證件關鍵資訊缺失或格式校正失敗。 |
1013 | 否 | 圖片品質不佳。 |
1014 | 否 | 錯誤次數超出上限。 |
新增語言
根據配置模板,將需新增的語言配置轉換為JSON字串,並通過入參調用Initialize介面完成初始化,從而實現最終的對客展示效果。
配置方法
通用文案對應語言配置:在languageContent中添加對應語言的key和內容。
OCR結果頁對應語言配置:在ocrResultContent的
label
/placeholder
/text
中添加對應的語言key和內容。新增語言對應配置:在supportedLanguage中添加對應語言
key
和label
,切換語言時需使用。
目前自訂語言配置僅支援websdk模式,PC模式下暫不支援。
樣本
const languageConfig = {
defaultLanguage: 'ja',
languageContent: {
'請將證件正面放入框內': {
zh: '請將證件正面放入框內(修改)', // 修改預設文案
ja: '身分証明書の表面をフレームに入れてください', // 添加新語言文案
},
// ...
},
ocrResultContent: {
// 中國 身份證
CHNFields: {
name: {
label: { ja: "中國語の名前"},
placeholder: {
ja: "中國語の名前",
},
},
// ...
},
},
supportedLanguage: [
{
key: 'ja',
label: '日本語'
}
],
titleTranslate: {
ekyc: {
zh: 'eKYC',
ja: 'IDと顔認証',
},
// ...
}
};
配置模板
{
"defaultLanguage": "zh",
"languageContent": {
"請將證件正面放入框內": {
"zh": "請將證件正面放入框內",
"TW": "請將證件正面放入框內",
"en": "Place your ID within the frame and take a picture"
},
"提交": {
"zh": "提交",
"TW": "提交",
"en": "Submit"
},
"識別逾時": {
"zh": "識別逾時",
"TW": "識別超時",
"en": "Time out"
},
"重新拍攝": {
"zh": "重新拍攝",
"TW": "重新拍攝",
"en": "Retake"
},
"離遠一點": {
"zh": "離遠一點",
"TW": "離遠一點",
"en": "Move further away"
},
"靠近一點": {
"zh": "靠近一點",
"TW": "靠近一點",
"en": "Move closer"
},
"沒有檢測到臉": {
"zh": "沒有檢測到臉",
"TW": "未能檢測到臉孔",
"en": "No face detected"
},
"請保持不動": {
"zh": "請保持不動",
"TW": "請保持不動",
"en": "Watch the screen"
},
"臉部亮一點": {
"zh": "臉部亮一點",
"TW": "臉部亮一點",
"en": "Brighten up your face"
},
"眨眨眼": {
"zh": "眨眨眼",
"TW": "眨眨眼",
"en": "Blink"
},
"正在處理": {
"zh": "正在處理",
"TW": "處理中…",
"en": "Processing"
},
"請確保證件清晰完整,無遮擋和反光": {
"zh": "請確保證件清晰完整,無遮擋和反光",
"TW": "請確保證件清晰完整,無遮擋和反光",
"en": "Make sure your ID is fully visible, glare free and not blurrred."
},
"識別失敗次數超限": {
"zh": "識別失敗次數超限",
"TW": "識別失敗次數超限",
"en": "You have reached the maximum number of attempts. Please try later."
},
"識別結果": {
"zh": "識別結果",
"TW": "識別結果",
"en": "OCR Result"
},
"確認無誤": {
"zh": "確認無誤",
"TW": "確認無誤",
"en": "Submit"
},
"再試一次": {
"zh": "再試一次",
"TW": "再試一次",
"en": "Try Again"
},
"退出": {
"zh": "退出",
"TW": "退出",
"en": "Quit"
},
"確定退出嗎?": {
"zh": "確定退出嗎?",
"TW": "確定退出嗎?",
"en": "Are you sure to quit?"
},
"取消": {
"zh": "取消",
"TW": "取消",
"en": "Cancel"
},
"確定": {
"zh": "確定",
"TW": "確定",
"en": "OK"
},
"刷臉次數過多,請稍後再試": {
"zh": "刷臉次數過多,請稍後再試",
"TW": "臉部驗證次數過多,請稍後再試",
"en": "Facial recognition has been performed too frequently. Try again later"
},
"我知道了": {
"zh": "我知道了",
"TW": "我知道了",
"en": "OK"
},
"操作逾時": {
"zh": "操作逾時",
"TW": "操作超時",
"en": "The operation timed out"
},
"網路不給力,請重試": {
"zh": "網路不給力,請重試",
"TW": "網絡不穩定,請重試",
"en": "Check network connectivity"
},
"重試次數過多,請稍後再試": {
"zh": "重試次數過多,請稍後再試",
"TW": "重試次數過多,請稍後再試",
"en": "Recognition has failed too frequently"
},
"識別失敗": {
"zh": "識別失敗",
"TW": "識別失敗",
"en": "Recognition failed"
},
"抱歉,系統出錯了,請再試一次": {
"zh": "抱歉,系統出錯了,請再試一次",
"TW": "抱歉,系統出錯了,請再試一次",
"en": "Sorry, system error. Please try again later."
},
"提示": {
"zh": "提示",
"TW": "提示",
"en": "Tips"
},
"程式異常": {
"zh": "程式異常",
"TW": "程式異常",
"en": "System Error"
},
"簽名異常": {
"zh": "簽名異常",
"TW": "簽名異常",
"en": "Verify Signature Failed."
},
"無效的認證流程,請返回重試": {
"zh": "無效的認證流程,請返回重試",
"TW": "無效的認證流程, 請返回重試",
"en": "Invalid verification process. Please try again."
},
"圖片上傳失敗": {
"zh": "圖片上傳失敗",
"TW": "圖片上傳失敗",
"en": "Photo Upload failed"
},
"認證失敗": {
"zh": "認證失敗",
"TW": "認證失敗",
"en": "Verification failed"
},
"請正對手機並保持亮度": {
"zh": "請正對手機並保持亮度",
"TW": "請正對手機並保持亮度",
"en": "Face straight at the phone and ensure your face is light and clear."
},
"重試": {
"zh": "重試",
"TW": "重試",
"en": "Try Again"
},
"正對手機,更容易成功": {
"zh": "正對手機,更容易成功",
"TW": "正對手機,更容易成功",
"en": "The scan is more likely to succeed if you directly face your mobile phone"
},
"未能識別人臉": {
"zh": "未能識別人臉",
"TW": "未能識別人臉",
"en": "No Face Detected"
},
"協議初始化失敗,請返回重試": {
"zh": "協議初始化失敗,請返回重試",
"TW": "協議初始化失敗,請返回重試",
"en": "Protocol initialization failed, please try again"
},
"跳轉失敗,請手動返回": {
"zh": "跳轉失敗,請手動返回",
"TW": "跳轉失敗,請手動返回",
"en": "Redirect failed. Please manually try again."
},
"請允許訪問網路攝影機裝置並重試": {
"zh": "請允許訪問網路攝影機裝置並重試",
"TW": "請允許訪問攝像頭設備並重試",
"en": "Please allow access to your camera and try again"
},
"網路攝影機裝置不支援": {
"zh": "網路攝影機裝置不支援",
"TW": "攝像頭設備不支援",
"en": "The camera is not supported"
},
"網路攝影機許可權可能已關閉,請嘗試在'設定'裡開啟": {
"zh": "網路攝影機許可權可能已關閉,請嘗試在'設定'裡開啟",
"TW": "請在'設置-隱私-相機'中允許訪問相機",
"en": "Access to your camera is forbidden. Check permissions"
},
"網路攝影機喚起失敗": {
"zh": "網路攝影機喚起失敗",
"TW": "無法啟動相機",
"en": "Failed to open camera"
},
"請檢查您的網路並重試": {
"zh": "請檢查您的網路並重試",
"TW": "請檢查您的網絡並重試",
"en": "Please check your internet connection and try again."
},
"請拍攝您的證件照片": {
"zh": "請拍攝您的證件照片",
"TW": "請拍攝您的證件照片",
"en": "Please take a photo of your ID card."
},
"請使用政府發行的原始證件": {
"zh": "請使用政府發行的原始證件",
"TW": "請使用政府簽發的原始證件",
"en": "Please use the original identity certificate issued by public service sectors."
},
"確認拍攝的證件清晰、無遮擋、無反光": {
"zh": "確認拍攝的證件清晰、無遮擋、無反光",
"TW": "請確保證件清晰完整,無遮擋和反光",
"en": "Make sure your ID is fully visible, glare free and not blurrred."
},
"請勿使用黑白映像": {
"zh": "請勿使用黑白映像",
"TW": "請勿使用黑白圖像",
"en": "Do not use photocopy images."
},
"拍攝您的臉部進行身分識別驗證": {
"zh": "拍攝您的臉部進行身分識別驗證",
"TW": "請拍攝您的臉部以進行身份驗證",
"en": "Please take a picture of your face for identity verification."
},
"避免遮擋": {
"zh": "避免遮擋",
"TW": "避免遮擋",
"en": "No cover"
},
"光線充足": {
"zh": "光線充足",
"TW": "確保光線充足",
"en": "Sufficient light"
},
"正對手機": {
"zh": "正對手機",
"TW": "正對手機",
"en": "Face the phone"
},
"開始認證": {
"zh": "開始認證",
"TW": "開始認證",
"en": "Start certification"
},
"複製連結": {
"zh": "複製連結",
"TW": "複製連結",
"en": "Copy Link."
},
"連結已複製": {
"zh": "連結已複製",
"TW": "鏈接已復制",
"en": "Copied to the clipboard."
},
"證件識別喚起失敗": {
"zh": "證件識別喚起失敗",
"TW": "證件識別喚起失敗",
"en": "Identity certificate recognition failed to be triggered. "
},
"刷臉驗證喚起失敗": {
"zh": "刷臉驗證喚起失敗",
"TW": "臉部驗證喚起失敗",
"en": "Facial recognition failed to be triggered. "
},
"身分識別驗證喚起失敗": {
"zh": "身分識別驗證喚起失敗",
"TW": "身份驗證喚起失敗",
"en": "Identity Verification failed to be triggered."
},
"證件識別喚起失敗,請複製連結前往瀏覽器開啟": {
"zh": "證件識別喚起失敗,請複製連結前往瀏覽器開啟",
"TW": "證件識別喚起失敗,請複製連結然後於瀏覽器打開",
"en": "Identity certificate recognition failed to be triggered. Please copy the link and go to a browser to open the link."
},
"刷臉驗證喚起失敗,請複製連結前往瀏覽器開啟": {
"zh": "刷臉驗證喚起失敗,請複製連結前往瀏覽器開啟",
"TW": "臉部驗證喚起失敗,請複製連結然後於瀏覽器打開",
"en": "Facial recognition failed to be triggered. Please copy the link and go to a browser to open the link."
},
"身分識別驗證喚起失敗,請複製連結前往瀏覽器開啟": {
"zh": "身分識別驗證喚起失敗,請複製連結前往瀏覽器開啟",
"TW": "身份驗證喚起失敗,請複製連結然後於瀏覽器打開",
"en": "Identity Verification failed to be triggered. Please copy the link and go to a browser to open the link."
},
"點擊【複製連結】": {
"zh": "點擊【複製連結】",
"TW": "點擊【複製連結】",
"en": "Click Copy Link."
},
"鍵入複製連結,開啟刷臉驗證": {
"zh": "鍵入複製連結,開啟刷臉驗證",
"TW": "貼上複製連結,開啟證件識別",
"en": "Paste the copied link and enable identity certificate recognition."
},
"開啟瀏覽器,支援Safari,iOS 14.3+可選擇Chrome、Firefox、Microsoft Edge": {
"zh": "開啟瀏覽器,支援Safari,iOS 14.3+可選擇Chrome、Firefox、Microsoft Edge",
"TW": "打開瀏覽器,支援Safari,iOS 14.3+可選擇Chrome、Firefox、Microsoft Edge",
"en": "Open a browser. Chrome, Firefox, Microsoft Edge in iOS 14.3+ and Safari are all supported."
},
"重新識別": {
"zh": "重新識別",
"TW": "重試",
"en": "Try Again"
},
"喚起身分識別驗證操作流程": {
"zh": "喚起身分識別驗證操作流程",
"TW": "喚起身份驗證操作流程",
"en": "Follow the steps below."
},
"喚起刷臉驗證操作流程": {
"zh": "喚起刷臉驗證操作流程",
"TW": "喚起刷臉驗證操作流程",
"en": "Follow the steps below."
},
"喚起證件識別操作流程": {
"zh": "喚起證件識別操作流程",
"TW": "喚起證件識別操作流程",
"en": "Follow the steps below."
},
"請拍攝您的臉部進行身分識別驗證": {
"zh": "請拍攝您的臉部進行身分識別驗證",
"TW": "請拍攝您的臉部以進行身份驗證",
"en": "Please take a picture of your face for identity verification."
},
"請確認你使用的證件類型符合要求": {
"zh": "請確認你使用的證件類型符合要求",
"TW": "請確認你使用的證件類型符合要求",
"en": "Make sure you are using the required type of document."
},
"檢測不到證件": {
"zh": "檢測不到證件",
"TW": "檢測不到證件",
"en": "No ID detected"
},
"請確保": {
"en": "Please ensure your",
"zh": "請確保",
"TW": "請確保"
},
"不為空白": {
"en": "is not empty",
"zh": "不為空白",
"TW": "不為空"
},
"請輸入正確的": {
"en": "Please enter the correct",
"zh": "請輸入正確的",
"TW": "請輸入正確的"
}
},
"ocrResultContent": {
"CHNFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Chinese name",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"ethnicity": {
"label": {
"en": "Ethnicity",
"zh": "民族",
"TW": "民族"
},
"placeholder": {
"en": "Ethnicity",
"zh": "民族",
"TW": "民族"
}
},
"birthDate": {
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"idNumber": {
"placeholder": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
},
"label": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
}
},
"address": {
"label": {
"en": "Address",
"zh": "住址",
"TW": "住址"
},
"placeholder": {
"en": "xx省xx市xx區xx969號",
"zh": "xx省xx市xx區xx969號",
"TW": "xx省xx市xx區xx969號"
}
}
},
"HKFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Chinese name (if any)",
"zh": "中文姓名(如有)",
"TW": "中文姓名(如有)"
}
},
"englishName": {
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
},
"placeholder": {
"en": "English name",
"zh": "英文姓名",
"TW": "英文姓名"
}
},
"nameCode": {
"label": {
"en": "Name Code",
"zh": "中文電碼",
"TW": "中文電碼"
},
"placeholder": {
"en": "Commercial Code (if any)",
"zh": "中文電碼(如有)",
"TW": "中文電碼(如有)"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "M",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "F",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
},
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
}
},
"idNumber": {
"label": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
},
"placeholder": {
"en": "e.g. C123456(0)",
"zh": "如:C123456(0)",
"TW": "如:C123456(0)"
}
},
"currentIssueDate": {
"label": {
"en": "Date of Issue",
"zh": "本次簽發日期",
"TW": "本次簽發日期"
},
"placeholder": {
"en": "dd-mm-yy",
"zh": "日-月-年",
"TW": "日-月-年"
}
},
"firstIssueDate": {
"label": {
"en": "Date of First Issue",
"zh": "首次簽發日期",
"TW": "首次簽發日期"
},
"placeholder": {
"en": "(MM-YY)",
"zh": "(月-年)",
"TW": "(月-年)"
}
},
"isPermanent": {
"label": {
"en": "Permanent",
"zh": "是否永久",
"TW": "是否永久"
},
"options": [
{
"value": "Y",
"text": {
"en": "Yes",
"zh": "是",
"TW": "是"
}
},
{
"value": "N",
"text": {
"en": "No",
"zh": "否",
"TW": "否"
}
}
],
"placeholder": {
"en": "Y/N",
"zh": "是/否",
"TW": "是/否"
}
},
"symbols": {
"placeholder": {
"en": "e.g. xxxAZ",
"zh": "如:xxxAZ",
"TW": "如:xxxAZ"
},
"label": {
"en": "Symbols",
"zh": "符號",
"TW": "符號"
}
}
},
"EEPFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Name in Chinese",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"englishName": {
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
},
"placeholder": {
"en": "Name (pinyin)",
"zh": "姓名(拼音)",
"TW": "姓名(拼音)"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"idNumber": {
"label": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
},
"placeholder": {
"en": "e.g. CC1234567",
"zh": "如:CC1234567",
"TW": "如:CC1234567"
}
},
"issueDate": {
"label": {
"en": "Date of Issue",
"zh": "簽發日期",
"TW": "簽發日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"expiryDate": {
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
},
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
}
},
"placeOfIssue": {
"label": {
"en": "Place of Issue",
"zh": "簽發地點",
"TW": "簽發地點"
},
"placeholder": {
"en": "e.g. 北京",
"zh": "如:北京",
"TW": "如:北京"
}
},
"originOfIssue": {
"label": {
"en": "Origin of Issue",
"zh": "簽發機關",
"TW": "簽發機關"
},
"options": [
{
"value": "公安部出入境管理局",
"text": {
"en": "公安部出入境管理局",
"zh": "公安部出入境管理局",
"TW": "公安部出入境管理局"
}
},
{
"value": "中華人民共和國出入境管理局",
"text": {
"en": "中華人民共和國出入境管理局",
"zh": "中華人民共和國出入境管理局",
"TW": "中華人民共和國出入境管理局"
}
}
],
"placeholder": {
"en": "中華人民共和國出入境管理局",
"zh": "中華人民共和國出入境管理局",
"TW": "中華人民共和國出入境管理局"
}
}
},
"HRPFields": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Name in Chinese",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"englishName": {
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
},
"placeholder": {
"en": "Name in English",
"zh": "姓名(拼音)",
"TW": "姓名(拼音)"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"idNumber": {
"placeholder": {
"en": "e.g. H12345678",
"zh": "如:H12345678",
"TW": "如:H12345678"
},
"label": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
}
},
"issueDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Issue",
"zh": "簽發日期",
"TW": "簽發日期"
}
},
"expiryDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
},
"originOfIssue": {
"label": {
"en": "Origin of Issue",
"zh": "簽發機關",
"TW": "簽發機關"
},
"options": [
{
"value": "公安部出入境管理局",
"text": {
"en": "公安部出入境管理局",
"zh": "公安部出入境管理局",
"TW": "公安部出入境管理局"
}
},
{
"value": "中華人民共和國出入境管理局",
"text": {
"en": "中華人民共和國出入境管理局",
"zh": "中華人民共和國出入境管理局",
"TW": "中華人民共和國出入境管理局"
}
}
],
"placeholder": {
"en": "中華人民共和國出入境管理局",
"zh": "中華人民共和國出入境管理局",
"TW": "中華人民共和國出入境管理局"
}
}
},
"WPFilelds": {
"surname": {
"placeholder": {
"en": "First name",
"zh": "姓",
"TW": "姓"
},
"label": {
"en": "Surname",
"zh": "姓",
"TW": "姓"
}
},
"givenname": {
"placeholder": {
"en": "Last name",
"zh": "名",
"TW": "名"
},
"label": {
"en": "Given name",
"zh": "名",
"TW": "名"
}
},
"passportNo": {
"placeholder": {
"en": "please input passport No.",
"zh": "請輸入護照號碼",
"TW": "請輸入護照號碼"
},
"label": {
"en": "Passport Number",
"zh": "護照號碼",
"TW": "護照號碼"
}
},
"nationality": {
"placeholder": {
"en": "Nationality",
"zh": "國籍",
"TW": "國籍"
},
"label": {
"en": "Nationality",
"zh": "國籍",
"TW": "國籍"
}
},
"sex": {
"placeholder": {
"en": "e.g. F/M",
"zh": "男/女",
"TW": "男/女"
},
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "M",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "F",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
]
},
"birthDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"countryCode": {
"placeholder": {
"en": "e.g. CHN",
"zh": "如:CHN",
"TW": "如:CHN"
},
"label": {
"en": "Country Code",
"zh": "國家碼",
"TW": "國家碼"
}
},
"expiryDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
}
},
"BIRFilelds": {
"surnameCN": {
"placeholder": {
"en": "Chinese surname",
"zh": "中文姓",
"TW": "中文姓"
},
"label": {
"en": "Surname CN",
"zh": "中文姓",
"TW": "中文姓"
}
},
"givennameCN": {
"placeholder": {
"en": "Chinese given name",
"zh": "中文名",
"TW": "中文名"
},
"label": {
"en": "Given name CN",
"zh": "中文名",
"TW": "中文名"
}
},
"surname": {
"placeholder": {
"en": "Family name",
"zh": "英文姓",
"TW": "英文姓"
},
"label": {
"en": "Surname",
"zh": "英文姓",
"TW": "英文姓"
}
},
"givenname": {
"placeholder": {
"en": "First name(s)",
"zh": "英文名",
"TW": "英文名"
},
"label": {
"en": "Given name",
"zh": "英文名",
"TW": "英文名"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "M",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "F",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
],
"placeholder": {
"en": "e.g. F/M",
"zh": "男/女",
"TW": "男/女"
}
},
"birthDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"idNumber": {
"placeholder": {
"en": "e.g. 1234567(8)",
"zh": "如:1234567(8)",
"TW": "如:1234567(8)"
},
"label": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
}
},
"expiryDate": {
"placeholder": {
"en": "dd-mm-yyyy",
"zh": "日-月-年",
"TW": "日-月-年"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
},
"placeOfBirth": {
"placeholder": {
"en": "e.g. AS",
"zh": "如:AS",
"TW": "如:AS"
},
"label": {
"en": "Place of Birth",
"zh": "出生地代碼",
"TW": "出生地代碼"
}
}
},
"MTFilelds": {
"name": {
"label": {
"en": "Chinese Name",
"zh": "中文姓名",
"TW": "中文姓名"
},
"placeholder": {
"en": "Name in Chinese",
"zh": "中文姓名",
"TW": "中文姓名"
}
},
"englishName": {
"placeholder": {
"en": "Name in English",
"zh": "姓名(拼音)",
"TW": "姓名(拼音)"
},
"label": {
"en": "English Name",
"zh": "英文姓名",
"TW": "英文姓名"
}
},
"sex": {
"placeholder": {
"en": "F/M",
"zh": "男/女",
"TW": "男/女"
},
"label": {
"en": "Sex",
"zh": "性別",
"TW": "性別"
},
"options": [
{
"value": "男",
"text": {
"en": "Male",
"zh": "男",
"TW": "男"
}
},
{
"value": "女",
"text": {
"en": "Female",
"zh": "女",
"TW": "女"
}
}
]
},
"birthDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Brith",
"zh": "出生日期",
"TW": "出生日期"
}
},
"idNumber": {
"placeholder": {
"en": "e.g. 12345678",
"zh": "如:12345678",
"TW": "如:12345678"
},
"label": {
"en": "ID Number",
"zh": "證件號碼",
"TW": "證件號碼"
}
},
"issueDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Issue",
"zh": "簽發日期",
"TW": "簽發日期"
}
},
"expiryDate": {
"placeholder": {
"en": "yyyy-mm-dd",
"zh": "年-月-日",
"TW": "年-月-日"
},
"label": {
"en": "Date of Expiry",
"zh": "失效日期",
"TW": "失效日期"
}
},
"originOfIssue": {
"placeholder": {
"en": "中華人民共和國出入境管理局",
"zh": "中華人民共和國出入境管理局",
"TW": "中華人民共和國出入境管理局"
},
"label": {
"en": "Origin of Issue",
"zh": "簽發機關",
"TW": "簽發機關"
},
"options": [
{
"value": "中華人民共和國出入境管理局",
"text": {
"en": "中華人民共和國出入境管理局",
"zh": "中華人民共和國出入境管理局",
"TW": "中華人民共和國出入境管理局"
}
}
]
},
"placeOfIssue": {
"placeholder": {
"en": "e.g. 北京",
"zh": "如:北京",
"TW": "如:北京"
},
"label": {
"en": "Place of Issue",
"zh": "簽發地點",
"TW": "簽發地點"
}
}
},
"PHFilelds": {
"crn": {
"label": {
"en": "ID",
"zh": "",
"TW": ""
}
},
"surname": {
"label": {
"en": "Surname",
"zh": "",
"TW": ""
}
},
"givenname": {
"label": {
"en": "Given name",
"zh": "",
"TW": ""
}
},
"middlename": {
"label": {
"en": "Middlename",
"zh": "",
"TW": ""
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "",
"TW": ""
}
},
"birthDate": {
"label": {
"en": "Date of Expiry",
"zh": "",
"TW": ""
}
},
"address": {
"label": {
"en": "Address",
"zh": "",
"TW": ""
}
}
},
"ID_KTPFilelds": {
"idNumber": {
"label": {
"en": "ID",
"zh": "ID",
"TW": "ID"
}
},
"name": {
"label": {
"en": "Name",
"zh": "Name",
"TW": "Name"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "Sex",
"TW": "Sex"
}
},
"birthDate": {
"label": {
"en": "Date of Expiry",
"zh": "Date of Expiry",
"TW": "Date of Expiry"
}
},
"blood": {
"label": {
"en": "Blood",
"zh": "Blood",
"TW": "Blood"
}
},
"address": {
"label": {
"en": "Address",
"zh": "Address",
"TW": "Address"
}
},
"street": {
"label": {
"en": "Street",
"zh": "Street",
"TW": "Street"
}
},
"county": {
"label": {
"en": "County",
"zh": "County",
"TW": "County"
}
},
"district": {
"label": {
"en": "District",
"zh": "District",
"TW": "District"
}
},
"religion": {
"label": {
"en": "Religion",
"zh": "Religion",
"TW": "Religion"
}
},
"marriage": {
"label": {
"en": "Marriage",
"zh": "Marriage",
"TW": "Marriage"
}
},
"job": {
"label": {
"en": "Job",
"zh": "Job",
"TW": "Job"
}
},
"nationality": {
"label": {
"en": "Country",
"zh": "Country",
"TW": "Country"
}
},
"expiryDate": {
"label": {
"en": "Expires",
"zh": "Expires",
"TW": "Expires"
}
},
"province": {
"label": {
"en": "Province",
"zh": "Province",
"TW": "Province"
}
},
"city": {
"label": {
"en": "City",
"zh": "City",
"TW": "City"
}
},
"issueDate": {
"label": {
"en": "issueDate",
"zh": "issueDate",
"TW": "issueDate"
}
}
},
"MYFilelds": {
"idNumber": {
"label": {
"en": "ID",
"zh": "ID",
"TW": "ID"
}
},
"name": {
"label": {
"en": "Name",
"zh": "Name",
"TW": "Name"
}
},
"sex": {
"label": {
"en": "Sex",
"zh": "Sex",
"TW": "Sex"
}
},
"nationality": {
"label": {
"en": "Country",
"zh": "Country",
"TW": "Country"
}
},
"address": {
"label": {
"en": "Address",
"zh": "Address",
"TW": "Address"
}
}
}
},
"supportedLanguage": [
{
"key": "zh",
"label": "中文"
},
{
"key": "en",
"label": "English"
},
{
"key": "TW",
"label": "繁體中文"
}
],
"titleTranslate": {
"ekyc": {
"zh": "eKYC",
"TW": "eKYC",
"en": "eKYC"
},
"ocr": {
"zh": "證件識別",
"TW": "證件識別",
"en": "Identity certificate recognition"
},
"face": {
"zh": "刷臉驗證",
"TW": "臉部驗證",
"en": "Facial recognition"
}
}
}
zh、TW、en為預設支援語言,如需修改預設語言文案,則直接修改語言key對應的內容即可;反之,則使用預設語言配置和預設文案。
為減小初始化請求大小,建議只傳新增的語言配置和需要修改的預設配置,其他的阿里雲側會採用預設配置。
附錄
1. OCR結果頁對應證件映射表
ocrResultContent | 對應證件 |
WPFilelds | 全球護照 |
CHNFields | 中國內地第二代居民身份證 |
HKFields | 香港居民身份證 |
EEPFields | 往來港澳通行證 |
HRPFields | 港澳居民來往內地通行證 |
BIRFilelds | 澳門身份證 |
MTFilelds | 台灣居民來往大陸通行證 |
2. 語言縮寫key
參考HTML Language Code Reference:
const languageKeyList = [
// 預設支援的三種語言
{ code: 'zh', name: 'Chinese (Simplified)' }, //簡體中文
{ code: 'TW', name: 'Chinese (Traditional)' }, // 繁體中文
{ code: 'en', name: 'English' }, // 英文
// 其他語言(按語言全稱字元順序排列)
{ code: 'ab', name: 'Abkhazian' },
{ code: 'aa', name: 'Afar' },
{ code: 'af', name: 'Afrikaans' },
{ code: 'ak', name: 'Akan' },
{ code: 'sq', name: 'Albanian' },
{ code: 'am', name: 'Amharic' },
{ code: 'ar', name: 'Arabic' },
{ code: 'an', name: 'Aragonese' },
{ code: 'hy', name: 'Armenian' },
{ code: 'as', name: 'Assamese' },
{ code: 'av', name: 'Avaric' },
{ code: 'ae', name: 'Avestan' },
{ code: 'ay', name: 'Aymara' },
{ code: 'az', name: 'Azerbaijani' },
{ code: 'bm', name: 'Bambara' },
{ code: 'ba', name: 'Bashkir' },
{ code: 'eu', name: 'Basque' },
{ code: 'be', name: 'Belarusian' },
{ code: 'bn', name: 'Bengali (Bangla)' },
{ code: 'bh', name: 'Bihari' },
{ code: 'bi', name: 'Bislama' },
{ code: 'bs', name: 'Bosnian' },
{ code: 'br', name: 'Breton' },
{ code: 'bg', name: 'Bulgarian' },
{ code: 'my', name: 'Burmese' },
{ code: 'ca', name: 'Catalan' },
{ code: 'ch', name: 'Chamorro' },
{ code: 'ce', name: 'Chechen' },
{ code: 'ny', name: 'Chichewa, Chewa, Nyanja' },
{ code: 'cv', name: 'Chuvash' },
{ code: 'kw', name: 'Cornish' },
{ code: 'co', name: 'Corsican' },
{ code: 'cr', name: 'Cree' },
{ code: 'hr', name: 'Croatian' },
{ code: 'cs', name: 'Czech' },
{ code: 'da', name: 'Danish' },
{ code: 'dv', name: 'Divehi, Dhivehi, Maldivian' },
{ code: 'nl', name: 'Dutch' },
{ code: 'dz', name: 'Dzongkha' },
{ code: 'eo', name: 'Esperanto' },
{ code: 'et', name: 'Estonian' },
{ code: 'ee', name: 'Ewe' },
{ code: 'fo', name: 'Faroese' },
{ code: 'fj', name: 'Fijian' },
{ code: 'fi', name: 'Finnish' },
{ code: 'fr', name: 'French' },
{ code: 'ff', name: 'Fula, Fulah, Pulaar, Pular' },
{ code: 'gl', name: 'Galician' },
{ code: 'gd', name: 'Gaelic (Scottish)' },
{ code: 'gv', name: 'Gaelic (Manx)' },
{ code: 'ka', name: 'Georgian' },
{ code: 'de', name: 'German' },
{ code: 'el', name: 'Greek' },
{ code: 'kl', name: 'Greenlandic' },
{ code: 'gn', name: 'Guarani' },
{ code: 'gu', name: 'Gujarati' },
{ code: 'ht', name: 'Haitian Creole' },
{ code: 'ha', name: 'Hausa' },
{ code: 'he', name: 'Hebrew' },
{ code: 'hz', name: 'Herero' },
{ code: 'hi', name: 'Hindi' },
{ code: 'ho', name: 'Hiri Motu' },
{ code: 'hu', name: 'Hungarian' },
{ code: 'is', name: 'Icelandic' },
{ code: 'io', name: 'Ido' },
{ code: 'ig', name: 'Igbo' },
{ code: 'id, in', name: 'Indonesian' },
{ code: 'ia', name: 'Interlingua' },
{ code: 'ie', name: 'Interlingue' },
{ code: 'iu', name: 'Inuktitut' },
{ code: 'ik', name: 'Inupiak' },
{ code: 'ga', name: 'Irish' },
{ code: 'it', name: 'Italian' },
{ code: 'ja', name: 'Japanese' },
{ code: 'jv', name: 'Javanese' },
{ code: 'kl', name: 'Kalaallisut, Greenlandic' },
{ code: 'kn', name: 'Kannada' },
{ code: 'kr', name: 'Kanuri' },
{ code: 'ks', name: 'Kashmiri' },
{ code: 'kk', name: 'Kazakh' },
{ code: 'km', name: 'Khmer' },
{ code: 'ki', name: 'Kikuyu' },
{ code: 'rw', name: 'Kinyarwanda (Rwanda)' },
{ code: 'rn', name: 'Kirundi' },
{ code: 'ky', name: 'Kyrgyz' },
{ code: 'kv', name: 'Komi' },
{ code: 'kg', name: 'Kongo' },
{ code: 'ko', name: 'Korean' },
{ code: 'ku', name: 'Kurdish' },
{ code: 'kj', name: 'Kwanyama' },
{ code: 'lo', name: 'Lao' },
{ code: 'la', name: 'Latin' },
{ code: 'lv', name: 'Latvian (Lettish)' },
{ code: 'li', name: 'Limburgish ( Limburger)' },
{ code: 'ln', name: 'Lingala' },
{ code: 'lt', name: 'Lithuanian' },
{ code: 'lu', name: 'Luga-Katanga' },
{ code: 'lg', name: 'Luganda, Ganda' },
{ code: 'lb', name: 'Luxembourgish' },
{ code: 'gv', name: 'Manx' },
{ code: 'mk', name: 'Macedonian' },
{ code: 'mg', name: 'Malagasy' },
{ code: 'ms', name: 'Malay' },
{ code: 'ml', name: 'Malayalam' },
{ code: 'mt', name: 'Maltese' },
{ code: 'mi', name: 'Maori' },
{ code: 'mr', name: 'Marathi' },
{ code: 'mh', name: 'Marshallese' },
{ code: 'mo', name: 'Moldavian' },
{ code: 'mn', name: 'Mongolian' },
{ code: 'na', name: 'Nauru' },
{ code: 'nv', name: 'Navajo' },
{ code: 'ng', name: 'Ndonga' },
{ code: 'nd', name: 'Northern Ndebele' },
{ code: 'ne', name: 'Nepali' },
{ code: 'no', name: 'Norwegian' },
{ code: 'nb', name: 'Norwegian bokmål' },
{ code: 'nn', name: 'Norwegian nynorsk' },
{ code: 'ii', name: 'Nuosu' },
{ code: 'oc', name: 'Occitan' },
{ code: 'oj', name: 'Ojibwe' },
{ code: 'cu', name: 'Old Church Slavonic, Old Bulgarian' },
{ code: 'or', name: 'Oriya' },
{ code: 'om', name: 'Oromo (Afaan Oromo)' },
{ code: 'os', name: 'Ossetian' },
{ code: 'pi', name: 'Pāli' },
{ code: 'ps', name: 'Pashto, Pushto' },
{ code: 'fa', name: 'Persian (Farsi)' },
{ code: 'pl', name: 'Polish' },
{ code: 'pt', name: 'Portuguese' },
{ code: 'pa', name: 'Punjabi (Eastern)' },
{ code: 'qu', name: 'Quechua' },
{ code: 'rm', name: 'Romansh' },
{ code: 'ro', name: 'Romanian' },
{ code: 'ru', name: 'Russian' },
{ code: 'se', name: 'Sami' },
{ code: 'sm', name: 'Samoan' },
{ code: 'sg', name: 'Sango' },
{ code: 'sa', name: 'Sanskrit' },
{ code: 'sr', name: 'Serbian' },
{ code: 'sh', name: 'Serbo-Croatian' },
{ code: 'st', name: 'Sesotho' },
{ code: 'tn', name: 'Setswana' },
{ code: 'sn', name: 'Shona' },
{ code: 'ii', name: 'Sichuan Yi' },
{ code: 'sd', name: 'Sindhi' },
{ code: 'si', name: 'Sinhalese' },
{ code: 'ss', name: 'Siswati' },
{ code: 'sk', name: 'Slovak' },
{ code: 'sl', name: 'Slovenian' },
{ code: 'so', name: 'Somali' },
{ code: 'nr', name: 'Southern Ndebele' },
{ code: 'es', name: 'Spanish' },
{ code: 'su', name: 'Sundanese' },
{ code: 'sw', name: 'Swahili (Kiswahili)' },
{ code: 'ss', name: 'Swati' },
{ code: 'sv', name: 'Swedish' },
{ code: 'tl', name: 'Tagalog' },
{ code: 'ty', name: 'Tahitian' },
{ code: 'tg', name: 'Tajik' },
{ code: 'ta', name: 'Tamil' },
{ code: 'tt', name: 'Tatar' },
{ code: 'te', name: 'Telugu' },
{ code: 'th', name: 'Thai' },
{ code: 'bo', name: 'Tibetan' },
{ code: 'ti', name: 'Tigrinya' },
{ code: 'to', name: 'Tonga' },
{ code: 'ts', name: 'Tsonga' },
{ code: 'tr', name: 'Turkish' },
{ code: 'tk', name: 'Turkmen' },
{ code: 'tw', name: 'Twi' },
{ code: 'ug', name: 'Uyghur' },
{ code: 'uk', name: 'Ukrainian' },
{ code: 'ur', name: 'Urdu' },
{ code: 'uz', name: 'Uzbek' },
{ code: 've', name: 'Venda' },
{ code: 'vi', name: 'Vietnamese' },
{ code: 'vo', name: 'Volapük' },
{ code: 'wa', name: 'Wallon' },
{ code: 'cy', name: 'Welsh' },
{ code: 'wo', name: 'Wolof' },
{ code: 'fy', name: 'Western Frisian' },
{ code: 'xh', name: 'Xhosa' },
{ code: 'yi, ji', name: 'Yiddish' },
{ code: 'yo', name: 'Yoruba' },
{ code: 'za', name: 'Zhuang, Chuang' },
{ code: 'zu', name: 'Zulu' },
];