PLT-5873 Renamed private groups to private channels (#5924)
* PLT-5873 Renamed private groups to private channels in web app * PLT-5873 Renamed private groups to private channels in server
Этот коммит содержится в:
коммит произвёл
George Goldberg
родитель
06e09a0553
Коммит
36c74d7b47
24
i18n/en.json
24
i18n/en.json
@@ -205,11 +205,11 @@
|
||||
},
|
||||
{
|
||||
"id": "api.channel.can_manage_channel.private_restricted_system_admin.app_error",
|
||||
"translation": "Private Group management and creation is restricted to System Administrators."
|
||||
"translation": "Private Channel management and creation is restricted to System Administrators."
|
||||
},
|
||||
{
|
||||
"id": "api.channel.can_manage_channel.private_restricted_team_admin.app_error",
|
||||
"translation": "Private Group management and creation is restricted to Team and System Administrators."
|
||||
"translation": "Private Channel management and creation is restricted to Team and System Administrators."
|
||||
},
|
||||
{
|
||||
"id": "api.channel.can_manage_channel.public_restricted_system_admin.app_error",
|
||||
@@ -329,7 +329,7 @@
|
||||
},
|
||||
{
|
||||
"id": "api.channel.leave.last_member.app_error",
|
||||
"translation": "You're the only member left, try removing the Private Group instead of leaving."
|
||||
"translation": "You're the only member left, try removing the Private Channel instead of leaving."
|
||||
},
|
||||
{
|
||||
"id": "api.channel.leave.left",
|
||||
@@ -2297,7 +2297,7 @@
|
||||
},
|
||||
{
|
||||
"id": "api.templates.upgrade_30_body.info",
|
||||
"translation": "<h3 style='font-weight: normal; margin-top: 10px;'>YOUR DUPLICATE ACCOUNTS HAVE BEEN UPDATED</h3>Your Mattermost server is being upgraded to Version 3.0, which lets you use a single account across multiple teams.<br/><br/>You are receiving this email because the upgrade process has detected your account had the same email or username as other accounts on the server.<br/><br/>The following updates have been made: <br/><br/>{{if .EmailChanged }}- The duplicate email of an account on the `/{{.TeamName}}` team was changed to `{{.Email}}`. You will need to use email and password to login, you can use this new email address for login.<br/><br/>{{end}}{{if .UsernameChanged }}- The duplicate username of an account on the team site `/{{.TeamName}}` has been changed to `{{.Username}}` to avoid confusion with other accounts.<br/><br/>{{end}} RECOMMENDED ACTION: <br/><br/>It is recommended that you login to your teams used by your duplicate accounts and add your primary account to the team and any public channels and private groups which you wish to continue using. <br/><br/>This gives your primary account access to all public channel and private group history. You can continue to access the direct message history of your duplicate accounts by logging in with their credentials. <br/><br/>FOR MORE INFORMATION: <br/><br/>For more information on the upgrade to Mattermost 3.0 please see: <a href='http://www.mattermost.org/upgrading-to-mattermost-3-0/'>http://www.mattermost.org/upgrading-to-mattermost-3-0/</a><br/><br/>"
|
||||
"translation": "<h3 style='font-weight: normal; margin-top: 10px;'>YOUR DUPLICATE ACCOUNTS HAVE BEEN UPDATED</h3>Your Mattermost server is being upgraded to Version 3.0, which lets you use a single account across multiple teams.<br/><br/>You are receiving this email because the upgrade process has detected your account had the same email or username as other accounts on the server.<br/><br/>The following updates have been made: <br/><br/>{{if .EmailChanged }}- The duplicate email of an account on the `/{{.TeamName}}` team was changed to `{{.Email}}`. You will need to use email and password to login, you can use this new email address for login.<br/><br/>{{end}}{{if .UsernameChanged }}- The duplicate username of an account on the team site `/{{.TeamName}}` has been changed to `{{.Username}}` to avoid confusion with other accounts.<br/><br/>{{end}} RECOMMENDED ACTION: <br/><br/>It is recommended that you login to your teams used by your duplicate accounts and add your primary account to the team and any channels which you wish to continue using. <br/><br/>This gives your primary account access to all channel history. You can continue to access the direct message history of your duplicate accounts by logging in with their credentials. <br/><br/>FOR MORE INFORMATION: <br/><br/>For more information on the upgrade to Mattermost 3.0 please see: <a href='http://www.mattermost.org/upgrading-to-mattermost-3-0/'>http://www.mattermost.org/upgrading-to-mattermost-3-0/</a><br/><br/>"
|
||||
},
|
||||
{
|
||||
"id": "api.templates.upgrade_30_subject.info",
|
||||
@@ -3503,22 +3503,6 @@
|
||||
"id": "error.not_found.title",
|
||||
"translation": "Page not found"
|
||||
},
|
||||
{
|
||||
"id": "leave_team_modal.desc",
|
||||
"translation": "You will be removed from all public channels and private groups. If the team is private you will not be able to rejoin the team. Are you sure?"
|
||||
},
|
||||
{
|
||||
"id": "leave_team_modal.no",
|
||||
"translation": "No"
|
||||
},
|
||||
{
|
||||
"id": "leave_team_modal.title",
|
||||
"translation": "Leave the team?"
|
||||
},
|
||||
{
|
||||
"id": "leave_team_modal.yes",
|
||||
"translation": "Yes"
|
||||
},
|
||||
{
|
||||
"id": "manaultesting.get_channel_id.no_found.debug",
|
||||
"translation": "Could not find channel: %v, %v possibilities searched"
|
||||
|
||||
@@ -179,7 +179,7 @@ export default class PolicySettings extends AdminSettings {
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='admin.general.policy.restrictPrivateChannelCreationTitle'
|
||||
defaultMessage='Enable private group creation for:'
|
||||
defaultMessage='Enable private channel creation for:'
|
||||
/>
|
||||
}
|
||||
value={this.state.restrictPrivateChannelCreation}
|
||||
@@ -187,7 +187,7 @@ export default class PolicySettings extends AdminSettings {
|
||||
helpText={
|
||||
<FormattedMessage
|
||||
id='admin.general.policy.restrictPrivateChannelCreationDescription'
|
||||
defaultMessage='Set policy on who can create private groups.'
|
||||
defaultMessage='Set policy on who can create private channels.'
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -202,7 +202,7 @@ export default class PolicySettings extends AdminSettings {
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='admin.general.policy.restrictPrivateChannelManagementTitle'
|
||||
defaultMessage='Enable private group renaming for:'
|
||||
defaultMessage='Enable private channel renaming for:'
|
||||
/>
|
||||
}
|
||||
value={this.state.restrictPrivateChannelManagement}
|
||||
@@ -210,7 +210,7 @@ export default class PolicySettings extends AdminSettings {
|
||||
helpText={
|
||||
<FormattedMessage
|
||||
id='admin.general.policy.restrictPrivateChannelManagementDescription'
|
||||
defaultMessage='Set policy on who can rename and set the header or purpose for private groups.'
|
||||
defaultMessage='Set policy on who can rename and set the header or purpose for private channels.'
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -225,7 +225,7 @@ export default class PolicySettings extends AdminSettings {
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='admin.general.policy.restrictPrivateChannelDeletionTitle'
|
||||
defaultMessage='Enable private group deletion for:'
|
||||
defaultMessage='Enable private channel deletion for:'
|
||||
/>
|
||||
}
|
||||
value={this.state.restrictPrivateChannelDeletion}
|
||||
@@ -233,7 +233,7 @@ export default class PolicySettings extends AdminSettings {
|
||||
helpText={
|
||||
<FormattedMessage
|
||||
id='admin.general.policy.restrictPrivateChannelDeletionDescription'
|
||||
defaultMessage='Set policy on who can delete private groups. Deleted groups can be recovered from the database using a {commandLineToolLink}.'
|
||||
defaultMessage='Set policy on who can delete private channels. Deleted channels can be recovered from the database using a {commandLineToolLink}.'
|
||||
values={{
|
||||
commandLineToolLink: (
|
||||
<a
|
||||
|
||||
@@ -12,34 +12,11 @@ import * as AsyncClient from 'utils/async_client.jsx';
|
||||
import Constants from 'utils/constants.jsx';
|
||||
const StatTypes = Constants.StatTypes;
|
||||
|
||||
import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||
|
||||
const holders = defineMessages({
|
||||
analyticsPublicChannels: {
|
||||
id: 'analytics.system.publicChannels',
|
||||
defaultMessage: 'Public Channels'
|
||||
},
|
||||
analyticsPrivateGroups: {
|
||||
id: 'analytics.system.privateGroups',
|
||||
defaultMessage: 'Private Groups'
|
||||
},
|
||||
analyticsFilePosts: {
|
||||
id: 'analytics.system.totalFilePosts',
|
||||
defaultMessage: 'Posts with Files'
|
||||
},
|
||||
analyticsHashtagPosts: {
|
||||
id: 'analytics.system.totalHashtagPosts',
|
||||
defaultMessage: 'Posts with Hashtags'
|
||||
},
|
||||
analyticsTextPosts: {
|
||||
id: 'analytics.system.textPosts',
|
||||
defaultMessage: 'Posts with Text-only'
|
||||
}
|
||||
});
|
||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||
|
||||
import React from 'react';
|
||||
|
||||
class SystemAnalytics extends React.Component {
|
||||
export default class SystemAnalytics extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@@ -249,8 +226,8 @@ class SystemAnalytics extends React.Component {
|
||||
</div>
|
||||
);
|
||||
|
||||
const channelTypeData = formatChannelDoughtnutData(stats[StatTypes.TOTAL_PUBLIC_CHANNELS], stats[StatTypes.TOTAL_PRIVATE_GROUPS], this.props.intl);
|
||||
const postTypeData = formatPostDoughtnutData(stats[StatTypes.TOTAL_FILE_POSTS], stats[StatTypes.TOTAL_HASHTAG_POSTS], stats[StatTypes.TOTAL_POSTS], this.props.intl);
|
||||
const channelTypeData = formatChannelDoughtnutData(stats[StatTypes.TOTAL_PUBLIC_CHANNELS], stats[StatTypes.TOTAL_PRIVATE_GROUPS]);
|
||||
const postTypeData = formatPostDoughtnutData(stats[StatTypes.TOTAL_FILE_POSTS], stats[StatTypes.TOTAL_HASHTAG_POSTS], stats[StatTypes.TOTAL_POSTS]);
|
||||
|
||||
let postTypeGraph;
|
||||
if (stats[StatTypes.TOTAL_POSTS] !== -1) {
|
||||
@@ -430,16 +407,12 @@ class SystemAnalytics extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
SystemAnalytics.propTypes = {
|
||||
intl: intlShape.isRequired
|
||||
};
|
||||
|
||||
export default injectIntl(SystemAnalytics);
|
||||
|
||||
export function formatChannelDoughtnutData(totalPublic, totalPrivate, intl) {
|
||||
const {formatMessage} = intl;
|
||||
export function formatChannelDoughtnutData(totalPublic, totalPrivate) {
|
||||
const channelTypeData = {
|
||||
labels: [formatMessage(holders.analyticsPublicChannels), formatMessage(holders.analyticsPrivateGroups)],
|
||||
labels: [
|
||||
Utils.localizeMessage('analytics.system.publicChannels', 'Public Channels'),
|
||||
Utils.localizeMessage('analytics.system.privateGroups', 'Private Channels')
|
||||
],
|
||||
datasets: [{
|
||||
data: [totalPublic, totalPrivate],
|
||||
backgroundColor: ['#46BFBD', '#FDB45C'],
|
||||
@@ -450,10 +423,13 @@ export function formatChannelDoughtnutData(totalPublic, totalPrivate, intl) {
|
||||
return channelTypeData;
|
||||
}
|
||||
|
||||
export function formatPostDoughtnutData(filePosts, hashtagPosts, totalPosts, intl) {
|
||||
const {formatMessage} = intl;
|
||||
export function formatPostDoughtnutData(filePosts, hashtagPosts, totalPosts) {
|
||||
const postTypeData = {
|
||||
labels: [formatMessage(holders.analyticsFilePosts), formatMessage(holders.analyticsHashtagPosts), formatMessage(holders.analyticsTextPosts)],
|
||||
labels: [
|
||||
Utils.localizeMessage('analytics.system.totalFilePosts', 'Posts with Files'),
|
||||
Utils.localizeMessage('analytics.system.totalHashtagPosts', 'Posts with Hashtags'),
|
||||
Utils.localizeMessage('analytics.system.textPosts', 'Posts with Text-only')
|
||||
],
|
||||
datasets: [{
|
||||
data: [filePosts, hashtagPosts, (totalPosts - filePosts - hashtagPosts)],
|
||||
backgroundColor: ['#46BFBD', '#F7464A', '#FDB45C'],
|
||||
|
||||
@@ -270,7 +270,7 @@ export default class TeamAnalytics extends React.Component {
|
||||
title={
|
||||
<FormattedMessage
|
||||
id='analytics.team.privateGroups'
|
||||
defaultMessage='Private Groups'
|
||||
defaultMessage='Private Channels'
|
||||
/>
|
||||
}
|
||||
icon='fa-globe'
|
||||
|
||||
@@ -14,7 +14,7 @@ const holders = defineMessages({
|
||||
},
|
||||
channelCreated: {
|
||||
id: 'audit_table.channelCreated',
|
||||
defaultMessage: 'Created the {channelName} channel/group'
|
||||
defaultMessage: 'Created the {channelName} channel'
|
||||
},
|
||||
establishedDM: {
|
||||
id: 'audit_table.establishedDM',
|
||||
@@ -22,23 +22,23 @@ const holders = defineMessages({
|
||||
},
|
||||
nameUpdated: {
|
||||
id: 'audit_table.nameUpdated',
|
||||
defaultMessage: 'Updated the {channelName} channel/group name'
|
||||
defaultMessage: 'Updated the {channelName} channel name'
|
||||
},
|
||||
headerUpdated: {
|
||||
id: 'audit_table.headerUpdated',
|
||||
defaultMessage: 'Updated the {channelName} channel/group header'
|
||||
defaultMessage: 'Updated the {channelName} channel header'
|
||||
},
|
||||
channelDeleted: {
|
||||
id: 'audit_table.channelDeleted',
|
||||
defaultMessage: 'Deleted the channel/group with the URL {url}'
|
||||
defaultMessage: 'Deleted the channel with the URL {url}'
|
||||
},
|
||||
userAdded: {
|
||||
id: 'audit_table.userAdded',
|
||||
defaultMessage: 'Added {username} to the {channelName} channel/group'
|
||||
defaultMessage: 'Added {username} to the {channelName} channel'
|
||||
},
|
||||
userRemoved: {
|
||||
id: 'audit_table.userRemoved',
|
||||
defaultMessage: 'Removed {username} to the {channelName} channel/group'
|
||||
defaultMessage: 'Removed {username} to the {channelName} channel'
|
||||
},
|
||||
attemptedRegisterApp: {
|
||||
id: 'audit_table.attemptedRegisterApp',
|
||||
|
||||
@@ -25,6 +25,7 @@ export default class ChangeUrlModal extends React.Component {
|
||||
userEdit: false
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
// This check prevents the url being deleted when we re-render
|
||||
// because of user status check
|
||||
@@ -34,15 +35,18 @@ export default class ChangeUrlModal extends React.Component {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
if (this.props.show === true && prevProps.show === false) {
|
||||
ReactDOM.findDOMNode(this.refs.urlinput).select();
|
||||
}
|
||||
}
|
||||
|
||||
onURLChanged(e) {
|
||||
const url = e.target.value.trim();
|
||||
this.setState({currentURL: url.replace(/[^A-Za-z0-9-_]/g, '').toLowerCase(), userEdit: true});
|
||||
}
|
||||
|
||||
getURLError(url) {
|
||||
let error = []; //eslint-disable-line prefer-const
|
||||
if (url.length < 2) {
|
||||
@@ -101,6 +105,7 @@ export default class ChangeUrlModal extends React.Component {
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
doSubmit(e) {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -113,10 +118,12 @@ export default class ChangeUrlModal extends React.Component {
|
||||
this.setState({urlError: '', userEdit: false});
|
||||
this.props.onModalSubmit(url);
|
||||
}
|
||||
|
||||
doCancel() {
|
||||
this.setState({urlError: '', userEdit: false});
|
||||
this.props.onModalDismissed();
|
||||
}
|
||||
|
||||
render() {
|
||||
let urlClass = 'input-group input-group--limit';
|
||||
let error = null;
|
||||
@@ -155,9 +162,19 @@ export default class ChangeUrlModal extends React.Component {
|
||||
className='form-horizontal'
|
||||
>
|
||||
<Modal.Body>
|
||||
<div className='modal-intro'>{this.props.description}</div>
|
||||
<div className='modal-intro'>
|
||||
<FormattedMessage
|
||||
id='channel_flow.changeUrlDescription'
|
||||
defaultMessage='Some characters are now allowed in URLs and may be removed.'
|
||||
/>
|
||||
</div>
|
||||
<div className='form-group'>
|
||||
<label className='col-sm-2 form__label control-label'>{this.props.urlLabel}</label>
|
||||
<label className='col-sm-2 form__label control-label'>
|
||||
<FormattedMessage
|
||||
id='change_url.urlLabel'
|
||||
defaultMessage='Channel URL'
|
||||
/>
|
||||
</label>
|
||||
<div className='col-sm-10'>
|
||||
<div className={urlClass}>
|
||||
<OverlayTrigger
|
||||
@@ -211,8 +228,6 @@ export default class ChangeUrlModal extends React.Component {
|
||||
ChangeUrlModal.defaultProps = {
|
||||
show: false,
|
||||
title: 'Change URL',
|
||||
desciption: '',
|
||||
urlLabel: 'URL',
|
||||
submitButtonText: 'Save',
|
||||
currentURL: '',
|
||||
serverError: null
|
||||
@@ -220,10 +235,8 @@ ChangeUrlModal.defaultProps = {
|
||||
|
||||
ChangeUrlModal.propTypes = {
|
||||
show: React.PropTypes.bool.isRequired,
|
||||
title: React.PropTypes.string,
|
||||
description: React.PropTypes.string,
|
||||
urlLabel: React.PropTypes.string,
|
||||
submitButtonText: React.PropTypes.string,
|
||||
title: React.PropTypes.node,
|
||||
submitButtonText: React.PropTypes.node,
|
||||
currentURL: React.PropTypes.string,
|
||||
serverError: React.PropTypes.node,
|
||||
onModalSubmit: React.PropTypes.func.isRequired,
|
||||
|
||||
@@ -349,21 +349,6 @@ export default class ChannelHeader extends React.Component {
|
||||
channelTitle = ChannelUtils.buildGroupChannelName(channel.id);
|
||||
}
|
||||
|
||||
let channelTerm = (
|
||||
<FormattedMessage
|
||||
id='channel_header.channel'
|
||||
defaultMessage='Channel'
|
||||
/>
|
||||
);
|
||||
if (channel.type === Constants.PRIVATE_CHANNEL) {
|
||||
channelTerm = (
|
||||
<FormattedMessage
|
||||
id='channel_header.group'
|
||||
defaultMessage='Group'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
let popoverListMembers;
|
||||
if (!isDirect) {
|
||||
popoverListMembers = (
|
||||
@@ -560,10 +545,7 @@ export default class ChannelHeader extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.delete'
|
||||
defaultMessage='Delete {term}'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Delete Channel'
|
||||
/>
|
||||
</ToggleModalButton>
|
||||
</li>
|
||||
@@ -590,10 +572,7 @@ export default class ChannelHeader extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.setHeader'
|
||||
defaultMessage='Edit {term} Header'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Edit Channel Header'
|
||||
/>
|
||||
</ToggleModalButton>
|
||||
</li>
|
||||
@@ -612,10 +591,7 @@ export default class ChannelHeader extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.setPurpose'
|
||||
defaultMessage='Edit {term} Purpose'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Edit Channel Purpose'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
@@ -634,10 +610,7 @@ export default class ChannelHeader extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.rename'
|
||||
defaultMessage='Rename {term}'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Rename Channel'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
@@ -674,10 +647,7 @@ export default class ChannelHeader extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.leave'
|
||||
defaultMessage='Leave {term}'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Leave Channel'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
import {Modal} from 'react-bootstrap';
|
||||
import TeamStore from 'stores/team_store.jsx';
|
||||
import Constants from 'utils/constants.jsx';
|
||||
|
||||
import {FormattedMessage} from 'react-intl';
|
||||
|
||||
@@ -37,21 +36,6 @@ export default class DeleteChannelModal extends React.Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
let channelTerm = (
|
||||
<FormattedMessage
|
||||
id='delete_channel.channel'
|
||||
defaultMessage='channel'
|
||||
/>
|
||||
);
|
||||
if (this.props.channel.type === Constants.PRIVATE_CHANNEL) {
|
||||
channelTerm = (
|
||||
<FormattedMessage
|
||||
id='delete_channel.group'
|
||||
defaultMessage='group'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal
|
||||
show={this.state.show}
|
||||
@@ -70,10 +54,9 @@ export default class DeleteChannelModal extends React.Component {
|
||||
<div className='alert alert-danger'>
|
||||
<FormattedMessage
|
||||
id='delete_channel.question'
|
||||
defaultMessage='This will delete the channel from the team and make its contents inaccessible for all users. Are you sure you wish to delete the {display_name} {term}?'
|
||||
defaultMessage='This will delete the channel from the team and make its contents inaccessible for all users. Are you sure you wish to delete the {display_name} channel?'
|
||||
values={{
|
||||
display_name: this.props.channel.display_name,
|
||||
term: (channelTerm)
|
||||
display_name: this.props.channel.display_name
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -110,21 +110,6 @@ export default class EditChannelPurposeModal extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
let channelType = (
|
||||
<FormattedMessage
|
||||
id='edit_channel_purpose_modal.channel'
|
||||
defaultMessage='Channel'
|
||||
/>
|
||||
);
|
||||
if (this.props.channel.type === Constants.PRIVATE_CHANNEL) {
|
||||
channelType = (
|
||||
<FormattedMessage
|
||||
id='edit_channel_purpose_modal.group'
|
||||
defaultMessage='Group'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal
|
||||
className='modal-edit-channel-purpose'
|
||||
@@ -142,10 +127,7 @@ export default class EditChannelPurposeModal extends React.Component {
|
||||
<p>
|
||||
<FormattedMessage
|
||||
id='edit_channel_purpose_modal.body'
|
||||
defaultMessage='Describe how this {type} should be used. This text appears in the channel list in the "More..." menu and helps others decide whether to join.'
|
||||
values={{
|
||||
type: (channelType)
|
||||
}}
|
||||
defaultMessage='Describe how this channel should be used. This text appears in the channel list in the "More..." menu and helps others decide whether to join.'
|
||||
/>
|
||||
</p>
|
||||
<textarea
|
||||
|
||||
@@ -203,7 +203,7 @@ export default class AbstractIncomingWebhook extends React.Component {
|
||||
<div className='form__help'>
|
||||
<FormattedMessage
|
||||
id='add_incoming_webhook.channel.help'
|
||||
defaultMessage='Public channel or private group that receives the webhook payloads. You must belong to the private group when setting up the webhook.'
|
||||
defaultMessage='Public or private channel that receives the webhook payloads. You must belong to the private channel when setting up the webhook.'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -81,7 +81,7 @@ class LeaveTeamModal extends React.Component {
|
||||
<Modal.Body>
|
||||
<FormattedMessage
|
||||
id='leave_team_modal.desc'
|
||||
defaultMessage='You will be removed from all public channels and private groups. If the team is private you will not be able to rejoin the team. Are you sure?'
|
||||
defaultMessage='You will be removed from all public and private channels. If the team is private you will not be able to rejoin the team. Are you sure?'
|
||||
/>
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
|
||||
@@ -266,14 +266,14 @@ export default class MoreDirectChannels extends React.Component {
|
||||
note = (
|
||||
<FormattedMessage
|
||||
id='more_direct_channels.new_convo_note.full'
|
||||
defaultMessage='You’ve reached the maximum number of people for this conversation. Consider creating a private group instead.'
|
||||
defaultMessage='You’ve reached the maximum number of people for this conversation. Consider creating a private channel instead.'
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
note = (
|
||||
<FormattedMessage
|
||||
id='more_direct_channels.new_convo_note'
|
||||
defaultMessage='This will start a new conversation. If you’re adding a lot of people, consider creating a private group instead.'
|
||||
defaultMessage='This will start a new conversation. If you’re adding a lot of people, consider creating a private channel instead.'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -241,21 +241,6 @@ export default class Navbar extends React.Component {
|
||||
|
||||
createDropdown(channel, channelTitle, isAdmin, isSystemAdmin, isChannelAdmin, isDirect, isGroup, popoverContent) {
|
||||
if (channel) {
|
||||
let channelTerm = (
|
||||
<FormattedMessage
|
||||
id='channel_header.channel'
|
||||
defaultMessage='Channel'
|
||||
/>
|
||||
);
|
||||
if (channel.type === Constants.PRIVATE_CHANNEL) {
|
||||
channelTerm = (
|
||||
<FormattedMessage
|
||||
id='channel_header.group'
|
||||
defaultMessage='Group'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
let viewInfoOption;
|
||||
let viewPinnedPostsOption;
|
||||
let addMembersOption;
|
||||
@@ -449,10 +434,7 @@ export default class Navbar extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.setHeader'
|
||||
defaultMessage='Set {term} Header...'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Edit Channel Header'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
@@ -467,10 +449,7 @@ export default class Navbar extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.setPurpose'
|
||||
defaultMessage='Set {term} Purpose...'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Edit Channel Purpose'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
@@ -485,10 +464,7 @@ export default class Navbar extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.rename'
|
||||
defaultMessage='Rename {term}...'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Rename Channel'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
@@ -506,10 +482,7 @@ export default class Navbar extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.delete'
|
||||
defaultMessage='Delete {term}...'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Delete Channel'
|
||||
/>
|
||||
</ToggleModalButton>
|
||||
</li>
|
||||
@@ -528,10 +501,7 @@ export default class Navbar extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_header.leave'
|
||||
defaultMessage='Leave {term}'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Leave Channel'
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -9,43 +9,17 @@ import {cleanUpUrlable} from 'utils/url.jsx';
|
||||
import NewChannelModal from './new_channel_modal.jsx';
|
||||
import ChangeURLModal from './change_url_modal.jsx';
|
||||
|
||||
import {intlShape, injectIntl, defineMessages, FormattedMessage} from 'react-intl';
|
||||
import {FormattedMessage} from 'react-intl';
|
||||
import {createChannel} from 'actions/channel_actions.jsx';
|
||||
import {browserHistory} from 'react-router/es6';
|
||||
|
||||
const SHOW_NEW_CHANNEL = 1;
|
||||
const SHOW_EDIT_URL = 2;
|
||||
const SHOW_EDIT_URL_THEN_COMPLETE = 3;
|
||||
const messages = defineMessages({
|
||||
channel: {
|
||||
id: 'channel_flow.channel',
|
||||
defaultMessage: 'Channel'
|
||||
},
|
||||
group: {
|
||||
id: 'channel_flow.group',
|
||||
defaultMessage: 'Group'
|
||||
},
|
||||
change: {
|
||||
id: 'channel_flow.changeUrlTitle',
|
||||
defaultMessage: 'Change {term} URL'
|
||||
},
|
||||
set: {
|
||||
id: 'channel_flow.set_url_title',
|
||||
defaultMessage: 'Set {term} URL'
|
||||
},
|
||||
create: {
|
||||
id: 'channel_flow.create',
|
||||
defaultMessage: 'Create {term}'
|
||||
},
|
||||
changeUrlDescription: {
|
||||
id: 'channel_flow.changeUrlDescription',
|
||||
defaultMessage: 'Some characters are not allowed in URLs and may be removed.'
|
||||
}
|
||||
});
|
||||
|
||||
import React from 'react';
|
||||
|
||||
class NewChannelFlow extends React.Component {
|
||||
export default class NewChannelFlow extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@@ -182,9 +156,6 @@ class NewChannelFlow extends React.Component {
|
||||
|
||||
let changeURLTitle = '';
|
||||
let changeURLSubmitButtonText = '';
|
||||
let channelTerm = '';
|
||||
|
||||
const {formatMessage} = this.props.intl;
|
||||
|
||||
// Only listen to flow state if we are being shown
|
||||
if (this.props.show) {
|
||||
@@ -192,21 +163,34 @@ class NewChannelFlow extends React.Component {
|
||||
case SHOW_NEW_CHANNEL:
|
||||
if (this.state.channelType === 'O') {
|
||||
showChannelModal = true;
|
||||
channelTerm = formatMessage(messages.channel);
|
||||
} else {
|
||||
showGroupModal = true;
|
||||
channelTerm = formatMessage(messages.group);
|
||||
}
|
||||
break;
|
||||
case SHOW_EDIT_URL:
|
||||
showChangeURLModal = true;
|
||||
changeURLTitle = formatMessage(messages.change, {term: channelTerm});
|
||||
changeURLSubmitButtonText = formatMessage(messages.change, {term: channelTerm});
|
||||
changeURLTitle = (
|
||||
<FormattedMessage
|
||||
id='channel_flow.changeUrlTitle'
|
||||
defaultMessage='Change Channel URL'
|
||||
/>
|
||||
);
|
||||
changeURLSubmitButtonText = changeURLTitle;
|
||||
break;
|
||||
case SHOW_EDIT_URL_THEN_COMPLETE:
|
||||
showChangeURLModal = true;
|
||||
changeURLTitle = formatMessage(messages.set, {term: channelTerm});
|
||||
changeURLSubmitButtonText = formatMessage(messages.create, {term: channelTerm});
|
||||
changeURLTitle = (
|
||||
<FormattedMessage
|
||||
id='channel_flow.set_url_title'
|
||||
defaultMessage='Set Channel URL'
|
||||
/>
|
||||
);
|
||||
changeURLSubmitButtonText = (
|
||||
<FormattedMessage
|
||||
id='channel_flow.create'
|
||||
defaultMessage='Create Channel'
|
||||
/>
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -239,8 +223,6 @@ class NewChannelFlow extends React.Component {
|
||||
<ChangeURLModal
|
||||
show={showChangeURLModal}
|
||||
title={changeURLTitle}
|
||||
description={formatMessage(messages.changeUrlDescription)}
|
||||
urlLabel={channelTerm + ' URL'}
|
||||
submitButtonText={changeURLSubmitButtonText}
|
||||
currentURL={this.state.channelName}
|
||||
serverError={this.state.serverError}
|
||||
@@ -259,10 +241,7 @@ NewChannelFlow.defaultProps = {
|
||||
};
|
||||
|
||||
NewChannelFlow.propTypes = {
|
||||
intl: intlShape.isRequired,
|
||||
show: React.PropTypes.bool.isRequired,
|
||||
channelType: React.PropTypes.string.isRequired,
|
||||
onModalDismissed: React.PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default injectIntl(NewChannelFlow);
|
||||
|
||||
@@ -135,7 +135,7 @@ export default class NewChannelModal extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_modal.privateGroup2'
|
||||
defaultMessage='Create a private group'
|
||||
defaultMessage='Create a private channel'
|
||||
/>
|
||||
</a>
|
||||
);
|
||||
@@ -151,33 +151,20 @@ export default class NewChannelModal extends React.Component {
|
||||
createPrivateChannelLink = null;
|
||||
}
|
||||
|
||||
var channelTerm = '';
|
||||
var channelSwitchText = '';
|
||||
switch (this.props.channelType) {
|
||||
case 'P':
|
||||
channelTerm = (
|
||||
<FormattedMessage
|
||||
id='channel_modal.group'
|
||||
defaultMessage='Group'
|
||||
/>
|
||||
);
|
||||
channelSwitchText = (
|
||||
<div className='modal-intro'>
|
||||
<FormattedMessage
|
||||
id='channel_modal.privateGroup1'
|
||||
defaultMessage='Create a new private group with restricted membership. '
|
||||
defaultMessage='Create a new private channel with restricted membership. '
|
||||
/>
|
||||
{createPublicChannelLink}
|
||||
</div>
|
||||
);
|
||||
break;
|
||||
case 'O':
|
||||
channelTerm = (
|
||||
<FormattedMessage
|
||||
id='channel_modal.channel'
|
||||
defaultMessage='Channel'
|
||||
/>
|
||||
);
|
||||
channelSwitchText = (
|
||||
<div className='modal-intro'>
|
||||
<FormattedMessage
|
||||
@@ -205,9 +192,8 @@ export default class NewChannelModal extends React.Component {
|
||||
<Modal.Title>
|
||||
<FormattedMessage
|
||||
id='channel_modal.modalTitle'
|
||||
defaultMessage='New '
|
||||
defaultMessage='New Channel'
|
||||
/>
|
||||
{channelTerm}
|
||||
</Modal.Title>
|
||||
</Modal.Header>
|
||||
<form
|
||||
@@ -282,10 +268,7 @@ export default class NewChannelModal extends React.Component {
|
||||
<p className='input__help'>
|
||||
<FormattedMessage
|
||||
id='channel_modal.descriptionHelp'
|
||||
defaultMessage='Describe how this {term} should be used.'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Describe how this channel should be used.'
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
@@ -319,10 +302,7 @@ export default class NewChannelModal extends React.Component {
|
||||
<p className='input__help'>
|
||||
<FormattedMessage
|
||||
id='channel_modal.headerHelp'
|
||||
defaultMessage='Set text that will appear in the header of the {term} beside the {term} name. For example, include frequently used links by typing [Link Title](http://example.com).'
|
||||
values={{
|
||||
term: (channelTerm)
|
||||
}}
|
||||
defaultMessage='Set text that will appear in the header of the channel beside the channel name. For example, include frequently used links by typing [Link Title](http://example.com).'
|
||||
/>
|
||||
</p>
|
||||
{serverError}
|
||||
@@ -348,9 +328,8 @@ export default class NewChannelModal extends React.Component {
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_modal.createNew'
|
||||
defaultMessage='Create New '
|
||||
defaultMessage='Create New Channel'
|
||||
/>
|
||||
{channelTerm}
|
||||
</button>
|
||||
</Modal.Footer>
|
||||
</form>
|
||||
|
||||
@@ -446,7 +446,7 @@ export default class Sidebar extends React.Component {
|
||||
<div>
|
||||
<FormattedHTMLMessage
|
||||
id='sidebar.tutorialScreen1'
|
||||
defaultMessage='<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. They’re open to everyone on your team. To send private communications use <strong>Direct Messages</strong> for a single person or <strong>Private Groups</strong> for multiple people.</p>'
|
||||
defaultMessage='<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. They’re open to everyone on your team. To send private communications use <strong>Direct Messages</strong> for a single person or <strong>Private Channels</strong> for multiple people.</p>'
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
@@ -473,7 +473,7 @@ export default class Sidebar extends React.Component {
|
||||
id='sidebar.tutorialScreen3'
|
||||
defaultMessage='<h4>Creating and Joining Channels</h4>
|
||||
<p>Click <strong>"More..."</strong> to create a new channel or join an existing one.</p>
|
||||
<p>You can also create a new channel or private group by clicking the <strong>"+" symbol</strong> next to the channel or private group header.</p>'
|
||||
<p>You can also create a new public or private channel by clicking the <strong>"+" symbol</strong> next to the public or private channel header.</p>'
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
@@ -700,7 +700,7 @@ export default class Sidebar extends React.Component {
|
||||
<Tooltip id='new-channel-tooltip' >
|
||||
<FormattedMessage
|
||||
id='sidebar.createChannel'
|
||||
defaultMessage='Create new channel'
|
||||
defaultMessage='Create new public channel'
|
||||
/>
|
||||
</Tooltip>
|
||||
);
|
||||
@@ -708,7 +708,7 @@ export default class Sidebar extends React.Component {
|
||||
<Tooltip id='new-group-tooltip'>
|
||||
<FormattedMessage
|
||||
id='sidebar.createGroup'
|
||||
defaultMessage='Create new group'
|
||||
defaultMessage='Create new private channel'
|
||||
/>
|
||||
</Tooltip>
|
||||
);
|
||||
@@ -872,7 +872,7 @@ export default class Sidebar extends React.Component {
|
||||
<h4>
|
||||
<FormattedMessage
|
||||
id='sidebar.pg'
|
||||
defaultMessage='Private Groups'
|
||||
defaultMessage='Private Channels'
|
||||
/>
|
||||
{createPrivateChannelIcon}
|
||||
</h4>
|
||||
|
||||
@@ -33,7 +33,7 @@ export default class SearchSuggestionList extends SuggestionList {
|
||||
text = (
|
||||
<FormattedMessage
|
||||
id='suggestion.search.private'
|
||||
defaultMessage='Private Groups'
|
||||
defaultMessage='Private Channels'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ export default class TutorialIntroScreens extends React.Component {
|
||||
<FormattedHTMLMessage
|
||||
id='tutorial_intro.screenTwo'
|
||||
defaultMessage='<h3>How Mattermost works:</h3>
|
||||
<p>Communication happens in public discussion channels, private groups and direct messages.</p>
|
||||
<p>Communication happens in public discussion channels, private channels and direct messages.</p>
|
||||
<p>Everything is archived and searchable from any web-enabled desktop, laptop or phone.</p>'
|
||||
/>
|
||||
{appDownloadLink}
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
"add_emoji.save": "Save",
|
||||
"add_incoming_webhook.cancel": "Cancel",
|
||||
"add_incoming_webhook.channel": "Channel",
|
||||
"add_incoming_webhook.channel.help": "Public channel or private group that receives the webhook payloads. You must belong to the private group when setting up the webhook.",
|
||||
"add_incoming_webhook.channel.help": "Public or private channel that receives the webhook payloads. You must belong to the private channel when setting up the webhook.",
|
||||
"add_incoming_webhook.channelRequired": "A valid channel is required",
|
||||
"add_incoming_webhook.description": "Description",
|
||||
"add_incoming_webhook.description.help": "Description for your incoming webhook.",
|
||||
@@ -329,13 +329,13 @@
|
||||
"admin.general.policy.permissionsSystemAdmin": "System Admins",
|
||||
"admin.general.policy.restrictPostDeleteDescription": "Set policy on who has permission to delete messages.",
|
||||
"admin.general.policy.restrictPostDeleteTitle": "Allow which users to delete messages:",
|
||||
"admin.general.policy.restrictPrivateChannelCreationDescription": "Set policy on who can create private groups.",
|
||||
"admin.general.policy.restrictPrivateChannelCreationTitle": "Enable private group creation for:",
|
||||
"admin.general.policy.restrictPrivateChannelCreationDescription": "Set policy on who can create private channels.",
|
||||
"admin.general.policy.restrictPrivateChannelCreationTitle": "Enable private channel creation for:",
|
||||
"admin.general.policy.restrictPrivateChannelDeletionCommandLineToolLink": "command line tool",
|
||||
"admin.general.policy.restrictPrivateChannelDeletionDescription": "Set policy on who can delete private groups. Deleted groups can be recovered from the database using a {commandLineToolLink}.",
|
||||
"admin.general.policy.restrictPrivateChannelDeletionTitle": "Enable private group deletion for:",
|
||||
"admin.general.policy.restrictPrivateChannelManagementDescription": "Set policy on who can rename and set the header or purpose for private groups.",
|
||||
"admin.general.policy.restrictPrivateChannelManagementTitle": "Enable private group renaming for:",
|
||||
"admin.general.policy.restrictPrivateChannelDeletionDescription": "Set policy on who can delete private channels. Deleted channels can be recovered from the database using a {commandLineToolLink}.",
|
||||
"admin.general.policy.restrictPrivateChannelDeletionTitle": "Enable private channel deletion for:",
|
||||
"admin.general.policy.restrictPrivateChannelManagementDescription": "Set policy on who can rename and set the header or purpose for private channels.",
|
||||
"admin.general.policy.restrictPrivateChannelManagementTitle": "Enable private channel renaming for:",
|
||||
"admin.general.policy.restrictPublicChannelCreationDescription": "Set policy on who can create public channels.",
|
||||
"admin.general.policy.restrictPublicChannelCreationTitle": "Enable public channel creation for:",
|
||||
"admin.general.policy.restrictPublicChannelDeletionCommandLineToolLink": "command line tool",
|
||||
@@ -941,7 +941,7 @@
|
||||
"analytics.system.dailyActiveUsers": "Daily Active Users",
|
||||
"analytics.system.monthlyActiveUsers": "Monthly Active Users",
|
||||
"analytics.system.postTypes": "Posts, Files and Hashtags",
|
||||
"analytics.system.privateGroups": "Private Groups",
|
||||
"analytics.system.privateGroups": "Private Channels",
|
||||
"analytics.system.publicChannels": "Public Channels",
|
||||
"analytics.system.skippedIntensiveQueries": "To maximize performance, some statistics are disabled. You can re-enable them in config.json. See: <a href='https://docs.mattermost.com/administration/statistics.html' target='_blank'>https://docs.mattermost.com/administration/statistics.html</a>",
|
||||
"analytics.system.textPosts": "Posts with Text-only",
|
||||
@@ -962,7 +962,7 @@
|
||||
"analytics.team.activeUsers": "Active Users With Posts",
|
||||
"analytics.team.newlyCreated": "Newly Created Users",
|
||||
"analytics.team.noTeams": "There are no teams on this server for which to view statistics.",
|
||||
"analytics.team.privateGroups": "Private Groups",
|
||||
"analytics.team.privateGroups": "Private Channels",
|
||||
"analytics.team.publicChannels": "Public Channels",
|
||||
"analytics.team.recentActive": "Recent Active Users",
|
||||
"analytics.team.recentUsers": "Recent Active Users",
|
||||
@@ -995,8 +995,8 @@
|
||||
"audit_table.attemptedWebhookDelete": "Attempted to delete a webhook",
|
||||
"audit_table.by": " by {username}",
|
||||
"audit_table.byAdmin": " by an admin",
|
||||
"audit_table.channelCreated": "Created the {channelName} channel/group",
|
||||
"audit_table.channelDeleted": "Deleted the channel/group with the URL {url}",
|
||||
"audit_table.channelCreated": "Created the {channelName} channel",
|
||||
"audit_table.channelDeleted": "Deleted the channel with the URL {url}",
|
||||
"audit_table.establishedDM": "Established a direct message channel with {username}",
|
||||
"audit_table.failedExpiredLicenseAdd": "Failed to add a new license as it has either expired or not yet been started",
|
||||
"audit_table.failedInvalidLicenseAdd": "Failed to add an invalid license",
|
||||
@@ -1005,14 +1005,14 @@
|
||||
"audit_table.failedPassword": "Failed to change password - tried to update user password who was logged in through OAuth",
|
||||
"audit_table.failedWebhookCreate": "Failed to create a webhook - bad channel permissions",
|
||||
"audit_table.failedWebhookDelete": "Failed to delete a webhook - inappropriate conditions",
|
||||
"audit_table.headerUpdated": "Updated the {channelName} channel/group header",
|
||||
"audit_table.headerUpdated": "Updated the {channelName} channel header",
|
||||
"audit_table.ip": "IP Address",
|
||||
"audit_table.licenseRemoved": "Successfully removed a license",
|
||||
"audit_table.loginAttempt": " (Login attempt)",
|
||||
"audit_table.loginFailure": " (Login failure)",
|
||||
"audit_table.logout": "Logged out of your account",
|
||||
"audit_table.member": "member",
|
||||
"audit_table.nameUpdated": "Updated the {channelName} channel/group name",
|
||||
"audit_table.nameUpdated": "Updated the {channelName} channel name",
|
||||
"audit_table.oauthTokenFailed": "Failed to get an OAuth access token - {token}",
|
||||
"audit_table.revokedAll": "Revoked all current sessions for the team",
|
||||
"audit_table.sentEmail": "Sent an email to {email} to reset your password",
|
||||
@@ -1031,9 +1031,9 @@
|
||||
"audit_table.updateGlobalNotifications": "Updated your global notification settings",
|
||||
"audit_table.updatePicture": "Updated your profile picture",
|
||||
"audit_table.updatedRol": "Updated user role(s) to ",
|
||||
"audit_table.userAdded": "Added {username} to the {channelName} channel/group",
|
||||
"audit_table.userAdded": "Added {username} to the {channelName} channel",
|
||||
"audit_table.userId": "User ID",
|
||||
"audit_table.userRemoved": "Removed {username} to the {channelName} channel/group",
|
||||
"audit_table.userRemoved": "Removed {username} to the {channelName} channel",
|
||||
"audit_table.verified": "Sucessfully verified your email address",
|
||||
"authorize.access": "Allow <strong>{appName}</strong> access?",
|
||||
"authorize.allow": "Allow",
|
||||
@@ -1056,32 +1056,29 @@
|
||||
"change_url.longer": "URL must be two or more characters.",
|
||||
"change_url.noUnderscore": "URL can not contain two underscores in a row.",
|
||||
"change_url.startWithLetter": "URL must start with a letter or number.",
|
||||
"change_url.urlLabel": "Channel URL",
|
||||
"channelHeader.addToFavorites": "Add to Favorites",
|
||||
"channelHeader.removeFromFavorites": "Remove from Favorites",
|
||||
"channel_flow.alreadyExist": "A channel with that URL already exists",
|
||||
"channel_flow.changeUrlDescription": "Some characters are not allowed in URLs and may be removed.",
|
||||
"channel_flow.changeUrlTitle": "Change {term} URL",
|
||||
"channel_flow.channel": "Channel",
|
||||
"channel_flow.create": "Create {term}",
|
||||
"channel_flow.group": "Group",
|
||||
"channel_flow.changeUrlTitle": "Change Channel URL",
|
||||
"channel_flow.create": "Create Channel",
|
||||
"channel_flow.handleTooShort": "Channel URL must be 2 or more lowercase alphanumeric characters",
|
||||
"channel_flow.invalidName": "Invalid Channel Name",
|
||||
"channel_flow.set_url_title": "Set {term} URL",
|
||||
"channel_flow.set_url_title": "Set Channel URL",
|
||||
"channel_header.addMembers": "Add Members",
|
||||
"channel_header.addToFavorites": "Add to Favorites",
|
||||
"channel_header.channel": "Channel",
|
||||
"channel_header.channelHeader": "Edit Channel Header",
|
||||
"channel_header.delete": "Delete {term}",
|
||||
"channel_header.delete": "Delete Channel",
|
||||
"channel_header.flagged": "Flagged Posts",
|
||||
"channel_header.group": "Group",
|
||||
"channel_header.leave": "Leave {term}",
|
||||
"channel_header.leave": "Leave Channel",
|
||||
"channel_header.manageMembers": "Manage Members",
|
||||
"channel_header.notificationPreferences": "Notification Preferences",
|
||||
"channel_header.recentMentions": "Recent Mentions",
|
||||
"channel_header.removeFromFavorites": "Remove from Favorites",
|
||||
"channel_header.rename": "Rename {term}",
|
||||
"channel_header.setHeader": "Edit {term} Header",
|
||||
"channel_header.setPurpose": "Edit {term} Purpose",
|
||||
"channel_header.rename": "Rename Channel",
|
||||
"channel_header.setHeader": "Edit Channel Header",
|
||||
"channel_header.setPurpose": "Edit Channel Purpose",
|
||||
"channel_header.viewInfo": "View Info",
|
||||
"channel_header.viewMembers": "View Members",
|
||||
"channel_header.webrtc.call": "Start Video Call",
|
||||
@@ -1116,21 +1113,19 @@
|
||||
"channel_members_modal.addNew": " Add New Members",
|
||||
"channel_members_modal.members": " Members",
|
||||
"channel_modal.cancel": "Cancel",
|
||||
"channel_modal.channel": "Channel",
|
||||
"channel_modal.createNew": "Create New ",
|
||||
"channel_modal.descriptionHelp": "Describe how this {term} should be used.",
|
||||
"channel_modal.createNew": "Create New Channel",
|
||||
"channel_modal.descriptionHelp": "Describe how this channel should be used.",
|
||||
"channel_modal.displayNameError": "Channel name must be 2 or more characters",
|
||||
"channel_modal.edit": "Edit",
|
||||
"channel_modal.group": "Group",
|
||||
"channel_modal.header": "Header",
|
||||
"channel_modal.headerEx": "E.g.: \"[Link Title](http://example.com)\"",
|
||||
"channel_modal.headerHelp": "Set text that will appear in the header of the {term} beside the {term} name. For example, include frequently used links by typing [Link Title](http://example.com).",
|
||||
"channel_modal.modalTitle": "New ",
|
||||
"channel_modal.headerHelp": "Set text that will appear in the header of the channel beside the channel name. For example, include frequently used links by typing [Link Title](http://example.com).",
|
||||
"channel_modal.modalTitle": "New Channel",
|
||||
"channel_modal.name": "Name",
|
||||
"channel_modal.nameEx": "E.g.: \"Bugs\", \"Marketing\", \"客户支持\"",
|
||||
"channel_modal.optional": "(optional)",
|
||||
"channel_modal.privateGroup1": "Create a new private group with restricted membership. ",
|
||||
"channel_modal.privateGroup2": "Create a private group",
|
||||
"channel_modal.privateGroup1": "Create a new private channel with restricted membership. ",
|
||||
"channel_modal.privateGroup2": "Create a private channel",
|
||||
"channel_modal.publicChannel1": "Create a public channel",
|
||||
"channel_modal.publicChannel2": "Create a new public channel anyone can join. ",
|
||||
"channel_modal.purpose": "Purpose",
|
||||
@@ -1230,11 +1225,9 @@
|
||||
"custom_emoji.search": "Search Custom Emoji",
|
||||
"default_channel.purpose": "Post messages here that you want everyone to see. Everyone automatically becomes a permanent member of this channel when they join the team.",
|
||||
"delete_channel.cancel": "Cancel",
|
||||
"delete_channel.channel": "channel",
|
||||
"delete_channel.confirm": "Confirm DELETE Channel",
|
||||
"delete_channel.del": "Delete",
|
||||
"delete_channel.group": "group",
|
||||
"delete_channel.question": "This will delete the channel from the team and make its contents inaccessible for all users. Are you sure you wish to delete the {display_name} {term}?",
|
||||
"delete_channel.question": "This will delete the channel from the team and make its contents inaccessible for all users. Are you sure you wish to delete the {display_name} channel?",
|
||||
"delete_post.cancel": "Cancel",
|
||||
"delete_post.comment": "Comment",
|
||||
"delete_post.confirm": "Confirm {term} Delete",
|
||||
@@ -1248,11 +1241,9 @@
|
||||
"edit_channel_header_modal.save": "Save",
|
||||
"edit_channel_header_modal.title": "Edit Header for {channel}",
|
||||
"edit_channel_header_modal.title_dm": "Edit Header",
|
||||
"edit_channel_purpose_modal.body": "Describe how this {type} should be used. This text appears in the channel list in the \"More...\" menu and helps others decide whether to join.",
|
||||
"edit_channel_purpose_modal.body": "Describe how this channel should be used. This text appears in the channel list in the \"More...\" menu and helps others decide whether to join.",
|
||||
"edit_channel_purpose_modal.cancel": "Cancel",
|
||||
"edit_channel_purpose_modal.channel": "Channel",
|
||||
"edit_channel_purpose_modal.error": "This channel purpose is too long, please enter a shorter one",
|
||||
"edit_channel_purpose_modal.group": "Group",
|
||||
"edit_channel_purpose_modal.save": "Save",
|
||||
"edit_channel_purpose_modal.title1": "Edit Purpose",
|
||||
"edit_channel_purpose_modal.title2": "Edit Purpose for ",
|
||||
@@ -1544,12 +1535,12 @@
|
||||
"intro_messages.channel": "channel",
|
||||
"intro_messages.creator": "This is the start of the {name} {type}, created by {creator} on {date}.",
|
||||
"intro_messages.default": "<h4 class='channel-intro__title'>Beginning of {display_name}</h4><p class='channel-intro__content'><strong>Welcome to {display_name}!</strong><br/><br/>Post messages here that you want everyone to see. Everyone automatically becomes a permanent member of this channel when they join the team.</p>",
|
||||
"intro_messages.group": "private group",
|
||||
"intro_messages.group": "private channel",
|
||||
"intro_messages.invite": "Invite others to this {type}",
|
||||
"intro_messages.inviteOthers": "Invite others to this team",
|
||||
"intro_messages.noCreator": "This is the start of the {name} {type}, created on {date}.",
|
||||
"intro_messages.offTopic": "<h4 class=\"channel-intro__title\">Beginning of {display_name}</h4><p class=\"channel-intro__content\">This is the start of {display_name}, a channel for non-work-related conversations.<br/></p>",
|
||||
"intro_messages.onlyInvited": " Only invited members can see this private group.",
|
||||
"intro_messages.onlyInvited": " Only invited members can see this private channel.",
|
||||
"intro_messages.purpose": " This {type}'s purpose is: {purpose}.",
|
||||
"intro_messages.setHeader": "Set a Header",
|
||||
"intro_messages.teammate": "This is the start of your direct message history with this teammate. Direct messages and files shared here are not shown to people outside this area.",
|
||||
@@ -1575,7 +1566,7 @@
|
||||
"ldap_signup.length_error": "Name must be 3 or more characters up to a maximum of 15",
|
||||
"ldap_signup.teamName": "Enter name of new team",
|
||||
"ldap_signup.team_error": "Please enter a team name",
|
||||
"leave_team_modal.desc": "You will be removed from all public channels and private groups. If the team is private you will not be able to rejoin the team. Are you sure?",
|
||||
"leave_team_modal.desc": "You will be removed from all public and private channels. If the team is private you will not be able to rejoin the team. Are you sure?",
|
||||
"leave_team_modal.no": "No",
|
||||
"leave_team_modal.title": "Leave the team?",
|
||||
"leave_team_modal.yes": "Yes",
|
||||
@@ -1727,8 +1718,8 @@
|
||||
"more_channels.title": "More Channels",
|
||||
"more_direct_channels.close": "Close",
|
||||
"more_direct_channels.message": "Message",
|
||||
"more_direct_channels.new_convo_note": "This will start a new conversation. If you’re adding a lot of people, consider creating a private group instead.",
|
||||
"more_direct_channels.new_convo_note.full": "You’ve reached the maximum number of people for this conversation. Consider creating a private group instead.",
|
||||
"more_direct_channels.new_convo_note": "This will start a new conversation. If you’re adding a lot of people, consider creating a private channel instead.",
|
||||
"more_direct_channels.new_convo_note.full": "You’ve reached the maximum number of people for this conversation. Consider creating a private channel instead.",
|
||||
"more_direct_channels.title": "Direct Messages",
|
||||
"msg_typing.areTyping": "{users} and {last} are typing...",
|
||||
"msg_typing.isTyping": "{user} is typing...",
|
||||
@@ -1895,18 +1886,18 @@
|
||||
"setting_upload.noFile": "No file selected.",
|
||||
"setting_upload.select": "Select file",
|
||||
"sidebar.channels": "Channels",
|
||||
"sidebar.createChannel": "Create new channel",
|
||||
"sidebar.createGroup": "Create new group",
|
||||
"sidebar.createChannel": "Create new public channel",
|
||||
"sidebar.createGroup": "Create new private channel",
|
||||
"sidebar.direct": "Direct Messages",
|
||||
"sidebar.favorite": "Favorites",
|
||||
"sidebar.more": "More",
|
||||
"sidebar.moreElips": "More...",
|
||||
"sidebar.otherMembers": "Outside this team",
|
||||
"sidebar.pg": "Private Groups",
|
||||
"sidebar.pg": "Private Channels",
|
||||
"sidebar.removeList": "Remove from list",
|
||||
"sidebar.tutorialScreen1": "<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. They’re open to everyone on your team. To send private communications use <strong>Direct Messages</strong> for a single person or <strong>Private Groups</strong> for multiple people.</p>",
|
||||
"sidebar.tutorialScreen1": "<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. They’re open to everyone on your team. To send private communications use <strong>Direct Messages</strong> for a single person or <strong>Private Channel</strong> for multiple people.</p>",
|
||||
"sidebar.tutorialScreen2": "<h4>\"{townsquare}\" and \"{offtopic}\" channels</h4><p>Here are two public channels to start:</p><p><strong>{townsquare}</strong> is a place for team-wide communication. Everyone in your team is a member of this channel.</p><p><strong>{offtopic}</strong> is a place for fun and humor outside of work-related channels. You and your team can decide what other channels to create.</p>",
|
||||
"sidebar.tutorialScreen3": "<h4>Creating and Joining Channels</h4><p>Click <strong>\"More...\"</strong> to create a new channel or join an existing one.</p><p>You can also create a new channel or private group by clicking the <strong>\"+\" symbol</strong> next to the channel or private group header.</p>",
|
||||
"sidebar.tutorialScreen3": "<h4>Creating and Joining Channels</h4><p>Click <strong>\"More...\"</strong> to create a new channel or join an existing one.</p><p>You can also create a new channel by clicking the <strong>\"+\" symbol</strong> next to the public or private channel header.</p>",
|
||||
"sidebar.unreadAbove": "Unread post(s) above",
|
||||
"sidebar.unreadBelow": "Unread post(s) below",
|
||||
"sidebar_header.tutorial": "<h4>Main Menu</h4><p>The <strong>Main Menu</strong> is where you can <strong>Invite New Members</strong>, access your <strong>Account Settings</strong> and set your <strong>Theme Color</strong>.</p><p>Team administrators can also access their <strong>Team Settings</strong> from this menu.</p><p>System administrators will find a <strong>System Console</strong> option to administrate the entire system.</p>",
|
||||
@@ -1982,7 +1973,7 @@
|
||||
"suggestion.mention.morechannels": "Other Channels",
|
||||
"suggestion.mention.nonmembers": "Not in Channel",
|
||||
"suggestion.mention.special": "Special Mentions",
|
||||
"suggestion.search.private": "Private Groups",
|
||||
"suggestion.search.private": "Private Channels",
|
||||
"suggestion.search.public": "Public Channels",
|
||||
"system_users_list.count": "{count, number} {count, plural, one {user} other {users}}",
|
||||
"system_users_list.countPage": "{startCount, number} - {endCount, number} {count, plural, one {user} other {users}} of {total} total",
|
||||
@@ -2041,7 +2032,7 @@
|
||||
"tutorial_intro.mobileAppsLinkText": "PC, Mac, iOS and Android",
|
||||
"tutorial_intro.next": "Next",
|
||||
"tutorial_intro.screenOne": "<h3>Welcome to:</h3><h1>Mattermost</h1><p>Your team communication all in one place, instantly searchable and available anywhere.</p><p>Keep your team connected to help them achieve what matters most.</p>",
|
||||
"tutorial_intro.screenTwo": "<h3>How Mattermost works:</h3><p>Communication happens in public discussion channels, private groups and direct messages.</p><p>Everything is archived and searchable from any web-enabled desktop, laptop or phone.</p>",
|
||||
"tutorial_intro.screenTwo": "<h3>How Mattermost works:</h3><p>Communication happens in public discussion channels, private channels and direct messages.</p><p>Everything is archived and searchable from any web-enabled desktop, laptop or phone.</p>",
|
||||
"tutorial_intro.skip": "Skip tutorial",
|
||||
"tutorial_intro.support": "Need anything, just email us at ",
|
||||
"tutorial_intro.teamInvite": "Invite teammates",
|
||||
|
||||
@@ -217,13 +217,13 @@ export function createStandardIntroMessage(channel, centeredIntro) {
|
||||
uiType = (
|
||||
<FormattedMessage
|
||||
id='intro_messages.group'
|
||||
defaultMessage='private group'
|
||||
defaultMessage='private channel'
|
||||
/>
|
||||
);
|
||||
memberMessage = (
|
||||
<FormattedMessage
|
||||
id='intro_messages.onlyInvited'
|
||||
defaultMessage=' Only invited members can see this private group.'
|
||||
defaultMessage=' Only invited members can see this private channel.'
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
|
||||
Ссылка в новой задаче
Block a user