Merge branch 'master' into glitch-soc/merge-upstream

Conflicts:
	Vagrantfile
	app/javascript/packs/public.js
	app/views/admin/settings/edit.html.haml
	app/views/settings/preferences/show.html.haml
	app/views/settings/profiles/show.html.haml
	config/locales/es.yml
	config/locales/simple_form.en.yml
	config/webpack/configuration.js
	config/webpack/loaders/babel.js
	package.json
	yarn.lock

Split new additions to app/javascript/packs/public.js to
app/javascript/core/settings.js
main
Thibaut Girka 6 years ago
commit 91bef4759f

@ -1,66 +0,0 @@
{
"presets": [
"react",
[
"env",
{
"exclude": ["transform-async-to-generator", "transform-regenerator"],
"loose": true,
"modules": false,
"targets": {
"browsers": ["last 2 versions", "IE >= 11", "iOS >= 9"]
}
}
]
],
"plugins": [
"syntax-dynamic-import",
["transform-object-rest-spread", { "useBuiltIns": true }],
"transform-decorators-legacy",
"transform-class-properties",
[
"react-intl",
{
"messagesDir": "./build/messages"
}
],
"preval"
],
"env": {
"development": {
"plugins": [
"transform-react-jsx-source",
"transform-react-jsx-self"
]
},
"production": {
"plugins": [
"lodash",
[
"transform-react-remove-prop-types",
{
"mode": "remove",
"removeImport": true,
"additionalLibraries": [
"react-immutable-proptypes"
]
}
],
"transform-react-inline-elements",
[
"transform-runtime",
{
"helpers": true,
"polyfill": false,
"regenerator": false
}
]
]
},
"test": {
"plugins": [
"transform-es2015-modules-commonjs"
]
}
}
}

@ -1,2 +1,2 @@
VAGRANT=true VAGRANT=true
LOCAL_DOMAIN=mastodon.dev LOCAL_DOMAIN=mastodon.local

@ -77,6 +77,11 @@ Rails/SkipsModelValidations:
Rails/HttpStatus: Rails/HttpStatus:
Enabled: false Enabled: false
Rails/Exit:
Exclude:
- 'lib/mastodon/*'
- 'lib/cli'
Style/ClassAndModuleChildren: Style/ClassAndModuleChildren:
Enabled: false Enabled: false

@ -34,7 +34,7 @@ gem 'devise', '~> 4.4'
gem 'devise-two-factor', '~> 3.0' gem 'devise-two-factor', '~> 3.0'
group :pam_authentication, optional: true do group :pam_authentication, optional: true do
gem 'devise_pam_authenticatable2', '~> 9.1' gem 'devise_pam_authenticatable2', '~> 9.2'
end end
gem 'net-ldap', '~> 0.10' gem 'net-ldap', '~> 0.10'
@ -88,7 +88,7 @@ gem 'tty-command', '~> 0.8', require: false
gem 'tty-prompt', '~> 0.16', require: false gem 'tty-prompt', '~> 0.16', require: false
gem 'twitter-text', '~> 1.14' gem 'twitter-text', '~> 1.14'
gem 'tzinfo-data', '~> 1.2018' gem 'tzinfo-data', '~> 1.2018'
gem 'webpacker', '~> 3.4' gem 'webpacker', '~> 3.5'
gem 'webpush' gem 'webpush'
gem 'json-ld', '~> 2.2' gem 'json-ld', '~> 2.2'

@ -174,7 +174,7 @@ GEM
devise (~> 4.0) devise (~> 4.0)
railties (< 5.3) railties (< 5.3)
rotp (~> 2.0) rotp (~> 2.0)
devise_pam_authenticatable2 (9.1.1) devise_pam_authenticatable2 (9.2.0)
devise (>= 4.0.0) devise (>= 4.0.0)
rpam2 (~> 4.0) rpam2 (~> 4.0)
diff-lcs (1.3) diff-lcs (1.3)
@ -629,7 +629,7 @@ GEM
addressable (>= 2.3.6) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff hashdiff
webpacker (3.4.3) webpacker (3.5.5)
activesupport (>= 4.2) activesupport (>= 4.2)
rack-proxy (>= 0.6.1) rack-proxy (>= 0.6.1)
railties (>= 4.2) railties (>= 4.2)
@ -671,7 +671,7 @@ DEPENDENCIES
derailed_benchmarks derailed_benchmarks
devise (~> 4.4) devise (~> 4.4)
devise-two-factor (~> 3.0) devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 9.1) devise_pam_authenticatable2 (~> 9.2)
doorkeeper (~> 5.0) doorkeeper (~> 5.0)
dotenv-rails (~> 2.2, < 2.3) dotenv-rails (~> 2.2, < 2.3)
fabrication (~> 2.20) fabrication (~> 2.20)
@ -761,7 +761,7 @@ DEPENDENCIES
twitter-text (~> 1.14) twitter-text (~> 1.14)
tzinfo-data (~> 1.2018) tzinfo-data (~> 1.2018)
webmock (~> 3.3) webmock (~> 3.3)
webpacker (~> 3.4) webpacker (~> 3.5)
webpush webpush
RUBY VERSION RUBY VERSION

14
Vagrantfile vendored

@ -85,6 +85,9 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provider :virtualbox do |vb| config.vm.provider :virtualbox do |vb|
vb.name = "mastodon" vb.name = "mastodon"
vb.customize ["modifyvm", :id, "--memory", "4096"] vb.customize ["modifyvm", :id, "--memory", "4096"]
# Increase the number of CPUs. Uncomment and adjust to
# increase performance
# vb.customize ["modifyvm", :id, "--cpus", "3"]
# Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions. # Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions.
# https://github.com/mitchellh/vagrant/issues/1172 # https://github.com/mitchellh/vagrant/issues/1172
@ -97,19 +100,22 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
end end
config.vm.hostname = "mastodon.dev"
# This uses the vagrant-hostsupdater plugin, and lets you # This uses the vagrant-hostsupdater plugin, and lets you
# access the development site at http://mastodon.dev. # access the development site at http://mastodon.local.
# If you change it, also change it in .env.vagrant before provisioning
# the vagrant server to update the development build.
#
# To install: # To install:
# $ vagrant plugin install vagrant-hostsupdater # $ vagrant plugin install vagrant-hostsupdater
config.vm.hostname = "mastodon.local"
if defined?(VagrantPlugins::HostsUpdater) if defined?(VagrantPlugins::HostsUpdater)
config.vm.network :private_network, ip: "192.168.42.42", nictype: "virtio" config.vm.network :private_network, ip: "192.168.42.42", nictype: "virtio"
config.hostsupdater.remove_on_suspend = false config.hostsupdater.remove_on_suspend = false
end end
if config.vm.networks.any? { |type, options| type == :private_network } if config.vm.networks.any? { |type, options| type == :private_network }
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp'] config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp', 'actimeo=1']
else else
config.vm.synced_folder ".", "/vagrant" config.vm.synced_folder ".", "/vagrant"
end end

@ -133,7 +133,7 @@ class Auth::SessionsController < Devise::SessionsController
def clear_site_data def clear_site_data
return if continue_after? return if continue_after?
# Should be '"*"' but that doen't work in Chrome (neither does '"executionContexts"') # Should be '"*"' but that doesn't work in Chrome (neither does '"executionContexts"')
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Clear-Site-Data # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Clear-Site-Data
response.headers['Clear-Site-Data'] = '"cache", "cookies"' response.headers['Clear-Site-Data'] = '"cache", "cookies"'
end end

@ -4,7 +4,7 @@ module Admin::AccountModerationNotesHelper
def admin_account_link_to(account) def admin_account_link_to(account)
return if account.nil? return if account.nil?
link_to admin_account_path(account.id), class: name_tag_classes(account) do link_to admin_account_path(account.id), class: name_tag_classes(account), title: account.acct do
safe_join([ safe_join([
image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'), image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'),
content_tag(:span, account.acct, class: 'username'), content_tag(:span, account.acct, class: 'username'),
@ -15,7 +15,7 @@ module Admin::AccountModerationNotesHelper
def admin_account_inline_link_to(account) def admin_account_inline_link_to(account)
return if account.nil? return if account.nil?
link_to admin_account_path(account.id), class: name_tag_classes(account, true) do link_to admin_account_path(account.id), class: name_tag_classes(account, true), title: account.acct do
content_tag(:span, account.acct, class: 'username') content_tag(:span, account.acct, class: 'username')
end end
end end

@ -7,13 +7,13 @@ module HomeHelper
} }
end end
def account_link_to(account, button = '') def account_link_to(account, button = '', size: 36, path: nil)
content_tag(:div, class: 'account') do content_tag(:div, class: 'account') do
content_tag(:div, class: 'account__wrapper') do content_tag(:div, class: 'account__wrapper') do
section = if account.nil? section = if account.nil?
content_tag(:div, class: 'account__display-name') do content_tag(:div, class: 'account__display-name') do
content_tag(:div, class: 'account__avatar-wrapper') do content_tag(:div, class: 'account__avatar-wrapper') do
content_tag(:div, '', class: 'account__avatar', style: "background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)})") content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)})")
end + end +
content_tag(:span, class: 'display-name') do content_tag(:span, class: 'display-name') do
content_tag(:strong, t('about.contact_missing')) + content_tag(:strong, t('about.contact_missing')) +
@ -21,9 +21,9 @@ module HomeHelper
end end
end end
else else
link_to(TagManager.instance.url_for(account), class: 'account__display-name') do link_to(path || TagManager.instance.url_for(account), class: 'account__display-name') do
content_tag(:div, class: 'account__avatar-wrapper') do content_tag(:div, class: 'account__avatar-wrapper') do
content_tag(:div, '', class: 'account__avatar', style: "background-image: url(#{account.avatar.url})") content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{account.avatar.url})")
end + end +
content_tag(:span, class: 'display-name') do content_tag(:span, class: 'display-name') do
content_tag(:bdi) do content_tag(:bdi) do
@ -48,4 +48,12 @@ module HomeHelper
'1+' '1+'
end end
end end
def custom_field_classes(field)
if field.verified?
'verified'
else
'emojify'
end
end
end end

@ -50,3 +50,27 @@ delegate(document, '#account_locked', 'change', ({ target }) => {
lock.style.display = 'none'; lock.style.display = 'none';
} }
}); });
delegate(document, '.input-copy input', 'click', ({ target }) => {
target.select();
});
delegate(document, '.input-copy button', 'click', ({ target }) => {
const input = target.parentNode.querySelector('input');
input.focus();
input.select();
try {
if (document.execCommand('copy')) {
input.blur();
target.parentNode.classList.add('copied');
setTimeout(() => {
target.parentNode.classList.remove('copied');
}, 700);
}
} catch (err) {
console.error(err);
}
});

