Compare commits

...

20 Commits

Author SHA1 Message Date
DacongDA
90d502ab2b feat: add custom css style for signup page and enhance css edit (#2880)
* feat: add custom css style for signup page and enhance css edit in signintable

* feat: change cssStyle to customCss

* feat: auto hide <style> label, fix display problem on providers, remove auto add providers in signup page

* fix: fix indent in signin items customCss and fix providers display in signup items

* fix: fix login replace logical
2024-04-21 11:56:18 +08:00
MyColorfulDays
d51af3378e fix: fix init data not saved to database (#2885) (#2886) 2024-04-21 11:55:06 +08:00
Yang Luo
87e2b97813 feat: translate Ukrainian language i18n 2024-04-20 02:14:23 +08:00
Yang Luo
d9e44c1f2d fix: add "Is used" to verification list page 2024-04-20 00:18:52 +08:00
Yang Luo
dfa4503f24 feat: support "mfa_phone_enabled", "mfa_email_enabled" in update-user API 2024-04-20 00:16:45 +08:00
guangwu
f7fb32893b fix: close file in LocalFileSystemProvider's Put() (#2882) 2024-04-20 00:11:52 +08:00
Yang Luo
66d0758b13 feat: fix DisableVerificationCode bug about empty email and phone 2024-04-19 13:28:13 +08:00
Yang Luo
46ad0fe0be Improve Email Send() logic 2024-04-11 19:09:48 +08:00
Yang Luo
6b637e3b2e feat: fix SendgridEmailProvider error handling, fix send-email template 2024-04-11 00:18:39 +08:00
DacongDA
3354945119 feat: add SendGrid Email provider (#2865)
* feat: add support for email provider send grid

* feat: rename send grid to sendgrid

* feat: rename send grid to sendgrid

* feat: change logo url of send grid
2024-04-09 22:16:01 +08:00
DacongDA
19c4416f10 feat: degrade the ant-design/cssinjs version to fix the Chrome 87 broken UI issue (#2861) 2024-04-09 09:15:39 +08:00
Yang Luo
2077db9091 fix: fix bug in VerificationListPage 2024-04-07 15:39:25 +08:00
无别
800f0ed249 feat: add tzdata package in Dockerfile to fix timezone issue (#2857)
Add tzdata to resolve possible time zone errors
2024-04-07 14:27:45 +08:00
xyt
6161040c67 fix: Dismiss google one tap after logged in by setting disableCancelOnUnmount to false (#2854)
* fix: Google One Tap should be hidden after logged in

* Change the call location for google.accounts.id.cancel()

* fix: hide google one tap after login by set disableCancelOnUnmount to false
2024-04-05 23:39:33 +08:00
xyt
1d785e61c6 feat: Google One Tap should be hidden after logged in (#2853)
* fix: Google One Tap should be hidden after logged in

* Change the call location for google.accounts.id.cancel()
2024-04-05 20:10:13 +08:00
Yang Luo
0329d24867 feat: add isUsernameLowered to config 2024-04-02 21:54:16 +08:00
Yang Luo
fb6f3623ee feat: add requireProviderPermission() 2024-03-30 23:24:59 +08:00
DacongDA
eb448bd043 fix: fix permission problem in provider (#2848) 2024-03-30 23:18:03 +08:00
xyt
ea88839db9 feat: add back button in forget password page (#2847)
* feat: add back button in forget password page

* fix: can't step back when directly entering forgot password page

* feat: forget password page always return to login page

* feat: if has history then go back to history & change style

* Update ForgetPage.js

* fix: reset button position

* Update ForgetPage.js

* Update ForgetPage.js

---------

Co-authored-by: Eric Luo <hsluoyz@qq.com>
2024-03-30 23:17:47 +08:00
Yang Luo
cb95f6977a fix: fix PasswordModal error when changing username 2024-03-30 12:28:55 +08:00
75 changed files with 1801 additions and 1352 deletions

View File

@@ -16,6 +16,7 @@ ARG USER=casdoor
RUN sed -i 's/https/http/' /etc/apk/repositories RUN sed -i 's/https/http/' /etc/apk/repositories
RUN apk add --update sudo RUN apk add --update sudo
RUN apk add tzdata
RUN apk add curl RUN apk add curl
RUN apk add ca-certificates && update-ca-certificates RUN apk add ca-certificates && update-ca-certificates

View File

@@ -15,6 +15,7 @@ socks5Proxy = "127.0.0.1:10808"
verificationCodeTimeout = 10 verificationCodeTimeout = 10
initScore = 0 initScore = 0
logPostOnly = true logPostOnly = true
isUsernameLowered = false
origin = origin =
originFrontend = originFrontend =
staticBaseUrl = "https://cdn.casbin.org" staticBaseUrl = "https://cdn.casbin.org"

View File

@@ -261,16 +261,20 @@ func (c *ApiController) Signup() {
c.SetSessionUsername(user.GetId()) c.SetSessionUsername(user.GetId())
} }
err = object.DisableVerificationCode(authForm.Email) if authForm.Email != "" {
if err != nil { err = object.DisableVerificationCode(authForm.Email)
c.ResponseError(err.Error()) if err != nil {
return c.ResponseError(err.Error())
return
}
} }
err = object.DisableVerificationCode(checkPhone) if checkPhone != "" {
if err != nil { err = object.DisableVerificationCode(checkPhone)
c.ResponseError(err.Error()) if err != nil {
return c.ResponseError(err.Error())
return
}
} }
c.Ctx.Input.SetParam("recordUserId", user.GetId()) c.Ctx.Input.SetParam("recordUserId", user.GetId())

View File

@@ -141,6 +141,20 @@ func (c *ApiController) GetProvider() {
c.ResponseOk(object.GetMaskedProvider(provider, isMaskEnabled)) c.ResponseOk(object.GetMaskedProvider(provider, isMaskEnabled))
} }
func (c *ApiController) requireProviderPermission(provider *object.Provider) bool {
isGlobalAdmin, user := c.isGlobalAdmin()
if isGlobalAdmin {
return true
}
if provider.Owner == "admin" || user.Owner != provider.Owner {
c.ResponseError(c.T("auth:Unauthorized operation"))
return false
}
return true
}
// UpdateProvider // UpdateProvider
// @Title UpdateProvider // @Title UpdateProvider
// @Tag Provider API // @Tag Provider API
@@ -159,6 +173,11 @@ func (c *ApiController) UpdateProvider() {
return return
} }
ok := c.requireProviderPermission(&provider)
if !ok {
return
}
c.Data["json"] = wrapActionResponse(object.UpdateProvider(id, &provider)) c.Data["json"] = wrapActionResponse(object.UpdateProvider(id, &provider))
c.ServeJSON() c.ServeJSON()
} }
@@ -184,11 +203,17 @@ func (c *ApiController) AddProvider() {
return return
} }
if err := checkQuotaForProvider(int(count)); err != nil { err = checkQuotaForProvider(int(count))
if err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return
} }
ok := c.requireProviderPermission(&provider)
if !ok {
return
}
c.Data["json"] = wrapActionResponse(object.AddProvider(&provider)) c.Data["json"] = wrapActionResponse(object.AddProvider(&provider))
c.ServeJSON() c.ServeJSON()
} }
@@ -208,6 +233,11 @@ func (c *ApiController) DeleteProvider() {
return return
} }
ok := c.requireProviderPermission(&provider)
if !ok {
return
}
c.Data["json"] = wrapActionResponse(object.DeleteProvider(&provider)) c.Data["json"] = wrapActionResponse(object.DeleteProvider(&provider))
c.ServeJSON() c.ServeJSON()
} }

View File

@@ -113,25 +113,25 @@ func (c *ApiController) SendEmail() {
content := emailForm.Content content := emailForm.Content
if content == "" { if content == "" {
code := "123456" content = provider.Content
}
// "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes." code := "123456"
content = strings.Replace(provider.Content, "%s", code, 1) // "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes."
if !strings.HasPrefix(userId, "app/") { content = strings.Replace(content, "%s", code, 1)
var user *object.User userString := "Hi"
user, err = object.GetUser(userId) if !strings.HasPrefix(userId, "app/") {
if err != nil { var user *object.User
c.ResponseError(err.Error()) user, err = object.GetUser(userId)
return if err != nil {
} c.ResponseError(err.Error())
return
userString := "Hi" }
if user != nil { if user != nil {
userString = user.GetFriendlyName() userString = user.GetFriendlyName()
}
content = strings.Replace(content, "%{user.friendlyName}", userString, 1)
} }
} }
content = strings.Replace(content, "%{user.friendlyName}", userString, 1)
for _, receiver := range emailForm.Receivers { for _, receiver := range emailForm.Receivers {
err = object.SendEmail(provider, emailForm.Title, content, receiver, emailForm.Sender) err = object.SendEmail(provider, emailForm.Title, content, receiver, emailForm.Sender)

View File

@@ -111,46 +111,44 @@ func newEmail(fromAddress string, toAddress string, subject string, content stri
Subject: subject, Subject: subject,
HTML: content, HTML: content,
}, },
Importance: importanceNormal, Importance: importanceNormal,
Attachments: []Attachment{},
} }
} }
func (a *AzureACSEmailProvider) sendEmail(e *Email) error { func (a *AzureACSEmailProvider) Send(fromAddress string, fromName string, toAddress string, subject string, content string) error {
postBody, err := json.Marshal(e) email := newEmail(fromAddress, toAddress, subject, content)
if err != nil {
return fmt.Errorf("email JSON marshall failed: %s", err)
}
bodyBuffer := bytes.NewBuffer(postBody) postBody, err := json.Marshal(email)
if err != nil {
return err
}
endpoint := strings.TrimSuffix(a.Endpoint, "/") endpoint := strings.TrimSuffix(a.Endpoint, "/")
url := fmt.Sprintf("%s/emails:send?api-version=2023-03-31", endpoint) url := fmt.Sprintf("%s/emails:send?api-version=2023-03-31", endpoint)
bodyBuffer := bytes.NewBuffer(postBody)
req, err := http.NewRequest("POST", url, bodyBuffer) req, err := http.NewRequest("POST", url, bodyBuffer)
if err != nil { if err != nil {
return fmt.Errorf("error creating AzureACS API request: %s", err) return err
} }
// Sign the request using the AzureACS access key and HMAC-SHA256
err = signRequestHMAC(a.AccessKey, req) err = signRequestHMAC(a.AccessKey, req)
if err != nil { if err != nil {
return fmt.Errorf("error signing AzureACS API request: %s", err) return err
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
// Some important header
req.Header.Set("repeatability-request-id", uuid.New().String()) req.Header.Set("repeatability-request-id", uuid.New().String())
req.Header.Set("repeatability-first-sent", time.Now().UTC().Format(http.TimeFormat)) req.Header.Set("repeatability-first-sent", time.Now().UTC().Format(http.TimeFormat))
// Send request
client := &http.Client{} client := &http.Client{}
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return fmt.Errorf("error sending AzureACS API request: %s", err) return err
} }
defer resp.Body.Close() defer resp.Body.Close()
// Response error Handling
if resp.StatusCode == http.StatusBadRequest || resp.StatusCode == http.StatusUnauthorized { if resp.StatusCode == http.StatusBadRequest || resp.StatusCode == http.StatusUnauthorized {
commError := ErrorResponse{} commError := ErrorResponse{}
@@ -159,11 +157,11 @@ func (a *AzureACSEmailProvider) sendEmail(e *Email) error {
return err return err
} }
return fmt.Errorf("error sending email: %s", commError.Error.Message) return fmt.Errorf("status code: %d, error message: %s", resp.StatusCode, commError.Error.Message)
} }
if resp.StatusCode != http.StatusAccepted { if resp.StatusCode != http.StatusAccepted {
return fmt.Errorf("error sending email: status: %d", resp.StatusCode) return fmt.Errorf("status code: %d", resp.StatusCode)
} }
return nil return nil
@@ -221,9 +219,3 @@ func GetHmac(content string, key []byte) string {
return base64.StdEncoding.EncodeToString(hmac.Sum(nil)) return base64.StdEncoding.EncodeToString(hmac.Sum(nil))
} }
func (a *AzureACSEmailProvider) Send(fromAddress string, fromName string, toAddress string, subject string, content string) error {
e := newEmail(fromAddress, toAddress, subject, content)
return a.sendEmail(e)
}

View File

@@ -23,6 +23,8 @@ func GetEmailProvider(typ string, clientId string, clientSecret string, host str
return NewAzureACSEmailProvider(clientSecret, host) return NewAzureACSEmailProvider(clientSecret, host)
} else if typ == "Custom HTTP Email" { } else if typ == "Custom HTTP Email" {
return NewHttpEmailProvider(endpoint, method) return NewHttpEmailProvider(endpoint, method)
} else if typ == "SendGrid" {
return NewSendgridEmailProvider(clientSecret)
} else { } else {
return NewSmtpEmailProvider(clientId, clientSecret, host, port, typ, disableSsl) return NewSmtpEmailProvider(clientId, clientSecret, host, port, typ, disableSsl)
} }

68
email/sendgrid.go Normal file
View File

@@ -0,0 +1,68 @@
// Copyright 2024 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package email
import (
"encoding/json"
"fmt"
"strings"
"github.com/sendgrid/sendgrid-go"
"github.com/sendgrid/sendgrid-go/helpers/mail"
)
type SendgridEmailProvider struct {
ApiKey string
}
type SendgridResponseBody struct {
Errors []struct {
Message string `json:"message"`
Field interface{} `json:"field"`
Help interface{} `json:"help"`
} `json:"errors"`
}
func NewSendgridEmailProvider(apiKey string) *SendgridEmailProvider {
return &SendgridEmailProvider{ApiKey: apiKey}
}
func (s *SendgridEmailProvider) Send(fromAddress string, fromName, toAddress string, subject string, content string) error {
from := mail.NewEmail(fromName, fromAddress)
to := mail.NewEmail("", toAddress)
message := mail.NewSingleEmail(from, subject, to, "", content)
client := sendgrid.NewSendClient(s.ApiKey)
response, err := client.Send(message)
if err != nil {
return err
}
if response.StatusCode >= 300 {
var responseBody SendgridResponseBody
err = json.Unmarshal([]byte(response.Body), &responseBody)
if err != nil {
return err
}
messages := []string{}
for _, sendgridError := range responseBody.Errors {
messages = append(messages, sendgridError.Message)
}
return fmt.Errorf("SendGrid status code: %d, error message: %s", response.StatusCode, strings.Join(messages, " | "))
}
return nil
}

1
go.mod
View File

