Merge pull request #1005 from matrix-org/kegan/translation-baboon

Add missing translations
This commit is contained in:
David Baker 2017-06-02 11:27:28 +01:00 committed by GitHub
commit 43b18db900
17 changed files with 73 additions and 30 deletions

View file

@ -684,8 +684,12 @@ module.exports = React.createClass({
const roomToLeave = MatrixClientPeg.get().getRoom(roomId); const roomToLeave = MatrixClientPeg.get().getRoom(roomId);
Modal.createDialog(QuestionDialog, { Modal.createDialog(QuestionDialog, {
title: "Leave room", title: _t("Leave room"),
description: <span>Are you sure you want to leave the room <i>{roomToLeave.name}</i>?</span>, description: (
<span>
{_t("Are you sure you want to leave the room '%(roomName)s'?", {roomName: roomToLeave.name})}
</span>
),
onFinished: (shouldLeave) => { onFinished: (shouldLeave) => {
if (shouldLeave) { if (shouldLeave) {
const d = MatrixClientPeg.get().leave(roomId); const d = MatrixClientPeg.get().leave(roomId);

View file

@ -715,8 +715,8 @@ module.exports = React.createClass({
<h3>{ _t("Cryptography") }</h3> <h3>{ _t("Cryptography") }</h3>
<div className="mx_UserSettings_section mx_UserSettings_cryptoSection"> <div className="mx_UserSettings_section mx_UserSettings_cryptoSection">
<ul> <ul>
<li><label>Device ID:</label> <span><code>{deviceId}</code></span></li> <li><label>{_t("Device ID:")}</label> <span><code>{deviceId}</code></span></li>
<li><label>Device key:</label> <span><code><b>{identityKey}</b></code></span></li> <li><label>{_t("Device key:")}</label> <span><code><b>{identityKey}</b></code></span></li>
</ul> </ul>
{ importExportButtons } { importExportButtons }
</div> </div>

View file

@ -229,7 +229,7 @@ module.exports = React.createClass({
<div className="mx_Login_error"> <div className="mx_Login_error">
</div> </div>
<a className="mx_Login_create" onClick={this.props.onLoginClick} href="#"> <a className="mx_Login_create" onClick={this.props.onLoginClick} href="#">
Return to login {_t('Return to login screen')}
</a> </a>
<a className="mx_Login_create" onClick={this.props.onRegisterClick} href="#"> <a className="mx_Login_create" onClick={this.props.onRegisterClick} href="#">
{ _t('Create an account') } { _t('Create an account') }

View file

@ -490,7 +490,7 @@ module.exports = React.createClass({
var error; var error;
var addressSelector; var addressSelector;
if (this.state.error) { if (this.state.error) {
error = <div className="mx_ChatInviteDialog_error">You have entered an invalid contact. Try using their Matrix ID or email address.</div>; error = <div className="mx_ChatInviteDialog_error">{_t("You have entered an invalid contact. Try using their Matrix ID or email address.")}</div>;
} else { } else {
const addressSelectorHeader = <div className="mx_ChatInviteDialog_addressSelectHeader"> const addressSelectorHeader = <div className="mx_ChatInviteDialog_addressSelectHeader">
Searching known users Searching known users

View file

@ -60,10 +60,10 @@ module.exports = React.createClass({
</div> </div>
<div className="mx_Dialog_buttons"> <div className="mx_Dialog_buttons">
<button className="mx_Dialog_primary" onClick={this.props.onFinished} autoFocus={true}> <button className="mx_Dialog_primary" onClick={this.props.onFinished} autoFocus={true}>
Cancel {_t("Cancel")}
</button> </button>
<button onClick={this.onRegisterClicked}> <button onClick={this.onRegisterClicked}>
Register {_t("Register")}
</button> </button>
</div> </div>
</BaseDialog> </BaseDialog>

View file

@ -51,7 +51,7 @@ export default React.createClass({
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
const cancelButton = this.props.hasCancelButton ? ( const cancelButton = this.props.hasCancelButton ? (
<button onClick={this.onCancel}> <button onClick={this.onCancel}>
Cancel {_t("Cancel")}
</button> </button>
) : null; ) : null;
return ( return (

View file

@ -18,6 +18,7 @@ limitations under the License.
import React from 'react'; import React from 'react';
import * as Roles from '../../../Roles'; import * as Roles from '../../../Roles';
import { _t } from '../../../languageHandler';
var LEVEL_ROLE_MAP = {}; var LEVEL_ROLE_MAP = {};
var reverseRoles = {}; var reverseRoles = {};
@ -116,7 +117,7 @@ module.exports = React.createClass({
text: Roles.textualPowerLevel(level, 0), text: Roles.textualPowerLevel(level, 0),
} }
}); });
options.push({ value: "Custom", text: "Custom level" }); options.push({ value: "Custom", text: _t("Custom level") });
options = options.map((op) => { options = options.map((op) => {
return <option value={op.value} key={op.value}>{op.text}</option>; return <option value={op.value} key={op.value}>{op.text}</option>;
}); });

View file

@ -129,8 +129,8 @@ export const PasswordAuthEntry = React.createClass({
return ( return (
<div> <div>
<p>To continue, please enter your password.</p> <p>{_t("To continue, please enter your password.")}</p>
<p>Password:</p> <p>{_t("Password:")}</p>
<form onSubmit={this._onSubmit}> <form onSubmit={this._onSubmit}>
<input <input
ref="passwordField" ref="passwordField"
@ -380,7 +380,7 @@ export const MsisdnAuthEntry = React.createClass({
onChange={this._onTokenChange} onChange={this._onTokenChange}
/> />
<br /> <br />
<input type="submit" value="Submit" <input type="submit" value={_t("Submit")}
className={submitClasses} className={submitClasses}
disabled={!enableSubmit} disabled={!enableSubmit}
/> />

View file

@ -150,7 +150,7 @@ class PasswordLogin extends React.Component {
type="text" type="text"
name="phoneNumber" name="phoneNumber"
onChange={this.onPhoneNumberChanged} onChange={this.onPhoneNumberChanged}
placeholder="Mobile phone number" placeholder={_t("Mobile phone number")}
value={this.state.phoneNumber} value={this.state.phoneNumber}
autoFocus autoFocus
/> />

View file

@ -282,7 +282,7 @@ module.exports = React.createClass({
const emailSection = ( const emailSection = (
<div> <div>
<input type="text" ref="email" <input type="text" ref="email"
autoFocus={true} placeholder="Email address (optional)" autoFocus={true} placeholder={_t("Email address (optional)")}
defaultValue={this.props.defaultEmail} defaultValue={this.props.defaultEmail}
className={this._classForField(FIELD_EMAIL, 'mx_Login_field')} className={this._classForField(FIELD_EMAIL, 'mx_Login_field')}
onBlur={function() {self.validateField(FIELD_EMAIL);}} onBlur={function() {self.validateField(FIELD_EMAIL);}}
@ -321,7 +321,7 @@ module.exports = React.createClass({
showPrefix={true} showPrefix={true}
/> />
<input type="text" ref="phoneNumber" <input type="text" ref="phoneNumber"
placeholder="Mobile phone number (optional)" placeholder={_t("Mobile phone number (optional)")}
defaultValue={this.props.defaultPhoneNumber} defaultValue={this.props.defaultPhoneNumber}
className={this._classForField( className={this._classForField(
FIELD_PHONE_NUMBER, FIELD_PHONE_NUMBER,
@ -339,9 +339,9 @@ module.exports = React.createClass({
<input className="mx_Login_submit" type="submit" value="Register" /> <input className="mx_Login_submit" type="submit" value="Register" />
); );
let placeholderUserName = "User name"; let placeholderUserName = _t("User name");
if (this.props.guestUsername) { if (this.props.guestUsername) {
placeholderUserName += " (default: " + this.props.guestUsername + ")"; placeholderUserName += " " + _t("(default: %(userName)s)", {userName: this.props.guestUsername});
} }
return ( return (
@ -356,15 +356,15 @@ module.exports = React.createClass({
onBlur={function() {self.validateField(FIELD_USERNAME);}} /> onBlur={function() {self.validateField(FIELD_USERNAME);}} />
<br /> <br />
{ this.props.guestUsername ? { this.props.guestUsername ?
<div className="mx_Login_fieldLabel">Setting a user name will create a fresh account</div> : null <div className="mx_Login_fieldLabel">{_t("Setting a user name will create a fresh account")}</div> : null
} }
<input type="password" ref="password" <input type="password" ref="password"
className={this._classForField(FIELD_PASSWORD, 'mx_Login_field')} className={this._classForField(FIELD_PASSWORD, 'mx_Login_field')}
onBlur={function() {self.validateField(FIELD_PASSWORD);}} onBlur={function() {self.validateField(FIELD_PASSWORD);}}
placeholder="Password" defaultValue={this.props.defaultPassword} /> placeholder={_t("Password")} defaultValue={this.props.defaultPassword} />
<br /> <br />
<input type="password" ref="passwordConfirm" <input type="password" ref="passwordConfirm"
placeholder="Confirm password" placeholder={_t("Confirm password")}
className={this._classForField(FIELD_PASSWORD_CONFIRM, 'mx_Login_field')} className={this._classForField(FIELD_PASSWORD_CONFIRM, 'mx_Login_field')}
onBlur={function() {self.validateField(FIELD_PASSWORD_CONFIRM);}} onBlur={function() {self.validateField(FIELD_PASSWORD_CONFIRM);}}
defaultValue={this.props.defaultPassword} /> defaultValue={this.props.defaultPassword} />

View file

@ -230,7 +230,7 @@ module.exports = React.createClass({
remote_aliases_section = ( remote_aliases_section = (
<div> <div>
<div className="mx_RoomSettings_aliasLabel"> <div className="mx_RoomSettings_aliasLabel">
Remote addresses for this room: {_t("Remote addresses for this room:")}
</div> </div>
<div className="mx_RoomSettings_aliasesTable"> <div className="mx_RoomSettings_aliasesTable">
{ this.state.remoteDomains.map((domain, i) => { { this.state.remoteDomains.map((domain, i) => {

View file

@ -20,7 +20,7 @@ var MatrixClientPeg = require('../../../MatrixClientPeg');
var sdk = require("../../../index"); var sdk = require("../../../index");
var Modal = require("../../../Modal"); var Modal = require("../../../Modal");
var UserSettingsStore = require('../../../UserSettingsStore'); var UserSettingsStore = require('../../../UserSettingsStore');
import { _t } from '../../../languageHandler'; import { _t, _tJsx } from '../../../languageHandler';
module.exports = React.createClass({ module.exports = React.createClass({
@ -131,12 +131,24 @@ module.exports = React.createClass({
</label>; </label>;
} }
let urlPreviewText = null;
if (UserSettingsStore.getUrlPreviewsDisabled()) {
urlPreviewText = (
_tJsx("You have <a>disabled</a> URL previews by default.", /<a>(.*?)<\/a>/, (sub)=><a href="#/settings">{sub}</a>)
);
}
else {
urlPreviewText = (
_tJsx("You have <a>enabled</a> URL previews by default.", /<a>(.*?)<\/a>/, (sub)=><a href="#/settings">{sub}</a>)
);
}
return ( return (
<div className="mx_RoomSettings_toggles"> <div className="mx_RoomSettings_toggles">
<h3>{_t("URL Previews")}</h3> <h3>{_t("URL Previews")}</h3>
<label> <label>
You have <a href="#/settings">{ UserSettingsStore.getUrlPreviewsDisabled() ? 'disabled' : 'enabled' }</a> URL previews by default. {urlPreviewText}
</label> </label>
{ disableRoomPreviewUrls } { disableRoomPreviewUrls }
<label> <label>

View file

@ -16,6 +16,7 @@ limitations under the License.
import React from 'react'; import React from 'react';
import sdk from '../../../index'; import sdk from '../../../index';
import { _t } from '../../../languageHandler';
export default class MemberDeviceInfo extends React.Component { export default class MemberDeviceInfo extends React.Component {
render() { render() {
@ -49,7 +50,7 @@ export default class MemberDeviceInfo extends React.Component {
// add the deviceId as a titletext to help with debugging // add the deviceId as a titletext to help with debugging
return ( return (
<div className="mx_MemberDeviceInfo" <div className="mx_MemberDeviceInfo"
title={"device id: " + this.props.device.deviceId} > title={_t("device id: ") + this.props.device.deviceId} >
<div className="mx_MemberDeviceInfo_deviceInfo"> <div className="mx_MemberDeviceInfo_deviceInfo">
<div className="mx_MemberDeviceInfo_deviceId"> <div className="mx_MemberDeviceInfo_deviceId">
{deviceName} {deviceName}

View file

@ -188,7 +188,11 @@ module.exports = React.createClass({
'm.room.name', user_id 'm.room.name', user_id
); );
save_button = <AccessibleButton className="mx_RoomHeader_textButton" onClick={this.props.onSaveClick}>Save</AccessibleButton>; save_button = (
<AccessibleButton className="mx_RoomHeader_textButton" onClick={this.props.onSaveClick}>
{_t("Save")}
</AccessibleButton>
);
} }
if (this.props.onCancelClick) { if (this.props.onCancelClick) {

View file

@ -726,7 +726,7 @@ module.exports = React.createClass({
if (canSetTag || self.state.tags) { if (canSetTag || self.state.tags) {
var tagsSection = var tagsSection =
<div className="mx_RoomSettings_tags"> <div className="mx_RoomSettings_tags">
Tagged as: { canSetTag ? {_t("Tagged as: ")}{ canSetTag ?
(tags.map(function(tag, i) { (tags.map(function(tag, i) {
return (<label key={ i }> return (<label key={ i }>
<input type="checkbox" <input type="checkbox"
@ -844,7 +844,7 @@ module.exports = React.createClass({
<input type="checkbox" disabled={ !roomState.mayClientSendStateEvent("m.room.aliases", cli) } <input type="checkbox" disabled={ !roomState.mayClientSendStateEvent("m.room.aliases", cli) }
onChange={ this._onToggle.bind(this, "isRoomPublished", true, false)} onChange={ this._onToggle.bind(this, "isRoomPublished", true, false)}
checked={this.state.isRoomPublished}/> checked={this.state.isRoomPublished}/>
List this room in { MatrixClientPeg.get().getDomain() }'s room directory? {_t("List this room in %(domain)s's room directory?", { domain: MatrixClientPeg.get().getDomain() })}
</label> </label>
</div> </div>
<div className="mx_RoomSettings_settings"> <div className="mx_RoomSettings_settings">
@ -854,7 +854,7 @@ module.exports = React.createClass({
disabled={ !roomState.mayClientSendStateEvent("m.room.history_visibility", cli) } disabled={ !roomState.mayClientSendStateEvent("m.room.history_visibility", cli) }
checked={historyVisibility === "world_readable"} checked={historyVisibility === "world_readable"}
onChange={this._onHistoryRadioToggle} /> onChange={this._onHistoryRadioToggle} />
Anyone {_t("Anyone")}
</label> </label>
<label> <label>
<input type="radio" name="historyVis" value="shared" <input type="radio" name="historyVis" value="shared"

View file

@ -18,6 +18,7 @@ limitations under the License.
var React = require('react'); var React = require('react');
var sdk = require('../../../index'); var sdk = require('../../../index');
import { _t } from "../../../languageHandler";
module.exports = React.createClass({ module.exports = React.createClass({
displayName: 'RoomTopicEditor', displayName: 'RoomTopicEditor',
@ -43,7 +44,7 @@ module.exports = React.createClass({
<EditableText ref="editor" <EditableText ref="editor"
className="mx_RoomHeader_topic mx_RoomHeader_editable" className="mx_RoomHeader_topic mx_RoomHeader_editable"
placeholderClassName="mx_RoomHeader_placeholder" placeholderClassName="mx_RoomHeader_placeholder"
placeholder="Add a topic" placeholder={_t("Add a topic")}
blurToCancel={ false } blurToCancel={ false }
initialValue={ this._initialTopic }/> initialValue={ this._initialTopic }/>
); );

View file

@ -126,6 +126,7 @@
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s accepted the invitation for %(displayName)s.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s accepted the invitation for %(displayName)s.",
"Account": "Account", "Account": "Account",
"Access Token:": "Access Token:", "Access Token:": "Access Token:",
"Add a topic": "Add a topic",
"Add email address": "Add email address", "Add email address": "Add email address",
"Add phone number": "Add phone number", "Add phone number": "Add phone number",
"Admin": "Admin", "Admin": "Admin",
@ -160,9 +161,11 @@
"%(senderName)s answered the call.": "%(senderName)s answered the call.", "%(senderName)s answered the call.": "%(senderName)s answered the call.",
"anyone": "anyone", "anyone": "anyone",
"An error has occurred.": "An error has occurred.", "An error has occurred.": "An error has occurred.",
"Anyone": "Anyone",
"Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests", "Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests",
"Anyone who knows the room's link, including guests": "Anyone who knows the room's link, including guests", "Anyone who knows the room's link, including guests": "Anyone who knows the room's link, including guests",
"Are you sure?": "Are you sure?", "Are you sure?": "Are you sure?",
"Are you sure you want to leave the room '%(roomName)s'?": "Are you sure you want to leave the room '%(roomName)s'?",
"Are you sure you want to reject the invitation?": "Are you sure you want to reject the invitation?", "Are you sure you want to reject the invitation?": "Are you sure you want to reject the invitation?",
"Are you sure you want to upload the following files?": "Are you sure you want to upload the following files?", "Are you sure you want to upload the following files?": "Are you sure you want to upload the following files?",
"Attachment": "Attachment", "Attachment": "Attachment",
@ -214,18 +217,23 @@
"Cryptography": "Cryptography", "Cryptography": "Cryptography",
"Current password": "Current password", "Current password": "Current password",
"Curve25519 identity key": "Curve25519 identity key", "Curve25519 identity key": "Curve25519 identity key",
"Custom level": "Custom level",
"/ddg is not a command": "/ddg is not a command", "/ddg is not a command": "/ddg is not a command",
"Deactivate Account": "Deactivate Account", "Deactivate Account": "Deactivate Account",
"Deactivate my account": "Deactivate my account", "Deactivate my account": "Deactivate my account",
"decline": "decline", "decline": "decline",
"Decrypt %(text)s": "Decrypt %(text)s", "Decrypt %(text)s": "Decrypt %(text)s",
"Decryption error": "Decryption error", "Decryption error": "Decryption error",
"(default: %(userName)s)": "(default: %(userName)s)",
"Delete": "Delete", "Delete": "Delete",
"demote": "demote", "demote": "demote",
"Deops user with given id": "Deops user with given id", "Deops user with given id": "Deops user with given id",
"Default": "Default", "Default": "Default",
"Device already verified!": "Device already verified!", "Device already verified!": "Device already verified!",
"Device ID": "Device ID", "Device ID": "Device ID",
"Device ID:": "Device ID:",
"device id: ": "device id: ",
"Device key:": "Device key:",
"Devices": "Devices", "Devices": "Devices",
"Devices will not yet be able to decrypt history from before they joined the room": "Devices will not yet be able to decrypt history from before they joined the room", "Devices will not yet be able to decrypt history from before they joined the room": "Devices will not yet be able to decrypt history from before they joined the room",
"Direct Chat": "Direct Chat", "Direct Chat": "Direct Chat",
@ -242,6 +250,7 @@
"Ed25519 fingerprint": "Ed25519 fingerprint", "Ed25519 fingerprint": "Ed25519 fingerprint",
"Email": "Email", "Email": "Email",
"Email address": "Email address", "Email address": "Email address",
"Email address (optional)": "Email address (optional)",
"Email, name or matrix ID": "Email, name or matrix ID", "Email, name or matrix ID": "Email, name or matrix ID",
"Emoji": "Emoji", "Emoji": "Emoji",
"Enable encryption": "Enable encryption", "Enable encryption": "Enable encryption",
@ -343,6 +352,7 @@
"left": "left", "left": "left",
"%(targetName)s left the room.": "%(targetName)s left the room.", "%(targetName)s left the room.": "%(targetName)s left the room.",
"Level": "Level", "Level": "Level",
"List this room in %(domain)s's room directory?": "List this room in %(domain)s's room directory?",
"Local addresses for this room:": "Local addresses for this room:", "Local addresses for this room:": "Local addresses for this room:",
"Logged in as:": "Logged in as:", "Logged in as:": "Logged in as:",
"Login as guest": "Login as guest", "Login as guest": "Login as guest",
@ -358,6 +368,7 @@
"Missing room_id in request": "Missing room_id in request", "Missing room_id in request": "Missing room_id in request",
"Missing user_id in request": "Missing user_id in request", "Missing user_id in request": "Missing user_id in request",
"Mobile phone number": "Mobile phone number", "Mobile phone number": "Mobile phone number",
"Mobile phone number (optional)": "Mobile phone number (optional)",
"Moderator": "Moderator", "Moderator": "Moderator",
"Must be viewing a room": "Must be viewing a room", "Must be viewing a room": "Must be viewing a room",
"Mute": "Mute", "Mute": "Mute",
@ -389,6 +400,7 @@
"Only people who have been invited": "Only people who have been invited", "Only people who have been invited": "Only people who have been invited",
"Operation failed": "Operation failed", "Operation failed": "Operation failed",
"Password": "Password", "Password": "Password",
"Password:": "Password:",
"Passwords can't be empty": "Passwords can't be empty", "Passwords can't be empty": "Passwords can't be empty",
"People": "People", "People": "People",
"Permissions": "Permissions", "Permissions": "Permissions",
@ -404,10 +416,12 @@
"Reason": "Reason", "Reason": "Reason",
"Revoke Moderator": "Revoke Moderator", "Revoke Moderator": "Revoke Moderator",
"Refer a friend to Riot:": "Refer a friend to Riot:", "Refer a friend to Riot:": "Refer a friend to Riot:",
"Register": "Register",
"Registration required": "Registration required", "Registration required": "Registration required",
"rejected": "rejected", "rejected": "rejected",
"%(targetName)s rejected the invitation.": "%(targetName)s rejected the invitation.", "%(targetName)s rejected the invitation.": "%(targetName)s rejected the invitation.",
"Reject invitation": "Reject invitation", "Reject invitation": "Reject invitation",
"Remote addresses for this room:": "Remote addresses for this room:",
"Remove Contact Information?": "Remove Contact Information?", "Remove Contact Information?": "Remove Contact Information?",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removed their display name (%(oldDisplayName)s).", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removed their display name (%(oldDisplayName)s).",
"%(senderName)s removed their profile picture.": "%(senderName)s removed their profile picture.", "%(senderName)s removed their profile picture.": "%(senderName)s removed their profile picture.",
@ -427,6 +441,7 @@
"Room Colour": "Room Colour", "Room Colour": "Room Colour",
"Room name (optional)": "Room name (optional)", "Room name (optional)": "Room name (optional)",
"Rooms": "Rooms", "Rooms": "Rooms",
"Save": "Save",
"Scroll to bottom of page": "Scroll to bottom of page", "Scroll to bottom of page": "Scroll to bottom of page",
"Scroll to unread messages": "Scroll to unread messages", "Scroll to unread messages": "Scroll to unread messages",
"Search": "Search", "Search": "Search",
@ -450,6 +465,7 @@
"Session ID": "Session ID", "Session ID": "Session ID",
"%(senderName)s set a profile picture.": "%(senderName)s set a profile picture.", "%(senderName)s set a profile picture.": "%(senderName)s set a profile picture.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s set their display name to %(displayName)s.", "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s set their display name to %(displayName)s.",
"Setting a user name will create a fresh account": "Setting a user name will create a fresh account",
"Settings": "Settings", "Settings": "Settings",
"Show panel": "Show panel", "Show panel": "Show panel",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Show timestamps in 12 hour format (e.g. 2:30pm)", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Show timestamps in 12 hour format (e.g. 2:30pm)",
@ -468,6 +484,7 @@
"Success": "Success", "Success": "Success",
"tag as %(tagName)s": "tag as %(tagName)s", "tag as %(tagName)s": "tag as %(tagName)s",
"tag direct chat": "tag direct chat", "tag direct chat": "tag direct chat",
"Tagged as: ": "Tagged as: ",
"The default role for new room members is": "The default role for new room members is", "The default role for new room members is": "The default role for new room members is",
"The main address for this room is": "The main address for this room is", "The main address for this room is": "The main address for this room is",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.", "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.",
@ -577,6 +594,9 @@
"You do not have permission to post to this room": "You do not have permission to post to this room", "You do not have permission to post to this room": "You do not have permission to post to this room",
"You have been invited to join this room by %(inviterName)s": "You have been invited to join this room by %(inviterName)s", "You have been invited to join this room by %(inviterName)s": "You have been invited to join this room by %(inviterName)s",
"You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device", "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device",
"You have <a>disabled</a> URL previews by default.": "You have <a>disabled</a> URL previews by default.",
"You have <a>enabled</a> URL previews by default.": "You have <a>enabled</a> URL previews by default.",
"You have entered an invalid contact. Try using their Matrix ID or email address.": "You have entered an invalid contact. Try using their Matrix ID or email address.",
"You have no visible notifications": "You have no visible notifications", "You have no visible notifications": "You have no visible notifications",
"you must be a": "you must be a", "you must be a": "you must be a",
"You need to be able to invite users to do that.": "You need to be able to invite users to do that.", "You need to be able to invite users to do that.": "You need to be able to invite users to do that.",