@ -1,8 +1,8 @@
export const DROPDOWN_MENU_OPEN = 'DROPDOWN_MENU_OPEN'; export const DROPDOWN_MENU_OPEN = 'DROPDOWN_MENU_OPEN';
export const DROPDOWN_MENU_CLOSE = 'DROPDOWN_MENU_CLOSE'; export const DROPDOWN_MENU_CLOSE = 'DROPDOWN_MENU_CLOSE';
export function openDropdownMenu(id, placement) { export function openDropdownMenu(id, placement, keyboard) {
return { type: DROPDOWN_MENU_OPEN, id, placement }; return { type: DROPDOWN_MENU_OPEN, id, placement, keyboard };
} }
export function closeDropdownMenu(id) { export function closeDropdownMenu(id) {

@ -3,7 +3,6 @@
exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] = ` exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] = `
<button <button
className="button button-secondary" className="button button-secondary"
disabled={undefined}
onClick={[Function]} onClick={[Function]}
style={ style={
Object { Object {
@ -18,7 +17,6 @@ exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] =
exports[`<Button /> renders a button element 1`] = ` exports[`<Button /> renders a button element 1`] = `
<button <button
className="button" className="button"
disabled={undefined}
onClick={[Function]} onClick={[Function]}
style={ style={
Object { Object {
@ -48,7 +46,6 @@ exports[`<Button /> renders a disabled attribute if props.disabled given 1`] = `
exports[`<Button /> renders class="button--block" if props.block given 1`] = ` exports[`<Button /> renders class="button--block" if props.block given 1`] = `
<button <button
className="button button--block" className="button button--block"
disabled={undefined}
onClick={[Function]} onClick={[Function]}
style={ style={
Object { Object {
@ -63,7 +60,6 @@ exports[`<Button /> renders class="button--block" if props.block given 1`] = `
exports[`<Button /> renders the children 1`] = ` exports[`<Button /> renders the children 1`] = `
<button <button
className="button" className="button"
disabled={undefined}
onClick={[Function]} onClick={[Function]}
style={ style={
Object { Object {
@ -82,7 +78,6 @@ exports[`<Button /> renders the children 1`] = `
exports[`<Button /> renders the given text 1`] = ` exports[`<Button /> renders the given text 1`] = `
<button <button
className="button" className="button"
disabled={undefined}
onClick={[Function]} onClick={[Function]}
style={ style={
Object { Object {
@ -99,7 +94,6 @@ exports[`<Button /> renders the given text 1`] = `
exports[`<Button /> renders the props.text instead of children 1`] = ` exports[`<Button /> renders the props.text instead of children 1`] = `
<button <button
className="button" className="button"
disabled={undefined}
onClick={[Function]} onClick={[Function]}
style={ style={
Object { Object {

@ -19,8 +19,8 @@ const messages = defineMessages({
unmute_notifications: { id: 'account.unmute_notifications', defaultMessage: 'Unmute notifications from @{name}' }, unmute_notifications: { id: 'account.unmute_notifications', defaultMessage: 'Unmute notifications from @{name}' },
}); });
@injectIntl export default @injectIntl
export default class Account extends ImmutablePureComponent { class Account extends ImmutablePureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,

@ -10,8 +10,8 @@ const messages = defineMessages({
moveRight: { id: 'column_header.moveRight_settings', defaultMessage: 'Move column to the right' }, moveRight: { id: 'column_header.moveRight_settings', defaultMessage: 'Move column to the right' },
}); });
@injectIntl export default @injectIntl
export default class ColumnHeader extends React.PureComponent { class ColumnHeader extends React.PureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -8,8 +8,8 @@ const messages = defineMessages({
unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
}); });
@injectIntl export default @injectIntl
export default class Account extends ImmutablePureComponent { class Account extends ImmutablePureComponent {
static propTypes = { static propTypes = {
domain: PropTypes.string, domain: PropTypes.string,

@ -23,6 +23,7 @@ class DropdownMenu extends React.PureComponent {
placement: PropTypes.string, placement: PropTypes.string,
arrowOffsetLeft: PropTypes.string, arrowOffsetLeft: PropTypes.string,
arrowOffsetTop: PropTypes.string, arrowOffsetTop: PropTypes.string,
openedViaKeyboard: PropTypes.bool,
}; };
static defaultProps = { static defaultProps = {
@ -42,13 +43,15 @@ class DropdownMenu extends React.PureComponent {
componentDidMount () { componentDidMount () {
document.addEventListener('click', this.handleDocumentClick, false); document.addEventListener('click', this.handleDocumentClick, false);
document.addEventListener('keydown', this.handleKeyDown, false);
document.addEventListener('touchend', this.handleDocumentClick, listenerOptions); document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);
if (this.focusedItem) this.focusedItem.focus(); if (this.focusedItem && this.props.openedViaKeyboard) this.focusedItem.focus();
this.setState({ mounted: true }); this.setState({ mounted: true });
} }
componentWillUnmount () { componentWillUnmount () {
document.removeEventListener('click', this.handleDocumentClick, false); document.removeEventListener('click', this.handleDocumentClick, false);
document.removeEventListener('keydown', this.handleKeyDown, false);
document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions); document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);
} }
@ -62,13 +65,10 @@ class DropdownMenu extends React.PureComponent {
handleKeyDown = e => { handleKeyDown = e => {
const items = Array.from(this.node.getElementsByTagName('a')); const items = Array.from(this.node.getElementsByTagName('a'));
const index = items.indexOf(e.currentTarget); const index = items.indexOf(document.activeElement);
let element; let element;
switch(e.key) { switch(e.key) {
case 'Enter':
this.handleClick(e);
break;
case 'ArrowDown': case 'ArrowDown':
element = items[index+1]; element = items[index+1];
if (element) { if (element) {
@ -96,6 +96,12 @@ class DropdownMenu extends React.PureComponent {
} }
} }
handleItemKeyDown = e => {
if (e.key === 'Enter') {
this.handleClick(e);
}
}
handleClick = e => { handleClick = e => {
const i = Number(e.currentTarget.getAttribute('data-index')); const i = Number(e.currentTarget.getAttribute('data-index'));
const { action, to } = this.props.items[i]; const { action, to } = this.props.items[i];
@ -120,7 +126,7 @@ class DropdownMenu extends React.PureComponent {
return ( return (
<li className='dropdown-menu__item' key={`${text}-${i}`}> <li className='dropdown-menu__item' key={`${text}-${i}`}>
<a href={href} target='_blank' rel='noopener' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyDown={this.handleKeyDown} data-index={i}> <a href={href} target='_blank' rel='noopener' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyDown={this.handleItemKeyDown} data-index={i}>
{text} {text}
</a> </a>
</li> </li>
@ -170,6 +176,7 @@ export default class Dropdown extends React.PureComponent {
onClose: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired,
dropdownPlacement: PropTypes.string, dropdownPlacement: PropTypes.string,
openDropdownId: PropTypes.number, openDropdownId: PropTypes.number,
openedViaKeyboard: PropTypes.bool,
}; };
static defaultProps = { static defaultProps = {
@ -180,14 +187,14 @@ export default class Dropdown extends React.PureComponent {
id: id++, id: id++,
}; };
handleClick = ({ target }) => { handleClick = ({ target, type }) => {
if (this.state.id === this.props.openDropdownId) { if (this.state.id === this.props.openDropdownId) {
this.handleClose(); this.handleClose();
} else { } else {
const { top } = target.getBoundingClientRect(); const { top } = target.getBoundingClientRect();
const placement = top * 2 < innerHeight ? 'bottom' : 'top'; const placement = top * 2 < innerHeight ? 'bottom' : 'top';
this.props.onOpen(this.state.id, this.handleItemClick, placement); this.props.onOpen(this.state.id, this.handleItemClick, placement, type !== 'click');
} }
} }
@ -197,6 +204,11 @@ export default class Dropdown extends React.PureComponent {
handleKeyDown = e => { handleKeyDown = e => {
switch(e.key) { switch(e.key) {
case ' ':
case 'Enter':
this.handleClick(e);
e.preventDefault();
break;
case 'Escape': case 'Escape':
this.handleClose(); this.handleClose();
break; break;
@ -233,7 +245,7 @@ export default class Dropdown extends React.PureComponent {
} }
render () { render () {
const { icon, items, size, title, disabled, dropdownPlacement, openDropdownId } = this.props; const { icon, items, size, title, disabled, dropdownPlacement, openDropdownId, openedViaKeyboard } = this.props;
const open = this.state.id === openDropdownId; const open = this.state.id === openDropdownId;
return ( return (
@ -249,7 +261,7 @@ export default class Dropdown extends React.PureComponent {
/> />
<Overlay show={open} placement={dropdownPlacement} target={this.findTarget}> <Overlay show={open} placement={dropdownPlacement} target={this.findTarget}>
<DropdownMenu items={items} onClose={this.handleClose} /> <DropdownMenu items={items} onClose={this.handleClose} openedViaKeyboard={openedViaKeyboard} />
</Overlay> </Overlay>
</div> </div>
); );

@ -6,8 +6,8 @@ const messages = defineMessages({
load_more: { id: 'status.load_more', defaultMessage: 'Load more' }, load_more: { id: 'status.load_more', defaultMessage: 'Load more' },
}); });
@injectIntl export default @injectIntl
export default class LoadGap extends React.PureComponent { class LoadGap extends React.PureComponent {
static propTypes = { static propTypes = {
disabled: PropTypes.bool, disabled: PropTypes.bool,

@ -179,8 +179,8 @@ class Item extends React.PureComponent {
} }
@injectIntl export default @injectIntl
export default class MediaGallery extends React.PureComponent { class MediaGallery extends React.PureComponent {
static propTypes = { static propTypes = {
sensitive: PropTypes.bool, sensitive: PropTypes.bool,

@ -86,8 +86,8 @@ export const timeAgoString = (intl, date, now, year) => {
return relativeTime; return relativeTime;
}; };
@injectIntl export default @injectIntl
export default class RelativeTimestamp extends React.Component { class RelativeTimestamp extends React.Component {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,

@ -35,8 +35,8 @@ export const textForScreenReader = (intl, status, rebloggedByText = false) => {
return values.join(', '); return values.join(', ');
}; };
@injectIntl export default @injectIntl
export default class Status extends ImmutablePureComponent { class Status extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -42,8 +42,8 @@ const obfuscatedCount = count => {
} }
}; };
@injectIntl export default @injectIntl
export default class StatusActionBar extends ImmutablePureComponent { class StatusActionBar extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -8,15 +8,16 @@ const mapStateToProps = state => ({
isModalOpen: state.get('modal').modalType === 'ACTIONS', isModalOpen: state.get('modal').modalType === 'ACTIONS',
dropdownPlacement: state.getIn(['dropdown_menu', 'placement']), dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),
openDropdownId: state.getIn(['dropdown_menu', 'openId']), openDropdownId: state.getIn(['dropdown_menu', 'openId']),
openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),
}); });
const mapDispatchToProps = (dispatch, { status, items }) => ({ const mapDispatchToProps = (dispatch, { status, items }) => ({
onOpen(id, onItemClick, dropdownPlacement) { onOpen(id, onItemClick, dropdownPlacement, keyboard) {
dispatch(isUserTouching() ? openModal('ACTIONS', { dispatch(isUserTouching() ? openModal('ACTIONS', {
status, status,
actions: items, actions: items,
onClick: onItemClick, onClick: onItemClick,
}) : openDropdownMenu(id, dropdownPlacement)); }) : openDropdownMenu(id, dropdownPlacement, keyboard));
}, },
onClose(id) { onClose(id) {
dispatch(closeModal()); dispatch(closeModal());

@ -2,7 +2,7 @@ import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import DropdownMenuContainer from '../../../containers/dropdown_menu_container'; import DropdownMenuContainer from '../../../containers/dropdown_menu_container';
import { Link } from 'react-router-dom'; import { NavLink } from 'react-router-dom';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { me } from '../../../initial_state'; import { me } from '../../../initial_state';
import { shortNumberFormat } from '../../../utils/numbers'; import { shortNumberFormat } from '../../../utils/numbers';
@ -36,8 +36,8 @@ const messages = defineMessages({
unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' }, unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' },
}); });
@injectIntl export default @injectIntl
export default class ActionBar extends React.PureComponent { class ActionBar extends React.PureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,
@ -60,6 +60,13 @@ export default class ActionBar extends React.PureComponent {
}); });
} }
isStatusesPageActive = (match, location) => {
if (!match) {
return false;
}
return !location.pathname.match(/\/(followers|following)\/?$/);
}
render () { render () {
const { account, intl } = this.props; const { account, intl } = this.props;
@ -147,20 +154,20 @@ export default class ActionBar extends React.PureComponent {
<div className='account__action-bar'> <div className='account__action-bar'>
<div className='account__action-bar-links'> <div className='account__action-bar-links'>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}`} title={intl.formatNumber(account.get('statuses_count'))}> <NavLink isActive={this.isStatusesPageActive} activeClassName='active' className='account__action-bar__tab' to={`/accounts/${account.get('id')}`} title={intl.formatNumber(account.get('statuses_count'))}>
<FormattedMessage id='account.posts' defaultMessage='Toots' /> <FormattedMessage id='account.posts' defaultMessage='Toots' />
<strong>{shortNumberFormat(account.get('statuses_count'))}</strong> <strong>{shortNumberFormat(account.get('statuses_count'))}</strong>
</Link> </NavLink>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/following`} title={intl.formatNumber(account.get('following_count'))}> <NavLink exact activeClassName='active' className='account__action-bar__tab' to={`/accounts/${account.get('id')}/following`} title={intl.formatNumber(account.get('following_count'))}>
<FormattedMessage id='account.follows' defaultMessage='Follows' /> <FormattedMessage id='account.follows' defaultMessage='Follows' />
<strong>{shortNumberFormat(account.get('following_count'))}</strong> <strong>{shortNumberFormat(account.get('following_count'))}</strong>
</Link> </NavLink>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/followers`} title={intl.formatNumber(account.get('followers_count'))}> <NavLink exact activeClassName='active' className='account__action-bar__tab' to={`/accounts/${account.get('id')}/followers`} title={intl.formatNumber(account.get('followers_count'))}>
<FormattedMessage id='account.followers' defaultMessage='Followers' /> <FormattedMessage id='account.followers' defaultMessage='Followers' />
<strong>{shortNumberFormat(account.get('followers_count'))}</strong> <strong>{shortNumberFormat(account.get('followers_count'))}</strong>
</Link> </NavLink>
</div> </div>
<div className='account__action-bar-dropdown'> <div className='account__action-bar-dropdown'>

@ -15,8 +15,18 @@ const messages = defineMessages({
requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' },
unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
linkVerifiedOn: { id: 'account.link_verified_on', defaultMessage: 'Ownership of this link was checked on {date}' },
}); });
const dateFormatOptions = {
month: 'short',
day: 'numeric',
year: 'numeric',
hour12: false,
hour: '2-digit',
minute: '2-digit',
};
class Avatar extends ImmutablePureComponent { class Avatar extends ImmutablePureComponent {
static propTypes = { static propTypes = {
@ -65,8 +75,8 @@ class Avatar extends ImmutablePureComponent {
} }
@injectIntl export default @injectIntl
export default class Header extends ImmutablePureComponent { class Header extends ImmutablePureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map, account: ImmutablePropTypes.map,
@ -163,7 +173,10 @@ export default class Header extends ImmutablePureComponent {
{fields.map((pair, i) => ( {fields.map((pair, i) => (
<dl key={i}> <dl key={i}>
<dt dangerouslySetInnerHTML={{ __html: pair.get('name_emojified') }} title={pair.get('name')} /> <dt dangerouslySetInnerHTML={{ __html: pair.get('name_emojified') }} title={pair.get('name')} />
<dd dangerouslySetInnerHTML={{ __html: pair.get('value_emojified') }} title={pair.get('value_plain')} />
<dd className={pair.get('verified_at') && 'verified'} title={pair.get('value_plain')}>
{pair.get('verified_at') && <span title={intl.formatMessage(messages.linkVerifiedOn, { date: intl.formatDate(pair.get('verified_at'), dateFormatOptions) })}><i className='fa fa-check verified__mark' /></span>} <span dangerouslySetInnerHTML={{ __html: pair.get('value_emojified') }} />
</dd>
</dl> </dl>
))} ))}
</div> </div>

@ -43,8 +43,8 @@ class LoadMoreMedia extends ImmutablePureComponent {
} }
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class AccountGallery extends ImmutablePureComponent { class AccountGallery extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -23,8 +23,8 @@ const mapStateToProps = (state, { params: { accountId }, withReplies = false })
}; };
}; };
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class AccountTimeline extends ImmutablePureComponent { class AccountTimeline extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -20,9 +20,9 @@ const mapStateToProps = state => ({
accountIds: state.getIn(['user_lists', 'blocks', 'items']), accountIds: state.getIn(['user_lists', 'blocks', 'items']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Blocks extends ImmutablePureComponent { class Blocks extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -4,8 +4,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { injectIntl, FormattedMessage } from 'react-intl'; import { injectIntl, FormattedMessage } from 'react-intl';
import SettingToggle from '../../notifications/components/setting_toggle'; import SettingToggle from '../../notifications/components/setting_toggle';
@injectIntl export default @injectIntl
export default class ColumnSettings extends React.PureComponent { class ColumnSettings extends React.PureComponent {
static propTypes = { static propTypes = {
settings: ImmutablePropTypes.map.isRequired, settings: ImmutablePropTypes.map.isRequired,

@ -25,9 +25,9 @@ const mapStateToProps = (state, { onlyMedia, columnId }) => {
}; };
}; };
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class CommunityTimeline extends React.PureComponent { class CommunityTimeline extends React.PureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -17,8 +17,8 @@ const messages = defineMessages({
filters: { id: 'navigation_bar.filters', defaultMessage: 'Muted words' }, filters: { id: 'navigation_bar.filters', defaultMessage: 'Muted words' },
}); });
@injectIntl export default @injectIntl
export default class ActionBar extends React.PureComponent { class ActionBar extends React.PureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,

@ -28,8 +28,8 @@ const messages = defineMessages({
publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' }, publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' },
}); });
@injectIntl export default @injectIntl
export default class ComposeForm extends ImmutablePureComponent { class ComposeForm extends ImmutablePureComponent {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,

@ -261,6 +261,7 @@ class EmojiPickerMenu extends React.PureComponent {
skin={skinTone} skin={skinTone}
showPreview={false} showPreview={false}
backgroundImageFn={backgroundImageFn} backgroundImageFn={backgroundImageFn}
autoFocus
emojiTooltip emojiTooltip
/> />
@ -277,8 +278,8 @@ class EmojiPickerMenu extends React.PureComponent {
} }
@injectIntl export default @injectIntl
export default class EmojiPickerDropdown extends React.PureComponent { class EmojiPickerDropdown extends React.PureComponent {
static propTypes = { static propTypes = {
custom_emojis: ImmutablePropTypes.list, custom_emojis: ImmutablePropTypes.list,

@ -149,8 +149,8 @@ class PrivacyDropdownMenu extends React.PureComponent {
} }
@injectIntl export default @injectIntl
export default class PrivacyDropdown extends React.PureComponent { class PrivacyDropdown extends React.PureComponent {
static propTypes = { static propTypes = {
isUserTouching: PropTypes.func, isUserTouching: PropTypes.func,

@ -12,8 +12,8 @@ const messages = defineMessages({
cancel: { id: 'reply_indicator.cancel', defaultMessage: 'Cancel' }, cancel: { id: 'reply_indicator.cancel', defaultMessage: 'Cancel' },
}); });
@injectIntl export default @injectIntl
export default class ReplyIndicator extends ImmutablePureComponent { class ReplyIndicator extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -43,8 +43,8 @@ class SearchPopout extends React.PureComponent {
} }
@injectIntl export default @injectIntl
export default class Search extends React.PureComponent { class Search extends React.PureComponent {
static propTypes = { static propTypes = {
value: PropTypes.string.isRequired, value: PropTypes.string.isRequired,

@ -11,8 +11,8 @@ const messages = defineMessages({
description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' }, description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
}); });
@injectIntl export default @injectIntl
export default class Upload extends ImmutablePureComponent { class Upload extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,

@ -23,9 +23,9 @@ const iconStyle = {
lineHeight: '27px', lineHeight: '27px',
}; };
@connect(makeMapStateToProps) export default @connect(makeMapStateToProps)
@injectIntl @injectIntl
export default class UploadButton extends ImmutablePureComponent { class UploadButton extends ImmutablePureComponent {
static propTypes = { static propTypes = {
disabled: PropTypes.bool, disabled: PropTypes.bool,

@ -30,9 +30,9 @@ const mapStateToProps = (state, ownProps) => ({
showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : ownProps.isSearchPage, showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : ownProps.isSearchPage,
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Compose extends React.PureComponent { class Compose extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -170,7 +170,7 @@ export const urlRegex = (function() {
')' + ')' +
'\\)', '\\)',
'i'); 'i');
// Valid end-of-path chracters (so /foo. does not gobble the period). // Valid end-of-path characters (so /foo. does not gobble the period).
// 1. Allow =&# for empty URL parameters and other URL-join artifacts // 1. Allow =&# for empty URL parameters and other URL-join artifacts
regexen.validUrlPathEndingChars = regexSupplant(/[^#{spaces_group}\(\)\?!\*';:=\,\.\$%\[\]#{pd}~&\|@]|(?:#{validUrlBalancedParens})/i); regexen.validUrlPathEndingChars = regexSupplant(/[^#{spaces_group}\(\)\?!\*';:=\,\.\$%\[\]#{pd}~&\|@]|(?:#{validUrlBalancedParens})/i);
// Allow @ in a url, but only in the middle. Catch things like http://example.com/@user/ // Allow @ in a url, but only in the middle. Catch things like http://example.com/@user/

@ -9,8 +9,8 @@ const messages = defineMessages({
settings: { id: 'home.settings', defaultMessage: 'Column settings' }, settings: { id: 'home.settings', defaultMessage: 'Column settings' },
}); });
@injectIntl export default @injectIntl
export default class ColumnSettings extends React.PureComponent { class ColumnSettings extends React.PureComponent {
static propTypes = { static propTypes = {
settings: ImmutablePropTypes.map.isRequired, settings: ImmutablePropTypes.map.isRequired,

@ -17,9 +17,9 @@ const mapStateToProps = state => ({
hasUnread: state.getIn(['timelines', 'direct', 'unread']) > 0, hasUnread: state.getIn(['timelines', 'direct', 'unread']) > 0,
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class DirectTimeline extends React.PureComponent { class DirectTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -21,9 +21,9 @@ const mapStateToProps = state => ({
domains: state.getIn(['domain_lists', 'blocks', 'items']), domains: state.getIn(['domain_lists', 'blocks', 'items']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Blocks extends ImmutablePureComponent { class Blocks extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -21,9 +21,9 @@ const mapStateToProps = state => ({
hasMore: !!state.getIn(['status_lists', 'favourites', 'next']), hasMore: !!state.getIn(['status_lists', 'favourites', 'next']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Favourites extends ImmutablePureComponent { class Favourites extends ImmutablePureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -15,8 +15,8 @@ const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]), accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class Favourites extends ImmutablePureComponent { class Favourites extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -13,8 +13,8 @@ const messages = defineMessages({
reject: { id: 'follow_request.reject', defaultMessage: 'Reject' }, reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },
}); });
@injectIntl export default @injectIntl
export default class AccountAuthorize extends ImmutablePureComponent { class AccountAuthorize extends ImmutablePureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,

@ -20,9 +20,9 @@ const mapStateToProps = state => ({
accountIds: state.getIn(['user_lists', 'follow_requests', 'items']), accountIds: state.getIn(['user_lists', 'follow_requests', 'items']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class FollowRequests extends ImmutablePureComponent { class FollowRequests extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -22,8 +22,8 @@ const mapStateToProps = (state, props) => ({
hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']), hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class Followers extends ImmutablePureComponent { class Followers extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -22,8 +22,8 @@ const mapStateToProps = (state, props) => ({
hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']), hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class Following extends ImmutablePureComponent { class Following extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -53,9 +53,9 @@ const badgeDisplay = (number, limit) => {
} }
}; };
@connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl @injectIntl
export default class GettingStarted extends ImmutablePureComponent { class GettingStarted extends ImmutablePureComponent {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,

@ -13,8 +13,8 @@ const mapStateToProps = (state, props) => ({
hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0, hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0,
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class HashtagTimeline extends React.PureComponent { class HashtagTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -4,8 +4,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { injectIntl, FormattedMessage } from 'react-intl'; import { injectIntl, FormattedMessage } from 'react-intl';
import SettingToggle from '../../notifications/components/setting_toggle'; import SettingToggle from '../../notifications/components/setting_toggle';
@injectIntl export default @injectIntl
export default class ColumnSettings extends React.PureComponent { class ColumnSettings extends React.PureComponent {
static propTypes = { static propTypes = {
settings: ImmutablePropTypes.map.isRequired, settings: ImmutablePropTypes.map.isRequired,

@ -19,9 +19,9 @@ const mapStateToProps = state => ({
isPartial: state.getIn(['timelines', 'home', 'items', 0], null) === null, isPartial: state.getIn(['timelines', 'home', 'items', 0], null) === null,
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class HomeTimeline extends React.PureComponent { class HomeTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -9,8 +9,8 @@ const messages = defineMessages({
heading: { id: 'keyboard_shortcuts.heading', defaultMessage: 'Keyboard Shortcuts' }, heading: { id: 'keyboard_shortcuts.heading', defaultMessage: 'Keyboard Shortcuts' },
}); });
@injectIntl export default @injectIntl
export default class KeyboardShortcuts extends ImmutablePureComponent { class KeyboardShortcuts extends ImmutablePureComponent {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,

@ -31,9 +31,9 @@ const mapDispatchToProps = (dispatch, { accountId }) => ({
onAdd: () => dispatch(addToListEditor(accountId)), onAdd: () => dispatch(addToListEditor(accountId)),
}); });
@connect(makeMapStateToProps, mapDispatchToProps) export default @connect(makeMapStateToProps, mapDispatchToProps)
@injectIntl @injectIntl
export default class Account extends ImmutablePureComponent { class Account extends ImmutablePureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,

@ -19,9 +19,9 @@ const mapDispatchToProps = dispatch => ({
onChange: value => dispatch(changeListSuggestions(value)), onChange: value => dispatch(changeListSuggestions(value)),
}); });
@connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl @injectIntl
export default class Search extends React.PureComponent { class Search extends React.PureComponent {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,

@ -22,9 +22,9 @@ const mapDispatchToProps = dispatch => ({
onReset: () => dispatch(resetListEditor()), onReset: () => dispatch(resetListEditor()),
}); });
@connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl @injectIntl
export default class ListEditor extends ImmutablePureComponent { class ListEditor extends ImmutablePureComponent {
static propTypes = { static propTypes = {
listId: PropTypes.string.isRequired, listId: PropTypes.string.isRequired,

@ -25,9 +25,9 @@ const mapStateToProps = (state, props) => ({
hasUnread: state.getIn(['timelines', `list:${props.params.id}`, 'unread']) > 0, hasUnread: state.getIn(['timelines', `list:${props.params.id}`, 'unread']) > 0,
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class ListTimeline extends React.PureComponent { class ListTimeline extends React.PureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -20,9 +20,9 @@ const mapDispatchToProps = dispatch => ({
onSubmit: () => dispatch(submitListEditor(true)), onSubmit: () => dispatch(submitListEditor(true)),
}); });
@connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl @injectIntl
export default class NewListForm extends React.PureComponent { class NewListForm extends React.PureComponent {
static propTypes = { static propTypes = {
value: PropTypes.string.isRequired, value: PropTypes.string.isRequired,

@ -31,9 +31,9 @@ const mapStateToProps = state => ({
lists: getOrderedLists(state), lists: getOrderedLists(state),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Lists extends ImmutablePureComponent { class Lists extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -20,9 +20,9 @@ const mapStateToProps = state => ({
accountIds: state.getIn(['user_lists', 'mutes', 'items']), accountIds: state.getIn(['user_lists', 'mutes', 'items']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Mutes extends ImmutablePureComponent { class Mutes extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -16,8 +16,8 @@ const notificationForScreenReader = (intl, message, timestamp) => {
return output.join(', '); return output.join(', ');
}; };
@injectIntl export default @injectIntl
export default class Notification extends ImmutablePureComponent { class Notification extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -31,9 +31,9 @@ const mapStateToProps = state => ({
hasMore: state.getIn(['notifications', 'hasMore']), hasMore: state.getIn(['notifications', 'hasMore']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class Notifications extends React.PureComponent { class Notifications extends React.PureComponent {
static propTypes = { static propTypes = {
columnId: PropTypes.string, columnId: PropTypes.string,

@ -18,9 +18,9 @@ const mapStateToProps = state => ({
hasMore: !!state.getIn(['status_lists', 'pins', 'next']), hasMore: !!state.getIn(['status_lists', 'pins', 'next']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class PinnedStatuses extends ImmutablePureComponent { class PinnedStatuses extends ImmutablePureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -25,9 +25,9 @@ const mapStateToProps = (state, { onlyMedia, columnId }) => {
}; };
}; };
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class PublicTimeline extends React.PureComponent { class PublicTimeline extends React.PureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -15,8 +15,8 @@ const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]), accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
export default class Reblogs extends ImmutablePureComponent { class Reblogs extends ImmutablePureComponent {
static propTypes = { static propTypes = {
params: PropTypes.object.isRequired, params: PropTypes.object.isRequired,

@ -12,9 +12,9 @@ const messages = defineMessages({
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' }, title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
}); });
@connect() export default @connect()
@injectIntl @injectIntl
export default class CommunityTimeline extends React.PureComponent { class CommunityTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -7,8 +7,8 @@ import Column from '../../../components/column';
import ColumnHeader from '../../../components/column_header'; import ColumnHeader from '../../../components/column_header';
import { connectHashtagStream } from '../../../actions/streaming'; import { connectHashtagStream } from '../../../actions/streaming';
@connect() export default @connect()
export default class HashtagTimeline extends React.PureComponent { class HashtagTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -12,9 +12,9 @@ const messages = defineMessages({
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' }, title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
}); });
@connect() export default @connect()
@injectIntl @injectIntl
export default class PublicTimeline extends React.PureComponent { class PublicTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,

@ -28,8 +28,8 @@ const messages = defineMessages({
embed: { id: 'status.embed', defaultMessage: 'Embed' }, embed: { id: 'status.embed', defaultMessage: 'Embed' },
}); });
@injectIntl export default @injectIntl
export default class ActionBar extends React.PureComponent { class ActionBar extends React.PureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -104,9 +104,9 @@ const makeMapStateToProps = () => {
return mapStateToProps; return mapStateToProps;
}; };
@injectIntl export default @injectIntl
@connect(makeMapStateToProps) @connect(makeMapStateToProps)
export default class Status extends ImmutablePureComponent { class Status extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -13,8 +13,8 @@ const messages = defineMessages({
reblog: { id: 'status.reblog', defaultMessage: 'Boost' }, reblog: { id: 'status.reblog', defaultMessage: 'Boost' },
}); });
@injectIntl export default @injectIntl
export default class BoostModal extends ImmutablePureComponent { class BoostModal extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object, router: PropTypes.object,

@ -35,8 +35,8 @@ const messages = defineMessages({
const shouldHideFAB = path => path.match(/^\/statuses\//); const shouldHideFAB = path => path.match(/^\/statuses\//);
@component => injectIntl(component, { withRef: true }) export default @(component => injectIntl(component, { withRef: true }))
export default class ColumnsArea extends ImmutablePureComponent { class ColumnsArea extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object.isRequired, router: PropTypes.object.isRequired,

@ -3,8 +3,8 @@ import PropTypes from 'prop-types';
import { injectIntl, FormattedMessage } from 'react-intl'; import { injectIntl, FormattedMessage } from 'react-intl';
import Button from '../../../components/button'; import Button from '../../../components/button';
@injectIntl export default @injectIntl
export default class ConfirmationModal extends React.PureComponent { class ConfirmationModal extends React.PureComponent {
static propTypes = { static propTypes = {
message: PropTypes.node.isRequired, message: PropTypes.node.isRequired,

@ -4,8 +4,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage, injectIntl } from 'react-intl'; import { FormattedMessage, injectIntl } from 'react-intl';
import api from '../../../api'; import api from '../../../api';
@injectIntl export default @injectIntl
export default class EmbedModal extends ImmutablePureComponent { class EmbedModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
url: PropTypes.string.isRequired, url: PropTypes.string.isRequired,

@ -19,8 +19,8 @@ const mapDispatchToProps = (dispatch, { id }) => ({
}); });
@connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
export default class FocalPointModal extends ImmutablePureComponent { class FocalPointModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,

@ -18,8 +18,8 @@ const messages = defineMessages({
export const previewState = 'previewMediaModal'; export const previewState = 'previewMediaModal';
@injectIntl export default @injectIntl
export default class MediaModal extends ImmutablePureComponent { class MediaModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.list.isRequired, media: ImmutablePropTypes.list.isRequired,
@ -149,7 +149,7 @@ export default class MediaModal extends ImmutablePureComponent {
startTime={time || 0} startTime={time || 0}
onCloseVideo={onClose} onCloseVideo={onClose}
detailed detailed
description={image.get('description')} alt={image.get('description')}
key={image.get('url')} key={image.get('url')}
/> />
); );

@ -33,9 +33,9 @@ const mapDispatchToProps = dispatch => {
}; };
}; };
@connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl @injectIntl
export default class MuteModal extends React.PureComponent { class MuteModal extends React.PureComponent {
static propTypes = { static propTypes = {
isSubmitting: PropTypes.bool.isRequired, isSubmitting: PropTypes.bool.isRequired,

@ -177,9 +177,9 @@ const mapStateToProps = state => ({
domain: state.getIn(['meta', 'domain']), domain: state.getIn(['meta', 'domain']),
}); });
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
export default class OnboardingModal extends React.PureComponent { class OnboardingModal extends React.PureComponent {
static propTypes = { static propTypes = {
onClose: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired,

@ -37,9 +37,9 @@ const makeMapStateToProps = () => {
return mapStateToProps; return mapStateToProps;
}; };
@connect(makeMapStateToProps) export default @connect(makeMapStateToProps)
@injectIntl @injectIntl
export default class ReportModal extends ImmutablePureComponent { class ReportModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
isSubmitting: PropTypes.bool, isSubmitting: PropTypes.bool,
@ -106,6 +106,7 @@ export default class ReportModal extends ImmutablePureComponent {
onChange={this.handleCommentChange} onChange={this.handleCommentChange}
onKeyDown={this.handleKeyDown} onKeyDown={this.handleKeyDown}
disabled={isSubmitting} disabled={isSubmitting}
autoFocus
/> />
{domain && ( {domain && (

@ -24,9 +24,9 @@ export function getLink (index) {
return links[index].props.to; return links[index].props.to;
} }
@injectIntl export default @injectIntl
@withRouter @withRouter
export default class TabsBar extends React.PureComponent { class TabsBar extends React.PureComponent {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,

@ -24,7 +24,7 @@ export default class VideoModal extends ImmutablePureComponent {
startTime={time} startTime={time}
onCloseVideo={onClose} onCloseVideo={onClose}
detailed detailed
description={media.get('description')} alt={media.get('description')}
/> />
</div> </div>
</div> </div>

@ -137,6 +137,7 @@ export default class ZoomableImage extends React.PureComponent {
role='presentation' role='presentation'
ref={this.setImageRef} ref={this.setImageRef}
alt={alt} alt={alt}
title={alt}
src={src} src={src}
style={{ style={{
transform: `scale(${scale})`, transform: `scale(${scale})`,

@ -187,10 +187,10 @@ class SwitchingColumnsArea extends React.PureComponent {
} }
@connect(mapStateToProps) export default @connect(mapStateToProps)
@injectIntl @injectIntl
@withRouter @withRouter
export default class UI extends React.PureComponent { class UI extends React.PureComponent {
static contextTypes = { static contextTypes = {
router: PropTypes.object.isRequired, router: PropTypes.object.isRequired,

@ -26,7 +26,7 @@ WrappedSwitch.propTypes = {
children: PropTypes.node, children: PropTypes.node,
}; };
// Small Wraper to extract the params from the route and pass // Small Wrapper to extract the params from the route and pass
// them to the rendered component, together with the content to // them to the rendered component, together with the content to
// be rendered inside (the children) // be rendered inside (the children)
export class WrappedRoute extends React.Component { export class WrappedRoute extends React.Component {

@ -84,8 +84,8 @@ export const getPointerPosition = (el, event) => {
return position; return position;
}; };
@injectIntl export default @injectIntl
export default class Video extends React.PureComponent { class Video extends React.PureComponent {
static propTypes = { static propTypes = {
preview: PropTypes.string, preview: PropTypes.string,
@ -252,11 +252,12 @@ export default class Video extends React.PureComponent {
} }
handleOpenVideo = () => { handleOpenVideo = () => {
const { src, preview, width, height } = this.props; const { src, preview, width, height, alt } = this.props;
const media = fromJS({ const media = fromJS({
type: 'video', type: 'video',
url: src, url: src,
preview_url: preview, preview_url: preview,
description: alt,
width, width,
height, height,
}); });

@ -15,6 +15,7 @@
"account.follows.empty": "هذا المستخدِم لا يتبع أحدًا بعد.", "account.follows.empty": "هذا المستخدِم لا يتبع أحدًا بعد.",
"account.follows_you": "يتابعك", "account.follows_you": "يتابعك",
"account.hide_reblogs": "إخفاء ترقيات @{name}", "account.hide_reblogs": "إخفاء ترقيات @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "وسائط", "account.media": "وسائط",
"account.mention": "أُذكُر @{name}", "account.mention": "أُذكُر @{name}",
"account.moved_to": "{name} إنتقل إلى :", "account.moved_to": "{name} إنتقل إلى :",

@ -1,174 +1,175 @@
{ {
"account.badges.bot": "Bot", "account.badges.bot": "Robó",
"account.block": "Block @{name}", "account.block": "Bloquiar a @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.direct": "Direct message @{name}", "account.direct": "Unviar un mensaxe direutu a @{name}",
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile", "account.edit_profile": "Editar perfil",
"account.endorse": "Feature on profile", "account.endorse": "Feature on profile",
"account.follow": "Follow", "account.follow": "Follow",
"account.followers": "Followers", "account.followers": "Siguidores",
"account.followers.empty": "No one follows this user yet.", "account.followers.empty": "No one follows this user yet.",
"account.follows": "Follows", "account.follows": "Follows",
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "Esti usuariu entá nun sigue a naide.",
"account.follows_you": "Follows you", "account.follows_you": "Follows you",
"account.hide_reblogs": "Hide boosts from @{name}", "account.hide_reblogs": "Hide boosts from @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mention @{name}", "account.mention": "Mentar a @{name}",
"account.moved_to": "{name} has moved to:", "account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}", "account.mute": "Silenciar a @{name}",
"account.mute_notifications": "Mute notifications from @{name}", "account.mute_notifications": "Mute notifications from @{name}",
"account.muted": "Muted", "account.muted": "Muted",
"account.posts": "Toots", "account.posts": "Toots",
"account.posts_with_replies": "Toots and replies", "account.posts_with_replies": "Toots y rempuestes",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "Awaiting approval. Click to cancel follow request", "account.requested": "Awaiting approval. Click to cancel follow request",
"account.share": "Share @{name}'s profile", "account.share": "Share @{name}'s profile",
"account.show_reblogs": "Show boosts from @{name}", "account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Unblock @{name}", "account.unblock": "Desbloquiar a @{name}",
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unendorse": "Don't feature on profile", "account.unendorse": "Don't feature on profile",
"account.unfollow": "Unfollow", "account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "Asocedió un fallu inesperáu.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "¡Ups!",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
"bundle_column_error.title": "Network error", "bundle_column_error.title": "Network error",
"bundle_modal_error.close": "Close", "bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Something went wrong while loading this component.",
"bundle_modal_error.retry": "Try again", "bundle_modal_error.retry": "Try again",
"column.blocks": "Blocked users", "column.blocks": "Usuarios bloquiaos",
"column.community": "Local timeline", "column.community": "Local timeline",
"column.direct": "Direct messages", "column.direct": "Mensaxes direutos",
"column.domain_blocks": "Hidden domains", "column.domain_blocks": "Dominios anubríos",
"column.favourites": "Favourites", "column.favourites": "Favoritos",
"column.follow_requests": "Follow requests", "column.follow_requests": "Solicitúes de siguimientu",
"column.home": "Home", "column.home": "Aniciu",
"column.lists": "Lists", "column.lists": "Llistes",
"column.mutes": "Muted users", "column.mutes": "Usuarios silenciaos",
"column.notifications": "Notifications", "column.notifications": "Avisos",
"column.pins": "Pinned toot", "column.pins": "Toots fixaos",
"column.public": "Federated timeline", "column.public": "Llinia temporal federada",
"column_back_button.label": "Back", "column_back_button.label": "Atrás",
"column_header.hide_settings": "Hide settings", "column_header.hide_settings": "Hide settings",
"column_header.moveLeft_settings": "Move column to the left", "column_header.moveLeft_settings": "Mover la columna a la esquierda",
"column_header.moveRight_settings": "Move column to the right", "column_header.moveRight_settings": "Mover la columna a la drecha",
"column_header.pin": "Pin", "column_header.pin": "Pin",
"column_header.show_settings": "Show settings", "column_header.show_settings": "Show settings",
"column_header.unpin": "Unpin", "column_header.unpin": "Desfixar",
"column_subheading.settings": "Settings", "column_subheading.settings": "Axustes",
"community.column_settings.media_only": "Media Only", "community.column_settings.media_only": "Media Only",
"compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning": "Esti toot namái va unviase a los usuarios mentaos.",
"compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.direct_message_warning_learn_more": "Learn more",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked", "compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "What is on your mind?", "compose_form.placeholder": "¿En qué pienses?",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Media is marked as sensitive",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
"compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.marked": "El testu nun va anubrise darrera d'una alvertencia",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "El testu va anubrise",
"compose_form.spoiler_placeholder": "Write your warning here", "compose_form.spoiler_placeholder": "Escribi equí l'avertencia",
"confirmation_modal.cancel": "Cancel", "confirmation_modal.cancel": "Encaboxar",
"confirmations.block.confirm": "Block", "confirmations.block.confirm": "Block",
"confirmations.block.message": "Are you sure you want to block {name}?", "confirmations.block.message": "¿De xuru que quies bloquiar a {name}?",
"confirmations.delete.confirm": "Delete", "confirmations.delete.confirm": "Delete",
"confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete.message": "¿De xuru que quies desaniciar esti estáu?",
"confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.delete_list.message": "¿De xuru que quies desaniciar dafechu esta llista?",
"confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.mute.confirm": "Mute", "confirmations.mute.confirm": "Mute",
"confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.mute.message": "¿De xuru que quies silenciar a {name}?",
"confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.confirm": "Delete & redraft",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
"confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.confirm": "Unfollow",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
"embed.instructions": "Embed this status on your website by copying the code below.", "embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Here is what it will look like:", "embed.preview": "Here is what it will look like:",
"emoji_button.activity": "Activity", "emoji_button.activity": "Activi",
"emoji_button.custom": "Custom", "emoji_button.custom": "Custom",
"emoji_button.flags": "Flags", "emoji_button.flags": "Banderes",
"emoji_button.food": "Food & Drink", "emoji_button.food": "Comída y bébora",
"emoji_button.label": "Insert emoji", "emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature", "emoji_button.nature": "Natura",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "¡Nun hai fustaxes! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Objects", "emoji_button.objects": "Oxetos",
"emoji_button.people": "People", "emoji_button.people": "Xente",
"emoji_button.recent": "Frequently used", "emoji_button.recent": "Frequently used",
"emoji_button.search": "Search...", "emoji_button.search": "Search...",
"emoji_button.search_results": "Search results", "emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols", "emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Travel & Places", "emoji_button.travel": "Viaxes y llugares",
"empty_column.blocks": "You haven't blocked any users yet.", "empty_column.blocks": "Entá nun bloquiesti a dengún usuariu.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.direct": "Entá nun tienes dengún mensaxe direutu. Cuando unvies o recibas dalgún, va apaecer equí",
"empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.domain_blocks": "Entá nun hai dominios anubríos.",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.follow_requests": "Entá nun tienes denguna solicitú de siguimientu. Cuando recibas una, va amosase equí.",
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "la llinia temporal pública",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.lists": "Entá nun tienes denguna llista. Cuando crees una, va amosase equí.",
"empty_column.mutes": "You haven't muted any users yet.", "empty_column.mutes": "Enta nun silenciesti a dengún usuariu.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "Entá nun tienes dengún avisu. Interactua con otros p'aniciar la conversación.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Autorizar",
"follow_request.reject": "Reject", "follow_request.reject": "Refugar",
"getting_started.developers": "Developers", "getting_started.developers": "Desendolcadores",
"getting_started.documentation": "Documentation", "getting_started.documentation": "Documentación",
"getting_started.find_friends": "Find friends from Twitter", "getting_started.find_friends": "Alcontrar collacios de Twitter",
"getting_started.heading": "Getting started", "getting_started.heading": "Getting started",
"getting_started.invite": "Invite people", "getting_started.invite": "Convidar xente",
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", "getting_started.open_source_notice": "Mastodon ye software de códigu abiertu. Pues collaborar o informar de fallos en {github} (GitHub).",
"getting_started.security": "Security", "getting_started.security": "Seguranza",
"getting_started.terms": "Terms of service", "getting_started.terms": "Términos del serviciu",
"home.column_settings.basic": "Basic", "home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_reblogs": "Show boosts",
"home.column_settings.show_replies": "Show replies", "home.column_settings.show_replies": "Show replies",
"keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.back": "pa dir p'atrás",
"keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.blocked": "p'abrir la llista d'usuarios bloquiaos",
"keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.boost": "to boost",
"keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.column": "to focus a status in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.compose": "to focus the compose textarea",
"keyboard_shortcuts.description": "Description", "keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "p'abrir la columna de los mensaxes direutos",
"keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.down": "pa baxar na llista",
"keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.enter": "to open status",
"keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourite": "to favourite",
"keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.favourites": "p'abrir la llista de favoritos",
"keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.federated": "p'abrir la llinia temporal federada",
"keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.heading": "Atayos del tecláu",
"keyboard_shortcuts.home": "to open home timeline", "keyboard_shortcuts.home": "p'abrir la llinia temporal d'aniciu",
"keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.hotkey": "Atayu",
"keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.legend": "p'amosar esta lleenda",
"keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.local": "p'abrir la llinia temporal llocal",
"keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.mention": "pa mentar al autor",
"keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.muted": "p'abrir la llista d'usuarios silenciaos",
"keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.notifications": "p'abrir la columna d'avisos",
"keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.pinned": "p'abrir la llista de toots fixaos",
"keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.profile": "p'abrir el perfil del autor",
"keyboard_shortcuts.reply": "to reply", "keyboard_shortcuts.reply": "pa responder",
"keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.requests": "p'abrir la llista de solicitúes de siguimientu",
"keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.start": "p'abrir la columna «entamar»",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.toot": "p'apenzar un toot nuevu",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "to move up in the list", "keyboard_shortcuts.up": "pa xubir na llista",
"lightbox.close": "Close", "lightbox.close": "Close",
"lightbox.next": "Next", "lightbox.next": "Siguiente",
"lightbox.previous": "Previous", "lightbox.previous": "Previous",
"lists.account.add": "Add to list", "lists.account.add": "Add to list",
"lists.account.remove": "Remove from list", "lists.account.remove": "Remove from list",
@ -180,55 +181,55 @@
"lists.subheading": "Your lists", "lists.subheading": "Your lists",
"loading_indicator.label": "Loading...", "loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Nun s'alcontró",
"missing_indicator.sublabel": "This resource could not be found", "missing_indicator.sublabel": "Esti recursu nun pudo alcontrase",
"mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.apps": "Mobile apps", "navigation_bar.apps": "Aplicaciones móviles",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Usuarios bloquiaos",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.compose": "Compose new toot", "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages", "navigation_bar.direct": "Mensaxes direutos",
"navigation_bar.discover": "Discover", "navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.domain_blocks": "Dominios anubríos",
"navigation_bar.edit_profile": "Edit profile", "navigation_bar.edit_profile": "Editar perfil",
"navigation_bar.favourites": "Favourites", "navigation_bar.favourites": "Favoritos",
"navigation_bar.filters": "Muted words", "navigation_bar.filters": "Muted words",
"navigation_bar.follow_requests": "Follow requests", "navigation_bar.follow_requests": "Solicitúes de siguimientu",
"navigation_bar.info": "About this instance", "navigation_bar.info": "Tocante a esta instancia",
"navigation_bar.keyboard_shortcuts": "Hotkeys", "navigation_bar.keyboard_shortcuts": "Atayos",
"navigation_bar.lists": "Lists", "navigation_bar.lists": "Lists",
"navigation_bar.logout": "Logout", "navigation_bar.logout": "Zarrar sesión",
"navigation_bar.mutes": "Muted users", "navigation_bar.mutes": "Usuarios silenciaos",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personal",
"navigation_bar.pins": "Pinned toots", "navigation_bar.pins": "Toots fixaos",
"navigation_bar.preferences": "Preferences", "navigation_bar.preferences": "Preferencies",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Llinia temporal federada",
"navigation_bar.security": "Security", "navigation_bar.security": "Seguranza",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you", "notification.follow": "{name} siguióte",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentóte",
"notification.reblog": "{name} boosted your status", "notification.reblog": "{name} boosted your status",
"notifications.clear": "Clear notifications", "notifications.clear": "Llimpiar avisos",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.clear_confirmation": "¿De xuru que quies llimpiar dafechu tolos avisos?",
"notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.alert": "Avisos d'escritoriu",
"notifications.column_settings.favourite": "Favourites:", "notifications.column_settings.favourite": "Favourites:",
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "Siguidores nuevos:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device", "notifications.column_settings.push_meta": "Esti preséu",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column", "notifications.column_settings.show": "Amosar en columna",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Reproducir soníu",
"notifications.group": "{count} notifications", "notifications.group": "{count} avisos",
"onboarding.done": "Done", "onboarding.done": "Fecho",
"onboarding.next": "Next", "onboarding.next": "Siguiente",
"onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
"onboarding.page_four.home": "The home timeline shows posts from people you follow.", "onboarding.page_four.home": "La llinia temporal d'aniciu amuesa artículos de xente a la que sigues.",
"onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.", "onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
"onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.", "onboarding.page_one.federation": "Mastodon ye una rede de sividores independientes xuníos pa facer una rede social grande. Nós llamamos instancies a esos sirvidores.",
"onboarding.page_one.full_handle": "Your full handle", "onboarding.page_one.full_handle": "Your full handle",
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.", "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
"onboarding.page_one.welcome": "Welcome to Mastodon!", "onboarding.page_one.welcome": "¡Afáyate en Mastodon!",
"onboarding.page_six.admin": "Your instance's admin is {admin}.", "onboarding.page_six.admin": "Your instance's admin is {admin}.",
"onboarding.page_six.almost_done": "Almost done...", "onboarding.page_six.almost_done": "Almost done...",
"onboarding.page_six.appetoot": "Bon Appetoot!", "onboarding.page_six.appetoot": "Bon Appetoot!",
@ -236,7 +237,7 @@
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.", "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
"onboarding.page_six.guidelines": "community guidelines", "onboarding.page_six.guidelines": "community guidelines",
"onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!", "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
"onboarding.page_six.various_app": "mobile apps", "onboarding.page_six.various_app": "aplicaciones móviles",
"onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.", "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
"onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.", "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
"onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.", "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
@ -245,7 +246,7 @@
"privacy.direct.long": "Post to mentioned users only", "privacy.direct.long": "Post to mentioned users only",
"privacy.direct.short": "Direct", "privacy.direct.short": "Direct",
"privacy.private.long": "Post to followers only", "privacy.private.long": "Post to followers only",
"privacy.private.short": "Followers-only", "privacy.private.short": "Namái siguidores",
"privacy.public.long": "Post to public timelines", "privacy.public.long": "Post to public timelines",
"privacy.public.short": "Public", "privacy.public.short": "Public",
"privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.long": "Do not show in public timelines",
@ -254,44 +255,44 @@
"regeneration_indicator.sublabel": "Your home feed is being prepared!", "regeneration_indicator.sublabel": "Your home feed is being prepared!",
"relative_time.days": "{number}d", "relative_time.days": "{number}d",
"relative_time.hours": "{number}h", "relative_time.hours": "{number}h",
"relative_time.just_now": "now", "relative_time.just_now": "agora",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Cancel", "reply_indicator.cancel": "Encaboxar",
"report.forward": "Forward to {target}", "report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
"report.placeholder": "Additional comments", "report.placeholder": "Comentarios adicionales",
"report.submit": "Submit", "report.submit": "Submit",
"report.target": "Report {target}", "report.target": "Report {target}",
"search.placeholder": "Search", "search.placeholder": "Search",
"search_popout.search_format": "Advanced search format", "search_popout.search_format": "Advanced search format",
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.hashtag": "hashtag", "search_popout.tips.hashtag": "etiqueta",
"search_popout.tips.status": "status", "search_popout.tips.status": "estáu",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user", "search_popout.tips.user": "usuariu",
"search_results.accounts": "People", "search_results.accounts": "Xente",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots", "search_results.statuses": "Toots",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...", "standalone.public_title": "A look inside...",
"status.block": "Block @{name}", "status.block": "Bloquiar a @{name}",
"status.cancel_reblog_private": "Unboost", "status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted", "status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete", "status.delete": "Delete",
"status.detailed_status": "Detailed conversation view", "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}", "status.direct": "Unviar un mensaxe direutu a @{name}",
"status.embed": "Embed", "status.embed": "Empotrar",
"status.favourite": "Favourite", "status.favourite": "Favourite",
"status.filtered": "Filtered", "status.filtered": "Filtered",
"status.load_more": "Load more", "status.load_more": "Cargar más",
"status.media_hidden": "Media hidden", "status.media_hidden": "Media hidden",
"status.mention": "Mention @{name}", "status.mention": "Mentar a @{name}",
"status.more": "More", "status.more": "Más",
"status.mute": "Mute @{name}", "status.mute": "Silenciar a @{name}",
"status.mute_conversation": "Mute conversation", "status.mute_conversation": "Mute conversation",
"status.open": "Expand this status", "status.open": "Espander esti estáu",
"status.pin": "Pin on profile", "status.pin": "Pin on profile",
"status.pinned": "Pinned toot", "status.pinned": "Pinned toot",
"status.reblog": "Boost", "status.reblog": "Boost",
@ -299,25 +300,25 @@
"status.reblogged_by": "{name} boosted", "status.reblogged_by": "{name} boosted",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft", "status.redraft": "Delete & re-draft",
"status.reply": "Reply", "status.reply": "Responder",
"status.replyAll": "Reply to thread", "status.replyAll": "Reply to thread",
"status.report": "Report @{name}", "status.report": "Report @{name}",
"status.sensitive_toggle": "Click to view", "status.sensitive_toggle": "Click to view",
"status.sensitive_warning": "Sensitive content", "status.sensitive_warning": "Sensitive content",
"status.share": "Share", "status.share": "Share",
"status.show_less": "Show less", "status.show_less": "Amosar menos",
"status.show_less_all": "Show less for all", "status.show_less_all": "Show less for all",
"status.show_more": "Show more", "status.show_more": "Amosar más",
"status.show_more_all": "Show more for all", "status.show_more_all": "Show more for all",
"status.unmute_conversation": "Unmute conversation", "status.unmute_conversation": "Unmute conversation",
"status.unpin": "Unpin from profile", "status.unpin": "Unpin from profile",
"tabs_bar.federated_timeline": "Federated", "tabs_bar.federated_timeline": "Federated",
"tabs_bar.home": "Home", "tabs_bar.home": "Aniciu",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Avisos",
"tabs_bar.search": "Search", "tabs_bar.search": "Search",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media", "upload_button.label": "Add media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

@ -15,6 +15,7 @@
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Твой последовател", "account.follows_you": "Твой последовател",
"account.hide_reblogs": "Hide boosts from @{name}", "account.hide_reblogs": "Hide boosts from @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Споменаване", "account.mention": "Споменаване",
"account.moved_to": "{name} has moved to:", "account.moved_to": "{name} has moved to:",

@ -15,6 +15,7 @@
"account.follows.empty": "Aquest usuari encara no segueix a ningú.", "account.follows.empty": "Aquest usuari encara no segueix a ningú.",
"account.follows_you": "Et segueix", "account.follows_you": "Et segueix",
"account.hide_reblogs": "Amaga els impulsos de @{name}", "account.hide_reblogs": "Amaga els impulsos de @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Esmentar @{name}", "account.mention": "Esmentar @{name}",
"account.moved_to": "{name} s'ha mogut a:", "account.moved_to": "{name} s'ha mogut a:",

@ -15,6 +15,7 @@
"account.follows.empty": "St'utilizatore ùn seguita nisunu.", "account.follows.empty": "St'utilizatore ùn seguita nisunu.",
"account.follows_you": "Vi seguita", "account.follows_you": "Vi seguita",
"account.hide_reblogs": "Piattà spartere da @{name}", "account.hide_reblogs": "Piattà spartere da @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mintuvà @{name}", "account.mention": "Mintuvà @{name}",
"account.moved_to": "{name} hè partutu nant'à:", "account.moved_to": "{name} hè partutu nant'à:",

@ -15,6 +15,7 @@
"account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.",
"account.follows_you": "Sleduje vás", "account.follows_you": "Sleduje vás",
"account.hide_reblogs": "Skrýt boosty od uživatele @{name}", "account.hide_reblogs": "Skrýt boosty od uživatele @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Média", "account.media": "Média",
"account.mention": "Zmínit uživatele @{name}", "account.mention": "Zmínit uživatele @{name}",
"account.moved_to": "{name} se přesunul/a na:", "account.moved_to": "{name} se přesunul/a na:",

@ -1,121 +1,122 @@
{ {
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.block": "Block @{name}", "account.block": "Blociwch @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Cuddiwch bopeth rhag {domain}",
"account.blocked": "Blocked", "account.blocked": "Blociwyd",
"account.direct": "Direct message @{name}", "account.direct": "Neges breifat @{name}",
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.disclaimer_full": "Gall y wybodaeth isod adlewyrchu darlun anghyflawn o broffil defnyddiwr.",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile", "account.edit_profile": "Golygu proffil",
"account.endorse": "Feature on profile", "account.endorse": "Feature on profile",
"account.follow": "Follow", "account.follow": "Dilyn",
"account.followers": "Followers", "account.followers": "Dilynwyr",
"account.followers.empty": "No one follows this user yet.", "account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.",
"account.follows": "Follows", "account.follows": "Yn dilyn",
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
"account.follows_you": "Follows you", "account.follows_you": "Yn eich dilyn chi",
"account.hide_reblogs": "Hide boosts from @{name}", "account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media", "account.link_verified_on": "Ownership of this link was checked on {date}",
"account.mention": "Mention @{name}", "account.media": "Cyfryngau",
"account.moved_to": "{name} has moved to:", "account.mention": "Crybwyll @{name}",
"account.moved_to": "Mae @{name} wedi symud i:",
"account.mute": "Mute @{name}", "account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}", "account.mute_notifications": "Mute notifications from @{name}",
"account.muted": "Muted", "account.muted": "Distewyd",
"account.posts": "Toots", "account.posts": "Tŵtiau",
"account.posts_with_replies": "Toots and replies", "account.posts_with_replies": "Toots and replies",
"account.report": "Report @{name}", "account.report": "Adroddwch @{name}",
"account.requested": "Awaiting approval. Click to cancel follow request", "account.requested": "Awaiting approval. Click to cancel follow request",
"account.share": "Share @{name}'s profile", "account.share": "Rhannwch broffil @{name}",
"account.show_reblogs": "Show boosts from @{name}", "account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Unblock @{name}", "account.unblock": "Dadflociwch @{name}",
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Dadguddiwch {domain}",
"account.unendorse": "Don't feature on profile", "account.unendorse": "Don't feature on profile",
"account.unfollow": "Unfollow", "account.unfollow": "Daddilynwch",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Wps!",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Ceisiwch eto",
"bundle_column_error.title": "Network error", "bundle_column_error.title": "Gwall rhwydwaith",
"bundle_modal_error.close": "Close", "bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
"bundle_modal_error.retry": "Try again", "bundle_modal_error.retry": "Ceiswich eto",
"column.blocks": "Blocked users", "column.blocks": "Defnyddwyr a flociwyd",
"column.community": "Local timeline", "column.community": "Llinell amser lleol",
"column.direct": "Direct messages", "column.direct": "Negeseuon preifat",
"column.domain_blocks": "Hidden domains", "column.domain_blocks": "Parthau cuddiedig",
"column.favourites": "Favourites", "column.favourites": "Ffefrynnau",
"column.follow_requests": "Follow requests", "column.follow_requests": "Ceisiadau dilyn",
"column.home": "Hafan", "column.home": "Hafan",
"column.lists": "Lists", "column.lists": "Rhestrau",
"column.mutes": "Muted users", "column.mutes": "Defnyddwyr a ddistewyd",
"column.notifications": "Notifications", "column.notifications": "Hysbysiadau",
"column.pins": "Pinned toot", "column.pins": "Pinned toot",
"column.public": "Federated timeline", "column.public": "Federated timeline",
"column_back_button.label": "Nôl", "column_back_button.label": "Nôl",
"column_header.hide_settings": "Hide settings", "column_header.hide_settings": "Hide settings",
"column_header.moveLeft_settings": "Move column to the left", "column_header.moveLeft_settings": "Symudwch y golofn i'r chwith",
"column_header.moveRight_settings": "Move column to the right", "column_header.moveRight_settings": "Symudwch y golofn i'r dde",
"column_header.pin": "Pin", "column_header.pin": "Piniwch",
"column_header.show_settings": "Show settings", "column_header.show_settings": "Dangos gosodiadau",
"column_header.unpin": "Unpin", "column_header.unpin": "Dadbiniwch",
"column_subheading.settings": "Settings", "column_subheading.settings": "Gosodiadau",
"community.column_settings.media_only": "Media Only", "community.column_settings.media_only": "Cyfryngau yn unig",
"compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning": "Mi fydd y tŵt hwn ond yn cael ei anfon at y defnyddwyr sy'n cael eu crybwyll.",
"compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.direct_message_warning_learn_more": "Dysgwch fwy",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.hashtag_warning": "Ni fydd y tŵt hwn wedi ei restru o dan unrhyw hashnod gan ei fod heb ei restru. Dim ond tŵtiau cyhoeddus gellid chwilota amdanynt drwy hashnod.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer": "Nid yw eich cyfri wedi'i {locked}. Gall unrhyw un eich dilyn i weld eich POSTS dilynwyr-yn-unig.",
"compose_form.lock_disclaimer.lock": "locked", "compose_form.lock_disclaimer.lock": "wedi ei gloi",
"compose_form.placeholder": "What is on your mind?", "compose_form.placeholder": "Be syd ar eich meddwl?",
"compose_form.publish": "Toot", "compose_form.publish": "Tŵt",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Media is marked as sensitive",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
"compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.marked": "Testun wedi ei guddio gan rybudd",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "Nid yw'r testun wedi ei guddio",
"compose_form.spoiler_placeholder": "Write your warning here", "compose_form.spoiler_placeholder": "Ysgrifenwch eich rhybudd yma",
"confirmation_modal.cancel": "Cancel", "confirmation_modal.cancel": "Cancel",
"confirmations.block.confirm": "Block", "confirmations.block.confirm": "Blociwch",
"confirmations.block.message": "Are you sure you want to block {name}?", "confirmations.block.message": "Ydych chi'n sicr eich bod eisiau blocio {name}?",
"confirmations.delete.confirm": "Delete", "confirmations.delete.confirm": "Dileu",
"confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y statws hwn?",
"confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.confirm": "Dileu",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?",
"confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.mute.confirm": "Mute", "confirmations.mute.confirm": "Mute",
"confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.mute.message": "Ydych chi'n sicr eich bod am ddistewi {name}?",
"confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.confirm": "Delete & redraft",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.confirm": "Dad-ddilynwch",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "confirmations.unfollow.message": "Ydych chi'n sicr eich bod am ddad-ddilyn {name}?",
"embed.instructions": "Embed this status on your website by copying the code below.", "embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Here is what it will look like:", "embed.preview": "Dyma sut olwg fydd arno:",
"emoji_button.activity": "Activity", "emoji_button.activity": "Gweithgarwch",
"emoji_button.custom": "Custom", "emoji_button.custom": "Custom",
"emoji_button.flags": "Flags", "emoji_button.flags": "Baneri",
"emoji_button.food": "Food & Drink", "emoji_button.food": "Bwyd a Diod",
"emoji_button.label": "Insert emoji", "emoji_button.label": "Mewnosodwch emoji",
"emoji_button.nature": "Nature", "emoji_button.nature": "Natur",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "Dim emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Objects", "emoji_button.objects": "Gwrthrychau",
"emoji_button.people": "People", "emoji_button.people": "Pobl",
"emoji_button.recent": "Frequently used", "emoji_button.recent": "Defnyddir yn aml",
"emoji_button.search": "Search...", "emoji_button.search": "Chwilio...",
"emoji_button.search_results": "Search results", "emoji_button.search_results": "Canlyniadau chwilio",
"emoji_button.symbols": "Symbols", "emoji_button.symbols": "Symbolau",
"emoji_button.travel": "Travel & Places", "emoji_button.travel": "Teithio & Llefydd",
"empty_column.blocks": "You haven't blocked any users yet.", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.",
"empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff dwtiau eto. Pan y byddwch yn hoffi un, mi fydd yn ymddangos yma.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", "empty_column.favourites": "Nid oes neb wedi hoffi'r tŵt yma eto. Pan bydd rhywun yn ei hoffi, mi fyddent yn ymddangos yma.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
@ -123,120 +124,120 @@
"empty_column.mutes": "You haven't muted any users yet.", "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Caniatau",
"follow_request.reject": "Reject", "follow_request.reject": "Gwrthod",
"getting_started.developers": "Developers", "getting_started.developers": "Datblygwyr",
"getting_started.documentation": "Documentation", "getting_started.documentation": "Dogfennaeth",
"getting_started.find_friends": "Find friends from Twitter", "getting_started.find_friends": "Canfod ffrindiau o Twitter",
"getting_started.heading": "Getting started", "getting_started.heading": "Dechrau",
"getting_started.invite": "Invite people", "getting_started.invite": "Gwahoddwch bobl",
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
"getting_started.security": "Security", "getting_started.security": "Diogelwch",
"getting_started.terms": "Terms of service", "getting_started.terms": "Terms of service",
"home.column_settings.basic": "Basic", "home.column_settings.basic": "Syml",
"home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_reblogs": "Show boosts",
"home.column_settings.show_replies": "Show replies", "home.column_settings.show_replies": "Dangoswch ymatebion",
"keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.back": "to navigate back",
"keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.blocked": "to open blocked users list",
"keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.boost": "to boost",
"keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.column": "to focus a status in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.compose": "to focus the compose textarea",
"keyboard_shortcuts.description": "Description", "keyboard_shortcuts.description": "Disgrifiad",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "i agor colofn negeseuon preifat",
"keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.down": "i symud lawr yn y rhestr",
"keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.enter": "i agor statws",
"keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourite": "i hoffi",
"keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.favourites": "i agor rhestr hoffi",
"keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.federated": "to open federated timeline",
"keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.heading": "Keyboard Shortcuts",
"keyboard_shortcuts.home": "to open home timeline", "keyboard_shortcuts.home": "to open home timeline",
"keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.local": "to open local timeline",
"keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.mention": "i grybwyll yr awdur",
"keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.my_profile": "i agor eich proffil",
"keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.notifications": "i agor colofn hysbysiadau",
"keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.profile": "i agor proffil yr awdur",
"keyboard_shortcuts.reply": "to reply", "keyboard_shortcuts.reply": "i ateb",
"keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.requests": "to open follow requests list",
"keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.start": "to open \"get started\" column",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.toot": "i ddechrau tŵt newydd sbon",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "to move up in the list", "keyboard_shortcuts.up": "to move up in the list",
"lightbox.close": "Close", "lightbox.close": "Cau",
"lightbox.next": "Next", "lightbox.next": "Nesaf",
"lightbox.previous": "Previous", "lightbox.previous": "Previous",
"lists.account.add": "Add to list", "lists.account.add": "Ychwanegwch at restr",
"lists.account.remove": "Remove from list", "lists.account.remove": "Remove from list",
"lists.delete": "Delete list", "lists.delete": "Dileu rhestr",
"lists.edit": "Edit list", "lists.edit": "Golygwch restr",
"lists.new.create": "Add list", "lists.new.create": "Ychwanegwch restr",
"lists.new.title_placeholder": "New list title", "lists.new.title_placeholder": "New list title",
"lists.search": "Search among people you follow", "lists.search": "Search among people you follow",
"lists.subheading": "Your lists", "lists.subheading": "Eich rhestrau",
"loading_indicator.label": "Loading...", "loading_indicator.label": "Llwytho...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Heb ei ganfod",
"missing_indicator.sublabel": "This resource could not be found", "missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn",
"mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.hide_notifications": "Cuddiwch hysbysiadau rhag y defnyddiwr hwn?",
"navigation_bar.apps": "Mobile apps", "navigation_bar.apps": "Apiau symudol",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.compose": "Compose new toot", "navigation_bar.compose": "Cyfansoddwch dŵt newydd",
"navigation_bar.direct": "Direct messages", "navigation_bar.direct": "Negeseuon preifat",
"navigation_bar.discover": "Discover", "navigation_bar.discover": "Darganfyddwch",
"navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.domain_blocks": "Parthau cuddiedig",
"navigation_bar.edit_profile": "Edit profile", "navigation_bar.edit_profile": "Golygu proffil",
"navigation_bar.favourites": "Favourites", "navigation_bar.favourites": "Ffefrynnau",
"navigation_bar.filters": "Muted words", "navigation_bar.filters": "Muted words",
"navigation_bar.follow_requests": "Follow requests", "navigation_bar.follow_requests": "Ceisiadau dilyn",
"navigation_bar.info": "About this instance", "navigation_bar.info": "About this instance",
"navigation_bar.keyboard_shortcuts": "Hotkeys", "navigation_bar.keyboard_shortcuts": "Hotkeys",
"navigation_bar.lists": "Lists", "navigation_bar.lists": "Rhestrau",
"navigation_bar.logout": "Logout", "navigation_bar.logout": "Allgofnodi",
"navigation_bar.mutes": "Muted users", "navigation_bar.mutes": "Muted users",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personol",
"navigation_bar.pins": "Pinned toots", "navigation_bar.pins": "Tŵtiau wedi eu pinio",
"navigation_bar.preferences": "Preferences", "navigation_bar.preferences": "Dewisiadau",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security", "navigation_bar.security": "Diogelwch",
"notification.favourite": "{name} favourited your status", "notification.favourite": "hoffodd {name} eich statws",
"notification.follow": "{name} followed you", "notification.follow": "dilynodd {name} chi",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
"notification.reblog": "{name} boosted your status", "notification.reblog": "{name} boosted your status",
"notifications.clear": "Clear notifications", "notifications.clear": "Clirio hysbysiadau",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
"notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.alert": "Desktop notifications",
"notifications.column_settings.favourite": "Favourites:", "notifications.column_settings.favourite": "Ffefrynnau:",
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "Dilynwyr newydd:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device", "notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column", "notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Chwarae sain",
"notifications.group": "{count} notifications", "notifications.group": "{count} o hysbysiadau",
"onboarding.done": "Done", "onboarding.done": "Done",
"onboarding.next": "Next", "onboarding.next": "Nesaf",
"onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
"onboarding.page_four.home": "The home timeline shows posts from people you follow.", "onboarding.page_four.home": "The home timeline shows posts from people you follow.",
"onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.", "onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
"onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.", "onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
"onboarding.page_one.full_handle": "Your full handle", "onboarding.page_one.full_handle": "Your full handle",
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.", "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
"onboarding.page_one.welcome": "Welcome to Mastodon!", "onboarding.page_one.welcome": "Croeso i Mastodon!",
"onboarding.page_six.admin": "Your instance's admin is {admin}.", "onboarding.page_six.admin": "Your instance's admin is {admin}.",
"onboarding.page_six.almost_done": "Almost done...", "onboarding.page_six.almost_done": "Almost done...",
"onboarding.page_six.appetoot": "Bon Appetoot!", "onboarding.page_six.appetoot": "Bon Apetŵt!",
"onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.", "onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.", "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
"onboarding.page_six.guidelines": "community guidelines", "onboarding.page_six.guidelines": "canllawiau cymunedol",
"onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!", "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
"onboarding.page_six.various_app": "mobile apps", "onboarding.page_six.various_app": "apiau symudol",
"onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.", "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
"onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.", "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
"onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.", "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
@ -245,50 +246,50 @@
"privacy.direct.long": "Post to mentioned users only", "privacy.direct.long": "Post to mentioned users only",
"privacy.direct.short": "Direct", "privacy.direct.short": "Direct",
"privacy.private.long": "Post to followers only", "privacy.private.long": "Post to followers only",
"privacy.private.short": "Followers-only", "privacy.private.short": "Dilynwyr-yn-unig",
"privacy.public.long": "Post to public timelines", "privacy.public.long": "Post to public timelines",
"privacy.public.short": "Public", "privacy.public.short": "Cyhoeddus",
"privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.long": "Do not show in public timelines",
"privacy.unlisted.short": "Unlisted", "privacy.unlisted.short": "Heb ei restru",
"regeneration_indicator.label": "Loading…", "regeneration_indicator.label": "Llwytho…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!", "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!",
"relative_time.days": "{number}d", "relative_time.days": "{number}d",
"relative_time.hours": "{number}h", "relative_time.hours": "{number}h",
"relative_time.just_now": "now", "relative_time.just_now": "nawr",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Cancel", "reply_indicator.cancel": "Canslo",
"report.forward": "Forward to {target}", "report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
"report.placeholder": "Additional comments", "report.placeholder": "Sylwadau ychwanegol",
"report.submit": "Submit", "report.submit": "Submit",
"report.target": "Report {target}", "report.target": "Report {target}",
"search.placeholder": "Search", "search.placeholder": "Chwilio",
"search_popout.search_format": "Advanced search format", "search_popout.search_format": "Advanced search format",
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.hashtag": "hashtag", "search_popout.tips.hashtag": "hashnod",
"search_popout.tips.status": "status", "search_popout.tips.status": "statws",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user", "search_popout.tips.user": "defnyddiwr",
"search_results.accounts": "People", "search_results.accounts": "Pobl",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hanshnodau",
"search_results.statuses": "Toots", "search_results.statuses": "Twtiau",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...", "standalone.public_title": "A look inside...",
"status.block": "Block @{name}", "status.block": "Block @{name}",
"status.cancel_reblog_private": "Unboost", "status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted", "status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete", "status.delete": "Dileu",
"status.detailed_status": "Detailed conversation view", "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}", "status.direct": "Neges breifat @{name}",
"status.embed": "Embed", "status.embed": "Plannu",
"status.favourite": "Favourite", "status.favourite": "Favourite",
"status.filtered": "Filtered", "status.filtered": "Filtered",
"status.load_more": "Load more", "status.load_more": "Llwythwch mwy",
"status.media_hidden": "Media hidden", "status.media_hidden": "Media hidden",
"status.mention": "Mention @{name}", "status.mention": "Mention @{name}",
"status.more": "More", "status.more": "Mwy",
"status.mute": "Mute @{name}", "status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation", "status.mute_conversation": "Mute conversation",
"status.open": "Expand this status", "status.open": "Expand this status",
@ -299,23 +300,23 @@
"status.reblogged_by": "{name} boosted", "status.reblogged_by": "{name} boosted",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft", "status.redraft": "Delete & re-draft",
"status.reply": "Reply", "status.reply": "Ateb",
"status.replyAll": "Reply to thread", "status.replyAll": "Ateb i edefyn",
"status.report": "Report @{name}", "status.report": "Report @{name}",
"status.sensitive_toggle": "Click to view", "status.sensitive_toggle": "Click to view",
"status.sensitive_warning": "Sensitive content", "status.sensitive_warning": "Cynnwys sensitif",
"status.share": "Share", "status.share": "Rhannwch",
"status.show_less": "Show less", "status.show_less": "Dangoswch lai",
"status.show_less_all": "Show less for all", "status.show_less_all": "Dangoswch lai i bawb",
"status.show_more": "Show more", "status.show_more": "Dangoswch fwy",
"status.show_more_all": "Show more for all", "status.show_more_all": "Show more for all",
"status.unmute_conversation": "Unmute conversation", "status.unmute_conversation": "Unmute conversation",
"status.unpin": "Unpin from profile", "status.unpin": "Unpin from profile",
"tabs_bar.federated_timeline": "Federated", "tabs_bar.federated_timeline": "Federated",
"tabs_bar.home": "Home", "tabs_bar.home": "Hafan",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Lleol",
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Hysbysiadau",
"tabs_bar.search": "Search", "tabs_bar.search": "Chwilio",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
@ -323,7 +324,7 @@
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop", "upload_form.focus": "Crop",
"upload_form.undo": "Delete", "upload_form.undo": "Delete",
"upload_progress.label": "Uploading...", "upload_progress.label": "Uwchlwytho...",
"video.close": "Close video", "video.close": "Close video",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video", "video.expand": "Expand video",
@ -331,6 +332,6 @@
"video.hide": "Hide video", "video.hide": "Hide video",
"video.mute": "Mute sound", "video.mute": "Mute sound",
"video.pause": "Pause", "video.pause": "Pause",
"video.play": "Play", "video.play": "Chwarae",
"video.unmute": "Unmute sound" "video.unmute": "Unmute sound"
} }

@ -15,6 +15,7 @@
"account.follows.empty": "Denne bruger følger endnu ikke nogen.", "account.follows.empty": "Denne bruger følger endnu ikke nogen.",
"account.follows_you": "Følger dig", "account.follows_you": "Følger dig",
"account.hide_reblogs": "Skjul fremhævelserne fra @{name}", "account.hide_reblogs": "Skjul fremhævelserne fra @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Medie", "account.media": "Medie",
"account.mention": "Nævn @{name}", "account.mention": "Nævn @{name}",
"account.moved_to": "{name} er flyttet til:", "account.moved_to": "{name} er flyttet til:",
@ -200,7 +201,7 @@
"navigation_bar.logout": "Logud", "navigation_bar.logout": "Logud",
"navigation_bar.mutes": "Dæmpede brugere", "navigation_bar.mutes": "Dæmpede brugere",
"navigation_bar.personal": "Personligt", "navigation_bar.personal": "Personligt",
"navigation_bar.pins": "Fastgjorte toots", "navigation_bar.pins": "Fastgjorte trut",
"navigation_bar.preferences": "Præferencer", "navigation_bar.preferences": "Præferencer",
"navigation_bar.public_timeline": "Fælles tidslinje", "navigation_bar.public_timeline": "Fælles tidslinje",
"navigation_bar.security": "Sikkerhed", "navigation_bar.security": "Sikkerhed",
@ -273,7 +274,7 @@
"search_popout.tips.user": "bruger", "search_popout.tips.user": "bruger",
"search_results.accounts": "Folk", "search_results.accounts": "Folk",
"search_results.hashtags": "Emnetags", "search_results.hashtags": "Emnetags",
"search_results.statuses": "Toote", "search_results.statuses": "Trut",
"search_results.total": "{count, number} {count, plural, et {result} andre {results}}", "search_results.total": "{count, number} {count, plural, et {result} andre {results}}",
"standalone.public_title": "Et kig indenfor...", "standalone.public_title": "Et kig indenfor...",
"status.block": "Bloker @{name}", "status.block": "Bloker @{name}",

@ -15,6 +15,7 @@
"account.follows.empty": "Dieses Profil folgt noch niemandem.", "account.follows.empty": "Dieses Profil folgt noch niemandem.",
"account.follows_you": "Folgt dir", "account.follows_you": "Folgt dir",
"account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Medien", "account.media": "Medien",
"account.mention": "@{name} erwähnen", "account.mention": "@{name} erwähnen",
"account.moved_to": "{name} ist umgezogen auf:", "account.moved_to": "{name} ist umgezogen auf:",
@ -113,7 +114,7 @@
"empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.", "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.",
"empty_column.domain_blocks": "Es ist noch keine versteckten Domains.", "empty_column.domain_blocks": "Es ist noch keine versteckten Domains.",
"empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.", "empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.",
"empty_column.favourites": "Noch niemand hat diesen Tröt favorisiert. Sobald es jemand tut, wird das hier angezeigt.", "empty_column.favourites": "Noch niemand hat diesen Beitrag favorisiert. Sobald es jemand tut, wird das hier angezeigt.",
"empty_column.follow_requests": "Du hast noch keine Folge-Anfragen. Sobald du eine erhältst, wird sie hier angezeigt.", "empty_column.follow_requests": "Du hast noch keine Folge-Anfragen. Sobald du eine erhältst, wird sie hier angezeigt.",
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.", "empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
"empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.", "empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
@ -140,32 +141,32 @@
"keyboard_shortcuts.blocked": "Liste blockierter Profile öffnen", "keyboard_shortcuts.blocked": "Liste blockierter Profile öffnen",
"keyboard_shortcuts.boost": "boosten", "keyboard_shortcuts.boost": "boosten",
"keyboard_shortcuts.column": "einen Status in einer der Spalten fokussieren", "keyboard_shortcuts.column": "einen Status in einer der Spalten fokussieren",
"keyboard_shortcuts.compose": "um das Textfeld zu fokussieren", "keyboard_shortcuts.compose": "fokussiere das Tröt-Eingabefeld",
"keyboard_shortcuts.description": "Beschreibung", "keyboard_shortcuts.description": "Beschreibung",
"keyboard_shortcuts.direct": "Direct-Message-Spalte öffnen", "keyboard_shortcuts.direct": "Direct-Message-Spalte öffnen",
"keyboard_shortcuts.down": "sich in der Liste hinunter bewegen", "keyboard_shortcuts.down": "sich in der Liste hinunter bewegen",
"keyboard_shortcuts.enter": "um den Status zu öffnen", "keyboard_shortcuts.enter": "Status öffnen",
"keyboard_shortcuts.favourite": "um zu favorisieren", "keyboard_shortcuts.favourite": "um zu favorisieren",
"keyboard_shortcuts.favourites": "Favoriten-Liste öffnen", "keyboard_shortcuts.favourites": "Favoriten-Liste öffnen",
"keyboard_shortcuts.federated": "Förderierte Zeitleiste öffnen", "keyboard_shortcuts.federated": "Förderierte Zeitleiste öffnen",
"keyboard_shortcuts.heading": "Tastenkombinationen", "keyboard_shortcuts.heading": "Tastenkombinationen",
"keyboard_shortcuts.home": "Startseite öffnen", "keyboard_shortcuts.home": "Startseite öffnen",
"keyboard_shortcuts.hotkey": "Tastenkürzel", "keyboard_shortcuts.hotkey": "Tastenkürzel",
"keyboard_shortcuts.legend": "um diese Übersicht anzuzeigen", "keyboard_shortcuts.legend": "diese Übersicht anzeigen",
"keyboard_shortcuts.local": "Lokale Zeitleiste öffnen", "keyboard_shortcuts.local": "Lokale Zeitleiste öffnen",
"keyboard_shortcuts.mention": "um Autor_in zu erwähnen", "keyboard_shortcuts.mention": "um Autor_in zu erwähnen",
"keyboard_shortcuts.muted": "Liste stummgeschalteter Profile öffnen", "keyboard_shortcuts.muted": "Liste stummgeschalteter Profile öffnen",
"keyboard_shortcuts.my_profile": "Dein Profil öffnen", "keyboard_shortcuts.my_profile": "Dein Profil öffnen",
"keyboard_shortcuts.notifications": "Benachrichtigungsspalte öffnen", "keyboard_shortcuts.notifications": "Benachrichtigungsspalte öffnen",
"keyboard_shortcuts.pinned": "Liste angehefteter Tröts öffnen", "keyboard_shortcuts.pinned": "Liste angehefteter Tröts öffnen",
"keyboard_shortcuts.profile": "um Profil des Autors zu öffnen", "keyboard_shortcuts.profile": "Profil des Autors öffnen",
"keyboard_shortcuts.reply": "um zu antworten", "keyboard_shortcuts.reply": "antworten",
"keyboard_shortcuts.requests": "Liste der Folge-Anfragen öffnen", "keyboard_shortcuts.requests": "Liste der Folge-Anfragen öffnen",
"keyboard_shortcuts.search": "um die Suche zu fokussieren", "keyboard_shortcuts.search": "Suche fokussieren",
"keyboard_shortcuts.start": "\"Erste Schritte-Spalte öffnen", "keyboard_shortcuts.start": "\"Erste Schritte-Spalte öffnen",
"keyboard_shortcuts.toggle_hidden": "um den Text hinter einer Inhaltswarnung zu verstecken oder ihn anzuzeigen", "keyboard_shortcuts.toggle_hidden": "Text hinter einer Inhaltswarnung verstecken/anzeigen",
"keyboard_shortcuts.toot": "um einen neuen Toot zu beginnen", "keyboard_shortcuts.toot": "einen neuen Toot beginnen",
"keyboard_shortcuts.unfocus": "um das Textfeld/die Suche nicht mehr zu fokussieren", "keyboard_shortcuts.unfocus": "Textfeld/die Suche nicht mehr fokussieren",
"keyboard_shortcuts.up": "sich in der Liste hinauf bewegen", "keyboard_shortcuts.up": "sich in der Liste hinauf bewegen",
"lightbox.close": "Schließen", "lightbox.close": "Schließen",
"lightbox.next": "Weiter", "lightbox.next": "Weiter",
@ -186,7 +187,7 @@
"navigation_bar.apps": "Mobile Apps", "navigation_bar.apps": "Mobile Apps",
"navigation_bar.blocks": "Blockierte Profile", "navigation_bar.blocks": "Blockierte Profile",
"navigation_bar.community_timeline": "Lokale Zeitleiste", "navigation_bar.community_timeline": "Lokale Zeitleiste",
"navigation_bar.compose": "Neuen Tröt verfassen", "navigation_bar.compose": "Neuen Beitrag verfassen",
"navigation_bar.direct": "Direktnachrichten", "navigation_bar.direct": "Direktnachrichten",
"navigation_bar.discover": "Entdecken", "navigation_bar.discover": "Entdecken",
"navigation_bar.domain_blocks": "Versteckte Domains", "navigation_bar.domain_blocks": "Versteckte Domains",
@ -297,7 +298,7 @@
"status.reblog": "Teilen", "status.reblog": "Teilen",
"status.reblog_private": "An das eigentliche Publikum teilen", "status.reblog_private": "An das eigentliche Publikum teilen",
"status.reblogged_by": "{name} teilte", "status.reblogged_by": "{name} teilte",
"status.reblogs.empty": "Diesen Tröt hat noch niemand geboostet. Sobald es jemand tut, wird er hier angezeigt.", "status.reblogs.empty": "Diesen Beitrag hat noch niemand geboostet. Sobald es jemand tun, wird er hier angezeigt.",
"status.redraft": "Löschen und neu erstellen", "status.redraft": "Löschen und neu erstellen",
"status.reply": "Antworten", "status.reply": "Antworten",
"status.replyAll": "Auf Thread antworten", "status.replyAll": "Auf Thread antworten",

@ -610,6 +610,10 @@
"defaultMessage": "Edit profile", "defaultMessage": "Edit profile",
"id": "account.edit_profile" "id": "account.edit_profile"
}, },
{
"defaultMessage": "Ownership of this link was checked on {date}",
"id": "account.link_verified_on"
},
{ {
"defaultMessage": "Follows you", "defaultMessage": "Follows you",
"id": "account.follows_you" "id": "account.follows_you"
@ -1834,6 +1838,15 @@
], ],
"path": "app/javascript/mastodon/features/ui/components/bundle_modal_error.json" "path": "app/javascript/mastodon/features/ui/components/bundle_modal_error.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Toot",
"id": "compose_form.publish"
}
],
"path": "app/javascript/mastodon/features/ui/components/columns_area.json"
},
{ {
"descriptors": [ "descriptors": [
{ {

@ -15,6 +15,7 @@
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Σε ακολουθεί", "account.follows_you": "Σε ακολουθεί",
"account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Πολυμέσα", "account.media": "Πολυμέσα",
"account.mention": "Ανάφερε @{name}", "account.mention": "Ανάφερε @{name}",
"account.moved_to": "{name} μεταφέρθηκε στο:", "account.moved_to": "{name} μεταφέρθηκε στο:",

@ -15,6 +15,7 @@
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Follows you", "account.follows_you": "Follows you",
"account.hide_reblogs": "Hide boosts from @{name}", "account.hide_reblogs": "Hide boosts from @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mention @{name}", "account.mention": "Mention @{name}",
"account.moved_to": "{name} has moved to:", "account.moved_to": "{name} has moved to:",

@ -15,6 +15,7 @@
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Sekvas vin", "account.follows_you": "Sekvas vin",
"account.hide_reblogs": "Kaŝi diskonigojn de @{name}", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Aŭdovidaĵoj", "account.media": "Aŭdovidaĵoj",
"account.mention": "Mencii @{name}", "account.mention": "Mencii @{name}",
"account.moved_to": "{name} moviĝis al:", "account.moved_to": "{name} moviĝis al:",

@ -7,14 +7,15 @@
"account.disclaimer_full": "La siguiente información del usuario puede estar incompleta.", "account.disclaimer_full": "La siguiente información del usuario puede estar incompleta.",
"account.domain_blocked": "Dominio oculto", "account.domain_blocked": "Dominio oculto",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
"account.endorse": "Feature on profile", "account.endorse": "Mostrar en perfil",
"account.follow": "Seguir", "account.follow": "Seguir",
"account.followers": "Seguidores", "account.followers": "Seguidores",
"account.followers.empty": "No one follows this user yet.", "account.followers.empty": "Nadie sigue a este usuario todavía.",
"account.follows": "Sigue", "account.follows": "Sigue",
"account.follows.empty": "This user doesn't follow anyone yet.", "account.follows.empty": "Este usuario todavía no sigue a nadie.",
"account.follows_you": "Te sigue", "account.follows_you": "Te sigue",
"account.hide_reblogs": "Ocultar retoots de @{name}", "account.hide_reblogs": "Ocultar retoots de @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mencionar a @{name}", "account.mention": "Mencionar a @{name}",
"account.moved_to": "{name} se ha mudado a:", "account.moved_to": "{name} se ha mudado a:",
@ -29,12 +30,12 @@
"account.show_reblogs": "Mostrar retoots de @{name}", "account.show_reblogs": "Mostrar retoots de @{name}",
"account.unblock": "Desbloquear a @{name}", "account.unblock": "Desbloquear a @{name}",
"account.unblock_domain": "Mostrar a {domain}", "account.unblock_domain": "Mostrar a {domain}",
"account.unendorse": "Don't feature on profile", "account.unendorse": "No mostrar en el perfil",
"account.unfollow": "Dejar de seguir", "account.unfollow": "Dejar de seguir",
"account.unmute": "Dejar de silenciar a @{name}", "account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
"account.view_full_profile": "Ver perfil completo", "account.view_full_profile": "Ver perfil completo",
"alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "Oops!", "alert.unexpected.title": "Oops!",
"boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez", "boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.", "bundle_column_error.body": "Algo salió mal al cargar este componente.",
@ -45,8 +46,8 @@
"bundle_modal_error.retry": "Inténtalo de nuevo", "bundle_modal_error.retry": "Inténtalo de nuevo",
"column.blocks": "Usuarios bloqueados", "column.blocks": "Usuarios bloqueados",
"column.community": "Línea de tiempo local", "column.community": "Línea de tiempo local",
"column.direct": "Direct messages", "column.direct": "Mensajes directos",
"column.domain_blocks": "Hidden domains", "column.domain_blocks": "Dominios ocultos",
"column.favourites": "Favoritos", "column.favourites": "Favoritos",
"column.follow_requests": "Solicitudes de seguimiento", "column.follow_requests": "Solicitudes de seguimiento",
"column.home": "Inicio", "column.home": "Inicio",
@ -63,9 +64,9 @@
"column_header.show_settings": "Mostrar ajustes", "column_header.show_settings": "Mostrar ajustes",
"column_header.unpin": "Dejar de fijar", "column_header.unpin": "Dejar de fijar",
"column_subheading.settings": "Ajustes", "column_subheading.settings": "Ajustes",
"community.column_settings.media_only": "Media Only", "community.column_settings.media_only": "Solo media",
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.",
"compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.direct_message_warning_learn_more": "Aprender mas",
"compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
"compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
"compose_form.lock_disclaimer.lock": "bloqueado", "compose_form.lock_disclaimer.lock": "bloqueado",
@ -85,11 +86,11 @@
"confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
"confirmations.domain_block.confirm": "Ocultar dominio entero", "confirmations.domain_block.confirm": "Ocultar dominio entero",
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio entero? En algunos casos es preferible bloquear o silenciar objetivos determinados.", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.",
"confirmations.mute.confirm": "Silenciar", "confirmations.mute.confirm": "Silenciar",
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
"confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.confirm": "Borrar y volver a borrador",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", "confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.",
"confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
"embed.instructions": "Añade este toot a tu sitio web con el siguiente código.", "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",
@ -108,62 +109,62 @@
"emoji_button.search_results": "Resultados de búsqueda", "emoji_button.search_results": "Resultados de búsqueda",
"emoji_button.symbols": "Símbolos", "emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viajes y lugares", "emoji_button.travel": "Viajes y lugares",
"empty_column.blocks": "You haven't blocked any users yet.", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.",
"empty_column.domain_blocks": "There are no hidden domains yet.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
"empty_column.hashtag": "No hay nada en este hashtag aún.", "empty_column.hashtag": "No hay nada en este hashtag aún.",
"empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.",
"empty_column.home.public_timeline": "la línea de tiempo pública", "empty_column.home.public_timeline": "la línea de tiempo pública",
"empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.",
"empty_column.mutes": "You haven't muted any users yet.", "empty_column.mutes": "Aún no has silenciado a ningún usuario.",
"empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
"empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
"follow_request.authorize": "Autorizar", "follow_request.authorize": "Autorizar",
"follow_request.reject": "Rechazar", "follow_request.reject": "Rechazar",
"getting_started.developers": "Developers", "getting_started.developers": "Desarrolladores",
"getting_started.documentation": "Documentation", "getting_started.documentation": "Documentation",
"getting_started.find_friends": "Find friends from Twitter", "getting_started.find_friends": "Encuentra a tus amigos desde Twitter",
"getting_started.heading": "Primeros pasos", "getting_started.heading": "Primeros pasos",
"getting_started.invite": "Invite people", "getting_started.invite": "Invitar usuarios",
"getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.",
"getting_started.security": "Security", "getting_started.security": "Seguridad",
"getting_started.terms": "Terms of service", "getting_started.terms": "Términos de servicio",
"home.column_settings.basic": "Básico", "home.column_settings.basic": "Básico",
"home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_reblogs": "Mostrar retoots",
"home.column_settings.show_replies": "Mostrar respuestas", "home.column_settings.show_replies": "Mostrar respuestas",
"keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.back": "volver atrás",
"keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados",
"keyboard_shortcuts.boost": "retootear", "keyboard_shortcuts.boost": "retootear",
"keyboard_shortcuts.column": "enfocar un estado en una de las columnas", "keyboard_shortcuts.column": "enfocar un estado en una de las columnas",
"keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.compose": "enfocar el área de texto de redacción",
"keyboard_shortcuts.description": "Description", "keyboard_shortcuts.description": "Description",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "abrir la columna de mensajes directos",
"keyboard_shortcuts.down": "mover hacia abajo en la lista", "keyboard_shortcuts.down": "mover hacia abajo en la lista",
"keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.enter": "to open status",
"keyboard_shortcuts.favourite": "añadir a favoritos", "keyboard_shortcuts.favourite": "añadir a favoritos",
"keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.favourites": "abrir la lista de favoritos",
"keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.federated": "abrir el timeline federado",
"keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.heading": "Keyboard Shortcuts",
"keyboard_shortcuts.home": "to open home timeline", "keyboard_shortcuts.home": "abrir el timeline propio",
"keyboard_shortcuts.hotkey": "Tecla caliente", "keyboard_shortcuts.hotkey": "Tecla caliente",
"keyboard_shortcuts.legend": "para mostrar esta leyenda", "keyboard_shortcuts.legend": "para mostrar esta leyenda",
"keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.local": "abrir el timeline local",
"keyboard_shortcuts.mention": "para mencionar al autor", "keyboard_shortcuts.mention": "para mencionar al autor",
"keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados",
"keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.my_profile": "abrir tu perfil",
"keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.notifications": "abrir la columna de notificaciones",
"keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.pinned": "abrir la lista de toots destacados",
"keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.profile": "abrir el perfil del autor",
"keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.reply": "para responder",
"keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores",
"keyboard_shortcuts.search": "para poner el foco en la búsqueda", "keyboard_shortcuts.search": "para poner el foco en la búsqueda",
"keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.start": "abrir la columna \"comenzar\"",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)",
"keyboard_shortcuts.toot": "para comenzar un nuevo toot", "keyboard_shortcuts.toot": "para comenzar un nuevo toot",
"keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda",
"keyboard_shortcuts.up": "para ir hacia arriba en la lista", "keyboard_shortcuts.up": "para ir hacia arriba en la lista",
@ -183,19 +184,19 @@
"missing_indicator.label": "No encontrado", "missing_indicator.label": "No encontrado",
"missing_indicator.sublabel": "No se encontró este recurso", "missing_indicator.sublabel": "No se encontró este recurso",
"mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
"navigation_bar.apps": "Mobile apps", "navigation_bar.apps": "Aplicaciones móviles",
"navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.community_timeline": "Historia local", "navigation_bar.community_timeline": "Historia local",
"navigation_bar.compose": "Compose new toot", "navigation_bar.compose": "Escribir un nuevo toot",
"navigation_bar.direct": "Direct messages", "navigation_bar.direct": "Mensajes directos",
"navigation_bar.discover": "Discover", "navigation_bar.discover": "Descubrir",
"navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.domain_blocks": "Dominios ocultos",
"navigation_bar.edit_profile": "Editar perfil", "navigation_bar.edit_profile": "Editar perfil",
"navigation_bar.favourites": "Favoritos", "navigation_bar.favourites": "Favoritos",
"navigation_bar.filters": "Muted words", "navigation_bar.filters": "Palabras silenciadas",
"navigation_bar.follow_requests": "Solicitudes para seguirte", "navigation_bar.follow_requests": "Solicitudes para seguirte",
"navigation_bar.info": "Información adicional", "navigation_bar.info": "Información adicional",
"navigation_bar.keyboard_shortcuts": "Atajos de teclado", "navigation_bar.keyboard_shortcuts": "Atajos",
"navigation_bar.lists": "Listas", "navigation_bar.lists": "Listas",
"navigation_bar.logout": "Cerrar sesión", "navigation_bar.logout": "Cerrar sesión",
"navigation_bar.mutes": "Usuarios silenciados", "navigation_bar.mutes": "Usuarios silenciados",
@ -203,7 +204,7 @@
"navigation_bar.pins": "Toots fijados", "navigation_bar.pins": "Toots fijados",
"navigation_bar.preferences": "Preferencias", "navigation_bar.preferences": "Preferencias",
"navigation_bar.public_timeline": "Historia federada", "navigation_bar.public_timeline": "Historia federada",
"navigation_bar.security": "Security", "navigation_bar.security": "Seguridad",
"notification.favourite": "{name} marcó tu estado como favorito", "notification.favourite": "{name} marcó tu estado como favorito",
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.mention": "{name} te ha mencionado", "notification.mention": "{name} te ha mencionado",
@ -219,7 +220,7 @@
"notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.reblog": "Retoots:",
"notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.show": "Mostrar en columna",
"notifications.column_settings.sound": "Reproducir sonido", "notifications.column_settings.sound": "Reproducir sonido",
"notifications.group": "{count} notifications", "notifications.group": "{count} notificaciones",
"onboarding.done": "Listo", "onboarding.done": "Listo",
"onboarding.next": "Siguiente", "onboarding.next": "Siguiente",
"onboarding.page_five.public_timelines": "La línea de tiempo local muestra toots públicos de todos en {domain}. La línea de tiempo federada muestra toots públicos de cualquiera a quien la gente de {domain} siga. Estas son las líneas de tiempo públicas, una buena forma de conocer gente nueva.", "onboarding.page_five.public_timelines": "La línea de tiempo local muestra toots públicos de todos en {domain}. La línea de tiempo federada muestra toots públicos de cualquiera a quien la gente de {domain} siga. Estas son las líneas de tiempo públicas, una buena forma de conocer gente nueva.",
@ -272,19 +273,19 @@
"search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag",
"search_popout.tips.user": "usuario", "search_popout.tips.user": "usuario",
"search_results.accounts": "Gente", "search_results.accounts": "Gente",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Etiquetas",
"search_results.statuses": "Toots", "search_results.statuses": "Toots",
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
"standalone.public_title": "Un pequeño vistazo...", "standalone.public_title": "Un pequeño vistazo...",
"status.block": "Block @{name}", "status.block": "Block @{name}",
"status.cancel_reblog_private": "Unboost", "status.cancel_reblog_private": "Des-impulsar",
"status.cannot_reblog": "Este toot no puede retootearse", "status.cannot_reblog": "Este toot no puede retootearse",
"status.delete": "Borrar", "status.delete": "Borrar",
"status.detailed_status": "Detailed conversation view", "status.detailed_status": "Vista de conversación detallada",
"status.direct": "Direct message @{name}", "status.direct": "Mensaje directo a @{name}",
"status.embed": "Incrustado", "status.embed": "Incrustado",
"status.favourite": "Favorito", "status.favourite": "Favorito",
"status.filtered": "Filtered", "status.filtered": "Filtrado",
"status.load_more": "Cargar más", "status.load_more": "Cargar más",
"status.media_hidden": "Contenido multimedia oculto", "status.media_hidden": "Contenido multimedia oculto",
"status.mention": "Mencionar", "status.mention": "Mencionar",
@ -295,10 +296,10 @@
"status.pin": "Fijar", "status.pin": "Fijar",
"status.pinned": "Toot fijado", "status.pinned": "Toot fijado",
"status.reblog": "Retootear", "status.reblog": "Retootear",
"status.reblog_private": "Boost to original audience", "status.reblog_private": "Implusar a la audiencia original",
"status.reblogged_by": "Retooteado por {name}", "status.reblogged_by": "Retooteado por {name}",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.reblogs.empty": "Nadie impulsó este toot todavía. Cuando alguien lo haga, aparecerá aqui.",
"status.redraft": "Delete & re-draft", "status.redraft": "Borrar y volver a borrador",
"status.reply": "Responder", "status.reply": "Responder",
"status.replyAll": "Responder al hilo", "status.replyAll": "Responder al hilo",
"status.report": "Reportar", "status.report": "Reportar",
@ -315,14 +316,14 @@
"tabs_bar.home": "Inicio", "tabs_bar.home": "Inicio",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notificaciones", "tabs_bar.notifications": "Notificaciones",
"tabs_bar.search": "Search", "tabs_bar.search": "Buscar",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
"upload_area.title": "Arrastra y suelta para subir", "upload_area.title": "Arrastra y suelta para subir",
"upload_button.label": "Subir multimedia", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_form.description": "Describir para los usuarios con dificultad visual", "upload_form.description": "Describir para los usuarios con dificultad visual",
"upload_form.focus": "Recortar", "upload_form.focus": "Recortar",
"upload_form.undo": "Deshacer", "upload_form.undo": "Borrar",
"upload_progress.label": "Subiendo…", "upload_progress.label": "Subiendo…",
"video.close": "Cerrar video", "video.close": "Cerrar video",
"video.exit_fullscreen": "Salir de pantalla completa", "video.exit_fullscreen": "Salir de pantalla completa",

@ -15,6 +15,7 @@
"account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.",
"account.follows_you": "Jarraitzen zaitu", "account.follows_you": "Jarraitzen zaitu",
"account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Media", "account.media": "Media",
"account.mention": "Aipatu @{name}", "account.mention": "Aipatu @{name}",
"account.moved_to": "{name} hona lekualdatu da:", "account.moved_to": "{name} hona lekualdatu da:",

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save