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
@@ -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