feat: user can upload ID card info (#2040)

* feat:user can upload ID card(#1999)

Signed-off-by: baihhh <2542274498@qq.com>

* feat: user can upload ID card, add diff languages

Signed-off-by: baihhh <2542274498@qq.com>

---------

Signed-off-by: baihhh <2542274498@qq.com>
This commit is contained in:
Baihhh
2023-07-06 20:36:32 +08:00
committed by GitHub
parent 96250aa70a
commit bc1c4d32f0
14 changed files with 203 additions and 30 deletions

View File

@@ -207,7 +207,7 @@ func (c *ApiController) UploadResource() {
} }
fullFilePath = object.GetTruncatedPath(provider, fullFilePath, 175) fullFilePath = object.GetTruncatedPath(provider, fullFilePath, 175)
if tag != "avatar" && tag != "termsOfUse" { if tag != "avatar" && tag != "termsOfUse" && !strings.HasPrefix(tag, "idCard") {
ext := filepath.Ext(filepath.Base(fullFilePath)) ext := filepath.Ext(filepath.Base(fullFilePath))
index := len(fullFilePath) - len(ext) index := len(fullFilePath) - len(ext)
for i := 1; ; i++ { for i := 1; ; i++ {
@@ -307,6 +307,25 @@ func (c *ApiController) UploadResource() {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return
} }
case "idCardFront", "idCardBack", "idCardWithPerson":
user, err := object.GetUserNoCheck(util.GetId(owner, username))
if err != nil {
c.ResponseError(err.Error())
return
}
if user == nil {
c.ResponseError(c.T("resource:User is nil for tag: avatar"))
return
}
user.Properties[tag] = fileUrl
user.Properties["isIdCardVerified"] = "false"
_, err = object.UpdateUser(user.GetId(), user, []string{"properties"}, false)
if err != nil {
c.ResponseError(err.Error())
return
}
} }
c.ResponseOk(fileUrl, objectKey) c.ResponseOk(fileUrl, objectKey)

View File

@@ -53,6 +53,8 @@ class UserEditPage extends React.Component {
mode: props.location.mode !== undefined ? props.location.mode : "edit", mode: props.location.mode !== undefined ? props.location.mode : "edit",
loading: true, loading: true,
returnUrl: null, returnUrl: null,
idCardInfo: ["ID card front", "ID card back", "ID card with person"],
idCardKey: ["idCardFront", "idCardBack", "idCardWithPerson"],
}; };
} }
@@ -269,6 +271,12 @@ class UserEditPage extends React.Component {
} }
} }
if (accountItem.name === "ID card info" || accountItem.name === "ID card") {
if (this.state.user.properties?.isIdCardVerified === "true") {
disabled = true;
}
}
let isKeysGenerated = false; let isKeysGenerated = false;
if (this.state.user.accessKey !== "" && this.state.user.accessKey !== "") { if (this.state.user.accessKey !== "" && this.state.user.accessKey !== "") {
isKeysGenerated = true; isKeysGenerated = true;
@@ -365,20 +373,11 @@ class UserEditPage extends React.Component {
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Avatar"), i18next.t("general:Avatar - Tooltip"))} : {Setting.getLabel(i18next.t("general:Avatar"), i18next.t("general:Avatar - Tooltip"))} :
</Col> </Col>
<Col span={22} > <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
<Row style={{marginTop: "20px"}} > {i18next.t("general:Preview")}:
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> </Col>
{i18next.t("general:Preview")}: <Col>
</Col> {this.renderImage(this.state.user.avatar, i18next.t("user:Upload a photo"), i18next.t("user:Set new profile picture"), "avatar", false)}
<Col span={22} >
<a target="_blank" rel="noreferrer" href={this.state.user.avatar}>
<img src={this.state.user.avatar} alt={this.state.user.avatar} height={90} style={{marginBottom: "20px"}} />
</a>
</Col>
</Row>
<Row style={{marginTop: "20px"}}>
<CropperDivModal buttonText={`${i18next.t("user:Upload a photo")}...`} title={i18next.t("user:Upload a photo")} user={this.state.user} organization={this.state.organizations.find(organization => organization.name === this.state.organizationName)} />
</Row>
</Col> </Col>
</Row> </Row>
); );
@@ -536,12 +535,33 @@ class UserEditPage extends React.Component {
{Setting.getLabel(i18next.t("user:ID card"), i18next.t("user:ID card - Tooltip"))} : {Setting.getLabel(i18next.t("user:ID card"), i18next.t("user:ID card - Tooltip"))} :
</Col> </Col>
<Col span={22} > <Col span={22} >
<Input value={this.state.user.idCard} onChange={e => { <Input value={this.state.user.idCard} disabled={disabled} onChange={e => {
this.updateUserField("idCard", e.target.value); this.updateUserField("idCard", e.target.value);
}} /> }} />
</Col> </Col>
</Row> </Row>
); );
} else if (accountItem.name === "ID card info") {
return (
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("user:ID card info"), i18next.t("user:ID card info - Tooltip"))} :
</Col>
<Col span={22} >
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{i18next.t("general:Preview")}:
</Col>
{
this.state.idCardInfo.map((key, index) => {
const newKey = this.state.idCardKey[index];
return this.renderImage(this.state.user.properties[newKey] || "", this.getIdCardType(key), this.getIdCardText(key), newKey, disabled);
})
}
</Row>
</Col>
</Row>
);
} else if (accountItem.name === "Homepage") { } else if (accountItem.name === "Homepage") {
return ( return (
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
@@ -942,6 +962,25 @@ class UserEditPage extends React.Component {
} }
} }
renderImage(imgUrl, title, set, tag, disabled) {
return (
<Col span={4} style={{textAlign: "center", margin: "auto"}} key={tag}>
{
imgUrl ?
<a target="_blank" rel="noreferrer" href={imgUrl} style={{marginBottom: "10px"}}>
<img src={imgUrl} alt={imgUrl} height={90} style={{marginBottom: "20px"}} />
</a>
:
<Col style={{height: "78%", border: "1px dotted grey", borderRadius: 3, marginBottom: 5}}>
<div style={{fontSize: 30, margin: 10}}>+</div>
<div style={{verticalAlign: "middle", marginBottom: 10}}>{`请上传${title}...`}</div>
</Col>
}
<CropperDivModal disabled={disabled} tag={tag} setTitle={set} buttonText={`${title}...`} title={title} user={this.state.user} organization={this.state.organizations.find(organization => organization.name === this.state.organizationName)} />
</Col>
);
}
renderUser() { renderUser() {
return ( return (
<Card size="small" title={ <Card size="small" title={
@@ -967,6 +1006,30 @@ class UserEditPage extends React.Component {
); );
} }
getIdCardType(key) {
if (key === "ID card front") {
return i18next.t("user:ID card front");
} else if (key === "ID card back") {
return i18next.t("user:ID card back");
} else if (key === "ID card with person") {
return i18next.t("user:ID card with person");
} else {
return "Unknown Id card type";
}
}
getIdCardText(key) {
if (key === "ID card front") {
return i18next.t("user:Upload ID card front picture");
} else if (key === "ID card back") {
return i18next.t("user:Upload ID card back picture");
} else if (key === "ID card with person") {
return i18next.t("user:Upload ID card with person picture");
} else {
return "Unknown Id card text";
}
}
submitUserEdit(needExit) { submitUserEdit(needExit) {
const user = Setting.deepCopy(this.state.user); const user = Setting.deepCopy(this.state.user);
UserBackend.updateUser(this.state.organizationName, this.state.userName, user) UserBackend.updateUser(this.state.organizationName, this.state.userName, user)

View File

@@ -28,6 +28,9 @@ export const CropperDivModal = (props) => {
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false); const [confirmLoading, setConfirmLoading] = useState(false);
const {title} = props; const {title} = props;
const {setTitle} = props;
const {tag} = props;
const {disabled} = props;
const {user} = props; const {user} = props;
const {buttonText} = props; const {buttonText} = props;
const {organization} = props; const {organization} = props;
@@ -59,8 +62,8 @@ export const CropperDivModal = (props) => {
} }
// Setting.showMessage("success", "uploading..."); // Setting.showMessage("success", "uploading...");
const extension = image.substring(image.indexOf("/") + 1, image.indexOf(";base64")); const extension = image.substring(image.indexOf("/") + 1, image.indexOf(";base64"));
const fullFilePath = `avatar/${user.owner}/${user.name}.${extension}`; const fullFilePath = `${tag}/${user.owner}/${user.name}.${extension}`;
ResourceBackend.uploadResource(user.owner, user.name, "avatar", "CropperDivModal", fullFilePath, blob) ResourceBackend.uploadResource(user.owner, user.name, tag, "CropperDivModal", fullFilePath, blob)
.then((res) => { .then((res) => {
if (res.status === "ok") { if (res.status === "ok") {
window.location.href = window.location.pathname; window.location.href = window.location.pathname;
@@ -139,19 +142,19 @@ export const CropperDivModal = (props) => {
return ( return (
<div> <div>
<Button type="default" onClick={showModal}> <Button type="default" onClick={showModal} disabled={disabled}>
{buttonText} {buttonText}
</Button> </Button>
<Modal <Modal
maskClosable={false} maskClosable={false}
title={title} title={title}
open={visible} open={visible}
okText={i18next.t("user:Upload a photo")} okText={title}
confirmLoading={confirmLoading} confirmLoading={confirmLoading}
onCancel={handleCancel} onCancel={handleCancel}
width={600} width={600}
footer={ footer={
[<Button block key="submit" type="primary" onClick={handleOk}>{i18next.t("user:Set new profile picture")}</Button>] [<Button block key="submit" type="primary" onClick={handleOk}>{setTitle}</Button>]
} }
> >
<Col style={{margin: "0px auto 60px auto", width: 1000, height: 350}}> <Col style={{margin: "0px auto 60px auto", width: 1000, height: 350}}>

View File

@@ -904,8 +904,13 @@
"Homepage - Tooltip": "Homepage-URL des Benutzers", "Homepage - Tooltip": "Homepage-URL des Benutzers",
"ID card": "Ausweis", "ID card": "Ausweis",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Geben Sie Ihre E-Mail-Adresse ein", "Input your email": "Geben Sie Ihre E-Mail-Adresse ein",
"Input your phone number": "Geben Sie Ihre Telefonnummer ein", "Input your phone number": "Geben Sie Ihre Telefonnummer ein",
"Is admin": "Ist Admin", "Is admin": "Ist Admin",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Zwei von Ihnen eingegebene Passwörter stimmen nicht überein.", "Two passwords you typed do not match.": "Zwei von Ihnen eingegebene Passwörter stimmen nicht überein.",
"Unlink": "Link aufheben", "Unlink": "Link aufheben",
"Upload (.xlsx)": "Hochladen (.xlsx)", "Upload (.xlsx)": "Hochladen (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Lade ein Foto hoch", "Upload a photo": "Lade ein Foto hoch",
"Values": "Werte", "Values": "Werte",
"Verification code sent": "Bestätigungscode gesendet", "Verification code sent": "Bestätigungscode gesendet",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Copy pricing page URL", "Copy pricing page URL": "Copy pricing page URL",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Free",
"Failed to get plans": "Failed to get plans", "Failed to get plans": "Failed to get plans",
"Free": "Free",
"Getting started": "Getting started", "Getting started": "Getting started",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Trial duration", "Trial duration": "Trial duration",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "Homepage URL of the user", "Homepage - Tooltip": "Homepage URL of the user",
"ID card": "ID card", "ID card": "ID card",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Input your email", "Input your email": "Input your email",
"Input your phone number": "Input your phone number", "Input your phone number": "Input your phone number",
"Is admin": "Is admin", "Is admin": "Is admin",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Two passwords you typed do not match.", "Two passwords you typed do not match.": "Two passwords you typed do not match.",
"Unlink": "Unlink", "Unlink": "Unlink",
"Upload (.xlsx)": "Upload (.xlsx)", "Upload (.xlsx)": "Upload (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Upload a photo", "Upload a photo": "Upload a photo",
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Copiar URL de la página de precios", "Copy pricing page URL": "Copiar URL de la página de precios",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Gratis",
"Failed to get plans": "No se pudieron obtener los planes", "Failed to get plans": "No se pudieron obtener los planes",
"Free": "Gratis",
"Getting started": "Empezar", "Getting started": "Empezar",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Duración del período de prueba", "Trial duration": "Duración del período de prueba",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "URL de la página de inicio del usuario", "Homepage - Tooltip": "URL de la página de inicio del usuario",
"ID card": "Tarjeta de identificación", "ID card": "Tarjeta de identificación",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Introduce tu correo electrónico", "Input your email": "Introduce tu correo electrónico",
"Input your phone number": "Ingrese su número de teléfono", "Input your phone number": "Ingrese su número de teléfono",
"Is admin": "Es el administrador", "Is admin": "Es el administrador",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Dos contraseñas que has escrito no coinciden.", "Two passwords you typed do not match.": "Dos contraseñas que has escrito no coinciden.",
"Unlink": "Desvincular", "Unlink": "Desvincular",
"Upload (.xlsx)": "Subir (.xlsx)", "Upload (.xlsx)": "Subir (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Subir una foto", "Upload a photo": "Subir una foto",
"Values": "Valores", "Values": "Valores",
"Verification code sent": "Código de verificación enviado", "Verification code sent": "Código de verificación enviado",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Copier l'URL de la page tarifs", "Copy pricing page URL": "Copier l'URL de la page tarifs",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Gratuit",
"Failed to get plans": "Échec de l'obtention des plans", "Failed to get plans": "Échec de l'obtention des plans",
"Free": "Gratuit",
"Getting started": "Commencer", "Getting started": "Commencer",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Durée de l'essai", "Trial duration": "Durée de l'essai",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "Adresse URL de la page d'accueil de l'utilisateur", "Homepage - Tooltip": "Adresse URL de la page d'accueil de l'utilisateur",
"ID card": "carte d'identité", "ID card": "carte d'identité",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Entrez votre adresse e-mail", "Input your email": "Entrez votre adresse e-mail",
"Input your phone number": "Saisissez votre numéro de téléphone", "Input your phone number": "Saisissez votre numéro de téléphone",
"Is admin": "Est l'administrateur", "Is admin": "Est l'administrateur",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Deux mots de passe que vous avez tapés ne correspondent pas.", "Two passwords you typed do not match.": "Deux mots de passe que vous avez tapés ne correspondent pas.",
"Unlink": "Détacher", "Unlink": "Détacher",
"Upload (.xlsx)": "Télécharger (.xlsx)", "Upload (.xlsx)": "Télécharger (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Télécharger une photo", "Upload a photo": "Télécharger une photo",
"Values": "Valeurs", "Values": "Valeurs",
"Verification code sent": "Code de vérification envoyé", "Verification code sent": "Code de vérification envoyé",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Salin URL halaman harga", "Copy pricing page URL": "Salin URL halaman harga",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Gratis",
"Failed to get plans": "Gagal mendapatkan rencana", "Failed to get plans": "Gagal mendapatkan rencana",
"Free": "Gratis",
"Getting started": "Mulai", "Getting started": "Mulai",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Durasi percobaan", "Trial duration": "Durasi percobaan",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "URL halaman depan pengguna", "Homepage - Tooltip": "URL halaman depan pengguna",
"ID card": "Kartu identitas", "ID card": "Kartu identitas",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Masukkan alamat email Anda", "Input your email": "Masukkan alamat email Anda",
"Input your phone number": "Masukkan nomor telepon Anda", "Input your phone number": "Masukkan nomor telepon Anda",
"Is admin": "Apakah admin?", "Is admin": "Apakah admin?",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Dua password yang Anda ketikkan tidak cocok.", "Two passwords you typed do not match.": "Dua password yang Anda ketikkan tidak cocok.",
"Unlink": "Membatalkan Tautan", "Unlink": "Membatalkan Tautan",
"Upload (.xlsx)": "Unggah (.xlsx)", "Upload (.xlsx)": "Unggah (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Unggah foto", "Upload a photo": "Unggah foto",
"Values": "Nilai-nilai", "Values": "Nilai-nilai",
"Verification code sent": "Kode verifikasi telah dikirim", "Verification code sent": "Kode verifikasi telah dikirim",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "価格ページのURLをコピー", "Copy pricing page URL": "価格ページのURLをコピー",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "無料",
"Failed to get plans": "計画の取得に失敗しました", "Failed to get plans": "計画の取得に失敗しました",
"Free": "無料",
"Getting started": "はじめる", "Getting started": "はじめる",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "トライアル期間の長さ", "Trial duration": "トライアル期間の長さ",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "ユーザーのホームページのURL", "Homepage - Tooltip": "ユーザーのホームページのURL",
"ID card": "IDカード", "ID card": "IDカード",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "あなたのメールアドレスを入力してください", "Input your email": "あなたのメールアドレスを入力してください",
"Input your phone number": "電話番号を入力してください", "Input your phone number": "電話番号を入力してください",
"Is admin": "管理者ですか?", "Is admin": "管理者ですか?",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "2つのパスワードが一致しません。", "Two passwords you typed do not match.": "2つのパスワードが一致しません。",
"Unlink": "アンリンク", "Unlink": "アンリンク",
"Upload (.xlsx)": "アップロード(.xlsx", "Upload (.xlsx)": "アップロード(.xlsx",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "写真をアップロードしてください", "Upload a photo": "写真をアップロードしてください",
"Values": "価値観", "Values": "価値観",
"Verification code sent": "確認コードを送信しました", "Verification code sent": "確認コードを送信しました",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "가격 페이지 URL 복사", "Copy pricing page URL": "가격 페이지 URL 복사",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "무료",
"Failed to get plans": "계획을 가져오지 못했습니다.", "Failed to get plans": "계획을 가져오지 못했습니다.",
"Free": "무료",
"Getting started": "시작하기", "Getting started": "시작하기",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "체험 기간", "Trial duration": "체험 기간",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "사용자의 홈페이지 URL", "Homepage - Tooltip": "사용자의 홈페이지 URL",
"ID card": "ID 카드", "ID card": "ID 카드",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "이메일을 입력하세요", "Input your email": "이메일을 입력하세요",
"Input your phone number": "전화번호를 입력하세요", "Input your phone number": "전화번호를 입력하세요",
"Is admin": "어드민인가요?", "Is admin": "어드민인가요?",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "두 개의 비밀번호가 일치하지 않습니다.", "Two passwords you typed do not match.": "두 개의 비밀번호가 일치하지 않습니다.",
"Unlink": "연결 해제하기", "Unlink": "연결 해제하기",
"Upload (.xlsx)": "업로드 (.xlsx)", "Upload (.xlsx)": "업로드 (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "사진을 업로드하세요", "Upload a photo": "사진을 업로드하세요",
"Values": "가치들", "Values": "가치들",
"Verification code sent": "인증 코드가 전송되었습니다", "Verification code sent": "인증 코드가 전송되었습니다",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Sao chép URL trang bảng giá", "Copy pricing page URL": "Sao chép URL trang bảng giá",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Miễn phí",
"Failed to get plans": "Falha ao obter planos", "Failed to get plans": "Falha ao obter planos",
"Free": "Miễn phí",
"Getting started": "Bắt đầu", "Getting started": "Bắt đầu",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Thời gian thử nghiệm", "Trial duration": "Thời gian thử nghiệm",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "URL da página inicial do usuário", "Homepage - Tooltip": "URL da página inicial do usuário",
"ID card": "Cartão de identidade", "ID card": "Cartão de identidade",
"ID card - Tooltip": "Cartão de identidade - Tooltip", "ID card - Tooltip": "Cartão de identidade - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "Tipo de cartão de identidade", "ID card type": "Tipo de cartão de identidade",
"ID card type - Tooltip": "Tipo de cartão de identidade - Tooltip", "ID card type - Tooltip": "Tipo de cartão de identidade - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Digite seu e-mail", "Input your email": "Digite seu e-mail",
"Input your phone number": "Digite seu número de telefone", "Input your phone number": "Digite seu número de telefone",
"Is admin": "É administrador", "Is admin": "É administrador",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "As duas senhas digitadas não coincidem.", "Two passwords you typed do not match.": "As duas senhas digitadas não coincidem.",
"Unlink": "Desvincular", "Unlink": "Desvincular",
"Upload (.xlsx)": "Enviar (.xlsx)", "Upload (.xlsx)": "Enviar (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Enviar uma foto", "Upload a photo": "Enviar uma foto",
"Values": "Valores", "Values": "Valores",
"Verification code sent": "Código de verificação enviado", "Verification code sent": "Código de verificação enviado",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Скопировать URL прайс-листа", "Copy pricing page URL": "Скопировать URL прайс-листа",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Бесплатно",
"Failed to get plans": "Не удалось получить планы", "Failed to get plans": "Не удалось получить планы",
"Free": "Бесплатно",
"Getting started": "Выьрать план", "Getting started": "Выьрать план",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Продолжительность пробного периода", "Trial duration": "Продолжительность пробного периода",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "URL домашней страницы пользователя", "Homepage - Tooltip": "URL домашней страницы пользователя",
"ID card": "ID-карта", "ID card": "ID-карта",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Введите свой адрес электронной почты", "Input your email": "Введите свой адрес электронной почты",
"Input your phone number": "Введите ваш номер телефона", "Input your phone number": "Введите ваш номер телефона",
"Is admin": "Это администратор", "Is admin": "Это администратор",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Два введенных вами пароля не совпадают.", "Two passwords you typed do not match.": "Два введенных вами пароля не совпадают.",
"Unlink": "Отсоединить", "Unlink": "Отсоединить",
"Upload (.xlsx)": "Загрузить (.xlsx)", "Upload (.xlsx)": "Загрузить (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Загрузить фото", "Upload a photo": "Загрузить фото",
"Values": "Значения", "Values": "Значения",
"Verification code sent": "Код подтверждения отправлен", "Verification code sent": "Код подтверждения отправлен",

View File

@@ -570,8 +570,8 @@
"pricing": { "pricing": {
"Copy pricing page URL": "Sao chép URL trang bảng giá", "Copy pricing page URL": "Sao chép URL trang bảng giá",
"Edit Pricing": "Edit Pricing", "Edit Pricing": "Edit Pricing",
"Free": "Miễn phí",
"Failed to get plans": "Không thể lấy được các kế hoạch", "Failed to get plans": "Không thể lấy được các kế hoạch",
"Free": "Miễn phí",
"Getting started": "Bắt đầu", "Getting started": "Bắt đầu",
"New Pricing": "New Pricing", "New Pricing": "New Pricing",
"Trial duration": "Thời gian thử nghiệm", "Trial duration": "Thời gian thử nghiệm",
@@ -904,8 +904,13 @@
"Homepage - Tooltip": "Địa chỉ URL của trang chủ của người dùng", "Homepage - Tooltip": "Địa chỉ URL của trang chủ của người dùng",
"ID card": "Thẻ căn cước dân sự", "ID card": "Thẻ căn cước dân sự",
"ID card - Tooltip": "ID card - Tooltip", "ID card - Tooltip": "ID card - Tooltip",
"ID card back": "ID card back",
"ID card front": "ID card front",
"ID card info": "ID card info",
"ID card info - Tooltip": "ID card info - Tooltip",
"ID card type": "ID card type", "ID card type": "ID card type",
"ID card type - Tooltip": "ID card type - Tooltip", "ID card type - Tooltip": "ID card type - Tooltip",
"ID card with person": "ID card with person",
"Input your email": "Nhập địa chỉ email của bạn", "Input your email": "Nhập địa chỉ email của bạn",
"Input your phone number": "Nhập số điện thoại của bạn", "Input your phone number": "Nhập số điện thoại của bạn",
"Is admin": "Là quản trị viên", "Is admin": "Là quản trị viên",
@@ -961,6 +966,9 @@
"Two passwords you typed do not match.": "Hai mật khẩu mà bạn đã nhập không khớp.", "Two passwords you typed do not match.": "Hai mật khẩu mà bạn đã nhập không khớp.",
"Unlink": "Hủy liên kết", "Unlink": "Hủy liên kết",
"Upload (.xlsx)": "Tải lên (.xlsx)", "Upload (.xlsx)": "Tải lên (.xlsx)",
"Upload ID card back picture": "Upload ID card back picture",
"Upload ID card front picture": "Upload ID card front picture",
"Upload ID card with person picture": "Upload ID card with person picture",
"Upload a photo": "Tải lên một bức ảnh", "Upload a photo": "Tải lên một bức ảnh",
"Values": "Giá trị", "Values": "Giá trị",
"Verification code sent": "Mã xác minh đã được gửi", "Verification code sent": "Mã xác minh đã được gửi",

View File

@@ -902,8 +902,13 @@
"Homepage - Tooltip": "个人主页链接", "Homepage - Tooltip": "个人主页链接",
"ID card": "身份证号", "ID card": "身份证号",
"ID card - Tooltip": "身份证号 - Tooltip", "ID card - Tooltip": "身份证号 - Tooltip",
"ID card back": "身份证反面",
"ID card front": "身份证正面",
"ID card info": "身份证照片",
"ID card info - Tooltip": "身份证照片用于进行用户身份验证,验证成功后如要修改请联系管理员",
"ID card type": "身份证类型", "ID card type": "身份证类型",
"ID card type - Tooltip": "身份证类型 - Tooltip", "ID card type - Tooltip": "身份证类型 - Tooltip",
"ID card with person": "手持身份证",
"Input your email": "请输入邮箱", "Input your email": "请输入邮箱",
"Input your phone number": "输入手机号", "Input your phone number": "输入手机号",
"Is admin": "是组织管理员", "Is admin": "是组织管理员",
@@ -959,6 +964,9 @@
"Two passwords you typed do not match.": "两次输入的密码不匹配。", "Two passwords you typed do not match.": "两次输入的密码不匹配。",
"Unlink": "解绑", "Unlink": "解绑",
"Upload (.xlsx)": "上传(.xlsx", "Upload (.xlsx)": "上传(.xlsx",
"Upload ID card back picture": "上传身份证反面照片",
"Upload ID card front picture": "上传身份证正面照片",
"Upload ID card with person picture": "上传手持身份证照片",
"Upload a photo": "上传头像", "Upload a photo": "上传头像",
"Values": "值", "Values": "值",
"Verification code sent": "验证码已发送", "Verification code sent": "验证码已发送",