summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to 'web')
-rw-r--r--web/react/components/claim/claim_account.jsx6
-rw-r--r--web/react/components/claim/email_to_sso.jsx111
-rw-r--r--web/react/components/claim/sso_to_email.jsx116
-rw-r--r--web/react/components/create_comment.jsx2
-rw-r--r--web/react/components/create_post.jsx2
-rw-r--r--web/react/components/file_upload.jsx3
-rw-r--r--web/react/components/post_info.jsx32
-rw-r--r--web/react/components/rhs_comment.jsx32
-rw-r--r--web/react/components/rhs_root_post.jsx46
-rw-r--r--web/react/utils/utils.jsx28
-rw-r--r--web/static/i18n/en.json11
-rw-r--r--web/static/i18n/es.json16
12 files changed, 212 insertions, 193 deletions
diff --git a/web/react/components/claim/claim_account.jsx b/web/react/components/claim/claim_account.jsx
index 87026b762..5b3b584ee 100644
--- a/web/react/components/claim/claim_account.jsx
+++ b/web/react/components/claim/claim_account.jsx
@@ -43,11 +43,7 @@ export default class ClaimAccount extends React.Component {
);
}
- return (
- <div>
- {content}
- </div>
- );
+ return content;
}
}
diff --git a/web/react/components/claim/email_to_sso.jsx b/web/react/components/claim/email_to_sso.jsx
index 3d4b9e91f..87e86697c 100644
--- a/web/react/components/claim/email_to_sso.jsx
+++ b/web/react/components/claim/email_to_sso.jsx
@@ -70,62 +70,69 @@ class EmailToSSO extends React.Component {
const uiType = Utils.toTitleCase(this.props.type) + ' SSO';
return (
- <div className='col-sm-12'>
- <div className='signup-team__container'>
- <h3>
+ <div>
+ <h3>
+ <FormattedMessage
+ id='claim.email_to_sso.title'
+ defaultMessage='Switch Email/Password Account to {uiType}'
+ values={{
+ uiType: uiType
+ }}
+ />
+ </h3>
+ <form onSubmit={this.submit}>
+ <p>
<FormattedMessage
- id='claim.email_to_sso.title'
- defaultMessage='Switch Email/Password Account to {uiType}'
+ id='claim.email_to_sso.ssoType'
+ defaultMessage='Upon claiming your account, you will only be able to login with {type} SSO. You must already have a valid {type} account'
+ values={{
+ type: Utils.toTitleCase(this.props.type)
+ }}
+ />
+ </p>
+ <p>
+ <FormattedMessage
+ id='claim.email_to_sso.ssoNote'
+ defaultMessage='You must already have a valid {type} account'
+ values={{
+ type: Utils.toTitleCase(this.props.type)
+ }}
+ />
+ </p>
+ <p>
+ <FormattedMessage
+ id='claim.email_to_sso.enterPwd'
+ defaultMessage='Enter the password for your {team} {site} account'
+ values={{
+ team: this.props.teamDisplayName,
+ site: global.window.mm_config.SiteName
+ }}
+ />
+ </p>
+ <div className={formClass}>
+ <input
+ type='password'
+ className='form-control'
+ name='password'
+ ref='password'
+ placeholder={this.props.intl.formatMessage(holders.pwd)}
+ spellCheck='false'
+ />
+ </div>
+ {error}
+ <button
+ type='submit'
+ className='btn btn-primary'
+ >
+ <FormattedMessage
+ id='claim.email_to_sso.switchTo'
+ defaultMessage='Switch account to {uiType}'
values={{
uiType: uiType
}}
/>
- </h3>
- <form onSubmit={this.submit}>
- <p>
- <FormattedMessage
- id='claim.email_to_sso.ssoType'
- defaultMessage='Upon claiming your account, you will only be able to login with {type} SSO'
- values={{
- type: Utils.toTitleCase(this.props.type)
- }}
- />
- </p>
- <p>
- <FormattedMessage
- id='claim.email_to_sso.enterPwd'
- defaultMessage='Enter the password for your {team} {site} account'
- values={{
- team: this.props.teamDisplayName,
- site: global.window.mm_config.SiteName
- }}
- />
- </p>
- <div className={formClass}>
- <input
- type='password'
- className='form-control'
- name='password'
- ref='password'
- placeholder={this.props.intl.formatMessage(holders.pwd)}
- spellCheck='false'
- />
- </div>
- {error}
- <button
- type='submit'
- className='btn btn-primary'
- >
- <FormattedMessage
- id='claim.email_to_sso.switchTo'
- defaultMessage='Switch account to {uiType}'
- values={{
- uiType: uiType
- }}
- />
- </button>
- </form>
- </div>
+ </button>
+ </form>
</div>
);
}
@@ -141,4 +148,4 @@ EmailToSSO.propTypes = {
teamDisplayName: React.PropTypes.string.isRequired
};
-export default injectIntl(EmailToSSO); \ No newline at end of file
+export default injectIntl(EmailToSSO);
diff --git a/web/react/components/claim/sso_to_email.jsx b/web/react/components/claim/sso_to_email.jsx
index 73ff13cc9..74137082a 100644
--- a/web/react/components/claim/sso_to_email.jsx
+++ b/web/react/components/claim/sso_to_email.jsx
@@ -86,69 +86,67 @@ class SSOToEmail extends React.Component {
const uiType = Utils.toTitleCase(this.props.currentType) + ' SSO';
return (
- <div className='col-sm-12'>
- <div className='signup-team__container'>
- <h3>
+ <div>
+ <h3>
+ <FormattedMessage
+ id='claim.sso_to_email.title'
+ defaultMessage='Switch {type} Account to Email'
+ values={{
+ type: uiType
+ }}
+ />
+ </h3>
+ <form onSubmit={this.submit}>
+ <p>
<FormattedMessage
- id='claim.sso_to_email.title'
- defaultMessage='Switch {type} Account to Email'
+ id='claim.sso_to_email.description'
+ defaultMessage='Upon changing your account type, you will only be able to login with your email and password.'
+ />
+ </p>
+ <p>
+ <FormattedMessage
+ id='claim.sso_to_email_newPwd'
+ defaultMessage='Enter a new password for your {team} {site} account'
+ values={{
+ team: this.props.teamDisplayName,
+ site: global.window.mm_config.SiteName
+ }}
+ />
+ </p>
+ <div className={formClass}>
+ <input
+ type='password'
+ className='form-control'
+ name='password'
+ ref='password'
+ placeholder={formatMessage(holders.newPwd)}
+ spellCheck='false'
+ />
+ </div>
+ <div className={formClass}>
+ <input
+ type='password'
+ className='form-control'
+ name='passwordconfirm'
+ ref='passwordconfirm'
+ placeholder={formatMessage(holders.confirm)}
+ spellCheck='false'
+ />
+ </div>
+ {error}
+ <button
+ type='submit'
+ className='btn btn-primary'
+ >
+ <FormattedMessage
+ id='claim.sso_to_email.switchTo'
+ defaultMessage='Switch {type} to email and password'
values={{
type: uiType
}}
/>
- </h3>
- <form onSubmit={this.submit}>
- <p>
- <FormattedMessage
- id='claim.sso_to_email.description'
- defaultMessage='Upon changing your account type, you will only be able to login with your email and password.'
- />
- </p>
- <p>
- <FormattedMessage
- id='claim.sso_to_email_newPwd'
- defaultMessage='Enter a new password for your {team} {site} account'
- values={{
- team: this.props.teamDisplayName,
- site: global.window.mm_config.SiteName
- }}
- />
- </p>
- <div className={formClass}>
- <input
- type='password'
- className='form-control'
- name='password'
- ref='password'
- placeholder={formatMessage(holders.newPwd)}
- spellCheck='false'
- />
- </div>
- <div className={formClass}>
- <input
- type='password'
- className='form-control'
- name='passwordconfirm'
- ref='passwordconfirm'
- placeholder={formatMessage(holders.confirm)}
- spellCheck='false'
- />
- </div>
- {error}
- <button
- type='submit'
- className='btn btn-primary'
- >
- <FormattedMessage
- id='claim.sso_to_email.switchTo'
- defaultMessage='Switch {type} to email and password'
- values={{
- type: uiType
- }}
- />
- </button>
- </form>
- </div>
+ </button>
+ </form>
</div>
);
}
@@ -164,4 +162,4 @@ SSOToEmail.propTypes = {
teamDisplayName: React.PropTypes.string.isRequired
};
-export default injectIntl(SSOToEmail); \ No newline at end of file
+export default injectIntl(SSOToEmail);
diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx
index 5f8f76fab..24e0ff6e9 100644
--- a/web/react/components/create_comment.jsx
+++ b/web/react/components/create_comment.jsx
@@ -294,7 +294,7 @@ class CreateComment extends React.Component {
if (index !== -1) {
uploadsInProgress.splice(index, 1);
- this.refs.fileUpload.cancelUpload(id);
+ this.refs.fileUpload.getWrappedInstance().cancelUpload(id);
}
} else {
previews.splice(index, 1);
diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx
index 5d90d03d2..48b6594a1 100644
--- a/web/react/components/create_post.jsx
+++ b/web/react/components/create_post.jsx
@@ -288,7 +288,7 @@ class CreatePost extends React.Component {
if (index !== -1) {
uploadsInProgress.splice(index, 1);
- this.refs.fileUpload.cancelUpload(id);
+ this.refs.fileUpload.getWrappedInstance().cancelUpload(id);
}
} else {
previews.splice(index, 1);
diff --git a/web/react/components/file_upload.jsx b/web/react/components/file_upload.jsx
index f5c32c825..0454fe510 100644
--- a/web/react/components/file_upload.jsx
+++ b/web/react/components/file_upload.jsx
@@ -34,6 +34,7 @@ class FileUpload extends React.Component {
this.uploadFiles = this.uploadFiles.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handleDrop = this.handleDrop.bind(this);
+ this.cancelUpload = this.cancelUpload.bind(this);
this.state = {
requests: {}
@@ -331,4 +332,4 @@ FileUpload.propTypes = {
postType: React.PropTypes.string
};
-export default injectIntl(FileUpload);
+export default injectIntl(FileUpload, {withRef: true});
diff --git a/web/react/components/post_info.jsx b/web/react/components/post_info.jsx
index d1d516816..ffac6eaef 100644
--- a/web/react/components/post_info.jsx
+++ b/web/react/components/post_info.jsx
@@ -65,22 +65,24 @@ export default class PostInfo extends React.Component {
);
}
- dropdownContents.push(
- <li
- key='copyLink'
- role='presentation'
- >
- <a
- href='#'
- onClick={this.handlePermalink}
+ if (!Utils.isMobile()) {
+ dropdownContents.push(
+ <li
+ key='copyLink'
+ role='presentation'
>
- <FormattedMessage
- id='post_info.permalink'
- defaultMessage='Permalink'
- />
- </a>
- </li>
- );
+ <a
+ href='#'
+ onClick={this.handlePermalink}
+ >
+ <FormattedMessage
+ id='post_info.permalink'
+ defaultMessage='Permalink'
+ />
+ </a>
+ </li>
+ );
+ }
if (isOwner || isAdmin) {
dropdownContents.push(
diff --git a/web/react/components/rhs_comment.jsx b/web/react/components/rhs_comment.jsx
index 0d15c8599..201a4c569 100644
--- a/web/react/components/rhs_comment.jsx
+++ b/web/react/components/rhs_comment.jsx
@@ -97,22 +97,24 @@ class RhsComment extends React.Component {
var dropdownContents = [];
- dropdownContents.push(
- <li
- key='rhs-root-permalink'
- role='presentation'
- >
- <a
- href='#'
- onClick={this.handlePermalink}
+ if (!Utils.isMobile()) {
+ dropdownContents.push(
+ <li
+ key='rhs-root-permalink'
+ role='presentation'
>
- <FormattedMessage
- id='rhs_comment.permalink'
- defaultMessage='Permalink'
- />
- </a>
- </li>
- );
+ <a
+ href='#'
+ onClick={this.handlePermalink}
+ >
+ <FormattedMessage
+ id='rhs_comment.permalink'
+ defaultMessage='Permalink'
+ />
+ </a>
+ </li>
+ );
+ }
if (isOwner) {
dropdownContents.push(
diff --git a/web/react/components/rhs_root_post.jsx b/web/react/components/rhs_root_post.jsx
index 54f2e8262..adf66da85 100644
--- a/web/react/components/rhs_root_post.jsx
+++ b/web/react/components/rhs_root_post.jsx
@@ -5,7 +5,7 @@ import ChannelStore from '../stores/channel_store.jsx';
import UserProfile from './user_profile.jsx';
import UserStore from '../stores/user_store.jsx';
import * as TextFormatting from '../utils/text_formatting.jsx';
-import * as utils from '../utils/utils.jsx';
+import * as Utils from '../utils/utils.jsx';
import * as Emoji from '../utils/emoticons.jsx';
import FileAttachmentList from './file_attachment_list.jsx';
import twemoji from 'twemoji';
@@ -40,7 +40,7 @@ export default class RhsRootPost extends React.Component {
this.parseEmojis();
}
shouldComponentUpdate(nextProps) {
- if (!utils.areObjectsEqual(nextProps.post, this.props.post)) {
+ if (!Utils.areObjectsEqual(nextProps.post, this.props.post)) {
return true;
}
@@ -53,7 +53,7 @@ export default class RhsRootPost extends React.Component {
var post = this.props.post;
var currentUser = UserStore.getCurrentUser();
var isOwner = currentUser.id === post.user_id;
- var isAdmin = utils.isAdmin(currentUser.roles);
+ var isAdmin = Utils.isAdmin(currentUser.roles);
var timestamp = UserStore.getProfile(post.user_id).update_at;
var channel = ChannelStore.get(post.channel_id);
@@ -68,7 +68,7 @@ export default class RhsRootPost extends React.Component {
}
var systemMessageClass = '';
- if (utils.isSystemMessage(post)) {
+ if (Utils.isSystemMessage(post)) {
systemMessageClass = 'post--system';
}
@@ -88,22 +88,24 @@ export default class RhsRootPost extends React.Component {
var dropdownContents = [];
- dropdownContents.push(
- <li
- key='rhs-root-permalink'
- role='presentation'
- >
- <a
- href='#'
- onClick={this.handlePermalink}
+ if (!Utils.isMobile()) {
+ dropdownContents.push(
+ <li
+ key='rhs-root-permalink'
+ role='presentation'
>
- <FormattedMessage
- id='rhs_root.permalink'
- defaultMessage='Permalink'
- />
- </a>
- </li>
- );
+ <a
+ href='#'
+ onClick={this.handlePermalink}
+ >
+ <FormattedMessage
+ id='rhs_root.permalink'
+ defaultMessage='Permalink'
+ />
+ </a>
+ </li>
+ );
+ }
if (isOwner) {
dropdownContents.push(
@@ -198,7 +200,7 @@ export default class RhsRootPost extends React.Component {
}
botIndicator = <li className='col col__name bot-indicator'>{'BOT'}</li>;
- } else if (utils.isSystemMessage(post)) {
+ } else if (Utils.isSystemMessage(post)) {
userProfile = (
<UserProfile
userId={''}
@@ -209,12 +211,12 @@ export default class RhsRootPost extends React.Component {
);
}
- let src = '/api/v1/users/' + post.user_id + '/image?time=' + timestamp + '&' + utils.getSessionIndex();
+ let src = '/api/v1/users/' + post.user_id + '/image?time=' + timestamp + '&' + Utils.getSessionIndex();
if (post.props && post.props.from_webhook && global.window.mm_config.EnablePostIconOverride === 'true') {
if (post.props.override_icon_url) {
src = post.props.override_icon_url;
}
- } else if (utils.isSystemMessage(post)) {
+ } else if (Utils.isSystemMessage(post)) {
src = Constants.SYSTEM_MESSAGE_PROFILE_IMAGE;
}
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index bdf68fc03..2b946d81f 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -160,18 +160,22 @@ export function notifyMe(title, body, channel) {
}
if (permission === 'granted') {
- var notification = new Notification(title, {body, tag: body, icon: '/static/images/icon50x50.png'});
- notification.onclick = () => {
- window.focus();
- if (channel) {
- switchChannel(channel);
- } else {
- window.location.href = TeamStore.getCurrentTeamUrl() + '/channels/town-square';
- }
- };
- setTimeout(() => {
- notification.close();
- }, 5000);
+ try {
+ var notification = new Notification(title, {body, tag: body, icon: '/static/images/icon50x50.png'});
+ notification.onclick = () => {
+ window.focus();
+ if (channel) {
+ switchChannel(channel);
+ } else {
+ window.location.href = TeamStore.getCurrentTeamUrl() + '/channels/town-square';
+ }
+ };
+ setTimeout(() => {
+ notification.close();
+ }, 5000);
+ } catch (e) {
+ console.error(e); //eslint-disable-line no-console
+ }
}
});
}
diff --git a/web/static/i18n/en.json b/web/static/i18n/en.json
index b086b56e5..3d83eeda1 100644
--- a/web/static/i18n/en.json
+++ b/web/static/i18n/en.json
@@ -552,7 +552,8 @@
"claim.email_to_sso.pwdError": "Please enter your password.",
"claim.email_to_sso.pwd": "Password",
"claim.email_to_sso.title": "Switch Email/Password Account to {uiType}",
- "claim.email_to_sso.ssoType": "Upon claiming your account, you will only be able to login with {type} SSO",
+ "claim.email_to_sso.ssoType": "Upon claiming your account, you will only be able to login with {type} SSO. You must already have a valid {type} account",
+ "claim.email_to_sso.ssoNote": "You must already have a valid {type} account",
"claim.email_to_sso.enterPwd": "Enter the password for your {team} {site} account",
"claim.email_to_sso.switchTo": "Switch account to {uiType}",
"claim.sso_to_email.enterPwd": "Please enter a password.",
@@ -688,6 +689,10 @@
"member_item.makeAdmin": "Make Admin",
"member_item.removeMember": "Remove Member",
"member_item.member": "Member",
+ "member_team_item.confirmDemoteRoleTitle": "Confirm demotion from System Admin role",
+ "member_team_item.confirmDemotion": "Confirm Demotion",
+ "member_team_item.confirmDemoteDescription": "If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.",
+ "member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"yourteam\" -email=\"name@yourcompany.com\" -role=\"system_admin\"",
"member_team_item.member": "Member",
"member_team_item.systemAdmin": "System Admin",
"member_team_item.teamAdmin": "Team Admin",
@@ -696,10 +701,6 @@
"member_team_item.makeMember": "Make Member",
"member_team_item.makeActive": "Make Active",
"member_team_item.makeInactive": "Make Inactive",
- "member_team_item.confirmDemoteRoleTitle": "Confirm demotion from System Admin role",
- "member_team_item.confirmDemotion": "Confirm Demotion",
- "member_team_item.confirmDemoteDescription": "If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.",
- "member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"yourteam\" -email=\"name@yourcompany.com\" -role=\"system_admin\"",
"more_channels.join": "Join",
"more_channels.noMore": "No more channels to join",
"more_channels.createClick": "Click 'Create New Channel' to make a new one",
diff --git a/web/static/i18n/es.json b/web/static/i18n/es.json
index d0adafc63..8a4e96eb6 100644
--- a/web/static/i18n/es.json
+++ b/web/static/i18n/es.json
@@ -445,6 +445,7 @@
"audit_table.accountInactive": "Cuentas desactivadas",
"audit_table.action": "Acción",
"audit_table.attemptedAllowOAuthAccess": "Intento de permitir acceso a un nuevo servicio OAuth",
+ "audit_table.attemptedLicenseAdd": "Se ha intentado añadir nueva licencia",
"audit_table.attemptedLogin": "Intento de inicio de sesión",
"audit_table.attemptedOAuthToken": "Intento de obtener un token de acceso con OAuth",
"audit_table.attemptedPassword": "Intento de cambio de contraseña",
@@ -457,6 +458,8 @@
"audit_table.channelCreated": "Creado el canal/grupo {channelName}",
"audit_table.channelDeleted": "Borrado el canal/grupo con el URL {url}",
"audit_table.establishedDM": "Establecido un canal de mensajes directos con {username}",
+ "audit_table.failedExpiredLicenseAdd": "No se pudo agregar una nueva licencia, ya que ha caducado o aún no ha comenzado",
+ "audit_table.failedInvalidLicenseAdd": "No se pudo agregar una licencia inválida",
"audit_table.failedLogin": "intento de inicio de sesión FALLIDO",
"audit_table.failedOAuthAccess": "Falla al permitir acceso al nuevo servicio de OAuth - El URI de redirección no coincide con el previamente registrado",
"audit_table.failedPassword": "Falla al cambiar la contraseña - intento de actualizar la contraseña del usuario que está autenticado a través de oauth",
@@ -464,6 +467,7 @@
"audit_table.failedWebhookDelete": "Falla al borrar un webhook - condiciones inapropiadas",
"audit_table.headerUpdated": "Actualizado el encabezado del canal/grupo {channelName}",
"audit_table.ip": "IP: {ip}",
+ "audit_table.licenseRemoved": "Licencia eliminada con éxito",
"audit_table.loginAttempt": " (intento de inicio de sesión)",
"audit_table.loginFailure": " (inicio de sesión fallido)",
"audit_table.logout": "Cerrada la sesión de tu cuenta",
@@ -474,6 +478,7 @@
"audit_table.sentEmail": "Correo electrónico enviado a {email} para restablecer tu contraseña",
"audit_table.session": "ID de Sesión: {id}",
"audit_table.sessionRevoked": "La sesión con id {sessionId} fue revocada",
+ "audit_table.successfullLicenseAdd": "Licencia agregada con éxito",
"audit_table.successfullLogin": "Inicio de sesión satisfactorio",
"audit_table.successfullOAuthAccess": "Se entrego acceso al nuevo servicio de OAuth satisfactoriamente",
"audit_table.successfullOAuthToken": "Se agregó el nuevo servicio de OAuth satisfactoriamente",
@@ -576,7 +581,8 @@
"claim.email_to_sso.enterPwd": "Ingresa la contraseña para tu cuenta para {team} {site}",
"claim.email_to_sso.pwd": "Contraseña",
"claim.email_to_sso.pwdError": "Por favor introduce tu contraseña.",
- "claim.email_to_sso.ssoType": "Al reclamar tu cuenta, sólo podrás iniciar sesión con {type} SSO",
+ "claim.email_to_sso.ssoNote": "Debes tener una cuenta válida con {type}",
+ "claim.email_to_sso.ssoType": "Al reclamar tu cuenta, sólo podrás iniciar sesión con {type}. Debes tener una cuenta válida con {type}",
"claim.email_to_sso.switchTo": "Cambiar cuenta a {uiType}",
"claim.email_to_sso.title": "Cambiar Cuenta de Correo/Contraseña a {uiType}",
"claim.sso_to_email.confirm": "Confirmar Contraseña",
@@ -747,6 +753,10 @@
"member_item.makeAdmin": "Convertir en Admin de Equipo",
"member_item.member": "Miembro",
"member_item.removeMember": "Elminar Miembro",
+ "member_team_item.confirmDemoteDescription": "Si te degradas a ti mismo de la función de Administrador de Sistema y no hay otro usuario con privilegios de Administrador de Sistema, tendrás que volver a asignar un Administrador del Sistema accediendo al servidor de Mattermost a través de un terminal y ejecutar el siguiente comando.",
+ "member_team_item.confirmDemoteRoleTitle": "Confirmar el decenso del rol de Administrador de Sistema",
+ "member_team_item.confirmDemotion": "Confirmar decenso",
+ "member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"tuequipo\" -email=\"nombre@tuempresa.com\" -role=\"system_admin\"",
"member_team_item.inactive": "Inactivo",
"member_team_item.makeActive": "Activar",
"member_team_item.makeAdmin": "Convertir a Admin de Equipo",
@@ -755,10 +765,6 @@
"member_team_item.member": "Miembro",
"member_team_item.systemAdmin": "Administrador de Sistema",
"member_team_item.teamAdmin": "Admin de Equipo",
- "member_team_item.confirmDemoteDescription": "Si te degradas a ti mismo de la función de Administrador de Sistema y no hay otro usuario con privilegios de Administrador de Sistema, tendrás que volver a asignar un Administrador del Sistema accediendo al servidor de Mattermost a través de un terminal y ejecutar el siguiente comando.",
- "member_team_item.confirmDemoteRoleTitle": "Confirmar el decenso del rol de Administrador de Sistema",
- "member_team_item.confirmDemotion": "Confirmar decenso",
- "member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"tuequipo\" -email=\"nombre@tuempresa.com\" -role=\"system_admin\"",
"members_popover.msg": "Mensaje",
"members_popover.title": "Miembros",
"more_channels.close": "Cerrar",