Merge remote-tracking branch 'origin/develop' into chat_notifications
This commit is contained in:
commit
57b82f7778
114 changed files with 1175 additions and 354 deletions
|
@ -46,6 +46,8 @@ export function importFetchedAccounts(accounts) {
|
|||
const normalAccounts = [];
|
||||
|
||||
function processAccount(account) {
|
||||
if (!account.id) return;
|
||||
|
||||
pushUnique(normalAccounts, normalizeAccount(account));
|
||||
|
||||
if (account.moved) {
|
||||
|
@ -69,6 +71,8 @@ export function importFetchedStatuses(statuses) {
|
|||
const polls = [];
|
||||
|
||||
function processStatus(status) {
|
||||
if (!status.account.id) return;
|
||||
|
||||
const normalOldStatus = getState().getIn(['statuses', status.id]);
|
||||
const expandSpoilers = getSettings(getState()).get('expandSpoilers');
|
||||
|
||||
|
|
24
app/soapbox/actions/profile_hover_card.js
Normal file
24
app/soapbox/actions/profile_hover_card.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
export const PROFILE_HOVER_CARD_OPEN = 'PROFILE_HOVER_CARD_OPEN';
|
||||
export const PROFILE_HOVER_CARD_UPDATE = 'PROFILE_HOVER_CARD_UPDATE';
|
||||
export const PROFILE_HOVER_CARD_CLOSE = 'PROFILE_HOVER_CARD_CLOSE';
|
||||
|
||||
export function openProfileHoverCard(ref, accountId) {
|
||||
return {
|
||||
type: PROFILE_HOVER_CARD_OPEN,
|
||||
ref,
|
||||
accountId,
|
||||
};
|
||||
}
|
||||
|
||||
export function updateProfileHoverCard() {
|
||||
return {
|
||||
type: PROFILE_HOVER_CARD_UPDATE,
|
||||
};
|
||||
}
|
||||
|
||||
export function closeProfileHoverCard(force = false) {
|
||||
return {
|
||||
type: PROFILE_HOVER_CARD_CLOSE,
|
||||
force,
|
||||
};
|
||||
}
|
|
@ -4,16 +4,23 @@ exports[`<DisplayName /> renders display name + account name 1`] = `
|
|||
<span
|
||||
className="display-name"
|
||||
>
|
||||
<bdi>
|
||||
<strong
|
||||
className="display-name__html"
|
||||
dangerouslySetInnerHTML={
|
||||
Object {
|
||||
"__html": "<p>Foo</p>",
|
||||
<span
|
||||
className="hover-ref-wrapper"
|
||||
onClick={[Function]}
|
||||
onMouseEnter={[Function]}
|
||||
onMouseLeave={[Function]}
|
||||
>
|
||||
<bdi>
|
||||
<strong
|
||||
className="display-name__html"
|
||||
dangerouslySetInnerHTML={
|
||||
Object {
|
||||
"__html": "<p>Foo</p>",
|
||||
}
|
||||
}
|
||||
}
|
||||
/>
|
||||
</bdi>
|
||||
/>
|
||||
</bdi>
|
||||
</span>
|
||||
<span
|
||||
className="display-name__account"
|
||||
>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import renderer from 'react-test-renderer';
|
||||
import { fromJS } from 'immutable';
|
||||
import DisplayName from '../display_name';
|
||||
import { createComponent } from 'soapbox/test_helpers';
|
||||
|
||||
describe('<DisplayName />', () => {
|
||||
it('renders display name + account name', () => {
|
||||
|
@ -10,7 +10,7 @@ describe('<DisplayName />', () => {
|
|||
acct: 'bar@baz',
|
||||
display_name_html: '<p>Foo</p>',
|
||||
});
|
||||
const component = renderer.create(<DisplayName account={account} />);
|
||||
const component = createComponent(<DisplayName account={account} />);
|
||||
const tree = component.toJSON();
|
||||
|
||||
expect(tree).toMatchSnapshot();
|
||||
|
|
|
@ -4,6 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
|||
import VerificationBadge from './verification_badge';
|
||||
import { acctFull } from '../utils/accounts';
|
||||
import { List as ImmutableList } from 'immutable';
|
||||
import HoverRefWrapper from 'soapbox/components/hover_ref_wrapper';
|
||||
|
||||
export default class DisplayName extends React.PureComponent {
|
||||
|
||||
|
@ -42,7 +43,9 @@ export default class DisplayName extends React.PureComponent {
|
|||
|
||||
return (
|
||||
<span className='display-name'>
|
||||
{displayName}
|
||||
<HoverRefWrapper accountId={account.get('id')} inline>
|
||||
{displayName}
|
||||
</HoverRefWrapper>
|
||||
{suffix}
|
||||
{children}
|
||||
</span>
|
||||
|
|
64
app/soapbox/components/hover_ref_wrapper.js
Normal file
64
app/soapbox/components/hover_ref_wrapper.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
import React, { useRef } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
openProfileHoverCard,
|
||||
closeProfileHoverCard,
|
||||
} from 'soapbox/actions/profile_hover_card';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { debounce } from 'lodash';
|
||||
import { isMobile } from 'soapbox/is_mobile';
|
||||
|
||||
const showProfileHoverCard = debounce((dispatch, ref, accountId) => {
|
||||
dispatch(openProfileHoverCard(ref, accountId));
|
||||
}, 1200);
|
||||
|
||||
const handleMouseEnter = (dispatch, ref, accountId) => {
|
||||
return e => {
|
||||
if (!isMobile(window.innerWidth))
|
||||
showProfileHoverCard(dispatch, ref, accountId);
|
||||
};
|
||||
};
|
||||
|
||||
const handleMouseLeave = (dispatch) => {
|
||||
return e => {
|
||||
showProfileHoverCard.cancel();
|
||||
setTimeout(() => dispatch(closeProfileHoverCard()), 300);
|
||||
};
|
||||
};
|
||||
|
||||
const handleClick = (dispatch) => {
|
||||
return e => {
|
||||
showProfileHoverCard.cancel();
|
||||
dispatch(closeProfileHoverCard(true));
|
||||
};
|
||||
};
|
||||
|
||||
export const HoverRefWrapper = ({ accountId, children, inline }) => {
|
||||
const dispatch = useDispatch();
|
||||
const ref = useRef();
|
||||
const Elem = inline ? 'span' : 'div';
|
||||
|
||||
return (
|
||||
<Elem
|
||||
ref={ref}
|
||||
className='hover-ref-wrapper'
|
||||
onMouseEnter={handleMouseEnter(dispatch, ref, accountId)}
|
||||
onMouseLeave={handleMouseLeave(dispatch)}
|
||||
onClick={handleClick(dispatch)}
|
||||
>
|
||||
{children}
|
||||
</Elem>
|
||||
);
|
||||
};
|
||||
|
||||
HoverRefWrapper.propTypes = {
|
||||
accountId: PropTypes.string,
|
||||
children: PropTypes.node,
|
||||
inline: PropTypes.bool,
|
||||
};
|
||||
|
||||
HoverRefWrapper.defaultProps = {
|
||||
inline: false,
|
||||
};
|
||||
|
||||
export default HoverRefWrapper;
|
|
@ -6,6 +6,7 @@ import { is } from 'immutable';
|
|||
import IconButton from './icon_button';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import { isIOS } from '../is_mobile';
|
||||
import { truncateFilename } from 'soapbox/utils/media';
|
||||
import classNames from 'classnames';
|
||||
import { decode } from 'blurhash';
|
||||
import { isPanoramic, isPortrait, isNonConformingRatio, minimumAspectRatio, maximumAspectRatio } from '../utils/media_aspect_ratio';
|
||||
|
@ -14,6 +15,8 @@ import { getSettings } from 'soapbox/actions/settings';
|
|||
import Icon from 'soapbox/components/icon';
|
||||
import StillImage from 'soapbox/components/still_image';
|
||||
|
||||
const MAX_FILENAME_LENGTH = 45;
|
||||
|
||||
const messages = defineMessages({
|
||||
toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Toggle visibility' },
|
||||
});
|
||||
|
@ -143,10 +146,13 @@ class Item extends React.PureComponent {
|
|||
let thumbnail = '';
|
||||
|
||||
if (attachment.get('type') === 'unknown') {
|
||||
const filename = truncateFilename(attachment.get('remote_url'), MAX_FILENAME_LENGTH);
|
||||
return (
|
||||
<div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ position, float, left, top, right, bottom, height, width: `${width}%` }}>
|
||||
<a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }}>
|
||||
<canvas width={32} height={32} ref={this.setCanvasRef} className='media-gallery__preview' />
|
||||
<span className='media-gallery__item__icons'><Icon id='file' /></span>
|
||||
<span className='media-gallery__filename__label'>{filename}</span>
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
|
@ -214,7 +220,7 @@ class Item extends React.PureComponent {
|
|||
}
|
||||
|
||||
return (
|
||||
<div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ position, float, left, top, right, bottom, height, width: `${width}%` }}>
|
||||
<div className={classNames('media-gallery__item', `media-gallery__item--${attachment.get('type')}`, { standalone })} key={attachment.get('id')} style={{ position, float, left, top, right, bottom, height, width: `${width}%` }}>
|
||||
<canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && this.state.loaded })} />
|
||||
{visible && thumbnail}
|
||||
</div>
|
||||
|
|
92
app/soapbox/components/profile_hover_card.js
Normal file
92
app/soapbox/components/profile_hover_card.js
Normal file
|
@ -0,0 +1,92 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import { makeGetAccount } from 'soapbox/selectors';
|
||||
import { injectIntl, FormattedMessage } from 'react-intl';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import UserPanel from 'soapbox/features/ui/components/user_panel';
|
||||
import ActionButton from 'soapbox/features/ui/components/action_button';
|
||||
import { isAdmin, isModerator } from 'soapbox/utils/accounts';
|
||||
import Badge from 'soapbox/components/badge';
|
||||
import classNames from 'classnames';
|
||||
import { fetchRelationships } from 'soapbox/actions/accounts';
|
||||
import { usePopper } from 'react-popper';
|
||||
import {
|
||||
closeProfileHoverCard,
|
||||
updateProfileHoverCard,
|
||||
} from 'soapbox/actions/profile_hover_card';
|
||||
|
||||
const getAccount = makeGetAccount();
|
||||
|
||||
const getBadges = (account) => {
|
||||
let badges = [];
|
||||
if (isAdmin(account)) badges.push(<Badge key='admin' slug='admin' title='Admin' />);
|
||||
if (isModerator(account)) badges.push(<Badge key='moderator' slug='moderator' title='Moderator' />);
|
||||
if (account.getIn(['patron', 'is_patron'])) badges.push(<Badge key='patron' slug='patron' title='Patron' />);
|
||||
return badges;
|
||||
};
|
||||
|
||||
const handleMouseEnter = (dispatch) => {
|
||||
return e => {
|
||||
dispatch(updateProfileHoverCard());
|
||||
};
|
||||
};
|
||||
|
||||
const handleMouseLeave = (dispatch) => {
|
||||
return e => {
|
||||
dispatch(closeProfileHoverCard(true));
|
||||
};
|
||||
};
|
||||
|
||||
export const ProfileHoverCard = ({ visible }) => {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const [popperElement, setPopperElement] = useState(null);
|
||||
|
||||
const accountId = useSelector(state => state.getIn(['profile_hover_card', 'accountId']));
|
||||
const account = useSelector(state => accountId && getAccount(state, accountId));
|
||||
const targetRef = useSelector(state => state.getIn(['profile_hover_card', 'ref', 'current']));
|
||||
const badges = account ? getBadges(account) : [];
|
||||
|
||||
useEffect(() => {
|
||||
if (accountId) dispatch(fetchRelationships([accountId]));
|
||||
}, [dispatch, accountId]);
|
||||
|
||||
const { styles, attributes } = usePopper(targetRef, popperElement);
|
||||
|
||||
if (!account) return null;
|
||||
const accountBio = { __html: account.get('note_emojified') };
|
||||
const followedBy = account.getIn(['relationship', 'followed_by']);
|
||||
|
||||
return (
|
||||
<div className={classNames('profile-hover-card', { 'profile-hover-card--visible': visible })} ref={setPopperElement} style={styles.popper} {...attributes.popper} onMouseEnter={handleMouseEnter(dispatch)} onMouseLeave={handleMouseLeave(dispatch)}>
|
||||
<div className='profile-hover-card__container'>
|
||||
{followedBy &&
|
||||
<span className='relationship-tag'>
|
||||
<FormattedMessage id='account.follows_you' defaultMessage='Follows you' />
|
||||
</span>}
|
||||
<div className='profile-hover-card__action-button'><ActionButton account={account} small /></div>
|
||||
<UserPanel className='profile-hover-card__user' accountId={account.get('id')} />
|
||||
{badges.length > 0 &&
|
||||
<div className='profile-hover-card__badges'>
|
||||
{badges}
|
||||
</div>}
|
||||
{account.getIn(['source', 'note'], '').length > 0 &&
|
||||
<div className='profile-hover-card__bio' dangerouslySetInnerHTML={accountBio} />}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
ProfileHoverCard.propTypes = {
|
||||
visible: PropTypes.bool,
|
||||
accountId: PropTypes.string,
|
||||
account: ImmutablePropTypes.map,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
ProfileHoverCard.defaultProps = {
|
||||
visible: true,
|
||||
};
|
||||
|
||||
export default injectIntl(ProfileHoverCard);
|
|
@ -18,10 +18,8 @@ import classNames from 'classnames';
|
|||
import Icon from 'soapbox/components/icon';
|
||||
import PollContainer from 'soapbox/containers/poll_container';
|
||||
import { NavLink } from 'react-router-dom';
|
||||
import ProfileHoverCardContainer from '../features/profile_hover_card/profile_hover_card_container';
|
||||
import { isMobile } from '../../../app/soapbox/is_mobile';
|
||||
import { debounce } from 'lodash';
|
||||
import { getDomain } from 'soapbox/utils/accounts';
|
||||
import HoverRefWrapper from 'soapbox/components/hover_ref_wrapper';
|
||||
|
||||
// We use the component (and not the container) since we do not want
|
||||
// to use the progress bar to show download progress
|
||||
|
@ -82,6 +80,7 @@ class Status extends ImmutablePureComponent {
|
|||
onEmbed: PropTypes.func,
|
||||
onHeightChange: PropTypes.func,
|
||||
onToggleHidden: PropTypes.func,
|
||||
onShowHoverProfileCard: PropTypes.func,
|
||||
muted: PropTypes.bool,
|
||||
hidden: PropTypes.bool,
|
||||
unread: PropTypes.bool,
|
||||
|
@ -108,7 +107,6 @@ class Status extends ImmutablePureComponent {
|
|||
state = {
|
||||
showMedia: defaultMediaVisibility(this.props.status, this.props.displayMedia),
|
||||
statusId: undefined,
|
||||
profileCardVisible: false,
|
||||
};
|
||||
|
||||
// Track height changes we know about to compensate scrolling
|
||||
|
@ -151,14 +149,16 @@ class Status extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this.node && this.props.getScrollPosition) {
|
||||
const position = this.props.getScrollPosition();
|
||||
if (position !== null && this.node.offsetTop < position.top) {
|
||||
requestAnimationFrame(() => {
|
||||
this.props.updateScrollBottom(position.height - position.top);
|
||||
});
|
||||
}
|
||||
}
|
||||
// FIXME: Run this code only when a status is being deleted.
|
||||
//
|
||||
// if (this.node && this.props.getScrollPosition) {
|
||||
// const position = this.props.getScrollPosition();
|
||||
// if (position !== null && this.node.offsetTop < position.top) {
|
||||
// requestAnimationFrame(() => {
|
||||
// this.props.updateScrollBottom(position.height - position.top);
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
handleToggleMediaVisibility = () => {
|
||||
|
@ -254,19 +254,6 @@ class Status extends ImmutablePureComponent {
|
|||
this.handleToggleMediaVisibility();
|
||||
}
|
||||
|
||||
showProfileCard = debounce(() => {
|
||||
this.setState({ profileCardVisible: true });
|
||||
}, 1200);
|
||||
|
||||
handleProfileHover = e => {
|
||||
if (!isMobile(window.innerWidth)) this.showProfileCard();
|
||||
}
|
||||
|
||||
handleProfileLeave = e => {
|
||||
this.showProfileCard.cancel();
|
||||
this.setState({ profileCardVisible: false });
|
||||
}
|
||||
|
||||
_properStatus() {
|
||||
const { status } = this.props;
|
||||
|
||||
|
@ -455,7 +442,6 @@ class Status extends ImmutablePureComponent {
|
|||
};
|
||||
|
||||
const statusUrl = `/@${status.getIn(['account', 'acct'])}/posts/${status.get('id')}`;
|
||||
const { profileCardVisible } = this.state;
|
||||
const favicon = status.getIn(['account', 'pleroma', 'favicon']);
|
||||
const domain = getDomain(status.get('account'));
|
||||
|
||||
|
@ -476,17 +462,17 @@ class Status extends ImmutablePureComponent {
|
|||
<img src={favicon} alt='' title={domain} />
|
||||
</div>}
|
||||
|
||||
<div className='status__profile' onMouseEnter={this.handleProfileHover} onMouseLeave={this.handleProfileLeave}>
|
||||
<div className='status__profile'>
|
||||
<div className='status__avatar'>
|
||||
<NavLink to={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='floating-link' />
|
||||
{statusAvatar}
|
||||
<HoverRefWrapper accountId={status.getIn(['account', 'id'])}>
|
||||
<NavLink to={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])}>
|
||||
{statusAvatar}
|
||||
</NavLink>
|
||||
</HoverRefWrapper>
|
||||
</div>
|
||||
<NavLink to={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='status__display-name'>
|
||||
<DisplayName account={status.get('account')} others={otherAccounts} />
|
||||
</NavLink>
|
||||
{ profileCardVisible &&
|
||||
<ProfileHoverCardContainer accountId={status.getIn(['account', 'id'])} visible={!isMobile(window.innerWidth)} />
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ class Blocks extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
hasMore: PropTypes.bool,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
|
|
@ -3,6 +3,7 @@ import { connect } from 'react-redux';
|
|||
import PropTypes from 'prop-types';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { injectIntl } from 'react-intl';
|
||||
import { Link } from 'react-router-dom';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import Avatar from 'soapbox/components/avatar';
|
||||
import { acctFull } from 'soapbox/utils/accounts';
|
||||
|
@ -75,12 +76,12 @@ class ChatRoom extends ImmutablePureComponent {
|
|||
<Column>
|
||||
<div className='chatroom__back'>
|
||||
<ColumnBackButton />
|
||||
<div className='chatroom__header'>
|
||||
<Link to={`/@${account.get('acct')}`} className='chatroom__header'>
|
||||
<Avatar account={account} size={18} />
|
||||
<div className='chatroom__title'>
|
||||
@{acctFull(account)}
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
<ChatBox
|
||||
chatId={chat.get('id')}
|
||||
|
|
|
@ -10,6 +10,11 @@ import {
|
|||
} from 'soapbox/actions/chats';
|
||||
import { OrderedSet as ImmutableOrderedSet } from 'immutable';
|
||||
import ChatMessageList from './chat_message_list';
|
||||
import UploadButton from 'soapbox/features/compose/components/upload_button';
|
||||
import { uploadMedia } from 'soapbox/actions/media';
|
||||
import UploadProgress from 'soapbox/features/compose/components/upload_progress';
|
||||
import { truncateFilename } from 'soapbox/utils/media';
|
||||
import IconButton from 'soapbox/components/icon_button';
|
||||
|
||||
const messages = defineMessages({
|
||||
placeholder: { id: 'chat_box.input.placeholder', defaultMessage: 'Send a message…' },
|
||||
|
@ -21,6 +26,8 @@ const mapStateToProps = (state, { chatId }) => ({
|
|||
chatMessageIds: state.getIn(['chat_message_lists', chatId], ImmutableOrderedSet()),
|
||||
});
|
||||
|
||||
const fileKeyGen = () => Math.floor((Math.random() * 0x10000));
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
@injectIntl
|
||||
class ChatBox extends ImmutablePureComponent {
|
||||
|
@ -35,15 +42,50 @@ class ChatBox extends ImmutablePureComponent {
|
|||
me: PropTypes.node,
|
||||
}
|
||||
|
||||
state = {
|
||||
initialState = () => ({
|
||||
content: '',
|
||||
attachment: undefined,
|
||||
isUploading: false,
|
||||
uploadProgress: 0,
|
||||
resetFileKey: fileKeyGen(),
|
||||
})
|
||||
|
||||
state = this.initialState()
|
||||
|
||||
clearState = () => {
|
||||
this.setState(this.initialState());
|
||||
}
|
||||
|
||||
getParams = () => {
|
||||
const { content, attachment } = this.state;
|
||||
|
||||
return {
|
||||
content,
|
||||
media_id: attachment && attachment.id,
|
||||
};
|
||||
}
|
||||
|
||||
canSubmit = () => {
|
||||
const { content, attachment } = this.state;
|
||||
|
||||
const conds = [
|
||||
content.length > 0,
|
||||
attachment,
|
||||
];
|
||||
|
||||
return conds.some(c => c);
|
||||
}
|
||||
|
||||
sendMessage = () => {
|
||||
const { chatId } = this.props;
|
||||
if (this.state.content.length < 1) return;
|
||||
this.props.dispatch(sendChatMessage(chatId, this.state));
|
||||
this.setState({ content: '' });
|
||||
const { dispatch, chatId } = this.props;
|
||||
const { isUploading } = this.state;
|
||||
|
||||
if (this.canSubmit() && !isUploading) {
|
||||
const params = this.getParams();
|
||||
|
||||
dispatch(sendChatMessage(chatId, params));
|
||||
this.clearState();
|
||||
}
|
||||
}
|
||||
|
||||
insertLine = () => {
|
||||
|
@ -92,20 +134,76 @@ class ChatBox extends ImmutablePureComponent {
|
|||
// this.markRead();
|
||||
// }
|
||||
|
||||
handleRemoveFile = (e) => {
|
||||
this.setState({ attachment: undefined, resetFileKey: fileKeyGen() });
|
||||
}
|
||||
|
||||
onUploadProgress = (e) => {
|
||||
const { loaded, total } = e;
|
||||
this.setState({ uploadProgress: loaded/total });
|
||||
}
|
||||
|
||||
handleFiles = (files) => {
|
||||
const { dispatch } = this.props;
|
||||
|
||||
this.setState({ isUploading: true });
|
||||
|
||||
const data = new FormData();
|
||||
data.append('file', files[0]);
|
||||
|
||||
dispatch(uploadMedia(data, this.onUploadProgress)).then(response => {
|
||||
this.setState({ attachment: response.data, isUploading: false });
|
||||
}).catch(() => {
|
||||
this.setState({ isUploading: false });
|
||||
});
|
||||
}
|
||||
|
||||
renderAttachment = () => {
|
||||
const { attachment } = this.state;
|
||||
if (!attachment) return null;
|
||||
|
||||
return (
|
||||
<div className='chat-box__attachment'>
|
||||
<div className='chat-box__filename'>
|
||||
{truncateFilename(attachment.preview_url, 20)}
|
||||
</div>
|
||||
<div class='chat-box__remove-attachment'>
|
||||
<IconButton icon='remove' onClick={this.handleRemoveFile} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
renderActionButton = () => {
|
||||
const { resetFileKey } = this.state;
|
||||
|
||||
return this.canSubmit() ? (
|
||||
<div className='chat-box__send'>
|
||||
<IconButton icon='send' size={16} onClick={this.sendMessage} />
|
||||
</div>
|
||||
) : (
|
||||
<UploadButton onSelectFile={this.handleFiles} resetFileKey={resetFileKey} />
|
||||
);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { chatMessageIds, chatId, intl } = this.props;
|
||||
const { content, isUploading, uploadProgress } = this.state;
|
||||
if (!chatMessageIds) return null;
|
||||
|
||||
return (
|
||||
<div className='chat-box' onMouseOver={this.handleHover}>
|
||||
<ChatMessageList chatMessageIds={chatMessageIds} chatId={chatId} />
|
||||
{this.renderAttachment()}
|
||||
<UploadProgress active={isUploading} progress={uploadProgress*100} />
|
||||
<div className='chat-box__actions simple_form'>
|
||||
{this.renderActionButton()}
|
||||
<textarea
|
||||
rows={1}
|
||||
placeholder={intl.formatMessage(messages.placeholder)}
|
||||
onKeyDown={this.handleKeyDown}
|
||||
onChange={this.handleContentChange}
|
||||
value={this.state.content}
|
||||
value={content}
|
||||
ref={this.setInputRef}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -8,9 +8,10 @@ import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
|||
import { fetchChatMessages } from 'soapbox/actions/chats';
|
||||
import emojify from 'soapbox/features/emoji/emoji';
|
||||
import classNames from 'classnames';
|
||||
import { openModal } from 'soapbox/actions/modal';
|
||||
import { escape, throttle } from 'lodash';
|
||||
|
||||
const scrollBottom = (elem) => elem.scrollHeight - elem.offsetHeight - elem.scrollTop;
|
||||
import { MediaGallery } from 'soapbox/features/ui/util/async-components';
|
||||
import Bundle from 'soapbox/features/ui/components/bundle';
|
||||
|
||||
const makeEmojiMap = record => record.get('emojis', ImmutableList()).reduce((map, emoji) => {
|
||||
return map.set(`:${emoji.get('shortcode')}:`, emoji);
|
||||
|
@ -42,12 +43,13 @@ class ChatMessageList extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
state = {
|
||||
initialLoad: true,
|
||||
isLoading: false,
|
||||
}
|
||||
|
||||
scrollToBottom = () => {
|
||||
if (!this.messagesEnd) return;
|
||||
this.messagesEnd.scrollIntoView();
|
||||
this.messagesEnd.scrollIntoView(false);
|
||||
}
|
||||
|
||||
setMessageEndRef = (el) => {
|
||||
|
@ -79,42 +81,100 @@ class ChatMessageList extends ImmutablePureComponent {
|
|||
});
|
||||
}
|
||||
|
||||
isNearBottom = () => {
|
||||
const elem = this.node;
|
||||
if (!elem) return false;
|
||||
|
||||
const scrollBottom = elem.scrollHeight - elem.offsetHeight - elem.scrollTop;
|
||||
return scrollBottom < elem.offsetHeight * 1.5;
|
||||
}
|
||||
|
||||
handleResize = (e) => {
|
||||
if (this.isNearBottom()) this.scrollToBottom();
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { dispatch, chatId } = this.props;
|
||||
dispatch(fetchChatMessages(chatId));
|
||||
|
||||
this.node.addEventListener('scroll', this.handleScroll);
|
||||
window.addEventListener('resize', this.handleResize);
|
||||
this.scrollToBottom();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
getSnapshotBeforeUpdate(prevProps, prevState) {
|
||||
const { scrollHeight, scrollTop } = this.node;
|
||||
return scrollHeight - scrollTop;
|
||||
}
|
||||
|
||||
restoreScrollPosition = (scrollBottom) => {
|
||||
this.lastComputedScroll = this.node.scrollHeight - scrollBottom;
|
||||
this.node.scrollTop = this.lastComputedScroll;
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState, scrollBottom) {
|
||||
const { initialLoad } = this.state;
|
||||
const oldCount = prevProps.chatMessages.count();
|
||||
const newCount = this.props.chatMessages.count();
|
||||
const isNearBottom = scrollBottom(this.node) < 150;
|
||||
const historyAdded = prevProps.chatMessages.getIn([-1, 'id']) !== this.props.chatMessages.getIn([-1, 'id']);
|
||||
const isNearBottom = this.isNearBottom();
|
||||
const historyAdded = prevProps.chatMessages.getIn([0, 'id']) !== this.props.chatMessages.getIn([0, 'id']);
|
||||
|
||||
// Retain scroll bar position when loading old messages
|
||||
this.restoreScrollPosition(scrollBottom);
|
||||
|
||||
if (oldCount !== newCount) {
|
||||
if (isNearBottom) this.scrollToBottom();
|
||||
if (historyAdded) this.setState({ isLoading: false });
|
||||
if (isNearBottom || initialLoad) this.scrollToBottom();
|
||||
if (historyAdded) this.setState({ isLoading: false, initialLoad: false });
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.node.removeEventListener('scroll', this.handleScroll);
|
||||
window.removeEventListener('resize', this.handleResize);
|
||||
}
|
||||
|
||||
handleLoadMore = () => {
|
||||
const { dispatch, chatId, chatMessages } = this.props;
|
||||
const maxId = chatMessages.getIn([-1, 'id']);
|
||||
const maxId = chatMessages.getIn([0, 'id']);
|
||||
dispatch(fetchChatMessages(chatId, maxId));
|
||||
this.setState({ isLoading: true });
|
||||
}
|
||||
|
||||
handleScroll = throttle(() => {
|
||||
if (this.node.scrollTop < 150 && !this.state.isLoading) this.handleLoadMore();
|
||||
const { lastComputedScroll } = this;
|
||||
const { isLoading, initialLoad } = this.state;
|
||||
const { scrollTop, offsetHeight } = this.node;
|
||||
const computedScroll = lastComputedScroll === scrollTop;
|
||||
const nearTop = scrollTop < offsetHeight * 2;
|
||||
|
||||
if (nearTop && !isLoading && !initialLoad && !computedScroll)
|
||||
this.handleLoadMore();
|
||||
}, 150, {
|
||||
trailing: true,
|
||||
});
|
||||
|
||||
onOpenMedia = (media, index) => {
|
||||
this.props.dispatch(openModal('MEDIA', { media, index }));
|
||||
};
|
||||
|
||||
maybeRenderMedia = chatMessage => {
|
||||
const attachment = chatMessage.get('attachment');
|
||||
if (!attachment) return null;
|
||||
return (
|
||||
<div className='chat-message__media'>
|
||||
<Bundle fetchComponent={MediaGallery}>
|
||||
{Component => (
|
||||
<Component
|
||||
media={ImmutableList([attachment])}
|
||||
height={120}
|
||||
onOpenMedia={this.onOpenMedia}
|
||||
/>
|
||||
)}
|
||||
</Bundle>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
parsePendingContent = content => {
|
||||
return escape(content).replace(/(?:\r\n|\r|\n)/g, '<br>');
|
||||
}
|
||||
|
@ -136,7 +196,6 @@ class ChatMessageList extends ImmutablePureComponent {
|
|||
|
||||
return (
|
||||
<div className='chat-messages' ref={this.setRef}>
|
||||
<div style={{ float: 'left', clear: 'both' }} ref={this.setMessageEndRef} />
|
||||
{chatMessages.map(chatMessage => (
|
||||
<div
|
||||
className={classNames('chat-message', {
|
||||
|
@ -145,14 +204,20 @@ class ChatMessageList extends ImmutablePureComponent {
|
|||
})}
|
||||
key={chatMessage.get('id')}
|
||||
>
|
||||
<span
|
||||
<div
|
||||
title={this.getFormattedTimestamp(chatMessage)}
|
||||
className='chat-message__bubble'
|
||||
dangerouslySetInnerHTML={{ __html: this.parseContent(chatMessage) }}
|
||||
ref={this.setBubbleRef}
|
||||
/>
|
||||
>
|
||||
{this.maybeRenderMedia(chatMessage)}
|
||||
<span
|
||||
className='chat-message__content'
|
||||
dangerouslySetInnerHTML={{ __html: this.parseContent(chatMessage) }}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
<div style={{ float: 'left', clear: 'both' }} ref={this.setMessageEndRef} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import {
|
|||
} from 'soapbox/actions/chats';
|
||||
import ChatBox from './chat_box';
|
||||
import { shortNumberFormat } from 'soapbox/utils/numbers';
|
||||
import HoverRefWrapper from 'soapbox/components/hover_ref_wrapper';
|
||||
|
||||
const mapStateToProps = (state, { pane }) => ({
|
||||
me: state.get('me'),
|
||||
|
@ -79,13 +80,24 @@ class ChatWindow extends ImmutablePureComponent {
|
|||
const right = (285 * (idx + 1)) + 20;
|
||||
const unreadCount = chat.get('unread');
|
||||
|
||||
const unreadIcon = (
|
||||
<i className='icon-with-badge__badge'>
|
||||
{shortNumberFormat(unreadCount)}
|
||||
</i>
|
||||
);
|
||||
|
||||
const avatar = (
|
||||
<HoverRefWrapper accountId={account.get('id')}>
|
||||
<Link to={`/@${account.get('acct')}`}>
|
||||
<Avatar account={account} size={18} />
|
||||
</Link>
|
||||
</HoverRefWrapper>
|
||||
);
|
||||
|
||||
return (
|
||||
<div className={`pane pane--${pane.get('state')}`} style={{ right: `${right}px` }}>
|
||||
<div className='pane__header'>
|
||||
{unreadCount > 0
|
||||
? <i className='icon-with-badge__badge'>{shortNumberFormat(unreadCount)}</i>
|
||||
: <Link to={`/@${account.get('acct')}`}><Avatar account={account} size={18} /></Link>
|
||||
}
|
||||
{unreadCount > 0 ? unreadIcon : avatar }
|
||||
<button className='pane__title' onClick={this.handleChatToggle(chat.get('id'))}>
|
||||
@{acctFull(account)}
|
||||
</button>
|
||||
|
|
|
@ -39,7 +39,7 @@ class PollButton extends React.PureComponent {
|
|||
return (
|
||||
<div className='compose-form__poll-button'>
|
||||
<IconButton
|
||||
icon='tasks'
|
||||
icon='bar-chart'
|
||||
title={intl.formatMessage(active ? messages.remove_poll : messages.add_poll)}
|
||||
disabled={disabled}
|
||||
onClick={this.handleClick}
|
||||
|
|
|
@ -38,6 +38,8 @@ class Option extends React.PureComponent {
|
|||
onSuggestionSelected: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
maxChars: PropTypes.number.isRequired,
|
||||
onRemovePoll: PropTypes.func.isRequired,
|
||||
numOptions: PropTypes.number.isRequired,
|
||||
};
|
||||
|
||||
handleOptionTitleChange = e => {
|
||||
|
@ -45,10 +47,12 @@ class Option extends React.PureComponent {
|
|||
};
|
||||
|
||||
handleOptionRemove = () => {
|
||||
this.props.onRemove(this.props.index);
|
||||
if (this.props.numOptions > 2)
|
||||
this.props.onRemove(this.props.index);
|
||||
else
|
||||
this.props.onRemovePoll();
|
||||
};
|
||||
|
||||
|
||||
handleToggleMultiple = e => {
|
||||
this.props.onToggleMultiple();
|
||||
e.preventDefault();
|
||||
|
@ -95,7 +99,7 @@ class Option extends React.PureComponent {
|
|||
</label>
|
||||
|
||||
<div className='poll__cancel'>
|
||||
<IconButton disabled={index <= 1} title={intl.formatMessage(messages.remove_option)} icon='times' onClick={this.handleOptionRemove} />
|
||||
<IconButton title={intl.formatMessage(messages.remove_option)} icon='times' onClick={this.handleOptionRemove} />
|
||||
</div>
|
||||
</li>
|
||||
);
|
||||
|
@ -156,6 +160,7 @@ class PollForm extends ImmutablePureComponent {
|
|||
isPollMultiple={isMultiple}
|
||||
onToggleMultiple={this.handleToggleMultiple}
|
||||
maxChars={maxOptionChars}
|
||||
numOptions={options.size}
|
||||
{...other}
|
||||
/>
|
||||
))}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { connect } from 'react-redux';
|
||||
import PollForm from '../components/poll_form';
|
||||
import { addPollOption, removePollOption, changePollOption, changePollSettings } from '../../../actions/compose';
|
||||
import { addPollOption, removePollOption, changePollOption, changePollSettings, removePoll } from '../../../actions/compose';
|
||||
import {
|
||||
clearComposeSuggestions,
|
||||
fetchComposeSuggestions,
|
||||
|
@ -43,6 +43,10 @@ const mapDispatchToProps = dispatch => ({
|
|||
dispatch(selectComposeSuggestion(position, token, accountId, path));
|
||||
},
|
||||
|
||||
onRemovePoll() {
|
||||
dispatch(removePoll());
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(PollForm);
|
||||
|
|
|
@ -20,7 +20,7 @@ class Favourites extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
|
|
|
@ -28,7 +28,7 @@ class FollowRequests extends ImmutablePureComponent {
|
|||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
hasMore: PropTypes.bool,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ class Followers extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
hasMore: PropTypes.bool,
|
||||
diffCount: PropTypes.number,
|
||||
isAccount: PropTypes.bool,
|
||||
|
|
|
@ -51,7 +51,7 @@ class Following extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
hasMore: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
unavailable: PropTypes.bool,
|
||||
|
|
|
@ -26,7 +26,7 @@ class GroupMembers extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
hasMore: PropTypes.bool,
|
||||
};
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class GroupRemovedAccounts extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
hasMore: PropTypes.bool,
|
||||
};
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ class Mutes extends ImmutablePureComponent {
|
|||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
hasMore: PropTypes.bool,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
|
|
|
@ -1,79 +0,0 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { connect } from 'react-redux';
|
||||
import { makeGetAccount } from '../../selectors';
|
||||
import { injectIntl, FormattedMessage } from 'react-intl';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import UserPanel from '../ui/components/user_panel';
|
||||
import ActionButton from '../ui/components/action_button';
|
||||
import { isAdmin, isModerator } from 'soapbox/utils/accounts';
|
||||
import Badge from 'soapbox/components/badge';
|
||||
import classNames from 'classnames';
|
||||
import { fetchRelationships } from 'soapbox/actions/accounts';
|
||||
|
||||
const getAccount = makeGetAccount();
|
||||
|
||||
const mapStateToProps = (state, { accountId }) => {
|
||||
return {
|
||||
account: getAccount(state, accountId),
|
||||
};
|
||||
};
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
@injectIntl
|
||||
class ProfileHoverCardContainer extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
visible: PropTypes.bool,
|
||||
accountId: PropTypes.string,
|
||||
account: ImmutablePropTypes.map,
|
||||
intl: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
visible: true,
|
||||
}
|
||||
|
||||
getBadges = () => {
|
||||
const { account } = this.props;
|
||||
let badges = [];
|
||||
if (isAdmin(account)) badges.push(<Badge key='admin' slug='admin' title='Admin' />);
|
||||
if (isModerator(account)) badges.push(<Badge key='moderator' slug='moderator' title='Moderator' />);
|
||||
if (account.getIn(['patron', 'is_patron'])) badges.push(<Badge key='patron' slug='patron' title='Patron' />);
|
||||
return badges;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.props.dispatch(fetchRelationships([this.props.accountId]));
|
||||
}
|
||||
|
||||
render() {
|
||||
const { visible, accountId, account } = this.props;
|
||||
if (!accountId) return null;
|
||||
const accountBio = { __html: account.get('note_emojified') };
|
||||
const followedBy = account.getIn(['relationship', 'followed_by']);
|
||||
const badges = this.getBadges();
|
||||
|
||||
return (
|
||||
<div className={classNames('profile-hover-card', { 'profile-hover-card--visible': visible })}>
|
||||
<div className='profile-hover-card__container'>
|
||||
{followedBy &&
|
||||
<span className='relationship-tag'>
|
||||
<FormattedMessage id='account.follows_you' defaultMessage='Follows you' />
|
||||
</span>}
|
||||
<div className='profile-hover-card__action-button'><ActionButton account={account} small /></div>
|
||||
<UserPanel className='profile-hover-card__user' accountId={accountId} />
|
||||
{badges.length > 0 &&
|
||||
<div className='profile-hover-card__badges'>
|
||||
{badges}
|
||||
</div>}
|
||||
{account.getIn(['source', 'note'], '').length > 0 &&
|
||||
<div className='profile-hover-card__bio' dangerouslySetInnerHTML={accountBio} />}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
};
|
|
@ -6,14 +6,18 @@ import { Link } from 'react-router-dom';
|
|||
import LoginForm from 'soapbox/features/auth_login/components/login_form';
|
||||
import SiteLogo from './site_logo';
|
||||
import SoapboxPropTypes from 'soapbox/utils/soapbox_prop_types';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import PropTypes from 'prop-types';
|
||||
import { logIn } from 'soapbox/actions/auth';
|
||||
import { fetchMe } from 'soapbox/actions/me';
|
||||
import PropTypes from 'prop-types';
|
||||
import OtpAuthForm from 'soapbox/features/auth_login/components/otp_auth_form';
|
||||
import IconButton from 'soapbox/components/icon_button';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
home: { id: 'header.home.label', defaultMessage: 'Home' },
|
||||
about: { id: 'header.about.label', defaultMessage: 'About' },
|
||||
backTo: { id: 'header.back_to.label', defaultMessage: 'Back to {siteTitle}' },
|
||||
login: { id: 'header.login.label', defaultMessage: 'Log in' },
|
||||
close: { id: 'lightbox.close', defaultMessage: 'Close' },
|
||||
});
|
||||
|
||||
|
@ -64,6 +68,7 @@ class Header extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
me: SoapboxPropTypes.me,
|
||||
instance: ImmutablePropTypes.map,
|
||||
intl: PropTypes.object.isRequired,
|
||||
}
|
||||
|
||||
state = {
|
||||
|
@ -90,21 +95,21 @@ class Header extends ImmutablePureComponent {
|
|||
<Link className='brand' to='/'>
|
||||
<SiteLogo />
|
||||
</Link>
|
||||
<Link className='nav-link optional' to='/'>Home</Link>
|
||||
<Link className='nav-link' to='/about'>About</Link>
|
||||
<Link className='nav-link optional' to='/'>{intl.formatMessage(messages.home)}</Link>
|
||||
<Link className='nav-link' to='/about'>{intl.formatMessage(messages.about)}</Link>
|
||||
</div>
|
||||
<div className='nav-center' />
|
||||
<div className='nav-right'>
|
||||
<div className='hidden-sm'>
|
||||
{me
|
||||
? <Link className='nav-link nav-button webapp-btn' to='/'>Back to {instance.get('title')}</Link>
|
||||
? <Link className='nav-link nav-button webapp-btn' to='/'>{intl.formatMessage(messages.backTo, { siteTitle: instance.get('title') })}</Link>
|
||||
: <LoginForm handleSubmit={this.handleSubmit} isLoading={isLoading} />
|
||||
}
|
||||
</div>
|
||||
<div className='visible-sm'>
|
||||
{me
|
||||
? <Link className='nav-link nav-button webapp-btn' to='/'>Back to {instance.get('title')}</Link>
|
||||
: <Link className='nav-link nav-button webapp-btn' to='/auth/sign_in'>Log in</Link>
|
||||
? <Link className='nav-link nav-button webapp-btn' to='/'>{intl.formatMessage(messages.backTo, { siteTitle: instance.get('title') })}</Link>
|
||||
: <Link className='nav-link nav-button webapp-btn' to='/auth/sign_in'>{intl.formatMessage(messages.login)}</Link>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -32,7 +32,7 @@ class Reblogs extends ImmutablePureComponent {
|
|||
static propTypes = {
|
||||
params: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
accountIds: ImmutablePropTypes.orderedSet,
|
||||
status: ImmutablePropTypes.map,
|
||||
};
|
||||
|
||||
|
|
|
@ -16,10 +16,8 @@ import classNames from 'classnames';
|
|||
import Icon from 'soapbox/components/icon';
|
||||
import PollContainer from 'soapbox/containers/poll_container';
|
||||
import { StatusInteractionBar } from './status_interaction_bar';
|
||||
import ProfileHoverCardContainer from 'soapbox/features/profile_hover_card/profile_hover_card_container';
|
||||
import { isMobile } from 'soapbox/is_mobile';
|
||||
import { debounce } from 'lodash';
|
||||
import { getDomain } from 'soapbox/utils/accounts';
|
||||
import HoverRefWrapper from 'soapbox/components/hover_ref_wrapper';
|
||||
|
||||
export default class DetailedStatus extends ImmutablePureComponent {
|
||||
|
||||
|
@ -42,7 +40,6 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
|||
|
||||
state = {
|
||||
height: null,
|
||||
profileCardVisible: false,
|
||||
};
|
||||
|
||||
handleOpenVideo = (media, startTime) => {
|
||||
|
@ -86,24 +83,10 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
|||
window.open(href, 'soapbox-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');
|
||||
}
|
||||
|
||||
showProfileCard = debounce(() => {
|
||||
this.setState({ profileCardVisible: true });
|
||||
}, 1200);
|
||||
|
||||
handleProfileHover = e => {
|
||||
if (!isMobile(window.innerWidth)) this.showProfileCard();
|
||||
}
|
||||
|
||||
handleProfileLeave = e => {
|
||||
this.showProfileCard.cancel();
|
||||
this.setState({ profileCardVisible: false });
|
||||
}
|
||||
|
||||
render() {
|
||||
const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;
|
||||
const outerStyle = { boxSizing: 'border-box' };
|
||||
const { compact } = this.props;
|
||||
const { profileCardVisible } = this.state;
|
||||
const favicon = status.getIn(['account', 'pleroma', 'favicon']);
|
||||
const domain = getDomain(status.get('account'));
|
||||
|
||||
|
@ -181,20 +164,21 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
|||
return (
|
||||
<div style={outerStyle}>
|
||||
<div ref={this.setRef} className={classNames('detailed-status', { compact })}>
|
||||
<div className='detailed-status__profile' onMouseEnter={this.handleProfileHover} onMouseLeave={this.handleProfileLeave}>
|
||||
<div className='detailed-status__profile'>
|
||||
<div className='detailed-status__display-name'>
|
||||
<NavLink to={`/@${status.getIn(['account', 'acct'])}`}>
|
||||
<div className='detailed-status__display-avatar'>
|
||||
<Avatar account={status.get('account')} size={48} />
|
||||
<HoverRefWrapper accountId={status.getIn(['account', 'id'])}>
|
||||
<Avatar account={status.get('account')} size={48} />
|
||||
</HoverRefWrapper>
|
||||
</div>
|
||||
</NavLink>
|
||||
<DisplayName account={status.get('account')}>
|
||||
<NavLink to={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='floating-link' />
|
||||
<HoverRefWrapper accountId={status.getIn(['account', 'id'])}>
|
||||
<NavLink to={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} />
|
||||
</HoverRefWrapper>
|
||||
</DisplayName>
|
||||
</div>
|
||||
{ profileCardVisible &&
|
||||
<ProfileHoverCardContainer accountId={status.getIn(['account', 'id'])} visible={!isMobile(window.innerWidth) && profileCardVisible} />
|
||||
}
|
||||
</div>
|
||||
|
||||
{status.get('group') && (
|
||||
|
|
|
@ -418,7 +418,7 @@ class Status extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
if (prevProps.status && ancestorsIds && ancestorsIds.size > 0) {
|
||||
const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];
|
||||
const element = this.node.querySelector('.detailed-status');
|
||||
|
||||
window.requestAnimationFrame(() => {
|
||||
element.scrollIntoView(true);
|
||||
|
|
|
@ -46,6 +46,11 @@ class TabsBar extends React.PureComponent {
|
|||
this.node = ref;
|
||||
}
|
||||
|
||||
isHomeActive = (match, location) => {
|
||||
const { pathname } = location;
|
||||
return pathname === '/' || pathname.startsWith('/timeline/');
|
||||
}
|
||||
|
||||
getNavLinks() {
|
||||
const { intl: { formatMessage }, logo, account } = this.props;
|
||||
let links = [];
|
||||
|
@ -57,7 +62,7 @@ class TabsBar extends React.PureComponent {
|
|||
</Link>);
|
||||
}
|
||||
links.push(
|
||||
<NavLink key='home' className='tabs-bar__link' exact to='/' data-preview-title-id='column.home'>
|
||||
<NavLink key='home' className='tabs-bar__link' exact to='/' data-preview-title-id='column.home' isActive={this.isHomeActive}>
|
||||
<Icon id='home' />
|
||||
<span><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></span>
|
||||
</NavLink>);
|
||||
|
|
|
@ -56,26 +56,26 @@ class UserPanel extends ImmutablePureComponent {
|
|||
|
||||
<div className='user-panel__stats-block'>
|
||||
|
||||
<div className='user-panel-stats-item'>
|
||||
{account.get('statuses_count') && <div className='user-panel-stats-item'>
|
||||
<Link to={`/@${account.get('acct')}`} title={intl.formatNumber(account.get('statuses_count'))}>
|
||||
<strong className='user-panel-stats-item__value'>{shortNumberFormat(account.get('statuses_count'))}</strong>
|
||||
<span className='user-panel-stats-item__label'><FormattedMessage className='user-panel-stats-item__label' id='account.posts' defaultMessage='Posts' /></span>
|
||||
</Link>
|
||||
</div>
|
||||
</div>}
|
||||
|
||||
<div className='user-panel-stats-item'>
|
||||
{account.get('followers_count') && <div className='user-panel-stats-item'>
|
||||
<Link to={`/@${account.get('acct')}/followers`} title={intl.formatNumber(account.get('followers_count'))}>
|
||||
<strong className='user-panel-stats-item__value'>{shortNumberFormat(account.get('followers_count'))}</strong>
|
||||
<span className='user-panel-stats-item__label'><FormattedMessage id='account.followers' defaultMessage='Followers' /></span>
|
||||
</Link>
|
||||
</div>
|
||||
</div>}
|
||||
|
||||
<div className='user-panel-stats-item'>
|
||||
{account.get('following_count') && <div className='user-panel-stats-item'>
|
||||
<Link to={`/@${account.get('acct')}/following`} title={intl.formatNumber(account.get('following_count'))}>
|
||||
<strong className='user-panel-stats-item__value'>{shortNumberFormat(account.get('following_count'))}</strong>
|
||||
<span className='user-panel-stats-item__label'><FormattedMessage className='user-panel-stats-item__label' id='account.follows' defaultMessage='Follows' /></span>
|
||||
</Link>
|
||||
</div>
|
||||
</div>}
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ import { Redirect } from 'react-router-dom';
|
|||
import Icon from 'soapbox/components/icon';
|
||||
import { isStaff } from 'soapbox/utils/accounts';
|
||||
import ChatPanes from 'soapbox/features/chats/components/chat_panes';
|
||||
import ProfileHoverCard from 'soapbox/components/profile_hover_card';
|
||||
|
||||
import {
|
||||
Status,
|
||||
|
@ -650,6 +651,7 @@ class UI extends React.PureComponent {
|
|||
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
||||
{me && <SidebarMenu />}
|
||||
{me && !mobile && <ChatPanes />}
|
||||
<ProfileHoverCard />
|
||||
</div>
|
||||
</HotKeys>
|
||||
);
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "أغلق",
|
||||
"bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
|
||||
"bundle_modal_error.retry": "إعادة المحاولة",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "الحسابات المحجوبة",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "الخيط العام المحلي",
|
||||
"column.direct": "الرسائل المباشرة",
|
||||
"column.domain_blocks": "النطاقات المخفية",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "الخيط العام الموحد",
|
||||
"navigation_bar.security": "الأمان",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "أُعجِب {name} بمنشورك",
|
||||
"notification.follow": "{name} يتابعك",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "إلغاء الاقتراح",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "الرئيسية",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "الإخطارات",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Usuarios bloquiaos",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Llinia temporal llocal",
|
||||
"column.direct": "Mensaxes direutos",
|
||||
"column.domain_blocks": "Dominios anubríos",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Llinia temporal federada",
|
||||
"navigation_bar.security": "Seguranza",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} siguióte",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Aniciu",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Avisos",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Публичен канал",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} хареса твоята публикация",
|
||||
"notification.follow": "{name} те последва",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Начало",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Известия",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "বন্ধ করুন",
|
||||
"bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।",
|
||||
"bundle_modal_error.retry": "আবার চেষ্টা করুন",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "যাদের বন্ধ করে রাখা হয়েছে",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "স্থানীয় সময়সারি",
|
||||
"column.direct": "সরাসরি লেখা",
|
||||
"column.domain_blocks": "সরিয়ে ফেলা ওয়েবসাইট",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা",
|
||||
"navigation_bar.security": "নিরাপত্তা",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
|
||||
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "সাহায্যের পরামর্শগুলো সরাতে",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "বাড়ি",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "প্রজ্ঞাপনগুলো",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Serriñ",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Klask endro",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Implijour·ezed·ion stanket",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Red-amzer lec'hel",
|
||||
"column.direct": "Kemennadoù prevez",
|
||||
"column.domain_blocks": "Domani kuzhet",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Tanca",
|
||||
"bundle_modal_error.message": "S'ha produït un error en carregar aquest component.",
|
||||
"bundle_modal_error.retry": "Torna-ho a provar",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Usuaris bloquejats",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Línia de temps local",
|
||||
"column.direct": "Missatges directes",
|
||||
"column.domain_blocks": "Dominis ocults",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Línia de temps federada",
|
||||
"navigation_bar.security": "Seguretat",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} ha afavorit el teu estat",
|
||||
"notification.follow": "{name} et segueix",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Descartar suggeriment",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Inici",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificacions",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Chjudà",
|
||||
"bundle_modal_error.message": "C'hè statu un prublemu caricandu st'elementu.",
|
||||
"bundle_modal_error.retry": "Pruvà torna",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Utilizatori bluccati",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Linea pubblica lucale",
|
||||
"column.direct": "Missaghji diretti",
|
||||
"column.domain_blocks": "Duminii piattati",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Linea pubblica glubale",
|
||||
"navigation_bar.security": "Sicurità",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
|
||||
"notification.follow": "{name} v'hà seguitatu",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Righjittà a pruposta",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Accolta",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Nutificazione",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Zavřít",
|
||||
"bundle_modal_error.message": "Při načítání tohoto komponentu se něco pokazilo.",
|
||||
"bundle_modal_error.retry": "Zkusit znovu",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokovaní uživatelé",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Místní zeď",
|
||||
"column.direct": "Přímé zprávy",
|
||||
"column.domain_blocks": "Skryté domény",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federovaná zeď",
|
||||
"navigation_bar.security": "Zabezpečení",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reagoval/a na Váš příspěvek",
|
||||
"notification.favourite": "{name} si oblíbil/a váš příspěvek",
|
||||
"notification.follow": "{name} vás začal/a sledovat",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Odmítnout návrh",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Domů",
|
||||
"tabs_bar.news": "Zprávy",
|
||||
"tabs_bar.notifications": "Oznámení",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Cau",
|
||||
"bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
|
||||
"bundle_modal_error.retry": "Ceiswich eto",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Defnyddwyr a flociwyd",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Ffrwd lleol",
|
||||
"column.direct": "Negeseuon preifat",
|
||||
"column.domain_blocks": "Parthau cuddiedig",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
|
||||
"navigation_bar.security": "Diogelwch",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "hoffodd {name} eich tŵt",
|
||||
"notification.follow": "dilynodd {name} chi",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Diswyddo",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hafan",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Hysbysiadau",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Luk",
|
||||
"bundle_modal_error.message": "Noget gik galt under indlæsningen af dette komponent.",
|
||||
"bundle_modal_error.retry": "Prøv igen",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokerede brugere",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokal tidslinje",
|
||||
"column.direct": "Direkte beskeder",
|
||||
"column.domain_blocks": "Skjulte domæner",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Fælles tidslinje",
|
||||
"navigation_bar.security": "Sikkerhed",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favoriserede din status",
|
||||
"notification.follow": "{name} fulgte dig",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Afvis foreslag",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hjem",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifikationer",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Schließen",
|
||||
"bundle_modal_error.message": "Etwas ist beim Laden schiefgelaufen.",
|
||||
"bundle_modal_error.retry": "Erneut versuchen",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blockierte Profile",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokale Zeitleiste",
|
||||
"column.direct": "Direktnachrichten",
|
||||
"column.domain_blocks": "Versteckte Domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Föderierte Zeitleiste",
|
||||
"navigation_bar.security": "Sicherheit",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} hat auf deinen Beitrag reagiert",
|
||||
"notification.favourite": "{name} hat deinen Beitrag favorisiert",
|
||||
"notification.follow": "{name} folgt dir",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "{count, plural, one {Ein neuer Beitrag} other {# neue Beiträge}}. Hier klicken, um {count, plural, one {ihn} other {sie}} anzuzeigen.",
|
||||
"suggestions.dismiss": "Empfehlung ausblenden",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Startseite",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Benachrichtigungen",
|
||||
|
|
|
@ -262,6 +262,15 @@
|
|||
],
|
||||
"path": "app/soapbox/components/poll.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Follows you",
|
||||
"id": "account.follows_you"
|
||||
}
|
||||
],
|
||||
"path": "app/soapbox/components/profile_hover_card.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
|
@ -321,10 +330,6 @@
|
|||
"defaultMessage": "Profile",
|
||||
"id": "account.profile"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Messages",
|
||||
"id": "navigation_bar.messages"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Preferences",
|
||||
"id": "navigation_bar.preferences"
|
||||
|
@ -990,6 +995,41 @@
|
|||
],
|
||||
"path": "app/soapbox/features/bookmarks/index.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Send a message…",
|
||||
"id": "chat_box.input.placeholder"
|
||||
}
|
||||
],
|
||||
"path": "app/soapbox/features/chats/components/chat_box.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Chats",
|
||||
"id": "chat_panels.main_window.title"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "No chats found. To start a chat, visit a user's profile.",
|
||||
"id": "chat_panels.main_window.empty"
|
||||
}
|
||||
],
|
||||
"path": "app/soapbox/features/chats/components/chat_panes.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Chats",
|
||||
"id": "column.chats"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "No chats found. To start a chat, visit a user's profile.",
|
||||
"id": "chat_panels.main_window.empty"
|
||||
}
|
||||
],
|
||||
"path": "app/soapbox/features/chats/index.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
|
@ -2343,6 +2383,10 @@
|
|||
"defaultMessage": "{name} followed you",
|
||||
"id": "notification.follow"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "{name} sent you a message",
|
||||
"id": "notification.chat_mention"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "{name} reacted to your post",
|
||||
"id": "notification.emoji_react"
|
||||
|
@ -2972,6 +3016,14 @@
|
|||
{
|
||||
"defaultMessage": "Copy link to post",
|
||||
"id": "status.copy"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Bookmark",
|
||||
"id": "status.bookmark"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Remove bookmark",
|
||||
"id": "status.unbookmark"
|
||||
}
|
||||
],
|
||||
"path": "app/soapbox/features/status/components/action_bar.json"
|
||||
|
@ -3175,10 +3227,6 @@
|
|||
"defaultMessage": "Edit Profile",
|
||||
"id": "account.edit_profile"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Messages",
|
||||
"id": "navigation_bar.messages"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Preferences",
|
||||
"id": "navigation_bar.preferences"
|
||||
|
@ -3496,6 +3544,10 @@
|
|||
"defaultMessage": "Notifications",
|
||||
"id": "tabs_bar.notifications"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Chats",
|
||||
"id": "tabs_bar.chats"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Reports",
|
||||
"id": "tabs_bar.reports"
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Κλείσιμο",
|
||||
"bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.",
|
||||
"bundle_modal_error.retry": "Δοκίμασε ξανά",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Αποκλεισμένοι χρήστες",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Τοπική ροή",
|
||||
"column.direct": "Προσωπικά μηνύματα",
|
||||
"column.domain_blocks": "Κρυμμένοι τομείς",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
|
||||
"navigation_bar.security": "Ασφάλεια",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου",
|
||||
"notification.follow": "Ο/Η {name} σε ακολούθησε",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Απόρριψη πρότασης",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Αρχική",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Ειδοποιήσεις",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} liked your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Fermi",
|
||||
"bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.",
|
||||
"bundle_modal_error.retry": "Bonvolu reprovi",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokitaj uzantoj",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Loka tempolinio",
|
||||
"column.direct": "Rektaj mesaĝoj",
|
||||
"column.domain_blocks": "Kaŝitaj domajnoj",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Fratara tempolinio",
|
||||
"navigation_bar.security": "Sekureco",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} stelumis vian mesaĝon",
|
||||
"notification.follow": "{name} eksekvis vin",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Forigi la proponon",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hejmo",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Sciigoj",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Cerrar",
|
||||
"bundle_modal_error.message": "Algo salió mal al cargar este componente.",
|
||||
"bundle_modal_error.retry": "Intentá de nuevo",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Usuarios bloqueados",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Línea temporal local",
|
||||
"column.direct": "Mensajes directos",
|
||||
"column.domain_blocks": "Dominios ocultos",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Línea temporal federada",
|
||||
"navigation_bar.security": "Seguridad",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} marcó tu estado como favorito",
|
||||
"notification.follow": "{name} te empezó a seguir",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Descartar sugerencia",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Principal",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificaciones",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Cerrar",
|
||||
"bundle_modal_error.message": "Algo salió mal al cargar este componente.",
|
||||
"bundle_modal_error.retry": "Inténtalo de nuevo",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Usuarios bloqueados",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Línea de tiempo local",
|
||||
"column.direct": "Mensajes directos",
|
||||
"column.domain_blocks": "Dominios ocultados",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Historia federada",
|
||||
"navigation_bar.security": "Seguridad",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} marcó tu estado como favorito",
|
||||
"notification.follow": "{name} te empezó a seguir",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Descartar sugerencia",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Inicio",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificaciones",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Sulge",
|
||||
"bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.",
|
||||
"bundle_modal_error.retry": "Proovi uuesti",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokeeritud kasutajad",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Kohalik ajajoon",
|
||||
"column.direct": "Otsesõnumid",
|
||||
"column.domain_blocks": "Peidetud domeenid",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Föderatiivne ajajoon",
|
||||
"navigation_bar.security": "Turvalisus",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} märkis su staatuse lemmikuks",
|
||||
"notification.follow": "{name} jälgib sind",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Eira soovitust",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Kodu",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Teated",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Itxi",
|
||||
"bundle_modal_error.message": "Zerbait okerra gertatu da osagai hau kargatzean.",
|
||||
"bundle_modal_error.retry": "Saiatu berriro",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokeatutako erabiltzaileak",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Denbora-lerro lokala",
|
||||
"column.direct": "Mezu zuzenak",
|
||||
"column.domain_blocks": "Ezkutatutako domeinuak",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federatutako denbora-lerroa",
|
||||
"navigation_bar.security": "Segurtasuna",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name}(e)k zure mezua gogoko du",
|
||||
"notification.follow": "{name}(e)k jarraitzen zaitu",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Errefusatu proposamena",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hasiera",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Jakinarazpenak",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "بستن",
|
||||
"bundle_modal_error.message": "هنگام بازکردن این بخش خطایی رخ داد.",
|
||||
"bundle_modal_error.retry": "تلاش دوباره",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "کاربران مسدودشده",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "نوشتههای محلی",
|
||||
"column.direct": "پیغامهای خصوصی",
|
||||
"column.domain_blocks": "دامینهای پنهانشده",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "نوشتههای همهجا",
|
||||
"navigation_bar.security": "امنیت",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} نوشتهٔ شما را پسندید",
|
||||
"notification.follow": "{name} پیگیر شما شد",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "پیشنهاد را نادیده بگیر",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "خانه",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "اعلانها",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Sulje",
|
||||
"bundle_modal_error.message": "Jokin meni vikaan komponenttia ladattaessa.",
|
||||
"bundle_modal_error.retry": "Yritä uudestaan",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Estetyt käyttäjät",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Paikallinen aikajana",
|
||||
"column.direct": "Viestit",
|
||||
"column.domain_blocks": "Piilotetut verkkotunnukset",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Yleinen aikajana",
|
||||
"navigation_bar.security": "Tunnukset",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} tykkäsi tilastasi",
|
||||
"notification.follow": "{name} seurasi sinua",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Koti",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Ilmoitukset",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Fermer",
|
||||
"bundle_modal_error.message": "Une erreur s’est produite lors du chargement de ce composant.",
|
||||
"bundle_modal_error.retry": "Réessayer",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Comptes bloqués",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Fil public local",
|
||||
"column.direct": "Messages privés",
|
||||
"column.domain_blocks": "Domaines cachés",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Fil public global",
|
||||
"navigation_bar.security": "Sécurité",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} a ajouté à ses favoris :",
|
||||
"notification.follow": "{name} vous suit",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Rejeter la suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Accueil",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Pechar",
|
||||
"bundle_modal_error.message": "Algo fallou mentras se cargaba este compoñente.",
|
||||
"bundle_modal_error.retry": "Inténteo de novo",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Usuarias bloqueadas",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Liña temporal local",
|
||||
"column.direct": "Mensaxes directas",
|
||||
"column.domain_blocks": "Dominios agochados",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Liña temporal federada",
|
||||
"navigation_bar.security": "Seguridade",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} marcou como favorito o seu estado",
|
||||
"notification.follow": "{name} está a seguila",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Rexeitar suxestión",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Inicio",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificacións",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "לסגור",
|
||||
"bundle_modal_error.message": "משהו השתבש בעת טעינת הרכיב הזה.",
|
||||
"bundle_modal_error.retry": "לנסות שוב",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "חסימות",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "ציר זמן מקומי",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "ציר זמן בין-קהילתי",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "חצרוצך חובב על ידי {name}",
|
||||
"notification.follow": "{name} במעקב אחרייך",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "בבית",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "התראות",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokirani korisnici",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokalni timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federalni timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} je lajkao tvoj status",
|
||||
"notification.follow": "{name} te sada slijedi",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Dom",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifikacije",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Bezárás",
|
||||
"bundle_modal_error.message": "Hiba történt a komponens betöltésekor.",
|
||||
"bundle_modal_error.retry": "Próbáld újra",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Letiltott felhasználók",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Helyi idővonal",
|
||||
"column.direct": "Közvetlen üzenetek",
|
||||
"column.domain_blocks": "Rejtett domainek",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Föderációs idővonal",
|
||||
"navigation_bar.security": "Biztonság",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} kedvencnek jelölte egy tülködet",
|
||||
"notification.follow": "{name} követ téged",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Javaslat elvetése",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Saját",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Értesítések",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Փակել",
|
||||
"bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։",
|
||||
"bundle_modal_error.retry": "Կրկին փորձել",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Արգելափակված օգտատերեր",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Տեղական հոսք",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Դաշնային հոսք",
|
||||
"navigation_bar.security": "Անվտանգություն",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} հավանեց թութդ",
|
||||
"notification.follow": "{name} սկսեց հետեւել քեզ",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Հիմնական",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Ծանուցումներ",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Tutup",
|
||||
"bundle_modal_error.message": "Kesalahan terjadi saat memuat komponen ini.",
|
||||
"bundle_modal_error.retry": "Coba lagi",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Pengguna diblokir",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Linimasa Lokal",
|
||||
"column.direct": "Pesan langsung",
|
||||
"column.domain_blocks": "Topik tersembunyi",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Linimasa gabungan",
|
||||
"navigation_bar.security": "Keamanan",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} menyukai status anda",
|
||||
"notification.follow": "{name} mengikuti anda",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Beranda",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifikasi",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokusita uzeri",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokala tempolineo",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federata tempolineo",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorizis tua mesajo",
|
||||
"notification.follow": "{name} sequeskis tu",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hemo",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Savigi",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Chiudi",
|
||||
"bundle_modal_error.message": "C'è stato un errore mentre questo componente veniva caricato.",
|
||||
"bundle_modal_error.retry": "Riprova",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Utenti bloccati",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Timeline locale",
|
||||
"column.direct": "Messaggi diretti",
|
||||
"column.domain_blocks": "Domini nascosti",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Timeline federata",
|
||||
"navigation_bar.security": "Sicurezza",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} ha apprezzato il tuo post",
|
||||
"notification.follow": "{name} ha iniziato a seguirti",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Elimina suggerimento",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifiche",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "閉じる",
|
||||
"bundle_modal_error.message": "コンポーネントの読み込み中に問題が発生しました。",
|
||||
"bundle_modal_error.retry": "再試行",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "ブロックしたユーザー",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "ローカルタイムライン",
|
||||
"column.direct": "ダイレクトメッセージ",
|
||||
"column.domain_blocks": "非表示にしたドメイン",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "連合タイムライン",
|
||||
"navigation_bar.security": "セキュリティ",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました",
|
||||
"notification.follow": "{name}さんにフォローされました",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "隠す",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "ホーム",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "通知",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "დახურვა",
|
||||
"bundle_modal_error.message": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
|
||||
"bundle_modal_error.retry": "სცადეთ კიდევ ერთხელ",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "დაბლოკილი მომხმარებლები",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "ლოკალური თაიმლაინი",
|
||||
"column.direct": "პირდაპირი წერილები",
|
||||
"column.domain_blocks": "დამალული დომენები",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "ფედერალური თაიმლაინი",
|
||||
"navigation_bar.security": "უსაფრთხოება",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად",
|
||||
"notification.follow": "{name} გამოგყვათ",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "სახლი",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "შეტყობინებები",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Жабу",
|
||||
"bundle_modal_error.message": "Бұл компонентті жүктеген кезде бір қате пайда болды.",
|
||||
"bundle_modal_error.retry": "Қайтадан көріңіз",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Бұғатталғандар",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Жергілікті желі",
|
||||
"column.direct": "Жеке хаттар",
|
||||
"column.domain_blocks": "Жасырылған домендер",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Жаһандық желі",
|
||||
"navigation_bar.security": "Қауіпсіздік",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} жазбаңызды таңдаулыға қосты",
|
||||
"notification.follow": "{name} сізге жазылды",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Өткізіп жіберу",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Басты бет",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Ескертпелер",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "닫기",
|
||||
"bundle_modal_error.message": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.",
|
||||
"bundle_modal_error.retry": "다시 시도",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "차단 중인 사용자",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "로컬 타임라인",
|
||||
"column.direct": "다이렉트 메시지",
|
||||
"column.domain_blocks": "숨겨진 도메인",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "연합 타임라인",
|
||||
"navigation_bar.security": "보안",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name}님이 즐겨찾기 했습니다",
|
||||
"notification.follow": "{name}님이 나를 팔로우 했습니다",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "추천 지우기",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "홈",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "알림",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Aizvērt",
|
||||
"bundle_modal_error.message": "Kaut kas nogāja greizi ielādējot šo komponenti.",
|
||||
"bundle_modal_error.retry": "Mēģini vēlreiz",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Bloķētie lietotāji",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokālā laika līnija",
|
||||
"column.direct": "Privātās ziņas",
|
||||
"column.domain_blocks": "Paslēptie domēni",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Затвори",
|
||||
"bundle_modal_error.message": "Настана грешка при прикажувањето на оваа веб-страница.",
|
||||
"bundle_modal_error.retry": "Обидете се повторно",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Блокирани корисници",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Директна порака",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Дома",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blocked users",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federated timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favorited your post",
|
||||
"notification.follow": "{name} followed you",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Sluiten",
|
||||
"bundle_modal_error.message": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
|
||||
"bundle_modal_error.retry": "Opnieuw proberen",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Geblokkeerde gebruikers",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokale tijdlijn",
|
||||
"column.direct": "Directe berichten",
|
||||
"column.domain_blocks": "Genegeerde servers",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Globale tijdlijn",
|
||||
"navigation_bar.security": "Beveiliging",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} voegde jouw toot als favoriet toe",
|
||||
"notification.follow": "{name} volgt jou nu",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Voorstel verwerpen",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Start",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Meldingen",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Lukk",
|
||||
"bundle_modal_error.message": "Noko gikk gale mens komponent var i ferd med å bli nedlasta.",
|
||||
"bundle_modal_error.retry": "Prøv igjen",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokka brukare",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokal samtid",
|
||||
"column.direct": "Direkte meldingar",
|
||||
"column.domain_blocks": "Gøymte domener",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federert tidslinje",
|
||||
"navigation_bar.security": "Sikkerheit",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} likte din status",
|
||||
"notification.follow": "{name} fulgte deg",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Heim",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Lukk",
|
||||
"bundle_modal_error.message": "Noe gikk galt da denne komponenten lastet.",
|
||||
"bundle_modal_error.retry": "Prøv igjen",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokkerte brukere",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokal tidslinje",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Felles tidslinje",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} likte din status",
|
||||
"notification.follow": "{name} fulgte deg",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hjem",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Varslinger",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Tampar",
|
||||
"bundle_modal_error.message": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.",
|
||||
"bundle_modal_error.retry": "Tornar ensajar",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Personas blocadas",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Flux public local",
|
||||
"column.direct": "Messatges dirèctes",
|
||||
"column.domain_blocks": "Domenis resconduts",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Flux public global",
|
||||
"navigation_bar.security": "Seguretat",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} a ajustat a sos favorits",
|
||||
"notification.follow": "{name} vos sèc",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Regetar la suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Acuèlh",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificacions",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Zamknij",
|
||||
"bundle_modal_error.message": "Coś poszło nie tak podczas ładowania tego składnika.",
|
||||
"bundle_modal_error.retry": "Spróbuj ponownie",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Zablokowani użytkownicy",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokalna oś czasu",
|
||||
"column.direct": "Wiadomości bezpośrednie",
|
||||
"column.domain_blocks": "Ukryte domeny",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Globalna oś czasu",
|
||||
"navigation_bar.security": "Bezpieczeństwo",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} dodał(a) Twój wpis do ulubionych",
|
||||
"notification.follow": "{name} zaczął(-ęła) Cię śledzić",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Odrzuć sugestię",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Strona główna",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Powiadomienia",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Fechar",
|
||||
"bundle_modal_error.message": "Algo de errado aconteceu enquanto este componente era carregado.",
|
||||
"bundle_modal_error.retry": "Tente novamente",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Usuários bloqueados",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Local",
|
||||
"column.direct": "Mensagens diretas",
|
||||
"column.domain_blocks": "Domínios escondidos",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Global",
|
||||
"navigation_bar.security": "Segurança",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} adicionou a sua postagem aos favoritos",
|
||||
"notification.follow": "{name} te seguiu",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Ignorar a sugestão",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Página inicial",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificações",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Fechar",
|
||||
"bundle_modal_error.message": "Algo de errado aconteceu enquanto este componente era carregado.",
|
||||
"bundle_modal_error.retry": "Tente de novo",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Utilizadores Bloqueados",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Cronologia local",
|
||||
"column.direct": "Mensagens directas",
|
||||
"column.domain_blocks": "Domínios escondidos",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Cronologia federada",
|
||||
"navigation_bar.security": "Segurança",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} adicionou o teu estado aos favoritos",
|
||||
"notification.follow": "{name} começou a seguir-te",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dispensar a sugestão",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Início",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificações",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Închide",
|
||||
"bundle_modal_error.message": "Ceva nu a funcționat în timupul încărcării acestui component.",
|
||||
"bundle_modal_error.retry": "Încearcă din nou",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Utilizatori blocați",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Fluxul Local",
|
||||
"column.direct": "Mesaje directe",
|
||||
"column.domain_blocks": "Domenii ascunse",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Flux global",
|
||||
"navigation_bar.security": "Securitate",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} a adăugat statusul tău la favorite",
|
||||
"notification.follow": "{name} te urmărește",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Omite sugestia",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Acasă",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notificări",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Закрыть",
|
||||
"bundle_modal_error.message": "Что-то пошло не так при загрузке этого компонента.",
|
||||
"bundle_modal_error.retry": "Попробовать снова",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Список блокировки",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Локальная лента",
|
||||
"column.direct": "Личные сообщения",
|
||||
"column.domain_blocks": "Скрытые домены",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Глобальная лента",
|
||||
"navigation_bar.security": "Безопасность",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} понравился Ваш статус",
|
||||
"notification.follow": "{name} подписался (-лась) на вас",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Удалить предложение",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Главная",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Уведомления",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Zatvor",
|
||||
"bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.",
|
||||
"bundle_modal_error.retry": "Skúsiť znova",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokovaní užívatelia",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Miestna časová os",
|
||||
"column.direct": "Súkromné správy",
|
||||
"column.domain_blocks": "Skryté domény",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federovaná časová os",
|
||||
"navigation_bar.security": "Zabezbečenie",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} si obľúbil/a tvoj príspevok",
|
||||
"notification.follow": "{name} ťa začal/a následovať",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Zavrhni návrh",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Domovská",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Oboznámenia",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Zapri",
|
||||
"bundle_modal_error.message": "Med nalaganjem te komponente je prišlo do napake.",
|
||||
"bundle_modal_error.retry": "Poskusi ponovno",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokirani uporabniki",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokalna časovnica",
|
||||
"column.direct": "Neposredna sporočila",
|
||||
"column.domain_blocks": "Skrite domene",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Združena časovnica",
|
||||
"navigation_bar.security": "Varnost",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} je vzljubil/a vaš status",
|
||||
"notification.follow": "{name} vam sledi",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Zavrni predlog",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Domov",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Obvestila",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Mbylle",
|
||||
"bundle_modal_error.message": "Diç shkoi ters teksa ngarkohej ky përbërës.",
|
||||
"bundle_modal_error.retry": "Riprovoni",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Përdorues të bllokuar",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Rrjedhë kohore vendore",
|
||||
"column.direct": "Mesazhe të drejtpërdrejta",
|
||||
"column.domain_blocks": "Përkatësi të fshehura",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Rrjedhë kohore të federuarish",
|
||||
"navigation_bar.security": "Siguri",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} parapëlqeu gjendjen tuaj",
|
||||
"notification.follow": "{name} zuri t’ju ndjekë",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Mos e merr parasysh sugjerimin",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Kreu",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Njoftime",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Zatvori",
|
||||
"bundle_modal_error.message": "Nešto nije bilo u redu pri učitavanju ove komponente.",
|
||||
"bundle_modal_error.retry": "Pokušajte ponovo",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blokirani korisnici",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokalna lajna",
|
||||
"column.direct": "Direct messages",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federisana lajna",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} je stavio Vaš status kao omiljeni",
|
||||
"notification.follow": "{name} Vas je zapratio",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Početna",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Obaveštenja",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Затвори",
|
||||
"bundle_modal_error.message": "Нешто није било у реду при учитавању ове компоненте.",
|
||||
"bundle_modal_error.retry": "Покушајте поново",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Блокирани корисници",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Локална временска линија",
|
||||
"column.direct": "Директне поруке",
|
||||
"column.domain_blocks": "Скривени домени",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Здружена временска линија",
|
||||
"navigation_bar.security": "Безбедност",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} је ставио/ла Ваш статус као омиљени",
|
||||
"notification.follow": "{name} Вас је запратио/ла",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Почетна",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Обавештења",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Stäng",
|
||||
"bundle_modal_error.message": "Något gick fel när denna komponent laddades.",
|
||||
"bundle_modal_error.retry": "Försök igen",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Blockerade användare",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Lokal tidslinje",
|
||||
"column.direct": "Direktmeddelanden",
|
||||
"column.domain_blocks": "Dolda domäner",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Förenad tidslinje",
|
||||
"navigation_bar.security": "Säkerhet",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} favoriserade din status",
|
||||
"notification.follow": "{name} följer dig",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Hem",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Meddelanden",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "நெருக்கமாக",
|
||||
"bundle_modal_error.message": "இந்த கூறுகளை ஏற்றும்போது ஏதோ தவறு ஏற்பட்டது.",
|
||||
"bundle_modal_error.retry": "மீண்டும் முயற்சி செய்",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "தடுக்கப்பட்ட பயனர்கள்",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "உள்ளூர் காலக்கெடு",
|
||||
"column.direct": "நேரடி செய்திகள்",
|
||||
"column.domain_blocks": "மறைந்த களங்கள்",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "கூட்டாட்சி காலக்கெடு",
|
||||
"navigation_bar.security": "பத்திரம்",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} ஆர்வம் கொண்டவர், உங்கள் நிலை",
|
||||
"notification.follow": "{name} நீங்கள் தொடர்ந்து வந்தீர்கள்",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "பரிந்துரை விலக்க",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Home",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Notifications",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "మూసివేయు",
|
||||
"bundle_modal_error.message": "ఈ భాగం లోడ్ అవుతున్నప్పుడు ఏదో తప్పు జరిగింది.",
|
||||
"bundle_modal_error.retry": "మళ్ళీ ప్రయత్నించండి",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "స్థానిక కాలక్రమం",
|
||||
"column.direct": "ప్రత్యక్ష సందేశాలు",
|
||||
"column.domain_blocks": "దాచిన డొమైన్లు",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "సమాఖ్య కాలక్రమం",
|
||||
"navigation_bar.security": "భద్రత",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} మీ స్టేటస్ ను ఇష్టపడ్డారు",
|
||||
"notification.follow": "{name} మిమ్మల్ని అనుసరిస్తున్నారు",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "సూచనను రద్దు చేయి",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "హోమ్",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "ప్రకటనలు",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "ปิด",
|
||||
"bundle_modal_error.message": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้",
|
||||
"bundle_modal_error.retry": "ลองอีกครั้ง",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "เส้นเวลาในเว็บ",
|
||||
"column.direct": "ข้อความโดยตรง",
|
||||
"column.domain_blocks": "โดเมนที่ซ่อนอยู่",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก",
|
||||
"navigation_bar.security": "ความปลอดภัย",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} ได้ชื่นชอบสถานะของคุณ",
|
||||
"notification.follow": "{name} ได้ติดตามคุณ",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "ยกเลิกข้อเสนอแนะ",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "หน้าแรก",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "การแจ้งเตือน",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Kapat",
|
||||
"bundle_modal_error.message": "Bu bileşen yüklenirken bir şeyler ters gitti.",
|
||||
"bundle_modal_error.retry": "Tekrar deneyin",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Engellenen kullanıcılar",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Yerel zaman tüneli",
|
||||
"column.direct": "Doğrudan mesajlar",
|
||||
"column.domain_blocks": "Gizli alan adları",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Federe zaman tüneli",
|
||||
"navigation_bar.security": "Güvenlik",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} senin durumunu favorilere ekledi",
|
||||
"notification.follow": "{name} seni takip ediyor",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Öneriyi görmezden gel",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Ana sayfa",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Bildirimler",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "Закрити",
|
||||
"bundle_modal_error.message": "Щось пішло не так під час завантаження компоненту.",
|
||||
"bundle_modal_error.retry": "Спробувати ще раз",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "Заблоковані користувачі",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "Локальна стрічка",
|
||||
"column.direct": "Прямі повідомлення",
|
||||
"column.domain_blocks": "Приховані домени",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "Глобальна стрічка",
|
||||
"navigation_bar.security": "Безпека",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} вподобав(-ла) ваш допис",
|
||||
"notification.follow": "{name} підписався(-лась) на Вас",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Відхилити пропозицію",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "Головна",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "Сповіщення",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "关闭",
|
||||
"bundle_modal_error.message": "载入这个组件时发生了错误。",
|
||||
"bundle_modal_error.retry": "重试",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "已屏蔽的用户",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "本站时间轴",
|
||||
"column.direct": "私信",
|
||||
"column.domain_blocks": "已屏蔽的网站",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "跨站公共时间轴",
|
||||
"navigation_bar.security": "安全",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} 收藏了你的嘟文",
|
||||
"notification.follow": "{name} 开始关注你",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "关闭建议",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "主页",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "通知",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "關閉",
|
||||
"bundle_modal_error.message": "加載本組件出錯。",
|
||||
"bundle_modal_error.retry": "重試",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "封鎖用戶",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "本站時間軸",
|
||||
"column.direct": "個人訊息",
|
||||
"column.domain_blocks": "隱藏的服務站",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "跨站時間軸",
|
||||
"navigation_bar.security": "安全",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} 收藏了你的文章",
|
||||
"notification.follow": "{name} 開始關注你",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "主頁",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "通知",
|
||||
|
|
|
@ -60,8 +60,12 @@
|
|||
"bundle_modal_error.close": "關閉",
|
||||
"bundle_modal_error.message": "載入此元件時發生錯誤。",
|
||||
"bundle_modal_error.retry": "重試",
|
||||
"chat_box.input.placeholder": "Send a message…",
|
||||
"chat_panels.main_window.empty": "No chats found. To start a chat, visit a user's profile.",
|
||||
"chat_panels.main_window.title": "Chats",
|
||||
"column.blocks": "封鎖的使用者",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.chats": "Chats",
|
||||
"column.community": "本機時間軸",
|
||||
"column.direct": "私訊",
|
||||
"column.domain_blocks": "隱藏的網域",
|
||||
|
@ -343,6 +347,7 @@
|
|||
"navigation_bar.public_timeline": "聯邦時間軸",
|
||||
"navigation_bar.security": "安全性",
|
||||
"navigation_bar.soapbox_config": "Soapbox config",
|
||||
"notification.chat_mention": "{name} sent you a message",
|
||||
"notification.emoji_react": "{name} reacted to your post",
|
||||
"notification.favourite": "{name} 把你的嘟文加入了最愛",
|
||||
"notification.follow": "{name} 關注了你",
|
||||
|
@ -548,6 +553,7 @@
|
|||
"status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
|
||||
"suggestions.dismiss": "關閉建議",
|
||||
"tabs_bar.apps": "Apps",
|
||||
"tabs_bar.chats": "Chats",
|
||||
"tabs_bar.home": "主頁",
|
||||
"tabs_bar.news": "News",
|
||||
"tabs_bar.notifications": "通知",
|
||||
|
|
|
@ -10,8 +10,8 @@ import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet } from 'immutabl
|
|||
const initialState = ImmutableMap();
|
||||
|
||||
const idComparator = (a, b) => {
|
||||
if (a < b) return 1;
|
||||
if (a > b) return -1;
|
||||
if (a < b) return -1;
|
||||
if (a > b) return 1;
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ import admin from './admin';
|
|||
import chats from './chats';
|
||||
import chat_messages from './chat_messages';
|
||||
import chat_message_lists from './chat_message_lists';
|
||||
import profile_hover_card from './profile_hover_card';
|
||||
|
||||
const reducers = {
|
||||
dropdown_menu,
|
||||
|
@ -95,6 +96,7 @@ const reducers = {
|
|||
chats,
|
||||
chat_messages,
|
||||
chat_message_lists,
|
||||
profile_hover_card,
|
||||
};
|
||||
|
||||
export default combineReducers(reducers);
|
||||
|
|
|
@ -61,8 +61,9 @@ const normalizeNotification = (state, notification) => {
|
|||
const expandNormalizedNotifications = (state, notifications, next) => {
|
||||
let items = ImmutableList();
|
||||
|
||||
notifications.forEach((n, i) => {
|
||||
items = items.set(i, notificationToMap(n));
|
||||
notifications.forEach((n) => {
|
||||
if (!n.account.id) return;
|
||||
items = items.push(notificationToMap(n));
|
||||
});
|
||||
|
||||
return state.withMutations(mutable => {
|
||||
|
|
27
app/soapbox/reducers/profile_hover_card.js
Normal file
27
app/soapbox/reducers/profile_hover_card.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
import {
|
||||
PROFILE_HOVER_CARD_OPEN,
|
||||
PROFILE_HOVER_CARD_CLOSE,
|
||||
PROFILE_HOVER_CARD_UPDATE,
|
||||
} from 'soapbox/actions/profile_hover_card';
|
||||
import { Map as ImmutableMap } from 'immutable';
|
||||
|
||||
const initialState = ImmutableMap();
|
||||
|
||||
export default function profileHoverCard(state = initialState, action) {
|
||||
switch(action.type) {
|
||||
case PROFILE_HOVER_CARD_OPEN:
|
||||
return ImmutableMap({
|
||||
ref: action.ref,
|
||||
accountId: action.accountId,
|
||||
});
|
||||
case PROFILE_HOVER_CARD_UPDATE:
|
||||
return state.set('hovered', true);
|
||||
case PROFILE_HOVER_CARD_CLOSE:
|
||||
if (state.get('hovered') === true && !action.force)
|
||||
return state;
|
||||
else
|
||||
return ImmutableMap();
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ import {
|
|||
MUTES_FETCH_SUCCESS,
|
||||
MUTES_EXPAND_SUCCESS,
|
||||
} from '../actions/mutes';
|
||||
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
||||
import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet } from 'immutable';
|
||||
import {
|
||||
GROUP_MEMBERS_FETCH_SUCCESS,
|
||||
GROUP_MEMBERS_EXPAND_SUCCESS,
|
||||
|
@ -44,7 +44,7 @@ const initialState = ImmutableMap({
|
|||
const normalizeList = (state, type, id, accounts, next) => {
|
||||
return state.setIn([type, id], ImmutableMap({
|
||||
next,
|
||||
items: ImmutableList(accounts.map(item => item.id)),
|
||||
items: ImmutableOrderedSet(accounts.map(item => item.id)),
|
||||
}));
|
||||
};
|
||||
|
||||
|
@ -65,22 +65,22 @@ export default function userLists(state = initialState, action) {
|
|||
case FOLLOWING_EXPAND_SUCCESS:
|
||||
return appendToList(state, 'following', action.id, action.accounts, action.next);
|
||||
case REBLOGS_FETCH_SUCCESS:
|
||||
return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id)));
|
||||
return state.setIn(['reblogged_by', action.id], ImmutableOrderedSet(action.accounts.map(item => item.id)));
|
||||
case FAVOURITES_FETCH_SUCCESS:
|
||||
return state.setIn(['favourited_by', action.id], ImmutableList(action.accounts.map(item => item.id)));
|
||||
return state.setIn(['favourited_by', action.id], ImmutableOrderedSet(action.accounts.map(item => item.id)));
|
||||
case FOLLOW_REQUESTS_FETCH_SUCCESS:
|
||||
return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
|
||||
return state.setIn(['follow_requests', 'items'], ImmutableOrderedSet(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
|
||||
case FOLLOW_REQUESTS_EXPAND_SUCCESS:
|
||||
return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
|
||||
case FOLLOW_REQUEST_AUTHORIZE_SUCCESS:
|
||||
case FOLLOW_REQUEST_REJECT_SUCCESS:
|
||||
return state.updateIn(['follow_requests', 'items'], list => list.filterNot(item => item === action.id));
|
||||
case BLOCKS_FETCH_SUCCESS:
|
||||
return state.setIn(['blocks', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
|
||||
return state.setIn(['blocks', 'items'], ImmutableOrderedSet(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
|
||||
case BLOCKS_EXPAND_SUCCESS:
|
||||
return state.updateIn(['blocks', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
|
||||
case MUTES_FETCH_SUCCESS:
|
||||
return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
|
||||
return state.setIn(['mutes', 'items'], ImmutableOrderedSet(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
|
||||
case MUTES_EXPAND_SUCCESS:
|
||||
return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
|
||||
case GROUP_MEMBERS_FETCH_SUCCESS:
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue