Compare commits

...

10 Commits

Author SHA1 Message Date
a383af0ebc feat: fix token info not contains roles and permissions (#1060)
* fix: fix token info not contains roles and permissions

feat: remove repeated code for obtaining roles and permissions in user controller

* Update user.go

* Update user.go

* Update token.go

Co-authored-by: Yang Luo <hsluoyz@qq.com>
2022-08-24 01:41:26 +08:00
f02875e1b1 fix: enable captcha in the application which is not built-in (#1061) 2022-08-23 23:30:45 +08:00
e2921419b9 Add TestDeployStaticFiles() 2022-08-23 21:17:58 +08:00
42864700ec chore: update badges (#1058) 2022-08-23 13:11:42 +08:00
c1fe547939 fix: not start countdown if SMS fails to send (#1057) 2022-08-22 23:06:41 +08:00
267833d9f9 feat: fix the application edit page bug due to this.props.location.search (#1055) 2022-08-22 15:13:58 +08:00
2d3d1167bb Fix HasPromptPage() for signup items 2022-08-22 11:51:20 +08:00
ef5abdfa8f feat: rollback to fix ci (#1051) 2022-08-22 11:14:51 +08:00
580d43101e fix(i18n): add spanish translations (#1043)
* feat(i18n): add spanish translations

* feat(i18n): add missing translations

* feat(i18n): use new icon flag set

* use document protocol

* fix(i18n): use our static flags
2022-08-22 09:42:28 +08:00
fdf2b880cb feat: click on the app card to log in automatically (#1049) 2022-08-22 01:17:18 +08:00
20 changed files with 881 additions and 48 deletions

View File

@ -86,7 +86,6 @@ jobs:
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: master
- name: Setup Node.js
uses: actions/setup-node@v2
with:

View File

@ -19,7 +19,6 @@ RUN apk add curl
RUN apk add ca-certificates && update-ca-certificates
WORKDIR /
COPY --from=BACK /go/src/casdoor/.git/refs/heads .git/refs/heads
COPY --from=BACK /go/src/casdoor/server ./server
COPY --from=BACK /go/src/casdoor/swagger ./swagger
COPY --from=BACK /go/src/casdoor/conf/app.conf ./conf/app.conf
@ -42,7 +41,6 @@ RUN apt update
RUN apt install -y ca-certificates && update-ca-certificates
WORKDIR /
COPY --from=BACK /go/src/casdoor/.git/refs/heads .git/refs/heads
COPY --from=BACK /go/src/casdoor/server ./server
COPY --from=BACK /go/src/casdoor/swagger ./swagger
COPY --from=BACK /go/src/casdoor/docker-entrypoint.sh /docker-entrypoint.sh

View File

@ -8,7 +8,7 @@
<img alt="docker pull casbin/casdoor" src="https://img.shields.io/docker/pulls/casbin/casdoor.svg">
</a>
<a href="https://github.com/casdoor/casdoor/actions/workflows/build.yml">
<img alt="GitHub Workflow Status (branch)" src="https://github.com/casbin/jcasbin/workflows/build/badge.svg?style=flat-square">
<img alt="GitHub Workflow Status (branch)" src="https://github.com/casdoor/casdoor/workflows/Build/badge.svg?style=flat-square">
</a>
<a href="https://github.com/casdoor/casdoor/releases/latest">
<img alt="GitHub Release" src="https://img.shields.io/github/v/release/casbin/casdoor.svg">
@ -42,65 +42,48 @@
</a>
</p>
## Online demo
- International: https://door.casdoor.org (read-only)
- Asian mirror: https://door.casdoor.com (read-only)
- Asian mirror: https://demo.casdoor.com (read-write, will restore for every 5 minutes)
## Documentation
- International: https://casdoor.org
- Asian mirror: https://docs.casdoor.cn
## Install
- By source code: https://casdoor.org/docs/basic/server-installation
- By Docker: https://casdoor.org/docs/basic/try-with-docker
## How to connect to Casdoor?
https://casdoor.org/docs/how-to-connect/overview
## Casdoor Public API
- Docs: https://casdoor.org/docs/basic/public-api
- Swagger: https://door.casdoor.com/swagger
## Integrations
https://casdoor.org/docs/integration/apisix
## How to contact?
- Gitter: https://gitter.im/casbin/casdoor
- Forum: https://forum.casbin.com
- Contact: https://tawk.to/chat/623352fea34c2456412b8c51/1fuc7od6e
## Contribute
For casdoor, if you have any questions, you can give Issues, or you can also directly start Pull Requests(but we recommend giving issues first to communicate with the community).
### I18n translation
If you are contributing to casdoor, please note that we use [Crowdin](https://crowdin.com/project/casdoor-site) as translating platform and i18next as translating tool. When you add some words using i18next in the ```web/``` directory, please remember to add what you have added to the ```web/src/locales/en/data.json``` file.
If you are contributing to casdoor, please note that we use [Crowdin](https://crowdin.com/project/casdoor-site) as translating platform and i18next as translating tool. When you add some words using i18next in the `web/` directory, please remember to add what you have added to the `web/src/locales/en/data.json` file.
## License

View File

@ -119,12 +119,7 @@ func (c *ApiController) GetUser() {
user = object.GetUser(id)
}
if user != nil {
roles := object.GetRolesByUser(user.GetId())
user.Roles = roles
permissions := object.GetPermissionsByUser(user.GetId())
user.Permissions = permissions
}
object.ExtendUserWithRolesAndPermissions(user)
c.Data["json"] = object.GetMaskedUser(user)
c.ServeJSON()

70
deployment/deploy.go Normal file
View File

@ -0,0 +1,70 @@
// Copyright 2022 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package deployment
import (
"fmt"
"os"
"strings"
"github.com/casdoor/casdoor/object"
"github.com/casdoor/casdoor/storage"
"github.com/casdoor/casdoor/util"
"github.com/casdoor/oss"
)
func deployStaticFiles(provider *object.Provider) {
storageProvider := storage.GetStorageProvider(provider.Type, provider.ClientId, provider.ClientSecret, provider.RegionId, provider.Bucket, provider.Endpoint)
if storageProvider == nil {
panic(fmt.Sprintf("the provider type: %s is not supported", provider.Type))
}
uploadFolder(storageProvider, "js")
uploadFolder(storageProvider, "css")
updateHtml(provider.Domain)
}
func uploadFolder(storageProvider oss.StorageInterface, folder string) {
path := fmt.Sprintf("../web/build/static/%s/", folder)
filenames := util.ListFiles(path)
for _, filename := range filenames {
if !strings.HasSuffix(filename, folder) {
continue
}
file, err := os.Open(path + filename)
if err != nil {
panic(err)
}
objectKey := fmt.Sprintf("static/%s/%s", folder, filename)
_, err = storageProvider.Put(objectKey, file)
if err != nil {
panic(err)
}
fmt.Printf("Uploaded [%s] to [%s]\n", path, objectKey)
}
}
func updateHtml(domainPath string) {
htmlPath := "../web/build/index.html"
html := util.ReadStringFromPath(htmlPath)
html = strings.Replace(html, "\"/static/", fmt.Sprintf("\"%s", domainPath), -1)
util.WriteStringToPath(html, htmlPath)
fmt.Printf("Updated HTML to [%s]\n", html)
}

29
deployment/deploy_test.go Normal file
View File

@ -0,0 +1,29 @@
// Copyright 2022 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !skipCi
// +build !skipCi
package deployment
import (
"testing"
"github.com/casdoor/casdoor/object"
)
func TestDeployStaticFiles(t *testing.T) {
provider := object.GetProvider("admin/provider_storage_aliyun_oss")
deployStaticFiles(provider)
}

View File

@ -73,6 +73,10 @@ func (application *Application) IsSignupItemRequired(itemName string) bool {
return signupItem.Required
}
func (si *SignupItem) isSignupItemPrompted() bool {
return si.Visible && si.Prompted
}
func (application *Application) GetSignupItemRule(itemName string) string {
signupItem := application.getSignupItem(itemName)
if signupItem == nil {
@ -92,6 +96,16 @@ func (application *Application) getAllPromptedProviderItems() []*ProviderItem {
return res
}
func (application *Application) getAllPromptedSignupItems() []*SignupItem {
res := []*SignupItem{}
for _, signupItem := range application.SignupItems {
if signupItem.isSignupItemPrompted() {
res = append(res, signupItem)
}
}
return res
}
func (application *Application) isAffiliationPrompted() bool {
signupItem := application.getSignupItem("Affiliation")
if signupItem == nil {
@ -107,5 +121,10 @@ func (application *Application) HasPromptPage() bool {
return true
}
signupItems := application.getAllPromptedSignupItems()
if len(signupItems) != 0 {
return true
}
return application.isAffiliationPrompted()
}

View File

@ -287,6 +287,7 @@ func GetOAuthCode(userId string, clientId string, responseType string, redirectU
}
}
ExtendUserWithRolesAndPermissions(user)
accessToken, refreshToken, tokenName, err := generateJwtToken(application, user, nonce, scope, host)
if err != nil {
panic(err)
@ -421,6 +422,7 @@ func RefreshToken(grantType string, refreshToken string, scope string, clientId
}
}
ExtendUserWithRolesAndPermissions(user)
newAccessToken, newRefreshToken, tokenName, err := generateJwtToken(application, user, "", scope, host)
if err != nil {
return &TokenError{
@ -571,6 +573,7 @@ func GetPasswordToken(application *Application, username string, password string
}
}
ExtendUserWithRolesAndPermissions(user)
accessToken, refreshToken, tokenName, err := generateJwtToken(application, user, "", scope, host)
if err != nil {
return nil, &TokenError{
@ -640,6 +643,7 @@ func GetClientCredentialsToken(application *Application, clientSecret string, sc
// GetTokenByUser
// Implicit flow
func GetTokenByUser(application *Application, user *User, scope string, host string) (*Token, error) {
ExtendUserWithRolesAndPermissions(user)
accessToken, refreshToken, tokenName, err := generateJwtToken(application, user, "", scope, host)
if err != nil {
return nil, err
@ -726,6 +730,7 @@ func GetWechatMiniProgramToken(application *Application, code string, host strin
AddUser(user)
}
ExtendUserWithRolesAndPermissions(user)
accessToken, refreshToken, tokenName, err := generateJwtToken(application, user, "", "", host)
if err != nil {
return nil, &TokenError{

View File

@ -566,3 +566,12 @@ func (user *User) GetId() string {
func isUserIdGlobalAdmin(userId string) bool {
return strings.HasPrefix(userId, "built-in/")
}
func ExtendUserWithRolesAndPermissions(user *User) {
if user == nil {
return
}
user.Roles = GetRolesByUser(user.GetId())
user.Permissions = GetPermissionsByUser(user.GetId())
}

View File

@ -51,11 +51,11 @@ func SendVerificationCodeToEmail(organization *Organization, user *User, provide
// "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes."
content := fmt.Sprintf(provider.Content, code)
if err := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); err != nil {
if err := SendEmail(provider, title, content, dest, sender); err != nil {
return err
}
return SendEmail(provider, title, content, dest, sender)
return AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code)
}
func SendVerificationCodeToPhone(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) error {
@ -64,11 +64,11 @@ func SendVerificationCodeToPhone(organization *Organization, user *User, provide
}
code := getRandomCode(5)
if err := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); err != nil {
if err := SendSms(provider, code, dest); err != nil {
return err
}
return SendSms(provider, code, dest)
return AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code)
}
func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordType, dest, code string) error {

View File

@ -16,6 +16,7 @@ package util
import (
"fmt"
"io/ioutil"
"net/url"
"os"
"path/filepath"
@ -43,6 +44,23 @@ func EnsureFileFolderExists(path string) {
}
}
func ListFiles(path string) []string {
res := []string{}
files, err := ioutil.ReadDir(path)
if err != nil {
panic(err)
}
for _, f := range files {
if !f.IsDir() {
res = append(res, f.Name())
}
}
return res
}
func RemoveExt(filename string) string {
return filename[:len(filename)-len(filepath.Ext(filename))]
}

View File

@ -89,6 +89,7 @@ export const ResetModal = (props) => {
textBefore={i18next.t("code:Code You Received")}
onChange={setCode}
onButtonClickArgs={[dest, destType, Setting.getApplicationName(application)]}
application={application}
/>
</Row>
</Col>

View File

@ -15,12 +15,13 @@
import React from "react";
import * as Setting from "./Setting";
import {Dropdown, Menu} from "antd";
import {createFromIconfontCN} from "@ant-design/icons";
import "./App.less";
const IconFont = createFromIconfontCN({
scriptUrl: "//at.alicdn.com/t/font_2680620_ffij16fkwdg.js",
});
function flagIcon(country, alt) {
return (
<img width={24} alt={alt} src={`${Setting.StaticBaseUrl}/flag-icons/${country}.svg`} />
);
}
class SelectLanguageBox extends React.Component {
constructor(props) {
@ -35,13 +36,14 @@ class SelectLanguageBox extends React.Component {
<Menu onClick={(e) => {
Setting.changeLanguage(e.key);
}}>
<Menu.Item key="en" icon={<IconFont type="icon-en" />}>English</Menu.Item>
<Menu.Item key="zh" icon={<IconFont type="icon-zh" />}>简体中文</Menu.Item>
<Menu.Item key="fr" icon={<IconFont type="icon-fr" />}>Français</Menu.Item>
<Menu.Item key="de" icon={<IconFont type="icon-de" />}>Deutsch</Menu.Item>
<Menu.Item key="ja" icon={<IconFont type="icon-ja" />}>日本語</Menu.Item>
<Menu.Item key="ko" icon={<IconFont type="icon-ko" />}>한국어</Menu.Item>
<Menu.Item key="ru" icon={<IconFont type="icon-ru" />}>Русский</Menu.Item>
<Menu.Item key="en" icon={flagIcon("US", "English")}>English</Menu.Item>
<Menu.Item key="es" icon={flagIcon("ES", "Español")}>Español</Menu.Item>
<Menu.Item key="zh" icon={flagIcon("CN", "简体中文")}>简体中文</Menu.Item>
<Menu.Item key="fr" icon={flagIcon("FR", "Français")}>Français</Menu.Item>
<Menu.Item key="de" icon={flagIcon("DE", "Deutsch")}>Deutsch</Menu.Item>
<Menu.Item key="ja" icon={flagIcon("JP", "日本語")}>日本語</Menu.Item>
<Menu.Item key="ko" icon={flagIcon("KR", "한국어")}>한국어</Menu.Item>
<Menu.Item key="ru" icon={flagIcon("RU", "Русский")}>Русский</Menu.Item>
</Menu>
);

View File

@ -353,11 +353,13 @@ class ForgetPage extends React.Component {
<CountDownInput
disabled={this.state.username === "" || this.state.verifyType === ""}
onButtonClickArgs={[this.state.email, "email", Setting.getApplicationName(this.state.application), this.state.name]}
application={application}
/>
) : (
<CountDownInput
disabled={this.state.username === "" || this.state.verifyType === ""}
onButtonClickArgs={[this.state.phone, "phone", Setting.getApplicationName(this.state.application), this.state.name]}
application={application}
/>
)}
</Form.Item>

View File

@ -505,6 +505,10 @@ class LoginPage extends React.Component {
renderSignedInBox() {
if (this.props.account === undefined || this.props.account === null) {
if (window !== window.parent) {
const message = {tag: "Casdoor", type: "SilentSignin", data: "user-not-logged-in"};
window.parent.postMessage(message, "*");
}
return null;
}
const application = this.getApplicationObj();
@ -621,6 +625,7 @@ class LoginPage extends React.Component {
<CountDownInput
disabled={this.state.username?.length === 0 || !this.state.validEmailOrPhone}
onButtonClickArgs={[this.state.username, this.state.validEmail ? "email" : "phone", Setting.getApplicationName(application)]}
application={application}
/>
</Form.Item>
) : (

View File

@ -360,6 +360,7 @@ class SignupPage extends React.Component {
<CountDownInput
disabled={!this.state.validEmail}
onButtonClickArgs={[this.state.email, "email", Setting.getApplicationName(application)]}
application={application}
/>
</Form.Item>
}
@ -412,6 +413,7 @@ class SignupPage extends React.Component {
<CountDownInput
disabled={!this.state.validPhone}
onButtonClickArgs={[this.state.phone, "phone", Setting.getApplicationName(application)]}
application={application}
/>
</Form.Item>
</React.Fragment>

View File

@ -27,15 +27,23 @@ class SingleCard extends React.Component {
};
}
wrappedAsSilentSigninLink(link) {
if (link.startsWith("http")) {
link += link.includes("?") ? "&silentSignin=1" : "?silentSignin=1";
}
return link;
}
renderCardMobile(logo, link, title, desc, time, isSingle) {
const gridStyle = {
width: "100vw",
textAlign: "center",
cursor: "pointer",
};
const silentSigninLink = this.wrappedAsSilentSigninLink(link);
return (
<Card.Grid style={gridStyle} onClick={() => Setting.goToLinkSoft(this, link)}>
<Card.Grid style={gridStyle} onClick={() => Setting.goToLinkSoft(this, silentSigninLink)}>
<img src={logo} alt="logo" height={60} style={{marginBottom: "20px"}} />
<Meta
title={title}
@ -46,6 +54,8 @@ class SingleCard extends React.Component {
}
renderCard(logo, link, title, desc, time, isSingle) {
const silentSigninLink = this.wrappedAsSilentSigninLink(link);
return (
<Col style={{paddingLeft: "20px", paddingRight: "20px", paddingBottom: "20px", marginBottom: "20px"}} span={6}>
<Card
@ -53,7 +63,7 @@ class SingleCard extends React.Component {
cover={
<img alt="logo" src={logo} style={{width: "100%", height: "210px", objectFit: "scale-down"}} />
}
onClick={() => Setting.goToLinkSoft(this, link)}
onClick={() => Setting.goToLinkSoft(this, silentSigninLink)}
style={isSingle ? {width: "320px"} : {width: "100%"}}
>
<Meta title={title} description={desc} />

View File

@ -17,13 +17,12 @@ import React from "react";
import i18next from "i18next";
import * as UserBackend from "../backend/UserBackend";
import {SafetyOutlined} from "@ant-design/icons";
import {authConfig} from "../auth/Auth";
import {CaptchaWidget} from "./CaptchaWidget";
const {Search} = Input;
export const CountDownInput = (props) => {
const {disabled, textBefore, onChange, onButtonClickArgs} = props;
const {disabled, textBefore, onChange, onButtonClickArgs, application} = props;
const [visible, setVisible] = React.useState(false);
const [key, setKey] = React.useState("");
const [captchaImg, setCaptchaImg] = React.useState("");
@ -69,7 +68,7 @@ export const CountDownInput = (props) => {
};
const loadCaptcha = () => {
UserBackend.getCaptcha("admin", authConfig.appName, false).then(res => {
UserBackend.getCaptcha(application.owner, application.name, false).then(res => {
if (res.type === "none") {
UserBackend.sendCode("none", "", "", ...onButtonClickArgs).then(res => {
if (res) {

View File

@ -20,11 +20,13 @@ import de from "./locales/de/data.json";
import ko from "./locales/ko/data.json";
import ru from "./locales/ru/data.json";
import ja from "./locales/ja/data.json";
import es from "./locales/es/data.json";
import * as Conf from "./Conf";
import * as Setting from "./Setting";
const resources = {
en: en,
es: es,
zh: zh,
fr: fr,
de: de,

View File

@ -0,0 +1,685 @@
{
"account": {
"Login": "Iniciar sesión",
"Logout": "Cerrar sesión",
"My Account": "Mi cuenta",
"Sign Up": "Registrarme"
},
"application": {
"Copy SAML metadata URL": "Copiar SAML metadata URL",
"Copy prompt page URL": "Copy prompt page URL",
"Copy signin page URL": "Copiar URL de inicio de sesión",
"Copy signup page URL": "Copiar URL de registro de usuarios",
"Edit Application": "Editar Aplicación",
"Enable SAML compress": "Habilitar compresión SAML",
"Enable SAML compress - Tooltip": "Habilitar compresión SAML - Tooltip",
"Enable WebAuthn signin": "Habilitar inicio de sesión de WebAuthn",
"Enable WebAuthn signin - Tooltip": "Habilitar inicio de sesión de WebAuthn - Tooltip",
"Enable code signin": "Habilitar inicio de sesión por código",
"Enable code signin - Tooltip": "Habilitar inicio de sesión por código - Tooltip",
"Enable signin session - Tooltip": "Enable signin session - Tooltip",
"Enable signup": "Habilitar nuevos registros",
"Enable signup - Tooltip": "Habilitar nuevos registros - Tooltip",
"File uploaded successfully": "El archivo ha sido subido con éxito",
"Grant types": "Grant types",
"Grant types - Tooltip": "Grant types - Tooltip",
"New Application": "Nueva Aplicación",
"Password ON": "Constraseña ON",
"Password ON - Tooltip": "Constraseña ON - Tooltip",
"Please select a HTML file": "Seleccione un archivo HTML",
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
"Redirect URL": "URL de redirección",
"Redirect URLs": "URLs de redirección",
"Redirect URLs - Tooltip": "URL de redirección - Tooltip",
"Refresh token expire": "Expiración del Refresh Token",
"Refresh token expire - Tooltip": "Expiración del Refresh Token - Tooltip",
"SAML metadata": "SAML metadata",
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copiado al portapapeles con éxito",
"Signin page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Signin page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
"Signin session": "Signin session",
"Signup items": "Signup items",
"Signup items - Tooltip": "Signup items - Tooltip",
"Signup page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Signup page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
"Token expire": "Expiración del Token",
"Token expire - Tooltip": "Expiración del Token - Tooltip",
"Token format": "Formato del Token",
"Token format - Tooltip": "Formato del Token - Tooltip",
"rule": "rule"
},
"cert": {
"Bit size": "Tamaño del Bit",
"Bit size - Tooltip": "Tamaño del Bit - Tooltip",
"Certificate": "Certificado",
"Certificate - Tooltip": "Certificado - Tooltip",
"Certificate copied to clipboard successfully": "Certificado copiado al portapapeles con éxito",
"Copy certificate": "Copiar certificado",
"Copy private key": "Copiar clave privada",
"Crypto algorithm": "Algoritmo criptográfico",
"Crypto algorithm - Tooltip": "Algoritmo criptográfico - Tooltip",
"Download certificate": "Descargar certificado",
"Download private key": "Descargar clave privada",
"Edit Cert": "Editar certificado",
"Expire in years": "Expiración en años",
"Expire in years - Tooltip": "Expiración en años - Tooltip",
"New Cert": "Nuevo certificado",
"Private key": "Clave privada",
"Private key - Tooltip": "Clave privada - Tooltip",
"Private key copied to clipboard successfully": "Clave privada copiada al portapapeles con éxito",
"Scope": "Alcance",
"Scope - Tooltip": "Alcance - Tooltip",
"Type": "Tipo",
"Type - Tooltip": "Tipo - Tooltip"
},
"code": {
"Code You Received": "Código que recibiste",
"Email code": "Código de Email",
"Empty Code": "Código requerido",
"Enter your code": "Ingrese su código",
"Phone code": "Código de teléfono",
"Please input your phone verification code!": "Ingrese su código de verificación teléfonico!",
"Please input your verification code!": "Ingrese su código de verificación!",
"Send Code": "Enviar código",
"Sending Code": "Enviando código",
"Submit and complete": "Enviar y completar"
},
"forget": {
"Account": "Cuenta",
"Change Password": "Cambiar contraseña",
"Choose email or phone": "Elige email o teléfono",
"Confirm": "Confirmar",
"Next Step": "Siguiente paso",
"Password": "Contraseña",
"Please input your username!": "Por favor ingrese su nombre de usuario!",
"Reset": "Reiniciar",
"Retrieve password": "Recuperar Contraseña",
"Unknown forget type": "Tipo de olvido desconocido",
"Verify": "Verificar"
},
"general": {
"Action": "Acción",
"Adapter": "Adaptador",
"Adapter - Tooltip": "Adaptador - Tooltip",
"Add": "Agregar",
"Affiliation URL": "URL de Afiliación",
"Affiliation URL - Tooltip": "URL de Afiliación - Tooltip",
"Application": "Aplicación",
"Applications": "Aplicaciones",
"Applications that require authentication": "Aplicaciones que requieren autenticación",
"Avatar": "Avatar",
"Avatar - Tooltip": "Avatar - Tooltip",
"Back Home": "Volver al inicio",
"Cancel": "Cancelar",
"Captcha": "Captcha",
"Cert": "Certificado",
"Cert - Tooltip": "Certificado - Tooltip",
"Certs": "Certificados",
"Click to Upload": "Click para subir archivo",
"Client IP": "IP del Cliente",
"Created time": "Fecha de creación",
"Default avatar": "Avatar por defecto",
"Default avatar - Tooltip": "Avatar por defecto - Tooltip",
"Delete": "Eliminar",
"Description": "Descripción",
"Description - Tooltip": "Descripción - Tooltip",
"Display name": "Apodo",
"Display name - Tooltip": "Apodo - Tooltip",
"Down": "Bajar",
"Edit": "Editar",
"Email": "Email",
"Email - Tooltip": "Email - Tooltip",
"Favicon": "Favicon",
"Favicon - Tooltip": "Favicon - Tooltip",
"First name": "Nombre",
"Forget URL": "URL de olvido",
"Forget URL - Tooltip": "URL de olvido - Tooltip",
"Home": "Inicio",
"Home - Tooltip": "Inicio - Tooltip",
"ID": "ID",
"ID - Tooltip": "ID - Tooltip",
"Is enabled": "Está habilitado",
"Is enabled - Tooltip": "Está habilitado - Tooltip",
"LDAPs": "LDAPs",
"LDAPs - Tooltip": "LDAPs - Tooltip",
"Last name": "Apellido",
"Logo": "Logo",
"Logo - Tooltip": "Logo - Tooltip",
"Master password": "Contraseña maestra",
"Master password - Tooltip": "Contraseña maestra - Tooltip",
"Method": "Metodo",
"Model": "Modelo",
"Model - Tooltip": "Modelo - Tooltip",
"Models": "Modelos",
"Name": "Nombre",
"Name - Tooltip": "Nombre - Tooltip",
"OAuth providers": "OAuth providers",
"Organization": "Organización",
"Organization - Tooltip": "Organización - Tooltip",
"Organizations": "Organizaciones",
"Password": "Contraseña",
"Password - Tooltip": "Contraseña - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Password salt - Tooltip",
"Password type": "Tipo de Contraseña",
"Password type - Tooltip": "Tipo de Contraseña - Tooltip",
"Payments": "Pagos",
"Permissions": "Permisos",
"Permissions - Tooltip": "Permisos - Tooltip",
"Phone": "Teléfono",
"Phone - Tooltip": "Teléfono - Tooltip",
"Phone prefix": "Prefijo teléfonico",
"Phone prefix - Tooltip": "Prefijo teléfonico - Tooltip",
"Preview": "Previsualizar",
"Preview - Tooltip": "Previsualizar - Tooltip",
"Products": "Productos",
"Provider": "Proveedor",
"Provider - Tooltip": "Proveedor - Tooltip",
"Providers": "Proveedores",
"Providers - Tooltip": "Proveedores - Tooltip",
"Real name": "Nombre real",
"Records": "Registros",
"Request URI": "Request URI",
"Resources": "Recursos",
"Roles": "Roles",
"Roles - Tooltip": "Roles - Tooltip",
"Save": "Guardar",
"Save & Exit": "Guardar & Volver",
"Signin URL": "URL de inicio de sesión",
"Signin URL - Tooltip": "URL de inicio de sesión - Tooltip",
"Signup URL": "URL de registro",
"Signup URL - Tooltip": "URL de registro - Tooltip",
"Signup application": "Aplicación de inicio de sesión",
"Signup application - Tooltip": "Aplicación de inicio de sesión - Tooltip",
"Sorry, the page you visited does not exist.": "Lo sentimos, la página que visitaste no existe.",
"Sorry, the user you visited does not exist or you are not authorized to access this user.": "Lo sentimos, el usuario que visitaste no existe o no estás autorizado para acceder.",
"Sorry, you do not have permission to access this page.": "Lo sentimos, no tienes permiso para acceder a esta página.",
"State": "Estado",
"State - Tooltip": "Estado - Tooltip",
"Swagger": "Swagger",
"Sync": "Sincronizador",
"Syncers": "Sincronizadores",
"Timestamp": "Timestamp",
"Tokens": "Tokens",
"URL": "URL",
"URL - Tooltip": "URL - Tooltip",
"Up": "Subir",
"User": "Usuario",
"User - Tooltip": "Usuario - Tooltip",
"User containers": "Contenedores de usuarios",
"User type": "Tipo de usuario",
"User type - Tooltip": "Tipo de usuario - Tooltip",
"Users": "Usuarios",
"Users under all organizations": "Usuarios de todas las organizaciones",
"Webhooks": "Webhooks",
"{total} in total": "{total} en total"
},
"ldap": {
"Address": "Dirección",
"Admin": "Admin",
"Admin - Tooltip": "Admin - Tooltip",
"Admin Password": "Contraseña del admin",
"Admin Password - Tooltip": "Contraseña del admin - Tooltip",
"Auto Sync": "Sincronización automática",
"Auto Sync - Tooltip": "Sincronización automática - Tooltip",
"Base DN": "Base DN",
"Base DN - Tooltip": "Base DN - Tooltip",
"CN": "CN",
"Edit LDAP": "Editar LDAP",
"Email": "Email",
"Group Id": "Group Id",
"ID": "ID",
"Last Sync": "Última Sincronización",
"Phone": "Teléfono",
"Server": "Servidor",
"Server Host": "Host de Servidor",
"Server Host - Tooltip": "Host de Servidor - Tooltip",
"Server Name": "Nombre del Servidor",
"Server Name - Tooltip": "Nombre del Servidor - Tooltip",
"Server Port": "Puerto del servidor",
"Server Port - Tooltip": "Puerto del servidor - Tooltip",
"Sync": "Sincronizar",
"The Auto Sync option will sync all users to specify organization": "La opción de sincronización automática sincronizará todos los usuarios para la organización especificada.",
"UidNumber / Uid": "UidNumber / Uid"
},
"login": {
"Auto sign in": "Inicio de sesión automático",
"Continue with": "Continuar con",
"Email or phone": "Email o teléfono",
"Forgot password?": "¿Olvidó su contraseña?",
"Logging out...": "Cerrando su sesión...",
"No account?": "¿No estás registrado?",
"Or sign in with another account": "O inicia sesión con otra cuenta",
"Password": "Contraseña",
"Password - Tooltip": "Contraseña - Tooltip",
"Please input your code!": "¡Por favor ingrese su código!",
"Please input your password!": "¡Por favor ingrese su contraseña!",
"Please input your password, at least 6 characters!": "Su contraseña debe contener al menos 6 caracteres.",
"Please input your username, Email or phone!": "¡Ingrese su nombre de usuario, correo electrónico o teléfono!",
"Sign In": "Iniciar de sesión",
"Sign in with WebAuthn": "Iniciar de sesión con WebAuthn",
"Sign in with code": "Iniciar de sesión con código",
"Sign in with password": "Iniciar de sesión con contraseña",
"Sign in with {type}": "Iniciar de sesión con {type}",
"Signing in...": "Iniciando de sesión...",
"The input is not valid Email or Phone!": "El valor ingresado no es un Email o Teléfono válido!",
"To access": "Para ingresar",
"sign up now": "Regístrate ahora",
"username, Email or phone": "nombre de usuario, correo electrónico o teléfono"
},
"model": {
"Edit Model": "Editar Modelo",
"Model text": "Texto del modelo",
"Model text - Tooltip": "Texto del modelo - Tooltip",
"New Model": "Nuevo Modelo"
},
"organization": {
"Account items": "Items de la cuenta",
"Account items - Tooltip": "Items de la cuenta - Tooltip",
"Default avatar": "Avatar por defecto",
"Edit Organization": "Editar Organización",
"Favicon": "Favicon",
"Is profile public": "Es el perfil publico",
"Is profile public - Tooltip": "Es el perfil publico - Tooltip",
"New Organization": "Nueva Organización",
"Soft deletion": "Eliminación Soft",
"Soft deletion - Tooltip": "Eliminación Soft - Tooltip",
"Tags": "Etiquetas",
"Tags - Tooltip": "Etiquetas - Tooltip",
"Website URL": "URL del sitio web",
"Website URL - Tooltip": "URL del sitio web - Tooltip",
"modifyRule": "modifyRule",
"viewRule": "viewRule"
},
"payment": {
"Confirm your invoice information": "Confirma la información de tu factura",
"Currency": "Moneda",
"Currency - Tooltip": "Moneda - Tooltip",
"Download Invoice": "Descargar factura",
"Edit Payment": "Editar Pago",
"Individual": "Individual",
"Invoice URL": "URL de factura",
"Invoice URL - Tooltip": "URL de factura - Tooltip",
"Invoice actions": "Acciones de factura",
"Invoice actions - Tooltip": "Acciones de factura - Tooltip",
"Invoice remark": "Comentario de factura",
"Invoice remark - Tooltip": "Comentario de factura - Tooltip",
"Invoice tax ID": "Número de identificación fiscal de la factura",
"Invoice tax ID - Tooltip": "Número de identificación fiscal de la factura - Tooltip",
"Invoice title": "Titulo de factura",
"Invoice title - Tooltip": "Titulo de factura - Tooltip",
"Invoice type": "Tipo de factura",
"Invoice type - Tooltip": "Tipo de factura - Tooltip",
"Issue Invoice": "Emitir factura",
"Message": "Mensaje",
"Message - Tooltip": "Mensaje - Tooltip",
"New Payment": "Nuevo Pago",
"Organization": "Organización",
"Person Email": "Email de la persona",
"Person Email - Tooltip": "Email de la persona - Tooltip",
"Person ID card": "Documento de identidad de la persona",
"Person ID card - Tooltip": "Documento de identidad de la persona - Tooltip",
"Person name": "Nombre de la persona",
"Person name - Tooltip": "Nombre de la persona - Tooltip",
"Person phone": "Teléfono de la persona",
"Person phone - Tooltip": "Teléfono de la persona - Tooltip",
"Please carefully check your invoice information. Once the invoice is issued, it cannot be withdrawn or modified.": "Por favor revise cuidadosamente la información de su factura. Una vez emitida la factura, no podrá ser retirada ni modificada.",
"Please click the below button to return to the original website": "Haga clic en el botón de abajo para volver al sitio web original",
"Please pay the order first!": "¡Por favor pague la orden primero!",
"Price": "Precio",
"Price - Tooltip": "Precio - Tooltip",
"Processing...": "Procesando...",
"Product": "Producto",
"Product - Tooltip": "Producto - Tooltip",
"Result": "Resultado",
"Return to Website": "Volver al sitio web",
"State": "Estado",
"State - Tooltip": "Estado - Tooltip",
"The payment has failed": "El pago ha fallado",
"The payment is still under processing": "El pago aún está en proceso",
"Type": "Tipo",
"Type - Tooltip": "Tipo - Tooltip",
"You have successfully completed the payment": "Su pago se ha completado con éxito",
"please wait for a few seconds...": "por favor espere unos segundos...",
"the current state is": "el estado actual es"
},
"permission": {
"Actions": "Acciones",
"Actions - Tooltip": "Acciones - Tooltip",
"Approve time": "Fecha de aprobación",
"Approve time - Tooltip": "Fecha de aprobación - Tooltip",
"Approver": "Aprobador",
"Approver - Tooltip": "Aprobador - Tooltip",
"Edit Permission": "Editar Permiso",
"Effect": "Effect",
"Effect - Tooltip": "Effect - Tooltip",
"New Permission": "Nuevo Permiso",
"Resource type": "Tipo de recurso",
"Resource type - Tooltip": "Tipo de recurso - Tooltip",
"Resources": "Recursos",
"Resources - Tooltip": "Recursos - Tooltip",
"State": "Estado",
"State - Tooltip": "Estado - Tooltip",
"Submitter": "Submitter",
"Submitter - Tooltip": "Submitter - Tooltip"
},
"product": {
"Alipay": "Alipay",
"Buy": "Comprar",
"Buy Product": "Comprar Producto",
"CNY": "CNY",
"Currency": "Moneda",
"Currency - Tooltip": "Moneda - Tooltip",
"Detail": "Detalle",
"Detail - Tooltip": "Detalle - Tooltip",
"Edit Product": "Editar Producto",
"Image": "Imagen",
"Image - Tooltip": "Imagen - Tooltip",
"New Product": "Nuevo producto",
"Pay": "Pago",
"Payment providers": "Pasarelas de pago",
"Payment providers - Tooltip": "Pasarelas de pago - Tooltip",
"Paypal": "Paypal",
"Placing order...": "Creando su pedido...",
"Price": "Precio",
"Price - Tooltip": "Precio - Tooltip",
"Quantity": "Cantidad",
"Quantity - Tooltip": "Cantidad - Tooltip",
"Return URL": "URL de retorno",
"Return URL - Tooltip": "URL de retorno - Tooltip",
"SKU": "SKU",
"Sold": "Agotado",
"Sold - Tooltip": "Agotado - Tooltip",
"Tag": "Etiqueta",
"Tag - Tooltip": "Etiqueta - Tooltip",
"Test buy page..": "Probar página de pago...",
"There is no payment channel for this product.": "No existe un 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": {
"Access key": "Clave de acceso",
"Access key - Tooltip": "Clave de acceso - Tooltip",
"Agent ID": "ID del Agente",
"Agent ID - Tooltip": "ID del Agente - Tooltip",
"App ID": "App ID",
"App ID - Tooltip": "App ID - Tooltip",
"App key": "App key",
"App key - Tooltip": "App key - Tooltip",
"App secret": "App secret",
"AppSecret - Tooltip": "AppSecret - Tooltip",
"Auth URL": "Auth URL",
"Auth URL - Tooltip": "Auth URL - Tooltip",
"Bucket": "Bucket",
"Bucket - Tooltip": "Bucket - Tooltip",
"Can not parse Metadata": "Can not parse Metadata",
"Category": "Categoria",
"Category - Tooltip": "Categoria - Tooltip",
"Channel No.": "Channel No.",
"Channel No. - Tooltip": "Channel No. - Tooltip",
"Client ID": "Client ID",
"Client ID - Tooltip": "Client ID - Tooltip",
"Client ID 2": "Client ID 2",
"Client ID 2 - Tooltip": "Client ID 2 - Tooltip",
"Client secret": "Client secret",
"Client secret - Tooltip": "Client secret - Tooltip",
"Client secret 2": "Client secret 2",
"Client secret 2 - Tooltip": "Client secret 2 - Tooltip",
"Copy": "Copiar",
"Disable SSL": "Deshabilitar SSL",
"Disable SSL - Tooltip": "Deshabilitar SSL - Tooltip",
"Domain": "Dominio",
"Domain - Tooltip": "Dominio - Tooltip",
"Edit Provider": "Editar Proveedor",
"Email Content": "Contenido del Email",
"Email Content - Tooltip": "Contenido del Email - Tooltip",
"Email Title": "Titulo del Email",
"Email Title - Tooltip": "Titulo del Email - Tooltip",
"Endpoint": "Endpoint",
"Endpoint (Intranet)": "Endpoint (Intranet)",
"Host": "Host",
"Host - Tooltip": "Host - Tooltip",
"IdP": "IdP",
"IdP certificate": "IdP certificate",
"Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL - Tooltip",
"Link copied to clipboard successfully": "Enlace copiado al portapapeles con éxito",
"Metadata": "Metadata",
"Metadata - Tooltip": "Metadata - Tooltip",
"Method": "Metodo",
"Method - Tooltip": "Metodo - Tooltip",
"Name": "Nombre",
"New Provider": "Nuevo Proveedor",
"Parse": "Parsear",
"Parse Metadata successfully": "Metadata parseada con éxito",
"Port": "Puerto",
"Port - Tooltip": "Puerto - Tooltip",
"Provider URL": "URL del Proveedor",
"Provider URL - Tooltip": "URL del Proveedor - Tooltip",
"Region ID": "Region ID",
"Region ID - Tooltip": "Region ID - Tooltip",
"Region endpoint for Internet": "Region endpoint for Internet",
"Region endpoint for Intranet": "Region endpoint for Intranet",
"SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)",
"SMS account": "SMS account",
"SMS account - Tooltip": "SMS account - Tooltip",
"SP ACS URL": "SP ACS URL",
"SP ACS URL - Tooltip": "SP ACS URL - Tooltip",
"SP Entity ID": "SP Entity ID",
"Scene": "Scene",
"Scene - Tooltip": "Scene - Tooltip",
"Scope": "Scope",
"Scope - Tooltip": "Scope - Tooltip",
"Secret access key": "Secret access key",
"Secret key": "Secret key",
"Secret key - Tooltip": "Secret key - Tooltip",
"SecretAccessKey - Tooltip": "SecretAccessKey - Tooltip",
"Send Test Email": "Enviar email de prueba",
"Sign Name": "Sign Name",
"Sign Name - Tooltip": "Sign Name - Tooltip",
"Sign request": "Sign request",
"Sign request - Tooltip": "Sign request - Tooltip",
"Signin HTML": "Signin HTML",
"Signin HTML - Edit": "Signin HTML - Edit",
"Signin HTML - Tooltip": "Signin HTML - Tooltip",
"Signup HTML": "Signup HTML",
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Signup HTML - Tooltip",
"Site key": "Site key",
"Site key - Tooltip": "Site key - Tooltip",
"Sub type": "Sub type",
"Sub type - Tooltip": "Sub type - Tooltip",
"Template Code": "Código de plantilla",
"Template Code - Tooltip": "Código de plantilla - Tooltip",
"Terms of Use": "Términos de Uso",
"Terms of Use - Tooltip": "Términos de Uso - Tooltip",
"Test Connection": "Probar Conexión",
"Test Email": "Probar Email",
"Test Email - Tooltip": "Probar Email - Tooltip",
"Token URL": "Token URL",
"Token URL - Tooltip": "Token URL - Tooltip",
"Type": "Tipo",
"Type - Tooltip": "Tipo - Tooltip",
"UserInfo URL": "UserInfo URL",
"UserInfo URL - Tooltip": "UserInfo URL - Tooltip",
"alertType": "alertType",
"canSignIn": "canSignIn",
"canSignUp": "canSignUp",
"canUnlink": "canUnlink",
"prompted": "prompted",
"required": "required",
"visible": "visible"
},
"record": {
"Is Triggered": "Esta activado"
},
"resource": {
"Application": "Aplicación",
"Copy Link": "Copiar Link",
"File name": "Nombre del archivo",
"File size": "Tamaño del archivo",
"Format": "Formato",
"Link copied to clipboard successfully": "Enlace copiado al portapapeles con éxito",
"Parent": "Parent",
"Tag": "Etiqueta",
"Type": "Tipo",
"Upload a file...": "Subir archivo...",
"User": "Usuario"
},
"role": {
"Edit Role": "Editar Rol",
"New Role": "Nuevo Rol",
"Sub domains": "Sub dominios",
"Sub domains - Tooltip": "Sub dominios - Tooltip",
"Sub roles": "Sub roles",
"Sub roles - Tooltip": "Sub roles - Tooltip",
"Sub users": "Sub usuarios",
"Sub users - Tooltip": "Sub usuarios - Tooltip"
},
"signup": {
"Accept": "Aceptar",
"Agreement": "Agreement",
"Confirm": "Confirmar",
"Decline": "Rechazar",
"Have account?": "¿Ya tienes una cuenta?",
"Please accept the agreement!": "Por favor, acepte el acuerdo!",
"Please click the below button to sign in": "Por favor, haga clic en el botón de abajo para iniciar sesión",
"Please confirm your password!": "Por favor, confirme su contraseña!",
"Please input the correct ID card number!": "¡Ingrese un documento de identidad correcto!",
"Please input your Email!": "Por favor, ingrese su Email!",
"Please input your ID card number!": "Por favor, ingrese su documento de identidad!",
"Please input your address!": "Por favor, ingrese su domicilio!",
"Please input your affiliation!": "Por favor, ingrese su afiliación!",
"Please input your display name!": "Por favor, ingrese su apodo!",
"Please input your first name!": "Por favor, ingrese su nombre!",
"Please input your last name!": "Por favor, ingrese su apellido!",
"Please input your phone number!": "Por favor, ingrese su número teléfonico!",
"Please input your real name!": "Por favor, ingrese un nombre real!",
"Please select your country/region!": "Por favor, seleccione su pais/region!",
"Terms of Use": "Términos de Uso",
"The input is not invoice Tax ID!": "El valor ingresado no es un número de identificación fiscal de factura!",
"The input is not invoice title!": "El valor ingresado no es el titulo de factura!",
"The input is not valid Email!": "El valor ingresado no es un Email válido!",
"The input is not valid Phone!": "El valor ingresado no es un Teléfono válido!",
"Username": "Nombre de usuario",
"Username - Tooltip": "Nombre de usuario - Tooltip",
"Your account has been created!": "¡Tu cuenta ha sido creada!",
"Your confirmed password is inconsistent with the password!": "¡La confirmación de su contraseña es inconsistente!",
"sign in now": "iniciar sesión ahora"
},
"syncer": {
"Affiliation table": "Tabla de afiliación",
"Affiliation table - Tooltip": "Tabla de afiliación - Tooltip",
"Avatar base URL": "Avatar base URL",
"Avatar base URL - Tooltip": "Avatar base URL - Tooltip",
"Casdoor column": "Casdoor column",
"Column name": "Nombre de columna",
"Column type": "Tipo de columna",
"Database": "Base de datos",
"Database - Tooltip": "Base de datos - Tooltip",
"Database type": "Tipo de base de datos",
"Database type - Tooltip": "Tipo de base de datos - Tooltip",
"Edit Syncer": "Editar Sincronizador",
"Error text": "Texto de Error",
"Error text - Tooltip": "Texto de Error - Tooltip",
"Is hashed": "Esta hashed?",
"New Syncer": "Nuevo Sincronizador",
"Sync interval": "Intervalo de sincronización",
"Sync interval - Tooltip": "Intervalo de sincronización - Tooltip",
"Table": "Tabla",
"Table - Tooltip": "Tabla - Tooltip",
"Table columns": "Columnas de la tabla",
"Table columns - Tooltip": "Columnas de la tabla - Tooltip",
"Table primary key": "Clave primaria de la tabla",
"Table primary key - Tooltip": "Clave primaria de la tabla - Tooltip"
},
"token": {
"Access token": "Token de acceso",
"Authorization code": "Código de autorización",
"Edit Token": "Editar Token",
"Expires in": "Expira en",
"New Token": "Nuevo Token",
"Scope": "Alcance",
"Token type": "Tipo del Token"
},
"user": {
"\" + destType + \" reset": "\" + destType + \" reset",
"3rd-party logins": "3rd-party logins",
"3rd-party logins - Tooltip": "3rd-party logins - Tooltip",
"Address": "Dirección",
"Address - Tooltip": "Dirección - Tooltip",
"Affiliation": "Afiliación",
"Affiliation - Tooltip": "Afiliación - Tooltip",
"Bio": "Acerca de vos",
"Bio - Tooltip": "Acerca de vos - Tooltip",
"Cancel": "Cancelar",
"Captcha Verify Failed": "Fallo la verificación del Captcha",
"Captcha Verify Success": "Captcha verificado con éxito",
"Code Sent": "Código enviado",
"Country/Region": "Pais/Región",
"Country/Region - Tooltip": "Pais/Región - Tooltip",
"Edit User": "Editar usuario",
"Empty input!": "Campo requerido!",
"Homepage": "Página de Inicio",
"Homepage - Tooltip": "Página de Inicio - Tooltip",
"ID card": "Documento de identidad",
"Input your email": "Ingrese su email",
"Input your phone number": "Ingrese su número teléfonico",
"Is admin": "Es admin",
"Is admin - Tooltip": "Es admin - Tooltip",
"Is deleted": "Esta Eliminado",
"Is deleted - Tooltip": "Esta Eliminado - Tooltip",
"Is forbidden": "Está prohibido",
"Is forbidden - Tooltip": "Está prohibido - Tooltip",
"Is global admin": "Es admin global",
"Is global admin - Tooltip": "Es admin global - Tooltip",
"Link": "Enlace",
"Location": "Ubicación",
"Location - Tooltip": "Ubicación - Tooltip",
"Modify password...": "Cambiar contraseña...",
"New Email": "Nuevo Email",
"New Password": "Nueva Contraseña",
"New User": "Nuevo usuario",
"New phone": "Nuevo teléfono",
"OK": "OK",
"Old Password": "Contraseña anterior",
"Password": "Contraseña",
"Password Set": "Password Set",
"Properties": "Propiedades",
"Re-enter New": "Reingrese de nuevo",
"Reset Email...": "Cambiar Email...",
"Reset Phone...": "Cambiar Phone...",
"Select a photo...": "Select a photo...",
"Set Password": "Cambiar contraseña",
"Set new profile picture": "Cambiar imagen de perfil",
"Set password...": "Cambiando contraseña...",
"Tag": "Etiqueta",
"Tag - Tooltip": "Etiqueta - Tooltip",
"Title": "Titulo",
"Title - Tooltip": "Titulo - Tooltip",
"Two passwords you typed do not match.": "La contraseña no coincide.",
"Unlink": "Desvincular",
"Upload (.xlsx)": "Subir archivo (.xlsx)",
"Upload a photo": "Subir foto",
"WebAuthn credentials": "WebAuthn credentials",
"input password": "input password"
},
"webhook": {
"Content type": "Tipo de contenido",
"Content type - Tooltip": "Tipo de contenido - Tooltip",
"Edit Webhook": "Editar Webhook",
"Events": "Eventos",
"Events - Tooltip": "Eventos - Tooltip",
"Headers": "Cabeceras",
"Headers - Tooltip": "Cabeceras - Tooltip",
"Is user extended": "Es usuario extendido",
"Is user extended - Tooltip": "Es usuario extendido - Tooltip",
"Method": "Metodo",
"Method - Tooltip": "Metodo - Tooltip",
"Name": "Nombre",
"New Webhook": "Nuevo Webhook",
"URL": "URL",
"URL - Tooltip": "URL - Tooltip",
"Value": "Valor"
}
}