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
Этот коммит содержится в:
Harrison Healey
2017-04-03 08:42:05 -04:00
коммит произвёл George Goldberg
родитель 06e09a0553
Коммит 36c74d7b47
20 изменённых файлов: 150 добавлений и 323 удалений

Просмотреть файл

@@ -205,11 +205,11 @@
}, },
{ {
"id": "api.channel.can_manage_channel.private_restricted_system_admin.app_error", "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", "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", "id": "api.channel.can_manage_channel.public_restricted_system_admin.app_error",
@@ -329,7 +329,7 @@
}, },
{ {
"id": "api.channel.leave.last_member.app_error", "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", "id": "api.channel.leave.left",
@@ -2297,7 +2297,7 @@
}, },
{ {
"id": "api.templates.upgrade_30_body.info", "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", "id": "api.templates.upgrade_30_subject.info",
@@ -3503,22 +3503,6 @@
"id": "error.not_found.title", "id": "error.not_found.title",
"translation": "Page not found" "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", "id": "manaultesting.get_channel_id.no_found.debug",
"translation": "Could not find channel: %v, %v possibilities searched" "translation": "Could not find channel: %v, %v possibilities searched"

Просмотреть файл

@@ -179,7 +179,7 @@ export default class PolicySettings extends AdminSettings {
label={ label={
<FormattedMessage <FormattedMessage
id='admin.general.policy.restrictPrivateChannelCreationTitle' id='admin.general.policy.restrictPrivateChannelCreationTitle'
defaultMessage='Enable private group creation for:' defaultMessage='Enable private channel creation for:'
/> />
} }
value={this.state.restrictPrivateChannelCreation} value={this.state.restrictPrivateChannelCreation}
@@ -187,7 +187,7 @@ export default class PolicySettings extends AdminSettings {
helpText={ helpText={
<FormattedMessage <FormattedMessage
id='admin.general.policy.restrictPrivateChannelCreationDescription' 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={ label={
<FormattedMessage <FormattedMessage
id='admin.general.policy.restrictPrivateChannelManagementTitle' id='admin.general.policy.restrictPrivateChannelManagementTitle'
defaultMessage='Enable private group renaming for:' defaultMessage='Enable private channel renaming for:'
/> />
} }
value={this.state.restrictPrivateChannelManagement} value={this.state.restrictPrivateChannelManagement}
@@ -210,7 +210,7 @@ export default class PolicySettings extends AdminSettings {
helpText={ helpText={
<FormattedMessage <FormattedMessage
id='admin.general.policy.restrictPrivateChannelManagementDescription' 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={ label={
<FormattedMessage <FormattedMessage
id='admin.general.policy.restrictPrivateChannelDeletionTitle' id='admin.general.policy.restrictPrivateChannelDeletionTitle'
defaultMessage='Enable private group deletion for:' defaultMessage='Enable private channel deletion for:'
/> />
} }
value={this.state.restrictPrivateChannelDeletion} value={this.state.restrictPrivateChannelDeletion}
@@ -233,7 +233,7 @@ export default class PolicySettings extends AdminSettings {
helpText={ helpText={
<FormattedMessage <FormattedMessage
id='admin.general.policy.restrictPrivateChannelDeletionDescription' 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={{ values={{
commandLineToolLink: ( commandLineToolLink: (
<a <a

Просмотреть файл

@@ -12,34 +12,11 @@ import * as AsyncClient from 'utils/async_client.jsx';
import Constants from 'utils/constants.jsx'; import Constants from 'utils/constants.jsx';
const StatTypes = Constants.StatTypes; const StatTypes = Constants.StatTypes;
import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'react-intl'; import {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 React from 'react'; import React from 'react';
class SystemAnalytics extends React.Component { export default class SystemAnalytics extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@@ -249,8 +226,8 @@ class SystemAnalytics extends React.Component {
</div> </div>
); );
const channelTypeData = formatChannelDoughtnutData(stats[StatTypes.TOTAL_PUBLIC_CHANNELS], stats[StatTypes.TOTAL_PRIVATE_GROUPS], 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], this.props.intl); const postTypeData = formatPostDoughtnutData(stats[StatTypes.TOTAL_FILE_POSTS], stats[StatTypes.TOTAL_HASHTAG_POSTS], stats[StatTypes.TOTAL_POSTS]);
let postTypeGraph; let postTypeGraph;
if (stats[StatTypes.TOTAL_POSTS] !== -1) { if (stats[StatTypes.TOTAL_POSTS] !== -1) {
@@ -430,16 +407,12 @@ class SystemAnalytics extends React.Component {
} }
} }
SystemAnalytics.propTypes = { export function formatChannelDoughtnutData(totalPublic, totalPrivate) {
intl: intlShape.isRequired
};
export default injectIntl(SystemAnalytics);
export function formatChannelDoughtnutData(totalPublic, totalPrivate, intl) {
const {formatMessage} = intl;
const channelTypeData = { 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: [{ datasets: [{
data: [totalPublic, totalPrivate], data: [totalPublic, totalPrivate],
backgroundColor: ['#46BFBD', '#FDB45C'], backgroundColor: ['#46BFBD', '#FDB45C'],
@@ -450,10 +423,13 @@ export function formatChannelDoughtnutData(totalPublic, totalPrivate, intl) {
return channelTypeData; return channelTypeData;
} }
export function formatPostDoughtnutData(filePosts, hashtagPosts, totalPosts, intl) { export function formatPostDoughtnutData(filePosts, hashtagPosts, totalPosts) {
const {formatMessage} = intl;
const postTypeData = { 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: [{ datasets: [{
data: [filePosts, hashtagPosts, (totalPosts - filePosts - hashtagPosts)], data: [filePosts, hashtagPosts, (totalPosts - filePosts - hashtagPosts)],
backgroundColor: ['#46BFBD', '#F7464A', '#FDB45C'], backgroundColor: ['#46BFBD', '#F7464A', '#FDB45C'],

Просмотреть файл

@@ -270,7 +270,7 @@ export default class TeamAnalytics extends React.Component {
title={ title={
<FormattedMessage <FormattedMessage
id='analytics.team.privateGroups' id='analytics.team.privateGroups'
defaultMessage='Private Groups' defaultMessage='Private Channels'
/> />
} }
icon='fa-globe' icon='fa-globe'

Просмотреть файл

@@ -14,7 +14,7 @@ const holders = defineMessages({
}, },
channelCreated: { channelCreated: {
id: 'audit_table.channelCreated', id: 'audit_table.channelCreated',
defaultMessage: 'Created the {channelName} channel/group' defaultMessage: 'Created the {channelName} channel'
}, },
establishedDM: { establishedDM: {
id: 'audit_table.establishedDM', id: 'audit_table.establishedDM',
@@ -22,23 +22,23 @@ const holders = defineMessages({
}, },
nameUpdated: { nameUpdated: {
id: 'audit_table.nameUpdated', id: 'audit_table.nameUpdated',
defaultMessage: 'Updated the {channelName} channel/group name' defaultMessage: 'Updated the {channelName} channel name'
}, },
headerUpdated: { headerUpdated: {
id: 'audit_table.headerUpdated', id: 'audit_table.headerUpdated',
defaultMessage: 'Updated the {channelName} channel/group header' defaultMessage: 'Updated the {channelName} channel header'
}, },
channelDeleted: { channelDeleted: {
id: 'audit_table.channelDeleted', id: 'audit_table.channelDeleted',
defaultMessage: 'Deleted the channel/group with the URL {url}' defaultMessage: 'Deleted the channel with the URL {url}'
}, },
userAdded: { userAdded: {
id: 'audit_table.userAdded', id: 'audit_table.userAdded',
defaultMessage: 'Added {username} to the {channelName} channel/group' defaultMessage: 'Added {username} to the {channelName} channel'
}, },
userRemoved: { userRemoved: {
id: 'audit_table.userRemoved', id: 'audit_table.userRemoved',
defaultMessage: 'Removed {username} to the {channelName} channel/group' defaultMessage: 'Removed {username} to the {channelName} channel'
}, },
attemptedRegisterApp: { attemptedRegisterApp: {
id: 'audit_table.attemptedRegisterApp', id: 'audit_table.attemptedRegisterApp',

Просмотреть файл

@@ -25,6 +25,7 @@ export default class ChangeUrlModal extends React.Component {
userEdit: false userEdit: false
}; };
} }
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
// This check prevents the url being deleted when we re-render // This check prevents the url being deleted when we re-render
// because of user status check // because of user status check
@@ -34,15 +35,18 @@ export default class ChangeUrlModal extends React.Component {
}); });
} }
} }
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
if (this.props.show === true && prevProps.show === false) { if (this.props.show === true && prevProps.show === false) {
ReactDOM.findDOMNode(this.refs.urlinput).select(); ReactDOM.findDOMNode(this.refs.urlinput).select();
} }
} }
onURLChanged(e) { onURLChanged(e) {
const url = e.target.value.trim(); const url = e.target.value.trim();
this.setState({currentURL: url.replace(/[^A-Za-z0-9-_]/g, '').toLowerCase(), userEdit: true}); this.setState({currentURL: url.replace(/[^A-Za-z0-9-_]/g, '').toLowerCase(), userEdit: true});
} }
getURLError(url) { getURLError(url) {
let error = []; //eslint-disable-line prefer-const let error = []; //eslint-disable-line prefer-const
if (url.length < 2) { if (url.length < 2) {
@@ -101,6 +105,7 @@ export default class ChangeUrlModal extends React.Component {
} }
return error; return error;
} }
doSubmit(e) { doSubmit(e) {
e.preventDefault(); e.preventDefault();
@@ -113,10 +118,12 @@ export default class ChangeUrlModal extends React.Component {
this.setState({urlError: '', userEdit: false}); this.setState({urlError: '', userEdit: false});
this.props.onModalSubmit(url); this.props.onModalSubmit(url);
} }
doCancel() { doCancel() {
this.setState({urlError: '', userEdit: false}); this.setState({urlError: '', userEdit: false});
this.props.onModalDismissed(); this.props.onModalDismissed();
} }
render() { render() {
let urlClass = 'input-group input-group--limit'; let urlClass = 'input-group input-group--limit';
let error = null; let error = null;
@@ -155,9 +162,19 @@ export default class ChangeUrlModal extends React.Component {
className='form-horizontal' className='form-horizontal'
> >
<Modal.Body> <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'> <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='col-sm-10'>
<div className={urlClass}> <div className={urlClass}>
<OverlayTrigger <OverlayTrigger
@@ -211,8 +228,6 @@ export default class ChangeUrlModal extends React.Component {
ChangeUrlModal.defaultProps = { ChangeUrlModal.defaultProps = {
show: false, show: false,
title: 'Change URL', title: 'Change URL',
desciption: '',
urlLabel: 'URL',
submitButtonText: 'Save', submitButtonText: 'Save',
currentURL: '', currentURL: '',
serverError: null serverError: null
@@ -220,10 +235,8 @@ ChangeUrlModal.defaultProps = {
ChangeUrlModal.propTypes = { ChangeUrlModal.propTypes = {
show: React.PropTypes.bool.isRequired, show: React.PropTypes.bool.isRequired,
title: React.PropTypes.string, title: React.PropTypes.node,
description: React.PropTypes.string, submitButtonText: React.PropTypes.node,
urlLabel: React.PropTypes.string,
submitButtonText: React.PropTypes.string,
currentURL: React.PropTypes.string, currentURL: React.PropTypes.string,
serverError: React.PropTypes.node, serverError: React.PropTypes.node,
onModalSubmit: React.PropTypes.func.isRequired, onModalSubmit: React.PropTypes.func.isRequired,

Просмотреть файл

@@ -349,21 +349,6 @@ export default class ChannelHeader extends React.Component {
channelTitle = ChannelUtils.buildGroupChannelName(channel.id); 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; let popoverListMembers;
if (!isDirect) { if (!isDirect) {
popoverListMembers = ( popoverListMembers = (
@@ -560,10 +545,7 @@ export default class ChannelHeader extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.delete' id='channel_header.delete'
defaultMessage='Delete {term}' defaultMessage='Delete Channel'
values={{
term: (channelTerm)
}}
/> />
</ToggleModalButton> </ToggleModalButton>
</li> </li>
@@ -590,10 +572,7 @@ export default class ChannelHeader extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.setHeader' id='channel_header.setHeader'
defaultMessage='Edit {term} Header' defaultMessage='Edit Channel Header'
values={{
term: (channelTerm)
}}
/> />
</ToggleModalButton> </ToggleModalButton>
</li> </li>
@@ -612,10 +591,7 @@ export default class ChannelHeader extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.setPurpose' id='channel_header.setPurpose'
defaultMessage='Edit {term} Purpose' defaultMessage='Edit Channel Purpose'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>
@@ -634,10 +610,7 @@ export default class ChannelHeader extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.rename' id='channel_header.rename'
defaultMessage='Rename {term}' defaultMessage='Rename Channel'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>
@@ -674,10 +647,7 @@ export default class ChannelHeader extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.leave' id='channel_header.leave'
defaultMessage='Leave {term}' defaultMessage='Leave Channel'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>

Просмотреть файл

@@ -3,7 +3,6 @@
import {Modal} from 'react-bootstrap'; import {Modal} from 'react-bootstrap';
import TeamStore from 'stores/team_store.jsx'; import TeamStore from 'stores/team_store.jsx';
import Constants from 'utils/constants.jsx';
import {FormattedMessage} from 'react-intl'; import {FormattedMessage} from 'react-intl';
@@ -37,21 +36,6 @@ export default class DeleteChannelModal extends React.Component {
} }
render() { 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 ( return (
<Modal <Modal
show={this.state.show} show={this.state.show}
@@ -70,10 +54,9 @@ export default class DeleteChannelModal extends React.Component {
<div className='alert alert-danger'> <div className='alert alert-danger'>
<FormattedMessage <FormattedMessage
id='delete_channel.question' 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={{ values={{
display_name: this.props.channel.display_name, display_name: this.props.channel.display_name
term: (channelTerm)
}} }}
/> />
</div> </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 ( return (
<Modal <Modal
className='modal-edit-channel-purpose' className='modal-edit-channel-purpose'
@@ -142,10 +127,7 @@ export default class EditChannelPurposeModal extends React.Component {
<p> <p>
<FormattedMessage <FormattedMessage
id='edit_channel_purpose_modal.body' 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.' 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.'
values={{
type: (channelType)
}}
/> />
</p> </p>
<textarea <textarea

Просмотреть файл

@@ -203,7 +203,7 @@ export default class AbstractIncomingWebhook extends React.Component {
<div className='form__help'> <div className='form__help'>
<FormattedMessage <FormattedMessage
id='add_incoming_webhook.channel.help' 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>
</div> </div>

Просмотреть файл

@@ -81,7 +81,7 @@ class LeaveTeamModal extends React.Component {
<Modal.Body> <Modal.Body>
<FormattedMessage <FormattedMessage
id='leave_team_modal.desc' 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.Body>
<Modal.Footer> <Modal.Footer>

Просмотреть файл

@@ -266,14 +266,14 @@ export default class MoreDirectChannels extends React.Component {
note = ( note = (
<FormattedMessage <FormattedMessage
id='more_direct_channels.new_convo_note.full' id='more_direct_channels.new_convo_note.full'
defaultMessage='Youve reached the maximum number of people for this conversation. Consider creating a private group instead.' defaultMessage='Youve reached the maximum number of people for this conversation. Consider creating a private channel instead.'
/> />
); );
} else { } else {
note = ( note = (
<FormattedMessage <FormattedMessage
id='more_direct_channels.new_convo_note' id='more_direct_channels.new_convo_note'
defaultMessage='This will start a new conversation. If youre adding a lot of people, consider creating a private group instead.' defaultMessage='This will start a new conversation. If youre 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) { createDropdown(channel, channelTitle, isAdmin, isSystemAdmin, isChannelAdmin, isDirect, isGroup, popoverContent) {
if (channel) { 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 viewInfoOption;
let viewPinnedPostsOption; let viewPinnedPostsOption;
let addMembersOption; let addMembersOption;
@@ -449,10 +434,7 @@ export default class Navbar extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.setHeader' id='channel_header.setHeader'
defaultMessage='Set {term} Header...' defaultMessage='Edit Channel Header'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>
@@ -467,10 +449,7 @@ export default class Navbar extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.setPurpose' id='channel_header.setPurpose'
defaultMessage='Set {term} Purpose...' defaultMessage='Edit Channel Purpose'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>
@@ -485,10 +464,7 @@ export default class Navbar extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.rename' id='channel_header.rename'
defaultMessage='Rename {term}...' defaultMessage='Rename Channel'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>
@@ -506,10 +482,7 @@ export default class Navbar extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.delete' id='channel_header.delete'
defaultMessage='Delete {term}...' defaultMessage='Delete Channel'
values={{
term: (channelTerm)
}}
/> />
</ToggleModalButton> </ToggleModalButton>
</li> </li>
@@ -528,10 +501,7 @@ export default class Navbar extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_header.leave' id='channel_header.leave'
defaultMessage='Leave {term}' defaultMessage='Leave Channel'
values={{
term: (channelTerm)
}}
/> />
</a> </a>
</li> </li>

Просмотреть файл

@@ -9,43 +9,17 @@ import {cleanUpUrlable} from 'utils/url.jsx';
import NewChannelModal from './new_channel_modal.jsx'; import NewChannelModal from './new_channel_modal.jsx';
import ChangeURLModal from './change_url_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 {createChannel} from 'actions/channel_actions.jsx';
import {browserHistory} from 'react-router/es6'; import {browserHistory} from 'react-router/es6';
const SHOW_NEW_CHANNEL = 1; const SHOW_NEW_CHANNEL = 1;
const SHOW_EDIT_URL = 2; const SHOW_EDIT_URL = 2;
const SHOW_EDIT_URL_THEN_COMPLETE = 3; 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'; import React from 'react';
class NewChannelFlow extends React.Component { export default class NewChannelFlow extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@@ -182,9 +156,6 @@ class NewChannelFlow extends React.Component {
let changeURLTitle = ''; let changeURLTitle = '';
let changeURLSubmitButtonText = ''; let changeURLSubmitButtonText = '';
let channelTerm = '';
const {formatMessage} = this.props.intl;
// Only listen to flow state if we are being shown // Only listen to flow state if we are being shown
if (this.props.show) { if (this.props.show) {
@@ -192,21 +163,34 @@ class NewChannelFlow extends React.Component {
case SHOW_NEW_CHANNEL: case SHOW_NEW_CHANNEL:
if (this.state.channelType === 'O') { if (this.state.channelType === 'O') {
showChannelModal = true; showChannelModal = true;
channelTerm = formatMessage(messages.channel);
} else { } else {
showGroupModal = true; showGroupModal = true;
channelTerm = formatMessage(messages.group);
} }
break; break;
case SHOW_EDIT_URL: case SHOW_EDIT_URL:
showChangeURLModal = true; showChangeURLModal = true;
changeURLTitle = formatMessage(messages.change, {term: channelTerm}); changeURLTitle = (
changeURLSubmitButtonText = formatMessage(messages.change, {term: channelTerm}); <FormattedMessage
id='channel_flow.changeUrlTitle'
defaultMessage='Change Channel URL'
/>
);
changeURLSubmitButtonText = changeURLTitle;
break; break;
case SHOW_EDIT_URL_THEN_COMPLETE: case SHOW_EDIT_URL_THEN_COMPLETE:
showChangeURLModal = true; showChangeURLModal = true;
changeURLTitle = formatMessage(messages.set, {term: channelTerm}); changeURLTitle = (
changeURLSubmitButtonText = formatMessage(messages.create, {term: channelTerm}); <FormattedMessage
id='channel_flow.set_url_title'
defaultMessage='Set Channel URL'
/>
);
changeURLSubmitButtonText = (
<FormattedMessage
id='channel_flow.create'
defaultMessage='Create Channel'
/>
);
break; break;
} }
} }
@@ -239,8 +223,6 @@ class NewChannelFlow extends React.Component {
<ChangeURLModal <ChangeURLModal
show={showChangeURLModal} show={showChangeURLModal}
title={changeURLTitle} title={changeURLTitle}
description={formatMessage(messages.changeUrlDescription)}
urlLabel={channelTerm + ' URL'}
submitButtonText={changeURLSubmitButtonText} submitButtonText={changeURLSubmitButtonText}
currentURL={this.state.channelName} currentURL={this.state.channelName}
serverError={this.state.serverError} serverError={this.state.serverError}
@@ -259,10 +241,7 @@ NewChannelFlow.defaultProps = {
}; };
NewChannelFlow.propTypes = { NewChannelFlow.propTypes = {
intl: intlShape.isRequired,
show: React.PropTypes.bool.isRequired, show: React.PropTypes.bool.isRequired,
channelType: React.PropTypes.string.isRequired, channelType: React.PropTypes.string.isRequired,
onModalDismissed: React.PropTypes.func.isRequired onModalDismissed: React.PropTypes.func.isRequired
}; };
export default injectIntl(NewChannelFlow);

Просмотреть файл

@@ -135,7 +135,7 @@ export default class NewChannelModal extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_modal.privateGroup2' id='channel_modal.privateGroup2'
defaultMessage='Create a private group' defaultMessage='Create a private channel'
/> />
</a> </a>
); );
@@ -151,33 +151,20 @@ export default class NewChannelModal extends React.Component {
createPrivateChannelLink = null; createPrivateChannelLink = null;
} }
var channelTerm = '';
var channelSwitchText = ''; var channelSwitchText = '';
switch (this.props.channelType) { switch (this.props.channelType) {
case 'P': case 'P':
channelTerm = (
<FormattedMessage
id='channel_modal.group'
defaultMessage='Group'
/>
);
channelSwitchText = ( channelSwitchText = (
<div className='modal-intro'> <div className='modal-intro'>
<FormattedMessage <FormattedMessage
id='channel_modal.privateGroup1' id='channel_modal.privateGroup1'
defaultMessage='Create a new private group with restricted membership. ' defaultMessage='Create a new private channel with restricted membership. '
/> />
{createPublicChannelLink} {createPublicChannelLink}
</div> </div>
); );
break; break;
case 'O': case 'O':
channelTerm = (
<FormattedMessage
id='channel_modal.channel'
defaultMessage='Channel'
/>
);
channelSwitchText = ( channelSwitchText = (
<div className='modal-intro'> <div className='modal-intro'>
<FormattedMessage <FormattedMessage
@@ -205,9 +192,8 @@ export default class NewChannelModal extends React.Component {
<Modal.Title> <Modal.Title>
<FormattedMessage <FormattedMessage
id='channel_modal.modalTitle' id='channel_modal.modalTitle'
defaultMessage='New ' defaultMessage='New Channel'
/> />
{channelTerm}
</Modal.Title> </Modal.Title>
</Modal.Header> </Modal.Header>
<form <form
@@ -282,10 +268,7 @@ export default class NewChannelModal extends React.Component {
<p className='input__help'> <p className='input__help'>
<FormattedMessage <FormattedMessage
id='channel_modal.descriptionHelp' id='channel_modal.descriptionHelp'
defaultMessage='Describe how this {term} should be used.' defaultMessage='Describe how this channel should be used.'
values={{
term: (channelTerm)
}}
/> />
</p> </p>
</div> </div>
@@ -319,10 +302,7 @@ export default class NewChannelModal extends React.Component {
<p className='input__help'> <p className='input__help'>
<FormattedMessage <FormattedMessage
id='channel_modal.headerHelp' 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).' 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).'
values={{
term: (channelTerm)
}}
/> />
</p> </p>
{serverError} {serverError}
@@ -348,9 +328,8 @@ export default class NewChannelModal extends React.Component {
> >
<FormattedMessage <FormattedMessage
id='channel_modal.createNew' id='channel_modal.createNew'
defaultMessage='Create New ' defaultMessage='Create New Channel'
/> />
{channelTerm}
</button> </button>
</Modal.Footer> </Modal.Footer>
</form> </form>

Просмотреть файл

@@ -446,7 +446,7 @@ export default class Sidebar extends React.Component {
<div> <div>
<FormattedHTMLMessage <FormattedHTMLMessage
id='sidebar.tutorialScreen1' id='sidebar.tutorialScreen1'
defaultMessage='<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. Theyre 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. Theyre 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> </div>
); );
@@ -473,7 +473,7 @@ export default class Sidebar extends React.Component {
id='sidebar.tutorialScreen3' id='sidebar.tutorialScreen3'
defaultMessage='<h4>Creating and Joining Channels</h4> defaultMessage='<h4>Creating and Joining Channels</h4>
<p>Click <strong>"More..."</strong> to create a new channel or join an existing one.</p> <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> </div>
); );
@@ -700,7 +700,7 @@ export default class Sidebar extends React.Component {
<Tooltip id='new-channel-tooltip' > <Tooltip id='new-channel-tooltip' >
<FormattedMessage <FormattedMessage
id='sidebar.createChannel' id='sidebar.createChannel'
defaultMessage='Create new channel' defaultMessage='Create new public channel'
/> />
</Tooltip> </Tooltip>
); );
@@ -708,7 +708,7 @@ export default class Sidebar extends React.Component {
<Tooltip id='new-group-tooltip'> <Tooltip id='new-group-tooltip'>
<FormattedMessage <FormattedMessage
id='sidebar.createGroup' id='sidebar.createGroup'
defaultMessage='Create new group' defaultMessage='Create new private channel'
/> />
</Tooltip> </Tooltip>
); );
@@ -872,7 +872,7 @@ export default class Sidebar extends React.Component {
<h4> <h4>
<FormattedMessage <FormattedMessage
id='sidebar.pg' id='sidebar.pg'
defaultMessage='Private Groups' defaultMessage='Private Channels'
/> />
{createPrivateChannelIcon} {createPrivateChannelIcon}
</h4> </h4>

Просмотреть файл

@@ -33,7 +33,7 @@ export default class SearchSuggestionList extends SuggestionList {
text = ( text = (
<FormattedMessage <FormattedMessage
id='suggestion.search.private' id='suggestion.search.private'
defaultMessage='Private Groups' defaultMessage='Private Channels'
/> />
); );
} }

Просмотреть файл

@@ -162,7 +162,7 @@ export default class TutorialIntroScreens extends React.Component {
<FormattedHTMLMessage <FormattedHTMLMessage
id='tutorial_intro.screenTwo' id='tutorial_intro.screenTwo'
defaultMessage='<h3>How Mattermost works:</h3> 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>' <p>Everything is archived and searchable from any web-enabled desktop, laptop or phone.</p>'
/> />
{appDownloadLink} {appDownloadLink}

Просмотреть файл

@@ -86,7 +86,7 @@
"add_emoji.save": "Save", "add_emoji.save": "Save",
"add_incoming_webhook.cancel": "Cancel", "add_incoming_webhook.cancel": "Cancel",
"add_incoming_webhook.channel": "Channel", "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.channelRequired": "A valid channel is required",
"add_incoming_webhook.description": "Description", "add_incoming_webhook.description": "Description",
"add_incoming_webhook.description.help": "Description for your incoming webhook.", "add_incoming_webhook.description.help": "Description for your incoming webhook.",
@@ -329,13 +329,13 @@
"admin.general.policy.permissionsSystemAdmin": "System Admins", "admin.general.policy.permissionsSystemAdmin": "System Admins",
"admin.general.policy.restrictPostDeleteDescription": "Set policy on who has permission to delete messages.", "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.restrictPostDeleteTitle": "Allow which users to delete messages:",
"admin.general.policy.restrictPrivateChannelCreationDescription": "Set policy on who can create private groups.", "admin.general.policy.restrictPrivateChannelCreationDescription": "Set policy on who can create private channels.",
"admin.general.policy.restrictPrivateChannelCreationTitle": "Enable private group creation for:", "admin.general.policy.restrictPrivateChannelCreationTitle": "Enable private channel creation for:",
"admin.general.policy.restrictPrivateChannelDeletionCommandLineToolLink": "command line tool", "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.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 group deletion for:", "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 groups.", "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 group renaming for:", "admin.general.policy.restrictPrivateChannelManagementTitle": "Enable private channel renaming for:",
"admin.general.policy.restrictPublicChannelCreationDescription": "Set policy on who can create public channels.", "admin.general.policy.restrictPublicChannelCreationDescription": "Set policy on who can create public channels.",
"admin.general.policy.restrictPublicChannelCreationTitle": "Enable public channel creation for:", "admin.general.policy.restrictPublicChannelCreationTitle": "Enable public channel creation for:",
"admin.general.policy.restrictPublicChannelDeletionCommandLineToolLink": "command line tool", "admin.general.policy.restrictPublicChannelDeletionCommandLineToolLink": "command line tool",
@@ -941,7 +941,7 @@
"analytics.system.dailyActiveUsers": "Daily Active Users", "analytics.system.dailyActiveUsers": "Daily Active Users",
"analytics.system.monthlyActiveUsers": "Monthly Active Users", "analytics.system.monthlyActiveUsers": "Monthly Active Users",
"analytics.system.postTypes": "Posts, Files and Hashtags", "analytics.system.postTypes": "Posts, Files and Hashtags",
"analytics.system.privateGroups": "Private Groups", "analytics.system.privateGroups": "Private Channels",
"analytics.system.publicChannels": "Public 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.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", "analytics.system.textPosts": "Posts with Text-only",
@@ -962,7 +962,7 @@
"analytics.team.activeUsers": "Active Users With Posts", "analytics.team.activeUsers": "Active Users With Posts",
"analytics.team.newlyCreated": "Newly Created Users", "analytics.team.newlyCreated": "Newly Created Users",
"analytics.team.noTeams": "There are no teams on this server for which to view statistics.", "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.publicChannels": "Public Channels",
"analytics.team.recentActive": "Recent Active Users", "analytics.team.recentActive": "Recent Active Users",
"analytics.team.recentUsers": "Recent Active Users", "analytics.team.recentUsers": "Recent Active Users",
@@ -995,8 +995,8 @@
"audit_table.attemptedWebhookDelete": "Attempted to delete a webhook", "audit_table.attemptedWebhookDelete": "Attempted to delete a webhook",
"audit_table.by": " by {username}", "audit_table.by": " by {username}",
"audit_table.byAdmin": " by an admin", "audit_table.byAdmin": " by an admin",
"audit_table.channelCreated": "Created the {channelName} channel/group", "audit_table.channelCreated": "Created the {channelName} channel",
"audit_table.channelDeleted": "Deleted the channel/group with the URL {url}", "audit_table.channelDeleted": "Deleted the channel with the URL {url}",
"audit_table.establishedDM": "Established a direct message channel with {username}", "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.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", "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.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.failedWebhookCreate": "Failed to create a webhook - bad channel permissions",
"audit_table.failedWebhookDelete": "Failed to delete a webhook - inappropriate conditions", "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.ip": "IP Address",
"audit_table.licenseRemoved": "Successfully removed a license", "audit_table.licenseRemoved": "Successfully removed a license",
"audit_table.loginAttempt": " (Login attempt)", "audit_table.loginAttempt": " (Login attempt)",
"audit_table.loginFailure": " (Login failure)", "audit_table.loginFailure": " (Login failure)",
"audit_table.logout": "Logged out of your account", "audit_table.logout": "Logged out of your account",
"audit_table.member": "member", "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.oauthTokenFailed": "Failed to get an OAuth access token - {token}",
"audit_table.revokedAll": "Revoked all current sessions for the team", "audit_table.revokedAll": "Revoked all current sessions for the team",
"audit_table.sentEmail": "Sent an email to {email} to reset your password", "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.updateGlobalNotifications": "Updated your global notification settings",
"audit_table.updatePicture": "Updated your profile picture", "audit_table.updatePicture": "Updated your profile picture",
"audit_table.updatedRol": "Updated user role(s) to ", "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.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", "audit_table.verified": "Sucessfully verified your email address",
"authorize.access": "Allow <strong>{appName}</strong> access?", "authorize.access": "Allow <strong>{appName}</strong> access?",
"authorize.allow": "Allow", "authorize.allow": "Allow",
@@ -1056,32 +1056,29 @@
"change_url.longer": "URL must be two or more characters.", "change_url.longer": "URL must be two or more characters.",
"change_url.noUnderscore": "URL can not contain two underscores in a row.", "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.startWithLetter": "URL must start with a letter or number.",
"change_url.urlLabel": "Channel URL",
"channelHeader.addToFavorites": "Add to Favorites", "channelHeader.addToFavorites": "Add to Favorites",
"channelHeader.removeFromFavorites": "Remove from Favorites", "channelHeader.removeFromFavorites": "Remove from Favorites",
"channel_flow.alreadyExist": "A channel with that URL already exists", "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.changeUrlDescription": "Some characters are not allowed in URLs and may be removed.",
"channel_flow.changeUrlTitle": "Change {term} URL", "channel_flow.changeUrlTitle": "Change Channel URL",
"channel_flow.channel": "Channel", "channel_flow.create": "Create Channel",
"channel_flow.create": "Create {term}",
"channel_flow.group": "Group",
"channel_flow.handleTooShort": "Channel URL must be 2 or more lowercase alphanumeric characters", "channel_flow.handleTooShort": "Channel URL must be 2 or more lowercase alphanumeric characters",
"channel_flow.invalidName": "Invalid Channel Name", "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.addMembers": "Add Members",
"channel_header.addToFavorites": "Add to Favorites", "channel_header.addToFavorites": "Add to Favorites",
"channel_header.channel": "Channel",
"channel_header.channelHeader": "Edit Channel Header", "channel_header.channelHeader": "Edit Channel Header",
"channel_header.delete": "Delete {term}", "channel_header.delete": "Delete Channel",
"channel_header.flagged": "Flagged Posts", "channel_header.flagged": "Flagged Posts",
"channel_header.group": "Group", "channel_header.leave": "Leave Channel",
"channel_header.leave": "Leave {term}",
"channel_header.manageMembers": "Manage Members", "channel_header.manageMembers": "Manage Members",
"channel_header.notificationPreferences": "Notification Preferences", "channel_header.notificationPreferences": "Notification Preferences",
"channel_header.recentMentions": "Recent Mentions", "channel_header.recentMentions": "Recent Mentions",
"channel_header.removeFromFavorites": "Remove from Favorites", "channel_header.removeFromFavorites": "Remove from Favorites",
"channel_header.rename": "Rename {term}", "channel_header.rename": "Rename Channel",
"channel_header.setHeader": "Edit {term} Header", "channel_header.setHeader": "Edit Channel Header",
"channel_header.setPurpose": "Edit {term} Purpose", "channel_header.setPurpose": "Edit Channel Purpose",
"channel_header.viewInfo": "View Info", "channel_header.viewInfo": "View Info",
"channel_header.viewMembers": "View Members", "channel_header.viewMembers": "View Members",
"channel_header.webrtc.call": "Start Video Call", "channel_header.webrtc.call": "Start Video Call",
@@ -1116,21 +1113,19 @@
"channel_members_modal.addNew": " Add New Members", "channel_members_modal.addNew": " Add New Members",
"channel_members_modal.members": " Members", "channel_members_modal.members": " Members",
"channel_modal.cancel": "Cancel", "channel_modal.cancel": "Cancel",
"channel_modal.channel": "Channel", "channel_modal.createNew": "Create New Channel",
"channel_modal.createNew": "Create New ", "channel_modal.descriptionHelp": "Describe how this channel should be used.",
"channel_modal.descriptionHelp": "Describe how this {term} should be used.",
"channel_modal.displayNameError": "Channel name must be 2 or more characters", "channel_modal.displayNameError": "Channel name must be 2 or more characters",
"channel_modal.edit": "Edit", "channel_modal.edit": "Edit",
"channel_modal.group": "Group",
"channel_modal.header": "Header", "channel_modal.header": "Header",
"channel_modal.headerEx": "E.g.: \"[Link Title](http://example.com)\"", "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.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_modal.modalTitle": "New Channel",
"channel_modal.name": "Name", "channel_modal.name": "Name",
"channel_modal.nameEx": "E.g.: \"Bugs\", \"Marketing\", \"客户支持\"", "channel_modal.nameEx": "E.g.: \"Bugs\", \"Marketing\", \"客户支持\"",
"channel_modal.optional": "(optional)", "channel_modal.optional": "(optional)",
"channel_modal.privateGroup1": "Create a new private group with restricted membership. ", "channel_modal.privateGroup1": "Create a new private channel with restricted membership. ",
"channel_modal.privateGroup2": "Create a private group", "channel_modal.privateGroup2": "Create a private channel",
"channel_modal.publicChannel1": "Create a public channel", "channel_modal.publicChannel1": "Create a public channel",
"channel_modal.publicChannel2": "Create a new public channel anyone can join. ", "channel_modal.publicChannel2": "Create a new public channel anyone can join. ",
"channel_modal.purpose": "Purpose", "channel_modal.purpose": "Purpose",
@@ -1230,11 +1225,9 @@
"custom_emoji.search": "Search Custom Emoji", "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.", "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.cancel": "Cancel",
"delete_channel.channel": "channel",
"delete_channel.confirm": "Confirm DELETE Channel", "delete_channel.confirm": "Confirm DELETE Channel",
"delete_channel.del": "Delete", "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} channel?",
"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_post.cancel": "Cancel", "delete_post.cancel": "Cancel",
"delete_post.comment": "Comment", "delete_post.comment": "Comment",
"delete_post.confirm": "Confirm {term} Delete", "delete_post.confirm": "Confirm {term} Delete",
@@ -1248,11 +1241,9 @@
"edit_channel_header_modal.save": "Save", "edit_channel_header_modal.save": "Save",
"edit_channel_header_modal.title": "Edit Header for {channel}", "edit_channel_header_modal.title": "Edit Header for {channel}",
"edit_channel_header_modal.title_dm": "Edit Header", "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.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.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.save": "Save",
"edit_channel_purpose_modal.title1": "Edit Purpose", "edit_channel_purpose_modal.title1": "Edit Purpose",
"edit_channel_purpose_modal.title2": "Edit Purpose for ", "edit_channel_purpose_modal.title2": "Edit Purpose for ",
@@ -1544,12 +1535,12 @@
"intro_messages.channel": "channel", "intro_messages.channel": "channel",
"intro_messages.creator": "This is the start of the {name} {type}, created by {creator} on {date}.", "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.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.invite": "Invite others to this {type}",
"intro_messages.inviteOthers": "Invite others to this team", "intro_messages.inviteOthers": "Invite others to this team",
"intro_messages.noCreator": "This is the start of the {name} {type}, created on {date}.", "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.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.purpose": " This {type}'s purpose is: {purpose}.",
"intro_messages.setHeader": "Set a Header", "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.", "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.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.teamName": "Enter name of new team",
"ldap_signup.team_error": "Please enter a team name", "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.no": "No",
"leave_team_modal.title": "Leave the team?", "leave_team_modal.title": "Leave the team?",
"leave_team_modal.yes": "Yes", "leave_team_modal.yes": "Yes",
@@ -1727,8 +1718,8 @@
"more_channels.title": "More Channels", "more_channels.title": "More Channels",
"more_direct_channels.close": "Close", "more_direct_channels.close": "Close",
"more_direct_channels.message": "Message", "more_direct_channels.message": "Message",
"more_direct_channels.new_convo_note": "This will start a new conversation. If youre adding a lot of people, consider creating a private group instead.", "more_direct_channels.new_convo_note": "This will start a new conversation. If youre adding a lot of people, consider creating a private channel instead.",
"more_direct_channels.new_convo_note.full": "Youve reached the maximum number of people for this conversation. Consider creating a private group instead.", "more_direct_channels.new_convo_note.full": "Youve reached the maximum number of people for this conversation. Consider creating a private channel instead.",
"more_direct_channels.title": "Direct Messages", "more_direct_channels.title": "Direct Messages",
"msg_typing.areTyping": "{users} and {last} are typing...", "msg_typing.areTyping": "{users} and {last} are typing...",
"msg_typing.isTyping": "{user} is typing...", "msg_typing.isTyping": "{user} is typing...",
@@ -1895,18 +1886,18 @@
"setting_upload.noFile": "No file selected.", "setting_upload.noFile": "No file selected.",
"setting_upload.select": "Select file", "setting_upload.select": "Select file",
"sidebar.channels": "Channels", "sidebar.channels": "Channels",
"sidebar.createChannel": "Create new channel", "sidebar.createChannel": "Create new public channel",
"sidebar.createGroup": "Create new group", "sidebar.createGroup": "Create new private channel",
"sidebar.direct": "Direct Messages", "sidebar.direct": "Direct Messages",
"sidebar.favorite": "Favorites", "sidebar.favorite": "Favorites",
"sidebar.more": "More", "sidebar.more": "More",
"sidebar.moreElips": "More...", "sidebar.moreElips": "More...",
"sidebar.otherMembers": "Outside this team", "sidebar.otherMembers": "Outside this team",
"sidebar.pg": "Private Groups", "sidebar.pg": "Private Channels",
"sidebar.removeList": "Remove from list", "sidebar.removeList": "Remove from list",
"sidebar.tutorialScreen1": "<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. Theyre 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. Theyre 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.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.unreadAbove": "Unread post(s) above",
"sidebar.unreadBelow": "Unread post(s) below", "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>", "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.morechannels": "Other Channels",
"suggestion.mention.nonmembers": "Not in Channel", "suggestion.mention.nonmembers": "Not in Channel",
"suggestion.mention.special": "Special Mentions", "suggestion.mention.special": "Special Mentions",
"suggestion.search.private": "Private Groups", "suggestion.search.private": "Private Channels",
"suggestion.search.public": "Public Channels", "suggestion.search.public": "Public Channels",
"system_users_list.count": "{count, number} {count, plural, one {user} other {users}}", "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", "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.mobileAppsLinkText": "PC, Mac, iOS and Android",
"tutorial_intro.next": "Next", "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.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.skip": "Skip tutorial",
"tutorial_intro.support": "Need anything, just email us at ", "tutorial_intro.support": "Need anything, just email us at ",
"tutorial_intro.teamInvite": "Invite teammates", "tutorial_intro.teamInvite": "Invite teammates",

Просмотреть файл

@@ -217,13 +217,13 @@ export function createStandardIntroMessage(channel, centeredIntro) {
uiType = ( uiType = (
<FormattedMessage <FormattedMessage
id='intro_messages.group' id='intro_messages.group'
defaultMessage='private group' defaultMessage='private channel'
/> />
); );
memberMessage = ( memberMessage = (
<FormattedMessage <FormattedMessage
id='intro_messages.onlyInvited' id='intro_messages.onlyInvited'
defaultMessage=' Only invited members can see this private group.' defaultMessage=' Only invited members can see this private channel.'
/> />
); );
} else { } else {