Merge branch 'develop' into luke/groups-are-communities

This commit is contained in:
Luke Barnard 2017-10-18 15:57:37 +01:00
commit a40704f085
17 changed files with 1499 additions and 962 deletions

View file

@ -94,13 +94,30 @@ function _onGroupInviteFinished(groupId, addrs) {
}
function _onGroupAddRoomFinished(groupId, addrs) {
const groupStore = GroupStoreCache.getGroupStore(MatrixClientPeg.get(), groupId);
const matrixClient = MatrixClientPeg.get();
const groupStore = GroupStoreCache.getGroupStore(matrixClient, groupId);
const errorList = [];
return Promise.all(addrs.map((addr) => {
return groupStore
.addRoomToGroup(addr.address)
.catch(() => { errorList.push(addr.address); })
.reflect();
.then(() => {
const roomId = addr.address;
const room = matrixClient.getRoom(roomId);
// Can the user change related groups?
if (!room || !room.currentState.mayClientSendStateEvent("m.room.related_groups", matrixClient)) {
return;
}
// Get the related groups
const relatedGroupsEvent = room.currentState.getStateEvents('m.room.related_groups', '');
const groups = relatedGroupsEvent ? relatedGroupsEvent.getContent().groups || [] : [];
// Add this group as related
if (!groups.includes(groupId)) {
groups.push(groupId);
return MatrixClientPeg.get().sendStateEvent(roomId, 'm.room.related_groups', {groups}, '');
}
}).reflect();
})).then(() => {
if (errorList.length === 0) {
return;

View file

@ -448,8 +448,18 @@ export default React.createClass({
_initGroupStore: function(groupId) {
this._groupStore = GroupStoreCache.getGroupStore(MatrixClientPeg.get(), groupId);
this._groupStore.on('update', () => {
const summary = this._groupStore.getSummary();
if (summary.profile) {
// Default profile fields should be "" for later sending to the server (which
// requires that the fields are strings, not null)
["avatar_url", "long_description", "name", "short_description"].forEach((k) => {
summary.profile[k] = summary.profile[k] || "";
});
}
this.setState({
summary: this._groupStore.getSummary(),
summary,
isGroupPublicised: this._groupStore.getGroupPublicity(),
isUserPrivileged: this._groupStore.isUserPrivileged(),
error: null,
});
});
@ -598,22 +608,15 @@ export default React.createClass({
});
},
_onPubliciseOffClick: function() {
this._setPublicity(false);
},
_onPubliciseOnClick: function() {
this._setPublicity(true);
},
_onAddRoomsClick: function() {
showGroupAddRoomDialog(this.props.groupId);
},
_setPublicity: function(publicity) {
_onPublicityToggle: function() {
this.setState({
publicityBusy: true,
});
const publicity = !this.state.isGroupPublicised;
this._groupStore.setGroupPublicity(publicity).then(() => {
this.setState({
publicityBusy: false,
@ -737,100 +740,113 @@ export default React.createClass({
<Spinner />
</div>;
}
return <div className="mx_GroupView_membershipSection mx_GroupView_membershipSection_invited">
<div className="mx_GroupView_membershipSection_description">
{ _t("%(inviter)s has invited you to join this community", {inviter: group.inviter.userId}) }
</div>
<div className="mx_GroupView_membership_buttonContainer">
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onAcceptInviteClick}
>
{ _t("Accept") }
</AccessibleButton>
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onRejectInviteClick}
>
{ _t("Decline") }
</AccessibleButton>
</div>
</div>;
} else if (group.myMembership === 'join') {
let youAreAMemberText = _t("You are a member of this community");
if (this.state.summary.user && this.state.summary.user.is_privileged) {
youAreAMemberText = _t("You are an administrator of this community");
}
let publicisedButton;
if (this.state.publicityBusy) {
publicisedButton = <Spinner />;
}
let publicisedSection;
if (this.state.summary.user && this.state.summary.user.is_publicised) {
if (!this.state.publicityBusy) {
publicisedButton = <AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onPubliciseOffClick}
>
{ _t("Unpublish") }
</AccessibleButton>;
}
publicisedSection = <div className="mx_GroupView_membershipSubSection">
{ _t("This community is published on your profile") }
<div className="mx_GroupView_membership_buttonContainer">
{ publicisedButton }
</div>
</div>;
} else {
if (!this.state.publicityBusy) {
publicisedButton = <AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onPubliciseOnClick}
>
{ _t("Publish") }
</AccessibleButton>;
}
publicisedSection = <div className="mx_GroupView_membershipSubSection">
{ _t("This community is not published on your profile") }
<div className="mx_GroupView_membership_buttonContainer">
{ publicisedButton }
</div>
</div>;
}
return <div className="mx_GroupView_membershipSection mx_GroupView_membershipSection_joined">
<div className="mx_GroupView_membershipSubSection">
<div className="mx_GroupView_membershipSection_description">
{ youAreAMemberText }
{ _t("%(inviter)s has invited you to join this group", {inviter: group.inviter.userId}) }
</div>
<div className="mx_GroupView_membership_buttonContainer">
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onAcceptInviteClick}
>
{ _t("Accept") }
</AccessibleButton>
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onRejectInviteClick}
>
{ _t("Decline") }
</AccessibleButton>
</div>
</div>
</div>;
} else if (group.myMembership === 'join' && this.state.editing) {
const leaveButtonTooltip = this.state.isUserPrivileged ?
_t("You are a member of this group") :
_t("You are an administrator of this group");
const leaveButtonClasses = classnames({
"mx_RoomHeader_textButton": true,
"mx_GroupView_textButton": true,
"mx_GroupView_leaveButton": true,
"mx_RoomHeader_textButton_danger": this.state.isUserPrivileged,
});
return <div className="mx_GroupView_membershipSection mx_GroupView_membershipSection_joined">
<div className="mx_GroupView_membershipSubSection">
{ /* Empty div for flex alignment */ }
<div />
<div className="mx_GroupView_membership_buttonContainer">
<AccessibleButton
className={leaveButtonClasses}
onClick={this._onLeaveClick}
title={leaveButtonTooltip}
>
{ _t("Leave") }
</AccessibleButton>
</div>
</div>
{ publicisedSection }
</div>;
}
return null;
},
_getMemberSettingsSection: function() {
return <div className="mx_GroupView_memberSettings">
<h3> { _t("Community Member Settings") } </h3>
<div className="mx_GroupView_memberSettings_toggle">
<input type="checkbox"
onClick={this._onPublicityToggle}
checked={this.state.isGroupPublicised}
tabIndex="3"
id="isGroupPublicised"
/>
<label htmlFor="isGroupPublicised"
onClick={this._onPublicityToggle}
>
{ _t("Publish this community on your profile") }
</label>
</div>
</div>;
},
_getLongDescriptionNode: function() {
const summary = this.state.summary;
let description = null;
if (summary.profile && summary.profile.long_description) {
description = sanitizedHtmlNode(summary.profile.long_description);
}
return this.state.editing && this.state.isUserPrivileged ?
<div className="mx_GroupView_groupDesc">
<h3> { _t("Long Description (HTML)") } </h3>
<textarea
value={this.state.profileForm.long_description}
onChange={this._onLongDescChange}
tabIndex="4"
key="editLongDesc"
/>
</div> :
<div className="mx_GroupView_groupDesc">
{ description }
</div>;
},
render: function() {
const GroupAvatar = sdk.getComponent("avatars.GroupAvatar");
const Loader = sdk.getComponent("elements.Spinner");
const Spinner = sdk.getComponent("elements.Spinner");
const TintableSvg = sdk.getComponent("elements.TintableSvg");
if (this.state.summary === null && this.state.error === null || this.state.saving) {
return <Loader />;
return <Spinner />;
} else if (this.state.summary) {
const summary = this.state.summary;
let avatarNode;
let nameNode;
let shortDescNode;
let bodyNodes = [];
const bodyNodes = [
this._getMembershipSection(),
this.state.editing ? this._getMemberSettingsSection() : null,
this._getLongDescriptionNode(),
this._getRoomsNode(),
];
const rightButtons = [];
const headerClasses = {
mx_GroupView_header: true,
@ -838,7 +854,7 @@ export default React.createClass({
if (this.state.editing) {
let avatarImage;
if (this.state.uploadingAvatar) {
avatarImage = <Loader />;
avatarImage = <Spinner />;
} else {
const GroupAvatar = sdk.getComponent('avatars.GroupAvatar');
avatarImage = <GroupAvatar groupId={this.props.groupId}
@ -887,15 +903,6 @@ export default React.createClass({
width="18" height="18" alt={_t("Cancel")} />
</AccessibleButton>,
);
bodyNodes = [
<textarea className="mx_GroupView_editLongDesc"
value={this.state.profileForm.long_description}
onChange={this._onLongDescChange}
tabIndex="3"
key="editLongDesc"
/>,
this._getRoomsNode(),
];
} else {
const groupAvatarUrl = summary.profile ? summary.profile.avatar_url : null;
avatarNode = <GroupAvatar
@ -916,25 +923,13 @@ export default React.createClass({
if (summary.profile && summary.profile.short_description) {
shortDescNode = <span>{ summary.profile.short_description }</span>;
}
let description = null;
if (summary.profile && summary.profile.long_description) {
description = sanitizedHtmlNode(summary.profile.long_description);
}
bodyNodes = [
this._getMembershipSection(),
<div key="groupDesc" className="mx_GroupView_groupDesc">{ description }</div>,
this._getRoomsNode(),
];
if (summary.user && summary.user.is_privileged) {
rightButtons.push(
<AccessibleButton className="mx_GroupHeader_button"
onClick={this._onEditClick} title={_t("Edit Community")} key="_editButton"
>
<TintableSvg src="img/icons-settings-room.svg" width="16" height="16" />
</AccessibleButton>,
);
}
rightButtons.push(
<AccessibleButton className="mx_GroupHeader_button"
onClick={this._onEditClick} title={_t("Community Settings")} key="_editButton"
>
<TintableSvg src="img/icons-settings-room.svg" width="16" height="16" />
</AccessibleButton>,
);
if (this.props.collapsedRhs) {
rightButtons.push(
<AccessibleButton className="mx_GroupHeader_button"

View file

@ -489,7 +489,12 @@ module.exports = React.createClass({
const AddressTile = sdk.getComponent("elements.AddressTile");
for (let i = 0; i < this.state.userList.length; i++) {
query.push(
<AddressTile key={i} address={this.state.userList[i]} canDismiss={true} onDismissed={this.onDismissed(i)} />,
<AddressTile
key={i}
address={this.state.userList[i]}
canDismiss={true}
onDismissed={this.onDismissed(i)}
showAddress={this.props.pickerType === 'user'} />,
);
}
}
@ -539,6 +544,7 @@ module.exports = React.createClass({
addressSelector = (
<AddressSelector ref={(ref) => {this.addressSelector = ref;}}
addressList={this.state.queryList}
showAddress={this.props.pickerType === 'user'}
onSelected={this.onSelected}
truncateAt={TRUNCATE_QUERY_LIST}
/>

View file

@ -30,6 +30,8 @@ export default React.createClass({
// List of the addresses to display
addressList: React.PropTypes.arrayOf(UserAddressType).isRequired,
// Whether to show the address on the address tiles
showAddress: React.PropTypes.bool,
truncateAt: React.PropTypes.number.isRequired,
selected: React.PropTypes.number,
@ -142,7 +144,13 @@ export default React.createClass({
key={this.props.addressList[i].addressType + "/" + this.props.addressList[i].address}
ref={(ref) => { this.addressListElement = ref; }}
>
<AddressTile address={this.props.addressList[i]} justified={true} networkName="vector" networkUrl="img/search-icon-vector.svg" />
<AddressTile
address={this.props.addressList[i]}
showAddress={this.props.showAddress}
justified={true}
networkName="vector"
networkUrl="img/search-icon-vector.svg"
/>
</div>,
);
}

View file

@ -87,7 +87,10 @@ export default React.createClass({
info = (
<div className="mx_AddressTile_mx">
<div className={nameClasses}>{ name }</div>
<div className={idClasses}>{ address.address }</div>
{ this.props.showAddress ?
<div className={idClasses}>{ address.address }</div> :
<div />
}
</div>
);
} else if (isMatrixAddress) {

View file

@ -161,10 +161,11 @@ export default withMatrixClient(React.createClass({
{ this.makeGroupMemberTiles(this.state.searchQuery, this.state.members) }
</div> : <div />;
const invited = this.state.invitedMembers ? <div className="mx_MemberList_invited">
<h2>{ _t("Invited") }</h2>
{ this.makeGroupMemberTiles(this.state.searchQuery, this.state.invitedMembers) }
</div> : <div />;
const invited = (this.state.invitedMembers && this.state.invitedMembers.length > 0) ?
<div className="mx_MemberList_invited">
<h2>{ _t("Invited") }</h2>
{ this.makeGroupMemberTiles(this.state.searchQuery, this.state.invitedMembers) }
</div> : <div />;
return (
<div className="mx_MemberList">

View file

@ -61,5 +61,7 @@
"Thursday": "Dijous",
"Friday": "Divendres",
"Saturday": "Dissabte",
"OK": "D'acord"
"OK": "D'acord",
"a room": "una sala",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "S'ha enviat un missatge de text a +%(msisdn)s. Entreu si us plau el codi de verificació que conté"
}

View file

@ -336,7 +336,7 @@
"%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s hat den Anzeigenamen von \"%(oldDisplayName)s\" auf \"%(displayName)s\" geändert.",
"%(senderName)s changed their profile picture.": "%(senderName)s hat das Profilbild geändert.",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s hat das Berechtigungslevel von %(powerLevelDiffText)s geändert.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s änderte den Raumnamen zu %(roomName)s.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s hat den Raumnamen geändert zu %(roomName)s.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s hat das Thema geändert in \"%(topic)s\".",
"/ddg is not a command": "/ddg ist kein Kommando",
"%(senderName)s ended the call.": "%(senderName)s hat den Anruf beendet.",
@ -350,7 +350,7 @@
"%(targetName)s left the room.": "%(targetName)s hat den Raum verlassen.",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden).",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind).",
"%(senderName)s made future room history visible to all room members.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für Alle Raum-Mitglieder.",
"%(senderName)s made future room history visible to all room members.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder.",
"%(senderName)s made future room history visible to anyone.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für Jeder.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für unbekannt (%(visibility)s).",
"Missing room_id in request": "Fehlende room_id in Anfrage",
@ -530,7 +530,7 @@
"%(oneUser)sleft left and rejoined": "%(oneUser)sging und trat erneut bei",
"%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)shaben ihre Einladung %(repeats)s-mal abgelehnt",
"%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)shat die Einladung %(repeats)s mal abgelehnt",
"%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre Einladung abgelehnt",
"%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre Einladungen abgelehnt",
"%(oneUser)srejected their invitation": "%(oneUser)shat die Einladung abgelehnt",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)swurden die ursprünglichen Einladungen %(repeats)s mal wieder entzogen",
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)swurde die Einladung %(repeats)s mal wieder entzogen",
@ -899,5 +899,104 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
"%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(day)s %(monthName)s",
"Copied!": "Kopiert!",
"Failed to copy": "Kopieren fehlgeschlagen"
"Failed to copy": "Kopieren fehlgeschlagen",
"Ignored Users": "Ignorierte Benutzer",
"Ignore": "Ignorieren",
"You are now ignoring %(userId)s": "Du ignorierst jetzt %(userId)s",
"You are no longer ignoring %(userId)s": "%(userId)s wird nicht mehr ignoriert",
"Message removed by %(userId)s": "Nachricht wurde von %(userId)s entfernt",
"Filter group members": "Gruppen-Mitglieder filtern",
"Filter group rooms": "Gruppen-Räume filtern",
"Remove from group": "Aus der Gruppe entfernen",
"Invite new group members": "Neue Gruppen-Mitglieder einladen",
"Who would you like to add to this group?": "Wen möchtest Du zu dieser Gruppe hinzufügen?",
"Name or matrix ID": "Name oder Matrix-ID",
"Unable to leave room": "Verlassen des Raumes fehlgeschlagen",
"%(inviter)s has invited you to join this group": "%(inviter)s hat dich eingeladen, dieser Gruppe beizutreten",
"You are a member of this group": "Du bist ein Mitglied dieser Gruppe",
"Leave": "Verlassen",
"Failed to invite the following users to %(groupId)s:": "Die folgenden Benutzer konnten nicht in die Gruppe %(groupId)s eingeladen werden:",
"Leave Group": "Gruppe verlassen",
"Leave %(groupName)s?": "%(groupName)s verlassen?",
"Add a Room": "Raum hinzufügen",
"Add a User": "Benutzer hinzufügen",
"You are an administrator of this group": "Du bist ein Administrator in dieser Gruppe",
"Light theme": "Helles Thema",
"Dark theme": "Dunkles Thema",
"You have entered an invalid address.": "Du hast eine ungültige Adresse eingegeben.",
"Matrix ID": "Matrix-ID",
"This group is not published on your profile": "Diese Gruppe wird nicht in deinem Profil angezeigt",
"Which rooms would you like to add to this group?": "Welche Räume möchtest du zu dieser Gruppe hinzufügen?",
"Advanced options": "Erweiterte Optionen",
"Block users on other matrix homeservers from joining this room": "Blockiere Nutzer anderer Matrix-Heimserver die diesen Raum betreten wollen",
"This setting cannot be changed later!": "Diese Einstellung kann nicht nachträglich geändert werden!",
"Unignore": "Entignorieren",
"User Options": "Benutzer-Optionen",
"Unignored user": "Benutzer entignoriert",
"Ignored user": "Benutzer ignoriert",
"Stops ignoring a user, showing their messages going forward": "Stoppt das Ignorieren eines Benutzers, nachfolgende Nachrichten werden angezeigt",
"Ignores a user, hiding their messages from you": "Ignoriert einen Benutzer, verbirgt ihre Nachrichten vor dir",
"Disable Emoji suggestions while typing": "Deaktiviere Emoji-Vorschläge während des Tippens",
"Banned by %(displayName)s": "Gebannt von %(displayName)s",
"To send messages, you must be a": "Um Nachrichten zu senden musst du sein ein",
"To invite users into the room, you must be a": "Notwendiges Berechtigungslevel, um Benutzer in diesen Raum einladen zu können:",
"To configure the room, you must be a": "Notwendiges Berechtigungslevel, um diesen Raum konfigurieren:",
"To kick users, you must be a": "Notwendiges Berechtigungslevel, um Benutzer zu kicken:",
"To ban users, you must be a": "Notwendiges Berechtigungslevel, um einen Benutzer zu verbannen:",
"To remove other users' messages, you must be a": "Um Nachrichten von Benutzern zu löschen, musst du sein ein",
"To send events of type <eventType/>, you must be a": "Um Ereignisse desTyps <eventType/> zu senden, musst du sein ein",
"To change the room's avatar, you must be a": "Um das Raumbild zu ändern, musst du sein ein",
"To change the room's name, you must be a": "Um den Raumnamen zu ändern, musst du sein ein",
"To change the room's main address, you must be a": "Um die Hauptadresse des Raumes zu ändern, musst du sein ein",
"To change the room's history visibility, you must be a": "Um die Sichtbarkeit der Raum-Historie zu ändern, musst du sein ein",
"To change the permissions in the room, you must be a": "Um Berechtigungen in diesem Raum zu ändern, musst du sein ein",
"To change the topic, you must be a": "Um das Thema zu ändern, musst du sein ein",
"To modify widgets in the room, you must be a": "Um Widgets in dem Raum zu ändern, musst du sein ein",
"Description": "Beschreibung",
"Invite to Group": "In Gruppe einladen",
"Unable to accept invite": "Einladung kann nicht akzeptiert werden",
"Failed to remove user from group": "Benutzer konnte nicht aus Gruppe entfernt werden",
"Failed to invite users group": "Benutzer-Gruppe konnte nicht eingeladen werden",
"Failed to invite users to %(groupId)s": "Benutzer konnten nicht in %(groupId)s eingeladen werden",
"Unable to reject invite": "Einladung konnte nicht abgelehnt werden",
"Add users to the group summary": "Füge Benutzer zur Gruppen-Übersicht hinzu",
"Who would you like to add to this summary?": "Wen möchtest zu dieser Übersicht hinzufügen?",
"Add to summary": "Zur Übersicht hinzufügen",
"Failed to add the following users to the summary of %(groupId)s:": "Hinzufügen der folgenden Benutzer zur Übersicht von %(groupId)s fehlgeschlagen:",
"Add rooms to the group summary": "Füge Räume zur Gruppen-Übersicht hinzu",
"Which rooms would you like to add to this summary?": "Welche Räume möchtest du zu dieser Übersicht hinzufügen?",
"Room name or alias": "Raum-Name oder Alias",
"Failed to add the following rooms to the summary of %(groupId)s:": "Folgende Räume konnten nicht zu der Übersicht von %(groupId)s hinzugefügt werden:",
"Failed to remove the room from the summary of %(groupId)s": "Raum konnte nicht aus der Übersicht von %(groupId)s entfernt werden",
"The room '%(roomName)s' could not be removed from the summary.": "Der Raum '%(roomName)s' konnte nicht aus der Übersicht entfernt werden.",
"Failed to remove a user from the summary of %(groupId)s": "Benutzer konnte nicht aus der Übersicht von %(groupId)s entfernt werden",
"The user '%(displayName)s' could not be removed from the summary.": "Der Benutzer '%(displayName)s' konnte nicht aus der Übersicht entfernt werden.",
"Unknown": "Unbekannt",
"Add rooms to the group": "Füge Räume der Gruppe hinzu",
"Add to group": "Zur Gruppe hinzufügen",
"Failed to add the following rooms to %(groupId)s:": "Die folgenden Räume konnten %(groupId)s nicht hinzugefügt werden:",
"Unpublish": "Depublizieren",
"This group is published on your profile": "Diese Gruppe ist in deinem Profil veröffentlicht",
"Publish": "Veröffentlichen",
"Matrix Room ID": "Matrix-Raum-ID",
"email address": "E-Mail-Adresse",
"Try using one of the following valid address types: %(validTypesList)s.": "Versuche eine der folgenden validen Adresstypen zu benutzen: %(validTypesList)s.",
"Failed to remove room from group": "Entfernen des Raumes aus der Gruppe fehlgeschagen",
"Failed to remove '%(roomName)s' from %(groupId)s": "Entfernen von '%(roomName)s' aus %(groupId)s fehlgeschlagen",
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Bist du sicher, dass du '%(roomName)s' aus '%(groupId)s' entfernen möchtest?",
"Removing a room from the group will also remove it from the group page.": "Das Entfernen eines Raumes aus der Gruppe wird ihn auch aus der Gruppen-Seite entfernen.",
"Related Groups": "Verbundene Gruppen",
"Related groups for this room:": "Verbundene Gruppen in diesen Raum:",
"This room has no related groups": "Dieser Raum hat keine zugehörigen Gruppen",
"New group ID (e.g. +foo:%(localDomain)s)": "Neue Gruppen-ID (z.B. +foo:%(localDomain)s)",
"Invites sent": "Einladungen gesendet",
"Your group invitations have been sent.": "Deine Gruppen-Einladungen wurden gesendet.",
"Remove avatar": "Profilbild entfernen",
"Disable big emoji in chat": "Große Emojis im Chat deaktiveren",
"There's no one else here! Would you like to <a>invite others</a> or <a>stop warning about the empty room</a>?": "Sonst ist hier niemand! Möchtest Du <a>Benutzer einladen</a> oder die <a>Warnungen über den leeren Raum deaktivieren</a>?",
"Pinned Messages": "Angeheftete Nachrichten",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s hat die angehefteten Nachrichten für diesen Raum geändert.",
"Jump to read receipt": "Zur Lesebestätigung springen",
"Message Pinning": "Nachricht-Anheftung",
"Add rooms to this group": "Füge Räume zu dieser Gruppe hinzu"
}

File diff suppressed because it is too large Load diff

View file

@ -825,5 +825,27 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(fullYear)sko %(monthName)sk %(day)s",
"Copied!": "Kopiatuta!",
"Failed to copy": "Kopiak huts egin du",
"Cancel": "Utzi"
"Cancel": "Utzi",
"Advanced options": "Aukera aurreratuak",
"Block users on other matrix homeservers from joining this room": "Eragotzi beste matrix hasiera-zerbitzarietako erabiltzaileak gela honetara elkartzea",
"This setting cannot be changed later!": "Ezarpen hau ezin da gero aldatu!",
"Ignored Users": "Ezikusitako erabiltzaileak",
"Ignore": "Ezikusi",
"Unignore": "Ez ezikusi",
"User Options": "Erabiltzaile-aukerak",
"You are now ignoring %(userId)s": "%(userId)s ezikusten ari zara",
"You are no longer ignoring %(userId)s": "Ez zaude jada %(userId)s ezikusten",
"Unignored user": "Ez ezikusitako erabiltzailea",
"Ignored user": "Ezikusitako erabiltzailea",
"Stops ignoring a user, showing their messages going forward": "Utzi erabiltzailea ezikusteari, erakutsi bere mezuak",
"Ignores a user, hiding their messages from you": "Ezikusi erabiltzailea, ezkutatu bere mezuak zuretzat",
"Disable Emoji suggestions while typing": "Desgaitu Emoji proposamenak idaztean",
"Banned by %(displayName)s": "%(displayName)s erabiltzaileak debekatuta",
"Message removed by %(userId)s": "%(userId)s erabiltzaileak kendu du mezua",
"To send messages, you must be a": "Mezuak bidaltzeko hau izan behar zara:",
"To invite users into the room, you must be a": "Erabiltzaileak gonbidatzeko hau izan behar zara:",
"To configure the room, you must be a": "Gela konfiguratzeko hau izan behar zara:",
"To kick users, you must be a": "Erabiltzaileak kanporatzeko hau izan behar zara:",
"To ban users, you must be a": "Erabiltzaileak debekatzeko hau izan behar zara:",
"To remove other users' messages, you must be a": "Beste erabiltzaileen mezuak kentzeko hau izan behar zara:"
}

View file

@ -182,7 +182,7 @@
"Failed to unban": "Porttikiellon poistaminen epäonnistui",
"Failed to upload file": "Tiedoston lataaminen epäonnistui",
"Failed to upload profile picture!": "Profiilikuvan lataaminen epäonnistui",
"Failed to verify email address: make sure you clicked the link in the email": "Varmenna sähköpostiosoitteesi: varmista että klikkasit sähköpostissa olevaa linkkiä",
"Failed to verify email address: make sure you clicked the link in the email": "Sähköpostin varmennus epäonnistui: varmista että seurasit sähköpostissa olevaa linkkiä",
"Failure to create room": "Huoneen luominen epäonnistui",
"favourite": "suosikki",
"Favourites": "Suosikit",
@ -330,7 +330,7 @@
"unknown caller": "tuntematon soittaja",
"unknown device": "tuntematon laite",
"Unknown room %(roomId)s": "Tuntematon huone %(roomId)s",
"Unknown (user, device) pair:": "Tuntematon (käyttäjä,laite) -pari.",
"Unknown (user, device) pair:": "Tuntematon (käyttäjä, laite) -pari:",
"Unmute": "Poista mykistys",
"Unnamed Room": "Nimeämätön huone",
"Unrecognised command:": "Tuntematon komento:",

View file

@ -827,5 +827,105 @@
"%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(monthName)s %(day)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(fullYear)s %(monthName)s %(day)s",
"Copied!": "Lemásolva!",
"Failed to copy": "Sikertelen másolás"
"Failed to copy": "Sikertelen másolás",
"Advanced options": "További beállítások",
"Block users on other matrix homeservers from joining this room": "Felhasználók szobába való belépésének megakadályozása távoli szerverekről",
"This setting cannot be changed later!": "Ezt a beállítást később nem lehet megváltoztatni!",
"Ignored Users": "Figyelmen kívül hagyott felhasználók",
"Ignore": "Figyelmen kívül hagy",
"Unignore": "Figyelembe vesz",
"User Options": "Felhasználói beállítások",
"You are now ignoring %(userId)s": "Most figyelmen kívül hagyod: %(userId)s",
"You are no longer ignoring %(userId)s": "Ismét figyelembe veszed: %(userId)s",
"Unignored user": "Figyelembe vett felhasználó",
"Ignored user": "Figyelmen kívül hagyott felhasználó",
"Stops ignoring a user, showing their messages going forward": "Felhasználót újra figyelembe vesszük és megmutatjuk az új üzeneteit",
"Ignores a user, hiding their messages from you": "Felhasználó figyelmen kívül hagyásával elrejtheted az üzeneteit magad elől",
"Disable Emoji suggestions while typing": "Emoji ajánlások kikapcsolása gépelés közben",
"Banned by %(displayName)s": "Kitiltotta: %(displayName)s",
"Message removed by %(userId)s": "Üzenetet törölte: %(userId)s",
"To send messages, you must be a": "Ahhoz, hogy üzenetet tudj küldeni, neked ilyen szinten kell lenned:",
"To invite users into the room, you must be a": "Hogy meghívj valakit a szobába, ilyen szinten kell lenned:",
"To configure the room, you must be a": "A szoba beállításához ilyen szinten kell lenned:",
"To kick users, you must be a": "Felhasználó kirúgásához ilyen szinten kell lenned:",
"To ban users, you must be a": "Felhasználó kizárásához ilyen szinten kell lenned:",
"To remove other users' messages, you must be a": "Más üzenetének a törléséhez ilyen szinten kell lenned:",
"To send events of type <eventType/>, you must be a": "<eventType/> esemény küldéséhez ilyen szinten kell lenned:",
"To change the room's avatar, you must be a": "A szoba avatar-jának a megváltoztatásához ilyen szinten kell lenned:",
"To change the room's name, you must be a": "A szoba nevének megváltoztatásához ilyen szinten kell lenned:",
"To change the room's main address, you must be a": "A szoba elsődleges címének a megváltoztatásához ilyen szinten kell lenned:",
"To change the room's history visibility, you must be a": "A szoba naplója elérhetőségének a megváltoztatásához ilyen szinten kell lenned:",
"To change the permissions in the room, you must be a": "A szobában a jogosultság megváltoztatásához ilyen szinten kell lenned:",
"To change the topic, you must be a": "A téma megváltoztatásához ilyen szinten kell lenned:",
"To modify widgets in the room, you must be a": "A szoba kisalkalmazásainak megváltoztatásához ilyen szinten kell lenned:",
"Description": "Leírás",
"Filter group members": "Csoport tagok szürése",
"Filter group rooms": "Csoport szobák szűrése",
"Remove from group": "Csoportból való törlés",
"Invite new group members": "Új csoport tagok meghívása",
"Who would you like to add to this group?": "Kit szeretnél ehhez a csoporthoz hozzáadni?",
"Name or matrix ID": "Név vagy Matrix azonosító",
"Invite to Group": "Meghívás a csoportba",
"Unable to accept invite": "A meghívót nem lehet elfogadni",
"Unable to leave room": "A szobát nem lehet elhagyni",
"%(inviter)s has invited you to join this group": "%(inviter)s meghívott a csoportba",
"You are a member of this group": "Ennek a csoportnak a tagja vagy",
"Leave": "Elhagy",
"Failed to remove user from group": "A felhasználót nem sikerült törölni a csoportból",
"Failed to invite the following users to %(groupId)s:": "Az alábbi felhasználókat nem sikerült meghívni a(z) %(groupId)s:",
"Failed to invite users group": "Nem sikerült meghívni a felhasználói csoportot",
"Failed to invite users to %(groupId)s": "Nem sikerült meghívni a felhasználókat ebbe a csoportba: %(groupId)s",
"Unable to reject invite": "Nem sikerül elutasítani a meghívót",
"Leave Group": "Csoport elhagyása",
"Leave %(groupName)s?": "Elhagyod a csoportot: %(groupName)s?",
"Flair": "Szimat",
"Add a Room": "Szoba hozzáadása",
"Add a User": "Felhasználó hozzáadása",
"Add users to the group summary": "Felhasználók hozzáadása a csoport összefoglalóhoz",
"Who would you like to add to this summary?": "Kit szeretnél hozzáadni ehhez az összefoglalóhoz?",
"Add to summary": "Összefoglalóhoz adás",
"Failed to add the following users to the summary of %(groupId)s:": "Az alábbi felhasználókat nem sikerült hozzáadni a(z) %(groupId)s csoport összefoglalójához:",
"Add rooms to the group summary": "Szobák hozzáadása a csoport összefoglalóhoz",
"Which rooms would you like to add to this summary?": "Melyik szobákat szeretnéd hozzáadni ehhez az összefoglalóhoz?",
"Room name or alias": "Szoba neve vagy beceneve",
"You are an administrator of this group": "A csoport adminisztrátora vagy",
"Failed to add the following rooms to the summary of %(groupId)s:": "Az alábbi szobákat nem sikerült hozzáadni a(z) %(groupId)s csoport összefoglalójához:",
"Failed to remove the room from the summary of %(groupId)s": "Az alábbi szobákat nem sikerült eltávolítani a(z) %(groupId)s csoport összefoglalójából",
"The room '%(roomName)s' could not be removed from the summary.": "Nem sikerült törölni az összefoglalóból ezt a szobát: '%(roomName)s'.",
"Failed to remove a user from the summary of %(groupId)s": "Nem sikerült törölni az összefoglalóból ezt a felhasználót: %(groupId)s",
"The user '%(displayName)s' could not be removed from the summary.": "Nem sikerült törölni az összefoglalóból ezt a felhasználót: %(groupId)s.",
"Light theme": "Világos téma",
"Dark theme": "Sötét téma",
"Unknown": "Ismeretlen",
"Add rooms to the group": "Szobák hozzáadása a csoporthoz",
"Which rooms would you like to add to this group?": "Melyik szobákat szeretnéd hozzáadni ehhez a csoporthoz?",
"Add to group": "Csoport hozzáadása",
"Failed to add the following rooms to %(groupId)s:": "Az alábbi szobákat nem sikerült hozzáadni a(z) %(groupId)s csoporthoz:",
"Unpublish": "Megjelenés visszavonása",
"This group is published on your profile": "Ez a csoport megjelenik a profilodban",
"Publish": "Nyilvánosságra hozás",
"This group is not published on your profile": "Ez a csoport nem jelenik meg a profilodban",
"Matrix ID": "Matrix azonosító",
"Matrix Room ID": "Szoba Matrix azonosító",
"email address": "E-mail cím",
"Try using one of the following valid address types: %(validTypesList)s.": "Próbáld meg valamelyik érvényes cím típust: %(validTypesList)s.",
"You have entered an invalid address.": "Érvénytelen címet adtál meg.",
"Failed to remove room from group": "A csoportból nem sikerült szobát törölni",
"Failed to remove '%(roomName)s' from %(groupId)s": "A(z) %(groupId)s csoportból nem sikerült törölni: %(roomName)s",
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Biztos, hogy törlöd a(z) %(roomName)s szobát a(z) %(groupId)s csoportból?",
"Removing a room from the group will also remove it from the group page.": "A szoba törlése a csoportból a csoport oldalról is törli azt.",
"Related Groups": "Érintett csoportok",
"Related groups for this room:": "A szobához tartozó érintett csoportok:",
"This room has no related groups": "A szobában nincsenek érintett csoportok",
"New group ID (e.g. +foo:%(localDomain)s)": "Új csoport azonosító (pl.: +foo:%(localDomain)s)",
"Invites sent": "Meghívó elküldve",
"Your group invitations have been sent.": "A csoport meghívók elküldve.",
"Jump to read receipt": "Olvasási visszaigazolásra ugrás",
"Disable big emoji in chat": "Nagy emoji-k tiltása a csevegésben",
"There's no one else here! Would you like to <a>invite others</a> or <a>stop warning about the empty room</a>?": "Itt nincs senki más! Szeretnél <a>meghívni másokat</a> vagy <a>ne figyelmeztessünk az üres szobával kapcsolatban</a>?",
"Message Pinning": "Üzenet kitűzése",
"Remove avatar": "Avatar törlése",
"Pinned Messages": "Kitűzött üzenetek",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s megváltoztatta a szoba kitűzött szövegeit.",
"Add rooms to this group": "Szoba hozzáadás ehhez a csoporthoz"
}

View file

@ -893,5 +893,53 @@
"%(widgetName)s widget added by %(senderName)s": "Widget %(widgetName)s adicionado por %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "Widget %(widgetName)s removido por %(senderName)s",
"%(widgetName)s widget modified by %(senderName)s": "Widget %(widgetName)s modificado por %(senderName)s",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "A verificação através de robot está atualmente indisponível na versão desktop - utilize um <a>navegador web</a>"
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "A verificação através de robot está atualmente indisponível na versão desktop - utilize um <a>navegador web</a>",
"Advanced options": "Opções avançadas",
"This setting cannot be changed later!": "Esta definição não pode ser alterada mais tarde!",
"Ignored Users": "Utilizadores Ignorados",
"Ignore": "Ignorar",
"User Options": "Opções de Utilizador",
"Ignored user": "Utilizador ignorado",
"Description": "Descrição",
"Filter group members": "Filtrar membros do grupo",
"Filter group rooms": "Filtrar salas do grupo",
"Remove from group": "Remover do grupo",
"Invite new group members": "Convidar novos membros para o grupo",
"Name or matrix ID": "Nome ou ID do matrix",
"Invite to Group": "Convidar para Grupo",
"You are a member of this group": "É um membro deste grupo",
"Leave": "Sair",
"Failed to remove user from group": "Não foi possível remover o utilizador do grupo",
"Leave Group": "Sair do Grupo",
"Add a Room": "Adicionar uma sala",
"Add a User": "Adicionar um utilizador",
"Unknown": "Desconhecido",
"Add rooms to the group": "Adicionar salas ao grupo",
"Which rooms would you like to add to this group?": "Que salas quer adicionar a este grupo?",
"Add to group": "Adicionar ao grupo",
"email address": "endereço de email",
"Related Groups": "Grupos Relacionados",
"Related groups for this room:": "Grupos relacionados para esta sala:",
"This room has no related groups": "Esta sala não tem grupos relacionados",
"Invites sent": "Convites enviados",
"Your group invitations have been sent.": "Os seus convites de grupo foram enviados.",
"Block users on other matrix homeservers from joining this room": "Impede utilizadores de outros servidores base matrix de se juntar a esta sala",
"Unignore": "Deixar de ignorar",
"You are now ignoring %(userId)s": "Está agora a ignorar %(userId)s",
"You are no longer ignoring %(userId)s": "%(userId)s já não é ignorado",
"Unignored user": "Utilizador não ignorado",
"Stops ignoring a user, showing their messages going forward": "Deixa de ignorar um utilizador, mostrando as suas mensagens daqui para a frente",
"Ignores a user, hiding their messages from you": "Ignora um utilizador, deixando de mostrar as mensagens dele",
"Disable big emoji in chat": "Desativar emojis grandes no chat",
"Disable Emoji suggestions while typing": "Desativar sugestões de Emoji durante a escrita",
"There's no one else here! Would you like to <a>invite others</a> or <a>stop warning about the empty room</a>?": "Não há ninguém aqui! Gostarias de <a>convidar alguém</a> ou <a>parar avisos sobre a sala vazia</a>?",
"Remove avatar": "Remover avatar",
"Banned by %(displayName)s": "Banido por %(displayName)s",
"Message removed by %(userId)s": "Mensagem removida por %(userId)s",
"To send messages, you must be a": "Para enviar mensagens, tens de ser um(a)",
"To invite users into the room, you must be a": "Para convidar utilizadores para esta sala, tens de ser um(a)",
"To configure the room, you must be a": "Para configurar esta sala, tens de ser um(a)",
"To ban users, you must be a": "Para banir utilizadores, tens de ser um(a)",
"To remove other users' messages, you must be a": "Para remover mensagens de outros utilizadores, tens de ser um(a)",
"To send events of type <eventType/>, you must be a": "Para enviar eventos do tipo <eventType/>, tens de ser um(a)"
}

View file

@ -437,7 +437,7 @@
"tag direct chat": "Тег прямого чата",
"The default role for new room members is": "Роль по умолчанию для новых участников комнаты",
"The main address for this room is": "Основной адрес для этой комнаты",
"This email address is already in use": "Этот адрес электронной почты уже используется",
"This email address is already in use": "Этот адрес эл. почты уже используется",
"This email address was not found": "Этот адрес электронной почты не найден",
"The email address linked to your account must be entered.": "Необходимо ввести адрес электронной почты, связанный с вашей учетной записью.",
"The file '%(fileName)s' failed to upload": "Не удалось отправить файл '%(fileName)s'",
@ -549,8 +549,8 @@
"device id: ": "ID устройства: ",
"Device key:": "Ключ устройства:",
"disabled": "отключено",
"Email address": "Адрес электронной почты",
"Email address (optional)": "Адрес электронной почты (необязательно)",
"Email address": "Адрес эл. почты",
"Email address (optional)": "Адрес эл. почты (необязательно)",
"enabled": "включено",
"Error decrypting attachment": "Ошибка при расшифровке вложения",
"Export": "Экспорт",
@ -877,5 +877,105 @@
"%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(monthName)s %(day)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
"Copied!": "Скопировано!",
"Failed to copy": "Не удалось скопировать"
"Failed to copy": "Не удалось скопировать",
"Advanced options": "Дополнительные параметры",
"Block users on other matrix homeservers from joining this room": "Блокировать пользователей, входящих в эту комнату с других серверов matrix",
"This setting cannot be changed later!": "Этот параметр нельзя изменить позднее!",
"Ignored Users": "Игнорируемые пользователи",
"Ignore": "Игнорировать",
"Unignore": "Перестать игнорировать",
"User Options": "Параметры пользователя",
"You are now ignoring %(userId)s": "Теперь вы игнорируете %(userId)s",
"You are no longer ignoring %(userId)s": "Вы больше не игнорируете %(userId)s",
"Unignored user": "Неигнорируемый пользователь",
"Ignored user": "Игнорируемый пользователь",
"Stops ignoring a user, showing their messages going forward": "Прекращает игнорирование пользователя, показывая их будущие сообщения",
"Ignores a user, hiding their messages from you": "Игнорирует пользователя, скрывая сообщения от вас",
"Disable Emoji suggestions while typing": "Отключить предложения Emoji при наборе текста",
"Banned by %(displayName)s": "Запрещено %(displayName)s",
"Message removed by %(userId)s": "Сообщение удалено %(userId)s",
"To send messages, you must be a": "Для отправки сообщений необходимо быть",
"To invite users into the room, you must be a": "Чтобы пригласить пользователей в комнату, необходимо быть",
"To configure the room, you must be a": "Чтобы настроить комнату, необходимо быть",
"To kick users, you must be a": "Чтобы выкидывать пользователей, необходимо быть",
"To ban users, you must be a": "Чтобы банить пользователей, необходимо быть",
"To remove other users' messages, you must be a": "Чтобы удалять сообщения других пользователей, необходимо быть",
"To send events of type <eventType/>, you must be a": "Для отправки событий типа <eventType/>, необходимо быть",
"To change the room's avatar, you must be a": "Чтобы изменить аватар комнаты, необходимо быть",
"To change the room's name, you must be a": "Чтобы изменить имя комнаты, необходимо быть",
"To change the room's main address, you must be a": "Чтобы изменить основной адрес комнаты, необходимо быть",
"To change the room's history visibility, you must be a": "Чтобы изменить видимость истории комнаты, необходимо быть",
"To change the permissions in the room, you must be a": "Чтобы изменить разрешения в комнате, необходимо быть",
"To change the topic, you must be a": "Чтобы изменить тему, необходимо быть",
"To modify widgets in the room, you must be a": "Чтобы изменить виджеты в комнате, необходимо быть",
"Description": "Описание",
"Filter group members": "Фильтрация членов группы",
"Filter group rooms": "Фильтрация комнат группы",
"Remove from group": "Удалить из группы",
"Invite new group members": "Пригласить новых членов группы",
"Who would you like to add to this group?": "Кого вы хотите добавить в эту группу?",
"Name or matrix ID": "Имя или matrix ID",
"Invite to Group": "Пригласить в группу",
"Unable to accept invite": "Невозможно принять приглашение",
"Unable to leave room": "Невозможно покинуть комнату",
"%(inviter)s has invited you to join this group": "%(inviter)s пригласил(а) вас присоединиться к этой группе",
"You are a member of this group": "Вы являетесь членом этой группы",
"Leave": "Покинуть",
"Failed to remove user from group": "Не удалось удалить пользователя из группы",
"Failed to invite the following users to %(groupId)s:": "Не удалось пригласить следующих пользователей в %(groupId)s:",
"Failed to remove '%(roomName)s' from %(groupId)s": "Не удалось удалить '%(roomName)s' из %(groupId)s",
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Вы действительно хотите удалить '%(roomName)s' из %(groupId)s?",
"Removing a room from the group will also remove it from the group page.": "Удаление комнаты из группы также приведет к удалению ее со страницы группы.",
"Related Groups": "Связанные группы",
"Related groups for this room:": "Связанные группы для этой комнаты:",
"This room has no related groups": "Эта комната не связана ни с одной из групп",
"New group ID (e.g. +foo:%(localDomain)s)": "Новый ID группы (например +foo:%(localDomain)s)",
"Invites sent": "Приглашение отправлено",
"Your group invitations have been sent.": "Ваши приглашения в группу были отправлены.",
"Jump to read receipt": "Перейти к отчету о прочтении",
"Disable big emoji in chat": "Отключить большие emoji в чате",
"There's no one else here! Would you like to <a>invite others</a> or <a>stop warning about the empty room</a>?": "Больше никого нет! Хотите <a>пригласить кого-нибудь</a> или <a>отключить уведомление о пустой комнате</a>?",
"Message Pinning": "Закрепление сообщений",
"Remove avatar": "Удалить аватар",
"Failed to invite users group": "Не удалось пригласить группу пользователей",
"Failed to invite users to %(groupId)s": "Не удалось пригласить пользователей в %(groupId)s",
"Unable to reject invite": "Невозможно отклонить приглашение",
"Leave Group": "Покинуть группу",
"Leave %(groupName)s?": "Покинуть %(groupName)s?",
"Flair": "Талант",
"Add a Room": "Добавить комнату",
"Add a User": "Добавить пользователя",
"Add users to the group summary": "Добавление пользователей в сводку по группе",
"Who would you like to add to this summary?": "Кого вы хотите добавить в эту сводку?",
"Add to summary": "Добавить в сводку",
"Failed to add the following users to the summary of %(groupId)s:": "Не удалось добавить следующих пользователей в сводку %(groupId)s:",
"Add rooms to the group summary": "Добавление комнат в сводку по группе",
"Which rooms would you like to add to this summary?": "Какие комнаты вы хотите добавить в эту сводку?",
"Room name or alias": "Название комнаты или псевдоним",
"Pinned Messages": "Закрепленные сообщения",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s изменил закрепленные сообщения для этой комнаты.",
"You are an administrator of this group": "Вы являетесь администратором этой группы",
"Failed to add the following rooms to the summary of %(groupId)s:": "Не удалось добавить следующие комнаты в сводку %(groupId)s:",
"Failed to remove the room from the summary of %(groupId)s": "Не удалось удалить комнату из сводки %(groupId)s",
"The room '%(roomName)s' could not be removed from the summary.": "Комнату '%(roomName)s' не удалось удалить из сводки.",
"Failed to remove a user from the summary of %(groupId)s": "Не удалось удалить пользователя из сводки %(groupId)s",
"The user '%(displayName)s' could not be removed from the summary.": "Пользователя '%(displayName)s' не удалось удалить из сводки.",
"Light theme": "Светлая тема",
"Dark theme": "Темная тема",
"Unknown": "Неизвестно",
"Add rooms to the group": "Добавить комнаты в группу",
"Which rooms would you like to add to this group?": "Какие комнаты вы хотите добавить в эту группу?",
"Add to group": "Добавить в группу",
"Failed to add the following rooms to %(groupId)s:": "Не удалось добавить следующие комнаты в %(groupId)s:",
"Unpublish": "Отменить публикацию",
"This group is published on your profile": "Эта группа публикуется в вашем профиле",
"Publish": "Публикация",
"This group is not published on your profile": "Эта группа не публикуется в вашем профиле",
"Matrix ID": "Matrix ID",
"Matrix Room ID": "Matrix ID комнаты",
"email address": "адрес email",
"Try using one of the following valid address types: %(validTypesList)s.": "Попробуйте использовать один из следующих допустимых типов адресов: %(validTypesList)s.",
"You have entered an invalid address.": "Введен неправильный адрес.",
"Failed to remove room from group": "Не удалось удалить комнату из группы",
"Add rooms to this group": "Добавить комнаты в эту группу"
}

View file

@ -61,6 +61,14 @@ export default class GroupStore extends EventEmitter {
return this._rooms;
}
getGroupPublicity() {
return this._summary.user ? this._summary.user.is_publicised : null;
}
isUserPrivileged() {
return this._summary.user ? this._summary.user.is_privileged : null;
}
addRoomToGroup(roomId) {
return this._matrixClient
.addRoomToGroup(this.groupId, roomId)