Compare commits

...

21 Commits

Author SHA1 Message Date
b57b64fc36 feat: add origin field for mfaAccountTable (#3463) 2024-12-29 22:51:21 +08:00
0d239ba1cf feat: improve the error message of GitHub OAuth provider (#3462) 2024-12-29 21:54:54 +08:00
8927e08217 feat: speed up GetDashboard() by only fetching last 30 days data (#3458)
* feat: only check 30 days data

* refactor: refactor GetDashboard to reduce code line

* refactor: refactor GetDashboard to reduce code line

* refactor: remove unused where

* fix: fix error code
2024-12-29 16:15:52 +08:00
0636069584 feat: only fetch created_time field to reduce data size in get-dashboard API (#3457) 2024-12-28 23:52:19 +08:00
4d0f73c84e feat: fix Casdoor OAuth provider doesn't use domain field bug 2024-12-28 10:01:56 +08:00
74a2478e10 feat: Make MinIO storage provider region setting configurable (#3433)
* fix: Make MinIO provider region setting configurable

* Fix: Correct the issue where modifications to MinIO's default logic caused behavioral discrepancies
2024-12-23 16:07:14 +08:00
acc6f3e887 feat: escape the avatal URL in CAS response (#3434) 2024-12-20 17:11:58 +08:00
185ab9750a feat: fix VerificationRecord.IsUsed JSON Field Mapping 2024-12-18 13:56:54 +08:00
48adc050d6 feat: can pass empty user id on user update (#3443) 2024-12-18 07:56:44 +08:00
b0e318c9db feat: add localized tab titles for Basic and Advanced Editors (#3431)
* feat: add localized tab titles for Basic and Advanced Editors

* docs: update translations for model editor labels in multiple locales
2024-12-16 08:34:13 +08:00
f9a6efc00f feat: advanced model editor should support changing UI language (#3430) 2024-12-15 15:53:29 +08:00
bd4a6775dd feat: get github user email with user/emails api (#3428)
* feat: get user email use `user/emails` api

* feat: improve code format

* feat: improve code format
2024-12-15 10:28:18 +08:00
e3a43d0062 feat: improve the advanced editor of model edit page (#3427) 2024-12-15 02:07:02 +08:00
0cf281cac0 feat: fix record's password regex bug (#3421) 2024-12-11 08:43:03 +08:00
7322f67ae0 feat: add model, adapter and enforcer to the dashboard page chart (#3413)
* [feature] Add more data (Model, Adapter, Enforcer) to the dashboard page chart #3379

* feat: add model, adapter, enforcer to dashboard
2024-12-09 16:07:39 +08:00
b927c6d7b4 feat: support LDAP's SetPassword (#3395)
* fix: Resolve the issue mentioned in #3392

* fix: Change checkLdapUserPassword to CheckLdapUserPassword.

* fix: the issue mentioned by hsluoyz.

* fix: Check if the user parameter is nil

* fix: use existing i18n message
2024-12-09 16:06:24 +08:00
01212cd1f3 feat: add AiAssistantUrl to frontend config (#3385) 2024-12-08 20:44:28 +08:00
bf55f94d41 feat: support CUCloud OSS storage provider (#3400) 2024-12-08 20:24:38 +08:00
f14711d315 feat: fix frontend bug 2024-12-07 21:53:01 +08:00
58e1c28f7c feat: support LDAPS protocol (#3390)
* feat: support ldaps

* fix: unencrypted port 389 not work after enable SSL
fix: remove useless conf and set ldapsCertId to empty
fix: return and log getTLSconfig error

* fix: remove unused setting

* fix: check nil condition

* fix: not log fail when certId is empty
2024-12-07 21:26:07 +08:00
922b19c64b feat: reduce i18n items 2024-12-07 21:22:57 +08:00
54 changed files with 1031 additions and 372 deletions

View File

@ -25,6 +25,8 @@ enableErrorMask = false
enableGzip = true
inactiveTimeoutMinutes =
ldapServerPort = 389
ldapsCertId = ""
ldapsServerPort = 636
radiusServerPort = 1812
radiusSecret = "secret"
quota = {"organization": -1, "user": -1, "application": -1, "provider": -1}

View File

@ -475,6 +475,16 @@ func (c *ApiController) SetPassword() {
userId := util.GetId(userOwner, userName)
user, err := object.GetUser(userId)
if err != nil {
c.ResponseError(err.Error())
return
}
if user == nil {
c.ResponseError(fmt.Sprintf(c.T("general:The user: %s doesn't exist"), userId))
return
}
requestUserId := c.GetSessionUsername()
if requestUserId == "" && code == "" {
c.ResponseError(c.T("general:Please login first"), "Please login first")
@ -518,7 +528,11 @@ func (c *ApiController) SetPassword() {
}
}
} else if code == "" {
err = object.CheckPassword(targetUser, oldPassword, c.GetAcceptLanguage())
if user.Ldap == "" {
err = object.CheckPassword(targetUser, oldPassword, c.GetAcceptLanguage())
} else {
err = object.CheckLdapUserPassword(targetUser, oldPassword, c.GetAcceptLanguage())
}
if err != nil {
c.ResponseError(err.Error())
return
@ -563,7 +577,12 @@ func (c *ApiController) SetPassword() {
targetUser.NeedUpdatePassword = false
targetUser.LastChangePasswordTime = util.GetCurrentTime()
_, err = object.UpdateUser(userId, targetUser, []string{"password", "need_update_password", "password_type", "last_change_password_time"}, false)
if user.Ldap == "" {
_, err = object.UpdateUser(userId, targetUser, []string{"password", "need_update_password", "password_type", "last_change_password_time"}, false)
} else {
err = object.ResetLdapPassword(targetUser, newPassword, c.GetAcceptLanguage())
}
if err != nil {
c.ResponseError(err.Error())
return

1
go.mod
View File

@ -63,6 +63,7 @@ require (
golang.org/x/crypto v0.21.0
golang.org/x/net v0.21.0
golang.org/x/oauth2 v0.17.0
golang.org/x/text v0.14.0
google.golang.org/api v0.150.0
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/square/go-jose.v2 v2.6.0

View File

@ -188,10 +188,23 @@ type GitHubUserInfo struct {
} `json:"plan"`
}
type GitHubUserEmailInfo struct {
Email string `json:"email"`
Primary bool `json:"primary"`
Verified bool `json:"verified"`
Visibility string `json:"visibility"`
}
type GitHubErrorInfo struct {
Message string `json:"message"`
DocumentationUrl string `json:"documentation_url"`
Status string `json:"status"`
}
func (idp *GithubIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) {
req, err := http.NewRequest("GET", "https://api.github.com/user", nil)
if err != nil {
panic(err)
return nil, err
}
req.Header.Add("Authorization", "token "+token.AccessToken)
resp, err := idp.Client.Do(req)
@ -212,6 +225,41 @@ func (idp *GithubIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error)
return nil, err
}
if githubUserInfo.Email == "" {
reqEmail, err := http.NewRequest("GET", "https://api.github.com/user/emails", nil)
if err != nil {
return nil, err
}
reqEmail.Header.Add("Authorization", "token "+token.AccessToken)
respEmail, err := idp.Client.Do(reqEmail)
if err != nil {
return nil, err
}
defer respEmail.Body.Close()
emailBody, err := io.ReadAll(respEmail.Body)
if err != nil {
return nil, err
}
if respEmail.StatusCode != 200 {
var errMessage GitHubErrorInfo
err = json.Unmarshal(emailBody, &errMessage)
if err != nil {
return nil, err
}
return nil, fmt.Errorf("%s, %s", errMessage.Message, errMessage.DocumentationUrl)
}
var userEmails []GitHubUserEmailInfo
err = json.Unmarshal(emailBody, &userEmails)
if err != nil {
return nil, err
}
githubUserInfo.Email = idp.getEmailFromEmailsResult(userEmails)
}
userInfo := UserInfo{
Id: strconv.Itoa(githubUserInfo.Id),
Username: githubUserInfo.Login,
@ -248,3 +296,27 @@ func (idp *GithubIdProvider) postWithBody(body interface{}, url string) ([]byte,
return data, nil
}
func (idp *GithubIdProvider) getEmailFromEmailsResult(emailInfo []GitHubUserEmailInfo) string {
primaryEmail := ""
verifiedEmail := ""
for _, addr := range emailInfo {
if !addr.Verified || strings.Contains(addr.Email, "users.noreply.github.com") {
continue
}
if addr.Primary {
primaryEmail = addr.Email
break
} else if verifiedEmail == "" {
verifiedEmail = addr.Email
}
}
if primaryEmail != "" {
return primaryEmail
}
return verifiedEmail
}

View File

@ -15,6 +15,7 @@
package ldap
import (
"crypto/tls"
"fmt"
"hash/fnv"
"log"
@ -27,21 +28,68 @@ import (
func StartLdapServer() {
ldapServerPort := conf.GetConfigString("ldapServerPort")
if ldapServerPort == "" || ldapServerPort == "0" {
return
}
ldapsServerPort := conf.GetConfigString("ldapsServerPort")
server := ldap.NewServer()
serverSsl := ldap.NewServer()
routes := ldap.NewRouteMux()
routes.Bind(handleBind)
routes.Search(handleSearch).Label(" SEARCH****")
server.Handle(routes)
err := server.ListenAndServe("0.0.0.0:" + ldapServerPort)
serverSsl.Handle(routes)
go func() {
if ldapServerPort == "" || ldapServerPort == "0" {
return
}
err := server.ListenAndServe("0.0.0.0:" + ldapServerPort)
if err != nil {
log.Printf("StartLdapServer() failed, err = %s", err.Error())
}
}()
go func() {
if ldapsServerPort == "" || ldapsServerPort == "0" {
return
}
ldapsCertId := conf.GetConfigString("ldapsCertId")
if ldapsCertId == "" {
return
}
config, err := getTLSconfig(ldapsCertId)
if err != nil {
log.Printf("StartLdapsServer() failed, err = %s", err.Error())
return
}
secureConn := func(s *ldap.Server) {
s.Listener = tls.NewListener(s.Listener, config)
}
err = serverSsl.ListenAndServe("0.0.0.0:"+ldapsServerPort, secureConn)
if err != nil {
log.Printf("StartLdapsServer() failed, err = %s", err.Error())
}
}()
}
func getTLSconfig(ldapsCertId string) (*tls.Config, error) {
rawCert, err := object.GetCert(ldapsCertId)
if err != nil {
log.Printf("StartLdapServer() failed, err = %s", err.Error())
return nil, err
}
if rawCert == nil {
return nil, fmt.Errorf("cert is empty")
}
cert, err := tls.X509KeyPair([]byte(rawCert.Certificate), []byte(rawCert.PrivateKey))
if err != nil {
return &tls.Config{}, err
}
return &tls.Config{
MinVersion: tls.VersionTLS10,
MaxVersion: tls.VersionTLS13,
Certificates: []tls.Certificate{cert},
}, nil
}
func handleBind(w ldap.ResponseWriter, m *ldap.Message) {

View File

@ -273,7 +273,7 @@ func CheckPasswordComplexity(user *User, password string) string {
return CheckPasswordComplexityByOrg(organization, password)
}
func checkLdapUserPassword(user *User, password string, lang string) error {
func CheckLdapUserPassword(user *User, password string, lang string) error {
ldaps, err := GetLdaps(user.Owner)
if err != nil {
return err
@ -368,7 +368,7 @@ func CheckUserPassword(organization string, username string, password string, la
}
// only for LDAP users
err = checkLdapUserPassword(user, password, lang)
err = CheckLdapUserPassword(user, password, lang)
if err != nil {
if err.Error() == "user not exist" {
return nil, fmt.Errorf(i18n.Translate(lang, "check:The user: %s doesn't exist in LDAP server"), username)

View File

@ -19,234 +19,81 @@ import (
"time"
)
type Dashboard struct {
OrganizationCounts []int `json:"organizationCounts"`
UserCounts []int `json:"userCounts"`
ProviderCounts []int `json:"providerCounts"`
ApplicationCounts []int `json:"applicationCounts"`
SubscriptionCounts []int `json:"subscriptionCounts"`
RoleCounts []int `json:"roleCounts"`
GroupCounts []int `json:"groupCounts"`
ResourceCounts []int `json:"resourceCounts"`
CertCounts []int `json:"certCounts"`
PermissionCounts []int `json:"permissionCounts"`
TransactionCounts []int `json:"transactionCounts"`
type DashboardDateItem struct {
CreatedTime string `json:"createTime"`
}
func GetDashboard(owner string) (*Dashboard, error) {
type DashboardMapItem struct {
dashboardDateItems []DashboardDateItem
itemCount int64
}
func GetDashboard(owner string) (*map[string][]int64, error) {
if owner == "All" {
owner = ""
}
dashboard := &Dashboard{
OrganizationCounts: make([]int, 31),
UserCounts: make([]int, 31),
ProviderCounts: make([]int, 31),
ApplicationCounts: make([]int, 31),
SubscriptionCounts: make([]int, 31),
RoleCounts: make([]int, 31),
GroupCounts: make([]int, 31),
ResourceCounts: make([]int, 31),
CertCounts: make([]int, 31),
PermissionCounts: make([]int, 31),
TransactionCounts: make([]int, 31),
dashboard := make(map[string][]int64)
dashboardMap := sync.Map{}
tableNames := []string{"organization", "user", "provider", "application", "subscription", "role", "group", "resource", "cert", "permission", "transaction", "model", "adapter", "enforcer"}
time30day := time.Now().AddDate(0, 0, -30)
var wg sync.WaitGroup
var err error
wg.Add(len(tableNames))
for _, tableName := range tableNames {
dashboard[tableName+"Counts"] = make([]int64, 31)
tableName := tableName
go func() {
defer wg.Done()
dashboardDateItems := []DashboardDateItem{}
var countResult int64
dbQueryBefore := ormer.Engine.Cols("created_time")
dbQueryAfter := ormer.Engine.Cols("created_time")
if owner != "" {
dbQueryAfter = dbQueryAfter.And("owner = ?", owner)
dbQueryBefore = dbQueryBefore.And("owner = ?", owner)
}
if countResult, err = dbQueryBefore.And("created_time < ?", time30day).Table(tableName).Count(); err != nil {
panic(err)
}
if err = dbQueryAfter.And("created_time >= ?", time30day).Table(tableName).Find(&dashboardDateItems); err != nil {
panic(err)
}
dashboardMap.Store(tableName, DashboardMapItem{
dashboardDateItems: dashboardDateItems,
itemCount: countResult,
})
}()
}
organizations := []Organization{}
users := []User{}
providers := []Provider{}
applications := []Application{}
subscriptions := []Subscription{}
roles := []Role{}
groups := []Group{}
resources := []Resource{}
certs := []Cert{}
permissions := []Permission{}
transactions := []Transaction{}
var wg sync.WaitGroup
wg.Add(11)
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&organizations, &Organization{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&users, &User{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&providers, &Provider{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&applications, &Application{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&subscriptions, &Subscription{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&roles, &Role{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&groups, &Group{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&resources, &Resource{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&certs, &Cert{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&permissions, &Permission{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&transactions, &Transaction{Owner: owner}); err != nil {
panic(err)
}
}()
wg.Wait()
nowTime := time.Now()
for i := 30; i >= 0; i-- {
cutTime := nowTime.AddDate(0, 0, -i)
dashboard.OrganizationCounts[30-i] = countCreatedBefore(organizations, cutTime)
dashboard.UserCounts[30-i] = countCreatedBefore(users, cutTime)
dashboard.ProviderCounts[30-i] = countCreatedBefore(providers, cutTime)
dashboard.ApplicationCounts[30-i] = countCreatedBefore(applications, cutTime)
dashboard.SubscriptionCounts[30-i] = countCreatedBefore(subscriptions, cutTime)
dashboard.RoleCounts[30-i] = countCreatedBefore(roles, cutTime)
dashboard.GroupCounts[30-i] = countCreatedBefore(groups, cutTime)
dashboard.ResourceCounts[30-i] = countCreatedBefore(resources, cutTime)
dashboard.CertCounts[30-i] = countCreatedBefore(certs, cutTime)
dashboard.PermissionCounts[30-i] = countCreatedBefore(permissions, cutTime)
dashboard.TransactionCounts[30-i] = countCreatedBefore(transactions, cutTime)
for _, tableName := range tableNames {
item, exist := dashboardMap.Load(tableName)
if !exist {
continue
}
dashboard[tableName+"Counts"][30-i] = countCreatedBefore(item.(DashboardMapItem), cutTime)
}
}
return dashboard, nil
return &dashboard, nil
}
func countCreatedBefore(objects interface{}, before time.Time) int {
count := 0
switch obj := objects.(type) {
case []Organization:
for _, o := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", o.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []User:
for _, u := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", u.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Provider:
for _, p := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", p.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Application:
for _, a := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", a.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Subscription:
for _, s := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", s.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Role:
for _, r := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", r.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Group:
for _, g := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", g.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Resource:
for _, r := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", r.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Cert:
for _, c := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", c.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Permission:
for _, p := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", p.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Transaction:
for _, t := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", t.CreatedTime)
if createdTime.Before(before) {
count++
}
func countCreatedBefore(dashboardMapItem DashboardMapItem, before time.Time) int64 {
count := dashboardMapItem.itemCount
for _, e := range dashboardMapItem.dashboardDateItems {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", e.CreatedTime)
if createdTime.Before(before) {
count++
}
}
return count

View File

@ -20,9 +20,11 @@ import (
"strings"
"github.com/casdoor/casdoor/conf"
"github.com/casdoor/casdoor/i18n"
"github.com/casdoor/casdoor/util"
goldap "github.com/go-ldap/ldap/v3"
"github.com/thanhpk/randstr"
"golang.org/x/text/encoding/unicode"
)
type LdapConn struct {
@ -371,6 +373,64 @@ func GetExistUuids(owner string, uuids []string) ([]string, error) {
return existUuids, nil
}
func ResetLdapPassword(user *User, newPassword string, lang string) error {
ldaps, err := GetLdaps(user.Owner)
if err != nil {
return err
}
for _, ldapServer := range ldaps {
conn, err := ldapServer.GetLdapConn()
if err != nil {
continue
}
searchReq := goldap.NewSearchRequest(ldapServer.BaseDn, goldap.ScopeWholeSubtree, goldap.NeverDerefAliases,
0, 0, false, ldapServer.buildAuthFilterString(user), []string{}, nil)
searchResult, err := conn.Conn.Search(searchReq)
if err != nil {
conn.Close()
return err
}
if len(searchResult.Entries) == 0 {
conn.Close()
continue
}
if len(searchResult.Entries) > 1 {
conn.Close()
return fmt.Errorf(i18n.Translate(lang, "check:Multiple accounts with same uid, please check your ldap server"))
}
userDn := searchResult.Entries[0].DN
var pwdEncoded string
modifyPasswordRequest := goldap.NewModifyRequest(userDn, nil)
if conn.IsAD {
utf16 := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
pwdEncoded, err := utf16.NewEncoder().String("\"" + newPassword + "\"")
if err != nil {
conn.Close()
return err
}
modifyPasswordRequest.Replace("unicodePwd", []string{pwdEncoded})
modifyPasswordRequest.Replace("userAccountControl", []string{"512"})
} else {
pwdEncoded = newPassword
modifyPasswordRequest.Replace("userPassword", []string{pwdEncoded})
}
err = conn.Conn.Modify(modifyPasswordRequest)
if err != nil {
conn.Close()
return err
}
conn.Close()
}
return nil
}
func (ldapUser *LdapUser) buildLdapUserName(owner string) (string, error) {
user := User{}
uidWithNumber := fmt.Sprintf("%s_%s", ldapUser.Uid, ldapUser.UidNumber)

View File

@ -421,7 +421,7 @@ func FromProviderToIdpInfo(ctx *context.Context, provider *Provider) *idp.Provid
providerInfo.ClientId = provider.ClientId2
providerInfo.ClientSecret = provider.ClientSecret2
}
} else if provider.Type == "AzureAD" || provider.Type == "AzureADB2C" || provider.Type == "ADFS" || provider.Type == "Okta" {
} else if provider.Type == "ADFS" || provider.Type == "AzureAD" || provider.Type == "AzureADB2C" || provider.Type == "Casdoor" || provider.Type == "Okta" {
providerInfo.HostUrl = provider.Domain
}

View File

@ -33,7 +33,7 @@ var (
func init() {
logPostOnly = conf.GetConfigBool("logPostOnly")
passwordRegex = regexp.MustCompile("\"password\":\".+\"")
passwordRegex = regexp.MustCompile("\"password\":\"([^\"]*?)\"")
}
type Record struct {

View File

@ -22,6 +22,7 @@ import (
"encoding/xml"
"fmt"
"math/rand"
"strings"
"sync"
"time"
@ -184,6 +185,15 @@ func StoreCasTokenForProxyTicket(token *CasAuthenticationSuccess, targetService,
return proxyTicket
}
func escapeXMLText(input string) (string, error) {
var sb strings.Builder
err := xml.EscapeText(&sb, []byte(input))
if err != nil {
return "", err
}
return sb.String(), nil
}
func GenerateCasToken(userId string, service string) (string, error) {
user, err := GetUser(userId)
if err != nil {
@ -225,6 +235,11 @@ func GenerateCasToken(userId string, service string) (string, error) {
}
if value != "" {
if escapedValue, err := escapeXMLText(value); err != nil {
return "", err
} else {
value = escapedValue
}
authenticationSuccess.Attributes.UserAttributes.Attributes = append(authenticationSuccess.Attributes.UserAttributes.Attributes, &CasNamedAttribute{
Name: k,
Value: value,

View File

@ -504,7 +504,7 @@ func GetPasswordToken(application *Application, username string, password string
}
if user.Ldap != "" {
err = checkLdapUserPassword(user, password, "en")
err = CheckLdapUserPassword(user, password, "en")
} else {
err = CheckPassword(user, password, "en")
}

View File

@ -237,6 +237,7 @@ type MfaAccount struct {
AccountName string `xorm:"varchar(100)" json:"accountName"`
Issuer string `xorm:"varchar(100)" json:"issuer"`
SecretKey string `xorm:"varchar(100)" json:"secretKey"`
Origin string `xorm:"varchar(100)" json:"origin"`
}
type FaceId struct {
@ -679,6 +680,10 @@ func UpdateUser(id string, user *User, columns []string, isAdmin bool) (bool, er
user.Password = oldUser.Password
}
if user.Id != oldUser.Id && user.Id == "" {
user.Id = oldUser.Id
}
if user.Avatar != oldUser.Avatar && user.Avatar != "" && user.PermanentAvatar != "*" {
user.PermanentAvatar, err = getPermanentAvatarUrl(user.Owner, user.Name, user.Avatar, false)
if err != nil {

View File

@ -57,7 +57,7 @@ type VerificationRecord struct {
Receiver string `xorm:"varchar(100) index notnull" json:"receiver"`
Code string `xorm:"varchar(10) notnull" json:"code"`
Time int64 `xorm:"notnull" json:"time"`
IsUsed bool
IsUsed bool `xorm:"notnull" json:"isUsed"`
}
func IsAllowSend(user *User, remoteAddr, recordType string) error {

21
storage/cucloud_oss.go Normal file
View File

@ -0,0 +1,21 @@
package storage
import (
awss3 "github.com/aws/aws-sdk-go/service/s3"
"github.com/casdoor/oss"
"github.com/casdoor/oss/s3"
)
func NewCUCloudOssStorageProvider(clientId string, clientSecret string, region string, bucket string, endpoint string) oss.StorageInterface {
sp := s3.New(&s3.Config{
AccessID: clientId,
AccessKey: clientSecret,
Region: region,
Bucket: bucket,
Endpoint: endpoint,
S3Endpoint: endpoint,
ACL: awss3.BucketCannedACLPublicRead,
})
return sp
}

View File

@ -23,7 +23,10 @@ func GetStorageProvider(providerType string, clientId string, clientSecret strin
case "AWS S3":
return NewAwsS3StorageProvider(clientId, clientSecret, region, bucket, endpoint), nil
case "MinIO":
return NewMinIOS3StorageProvider(clientId, clientSecret, "_", bucket, endpoint), nil
if region == "" {
region = "_"
}
return NewMinIOS3StorageProvider(clientId, clientSecret, region, bucket, endpoint), nil
case "Aliyun OSS":
return NewAliyunOssStorageProvider(clientId, clientSecret, region, bucket, endpoint), nil
case "Tencent Cloud COS":
@ -38,6 +41,8 @@ func GetStorageProvider(providerType string, clientId string, clientSecret strin
return NewSynologyNasStorageProvider(clientId, clientSecret, endpoint), nil
case "Casdoor":
return NewCasdoorStorageProvider(providerType, clientId, clientSecret, region, bucket, endpoint, cert, content), nil
case "CUCloud OSS":
return NewCUCloudOssStorageProvider(clientId, clientSecret, region, bucket, endpoint), nil
}
return nil, nil

View File

@ -308,7 +308,7 @@ class App extends Component {
AI Assistant
</a>
</Tooltip>
<a className="custom-link" style={{float: "right", marginTop: "2px"}} target="_blank" rel="noreferrer" href={"https://ai.casbin.com"}>
<a className="custom-link" style={{float: "right", marginTop: "2px"}} target="_blank" rel="noreferrer" href={`${Conf.AiAssistantUrl}`}>
<ShareAltOutlined className="custom-link" style={{fontSize: "20px", color: "rgb(140,140,140)"}} />
</a>
<a className="custom-link" style={{float: "right", marginRight: "30px", marginTop: "2px"}} target="_blank" rel="noreferrer" href={"https://github.com/casibase/casibase"}>
@ -326,7 +326,7 @@ class App extends Component {
}}
visible={this.state.isAiAssistantOpen}
>
<iframe id="iframeHelper" title={"iframeHelper"} src={"https://ai.casbin.com/?isRaw=1"} width="100%" height="100%" scrolling="no" frameBorder="no" />
<iframe id="iframeHelper" title={"iframeHelper"} src={`${Conf.AiAssistantUrl}/?isRaw=1`} width="100%" height="100%" scrolling="no" frameBorder="no" />
</Drawer>
);
}

View File

@ -19,6 +19,7 @@ import "codemirror/mode/properties/properties";
import * as Setting from "./Setting";
import IframeEditor from "./IframeEditor";
import {Tabs} from "antd";
import i18next from "i18next";
const {TabPane} = Tabs;
@ -68,8 +69,8 @@ const CasbinEditor = ({model, onModelTextChange}) => {
return (
<div style={{height: "100%", width: "100%", display: "flex", flexDirection: "column"}}>
<Tabs activeKey={activeKey} onChange={handleTabChange} style={{flex: "0 0 auto", marginTop: "-10px"}}>
<TabPane tab="Basic Editor" key="basic" />
<TabPane tab="Advanced Editor" key="advanced" />
<TabPane tab={i18next.t("model:Basic Editor")} key="basic" />
<TabPane tab={i18next.t("model:Advanced Editor")} key="advanced" />
</Tabs>
<div style={{flex: "1 1 auto", overflow: "hidden"}}>
{activeKey === "advanced" ? (

View File

@ -31,3 +31,6 @@ export const ThemeDefault = {
};
export const CustomFooter = null;
// Blank or null to hide Ai Assistant button
export const AiAssistantUrl = "https://ai.casbin.com";

View File

@ -17,6 +17,7 @@ import React, {forwardRef, useEffect, useImperativeHandle, useRef, useState} fro
const IframeEditor = forwardRef(({initialModelText, onModelTextChange}, ref) => {
const iframeRef = useRef(null);
const [iframeReady, setIframeReady] = useState(false);
const currentLang = localStorage.getItem("language") || "en";
useEffect(() => {
const handleMessage = (event) => {
@ -26,24 +27,31 @@ const IframeEditor = forwardRef(({initialModelText, onModelTextChange}, ref) =>
onModelTextChange(event.data.modelText);
} else if (event.data.type === "iframeReady") {
setIframeReady(true);
iframeRef.current?.contentWindow.postMessage({
type: "initializeModel",
modelText: initialModelText,
}, "*");
if (initialModelText && iframeRef.current?.contentWindow) {
iframeRef.current.contentWindow.postMessage({
type: "initializeModel",
modelText: initialModelText,
lang: currentLang,
}, "*");
}
}
};
window.addEventListener("message", handleMessage);
return () => window.removeEventListener("message", handleMessage);
}, [onModelTextChange, initialModelText]);
}, [onModelTextChange, initialModelText, currentLang]);
useImperativeHandle(ref, () => ({
getModelText: () => {
iframeRef.current?.contentWindow.postMessage({type: "getModelText"}, "*");
if (iframeRef.current?.contentWindow) {
iframeRef.current.contentWindow.postMessage({
type: "getModelText",
}, "*");
}
},
updateModelText: (newModelText) => {
if (iframeReady) {
iframeRef.current?.contentWindow.postMessage({
if (iframeReady && iframeRef.current?.contentWindow) {
iframeRef.current.contentWindow.postMessage({
type: "updateModelText",
modelText: newModelText,
}, "*");
@ -54,7 +62,7 @@ const IframeEditor = forwardRef(({initialModelText, onModelTextChange}, ref) =>
return (
<iframe
ref={iframeRef}
src="https://editor.casbin.org/model-editor"
src={`https://editor.casbin.org/model-editor?lang=${currentLang}`}
frameBorder="0"
width="100%"
height="500px"

View File

@ -192,11 +192,15 @@ function ManagementPage(props) {
themeAlgorithm={props.themeAlgorithm}
onChange={props.setLogoAndThemeAlgorithm} />
<LanguageSelect languages={props.account.organization.languages} />
<Tooltip title="Click to open AI assitant">
<div className="select-box" onClick={props.openAiAssistant}>
<DeploymentUnitOutlined style={{fontSize: "24px"}} />
</div>
</Tooltip>
{
Conf.AiAssistantUrl?.trim() && (
<Tooltip title="Click to open AI assistant">
<div className="select-box" onClick={props.openAiAssistant}>
<DeploymentUnitOutlined style={{fontSize: "24px"}} />
</div>
</Tooltip>
)
}
<OpenTour />
{Setting.isAdminUser(props.account) && (props.uri.indexOf("/trees") === -1) &&
<OrganizationSelect

View File

@ -932,7 +932,7 @@ class ProviderEditPage extends React.Component {
</Col>
</Row>
) : null}
{["AWS S3", "Tencent Cloud COS", "Qiniu Cloud Kodo", "Casdoor"].includes(this.state.provider.type) ? (
{["AWS S3", "Tencent Cloud COS", "Qiniu Cloud Kodo", "Casdoor", "CUCloud OSS", "MinIO"].includes(this.state.provider.type) ? (
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={2}>
{["Casdoor"].includes(this.state.provider.type) ?

View File

@ -233,6 +233,10 @@ export const OtherProviderInfo = {
logo: `${StaticBaseUrl}/img/casdoor.png`,
url: "https://casdoor.org/docs/provider/storage/overview",
},
"CUCloud OSS": {
logo: `${StaticBaseUrl}/img/social_cucloud.png`,
url: "https://www.cucloud.cn/product/oss.html",
},
},
SAML: {
"Aliyun IDaaS": {
@ -920,7 +924,7 @@ export function getClickable(text) {
return (
<a onClick={() => {
copy(text);
showMessage("success", "Copied to clipboard");
showMessage("success", i18next.t("general:Copied to clipboard successfully"));
}}>
{text}
</a>
@ -1078,6 +1082,7 @@ export function getProviderTypeOptions(category) {
{id: "Google Cloud Storage", name: "Google Cloud Storage"},
{id: "Synology", name: "Synology"},
{id: "Casdoor", name: "Casdoor"},
{id: "CUCloud OSS", name: "CUCloud OSS"},
]
);
} else if (category === "SAML") {
@ -1171,7 +1176,7 @@ export function renderLogo(application) {
function isSigninMethodEnabled(application, signinMethod) {
if (application && application.signinMethods) {
return application.signinMethods.filter(item => item.name === signinMethod && item.rule !== "Hide-Password").length > 0;
return application.signinMethods.filter(item => item.name === signinMethod && item.rule !== "Hide password").length > 0;
} else {
return false;
}
@ -1550,25 +1555,25 @@ export function getDefaultHtmlEmailContent() {
export function getCurrencyText(product) {
if (product?.currency === "USD") {
return i18next.t("product:USD");
return i18next.t("currency:USD");
} else if (product?.currency === "CNY") {
return i18next.t("product:CNY");
return i18next.t("currency:CNY");
} else if (product?.currency === "EUR") {
return i18next.t("product:EUR");
return i18next.t("currency:EUR");
} else if (product?.currency === "JPY") {
return i18next.t("product:JPY");
return i18next.t("currency:JPY");
} else if (product?.currency === "GBP") {
return i18next.t("product:GBP");
return i18next.t("currency:GBP");
} else if (product?.currency === "AUD") {
return i18next.t("product:AUD");
return i18next.t("currency:AUD");
} else if (product?.currency === "CAD") {
return i18next.t("product:CAD");
return i18next.t("currency:CAD");
} else if (product?.currency === "CHF") {
return i18next.t("product:CHF");
return i18next.t("currency:CHF");
} else if (product?.currency === "HKD") {
return i18next.t("product:HKD");
return i18next.t("currency:HKD");
} else if (product?.currency === "SGD") {
return i18next.t("product:SGD");
return i18next.t("currency:SGD");
} else {
return "(Unknown currency)";
}

View File

@ -1150,7 +1150,7 @@ class LoginPage extends React.Component {
]);
application?.signinMethods?.forEach((signinMethod) => {
if (signinMethod.rule === "Hide-Password") {
if (signinMethod.rule === "Hide password") {
return;
}
const item = itemsMap.get(generateItemKey(signinMethod.name, signinMethod.rule));

View File

@ -13,7 +13,6 @@
// limitations under the License.
import CryptoJS from "crypto-js";
import i18next from "i18next";
import {Buffer} from "buffer";
export function getRandomKeyForObfuscator(obfuscatorType) {
@ -46,17 +45,17 @@ function encrypt(cipher, key, iv, password) {
export function checkPasswordObfuscator(passwordObfuscatorType, passwordObfuscatorKey) {
if (passwordObfuscatorType === undefined) {
return i18next.t("organization:failed to get password obfuscator");
return "passwordObfuscatorType should not be undefined";
} else if (passwordObfuscatorType === "Plain" || passwordObfuscatorType === "") {
return "";
} else if (passwordObfuscatorType === "AES" || passwordObfuscatorType === "DES") {
if (passwordObfuscatorKeyRegexes[passwordObfuscatorType].test(passwordObfuscatorKey)) {
return "";
} else {
return `${i18next.t("organization:The password obfuscator key doesn't match the regex")}: ${passwordObfuscatorKeyRegexes[passwordObfuscatorType].source}`;
return `The password obfuscator key doesn't match the regex: ${passwordObfuscatorKeyRegexes[passwordObfuscatorType].source}`;
}
} else {
return `${i18next.t("organization:unsupported password obfuscator type")}: ${passwordObfuscatorType}`;
return `unsupported password obfuscator type: ${passwordObfuscatorType}`;
}
}

View File

@ -141,6 +141,9 @@ const Dashboard = (props) => {
i18next.t("general:Certs"),
i18next.t("general:Permissions"),
i18next.t("general:Transactions"),
i18next.t("general:Models"),
i18next.t("general:Adapters"),
i18next.t("general:Enforcers"),
], top: "10%"},
grid: {left: "3%", right: "4%", bottom: "0", top: "25%", containLabel: true},
xAxis: {type: "category", boundaryGap: false, data: dateArray},
@ -157,6 +160,9 @@ const Dashboard = (props) => {
{name: i18next.t("general:Certs"), type: "line", data: dashboardData.certCounts},
{name: i18next.t("general:Permissions"), type: "line", data: dashboardData.permissionCounts},
{name: i18next.t("general:Transactions"), type: "line", data: dashboardData.transactionCounts},
{name: i18next.t("general:Models"), type: "line", data: dashboardData.modelCounts},
{name: i18next.t("general:Adapters"), type: "line", data: dashboardData.adapterCounts},
{name: i18next.t("general:Enforcers"), type: "line", data: dashboardData.enforcerCounts},
],
};
myChart.setOption(option);

View File

@ -14,6 +14,7 @@
import React from "react";
import {Alert, Button, QRCode} from "antd";
import copy from "copy-to-clipboard";
import * as Setting from "../Setting";
import i18next from "i18next";
@ -62,12 +63,8 @@ export const CasdoorAppUrl = ({accessToken}) => {
return;
}
try {
await navigator.clipboard.writeText(qrUrl);
Setting.showMessage("success", i18next.t("general:Copied to clipboard"));
} catch (err) {
Setting.showMessage("error", i18next.t("general:Failed to copy"));
}
copy(qrUrl);
Setting.showMessage("success", i18next.t("general:Copied to clipboard successfully"));
};
if (error) {
@ -82,14 +79,9 @@ export const CasdoorAppUrl = ({accessToken}) => {
alignItems: "center",
marginBottom: "10px",
}}>
<span>{i18next.t("general:URL String")}</span>
{window.isSecureContext && (
<Button
size="small"
onClick={handleCopyUrl}
style={{marginLeft: "10px"}}
>
{i18next.t("general:Copy URL")}
<Button size="small" type="primary" onClick={handleCopyUrl} style={{marginLeft: "10px"}}>
{i18next.t("resource:Copy Link")}
</Button>
)}
</div>

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Odesílání",
"Submit and complete": "Odeslat a dokončit"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Upravit Enforcer",
"New Enforcer": "Nový Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Přejít na zapisovatelnou demo stránku?",
"Groups": "Skupiny",
"Groups - Tooltip": "Skupiny - Tooltip",
"Hide password": "Hide password",
"Home": "Domů",
"Home - Tooltip": "Domovská stránka aplikace",
"ID": "ID",
"ID - Tooltip": "Unikátní náhodný řetězec",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identita",
"Invitations": "Pozvánky",
"Is enabled": "Je povoleno",
@ -312,6 +327,10 @@
"Password - Tooltip": "Ujistěte se, že heslo je správné",
"Password complexity options": "Možnosti složitosti hesla",
"Password complexity options - Tooltip": "Různé kombinace možností složitosti hesla",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Heslová sůl",
"Password salt - Tooltip": "Náhodný parametr použitý pro šifrování hesla",
"Password type": "Typ hesla",
@ -559,7 +578,6 @@
"Use SMS": "Použít SMS",
"Use SMS verification code": "Použít ověřovací kód SMS",
"Use a recovery code": "Použít obnovovací kód",
"Verification failed": "Ověření selhalo",
"Verify Code": "Ověřit kód",
"Verify Password": "Ověřit heslo",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Pokročilý editor",
"Basic Editor": "Základní editor",
"Edit Model": "Upravit model",
"Model text": "Text modelu",
"Model text - Tooltip": "Casbin model řízení přístupu, včetně vestavěných modelů jako ACL, RBAC, ABAC, RESTful, atd. Můžete také vytvářet vlastní modely. Pro více informací navštivte webové stránky Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Upravit pravidlo",
"New Organization": "Nová organizace",
"Optional": "Volitelný",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Výzva",
"Required": "Povinné",
"Soft deletion": "Měkké smazání",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Koupit",
"Buy Product": "Koupit produkt",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail produktu",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Testovací stránka nákupu..",
"There is no payment channel for this product.": "Pro tento produkt neexistuje žádný platební kanál.",
"This product is currently not in sale.": "Tento produkt není momentálně v prodeji.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Upravit HTML pro registraci",
"Signup HTML - Tooltip": "Vlastní HTML pro nahrazení výchozího stylu registrační stránky",
"Signup group": "Skupina pro registraci",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Tiché",
"Site key": "Klíč stránky",
"Site key - Tooltip": "Nápověda ke klíči stránky",
@ -1157,6 +1178,7 @@
"Keys": "Klíče",
"Language": "Jazyk",
"Language - Tooltip": "Jazyk - Nápověda",
"Last change password time": "Last change password time",
"Link": "Odkaz",
"Location": "Místo",
"Location - Tooltip": "Město bydliště",

View File

@ -161,6 +161,18 @@
"Sending": "Sendet",
"Submit and complete": "Einreichen und abschließen"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Gehe zur beschreibbaren Demo-Website?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Zuhause",
"Home - Tooltip": "Homepage der Anwendung",
"ID": "ID",
"ID - Tooltip": "Einzigartiger Zufallsstring",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Ist aktiviert",
@ -312,6 +327,10 @@
"Password - Tooltip": "Stellen Sie sicher, dass das Passwort korrekt ist",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Passwort-Salt",
"Password salt - Tooltip": "Zufälliger Parameter, der für die Verschlüsselung von Passwörtern verwendet wird",
"Password type": "Passworttyp",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Erweiterter Editor",
"Basic Editor": "Basis-Editor",
"Edit Model": "Modell bearbeiten",
"Model text": "Modelltext",
"Model text - Tooltip": "Casbin Zugriffskontrollmodell inklusive integrierter Modelle wie ACL, RBAC, ABAC, RESTful, usw. Sie können auch benutzerdefinierte Modelle erstellen. Weitere Informationen finden Sie auf der Casbin-Website",
@ -592,6 +612,8 @@
"Modify rule": "Regel ändern",
"New Organization": "Neue Organisation",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Softe Löschung",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Kaufen",
"Buy Product": "Produkt kaufen",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail des Produkts",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Testkaufseite.",
"There is no payment channel for this product.": "Es gibt keinen Zahlungskanal für dieses Produkt.",
"This product is currently not in sale.": "Dieses Produkt steht derzeit nicht zum Verkauf.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Registrierung HTML - Bearbeiten",
"Signup HTML - Tooltip": "Benutzerdefiniertes HTML zur Ersetzung des Standard-Registrierungs-Seitenstils",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site-Key",
"Site key - Tooltip": "Seitenschlüssel",
@ -1157,6 +1178,7 @@
"Keys": "Schlüssel",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Ort",
"Location - Tooltip": "Stadt des Wohnsitzes",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,16 +761,7 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay",
"EUR": "EUR",
"JPY": "JPY",
"GBP": "GBP",
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"HKD": "HKD",
"SGD": "SGD"
"WeChat Pay": "WeChat Pay"
},
"provider": {
"Access key": "Access key",
@ -901,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1165,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Envío",
"Submit and complete": "Enviar y completar"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "¿Ir al sitio demo editable?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Hogar",
"Home - Tooltip": "Página de inicio de la aplicación",
"ID": "identificación",
"ID - Tooltip": "Cadena aleatoria única",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Está habilitado",
@ -312,6 +327,10 @@
"Password - Tooltip": "Asegúrate de que la contraseña sea correcta",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Sal de contraseña",
"Password salt - Tooltip": "Parámetro aleatorio utilizado para la encriptación de contraseñas",
"Password type": "Tipo de contraseña",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Editor avanzado",
"Basic Editor": "Editor básico",
"Edit Model": "Editar modelo",
"Model text": "Texto modelo",
"Model text - Tooltip": "Modelo de control de acceso Casbin, incluyendo modelos integrados como ACL, RBAC, ABAC, RESTful, etc. También puede crear modelos personalizados. Para obtener más información, visite el sitio web de Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Modificar regla",
"New Organization": "Nueva organización",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Eliminación suave",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Comprar",
"Buy Product": "Comprar producto",
"CNY": "Año Nuevo Chino (ANC)",
"Detail": "Detalle",
"Detail - Tooltip": "Detalle del producto",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Página de compra de prueba.",
"There is no payment channel for this product.": "No hay canal de pago para este producto.",
"This product is currently not in sale.": "Este producto actualmente no está a la venta.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Registro HTML - Editar",
"Signup HTML - Tooltip": "HTML personalizado para reemplazar el estilo predeterminado de la página de registro",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Clave del sitio",
"Site key - Tooltip": "Clave del sitio",
@ -1157,6 +1178,7 @@
"Keys": "Claves",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Enlace",
"Location": "Ubicación",
"Location - Tooltip": "Ciudad de residencia",

View File

@ -81,7 +81,7 @@
"Only signup": "فقط ثبت‌نام",
"Org choice mode": "حالت انتخاب سازمان",
"Org choice mode - Tooltip": "حالت انتخاب سازمان - راهنمای ابزار",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "لطفاً قبل از فعال‌سازی \"ورود خودکار\"، ابتدا \"جلسه ورود\" را فعال کنید",
"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 organization!": "لطفاً سازمان خود را وارد کنید!",
"Please select a HTML file": "لطفاً یک فایل HTML انتخاب کنید",
@ -161,6 +161,18 @@
"Sending": "در حال ارسال",
"Submit and complete": "ارسال و تکمیل"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "ویرایش Enforcer",
"New Enforcer": "Enforcer جدید"
@ -266,10 +278,13 @@
"Go to writable demo site?": "به سایت دمو قابل نوشتن بروید؟",
"Groups": "گروه‌ها",
"Groups - Tooltip": "گروه‌ها - راهنمای ابزار",
"Hide password": "Hide password",
"Home": "خانه",
"Home - Tooltip": "صفحه اصلی برنامه",
"ID": "شناسه",
"ID - Tooltip": "رشته تصادفی منحصربه‌فرد",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "هویت",
"Invitations": "دعوت‌ها",
"Is enabled": "فعال است",
@ -312,6 +327,10 @@
"Password - Tooltip": "مطمئن شوید که رمز عبور صحیح است",
"Password complexity options": "گزینه‌های پیچیدگی رمز عبور",
"Password complexity options - Tooltip": "ترکیبات مختلف گزینه‌های پیچیدگی رمز عبور",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "نمک رمز عبور",
"Password salt - Tooltip": "پارامتر تصادفی مورد استفاده برای رمزگذاری رمز عبور",
"Password type": "نوع رمز عبور",
@ -559,7 +578,6 @@
"Use SMS": "استفاده از پیامک",
"Use SMS verification code": "استفاده از کد تأیید پیامک",
"Use a recovery code": "استفاده از کد بازیابی",
"Verification failed": "تأیید ناموفق بود",
"Verify Code": "تأیید کد",
"Verify Password": "تأیید رمز عبور",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "شما احراز هویت چندعاملی را فعال کرده‌اید، لطفاً برای ادامه روی 'ارسال کد' کلیک کنید",
@ -574,6 +592,8 @@
"Secret Key": "کلید مخفی"
},
"model": {
"Advanced Editor": "ویرایشگر پیشرفته",
"Basic Editor": "ویرایشگر ابتدایی",
"Edit Model": "ویرایش مدل",
"Model text": "متن مدل",
"Model text - Tooltip": "مدل کنترل دسترسی Casbin، شامل مدل‌های داخلی مانند ACL، RBAC، ABAC، RESTful و غیره. همچنین می‌توانید مدل‌های سفارشی ایجاد کنید. برای اطلاعات بیشتر، لطفاً به وب‌سایت Casbin مراجعه کنید",
@ -592,6 +612,8 @@
"Modify rule": "قانون اصلاح",
"New Organization": "سازمان جدید",
"Optional": "اختیاری",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "اعلان",
"Required": "الزامی",
"Soft deletion": "حذف نرم",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "خرید",
"Buy Product": "خرید محصول",
"CNY": "یوان چین",
"Detail": "جزئیات",
"Detail - Tooltip": "جزئیات محصول",
"Dummy": "فرضی",
@ -740,7 +761,6 @@
"Test buy page..": "صفحه تست خرید..",
"There is no payment channel for this product.": "برای این محصول کانال پرداختی وجود ندارد.",
"This product is currently not in sale.": "این محصول در حال حاضر در فروش نیست.",
"USD": "دلار آمریکا",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "ویرایش HTML ثبت‌نام",
"Signup HTML - Tooltip": "HTML سفارشی برای جایگزینی سبک صفحه ثبت‌نام پیش‌فرض",
"Signup group": "گروه ثبت‌نام",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "بی‌صدا",
"Site key": "کلید سایت",
"Site key - Tooltip": "کلید سایت",
@ -1157,6 +1178,7 @@
"Keys": "کلیدها",
"Language": "زبان",
"Language - Tooltip": "زبان - راهنمای ابزار",
"Last change password time": "Last change password time",
"Link": "اتصال",
"Location": "مکان",
"Location - Tooltip": "شهر محل سکونت",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Envoi en cours",
"Submit and complete": "Soumettre et compléter"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Éditer l'exécuteur",
"New Enforcer": "Ajouter un exécuteur"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Allez sur le site de démonstration modifiable ?",
"Groups": "Groupes",
"Groups - Tooltip": "Groupes - infobulle",
"Hide password": "Hide password",
"Home": "Accueil",
"Home - Tooltip": "Page d'accueil de l'application",
"ID": "ID",
"ID - Tooltip": "Chaîne unique aléatoire",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identité",
"Invitations": "Invitations",
"Is enabled": "Est activé",
@ -312,6 +327,10 @@
"Password - Tooltip": "Assurez-vous que le mot de passe soit correct",
"Password complexity options": "Options de complexité du mot de passe",
"Password complexity options - Tooltip": "Différentes combinaisons d'options de complexité de mot de passe",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Sel de mot de passe",
"Password salt - Tooltip": "Paramètre aléatoire utilisé pour le chiffrement des mots de passe",
"Password type": "Type de mot de passe",
@ -559,7 +578,6 @@
"Use SMS": "Utiliser les SMS",
"Use SMS verification code": "Utiliser la vérification par code SMS",
"Use a recovery code": "Utiliser un code de récupération",
"Verification failed": "Échec de la vérification",
"Verify Code": "Vérifier le code",
"Verify Password": "Confirmez le mot de passe",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Éditeur avancé",
"Basic Editor": "Éditeur de base",
"Edit Model": "Modifier le modèle",
"Model text": "Définition du modèle",
"Model text - Tooltip": "Modèle de contrôle d'accès Casbin, comprenant des modèles intégrés tels que ACL, RBAC, ABAC, RESTful, etc. Vous pouvez également créer des modèles personnalisés. Pour plus d'informations, veuillez visiter le site web de Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Règle de modification",
"New Organization": "Nouvelle organisation",
"Optional": "Optionnel",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Requis",
"Soft deletion": "Suppression douce",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Acheter",
"Buy Product": "Acheter un produit",
"CNY": "CNY",
"Detail": "Détail",
"Detail - Tooltip": "Détail du produit",
"Dummy": "Exemple",
@ -740,7 +761,6 @@
"Test buy page..": "Page d'achat de test.",
"There is no payment channel for this product.": "Il n'y a aucun canal de paiement pour ce produit.",
"This product is currently not in sale.": "Ce produit n'est actuellement pas en vente.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "HTML de la page d'inscription - Modifier",
"Signup HTML - Tooltip": "HTML personnalisé pour remplacer le style par défaut de la page d'inscription",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silencieux",
"Site key": "Clé de site",
"Site key - Tooltip": "Clé de site",
@ -1157,6 +1178,7 @@
"Keys": "Clés",
"Language": "Langue",
"Language - Tooltip": "Langue - Infobulle",
"Last change password time": "Last change password time",
"Link": "Lier",
"Location": "Localisation",
"Location - Tooltip": "Ville de résidence",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Mengirimkan",
"Submit and complete": "Kirim dan selesaikan"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Pergi ke situs demo yang dapat ditulis?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Rumah",
"Home - Tooltip": "Halaman utama aplikasi",
"ID": "ID",
"ID - Tooltip": "Karakter acak unik",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Diaktifkan",
@ -312,6 +327,10 @@
"Password - Tooltip": "Pastikan kata sandi yang benar",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Garam sandi",
"Password salt - Tooltip": "Parameter acak yang digunakan untuk enkripsi kata sandi",
"Password type": "Jenis kata sandi",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Editor lanjutan",
"Basic Editor": "Editor dasar",
"Edit Model": "Mengedit Model",
"Model text": "Teks Model",
"Model text - Tooltip": "Model kontrol akses Casbin, termasuk model bawaan seperti ACL, RBAC, ABAC, RESTful, dll. Anda juga dapat membuat model kustom. Untuk informasi lebih lanjut, silakan kunjungi situs web Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Mengubah aturan",
"New Organization": "Organisasi baru",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Penghapusan lunak",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Beli",
"Buy Product": "Beli Produk",
"CNY": "CNY",
"Detail": "Rincian",
"Detail - Tooltip": "Detail produk",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Halaman pembelian uji coba.",
"There is no payment channel for this product.": "Tidak ada saluran pembayaran untuk produk ini.",
"This product is currently not in sale.": "Produk ini saat ini tidak dijual.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Pendaftaran HTML - Sunting",
"Signup HTML - Tooltip": "HTML khusus untuk mengganti gaya halaman pendaftaran bawaan",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Kunci situs",
"Site key - Tooltip": "Kunci situs atau kunci halaman web",
@ -1157,6 +1178,7 @@
"Keys": "Kunci",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Tautan",
"Location": "Lokasi",
"Location - Tooltip": "Kota tempat tinggal",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "送信",
"Submit and complete": "提出して完了してください"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "書き込み可能なデモサイトに移動しますか?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "ホーム",
"Home - Tooltip": "アプリケーションのホームページ",
"ID": "ID",
"ID - Tooltip": "ユニークなランダム文字列",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "可能になっています",
@ -312,6 +327,10 @@
"Password - Tooltip": "パスワードが正しいことを確認してください",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "パスワードのソルト",
"Password salt - Tooltip": "ランダムパラメーターは、パスワードの暗号化に使用されます",
"Password type": "パスワードタイプ",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "編集モデル",
"Model text": "モデルテキスト",
"Model text - Tooltip": "Casbinのアクセス制御モデルには、ACL、RBAC、ABAC、RESTfulなどの組み込みモデルが含まれています。カスタムモデルも作成できます。詳細については、Casbinのウェブサイトをご覧ください",
@ -592,6 +612,8 @@
"Modify rule": "ルールを変更する",
"New Organization": "新しい組織",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "ソフト削除",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "購入",
"Buy Product": "製品を購入する",
"CNY": "CNY",
"Detail": "詳細",
"Detail - Tooltip": "製品の詳細",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "テスト購入ページ。",
"There is no payment channel for this product.": "この製品には支払いチャネルがありません。",
"This product is currently not in sale.": "この製品は現在販売されていません。",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "サインアップ HTML - 編集",
"Signup HTML - Tooltip": "デフォルトのサインアップページスタイルを置き換えるためのカスタムHTML",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "サイトキー",
"Site key - Tooltip": "サイトキー",
@ -1157,6 +1178,7 @@
"Keys": "鍵",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "リンク",
"Location": "場所",
"Location - Tooltip": "居住都市",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "전송하기",
"Submit and complete": "제출하고 완료하십시오"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "쓰기 가능한 데모 사이트로 이동하시겠습니까?",
"Groups": "그룹",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "집",
"Home - Tooltip": "어플리케이션 홈 페이지",
"ID": "ID",
"ID - Tooltip": "유일한 랜덤 문자열",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "활성화됩니다",
@ -312,6 +327,10 @@
"Password - Tooltip": "비밀번호가 올바른지 확인하세요",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "비밀번호 솔트",
"Password salt - Tooltip": "암호화에 사용되는 임의 매개변수",
"Password type": "암호 유형",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "고급 편집기",
"Basic Editor": "기본 편집기",
"Edit Model": "편집 형태 모델",
"Model text": "모델 텍스트",
"Model text - Tooltip": "Casbin 액세스 제어 모델은 ACL, RBAC, ABAC, RESTful 등의 내장된 모델을 포함하며 사용자 정의 모델도 만들 수 있습니다. 자세한 정보는 Casbin 웹 사이트를 방문하십시오",
@ -592,6 +612,8 @@
"Modify rule": "규칙 수정",
"New Organization": "새로운 조직",
"Optional": "선택사항",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "소프트 삭제",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "구매하다",
"Buy Product": "제품을 구입하세요",
"CNY": "CNY",
"Detail": "세부사항",
"Detail - Tooltip": "제품의 세부사항",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "시험 구매 페이지.",
"There is no payment channel for this product.": "이 제품에 대한 결제 채널이 없습니다.",
"This product is currently not in sale.": "이 제품은 현재 판매되지 않고 있습니다.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "가입 HTML - 수정",
"Signup HTML - Tooltip": "기본 가입 페이지 스타일을 바꾸기 위한 사용자 지정 HTML",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "사이트 키",
"Site key - Tooltip": "사이트 키",
@ -1157,6 +1178,7 @@
"Keys": "열쇠",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "링크",
"Location": "장소",
"Location - Tooltip": "거주 도시",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Enviando",
"Submit and complete": "Enviar e concluir"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Editar Executor",
"New Enforcer": "Novo Executor"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Acessar o site de demonstração gravável?",
"Groups": "Grupos",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Página Inicial",
"Home - Tooltip": "Página inicial do aplicativo",
"ID": "ID",
"ID - Tooltip": "String única aleatória",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identidade",
"Invitations": "Invitations",
"Is enabled": "Está habilitado",
@ -312,6 +327,10 @@
"Password - Tooltip": "Certifique-se de que a senha está correta",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Salt de senha",
"Password salt - Tooltip": "Parâmetro aleatório usado para criptografia de senha",
"Password type": "Tipo de senha",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Editor Avançado",
"Basic Editor": "Editor Básico",
"Edit Model": "Editar Modelo",
"Model text": "Texto do Modelo",
"Model text - Tooltip": "Modelo de controle de acesso Casbin, incluindo modelos incorporados como ACL, RBAC, ABAC, RESTful, etc. Você também pode criar modelos personalizados. Para obter mais informações, visite o site do Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Modificar regra",
"New Organization": "Nova Organização",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Exclusão suave",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Comprar",
"Buy Product": "Comprar Produto",
"CNY": "CNY",
"Detail": "Detalhe",
"Detail - Tooltip": "Detalhes do produto",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Página de teste de compra...",
"There is no payment channel for this product.": "Não há canal de pagamento disponível para este produto.",
"This product is currently not in sale.": "Este produto não está disponível para venda no momento.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Editar HTML de inscrição",
"Signup HTML - Tooltip": "HTML personalizado para substituir o estilo padrão da página de inscrição",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silencioso",
"Site key": "Chave do site",
"Site key - Tooltip": "Chave do site",
@ -1157,6 +1178,7 @@
"Keys": "Chaves",
"Language": "Idioma",
"Language - Tooltip": "Idioma - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Localização",
"Location - Tooltip": "Cidade de residência",

View File

@ -161,6 +161,18 @@
"Sending": "Отправка",
"Submit and complete": "Отправить и завершить"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Редактировать контролёра доступа",
"New Enforcer": "Новый контролёр доступа"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Перейти на демонстрационный сайт для записи данных?",
"Groups": "Группы",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Дом",
"Home - Tooltip": "Главная страница приложения",
"ID": "ID",
"ID - Tooltip": "Уникальная случайная строка",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Включен",
@ -312,6 +327,10 @@
"Password - Tooltip": "Убедитесь, что пароль правильный",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Соль пароля",
"Password salt - Tooltip": "Случайный параметр, используемый для шифрования пароля",
"Password type": "Тип пароля",
@ -559,7 +578,6 @@
"Use SMS": "Использовать SMS",
"Use SMS verification code": "Использовать SMS код для проверки",
"Use a recovery code": "Использовать код восстановления",
"Verification failed": "Проверка не удалась",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Расширенный редактор",
"Basic Editor": "Базовый редактор",
"Edit Model": "Редактировать модель",
"Model text": "Модельный текст",
"Model text - Tooltip": "Модель контроля доступа Casbin, включая встроенные модели, такие как ACL, RBAC, ABAC, RESTful и т. д. Вы также можете создавать свои собственные модели. Для получения дополнительной информации, пожалуйста, посетите веб-сайт Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Изменить правило",
"New Organization": "Новая организация",
"Optional": "Опционально",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Мягкое удаление",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Купить",
"Buy Product": "Купить продукт",
"CNY": "CNY",
"Detail": "Деталь",
"Detail - Tooltip": "Деталь продукта",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Страница для тестовой покупки.",
"There is no payment channel for this product.": "Для этого продукта нет канала оплаты.",
"This product is currently not in sale.": "Этот продукт в настоящее время не продается.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Регистрационная форма HTML - Редактировать",
"Signup HTML - Tooltip": "Пользовательский HTML для замены стиля стандартной страницы регистрации",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Ключ сайта",
"Site key - Tooltip": "Ключ сайта",
@ -1157,6 +1178,7 @@
"Keys": "Ключи",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Ссылка",
"Location": "Местоположение",
"Location - Tooltip": "Город проживания",

View File

@ -161,6 +161,18 @@
"Sending": "Odosielanie",
"Submit and complete": "Odoslať a dokončiť"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Upraviť vynútiteľa",
"New Enforcer": "Nový vynútiteľ"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Prejsť na zapisovateľnú demo stránku?",
"Groups": "Skupiny",
"Groups - Tooltip": "Skupiny",
"Hide password": "Hide password",
"Home": "Domov",
"Home - Tooltip": "Domovská stránka aplikácie",
"ID": "ID",
"ID - Tooltip": "Jedinečný náhodný reťazec",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identita",
"Invitations": "Pozvánky",
"Is enabled": "Je povolené",
@ -312,6 +327,10 @@
"Password - Tooltip": "Uistite sa, že heslo je správne",
"Password complexity options": "Možnosti zložitosti hesla",
"Password complexity options - Tooltip": "Rôzne kombinácie možností zložitosti hesla",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Soľ hesla",
"Password salt - Tooltip": "Náhodný parameter používaný na šifrovanie hesla",
"Password type": "Typ hesla",
@ -559,7 +578,6 @@
"Use SMS": "Použiť SMS",
"Use SMS verification code": "Použiť overovací kód SMS",
"Use a recovery code": "Použiť obnovovací kód",
"Verification failed": "Overenie zlyhalo",
"Verify Code": "Overiť kód",
"Verify Password": "Overiť heslo",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Rozšírený editor",
"Basic Editor": "Základný editor",
"Edit Model": "Upraviť model",
"Model text": "Text modelu",
"Model text - Tooltip": "Model prístupu Casbin, vrátane vstavaných modelov ako ACL, RBAC, ABAC, RESTful, atď. Môžete tiež vytvoriť vlastné modely. Pre viac informácií navštívte web Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Upraviť pravidlo",
"New Organization": "Nová organizácia",
"Optional": "Voliteľné",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Výzva",
"Required": "Povinné",
"Soft deletion": "Mäkké vymazanie",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Kúpiť",
"Buy Product": "Kúpiť produkt",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail produktu",
"Dummy": "Vzorkový",
@ -740,7 +761,6 @@
"Test buy page..": "Testovať stránku nákupu..",
"There is no payment channel for this product.": "Pre tento produkt neexistuje platobný kanál.",
"This product is currently not in sale.": "Tento produkt momentálne nie je v predaji.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Upraviť HTML registrácie",
"Signup HTML - Tooltip": "Vlastné HTML na nahradenie predvoleného štýlu registračnej stránky",
"Signup group": "Skupina registrácie",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Tichý",
"Site key": "Kľúč stránky",
"Site key - Tooltip": "Kľúč stránky",
@ -1157,6 +1178,7 @@
"Keys": "Kľúče",
"Language": "Jazyk",
"Language - Tooltip": "Jazyk - Tooltip",
"Last change password time": "Last change password time",
"Link": "Odkaz",
"Location": "Miesto",
"Location - Tooltip": "Mesto bydliska",

View File

@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Edit Model",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Gönderiliyor",
"Submit and complete": "Gönder ve Tamamla"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Ana sayfa",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Davetler",
"Is enabled": "Aktif Mi?",
@ -312,6 +327,10 @@
"Password - Tooltip": "Şifrenizin doğru olduğundan emin olun",
"Password complexity options": "Şifre karmaşıklık seçenekleri",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@ -559,7 +578,6 @@
"Use SMS": "SMS kullan",
"Use SMS verification code": "SMS doğrulama kodunu kullan",
"Use a recovery code": "Kurtarma kodu kullan",
"Verification failed": "Doğrulama başarısız",
"Verify Code": "Kodu doğrula",
"Verify Password": "Parolayı Doğrula",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Advanced Editor",
"Basic Editor": "Basic Editor",
"Edit Model": "Modeli Düzenle",
"Model text": "Model text",
"Model text - Tooltip": "Casbin access control model, including built-in models like ACL, RBAC, ABAC, RESTful, etc. You can also create custom models. For more information, please visit the Casbin website",
@ -592,6 +612,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Gerekli",
"Soft deletion": "Soft deletion",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@ -1157,6 +1178,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@ -161,6 +161,18 @@
"Sending": "Відправка",
"Submit and complete": "Надішліть і заповніть"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Редагувати Enforcer",
"New Enforcer": "Новий Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Перейти на демонстраційний сайт для запису?",
"Groups": "Групи",
"Groups - Tooltip": "Групи підказка",
"Hide password": "Hide password",
"Home": "додому",
"Home - Tooltip": "Домашня сторінка програми",
"ID": "ID",
"ID - Tooltip": "Унікальний випадковий рядок",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Ідентичність",
"Invitations": "Запрошення",
"Is enabled": "Увімкнено",
@ -312,6 +327,10 @@
"Password - Tooltip": "Переконайтеся, що пароль правильний",
"Password complexity options": "Параметри складності пароля",
"Password complexity options - Tooltip": "Різні комбінації параметрів складності пароля",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Сіль пароля",
"Password salt - Tooltip": "Випадковий параметр, який використовується для шифрування пароля",
"Password type": "Тип пароля",
@ -559,7 +578,6 @@
"Use SMS": "Використовуйте SMS",
"Use SMS verification code": "Використовуйте код підтвердження SMS",
"Use a recovery code": "Використовуйте код відновлення",
"Verification failed": "Не вдалося перевірити",
"Verify Code": "Підтвердити код",
"Verify Password": "Підтвердіть пароль",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Розширений редактор",
"Basic Editor": "Базовий редактор",
"Edit Model": "Редагувати модель",
"Model text": "Текст моделі",
"Model text - Tooltip": "Модель контролю доступу Casbin, включаючи такі вбудовані моделі, як ACL, RBAC, ABAC, RESTful тощо. Ви також можете створювати власні моделі. ",
@ -592,6 +612,8 @@
"Modify rule": "Змінити правило",
"New Organization": "Нова організація",
"Optional": "Додатково",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Підкажіть",
"Required": "вимагається",
"Soft deletion": "М'яке видалення",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "купити",
"Buy Product": "Купити товар",
"CNY": "CNY",
"Detail": "Деталь",
"Detail - Tooltip": "Деталь продукту",
"Dummy": "манекен",
@ -740,7 +761,6 @@
"Test buy page..": "Сторінка тестової покупки..",
"There is no payment channel for this product.": "Для цього продукту немає платіжного каналу.",
"This product is currently not in sale.": "Цей товар наразі відсутній у продажу.",
"USD": "доларів США",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Реєстраційний HTML - Редагувати",
"Signup HTML - Tooltip": "Спеціальний HTML для заміни стилю сторінки реєстрації за умовчанням",
"Signup group": "Група реєстрації",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Мовчазний",
"Site key": "Ключ сайту",
"Site key - Tooltip": "Ключ сайту",
@ -1157,6 +1178,7 @@
"Keys": "Ключі",
"Language": "Мова",
"Language - Tooltip": "Мова підказка",
"Last change password time": "Last change password time",
"Link": "Посилання",
"Location": "Місцезнаходження",
"Location - Tooltip": "Місто проживання",

View File

@ -161,6 +161,18 @@
"Sending": "Gửi",
"Submit and complete": "Nộp và hoàn thành"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@ -266,10 +278,13 @@
"Go to writable demo site?": "Bạn có muốn đi đến trang demo có thể viết được không?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Nhà",
"Home - Tooltip": "Trang chủ của ứng dụng",
"ID": "ID",
"ID - Tooltip": "Chuỗi ngẫu nhiên độc nhất",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Đã được kích hoạt",
@ -312,6 +327,10 @@
"Password - Tooltip": "Hãy đảm bảo rằng mật khẩu là chính xác",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Muối mật khẩu",
"Password salt - Tooltip": "Tham số ngẫu nhiên được sử dụng để mã hóa mật khẩu",
"Password type": "Loại mật khẩu",
@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@ -574,6 +592,8 @@
"Secret Key": "Secret Key"
},
"model": {
"Advanced Editor": "Editor nâng cao",
"Basic Editor": "Editor cơ bản",
"Edit Model": "Sửa mô hình",
"Model text": "Văn bản mẫu",
"Model text - Tooltip": "Mô hình kiểm soát truy cập Casbin, bao gồm các mô hình tích hợp như ACL, RBAC, ABAC, RESTful, v.v. Bạn cũng có thể tạo các mô hình tùy chỉnh. Để biết thêm thông tin, vui lòng truy cập trang web Casbin",
@ -592,6 +612,8 @@
"Modify rule": "Sửa đổi quy tắc",
"New Organization": "Tổ chức mới",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Xóa mềm",
@ -709,7 +731,6 @@
"Alipay": "Alipay",
"Buy": "Mua",
"Buy Product": "Mua sản phẩm",
"CNY": "CNY",
"Detail": "Chi tiết",
"Detail - Tooltip": "Chi tiết sản phẩm",
"Dummy": "Dummy",
@ -740,7 +761,6 @@
"Test buy page..": "Trang mua thử.",
"There is no payment channel for this product.": "Không có kênh thanh toán cho sản phẩm này.",
"This product is currently not in sale.": "Sản phẩm này hiện không được bán.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@ -893,6 +913,7 @@
"Signup HTML - Edit": "Đăng ký HTML - Chỉnh sửa",
"Signup HTML - Tooltip": "Trang HTML tùy chỉnh để thay thế phong cách trang đăng ký mặc định",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Im lặng",
"Site key": "Khóa trang web",
"Site key - Tooltip": "Khóa trang web",
@ -1157,6 +1178,7 @@
"Keys": "Chìa khóa",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Liên kết",
"Location": "Vị trí",
"Location - Tooltip": "Thành phố cư trú",

View File

@ -161,6 +161,18 @@
"Sending": "发送中",
"Submit and complete": "完成提交"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "编辑Casbin执行器",
"New Enforcer": "新建Casbin执行器"
@ -266,10 +278,13 @@
"Go to writable demo site?": "跳转至可写演示站点?",
"Groups": "群组",
"Groups - Tooltip": "组",
"Hide password": "Hide password",
"Home": "首页",
"Home - Tooltip": "应用的首页",
"ID": "ID",
"ID - Tooltip": "唯一的随机字符串",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "身份认证",
"Invitations": "邀请码",
"Is enabled": "已启用",
@ -312,6 +327,10 @@
"Password - Tooltip": "请确认密码正确",
"Password complexity options": "密码复杂度选项",
"Password complexity options - Tooltip": "密码复杂度组合,登录密码复杂度必须符合该规范",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "密码Salt值",
"Password salt - Tooltip": "用于密码加密的随机参数",
"Password type": "密码类型",
@ -559,7 +578,6 @@
"Use SMS": "使用短信",
"Use SMS verification code": "使用手机或电子邮件发送验证码认证",
"Use a recovery code": "使用恢复代码",
"Verification failed": "验证失败",
"Verify Code": "验证码",
"Verify Password": "验证密码",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "您已经启用多因素认证, 请点击 '发送验证码' 继续",
@ -574,6 +592,8 @@
"Secret Key": "密钥"
},
"model": {
"Advanced Editor": "高级编辑器",
"Basic Editor": "基础编辑器",
"Edit Model": "编辑模型",
"Model text": "模型文本",
"Model text - Tooltip": "Casbin访问控制模型支持ACL、RBAC、ABAC、RESTful等内置模型也可以自定义模型具体请查看Casbin官网",
@ -592,6 +612,8 @@
"Modify rule": "修改规则",
"New Organization": "添加组织",
"Optional": "可选",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "提示",
"Required": "必须",
"Soft deletion": "软删除",
@ -709,7 +731,6 @@
"Alipay": "支付宝",
"Buy": "购买",
"Buy Product": "购买商品",
"CNY": "人民币",
"Detail": "详情",
"Detail - Tooltip": "商品详情",
"Dummy": "虚拟",
@ -740,16 +761,7 @@
"Test buy page..": "测试购买页面..",
"There is no payment channel for this product.": "该商品没有付款方式。",
"This product is currently not in sale.": "该商品目前未在售。",
"USD": "美元",
"WeChat Pay": "微信支付",
"EUR": "欧元",
"JPY": "日元",
"GBP": "英镑",
"AUD": "澳元",
"CAD": "加元",
"CHF": "瑞士法郎",
"HKD": "港币",
"SGD": "新加坡元"
"WeChat Pay": "微信支付"
},
"provider": {
"Access key": "访问密钥",
@ -901,6 +913,7 @@
"Signup HTML - Edit": "注册页面HTML - 编辑",
"Signup HTML - Tooltip": "自定义HTML用于替换默认的注册页面样式",
"Signup group": "注册后的群组",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "静默",
"Site key": "Site key",
"Site key - Tooltip": "站点密钥",
@ -1165,6 +1178,7 @@
"Keys": "键",
"Language": "语言",
"Language - Tooltip": "语言 - Tooltip",
"Last change password time": "Last change password time",
"Link": "绑定",
"Location": "城市",
"Location - Tooltip": "居住地址所在的城市",

View File

@ -105,6 +105,18 @@ class MfaAccountTable extends React.Component {
);
},
},
{
title: i18next.t("mfaAccount:Origin"),
dataIndex: "origin",
key: "origin",
render: (text, record, index) => {
return (
<Input value={text} onChange={e => {
this.updateField(table, index, "origin", e.target.value);
}} />
);
},
},
{
title: i18next.t("mfaAccount:Secret Key"),
dataIndex: "secretKey",
@ -176,7 +188,7 @@ class MfaAccountTable extends React.Component {
content={<CasdoorAppUrl accessToken={this.props.accessToken} />}
>
<Button type="primary" size="small">
{i18next.t("general:Show URL")}
{i18next.t("general:URL")}
</Button>
</Popover>
</div>

View File

@ -136,7 +136,7 @@ class SigninMethodTable extends React.Component {
options = [
{id: "All", name: i18next.t("general:All")},
{id: "Non-LDAP", name: i18next.t("general:Non-LDAP")},
{id: "Hide-Password", name: i18next.t("general:Hide-Password")},
{id: "Hide password", name: i18next.t("general:Hide password")},
];
}