@@ -45,6 +45,7 @@ require (
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
github.com/russellhaering/gosaml2 v0.9.0 github.com/russellhaering/gosaml2 v0.9.0
github.com/russellhaering/goxmldsig v1.2.0 github.com/russellhaering/goxmldsig v1.2.0
github.com/sendgrid/sendgrid-go v3.14.0+incompatible // indirect
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible github.com/shirou/gopsutil v3.21.11+incompatible
github.com/siddontang/go-log v0.0.0-20190221022429-1e957dd83bed github.com/siddontang/go-log v0.0.0-20190221022429-1e957dd83bed

3
go.sum
View File

@@ -1907,8 +1907,11 @@ github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdh
github.com/scim2/filter-parser/v2 v2.2.0 h1:QGadEcsmypxg8gYChRSM2j1edLyE/2j72j+hdmI4BJM= github.com/scim2/filter-parser/v2 v2.2.0 h1:QGadEcsmypxg8gYChRSM2j1edLyE/2j72j+hdmI4BJM=
github.com/scim2/filter-parser/v2 v2.2.0/go.mod h1:jWnkDToqX/Y0ugz0P5VvpVEUKcWcyHHj+X+je9ce5JA= github.com/scim2/filter-parser/v2 v2.2.0/go.mod h1:jWnkDToqX/Y0ugz0P5VvpVEUKcWcyHHj+X+je9ce5JA=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sendgrid/rest v2.6.9+incompatible h1:1EyIcsNdn9KIisLW50MKwmSRSK+ekueiEMJ7NEoxJo0=
github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE= github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE=
github.com/sendgrid/sendgrid-go v3.13.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= github.com/sendgrid/sendgrid-go v3.13.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
github.com/sendgrid/sendgrid-go v3.14.0+incompatible h1:KDSasSTktAqMJCYClHVE94Fcif2i7P7wzISv1sU6DUA=
github.com/sendgrid/sendgrid-go v3.14.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "Der Benutzer %s existiert nicht", "The user: %s doesn't exist": "Der Benutzer %s existiert nicht",
"don't support captchaProvider: ": "Unterstütze captchaProvider nicht:", "don't support captchaProvider: ": "Unterstütze captchaProvider nicht:",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Es gibt einen LDAP-Server" "Ldap server exist": "Es gibt einen LDAP-Server"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "Der Anbieter: %s wurde nicht gefunden" "The provider: %s is not found": "Der Anbieter: %s wurde nicht gefunden"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Der Code wurde noch nicht versendet!",
"Invalid captcha provider.": "Ungültiger Captcha-Anbieter.", "Invalid captcha provider.": "Ungültiger Captcha-Anbieter.",
"Phone number is invalid in your region %s": "Die Telefonnummer ist in Ihrer Region %s ungültig", "Phone number is invalid in your region %s": "Die Telefonnummer ist in Ihrer Region %s ungültig",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing-Test fehlgeschlagen.", "Turing test failed.": "Turing-Test fehlgeschlagen.",
"Unable to get the email modify rule.": "Nicht in der Lage, die E-Mail-Änderungsregel zu erhalten.", "Unable to get the email modify rule.": "Nicht in der Lage, die E-Mail-Änderungsregel zu erhalten.",
"Unable to get the phone modify rule.": "Nicht in der Lage, die Telefon-Änderungsregel zu erhalten.", "Unable to get the phone modify rule.": "Nicht in der Lage, die Telefon-Änderungsregel zu erhalten.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "El usuario: %s no existe", "The user: %s doesn't exist": "El usuario: %s no existe",
"don't support captchaProvider: ": "No apoyo a captchaProvider", "don't support captchaProvider: ": "No apoyo a captchaProvider",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "El servidor LDAP existe" "Ldap server exist": "El servidor LDAP existe"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "El proveedor: %s no se encuentra" "The provider: %s is not found": "El proveedor: %s no se encuentra"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "¡El código aún no ha sido enviado!",
"Invalid captcha provider.": "Proveedor de captcha no válido.", "Invalid captcha provider.": "Proveedor de captcha no válido.",
"Phone number is invalid in your region %s": "El número de teléfono es inválido en tu región %s", "Phone number is invalid in your region %s": "El número de teléfono es inválido en tu región %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "El test de Turing falló.", "Turing test failed.": "El test de Turing falló.",
"Unable to get the email modify rule.": "No se puede obtener la regla de modificación de correo electrónico.", "Unable to get the email modify rule.": "No se puede obtener la regla de modificación de correo electrónico.",
"Unable to get the phone modify rule.": "No se pudo obtener la regla de modificación del teléfono.", "Unable to get the phone modify rule.": "No se pudo obtener la regla de modificación del teléfono.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "L'utilisateur : %s n'existe pas", "The user: %s doesn't exist": "L'utilisateur : %s n'existe pas",
"don't support captchaProvider: ": "ne prend pas en charge captchaProvider: ", "don't support captchaProvider: ": "ne prend pas en charge captchaProvider: ",
"this operation is not allowed in demo mode": "cette opération nest pas autorisée en mode démo" "this operation is not allowed in demo mode": "cette opération nest pas autorisée en mode démo",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Le serveur LDAP existe" "Ldap server exist": "Le serveur LDAP existe"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "Le fournisseur : %s n'a pas été trouvé" "The provider: %s is not found": "Le fournisseur : %s n'a pas été trouvé"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Le code n'a pas encore été envoyé !",
"Invalid captcha provider.": "Fournisseur de captcha invalide.", "Invalid captcha provider.": "Fournisseur de captcha invalide.",
"Phone number is invalid in your region %s": "Le numéro de téléphone n'est pas valide dans votre région %s", "Phone number is invalid in your region %s": "Le numéro de téléphone n'est pas valide dans votre région %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Le test de Turing a échoué.", "Turing test failed.": "Le test de Turing a échoué.",
"Unable to get the email modify rule.": "Incapable d'obtenir la règle de modification de courriel.", "Unable to get the email modify rule.": "Incapable d'obtenir la règle de modification de courriel.",
"Unable to get the phone modify rule.": "Impossible d'obtenir la règle de modification de téléphone.", "Unable to get the phone modify rule.": "Impossible d'obtenir la règle de modification de téléphone.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "Pengguna: %s tidak ada", "The user: %s doesn't exist": "Pengguna: %s tidak ada",
"don't support captchaProvider: ": "Jangan mendukung captchaProvider:", "don't support captchaProvider: ": "Jangan mendukung captchaProvider:",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Server ldap ada" "Ldap server exist": "Server ldap ada"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "Penyedia: %s tidak ditemukan" "The provider: %s is not found": "Penyedia: %s tidak ditemukan"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Kode belum dikirimkan!",
"Invalid captcha provider.": "Penyedia captcha tidak valid.", "Invalid captcha provider.": "Penyedia captcha tidak valid.",
"Phone number is invalid in your region %s": "Nomor telepon tidak valid di wilayah anda %s", "Phone number is invalid in your region %s": "Nomor telepon tidak valid di wilayah anda %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Tes Turing gagal.", "Turing test failed.": "Tes Turing gagal.",
"Unable to get the email modify rule.": "Tidak dapat memperoleh aturan modifikasi email.", "Unable to get the email modify rule.": "Tidak dapat memperoleh aturan modifikasi email.",
"Unable to get the phone modify rule.": "Tidak dapat memodifikasi aturan telepon.", "Unable to get the phone modify rule.": "Tidak dapat memodifikasi aturan telepon.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "そのユーザー:%sは存在しません", "The user: %s doesn't exist": "そのユーザー:%sは存在しません",
"don't support captchaProvider: ": "captchaProviderをサポートしないでください", "don't support captchaProvider: ": "captchaProviderをサポートしないでください",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "LDAPサーバーは存在します" "Ldap server exist": "LDAPサーバーは存在します"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "プロバイダー:%sが見つかりません" "The provider: %s is not found": "プロバイダー:%sが見つかりません"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "まだコードが送信されていません!",
"Invalid captcha provider.": "無効なCAPTCHAプロバイダー。", "Invalid captcha provider.": "無効なCAPTCHAプロバイダー。",
"Phone number is invalid in your region %s": "電話番号はあなたの地域で無効です %s", "Phone number is invalid in your region %s": "電話番号はあなたの地域で無効です %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "チューリングテストは失敗しました。", "Turing test failed.": "チューリングテストは失敗しました。",
"Unable to get the email modify rule.": "電子メール変更規則を取得できません。", "Unable to get the email modify rule.": "電子メール変更規則を取得できません。",
"Unable to get the phone modify rule.": "電話の変更ルールを取得できません。", "Unable to get the phone modify rule.": "電話の変更ルールを取得できません。",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "사용자 %s는 존재하지 않습니다", "The user: %s doesn't exist": "사용자 %s는 존재하지 않습니다",
"don't support captchaProvider: ": "CaptchaProvider를 지원하지 마세요", "don't support captchaProvider: ": "CaptchaProvider를 지원하지 마세요",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "LDAP 서버가 존재합니다" "Ldap server exist": "LDAP 서버가 존재합니다"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "제공자: %s를 찾을 수 없습니다" "The provider: %s is not found": "제공자: %s를 찾을 수 없습니다"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "코드는 아직 전송되지 않았습니다!",
"Invalid captcha provider.": "잘못된 captcha 제공자입니다.", "Invalid captcha provider.": "잘못된 captcha 제공자입니다.",
"Phone number is invalid in your region %s": "전화 번호가 당신의 지역 %s에서 유효하지 않습니다", "Phone number is invalid in your region %s": "전화 번호가 당신의 지역 %s에서 유효하지 않습니다",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "튜링 테스트 실패.", "Turing test failed.": "튜링 테스트 실패.",
"Unable to get the email modify rule.": "이메일 수정 규칙을 가져올 수 없습니다.", "Unable to get the email modify rule.": "이메일 수정 규칙을 가져올 수 없습니다.",
"Unable to get the phone modify rule.": "전화 수정 규칙을 가져올 수 없습니다.", "Unable to get the phone modify rule.": "전화 수정 규칙을 가져올 수 없습니다.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "Пользователь %s не существует", "The user: %s doesn't exist": "Пользователь %s не существует",
"don't support captchaProvider: ": "неподдерживаемый captchaProvider: ", "don't support captchaProvider: ": "неподдерживаемый captchaProvider: ",
"this operation is not allowed in demo mode": "эта операция не разрешена в демо-режиме" "this operation is not allowed in demo mode": "эта операция не разрешена в демо-режиме",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "LDAP-сервер существует" "Ldap server exist": "LDAP-сервер существует"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "Поставщик: %s не найден" "The provider: %s is not found": "Поставщик: %s не найден"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Код еще не был отправлен!",
"Invalid captcha provider.": "Недействительный поставщик CAPTCHA.", "Invalid captcha provider.": "Недействительный поставщик CAPTCHA.",
"Phone number is invalid in your region %s": "Номер телефона недействителен в вашем регионе %s", "Phone number is invalid in your region %s": "Номер телефона недействителен в вашем регионе %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Тест Тьюринга не удался.", "Turing test failed.": "Тест Тьюринга не удался.",
"Unable to get the email modify rule.": "Невозможно получить правило изменения электронной почты.", "Unable to get the email modify rule.": "Невозможно получить правило изменения электронной почты.",
"Unable to get the phone modify rule.": "Невозможно получить правило изменения телефона.", "Unable to get the phone modify rule.": "Невозможно получить правило изменения телефона.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Telefon numaranızın bulunduğu bölgeye hizmet veremiyoruz", "Phone number is invalid in your region %s": "Telefon numaranızın bulunduğu bölgeye hizmet veremiyoruz",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "The user: %s doesn't exist", "The user: %s doesn't exist": "The user: %s doesn't exist",
"don't support captchaProvider: ": "don't support captchaProvider: ", "don't support captchaProvider: ": "don't support captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Ldap server exist" "Ldap server exist": "Ldap server exist"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "The provider: %s is not found" "The provider: %s is not found": "The provider: %s is not found"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Code has not been sent yet!",
"Invalid captcha provider.": "Invalid captcha provider.", "Invalid captcha provider.": "Invalid captcha provider.",
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s", "Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Turing test failed.", "Turing test failed.": "Turing test failed.",
"Unable to get the email modify rule.": "Unable to get the email modify rule.", "Unable to get the email modify rule.": "Unable to get the email modify rule.",
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.", "Unable to get the phone modify rule.": "Unable to get the phone modify rule.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "The organization: %s should have one application at least", "The organization: %s should have one application at least": "The organization: %s should have one application at least",
"The user: %s doesn't exist": "Người dùng: %s không tồn tại", "The user: %s doesn't exist": "Người dùng: %s không tồn tại",
"don't support captchaProvider: ": "không hỗ trợ captchaProvider: ", "don't support captchaProvider: ": "không hỗ trợ captchaProvider: ",
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode" "this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
"this operation requires administrator to perform": "this operation requires administrator to perform"
}, },
"ldap": { "ldap": {
"Ldap server exist": "Máy chủ LDAP tồn tại" "Ldap server exist": "Máy chủ LDAP tồn tại"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "Nhà cung cấp: %s không được tìm thấy" "The provider: %s is not found": "Nhà cung cấp: %s không được tìm thấy"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "Mã chưa được gửi đến!",
"Invalid captcha provider.": "Nhà cung cấp captcha không hợp lệ.", "Invalid captcha provider.": "Nhà cung cấp captcha không hợp lệ.",
"Phone number is invalid in your region %s": "Số điện thoại không hợp lệ trong vùng của bạn %s", "Phone number is invalid in your region %s": "Số điện thoại không hợp lệ trong vùng của bạn %s",
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
"Turing test failed.": "Kiểm định Turing thất bại.", "Turing test failed.": "Kiểm định Turing thất bại.",
"Unable to get the email modify rule.": "Không thể lấy quy tắc sửa đổi email.", "Unable to get the email modify rule.": "Không thể lấy quy tắc sửa đổi email.",
"Unable to get the phone modify rule.": "Không thể thay đổi quy tắc trên điện thoại.", "Unable to get the phone modify rule.": "Không thể thay đổi quy tắc trên điện thoại.",

View File

@@ -81,7 +81,8 @@
"The organization: %s should have one application at least": "组织: %s 应该拥有至少一个应用", "The organization: %s should have one application at least": "组织: %s 应该拥有至少一个应用",
"The user: %s doesn't exist": "用户: %s不存在", "The user: %s doesn't exist": "用户: %s不存在",
"don't support captchaProvider: ": "不支持验证码提供商: ", "don't support captchaProvider: ": "不支持验证码提供商: ",
"this operation is not allowed in demo mode": "demo模式下不允许该操作" "this operation is not allowed in demo mode": "demo模式下不允许该操作",
"this operation requires administrator to perform": "只有管理员才能进行此操作"
}, },
"ldap": { "ldap": {
"Ldap server exist": "LDAP服务器已存在" "Ldap server exist": "LDAP服务器已存在"
@@ -145,9 +146,10 @@
"The provider: %s is not found": "未找到提供商: %s" "The provider: %s is not found": "未找到提供商: %s"
}, },
"verification": { "verification": {
"Code has not been sent yet!": "验证码还未发送",
"Invalid captcha provider.": "非法的验证码提供商", "Invalid captcha provider.": "非法的验证码提供商",
"Phone number is invalid in your region %s": "您所在地区的电话号码无效 %s", "Phone number is invalid in your region %s": "您所在地区的电话号码无效 %s",
"The verification code has not been sent yet!": "验证码未发送!",
"The verification code has not been sent yet, or has already been used!": "验证码未发送或已被使用!",
"Turing test failed.": "验证码还未发送", "Turing test failed.": "验证码还未发送",
"Unable to get the email modify rule.": "无法获取邮箱修改规则", "Unable to get the email modify rule.": "无法获取邮箱修改规则",
"Unable to get the phone modify rule.": "无法获取手机号修改规则", "Unable to get the phone modify rule.": "无法获取手机号修改规则",

View File

@@ -35,6 +35,7 @@ type SignupItem struct {
Visible bool `json:"visible"` Visible bool `json:"visible"`
Required bool `json:"required"` Required bool `json:"required"`
Prompted bool `json:"prompted"` Prompted bool `json:"prompted"`
CustomCss string `json:"customCss"`
Label string `json:"label"` Label string `json:"label"`
Placeholder string `json:"placeholder"` Placeholder string `json:"placeholder"`
Regex string `json:"regex"` Regex string `json:"regex"`
@@ -208,7 +209,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem := &SigninItem{ signinItem := &SigninItem{
Name: "Back button", Name: "Back button",
Visible: true, Visible: true,
Label: "\n<style>\n .back-button {\n top: 65px;\n left: 15px;\n position: absolute;\n }\n</style>\n", Label: ".back-button {\n top: 65px;\n left: 15px;\n position: absolute;\n}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -216,7 +217,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Languages", Name: "Languages",
Visible: true, Visible: true,
Label: "\n<style>\n .login-languages {\n top: 55px;\n right: 5px;\n position: absolute;\n }\n</style>\n", Label: ".login-languages {\n top: 55px;\n right: 5px;\n position: absolute;\n}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -224,7 +225,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Logo", Name: "Logo",
Visible: true, Visible: true,
Label: "\n<style>\n .login-logo-box {\n }\n</style>\n", Label: ".login-logo-box {}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -232,7 +233,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Signin methods", Name: "Signin methods",
Visible: true, Visible: true,
Label: "\n<style>\n .signin-methods {\n }\n</style>\n", Label: ".signin-methods {}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -240,7 +241,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Username", Name: "Username",
Visible: true, Visible: true,
Label: "\n<style>\n .login-username {\n }\n</style>\n", Label: ".login-username {}\n.login-username-input{}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -248,7 +249,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Password", Name: "Password",
Visible: true, Visible: true,
Label: "\n<style>\n .login-password {\n }\n</style>\n", Label: ".login-password {}\n.login-password-input{}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -256,7 +257,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Agreement", Name: "Agreement",
Visible: true, Visible: true,
Label: "\n<style>\n .login-agreement {\n }\n</style>\n", Label: ".login-agreement {}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -264,7 +265,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Forgot password?", Name: "Forgot password?",
Visible: true, Visible: true,
Label: "\n<style>\n .login-forget-password {\n display: inline-flex;\n justify-content: space-between;\n width: 320px;\n margin-bottom: 25px;\n }\n</style>\n", Label: ".login-forget-password {\n display: inline-flex;\n justify-content: space-between;\n width: 320px;\n margin-bottom: 25px;\n}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -272,7 +273,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Login button", Name: "Login button",
Visible: true, Visible: true,
Label: "\n<style>\n .login-button-box {\n margin-bottom: 5px;\n }\n .login-button {\n width: 100%;\n }\n</style>\n", Label: ".login-button-box {\n margin-bottom: 5px;\n}\n.login-button {\n width: 100%;\n}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -280,7 +281,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Signup link", Name: "Signup link",
Visible: true, Visible: true,
Label: "\n<style>\n .login-signup-link {\n margin-bottom: 24px;\n display: flex;\n justify-content: end;\n}\n</style>\n", Label: ".login-signup-link {\n margin-bottom: 24px;\n display: flex;\n justify-content: end;\n}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }
@@ -288,7 +289,7 @@ func extendApplicationWithSigninItems(application *Application) (err error) {
signinItem = &SigninItem{ signinItem = &SigninItem{
Name: "Providers", Name: "Providers",
Visible: true, Visible: true,
Label: "\n<style>\n .provider-img {\n width: 30px;\n margin: 5px;\n }\n .provider-big-img {\n margin-bottom: 10px;\n }\n</style>\n", Label: ".provider-img {\n width: 30px;\n margin: 5px;\n}\n.provider-big-img {\n margin-bottom: 10px;\n}",
Placeholder: "", Placeholder: "",
Rule: "None", Rule: "None",
} }

View File

@@ -71,7 +71,7 @@ func getBuiltInAccountItems() []*AccountItem {
{Name: "Permissions", Visible: true, ViewRule: "Public", ModifyRule: "Immutable"}, {Name: "Permissions", Visible: true, ViewRule: "Public", ModifyRule: "Immutable"},
{Name: "Groups", Visible: true, ViewRule: "Public", ModifyRule: "Admin"}, {Name: "Groups", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
{Name: "3rd-party logins", Visible: true, ViewRule: "Self", ModifyRule: "Self"}, {Name: "3rd-party logins", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Properties", Visible: false, ViewRule: "Admin", ModifyRule: "Admin"}, {Name: "Properties", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "Is admin", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"}, {Name: "Is admin", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "Is forbidden", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"}, {Name: "Is forbidden", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "Is deleted", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"}, {Name: "Is deleted", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},

View File

@@ -303,7 +303,9 @@ func initDefinedUser(user *User) {
} }
user.CreatedTime = util.GetCurrentTime() user.CreatedTime = util.GetCurrentTime()
user.Id = util.GenerateId() user.Id = util.GenerateId()
user.Properties = make(map[string]string) if user.Properties == nil {
user.Properties = make(map[string]string)
}
_, err = AddUser(user) _, err = AddUser(user)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@@ -675,7 +675,7 @@ func UpdateUser(id string, user *User, columns []string, isAdmin bool) (bool, er
"owner", "display_name", "avatar", "first_name", "last_name", "owner", "display_name", "avatar", "first_name", "last_name",
"location", "address", "country_code", "region", "language", "affiliation", "title", "id_card_type", "id_card", "homepage", "bio", "tag", "language", "gender", "birthday", "education", "score", "karma", "ranking", "signup_application", "location", "address", "country_code", "region", "language", "affiliation", "title", "id_card_type", "id_card", "homepage", "bio", "tag", "language", "gender", "birthday", "education", "score", "karma", "ranking", "signup_application",
"is_admin", "is_forbidden", "is_deleted", "hash", "is_default_avatar", "properties", "webauthnCredentials", "managedAccounts", "face_ids", "is_admin", "is_forbidden", "is_deleted", "hash", "is_default_avatar", "properties", "webauthnCredentials", "managedAccounts", "face_ids",
"signin_wrong_times", "last_signin_wrong_time", "groups", "access_key", "access_secret", "signin_wrong_times", "last_signin_wrong_time", "groups", "access_key", "access_secret", "mfa_phone_enabled", "mfa_email_enabled",
"github", "google", "qq", "wechat", "facebook", "dingtalk", "weibo", "gitee", "linkedin", "wecom", "lark", "gitlab", "adfs", "github", "google", "qq", "wechat", "facebook", "dingtalk", "weibo", "gitee", "linkedin", "wecom", "lark", "gitlab", "adfs",
"baidu", "alipay", "casdoor", "infoflow", "apple", "azuread", "azureadb2c", "slack", "steam", "bilibili", "okta", "douyin", "line", "amazon", "baidu", "alipay", "casdoor", "infoflow", "apple", "azuread", "azureadb2c", "slack", "steam", "bilibili", "okta", "douyin", "line", "amazon",
"auth0", "battlenet", "bitbucket", "box", "cloudfoundry", "dailymotion", "deezer", "digitalocean", "discord", "dropbox", "auth0", "battlenet", "bitbucket", "box", "cloudfoundry", "dailymotion", "deezer", "digitalocean", "discord", "dropbox",
@@ -833,6 +833,11 @@ func AddUser(user *User) (bool, error) {
} }
} }
isUsernameLowered := conf.GetConfigBool("isUsernameLowered")
if isUsernameLowered {
user.Name = strings.ToLower(user.Name)
}
affected, err := ormer.Engine.Insert(user) affected, err := ormer.Engine.Insert(user)
if err != nil { if err != nil {
return false, err return false, err
@@ -846,6 +851,8 @@ func AddUsers(users []*User) (bool, error) {
return false, fmt.Errorf("no users are provided") return false, fmt.Errorf("no users are provided")
} }
isUsernameLowered := conf.GetConfigBool("isUsernameLowered")
// organization := GetOrganizationByUser(users[0]) // organization := GetOrganizationByUser(users[0])
for _, user := range users { for _, user := range users {
// this function is only used for syncer or batch upload, so no need to encrypt the password // this function is only used for syncer or batch upload, so no need to encrypt the password
@@ -869,6 +876,10 @@ func AddUsers(users []*User) (bool, error) {
return false, err return false, err
} }
} }
if isUsernameLowered {
user.Name = strings.ToLower(user.Name)
}
} }
affected, err := ormer.Engine.Insert(users) affected, err := ormer.Engine.Insert(users)

View File

@@ -70,6 +70,7 @@ func (sp LocalFileSystemProvider) Put(path string, reader io.Reader) (*oss.Objec
dst, err := os.Create(filepath.Clean(fullPath)) dst, err := os.Create(filepath.Clean(fullPath))
if err == nil { if err == nil {
defer dst.Close()
if seeker, ok := reader.(io.ReadSeeker); ok { if seeker, ok := reader.(io.ReadSeeker); ok {
seeker.Seek(0, 0) seeker.Seek(0, 0)
} }

View File

@@ -3,7 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@ant-design/cssinjs": "1.16.1", "@ant-design/cssinjs": "^1.10.1",
"@ant-design/icons": "^4.7.0", "@ant-design/icons": "^4.7.0",
"@craco/craco": "^6.4.5", "@craco/craco": "^6.4.5",
"@crowdin/cli": "^3.7.10", "@crowdin/cli": "^3.7.10",

View File

@@ -374,6 +374,7 @@ class App extends Component {
}); });
}} }}
onLoginSuccess={(redirectUrl) => { onLoginSuccess={(redirectUrl) => {
window.google?.accounts?.id?.cancel();
if (redirectUrl) { if (redirectUrl) {
localStorage.setItem("mfaRedirectUrl", redirectUrl); localStorage.setItem("mfaRedirectUrl", redirectUrl);
} }

View File

@@ -22,6 +22,7 @@ import * as ApplicationBackend from "./backend/ApplicationBackend";
import i18next from "i18next"; import i18next from "i18next";
import BaseListPage from "./BaseListPage"; import BaseListPage from "./BaseListPage";
import PopconfirmModal from "./common/modal/PopconfirmModal"; import PopconfirmModal from "./common/modal/PopconfirmModal";
import {SignupTableDefaultCssMap} from "./table/SignupTable";
class ApplicationListPage extends BaseListPage { class ApplicationListPage extends BaseListPage {
constructor(props) { constructor(props) {
@@ -61,6 +62,8 @@ class ApplicationListPage extends BaseListPage {
{name: "Email", visible: true, required: true, rule: "Normal"}, {name: "Email", visible: true, required: true, rule: "Normal"},
{name: "Phone", visible: true, required: true, rule: "None"}, {name: "Phone", visible: true, required: true, rule: "None"},
{name: "Agreement", visible: true, required: true, rule: "None"}, {name: "Agreement", visible: true, required: true, rule: "None"},
{name: "Signup button", visible: true, required: true, rule: "None"},
{name: "Providers", visible: true, required: true, rule: "None", customCss: SignupTableDefaultCssMap["Providers"]},
], ],
grantTypes: ["authorization_code", "password", "client_credentials", "token", "id_token", "refresh_token"], grantTypes: ["authorization_code", "password", "client_credentials", "token", "id_token", "refresh_token"],
cert: "cert-built-in", cert: "cert-built-in",

View File

@@ -244,7 +244,7 @@ class ProviderEditPage extends React.Component {
return Setting.getLabel(i18next.t("provider:Client secret"), i18next.t("provider:Client secret - Tooltip")); return Setting.getLabel(i18next.t("provider:Client secret"), i18next.t("provider:Client secret - Tooltip"));
} }
case "Email": case "Email":
if (provider.type === "Azure ACS") { if (provider.type === "Azure ACS" || provider.type === "SendGrid") {
return Setting.getLabel(i18next.t("provider:Secret key"), i18next.t("provider:Secret key - Tooltip")); return Setting.getLabel(i18next.t("provider:Secret key"), i18next.t("provider:Secret key - Tooltip"));
} else { } else {
return Setting.getLabel(i18next.t("general:Password"), i18next.t("general:Password - Tooltip")); return Setting.getLabel(i18next.t("general:Password"), i18next.t("general:Password - Tooltip"));
@@ -729,7 +729,7 @@ class ProviderEditPage extends React.Component {
<React.Fragment> <React.Fragment>
{ {
(this.state.provider.category === "Storage" && this.state.provider.type === "Google Cloud Storage") || (this.state.provider.category === "Storage" && this.state.provider.type === "Google Cloud Storage") ||
(this.state.provider.category === "Email" && this.state.provider.type === "Azure ACS") || (this.state.provider.category === "Email" && (this.state.provider.type === "Azure ACS" || this.state.provider.type === "SendGrid")) ||
(this.state.provider.category === "Notification" && (this.state.provider.type === "Line" || this.state.provider.type === "Telegram" || this.state.provider.type === "Bark" || this.state.provider.type === "Discord" || this.state.provider.type === "Slack" || this.state.provider.type === "Pushbullet" || this.state.provider.type === "Pushover" || this.state.provider.type === "Lark" || this.state.provider.type === "Microsoft Teams")) ? null : ( (this.state.provider.category === "Notification" && (this.state.provider.type === "Line" || this.state.provider.type === "Telegram" || this.state.provider.type === "Bark" || this.state.provider.type === "Discord" || this.state.provider.type === "Slack" || this.state.provider.type === "Pushbullet" || this.state.provider.type === "Pushover" || this.state.provider.type === "Lark" || this.state.provider.type === "Microsoft Teams")) ? null : (
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
@@ -770,7 +770,7 @@ class ProviderEditPage extends React.Component {
</Col> </Col>
</Row> </Row>
{ {
(this.state.provider.type === "WeChat Pay") || (this.state.provider.category === "Email" && this.state.provider.type === "Azure ACS") ? null : ( (this.state.provider.type === "WeChat Pay") || (this.state.provider.category === "Email" && (this.state.provider.type === "Azure ACS" || this.state.provider.type === "SendGrid")) ? null : (
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{this.getClientSecret2Label(this.state.provider)} : {this.getClientSecret2Label(this.state.provider)} :
@@ -985,17 +985,19 @@ class ProviderEditPage extends React.Component {
</React.Fragment> </React.Fragment>
) : this.state.provider.category === "Email" ? ( ) : this.state.provider.category === "Email" ? (
<React.Fragment> <React.Fragment>
<Row style={{marginTop: "20px"}} > {["SendGrid"].includes(this.state.provider.type) ? null : (
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Row style={{marginTop: "20px"}} >
{Setting.getLabel(i18next.t("provider:Host"), i18next.t("provider:Host - Tooltip"))} : <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
</Col> {Setting.getLabel(i18next.t("provider:Host"), i18next.t("provider:Host - Tooltip"))} :
<Col span={22} > </Col>
<Input prefix={<LinkOutlined />} value={this.state.provider.host} onChange={e => { <Col span={22} >
this.updateProviderField("host", e.target.value); <Input prefix={<LinkOutlined />} value={this.state.provider.host} onChange={e => {
}} /> this.updateProviderField("host", e.target.value);
</Col> }} />
</Row> </Col>
{["Azure ACS"].includes(this.state.provider.type) ? null : ( </Row>
)}
{["Azure ACS", "SendGrid"].includes(this.state.provider.type) ? null : (
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:Port"), i18next.t("provider:Port - Tooltip"))} : {Setting.getLabel(i18next.t("provider:Port"), i18next.t("provider:Port - Tooltip"))} :
@@ -1007,7 +1009,7 @@ class ProviderEditPage extends React.Component {
</Col> </Col>
</Row> </Row>
)} )}
{["Azure ACS"].includes(this.state.provider.type) ? null : ( {["Azure ACS", "SendGrid"].includes(this.state.provider.type) ? null : (
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:Disable SSL"), i18next.t("provider:Disable SSL - Tooltip"))} : {Setting.getLabel(i18next.t("provider:Disable SSL"), i18next.t("provider:Disable SSL - Tooltip"))} :
@@ -1073,7 +1075,7 @@ class ProviderEditPage extends React.Component {
this.updateProviderField("receiver", e.target.value); this.updateProviderField("receiver", e.target.value);
}} /> }} />
</Col> </Col>
{["Azure ACS"].includes(this.state.provider.type) ? null : ( {["Azure ACS", "SendGrid"].includes(this.state.provider.type) ? null : (
<Button style={{marginLeft: "10px", marginBottom: "5px"}} onClick={() => ProviderEditTestEmail.connectSmtpServer(this.state.provider)} > <Button style={{marginLeft: "10px", marginBottom: "5px"}} onClick={() => ProviderEditTestEmail.connectSmtpServer(this.state.provider)} >
{i18next.t("provider:Test SMTP Connection")} {i18next.t("provider:Test SMTP Connection")}
</Button> </Button>

View File

@@ -181,6 +181,10 @@ export const OtherProviderInfo = {
logo: `${StaticBaseUrl}/img/social_azure.png`, logo: `${StaticBaseUrl}/img/social_azure.png`,
url: "https://learn.microsoft.com/zh-cn/azure/communication-services", url: "https://learn.microsoft.com/zh-cn/azure/communication-services",
}, },
"SendGrid": {
logo: `${StaticBaseUrl}/img/email_sendgrid.png`,
url: "https://sendgrid.com/",
},
"Custom HTTP Email": { "Custom HTTP Email": {
logo: `${StaticBaseUrl}/img/social_default.png`, logo: `${StaticBaseUrl}/img/social_default.png`,
url: "https://casdoor.org/docs/provider/email/overview", url: "https://casdoor.org/docs/provider/email/overview",
@@ -1015,6 +1019,7 @@ export function getProviderTypeOptions(category) {
{id: "SUBMAIL", name: "SUBMAIL"}, {id: "SUBMAIL", name: "SUBMAIL"},
{id: "Mailtrap", name: "Mailtrap"}, {id: "Mailtrap", name: "Mailtrap"},
{id: "Azure ACS", name: "Azure ACS"}, {id: "Azure ACS", name: "Azure ACS"},
{id: "SendGrid", name: "SendGrid"},
{id: "Custom HTTP Email", name: "Custom HTTP Email"}, {id: "Custom HTTP Email", name: "Custom HTTP Email"},
] ]
); );

View File

@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
import React from "react"; import React from "react";
import {Button, Card, Col, Form, Input, InputNumber, List, Result, Row, Select, Space, Spin, Switch, Tag} from "antd"; import {Button, Card, Col, Form, Input, InputNumber, List, Result, Row, Select, Space, Spin, Switch, Tag, Tooltip} from "antd";
import {withRouter} from "react-router-dom"; import {withRouter} from "react-router-dom";
import {TotpMfaType} from "./auth/MfaSetupPage"; import {TotpMfaType} from "./auth/MfaSetupPage";
import * as GroupBackend from "./backend/GroupBackend"; import * as GroupBackend from "./backend/GroupBackend";
@@ -407,7 +407,17 @@ class UserEditPage extends React.Component {
{Setting.getLabel(i18next.t("general:Password"), i18next.t("general:Password - Tooltip"))} : {Setting.getLabel(i18next.t("general:Password"), i18next.t("general:Password - Tooltip"))} :
</Col> </Col>
<Col span={22} > <Col span={22} >
<PasswordModal user={this.state.user} userName={this.state.userName} organization={this.getUserOrganization()} account={this.props.account} disabled={disabled} /> {
(this.state.user.name === this.state.userName) ? (
<PasswordModal user={this.state.user} userName={this.state.userName} organization={this.getUserOrganization()} account={this.props.account} disabled={disabled} />
) : (
<Tooltip placement={"topLeft"} title={i18next.t("user:You have changed the username, please save your change first before modifying the password")}>
<span>
<PasswordModal user={this.state.user} userName={this.state.userName} organization={this.getUserOrganization()} account={this.props.account} disabled={true} />
</span>
</Tooltip>
)
}
</Col> </Col>
</Row> </Row>
); );

View File

@@ -19,7 +19,7 @@ import * as VerificationBackend from "./backend/VerificationBackend";
import i18next from "i18next"; import i18next from "i18next";
import {Link} from "react-router-dom"; import {Link} from "react-router-dom";
import React from "react"; import React from "react";
import {Table} from "antd"; import {Switch, Table} from "antd";
class VerificationListPage extends BaseListPage { class VerificationListPage extends BaseListPage {
newVerification() { newVerification() {
@@ -35,26 +35,48 @@ class VerificationListPage extends BaseListPage {
renderTable(verifications) { renderTable(verifications) {
const columns = [ const columns = [
{ {
title: i18next.t("general:Name"), title: i18next.t("general:Organization"),
dataIndex: "name", dataIndex: "owner",
key: "name", key: "owner",
width: "150px", width: "120px",
fixed: "left",
sorter: true, sorter: true,
...this.getColumnSearchProps("name"), ...this.getColumnSearchProps("owner"),
render: (text, record, index) => { render: (text, record, index) => {
if (text === "admin") {
return `(${i18next.t("general:empty")})`;
}
return ( return (
<Link to={`/syncers/${text}`}> <Link to={`/organizations/${text}`}>
{text} {text}
</Link> </Link>
); );
}, },
}, },
{
title: i18next.t("general:Name"),
dataIndex: "name",
key: "name",
width: "260px",
fixed: "left",
sorter: true,
...this.getColumnSearchProps("name"),
},
{
title: i18next.t("general:Created time"),
dataIndex: "createdTime",
key: "createdTime",
width: "160px",
sorter: true,
render: (text, record, index) => {
return Setting.getFormattedDate(text);
},
},
{ {
title: i18next.t("provider:Type"), title: i18next.t("provider:Type"),
dataIndex: "type", dataIndex: "type",
key: "type", key: "type",
width: "120px", width: "90px",
sorter: true, sorter: true,
...this.getColumnSearchProps("type"), ...this.getColumnSearchProps("type"),
}, },
@@ -67,7 +89,7 @@ class VerificationListPage extends BaseListPage {
...this.getColumnSearchProps("user"), ...this.getColumnSearchProps("user"),
render: (text, record, index) => { render: (text, record, index) => {
return ( return (
<Link to={`/users/${record.owner}/${text}`}> <Link to={`/users/${text}`}>
{text} {text}
</Link> </Link>
); );
@@ -88,6 +110,26 @@ class VerificationListPage extends BaseListPage {
); );
}, },
}, },
{
title: i18next.t("general:Client IP"),
dataIndex: "remoteAddr",
key: "remoteAddr",
width: "100px",
sorter: true,
...this.getColumnSearchProps("remoteAddr"),
render: (text, record, index) => {
let clientIp = text;
if (clientIp.endsWith(": ")) {
clientIp = clientIp.slice(0, -2);
}
return (
<a target="_blank" rel="noreferrer" href={`https://db-ip.com/${clientIp}`}>
{clientIp}
</a>
);
},
},
{ {
title: i18next.t("verification:Receiver"), title: i18next.t("verification:Receiver"),
dataIndex: "receiver", dataIndex: "receiver",
@@ -100,28 +142,20 @@ class VerificationListPage extends BaseListPage {
title: i18next.t("login:Verification code"), title: i18next.t("login:Verification code"),
dataIndex: "code", dataIndex: "code",
key: "code", key: "code",
width: "120px", width: "150px",
sorter: true, sorter: true,
...this.getColumnSearchProps("code"), ...this.getColumnSearchProps("code"),
}, },
{ {
title: i18next.t("general:Timestamp"), title: i18next.t("verification:Is used"),
dataIndex: "time", dataIndex: "isUsed",
key: "time", key: "isUsed",
width: "160px", width: "90px",
sorter: true, sorter: true,
render: (text, record, index) => { render: (text, record, index) => {
return Setting.getFormattedDate(text * 1000); return (
}, <Switch disabled checkedChildren="ON" unCheckedChildren="OFF" checked={text} />
}, );
{
title: i18next.t("general:Created time"),
dataIndex: "createdTime",
key: "createdTime",
width: "160px",
sorter: true,
render: (text, record, index) => {
return Setting.getFormattedDate(text);
}, },
}, },
]; ];
@@ -156,7 +190,7 @@ class VerificationListPage extends BaseListPage {
value = params.type; value = params.type;
} }
this.setState({loading: true}); this.setState({loading: true});
VerificationBackend.getVerifications("admin", Setting.isDefaultOrganizationSelected(this.props.account) ? "" : Setting.getRequestOrganization(this.props.account), params.pagination.current, params.pagination.pageSize, field, value, sortField, sortOrder) VerificationBackend.getVerifications("", Setting.isDefaultOrganizationSelected(this.props.account) ? "" : Setting.getRequestOrganization(this.props.account), params.pagination.current, params.pagination.pageSize, field, value, sortField, sortOrder)
.then((res) => { .then((res) => {
this.setState({ this.setState({
loading: false, loading: false,

View File

@@ -21,7 +21,7 @@ import * as Setting from "../Setting";
import i18next from "i18next"; import i18next from "i18next";
import {SendCodeInput} from "../common/SendCodeInput"; import {SendCodeInput} from "../common/SendCodeInput";
import * as UserBackend from "../backend/UserBackend"; import * as UserBackend from "../backend/UserBackend";
import {CheckCircleOutlined, KeyOutlined, LockOutlined, SolutionOutlined, UserOutlined} from "@ant-design/icons"; import {ArrowLeftOutlined, CheckCircleOutlined, KeyOutlined, LockOutlined, SolutionOutlined, UserOutlined} from "@ant-design/icons";
import CustomGithubCorner from "../common/CustomGithubCorner"; import CustomGithubCorner from "../common/CustomGithubCorner";
import {withRouter} from "react-router-dom"; import {withRouter} from "react-router-dom";
import * as PasswordChecker from "../common/PasswordChecker"; import * as PasswordChecker from "../common/PasswordChecker";
@@ -443,6 +443,18 @@ class ForgetPage extends React.Component {
); );
} }
stepBack() {
if (this.state.current > 0) {
this.setState({
current: this.state.current - 1,
});
} else if (this.props.history.length > 1) {
this.props.history.goBack();
} else {
Setting.redirectToLoginPage(this.getApplicationObj(), this.props.history);
}
}
render() { render() {
const application = this.getApplicationObj(); const application = this.getApplicationObj();
if (application === undefined) { if (application === undefined) {
@@ -456,6 +468,9 @@ class ForgetPage extends React.Component {
<React.Fragment> <React.Fragment>
<CustomGithubCorner /> <CustomGithubCorner />
<div className="forget-content" style={{padding: Setting.isMobile() ? "0" : null, boxShadow: Setting.isMobile() ? "none" : null}}> <div className="forget-content" style={{padding: Setting.isMobile() ? "0" : null, boxShadow: Setting.isMobile() ? "none" : null}}>
<Button type="text" style={{position: "relative", left: Setting.isMobile() ? "10px" : "-90px", top: 0}} size={"large"} onClick={() => {this.stepBack();}}>
<ArrowLeftOutlined style={{fontSize: "24px"}} />
</Button>
<Row> <Row>
<Col span={24} style={{justifyContent: "center"}}> <Col span={24} style={{justifyContent: "center"}}>
<Row> <Row>

View File

@@ -52,7 +52,7 @@ export function GoogleOneTapLoginVirtualButton(prop) {
redirectUri = `${redirectUri}?state=${state}&code=${encodeURIComponent(code)}`; redirectUri = `${redirectUri}?state=${state}&code=${encodeURIComponent(code)}`;
Setting.goToLink(redirectUri); Setting.goToLink(redirectUri);
}, },
disableCancelOnUnmount: true, disableCancelOnUnmount: false,
}); });
} }

View File

@@ -532,7 +532,7 @@ class LoginPage extends React.Component {
if (signinItem.name === "Logo") { if (signinItem.name === "Logo") {
return ( return (
<div className="login-logo-box"> <div className="login-logo-box">
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
{ {
Setting.renderHelmet(application) Setting.renderHelmet(application)
} }
@@ -544,7 +544,7 @@ class LoginPage extends React.Component {
} else if (signinItem.name === "Back button") { } else if (signinItem.name === "Back button") {
return ( return (
<div> <div>
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
{ {
this.renderBackButton() this.renderBackButton()
} }
@@ -562,24 +562,25 @@ class LoginPage extends React.Component {
return ( return (
<div className="login-languages"> <div className="login-languages">
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
<LanguageSelect languages={application.organizationObj.languages} /> <LanguageSelect languages={application.organizationObj.languages} />
</div> </div>
); );
} else if (signinItem.name === "Signin methods") { } else if (signinItem.name === "Signin methods") {
return ( return (
<div> <div>
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
{this.renderMethodChoiceBox()} {this.renderMethodChoiceBox()}
</div> </div>
) )
; ;
} else if (signinItem.name === "Username") { } else if (signinItem.name === "Username") {
return ( return (
<div className="login-username"> <div>
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
<Form.Item <Form.Item
name="username" name="username"
className="login-username"
rules={[ rules={[
{ {
required: true, required: true,
@@ -637,6 +638,7 @@ class LoginPage extends React.Component {
<Input <Input
id="input" id="input"
className="login-username-input"
prefix={<UserOutlined className="site-form-item-icon" />} prefix={<UserOutlined className="site-form-item-icon" />}
placeholder={this.getPlaceholder()} placeholder={this.getPlaceholder()}
onChange={e => { onChange={e => {
@@ -651,14 +653,14 @@ class LoginPage extends React.Component {
} else if (signinItem.name === "Password") { } else if (signinItem.name === "Password") {
return ( return (
<div> <div>
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
{this.renderPasswordOrCodeInput()} {this.renderPasswordOrCodeInput()}
</div> </div>
); );
} else if (signinItem.name === "Forgot password?") { } else if (signinItem.name === "Forgot password?") {
return ( return (
<div> <div>
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
<div className="login-forget-password"> <div className="login-forget-password">
<Form.Item name="autoSignin" valuePropName="checked" noStyle> <Form.Item name="autoSignin" valuePropName="checked" noStyle>
<Checkbox style={{float: "left"}}> <Checkbox style={{float: "left"}}>
@@ -676,7 +678,7 @@ class LoginPage extends React.Component {
} else if (signinItem.name === "Login button") { } else if (signinItem.name === "Login button") {
return ( return (
<Form.Item className="login-button-box"> <Form.Item className="login-button-box">
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
<Button <Button
type="primary" type="primary"
htmlType="submit" htmlType="submit"
@@ -720,7 +722,7 @@ class LoginPage extends React.Component {
return ( return (
<div> <div>
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
<Form.Item> <Form.Item>
{ {
application.providers.filter(providerItem => this.isProviderVisible(providerItem)).map(providerItem => { application.providers.filter(providerItem => this.isProviderVisible(providerItem)).map(providerItem => {
@@ -740,7 +742,7 @@ class LoginPage extends React.Component {
} else if (signinItem.name === "Signup link") { } else if (signinItem.name === "Signup link") {
return ( return (
<div style={{width: "100%"}} className="login-signup-link"> <div style={{width: "100%"}} className="login-signup-link">
<div dangerouslySetInnerHTML={{__html: signinItem.label}} /> <div dangerouslySetInnerHTML={{__html: ("<style>" + signinItem.label?.replaceAll("<style>", "").replaceAll("</style>", "") + "</style>")}} />
{this.renderFooter(application)} {this.renderFooter(application)}
</div> </div>
); );
@@ -1025,12 +1027,14 @@ class LoginPage extends React.Component {
if (this.state.loginMethod === "password" || this.state.loginMethod === "ldap") { if (this.state.loginMethod === "password" || this.state.loginMethod === "ldap") {
return ( return (
<Col span={24}> <Col span={24}>
<div className="login-password"> <div>
<Form.Item <Form.Item
name="password" name="password"
className="login-password"
rules={[{required: true, message: i18next.t("login:Please input your password!")}]} rules={[{required: true, message: i18next.t("login:Please input your password!")}]}
> >
<Input.Password <Input.Password
className="login-password-input"
prefix={<LockOutlined className="site-form-item-icon" />} prefix={<LockOutlined className="site-form-item-icon" />}
type="password" type="password"
placeholder={i18next.t("general:Password")} placeholder={i18next.t("general:Password")}

View File

@@ -248,6 +248,7 @@ class SignupPage extends React.Component {
return ( return (
<Form.Item <Form.Item
name="username" name="username"
className="signup-username"
label={signupItem.label ? signupItem.label : i18next.t("signup:Username")} label={signupItem.label ? signupItem.label : i18next.t("signup:Username")}
rules={[ rules={[
{ {
@@ -257,7 +258,8 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} disabled={this.state.invitation !== undefined && this.state.invitation.username !== ""} /> <Input className="signup-username-input" placeholder={signupItem.placeholder}
disabled={this.state.invitation !== undefined && this.state.invitation.username !== ""} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "Display name") { } else if (signupItem.name === "Display name") {
@@ -266,6 +268,7 @@ class SignupPage extends React.Component {
<React.Fragment> <React.Fragment>
<Form.Item <Form.Item
name="firstName" name="firstName"
className="signup-first-name"
label={signupItem.label ? signupItem.label : i18next.t("general:First name")} label={signupItem.label ? signupItem.label : i18next.t("general:First name")}
rules={[ rules={[
{ {
@@ -275,10 +278,11 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} /> <Input className="signup-first-name-input" placeholder={signupItem.placeholder} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="lastName" name="lastName"
className="signup-last-name"
label={signupItem.label ? signupItem.label : i18next.t("general:Last name")} label={signupItem.label ? signupItem.label : i18next.t("general:Last name")}
rules={[ rules={[
{ {
@@ -288,7 +292,7 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} /> <Input className="signup-last-name-input" placeholder={signupItem.placeholder} />
</Form.Item> </Form.Item>
</React.Fragment> </React.Fragment>
); );
@@ -297,6 +301,7 @@ class SignupPage extends React.Component {
return ( return (
<Form.Item <Form.Item
name="name" name="name"
className="signup-name"
label={(signupItem.label ? signupItem.label : (signupItem.rule === "Real name" || signupItem.rule === "First, last") ? i18next.t("general:Real name") : i18next.t("general:Display name"))} label={(signupItem.label ? signupItem.label : (signupItem.rule === "Real name" || signupItem.rule === "First, last") ? i18next.t("general:Real name") : i18next.t("general:Display name"))}
rules={[ rules={[
{ {
@@ -306,13 +311,14 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} /> <Input className="signup-name-input" placeholder={signupItem.placeholder} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "Affiliation") { } else if (signupItem.name === "Affiliation") {
return ( return (
<Form.Item <Form.Item
name="affiliation" name="affiliation"
className="signup-affiliation"
label={signupItem.label ? signupItem.label : i18next.t("user:Affiliation")} label={signupItem.label ? signupItem.label : i18next.t("user:Affiliation")}
rules={[ rules={[
{ {
@@ -322,13 +328,14 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} /> <Input className="signup-affiliation-input" placeholder={signupItem.placeholder} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "ID card") { } else if (signupItem.name === "ID card") {
return ( return (
<Form.Item <Form.Item
name="idCard" name="idCard"
className="signup-idcard"
label={signupItem.label ? signupItem.label : i18next.t("user:ID card")} label={signupItem.label ? signupItem.label : i18next.t("user:ID card")}
rules={[ rules={[
{ {
@@ -343,13 +350,14 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} /> <Input className="signup-idcard-input" placeholder={signupItem.placeholder} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "Country/Region") { } else if (signupItem.name === "Country/Region") {
return ( return (
<Form.Item <Form.Item
name="country_region" name="country_region"
className="signup-country-region"
label={signupItem.label ? signupItem.label : i18next.t("user:Country/Region")} label={signupItem.label ? signupItem.label : i18next.t("user:Country/Region")}
rules={[ rules={[
{ {
@@ -358,7 +366,7 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<RegionSelect onChange={(value) => {this.setState({region: value});}} /> <RegionSelect className="signup-region-select" onChange={(value) => {this.setState({region: value});}} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "Email" || signupItem.name === "Phone" || signupItem.name === "Email or Phone" || signupItem.name === "Phone or Email") { } else if (signupItem.name === "Email" || signupItem.name === "Phone" || signupItem.name === "Email or Phone" || signupItem.name === "Phone or Email") {
@@ -367,6 +375,7 @@ class SignupPage extends React.Component {
<React.Fragment> <React.Fragment>
<Form.Item <Form.Item
name="email" name="email"
className="signup-email"
label={signupItem.label ? signupItem.label : i18next.t("general:Email")} label={signupItem.label ? signupItem.label : i18next.t("general:Email")}
rules={[ rules={[
{ {
@@ -386,12 +395,13 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} disabled={this.state.invitation !== undefined && this.state.invitation.email !== ""} onChange={e => this.setState({email: e.target.value})} /> <Input className="signup-email-input" placeholder={signupItem.placeholder} disabled={this.state.invitation !== undefined && this.state.invitation.email !== ""} onChange={e => this.setState({email: e.target.value})} />
</Form.Item> </Form.Item>
{ {
signupItem.rule !== "No verification" && signupItem.rule !== "No verification" &&
<Form.Item <Form.Item
name="emailCode" name="emailCode"
className="signup-email-code"
label={signupItem.label ? signupItem.label : i18next.t("code:Email code")} label={signupItem.label ? signupItem.label : i18next.t("code:Email code")}
rules={[{ rules={[{
required: required, required: required,
@@ -399,6 +409,7 @@ class SignupPage extends React.Component {
}]} }]}
> >
<SendCodeInput <SendCodeInput
className="signup-email-code-input"
disabled={!this.state.validEmail} disabled={!this.state.validEmail}
method={"signup"} method={"signup"}
onButtonClickArgs={[this.state.email, "email", Setting.getApplicationName(application)]} onButtonClickArgs={[this.state.email, "email", Setting.getApplicationName(application)]}
@@ -413,7 +424,7 @@ class SignupPage extends React.Component {
const renderPhoneItem = () => { const renderPhoneItem = () => {
return ( return (
<React.Fragment> <React.Fragment>
<Form.Item label={signupItem.label ? signupItem.label : i18next.t("general:Phone")} required={required}> <Form.Item className="signup-phone" label={signupItem.label ? signupItem.label : i18next.t("general:Phone")} required={required}>
<Input.Group compact> <Input.Group compact>
<Form.Item <Form.Item
name="countryCode" name="countryCode"
@@ -457,6 +468,7 @@ class SignupPage extends React.Component {
]} ]}
> >
<Input <Input
className="signup-phone-input"
placeholder={signupItem.placeholder} placeholder={signupItem.placeholder}
style={{width: "65%"}} style={{width: "65%"}}
disabled={this.state.invitation !== undefined && this.state.invitation.phone !== ""} disabled={this.state.invitation !== undefined && this.state.invitation.phone !== ""}
@@ -469,6 +481,7 @@ class SignupPage extends React.Component {
signupItem.rule !== "No verification" && signupItem.rule !== "No verification" &&
<Form.Item <Form.Item
name="phoneCode" name="phoneCode"
className="phone-code"
label={signupItem.label ? signupItem.label : i18next.t("code:Phone code")} label={signupItem.label ? signupItem.label : i18next.t("code:Phone code")}
rules={[ rules={[
{ {
@@ -478,6 +491,7 @@ class SignupPage extends React.Component {
]} ]}
> >
<SendCodeInput <SendCodeInput
className="signup-phone-code-input"
disabled={!this.state.validPhone} disabled={!this.state.validPhone}
method={"signup"} method={"signup"}
onButtonClickArgs={[this.state.phone, "phone", Setting.getApplicationName(application)]} onButtonClickArgs={[this.state.phone, "phone", Setting.getApplicationName(application)]}
@@ -535,6 +549,7 @@ class SignupPage extends React.Component {
return ( return (
<Form.Item <Form.Item
name="password" name="password"
className="signup-password"
label={signupItem.label ? signupItem.label : i18next.t("general:Password")} label={signupItem.label ? signupItem.label : i18next.t("general:Password")}
rules={[ rules={[
{ {
@@ -552,13 +567,14 @@ class SignupPage extends React.Component {
]} ]}
hasFeedback hasFeedback
> >
<Input.Password placeholder={signupItem.placeholder} /> <Input.Password className="signup-password-input" placeholder={signupItem.placeholder} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "Confirm password") { } else if (signupItem.name === "Confirm password") {
return ( return (
<Form.Item <Form.Item
name="confirm" name="confirm"
className="signup-confirm"
label={signupItem.label ? signupItem.label : i18next.t("signup:Confirm")} label={signupItem.label ? signupItem.label : i18next.t("signup:Confirm")}
dependencies={["password"]} dependencies={["password"]}
hasFeedback hasFeedback
@@ -585,6 +601,7 @@ class SignupPage extends React.Component {
return ( return (
<Form.Item <Form.Item
name="invitationCode" name="invitationCode"
className="signup-invitation-code"
label={signupItem.label ? signupItem.label : i18next.t("application:Invitation code")} label={signupItem.label ? signupItem.label : i18next.t("application:Invitation code")}
rules={[ rules={[
{ {
@@ -593,7 +610,7 @@ class SignupPage extends React.Component {
}, },
]} ]}
> >
<Input placeholder={signupItem.placeholder} disabled={this.state.invitation !== undefined && this.state.invitation !== ""} /> <Input className="signup-invitation-code-input" placeholder={signupItem.placeholder} disabled={this.state.invitation !== undefined && this.state.invitation !== ""} />
</Form.Item> </Form.Item>
); );
} else if (signupItem.name === "Agreement") { } else if (signupItem.name === "Agreement") {
@@ -602,6 +619,37 @@ class SignupPage extends React.Component {
return ( return (
<div dangerouslySetInnerHTML={{__html: signupItem.label}} /> <div dangerouslySetInnerHTML={{__html: signupItem.label}} />
); );
} else if (signupItem.name === "Signup button") {
return (
<Form.Item {...tailFormItemLayout}>
<Button type="primary" htmlType="submit" className="signup-button">
{i18next.t("account:Sign Up")}
</Button>
&nbsp;&nbsp;{i18next.t("signup:Have account?")}&nbsp;
<a className="signup-link" onClick={() => {
const linkInStorage = sessionStorage.getItem("signinUrl");
if (linkInStorage !== null && linkInStorage !== "") {
Setting.goToLinkSoft(this, linkInStorage);
} else {
Setting.redirectToLoginPage(application, this.props.history);
}
}}>
{i18next.t("signup:sign in now")}
</a>
</Form.Item>
);
} else if (signupItem.name === "Providers") {
const showForm = Setting.isPasswordEnabled(application) || Setting.isCodeSigninEnabled(application) || Setting.isWebAuthnEnabled(application) || Setting.isLdapEnabled(application);
if (signupItem.rule === "None" || signupItem.rule === "") {
signupItem.rule = showForm ? "small" : "big";
}
return (
application.providers.filter(providerItem => this.isProviderVisible(providerItem)).map(providerItem => {
return ProviderButton.renderProviderLogo(providerItem.provider, application, null, null, signupItem.rule, this.props.location);
})
);
} }
} }
@@ -676,27 +724,13 @@ class SignupPage extends React.Component {
> >
</Form.Item> </Form.Item>
{ {
application.signupItems?.map(signupItem => this.renderFormItem(application, signupItem)) application.signupItems?.map((signupItem, idx) => {
} return (
<Form.Item {...tailFormItemLayout}> <div key={idx}>
<Button type="primary" htmlType="submit"> <div dangerouslySetInnerHTML={{__html: ("<style>" + signupItem.customCss + "</style>")}} />
{i18next.t("account:Sign Up")} {this.renderFormItem(application, signupItem)}
</Button> </div>
&nbsp;&nbsp;{i18next.t("signup:Have account?")}&nbsp; );
<a onClick={() => {
const linkInStorage = sessionStorage.getItem("signinUrl");
if (linkInStorage !== null && linkInStorage !== "") {
Setting.goToLinkSoft(this, linkInStorage);
} else {
Setting.redirectToLoginPage(application, this.props.history);
}
}}>
{i18next.t("signup:sign in now")}
</a>
</Form.Item>
{
application.providers.filter(providerItem => this.isProviderVisible(providerItem)).map(providerItem => {
return ProviderButton.renderProviderLogo(providerItem.provider, application, 30, 5, "small", this.props.location);
}) })
} }
</Form> </Form>
@@ -709,6 +743,20 @@ class SignupPage extends React.Component {
return null; return null;
} }
let existSignupButton = false;
application.signupItems?.map(item => {
item.name === "Signup button" ? existSignupButton = true : null;
});
if (!existSignupButton) {
application.signupItems?.push({
customCss: "",
label: "",
name: "Signup button",
placeholder: "",
visible: true,
});
}
if (application.signupHtml !== "") { if (application.signupHtml !== "") {
return ( return (
<div dangerouslySetInnerHTML={{__html: application.signupHtml}} /> <div dangerouslySetInnerHTML={{__html: application.signupHtml}} />

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Bitte geben Sie Ihre Anwendung ein!", "Please input your application!": "Bitte geben Sie Ihre Anwendung ein!",
"Please input your organization!": "Bitte geben Sie Ihre Organisation ein!", "Please input your organization!": "Bitte geben Sie Ihre Organisation ein!",
"Please select a HTML file": "Bitte wählen Sie eine HTML-Datei aus", "Please select a HTML file": "Bitte wählen Sie eine HTML-Datei aus",
@@ -229,6 +230,7 @@
"Email": "E-Mail", "Email": "E-Mail",
"Email - Tooltip": "Gültige E-Mail-Adresse", "Email - Tooltip": "Gültige E-Mail-Adresse",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Telefon", "Phone": "Telefon",
"Phone - Tooltip": "Telefonnummer", "Phone - Tooltip": "Telefonnummer",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Pläne", "Plans": "Pläne",
@@ -391,6 +394,7 @@
"User type": "Benutzertyp", "User type": "Benutzertyp",
"User type - Tooltip": "Tags, denen der Benutzer angehört, standardmäßig auf \"normaler Benutzer\" festgelegt", "User type - Tooltip": "Tags, denen der Benutzer angehört, standardmäßig auf \"normaler Benutzer\" festgelegt",
"Users": "Benutzer", "Users": "Benutzer",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Benutzer unter allen Organisationen", "Users under all organizations": "Benutzer unter allen Organisationen",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Laden", "Loading": "Laden",
"Logging out...": "Ausloggen...", "Logging out...": "Ausloggen...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Kein Konto?", "No account?": "Kein Konto?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Melden Sie sich mit WebAuthn an", "Sign in with WebAuthn": "Melden Sie sich mit WebAuthn an",
"Sign in with {type}": "Melden Sie sich mit {type} an", "Sign in with {type}": "Melden Sie sich mit {type} an",
"Signin button": "Signin button",
"Signing in...": "Anmelden...", "Signing in...": "Anmelden...",
"Successfully logged in with WebAuthn credentials": "Erfolgreich mit WebAuthn-Anmeldeinformationen angemeldet", "Successfully logged in with WebAuthn credentials": "Erfolgreich mit WebAuthn-Anmeldeinformationen angemeldet",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Bitte wählen Sie Ihren Ländercode aus!", "Please select your country code!": "Bitte wählen Sie Ihren Ländercode aus!",
"Please select your country/region!": "Bitte wählen Sie Ihr Land/Ihre Region aus!", "Please select your country/region!": "Bitte wählen Sie Ihr Land/Ihre Region aus!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Nutzungsbedingungen", "Terms of Use": "Nutzungsbedingungen",
"Terms of Use - Tooltip": "Nutzungsbedingungen, die Benutzer während der Registrierung lesen und akzeptieren müssen", "Terms of Use - Tooltip": "Nutzungsbedingungen, die Benutzer während der Registrierung lesen und akzeptieren müssen",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Werte", "Values": "Werte",
"Verification code sent": "Bestätigungscode gesendet", "Verification code sent": "Bestätigungscode gesendet",
"WebAuthn credentials": "WebAuthn-Anmeldeinformationen", "WebAuthn credentials": "WebAuthn-Anmeldeinformationen",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "Eingabe des Passworts" "input password": "Eingabe des Passworts"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "¡Por favor, ingrese su solicitud!", "Please input your application!": "¡Por favor, ingrese su solicitud!",
"Please input your organization!": "¡Por favor, ingrese su organización!", "Please input your organization!": "¡Por favor, ingrese su organización!",
"Please select a HTML file": "Por favor, seleccione un archivo HTML", "Please select a HTML file": "Por favor, seleccione un archivo HTML",
@@ -229,6 +230,7 @@
"Email": "Correo electrónico", "Email": "Correo electrónico",
"Email - Tooltip": "Dirección de correo electrónico válida", "Email - Tooltip": "Dirección de correo electrónico válida",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Teléfono", "Phone": "Teléfono",
"Phone - Tooltip": "Número de teléfono", "Phone - Tooltip": "Número de teléfono",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Planes", "Plans": "Planes",
@@ -391,6 +394,7 @@
"User type": "Tipo de usuario", "User type": "Tipo de usuario",
"User type - Tooltip": "Etiquetas a las que el usuario pertenece, con una configuración predeterminada en \"usuario-normal\"", "User type - Tooltip": "Etiquetas a las que el usuario pertenece, con una configuración predeterminada en \"usuario-normal\"",
"Users": "Usuarios", "Users": "Usuarios",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Usuarios bajo todas las organizaciones", "Users under all organizations": "Usuarios bajo todas las organizaciones",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Cargando", "Loading": "Cargando",
"Logging out...": "Cerrando sesión...", "Logging out...": "Cerrando sesión...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "¿No tienes cuenta?", "No account?": "¿No tienes cuenta?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Iniciar sesión con WebAuthn", "Sign in with WebAuthn": "Iniciar sesión con WebAuthn",
"Sign in with {type}": "Inicia sesión con {tipo}", "Sign in with {type}": "Inicia sesión con {tipo}",
"Signin button": "Signin button",
"Signing in...": "Iniciando sesión...", "Signing in...": "Iniciando sesión...",
"Successfully logged in with WebAuthn credentials": "Inició sesión correctamente con las credenciales de WebAuthn", "Successfully logged in with WebAuthn credentials": "Inició sesión correctamente con las credenciales de WebAuthn",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "¡Por favor seleccione su código de país!", "Please select your country code!": "¡Por favor seleccione su código de país!",
"Please select your country/region!": "¡Por favor seleccione su país/región!", "Please select your country/region!": "¡Por favor seleccione su país/región!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Términos de uso", "Terms of Use": "Términos de uso",
"Terms of Use - Tooltip": "Términos de uso que los usuarios necesitan leer y aceptar durante el registro", "Terms of Use - Tooltip": "Términos de uso que los usuarios necesitan leer y aceptar durante el registro",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Valores", "Values": "Valores",
"Verification code sent": "Código de verificación enviado", "Verification code sent": "Código de verificación enviado",
"WebAuthn credentials": "Credenciales de WebAuthn", "WebAuthn credentials": "Credenciales de WebAuthn",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "Ingresar contraseña" "input password": "Ingresar contraseña"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Inscription uniquement", "Only signup": "Inscription uniquement",
"Org choice mode": "Choix du mode de l'organisation", "Org choice mode": "Choix du mode de l'organisation",
"Org choice mode - Tooltip": "Choix du mode de l'organisation - Info-bulle", "Org choice mode - Tooltip": "Choix du mode de l'organisation - Info-bulle",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Veuillez saisir votre application !", "Please input your application!": "Veuillez saisir votre application !",
"Please input your organization!": "Veuillez saisir votre organisation !", "Please input your organization!": "Veuillez saisir votre organisation !",
"Please select a HTML file": "Veuillez sélectionner un fichier HTML", "Please select a HTML file": "Veuillez sélectionner un fichier HTML",
@@ -229,6 +230,7 @@
"Email": "E-mail", "Email": "E-mail",
"Email - Tooltip": "Adresse e-mail valide", "Email - Tooltip": "Adresse e-mail valide",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Activer", "Enable": "Activer",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Téléphone", "Phone": "Téléphone",
"Phone - Tooltip": "Numéro de téléphone", "Phone - Tooltip": "Numéro de téléphone",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Offre", "Plan": "Offre",
"Plan - Tooltip": "Offre - Infobulle", "Plan - Tooltip": "Offre - Infobulle",
"Plans": "Offres", "Plans": "Offres",
@@ -391,6 +394,7 @@
"User type": "Type de compte", "User type": "Type de compte",
"User type - Tooltip": "Étiquettes associées au compte, avec une valeur par défaut \"normal-user\"", "User type - Tooltip": "Étiquettes associées au compte, avec une valeur par défaut \"normal-user\"",
"Users": "Comptes", "Users": "Comptes",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Comptes sous toutes les organisations", "Users under all organizations": "Comptes sous toutes les organisations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Crochets web", "Webhooks": "Crochets web",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Chargement", "Loading": "Chargement",
"Logging out...": "Déconnexion...", "Logging out...": "Déconnexion...",
"Login button": "Login button",
"MetaMask plugin not detected": "Le plugin MetaMask n'a pas été détecté", "MetaMask plugin not detected": "Le plugin MetaMask n'a pas été détecté",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Pas de compte ?", "No account?": "Pas de compte ?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Connectez-vous avec WebAuthn", "Sign in with WebAuthn": "Connectez-vous avec WebAuthn",
"Sign in with {type}": "Connectez-vous avec {type}", "Sign in with {type}": "Connectez-vous avec {type}",
"Signin button": "Signin button",
"Signing in...": "Connexion en cours...", "Signing in...": "Connexion en cours...",
"Successfully logged in with WebAuthn credentials": "Connexion avec les identifiants WebAuthn réussie", "Successfully logged in with WebAuthn credentials": "Connexion avec les identifiants WebAuthn réussie",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Sélectionnez votre code de pays, s'il vous plaît !", "Please select your country code!": "Sélectionnez votre code de pays, s'il vous plaît !",
"Please select your country/region!": "Veuillez sélectionner votre pays/région !", "Please select your country/region!": "Veuillez sélectionner votre pays/région !",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Conditions d'utilisation", "Terms of Use": "Conditions d'utilisation",
"Terms of Use - Tooltip": "Conditions d'utilisation qui doivent être lus acceptés lors de l'enregistrement du compte", "Terms of Use - Tooltip": "Conditions d'utilisation qui doivent être lus acceptés lors de l'enregistrement du compte",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Valeurs", "Values": "Valeurs",
"Verification code sent": "Code de vérification envoyé", "Verification code sent": "Code de vérification envoyé",
"WebAuthn credentials": "Identifiants WebAuthn", "WebAuthn credentials": "Identifiants WebAuthn",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "saisir le mot de passe" "input password": "saisir le mot de passe"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Silakan masukkan aplikasi Anda!", "Please input your application!": "Silakan masukkan aplikasi Anda!",
"Please input your organization!": "Silakan masukkan organisasi Anda!", "Please input your organization!": "Silakan masukkan organisasi Anda!",
"Please select a HTML file": "Silahkan pilih file HTML", "Please select a HTML file": "Silahkan pilih file HTML",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Alamat email yang valid", "Email - Tooltip": "Alamat email yang valid",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Telepon", "Phone": "Telepon",
"Phone - Tooltip": "Nomor telepon", "Phone - Tooltip": "Nomor telepon",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Rencana", "Plans": "Rencana",
@@ -391,6 +394,7 @@
"User type": "Jenis pengguna", "User type": "Jenis pengguna",
"User type - Tooltip": "Tag yang dimiliki oleh pengguna, defaultnya adalah \"normal-user\"", "User type - Tooltip": "Tag yang dimiliki oleh pengguna, defaultnya adalah \"normal-user\"",
"Users": "Pengguna-pengguna", "Users": "Pengguna-pengguna",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Pengguna di bawah semua organisasi", "Users under all organizations": "Pengguna di bawah semua organisasi",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Memuat", "Loading": "Memuat",
"Logging out...": "Keluar...", "Logging out...": "Keluar...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Tidak memiliki akun?", "No account?": "Tidak memiliki akun?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Masuk dengan WebAuthn", "Sign in with WebAuthn": "Masuk dengan WebAuthn",
"Sign in with {type}": "Masuk dengan {type}", "Sign in with {type}": "Masuk dengan {type}",
"Signin button": "Signin button",
"Signing in...": "Masuk...", "Signing in...": "Masuk...",
"Successfully logged in with WebAuthn credentials": "Berhasil masuk dengan kredensial WebAuthn", "Successfully logged in with WebAuthn credentials": "Berhasil masuk dengan kredensial WebAuthn",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Tolong pilih kode negara Anda!", "Please select your country code!": "Tolong pilih kode negara Anda!",
"Please select your country/region!": "Silakan pilih negara/region Anda!", "Please select your country/region!": "Silakan pilih negara/region Anda!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Syarat Penggunaan", "Terms of Use": "Syarat Penggunaan",
"Terms of Use - Tooltip": "Syarat penggunaan yang harus dibaca dan disetujui oleh pengguna selama proses registrasi", "Terms of Use - Tooltip": "Syarat penggunaan yang harus dibaca dan disetujui oleh pengguna selama proses registrasi",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Nilai-nilai", "Values": "Nilai-nilai",
"Verification code sent": "Kode verifikasi telah dikirim", "Verification code sent": "Kode verifikasi telah dikirim",
"WebAuthn credentials": "Kredensial WebAuthn", "WebAuthn credentials": "Kredensial WebAuthn",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "masukkan kata sandi" "input password": "masukkan kata sandi"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "あなたの申請を入力してください!", "Please input your application!": "あなたの申請を入力してください!",
"Please input your organization!": "あなたの組織を入力してください!", "Please input your organization!": "あなたの組織を入力してください!",
"Please select a HTML file": "HTMLファイルを選択してください", "Please select a HTML file": "HTMLファイルを選択してください",
@@ -229,6 +230,7 @@
"Email": "電子メール", "Email": "電子メール",
"Email - Tooltip": "有効な電子メールアドレス", "Email - Tooltip": "有効な電子メールアドレス",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "電話", "Phone": "電話",
"Phone - Tooltip": "電話番号", "Phone - Tooltip": "電話番号",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "プラン", "Plans": "プラン",
@@ -391,6 +394,7 @@
"User type": "ユーザータイプ", "User type": "ユーザータイプ",
"User type - Tooltip": "ユーザーが属するタグは、デフォルトでは「通常ユーザー」となります", "User type - Tooltip": "ユーザーが属するタグは、デフォルトでは「通常ユーザー」となります",
"Users": "ユーザー", "Users": "ユーザー",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "すべての組織のユーザー", "Users under all organizations": "すべての組織のユーザー",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "ローディング", "Loading": "ローディング",
"Logging out...": "ログアウト中...", "Logging out...": "ログアウト中...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "アカウントがありませんか?", "No account?": "アカウントがありませんか?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "WebAuthnでサインインしてください", "Sign in with WebAuthn": "WebAuthnでサインインしてください",
"Sign in with {type}": "{type}でサインインしてください", "Sign in with {type}": "{type}でサインインしてください",
"Signin button": "Signin button",
"Signing in...": "サインイン中...", "Signing in...": "サインイン中...",
"Successfully logged in with WebAuthn credentials": "WebAuthnの認証情報で正常にログインしました", "Successfully logged in with WebAuthn credentials": "WebAuthnの認証情報で正常にログインしました",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "あなたの国コードを選択してください!", "Please select your country code!": "あなたの国コードを選択してください!",
"Please select your country/region!": "あなたの国/地域を選択してください!", "Please select your country/region!": "あなたの国/地域を選択してください!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "利用規約", "Terms of Use": "利用規約",
"Terms of Use - Tooltip": "ユーザーが登録する際に読んで同意する必要がある利用規約", "Terms of Use - Tooltip": "ユーザーが登録する際に読んで同意する必要がある利用規約",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "価値観", "Values": "価値観",
"Verification code sent": "確認コードを送信しました", "Verification code sent": "確認コードを送信しました",
"WebAuthn credentials": "WebAuthnの資格情報", "WebAuthn credentials": "WebAuthnの資格情報",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "パスワードを入力してください" "input password": "パスワードを入力してください"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "당신의 신청서를 입력해주세요!", "Please input your application!": "당신의 신청서를 입력해주세요!",
"Please input your organization!": "귀하의 조직을 입력해 주세요!", "Please input your organization!": "귀하의 조직을 입력해 주세요!",
"Please select a HTML file": "HTML 파일을 선택해 주세요", "Please select a HTML file": "HTML 파일을 선택해 주세요",
@@ -229,6 +230,7 @@
"Email": "이메일", "Email": "이메일",
"Email - Tooltip": "유효한 이메일 주소", "Email - Tooltip": "유효한 이메일 주소",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "전화기", "Phone": "전화기",
"Phone - Tooltip": "전화 번호", "Phone - Tooltip": "전화 번호",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "플랜", "Plans": "플랜",
@@ -391,6 +394,7 @@
"User type": "사용자 유형", "User type": "사용자 유형",
"User type - Tooltip": "사용자가 속한 태그는 기본적으로 \"보통 사용자\"로 설정됩니다", "User type - Tooltip": "사용자가 속한 태그는 기본적으로 \"보통 사용자\"로 설정됩니다",
"Users": "사용자", "Users": "사용자",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "모든 조직의 사용자", "Users under all organizations": "모든 조직의 사용자",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "로딩 중입니다", "Loading": "로딩 중입니다",
"Logging out...": "로그아웃 중...", "Logging out...": "로그아웃 중...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "계정이 없나요?", "No account?": "계정이 없나요?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "WebAuthn으로 로그인하세요", "Sign in with WebAuthn": "WebAuthn으로 로그인하세요",
"Sign in with {type}": "{type}로 로그인하세요", "Sign in with {type}": "{type}로 로그인하세요",
"Signin button": "Signin button",
"Signing in...": "로그인 중...", "Signing in...": "로그인 중...",
"Successfully logged in with WebAuthn credentials": "WebAuthn 자격 증명으로 로그인 성공적으로 수행했습니다", "Successfully logged in with WebAuthn credentials": "WebAuthn 자격 증명으로 로그인 성공적으로 수행했습니다",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "국가 코드를 선택해 주세요!", "Please select your country code!": "국가 코드를 선택해 주세요!",
"Please select your country/region!": "국가 / 지역을 선택해주세요!", "Please select your country/region!": "국가 / 지역을 선택해주세요!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "사용 약관", "Terms of Use": "사용 약관",
"Terms of Use - Tooltip": "등록 중 사용자가 읽어야 하고 동의해야하는 이용 약관", "Terms of Use - Tooltip": "등록 중 사용자가 읽어야 하고 동의해야하는 이용 약관",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "가치들", "Values": "가치들",
"Verification code sent": "인증 코드가 전송되었습니다", "Verification code sent": "인증 코드가 전송되었습니다",
"WebAuthn credentials": "웹 인증 자격증명", "WebAuthn credentials": "웹 인증 자격증명",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "비밀번호를 입력해주세요" "input password": "비밀번호를 입력해주세요"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Apenas registro", "Only signup": "Apenas registro",
"Org choice mode": "Modo de escolha Org", "Org choice mode": "Modo de escolha Org",
"Org choice mode - Tooltip": "Modo de escolha Org - Dica", "Org choice mode - Tooltip": "Modo de escolha Org - Dica",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Por favor, insira o nome da sua aplicação!", "Please input your application!": "Por favor, insira o nome da sua aplicação!",
"Please input your organization!": "Por favor, insira o nome da sua organização!", "Please input your organization!": "Por favor, insira o nome da sua organização!",
"Please select a HTML file": "Por favor, selecione um arquivo HTML", "Please select a HTML file": "Por favor, selecione um arquivo HTML",
@@ -229,6 +230,7 @@
"Email": "E-mail", "Email": "E-mail",
"Email - Tooltip": "Endereço de e-mail válido", "Email - Tooltip": "Endereço de e-mail válido",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Habilitar", "Enable": "Habilitar",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Telefone", "Phone": "Telefone",
"Phone - Tooltip": "Número de telefone", "Phone - Tooltip": "Número de telefone",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Kế hoạch", "Plans": "Kế hoạch",
@@ -391,6 +394,7 @@
"User type": "Tipo de Usuário", "User type": "Tipo de Usuário",
"User type - Tooltip": "Tags às quais o usuário pertence, com valor padrão de \"usuário-normal\"", "User type - Tooltip": "Tags às quais o usuário pertence, com valor padrão de \"usuário-normal\"",
"Users": "Usuários", "Users": "Usuários",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Usuários em todas as organizações", "Users under all organizations": "Usuários em todas as organizações",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Carregando", "Loading": "Carregando",
"Logging out...": "Saindo...", "Logging out...": "Saindo...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Não possui uma conta?", "No account?": "Não possui uma conta?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Entrar com WebAuthn", "Sign in with WebAuthn": "Entrar com WebAuthn",
"Sign in with {type}": "Entrar com {type}", "Sign in with {type}": "Entrar com {type}",
"Signin button": "Signin button",
"Signing in...": "Entrando...", "Signing in...": "Entrando...",
"Successfully logged in with WebAuthn credentials": "Logado com sucesso usando credenciais WebAuthn", "Successfully logged in with WebAuthn credentials": "Logado com sucesso usando credenciais WebAuthn",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Por favor, selecione o código do seu país!", "Please select your country code!": "Por favor, selecione o código do seu país!",
"Please select your country/region!": "Por favor, selecione seu país/região!", "Please select your country/region!": "Por favor, selecione seu país/região!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Termos de Uso", "Terms of Use": "Termos de Uso",
"Terms of Use - Tooltip": "Termos de uso que os usuários precisam ler e concordar durante o registro", "Terms of Use - Tooltip": "Termos de uso que os usuários precisam ler e concordar durante o registro",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Valores", "Values": "Valores",
"Verification code sent": "Código de verificação enviado", "Verification code sent": "Código de verificação enviado",
"WebAuthn credentials": "Credenciais WebAuthn", "WebAuthn credentials": "Credenciais WebAuthn",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "Digite a senha" "input password": "Digite a senha"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Только при регистрации", "Only signup": "Только при регистрации",
"Org choice mode": "Режим выбора организации", "Org choice mode": "Режим выбора организации",
"Org choice mode - Tooltip": "Выбор режима выбора организации пользователем", "Org choice mode - Tooltip": "Выбор режима выбора организации пользователем",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Пожалуйста, введите свою заявку!", "Please input your application!": "Пожалуйста, введите свою заявку!",
"Please input your organization!": "Пожалуйста, введите название вашей организации!", "Please input your organization!": "Пожалуйста, введите название вашей организации!",
"Please select a HTML file": "Пожалуйста, выберите файл HTML", "Please select a HTML file": "Пожалуйста, выберите файл HTML",
@@ -229,6 +230,7 @@
"Email": "Электронная почта", "Email": "Электронная почта",
"Email - Tooltip": "Действительный адрес электронной почты", "Email - Tooltip": "Действительный адрес электронной почты",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Включить", "Enable": "Включить",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Телефон", "Phone": "Телефон",
"Phone - Tooltip": "Номер телефона", "Phone - Tooltip": "Номер телефона",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "План", "Plan": "План",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Планы", "Plans": "Планы",
@@ -391,6 +394,7 @@
"User type": "Тип пользователя", "User type": "Тип пользователя",
"User type - Tooltip": "Теги, к которым принадлежит пользователь, по умолчанию \"обычный пользователь\"", "User type - Tooltip": "Теги, к которым принадлежит пользователь, по умолчанию \"обычный пользователь\"",
"Users": "Пользователи", "Users": "Пользователи",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Пользователи всех организаций", "Users under all organizations": "Пользователи всех организаций",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Вебхуки", "Webhooks": "Вебхуки",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Загрузка", "Loading": "Загрузка",
"Logging out...": "Выход...", "Logging out...": "Выход...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Нет аккаунта?", "No account?": "Нет аккаунта?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Войти с помощью WebAuthn", "Sign in with WebAuthn": "Войти с помощью WebAuthn",
"Sign in with {type}": "Войти с помощью {type}", "Sign in with {type}": "Войти с помощью {type}",
"Signin button": "Signin button",
"Signing in...": "Вход в систему...", "Signing in...": "Вход в систему...",
"Successfully logged in with WebAuthn credentials": "Успешный вход с учетными данными WebAuthn", "Successfully logged in with WebAuthn credentials": "Успешный вход с учетными данными WebAuthn",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Пожалуйста, выберите код своей страны!", "Please select your country code!": "Пожалуйста, выберите код своей страны!",
"Please select your country/region!": "Пожалуйста, выберите свою страну / регион!", "Please select your country/region!": "Пожалуйста, выберите свою страну / регион!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Условия использования", "Terms of Use": "Условия использования",
"Terms of Use - Tooltip": "Условия использования, которые пользователи должны прочитать и согласиться с ними при регистрации", "Terms of Use - Tooltip": "Условия использования, которые пользователи должны прочитать и согласиться с ними при регистрации",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Значения", "Values": "Значения",
"Verification code sent": "Код подтверждения отправлен", "Verification code sent": "Код подтверждения отправлен",
"WebAuthn credentials": "WebAuthn удостоверения", "WebAuthn credentials": "WebAuthn удостоверения",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "введите пароль" "input password": "введите пароль"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "Email", "Email": "Email",
"Email - Tooltip": "Valid email address", "Email - Tooltip": "Valid email address",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Phone", "Phone": "Phone",
"Phone - Tooltip": "Phone number", "Phone - Tooltip": "Phone number",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Users", "Users": "Users",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Loading", "Loading": "Loading",
"Logging out...": "Logging out...", "Logging out...": "Logging out...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "No account?", "No account?": "No account?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "Sign in with {type}", "Sign in with {type}": "Sign in with {type}",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Terms of Use", "Terms of Use": "Terms of Use",
"Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration", "Terms of Use - Tooltip": "Terms of use that users need to read and agree to during registration",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "input password" "input password": "input password"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "Only signup", "Only signup": "Only signup",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Please input your application!", "Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!", "Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file", "Please select a HTML file": "Please select a HTML file",
@@ -229,6 +230,7 @@
"Email": "E-Posta", "Email": "E-Posta",
"Email - Tooltip": "Geçerli e-posta adresi", "Email - Tooltip": "Geçerli e-posta adresi",
"Email only": "Sadece eposta", "Email only": "Sadece eposta",
"Email or Phone": "Email or Phone",
"Enable": "Etkinleştir", "Enable": "Etkinleştir",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Telefon", "Phone": "Telefon",
"Phone - Tooltip": "Telefon numarası", "Phone - Tooltip": "Telefon numarası",
"Phone only": "Sadece telefon", "Phone only": "Sadece telefon",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Plans", "Plans": "Plans",
@@ -391,6 +394,7 @@
"User type": "User type", "User type": "User type",
"User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"", "User type - Tooltip": "Tags that the user belongs to, defaulting to \"normal-user\"",
"Users": "Kullanıcılar", "Users": "Kullanıcılar",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Users under all organizations", "Users under all organizations": "Users under all organizations",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Yükleniyor", "Loading": "Yükleniyor",
"Logging out...": ıkış yapılıyor...", "Logging out...": ıkış yapılıyor...",
"Login button": "Login button",
"MetaMask plugin not detected": "Metamask plugin-in bulunamadı", "MetaMask plugin not detected": "Metamask plugin-in bulunamadı",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Hesabınız yok mu?", "No account?": "Hesabınız yok mu?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Sign in with WebAuthn", "Sign in with WebAuthn": "Sign in with WebAuthn",
"Sign in with {type}": "{type} ile giriş yap", "Sign in with {type}": "{type} ile giriş yap",
"Signin button": "Signin button",
"Signing in...": "Signing in...", "Signing in...": "Signing in...",
"Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials", "Successfully logged in with WebAuthn credentials": "Successfully logged in with WebAuthn credentials",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Please select your country code!", "Please select your country code!": "Please select your country code!",
"Please select your country/region!": "Please select your country/region!", "Please select your country/region!": "Please select your country/region!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Kullanım Koşulları", "Terms of Use": "Kullanım Koşulları",
"Terms of Use - Tooltip": "Kayıt olabilmek için kullanım koşullarını okuyup, kabul etmelisiniz", "Terms of Use - Tooltip": "Kayıt olabilmek için kullanım koşullarını okuyup, kabul etmelisiniz",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"Values": "Values", "Values": "Values",
"Verification code sent": "Verification code sent", "Verification code sent": "Verification code sent",
"WebAuthn credentials": "WebAuthn credentials", "WebAuthn credentials": "WebAuthn credentials",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "şifreyi girin" "input password": "şifreyi girin"
}, },
"verification": { "verification": {

File diff suppressed because it is too large Load Diff

View File

@@ -80,6 +80,7 @@
"Only signup": "Chỉ đăng ký", "Only signup": "Chỉ đăng ký",
"Org choice mode": "Org choice mode", "Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Org choice mode - Tooltip", "Org choice mode - Tooltip": "Org choice mode - Tooltip",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "Vui lòng nhập ứng dụng của bạn!", "Please input your application!": "Vui lòng nhập ứng dụng của bạn!",
"Please input your organization!": "Vui lòng nhập tổ chức của bạn!", "Please input your organization!": "Vui lòng nhập tổ chức của bạn!",
"Please select a HTML file": "Vui lòng chọn tệp HTML", "Please select a HTML file": "Vui lòng chọn tệp HTML",
@@ -229,6 +230,7 @@
"Email": "Email: Thư điện tử", "Email": "Email: Thư điện tử",
"Email - Tooltip": "Địa chỉ email hợp lệ", "Email - Tooltip": "Địa chỉ email hợp lệ",
"Email only": "Email only", "Email only": "Email only",
"Email or Phone": "Email or Phone",
"Enable": "Enable", "Enable": "Enable",
"Enable dark logo": "Enable dark logo", "Enable dark logo": "Enable dark logo",
"Enable dark logo - Tooltip": "Enable dark logo", "Enable dark logo - Tooltip": "Enable dark logo",
@@ -311,6 +313,7 @@
"Phone": "Điện thoại", "Phone": "Điện thoại",
"Phone - Tooltip": "Số điện thoại", "Phone - Tooltip": "Số điện thoại",
"Phone only": "Phone only", "Phone only": "Phone only",
"Phone or Email": "Phone or Email",
"Plan": "Plan", "Plan": "Plan",
"Plan - Tooltip": "Plan - Tooltip", "Plan - Tooltip": "Plan - Tooltip",
"Plans": "Kế hoạch", "Plans": "Kế hoạch",
@@ -391,6 +394,7 @@
"User type": "Loại người dùng", "User type": "Loại người dùng",
"User type - Tooltip": "Các thẻ mà người dùng thuộc vào, mặc định là \"người dùng bình thường\"", "User type - Tooltip": "Các thẻ mà người dùng thuộc vào, mặc định là \"người dùng bình thường\"",
"Users": "Người dùng", "Users": "Người dùng",
"Users - Tooltip": "Users - Tooltip",
"Users under all organizations": "Người dùng trong tất cả các tổ chức", "Users under all organizations": "Người dùng trong tất cả các tổ chức",
"Verifications": "Verifications", "Verifications": "Verifications",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP username, Email or phone", "LDAP username, Email or phone": "LDAP username, Email or phone",
"Loading": "Đang tải", "Loading": "Đang tải",
"Logging out...": "Đăng xuất ...", "Logging out...": "Đăng xuất ...",
"Login button": "Login button",
"MetaMask plugin not detected": "MetaMask plugin not detected", "MetaMask plugin not detected": "MetaMask plugin not detected",
"Model loading failure": "Model loading failure", "Model loading failure": "Model loading failure",
"No account?": "Không có tài khoản?", "No account?": "Không có tài khoản?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "Sign in with Face ID", "Sign in with Face ID": "Sign in with Face ID",
"Sign in with WebAuthn": "Đăng nhập với WebAuthn", "Sign in with WebAuthn": "Đăng nhập với WebAuthn",
"Sign in with {type}": "Đăng nhập bằng {type}", "Sign in with {type}": "Đăng nhập bằng {type}",
"Signin button": "Signin button",
"Signing in...": "Đăng nhập...", "Signing in...": "Đăng nhập...",
"Successfully logged in with WebAuthn credentials": "Đã đăng nhập thành công với thông tin WebAuthn", "Successfully logged in with WebAuthn credentials": "Đã đăng nhập thành công với thông tin WebAuthn",
"The camera is currently in use by another webpage": "The camera is currently in use by another webpage", "The camera is currently in use by another webpage": "The camera is currently in use by another webpage",
@@ -941,6 +945,7 @@
"Please select your country code!": "Vui lòng chọn mã quốc gia của bạn!", "Please select your country code!": "Vui lòng chọn mã quốc gia của bạn!",
"Please select your country/region!": "Vui lòng chọn quốc gia/vùng của bạn!", "Please select your country/region!": "Vui lòng chọn quốc gia/vùng của bạn!",
"Regex": "Regex", "Regex": "Regex",
"Signup button": "Signup button",
"Terms of Use": "Điều khoản sử dụng", "Terms of Use": "Điều khoản sử dụng",
"Terms of Use - Tooltip": "Điều khoản sử dụng mà người dùng cần đọc và đồng ý trong quá trình đăng ký", "Terms of Use - Tooltip": "Điều khoản sử dụng mà người dùng cần đọc và đồng ý trong quá trình đăng ký",
"Text 1": "Text 1", "Text 1": "Text 1",
@@ -1162,6 +1167,7 @@
"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",
"WebAuthn credentials": "Chứng chỉ WebAuthn", "WebAuthn credentials": "Chứng chỉ WebAuthn",
"You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password",
"input password": "Nhập mật khẩu" "input password": "Nhập mật khẩu"
}, },
"verification": { "verification": {

View File

@@ -80,6 +80,7 @@
"Only signup": "仅注册", "Only signup": "仅注册",
"Org choice mode": "组织选择模式", "Org choice mode": "组织选择模式",
"Org choice mode - Tooltip": "采用什么方式选择要登录的组织", "Org choice mode - Tooltip": "采用什么方式选择要登录的组织",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "开启 \\\"保持登录会话\\\" 后才能开启 \\\"自动登录\\\"",
"Please input your application!": "请输入你的应用", "Please input your application!": "请输入你的应用",
"Please input your organization!": "请输入你的组织", "Please input your organization!": "请输入你的组织",
"Please select a HTML file": "请选择一个HTML文件", "Please select a HTML file": "请选择一个HTML文件",
@@ -229,6 +230,7 @@
"Email": "电子邮箱", "Email": "电子邮箱",
"Email - Tooltip": "合法的电子邮件地址", "Email - Tooltip": "合法的电子邮件地址",
"Email only": "仅支持邮件", "Email only": "仅支持邮件",
"Email or Phone": "电子邮件或手机",
"Enable": "启用", "Enable": "启用",
"Enable dark logo": "开启暗黑Logo", "Enable dark logo": "开启暗黑Logo",
"Enable dark logo - Tooltip": "开启暗黑Logo", "Enable dark logo - Tooltip": "开启暗黑Logo",
@@ -311,6 +313,7 @@
"Phone": "手机号", "Phone": "手机号",
"Phone - Tooltip": "手机号", "Phone - Tooltip": "手机号",
"Phone only": "仅支持手机号", "Phone only": "仅支持手机号",
"Phone or Email": "手机或电子邮件",
"Plan": "计划", "Plan": "计划",
"Plan - Tooltip": "订阅里的计划", "Plan - Tooltip": "订阅里的计划",
"Plans": "计划", "Plans": "计划",
@@ -391,6 +394,7 @@
"User type": "用户类型", "User type": "用户类型",
"User type - Tooltip": "用户所属的标签,默认为\"normal-user\"", "User type - Tooltip": "用户所属的标签,默认为\"normal-user\"",
"Users": "用户", "Users": "用户",
"Users - Tooltip": "用户 - Tooltip",
"Users under all organizations": "所有组织里的用户", "Users under all organizations": "所有组织里的用户",
"Verifications": "验证", "Verifications": "验证",
"Webhooks": "Webhooks", "Webhooks": "Webhooks",
@@ -473,7 +477,6 @@
"LDAP username, Email or phone": "LDAP用户名, Email或手机号", "LDAP username, Email or phone": "LDAP用户名, Email或手机号",
"Loading": "加载中", "Loading": "加载中",
"Logging out...": "正在退出登录...", "Logging out...": "正在退出登录...",
"Login button": "登录按钮",
"MetaMask plugin not detected": "未检测到MetaMask插件", "MetaMask plugin not detected": "未检测到MetaMask插件",
"Model loading failure": "人脸识别模型加载失败", "Model loading failure": "人脸识别模型加载失败",
"No account?": "没有账号?", "No account?": "没有账号?",
@@ -498,6 +501,7 @@
"Sign in with Face ID": "人脸登录", "Sign in with Face ID": "人脸登录",
"Sign in with WebAuthn": "WebAuthn登录", "Sign in with WebAuthn": "WebAuthn登录",
"Sign in with {type}": "{type}登录", "Sign in with {type}": "{type}登录",
"Signin button": "登录按钮",
"Signing in...": "正在登录...", "Signing in...": "正在登录...",
"Successfully logged in with WebAuthn credentials": "成功使用WebAuthn证书登录", "Successfully logged in with WebAuthn credentials": "成功使用WebAuthn证书登录",
"The camera is currently in use by another webpage": "摄像头被占用,无法使用", "The camera is currently in use by another webpage": "摄像头被占用,无法使用",
@@ -941,6 +945,7 @@
"Please select your country code!": "请选择国家代码!", "Please select your country code!": "请选择国家代码!",
"Please select your country/region!": "请选择您的国家或地区", "Please select your country/region!": "请选择您的国家或地区",
"Regex": "正则表达式", "Regex": "正则表达式",
"Signup button": "注册按钮",
"Terms of Use": "《用户协议》", "Terms of Use": "《用户协议》",
"Terms of Use - Tooltip": "用户注册时需要阅读并同意的使用条款", "Terms of Use - Tooltip": "用户注册时需要阅读并同意的使用条款",
"Text 1": "文本1", "Text 1": "文本1",
@@ -1162,6 +1167,7 @@
"Values": "值", "Values": "值",
"Verification code sent": "验证码已发送", "Verification code sent": "验证码已发送",
"WebAuthn credentials": "WebAuthn凭据", "WebAuthn credentials": "WebAuthn凭据",
"You have changed the username, please save your change first before modifying the password": "你已经更改了你的用户名,请你再更改密码前保存更改",
"input password": "输入密码" "input password": "输入密码"
}, },
"verification": { "verification": {

View File

@@ -103,7 +103,7 @@ class SigninTable extends React.Component {
{name: "Providers", displayName: i18next.t("general:Providers")}, {name: "Providers", displayName: i18next.t("general:Providers")},
{name: "Agreement", displayName: i18next.t("signup:Agreement")}, {name: "Agreement", displayName: i18next.t("signup:Agreement")},
{name: "Forgot password?", displayName: i18next.t("login:Forgot password?")}, {name: "Forgot password?", displayName: i18next.t("login:Forgot password?")},
{name: "Login button", displayName: i18next.t("login:Login button")}, {name: "Login button", displayName: i18next.t("login:Signin button")},
{name: "Signup link", displayName: i18next.t("general:Signup link")}, {name: "Signup link", displayName: i18next.t("general:Signup link")},
]; ];
@@ -187,15 +187,15 @@ class SigninTable extends React.Component {
return ( return (
<Popover placement="right" content={ <Popover placement="right" content={
<div style={{width: "900px", height: "300px"}} > <div style={{width: "900px", height: "300px"}} >
<CodeMirror value={text} <CodeMirror value={text?.replaceAll("<style>", "").replaceAll("</style>", "")}
options={{mode: "htmlmixed", theme: "material-darker"}} options={{mode: "css", theme: "material-darker"}}
onBeforeChange={(editor, data, value) => { onBeforeChange={(editor, data, value) => {
this.updateField(table, index, "label", value); this.updateField(table, index, "label", value);
}} }}
/> />
</div> </div>
} title={i18next.t("application:CSS style")} trigger="click"> } title={i18next.t("application:CSS style")} trigger="click">
<Input value={text} onChange={e => { <Input value={text?.replaceAll("<style>", "").replaceAll("</style>", "")} onChange={e => {
this.updateField(table, index, "label", e.target.value); this.updateField(table, index, "label", e.target.value);
}} /> }} />
</Popover> </Popover>

View File

@@ -24,6 +24,27 @@ import "codemirror/lib/codemirror.css";
require("codemirror/theme/material-darker.css"); require("codemirror/theme/material-darker.css");
require("codemirror/mode/htmlmixed/htmlmixed"); require("codemirror/mode/htmlmixed/htmlmixed");
const EmailCss = ".signup-email{}\n.signup-email-input{}\n.signup-email-code{}\n.signup-email-code-input{}\n";
const PhoneCss = ".signup-phone{}\n.signup-phone-input{}\n.phone-code{}\n.signup-phone-code-input{}";
export const SignupTableDefaultCssMap = {
"Username": ".signup-username {}\n.signup-username-input {}",
"Display name": ".signup-first-name {}\n.signup-first-name-input{}\n.signup-last-name{}\n.signup-last-name-input{}\n.signup-name{}\n.signup-name-input{}",
"Affiliation": ".signup-affiliation{}\n.signup-affiliation-input{}",
"Country/Region": ".signup-country-region{}\n.signup-region-select{}",
"ID card": ".signup-idcard{}\n.signup-idcard-input{}",
"Password": ".signup-password{}\n.signup-password-input{}",
"Confirm password": ".signup-confirm{}",
"Email": EmailCss,
"Phone": PhoneCss,
"Email or Phone": EmailCss + PhoneCss,
"Phone or Email": EmailCss + PhoneCss,
"Invitation code": ".signup-invitation-code{}\n.signup-invitation-code-input{}",
"Agreement": ".login-agreement{}",
"Signup button": ".signup-button{}\n.signup-link{}",
"Providers": ".provider-img {\n width: 30px;\n margin: 5px;\n }\n .provider-big-img {\n margin-bottom: 10px;\n }\n ",
};
const {Option} = Select; const {Option} = Select;
class SignupTable extends React.Component { class SignupTable extends React.Component {
@@ -44,7 +65,7 @@ class SignupTable extends React.Component {
} }
addRow(table) { addRow(table) {
const row = {name: Setting.getNewRowNameForTable(table, "Please select a signup item"), visible: true, required: true, rule: "None"}; const row = {name: Setting.getNewRowNameForTable(table, "Please select a signup item"), visible: true, required: true, rule: "None", customCss: ""};
if (table === undefined) { if (table === undefined) {
table = []; table = [];
} }
@@ -89,6 +110,8 @@ class SignupTable extends React.Component {
{name: "Phone or Email", displayName: i18next.t("general:Phone or Email")}, {name: "Phone or Email", displayName: i18next.t("general:Phone or Email")},
{name: "Invitation code", displayName: i18next.t("application:Invitation code")}, {name: "Invitation code", displayName: i18next.t("application:Invitation code")},
{name: "Agreement", displayName: i18next.t("signup:Agreement")}, {name: "Agreement", displayName: i18next.t("signup:Agreement")},
{name: "Signup button", displayName: i18next.t("signup:Signup button")},
{name: "Providers", displayName: i18next.t("general:Providers")},
{name: "Text 1", displayName: i18next.t("signup:Text 1")}, {name: "Text 1", displayName: i18next.t("signup:Text 1")},
{name: "Text 2", displayName: i18next.t("signup:Text 2")}, {name: "Text 2", displayName: i18next.t("signup:Text 2")},
{name: "Text 3", displayName: i18next.t("signup:Text 3")}, {name: "Text 3", displayName: i18next.t("signup:Text 3")},
@@ -109,6 +132,7 @@ class SignupTable extends React.Component {
value={getItemDisplayName(text)} value={getItemDisplayName(text)}
onChange={value => { onChange={value => {
this.updateField(table, index, "name", value); this.updateField(table, index, "name", value);
this.updateField(table, index, "customCss", SignupTableDefaultCssMap[value]);
}} > }} >
{ {
Setting.getDeduplicatedArray(items, table, "name").map((item, index) => <Option key={index} value={item.name}>{item.displayName}</Option>) Setting.getDeduplicatedArray(items, table, "name").map((item, index) => <Option key={index} value={item.name}>{item.displayName}</Option>)
@@ -121,7 +145,7 @@ class SignupTable extends React.Component {
title: i18next.t("organization:Visible"), title: i18next.t("organization:Visible"),
dataIndex: "visible", dataIndex: "visible",
key: "visible", key: "visible",
width: "120px", width: "80px",
render: (text, record, index) => { render: (text, record, index) => {
if (record.name === "ID") { if (record.name === "ID") {
return null; return null;
@@ -143,9 +167,9 @@ class SignupTable extends React.Component {
title: i18next.t("provider:Required"), title: i18next.t("provider:Required"),
dataIndex: "required", dataIndex: "required",
key: "required", key: "required",
width: "120px", width: "80px",
render: (text, record, index) => { render: (text, record, index) => {
if (!record.visible) { if (!record.visible || ["Signup button", "Providers"].includes(record.name)) {
return null; return null;
} }
@@ -160,9 +184,9 @@ class SignupTable extends React.Component {
title: i18next.t("provider:Prompted"), title: i18next.t("provider:Prompted"),
dataIndex: "prompted", dataIndex: "prompted",
key: "prompted", key: "prompted",
width: "120px", width: "80px",
render: (text, record, index) => { render: (text, record, index) => {
if (record.name === "ID") { if (["ID", "Signup button", "Providers"].includes(record.name)) {
return null; return null;
} }
@@ -181,7 +205,7 @@ class SignupTable extends React.Component {
title: i18next.t("signup:Label"), title: i18next.t("signup:Label"),
dataIndex: "label", dataIndex: "label",
key: "label", key: "label",
width: "200px", width: "150px",
render: (text, record, index) => { render: (text, record, index) => {
if (record.name.startsWith("Text ")) { if (record.name.startsWith("Text ")) {
return ( return (
@@ -209,6 +233,30 @@ class SignupTable extends React.Component {
); );
}, },
}, },
{
title: i18next.t("application:Custom CSS"),
dataIndex: "customCss",
key: "customCss",
width: "180px",
render: (text, record, index) => {
return (
<Popover placement="right" content={
<div style={{width: "900px", height: "300px"}}>
<CodeMirror value={text ? text : SignupTableDefaultCssMap[record.name]}
options={{mode: "css", theme: "material-darker"}}
onBeforeChange={(editor, data, value) => {
this.updateField(table, index, "customCss", value ? value : SignupTableDefaultCssMap[record.name]);
}}
/>
</div>
} title={i18next.t("application:CSS style")} trigger="click">
<Input value={text ? text : SignupTableDefaultCssMap[record.name]} onChange={e => {
this.updateField(table, index, "customCss", e.target.value ? e.target.value : SignupTableDefaultCssMap[record.name]);
}} />
</Popover>
);
},
},
{ {
title: i18next.t("signup:Placeholder"), title: i18next.t("signup:Placeholder"),
dataIndex: "placeholder", dataIndex: "placeholder",
@@ -230,9 +278,9 @@ class SignupTable extends React.Component {
title: i18next.t("signup:Regex"), title: i18next.t("signup:Regex"),
dataIndex: "regex", dataIndex: "regex",
key: "regex", key: "regex",
width: "200px", width: "180px",
render: (text, record, index) => { render: (text, record, index) => {
if (record.name.startsWith("Text ") || record.name === "Password" || record.name === "Confirm password") { if (record.name.startsWith("Text ") || ["Password", "Confirm password", "Signup button", "Provider"].includes(record.name)) {
return null; return null;
} }
@@ -277,6 +325,11 @@ class SignupTable extends React.Component {
{id: "Signin", name: i18next.t("application:Signin")}, {id: "Signin", name: i18next.t("application:Signin")},
{id: "Signin (Default True)", name: i18next.t("application:Signin (Default True)")}, {id: "Signin (Default True)", name: i18next.t("application:Signin (Default True)")},
]; ];
} else if (record.name === "Providers") {
options = [
{id: "big", name: i18next.t("application:Big icon")},
{id: "small", name: i18next.t("application:Small icon")},
];
} }
if (options.length === 0) { if (options.length === 0) {
@@ -304,7 +357,7 @@ class SignupTable extends React.Component {
<Button style={{marginRight: "5px"}} disabled={index === table.length - 1} icon={<DownOutlined />} size="small" onClick={() => this.downRow(table, index)} /> <Button style={{marginRight: "5px"}} disabled={index === table.length - 1} icon={<DownOutlined />} size="small" onClick={() => this.downRow(table, index)} />
</Tooltip> </Tooltip>
<Tooltip placement="topLeft" title={i18next.t("general:Delete")}> <Tooltip placement="topLeft" title={i18next.t("general:Delete")}>
<Button icon={<DeleteOutlined />} size="small" onClick={() => this.deleteRow(table, index)} /> <Button disabled={record.name === "Signup button"} icon={<DeleteOutlined />} size="small" onClick={() => this.deleteRow(table, index)} />
</Tooltip> </Tooltip>
</div> </div>
); );

View File

@@ -183,19 +183,6 @@
dependencies: dependencies:
"@ctrl/tinycolor" "^3.4.0" "@ctrl/tinycolor" "^3.4.0"
"@ant-design/cssinjs@1.16.1":
version "1.16.1"
resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.16.1.tgz#0032044db5678dd25ac12def1abb1d52e6a4d583"
integrity sha512-KKVB5Or6BDC1Bo3Y4KMlOkyQU0P+6GTodubrQ9YfrtXG1TgO4wpaEfg9I4ZA49R7M+Ij2KKNwb+5abvmXy6K8w==
dependencies:
"@babel/runtime" "^7.11.1"
"@emotion/hash" "^0.8.0"
"@emotion/unitless" "^0.7.5"
classnames "^2.3.1"
csstype "^3.0.10"
rc-util "^5.35.0"
stylis "^4.0.13"
"@ant-design/cssinjs@^1", "@ant-design/cssinjs@^1.10.1", "@ant-design/cssinjs@^1.5.6": "@ant-design/cssinjs@^1", "@ant-design/cssinjs@^1.10.1", "@ant-design/cssinjs@^1.5.6":
version "1.10.1" version "1.10.1"
resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.10.1.tgz#c9173f38e3d61f0883ca3c17d7cf1e30784e0dd7" resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.10.1.tgz#c9173f38e3d61f0883ca3c17d7cf1e30784e0dd7"
@@ -12408,14 +12395,6 @@ rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.0, rc-util@^5.16.
"@babel/runtime" "^7.18.3" "@babel/runtime" "^7.18.3"
react-is "^16.12.0" react-is "^16.12.0"
rc-util@^5.35.0:
version "5.35.0"
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.35.0.tgz#bed1986248b7be525cc0894109e609ac60207f29"
integrity sha512-MTXlixb3EoSTEchsOc7XWsVyoUQqoCsh2Z1a2IptwNgqleMF6ZgQeY52UzUbNj5CcVBg9YljOWjuOV07jSSm4Q==
dependencies:
"@babel/runtime" "^7.18.3"
react-is "^16.12.0"
rc-virtual-list@^3.4.13, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: rc-virtual-list@^3.4.13, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2:
version "3.5.2" version "3.5.2"
resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.5.2.tgz#5e1028869bae900eacbae6788d4eca7210736006" resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.5.2.tgz#5e1028869bae900eacbae6788d4eca7210736006"