1
0
mirror of https://github.com/funamitech/mastodon synced 2024-11-27 06:18:53 +09:00

Merge branch 'glitch-soc:main' into main

This commit is contained in:
Noa Himesaka 2024-11-19 20:05:03 +09:00 committed by GitHub
commit ce801c6e63
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
259 changed files with 1938 additions and 800 deletions

View File

@ -2,6 +2,48 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [4.3.1] - 2024-10-21
### Added
- Add more explicit explanations about author attribution and `fediverse:creator` (#32383 by @ClearlyClaire)
- Add ability to group follow notifications in WebUI, can be disabled in the column settings (#32520 by @renchap)
- Add back a 6 hours mute duration option (#32522 by @renchap)
- Add note about not changing ActiveRecord encryption secrets once they are set (#32413, #32476, #32512, and #32537 by @ClearlyClaire and @mjankowski)
### Changed
- Change translation feature to translate to selected regional variant (e.g. pt-BR) if available (#32428 by @c960657)
### Removed
- Remove ability to get embed code for remote posts (#32578 by @ClearlyClaire)\
Getting the embed code is only reliable for local posts.\
It never worked for non-Mastodon servers, and stopped working correctly with the changes made in 4.3.0.\
We have therefore decided to remove the menu entry while we investigate solutions.
### Fixed
- Fix follow recommendation moderation page default language when using regional variant (#32580 by @ClearlyClaire)
- Fix column-settings spacing in local timeline in advanced view (#32567 by @lindwurm)
- Fix broken i18n in text welcome mailer tags area (#32571 by @mjankowski)
- Fix missing or incorrect cache-control headers for Streaming server (#32551 by @ThisIsMissEm)
- Fix only the first paragraph being displayed in some notifications (#32348 by @ClearlyClaire)
- Fix reblog icons on account media view (#32506 by @tribela)
- Fix Content-Security-Policy not allowing OpenStack SWIFT object storage URI (#32439 by @kenkiku1021)
- Fix back arrow pointing to the incorrect direction in RTL languages (#32485 by @renchap)
- Fix streaming server using `REDIS_USERNAME` instead of `REDIS_USER` (#32493 by @ThisIsMissEm)
- Fix follow recommendation carrousel scrolling on RTL layouts (#32462 and #32505 by @ClearlyClaire)
- Fix follow recommendation suppressions not applying immediately (#32392 by @ClearlyClaire)
- Fix language of push notifications (#32415 by @ClearlyClaire)
- Fix mute duration not being shown in list of muted accounts in web UI (#32388 by @ClearlyClaire)
- Fix “Mark every notification as read” not updating the read marker if scrolled down (#32385 by @ClearlyClaire)
- Fix “Mention” appearing for otherwise filtered posts (#32356 by @ClearlyClaire)
- Fix notification requests from suspended accounts still being listed (#32354 by @ClearlyClaire)
- Fix list edition modal styling (#32358 and #32367 by @ClearlyClaire and @vmstan)
- Fix 4 columns barely not fitting on 1920px screen (#32361 by @ClearlyClaire)
- Fix icon alignment in applications list (#32293 by @mjankowski)
## [4.3.0] - 2024-10-08 ## [4.3.0] - 2024-10-08
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski. The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski.

View File

@ -97,7 +97,7 @@ GEM
attr_required (1.0.2) attr_required (1.0.2)
awrence (1.2.1) awrence (1.2.1)
aws-eventstream (1.3.0) aws-eventstream (1.3.0)
aws-partitions (1.1001.0) aws-partitions (1.1004.0)
aws-sdk-core (3.212.0) aws-sdk-core (3.212.0)
aws-eventstream (~> 1, >= 1.3.0) aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0) aws-partitions (~> 1, >= 1.992.0)
@ -106,18 +106,18 @@ GEM
aws-sdk-kms (1.95.0) aws-sdk-kms (1.95.0)
aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-core (~> 3, >= 3.210.0)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.170.0) aws-sdk-s3 (1.170.1)
aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-core (~> 3, >= 3.210.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sigv4 (1.10.1) aws-sigv4 (1.10.1)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
azure-blob (0.5.2) azure-blob (0.5.3)
rexml rexml
base64 (0.2.0) base64 (0.2.0)
bcp47_spec (0.2.1) bcp47_spec (0.2.1)
bcrypt (3.1.20) bcrypt (3.1.20)
benchmark (0.3.0) benchmark (0.4.0)
better_errors (2.10.1) better_errors (2.10.1)
erubi (>= 1.0.0) erubi (>= 1.0.0)
rack (>= 0.9.0) rack (>= 0.9.0)
@ -131,7 +131,7 @@ GEM
msgpack (~> 1.2) msgpack (~> 1.2)
brakeman (6.2.2) brakeman (6.2.2)
racc racc
browser (6.0.0) browser (6.1.0)
brpoplpush-redis_script (0.1.3) brpoplpush-redis_script (0.1.3)
concurrent-ruby (~> 1.0, >= 1.0.5) concurrent-ruby (~> 1.0, >= 1.0.5)
redis (>= 1.0, < 6) redis (>= 1.0, < 6)
@ -178,7 +178,7 @@ GEM
activerecord (>= 5.a) activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0) database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1) database_cleaner-core (2.0.1)
date (3.3.4) date (3.4.0)
debug (1.9.2) debug (1.9.2)
irb (~> 1.10) irb (~> 1.10)
reline (>= 0.3.8) reline (>= 0.3.8)
@ -189,10 +189,10 @@ GEM
railties (>= 4.1.0) railties (>= 4.1.0)
responders responders
warden (~> 1.2.3) warden (~> 1.2.3)
devise-two-factor (6.0.0) devise-two-factor (6.1.0)
activesupport (~> 7.0) activesupport (>= 7.0, < 8.1)
devise (~> 4.0) devise (~> 4.0)
railties (~> 7.0) railties (>= 7.0, < 8.1)
rotp (~> 6.0) rotp (~> 6.0)
devise_pam_authenticatable2 (9.2.0) devise_pam_authenticatable2 (9.2.0)
devise (>= 4.0.0) devise (>= 4.0.0)
@ -330,7 +330,7 @@ GEM
azure-blob (~> 0.5.2) azure-blob (~> 0.5.2)
hashie (~> 5.0) hashie (~> 5.0)
jmespath (1.6.2) jmespath (1.6.2)
json (2.7.4) json (2.8.1)
json-canonicalization (1.0.0) json-canonicalization (1.0.0)
json-jwt (1.15.3.1) json-jwt (1.15.3.1)
activesupport (>= 4.2) activesupport (>= 4.2)
@ -407,16 +407,16 @@ GEM
mime-types (3.6.0) mime-types (3.6.0)
logger logger
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2024.1001) mime-types-data (3.2024.1105)
mini_mime (1.1.5) mini_mime (1.1.5)
mini_portile2 (2.8.7) mini_portile2 (2.8.7)
minitest (5.25.1) minitest (5.25.1)
msgpack (1.7.3) msgpack (1.7.5)
multi_json (1.15.0) multi_json (1.15.0)
mutex_m (0.2.0) mutex_m (0.2.0)
net-http (0.5.0) net-http (0.5.0)
uri uri
net-imap (0.5.0) net-imap (0.5.1)
date date
net-protocol net-protocol
net-ldap (0.19.0) net-ldap (0.19.0)
@ -554,10 +554,10 @@ GEM
opentelemetry-semantic_conventions (1.10.1) opentelemetry-semantic_conventions (1.10.1)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
orm_adapter (0.5.0) orm_adapter (0.5.0)
ostruct (0.6.0) ostruct (0.6.1)
ox (2.14.18) ox (2.14.18)
parallel (1.26.3) parallel (1.26.3)
parser (3.3.5.0) parser (3.3.6.0)
ast (~> 2.4.1) ast (~> 2.4.1)
racc racc
parslet (2.0.0) parslet (2.0.0)
@ -579,7 +579,7 @@ GEM
activesupport (>= 7.0.0) activesupport (>= 7.0.0)
rack rack
railties (>= 7.0.0) railties (>= 7.0.0)
psych (5.1.2) psych (5.2.0)
stringio stringio
public_suffix (6.0.1) public_suffix (6.0.1)
puma (6.4.3) puma (6.4.3)
@ -664,7 +664,7 @@ GEM
redlock (1.3.2) redlock (1.3.2)
redis (>= 3.0.0, < 6.0) redis (>= 3.0.0, < 6.0)
regexp_parser (2.9.2) regexp_parser (2.9.2)
reline (0.5.10) reline (0.5.11)
io-console (~> 0.5) io-console (~> 0.5)
request_store (1.6.0) request_store (1.6.0)
rack (>= 1.4) rack (>= 1.4)
@ -673,7 +673,7 @@ GEM
railties (>= 5.2) railties (>= 5.2)
rexml (3.3.9) rexml (3.3.9)
rotp (6.3.0) rotp (6.3.0)
rouge (4.4.0) rouge (4.5.1)
rpam2 (4.0.2) rpam2 (4.0.2)
rqrcode (2.2.0) rqrcode (2.2.0)
chunky_png (~> 1.0) chunky_png (~> 1.0)
@ -693,7 +693,7 @@ GEM
rspec-mocks (3.13.2) rspec-mocks (3.13.2)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0) rspec-support (~> 3.13.0)
rspec-rails (7.0.1) rspec-rails (7.1.0)
actionpack (>= 7.0) actionpack (>= 7.0)
activesupport (>= 7.0) activesupport (>= 7.0)
railties (>= 7.0) railties (>= 7.0)
@ -753,7 +753,7 @@ GEM
scenic (1.8.0) scenic (1.8.0)
activerecord (>= 4.0.0) activerecord (>= 4.0.0)
railties (>= 4.0.0) railties (>= 4.0.0)
securerandom (0.3.1) securerandom (0.3.2)
selenium-webdriver (4.26.0) selenium-webdriver (4.26.0)
base64 (~> 0.2) base64 (~> 0.2)
logger (~> 1.4) logger (~> 1.4)
@ -794,8 +794,8 @@ GEM
stackprof (0.2.26) stackprof (0.2.26)
stoplight (4.1.0) stoplight (4.1.0)
redlock (~> 1.0) redlock (~> 1.0)
stringio (3.1.1) stringio (3.1.2)
strong_migrations (2.0.2) strong_migrations (2.1.0)
activerecord (>= 6.1) activerecord (>= 6.1)
swd (1.3.0) swd (1.3.0)
activesupport (>= 3) activesupport (>= 3)
@ -810,7 +810,7 @@ GEM
test-prof (1.4.2) test-prof (1.4.2)
thor (1.3.2) thor (1.3.2)
tilt (2.4.0) tilt (2.4.0)
timeout (0.4.1) timeout (0.4.2)
tpm-key_attestation (0.12.1) tpm-key_attestation (0.12.1)
bindata (~> 2.4) bindata (~> 2.4)
openssl (> 2.0) openssl (> 2.0)
@ -867,7 +867,7 @@ GEM
rack-proxy (>= 0.6.1) rack-proxy (>= 0.6.1)
railties (>= 5.2) railties (>= 5.2)
semantic_range (>= 2.3.0) semantic_range (>= 2.3.0)
webrick (1.8.2) webrick (1.9.0)
websocket (1.2.11) websocket (1.2.11)
websocket-driver (0.7.6) websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)

View File

@ -58,10 +58,7 @@ module Admin
private private
def set_resolved_records def set_resolved_records
Resolv::DNS.open do |dns| @resolved_records = DomainResource.new(@email_domain_block.domain).mx
dns.timeouts = 5
@resolved_records = dns.getresources(@email_domain_block.domain, Resolv::DNS::Resource::IN::MX).to_a
end
end end
def resource_params def resource_params

View File

@ -21,6 +21,7 @@ module Admin
@relay = Relay.new(resource_params) @relay = Relay.new(resource_params)
if @relay.save if @relay.save
log_action :create, @relay
@relay.enable! @relay.enable!
redirect_to admin_relays_path redirect_to admin_relays_path
else else
@ -31,18 +32,21 @@ module Admin
def destroy def destroy
authorize :relay, :update? authorize :relay, :update?
@relay.destroy @relay.destroy
log_action :destroy, @relay
redirect_to admin_relays_path redirect_to admin_relays_path
end end
def enable def enable
authorize :relay, :update? authorize :relay, :update?
@relay.enable! @relay.enable!
log_action :enable, @relay
redirect_to admin_relays_path redirect_to admin_relays_path
end end
def disable def disable
authorize :relay, :update? authorize :relay, :update?
@relay.disable! @relay.disable!
log_action :disable, @relay
redirect_to admin_relays_path redirect_to admin_relays_path
end end

View File

@ -16,6 +16,8 @@ module Admin
def show def show
authorize [:admin, @status], :show? authorize [:admin, @status], :show?
@status_batch_action = Admin::StatusBatchAction.new
end end
def batch def batch

View File

@ -7,7 +7,6 @@ module WebAppControllerConcern
vary_by 'Accept, Accept-Language, Cookie' vary_by 'Accept, Accept-Language, Cookie'
before_action :redirect_unauthenticated_to_permalinks! before_action :redirect_unauthenticated_to_permalinks!
before_action :set_app_body_class
content_security_policy do |p| content_security_policy do |p|
policy = ContentSecurityPolicy.new policy = ContentSecurityPolicy.new
@ -24,10 +23,6 @@ module WebAppControllerConcern
!(ENV['ONE_CLICK_SSO_LOGIN'] == 'true' && ENV['OMNIAUTH_ONLY'] == 'true' && Devise.omniauth_providers.length == 1) && current_user.nil? !(ENV['ONE_CLICK_SSO_LOGIN'] == 'true' && ENV['OMNIAUTH_ONLY'] == 'true' && Devise.omniauth_providers.length == 1) && current_user.nil?
end end
def set_app_body_class
@body_classes = 'app-body'
end
def redirect_unauthenticated_to_permalinks! def redirect_unauthenticated_to_permalinks!
return if user_signed_in? # NOTE: Different from upstream because we allow moved users to log in return if user_signed_in? # NOTE: Different from upstream because we allow moved users to log in

View File

@ -35,12 +35,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio
end end
def set_last_used_at_by_app def set_last_used_at_by_app
@last_used_at_by_app = Doorkeeper::AccessToken @last_used_at_by_app = current_resource_owner.applications_last_used
.select('DISTINCT ON (application_id) application_id, last_used_at')
.where(resource_owner_id: current_resource_owner.id)
.where.not(last_used_at: nil)
.order(application_id: :desc, last_used_at: :desc)
.pluck(:application_id, :last_used_at)
.to_h
end end
end end

View File

@ -12,12 +12,12 @@ module Admin::AccountModerationNotesHelper
) )
end end
def admin_account_inline_link_to(account) def admin_account_inline_link_to(account, path: nil)
return if account.nil? return if account.nil?
link_to( link_to(
account_inline_text(account), account_inline_text(account),
admin_account_path(account.id), path || admin_account_path(account.id),
class: class_names('inline-name-tag', suspended: suspended_account?(account)), class: class_names('inline-name-tag', suspended: suspended_account?(account)),
title: account.acct title: account.acct
) )

View File

@ -33,6 +33,8 @@ module Admin::ActionLogsHelper
else else
I18n.t('admin.action_logs.deleted_account') I18n.t('admin.action_logs.deleted_account')
end end
when 'Relay'
link_to log.human_identifier, admin_relays_path
end end
end end

View File

@ -79,7 +79,7 @@ module ApplicationHelper
def html_title def html_title
safe_join( safe_join(
[content_for(:page_title).to_s.chomp, title] [content_for(:page_title), title]
.compact_blank, .compact_blank,
' - ' ' - '
) )

View File

@ -19,6 +19,7 @@ export const CollapseButton = ({ collapsed, setCollapsed }) => {
if (e.button === 0) { if (e.button === 0) {
setCollapsed(!collapsed); setCollapsed(!collapsed);
e.preventDefault(); e.preventDefault();
e.stopPropagation();
} }
}, [collapsed, setCollapsed]); }, [collapsed, setCollapsed]);

View File

@ -378,26 +378,29 @@ class Status extends ImmutablePureComponent {
const { isCollapsed } = this.state; const { isCollapsed } = this.state;
if (!history) return; if (!history) return;
if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey)) { if (e.button !== 0 || e.ctrlKey || e.altKey || e.metaKey) {
if (isCollapsed) this.setCollapsed(false); return;
else if (e.shiftKey) {
this.setCollapsed(true);
document.getSelection().removeAllRanges();
} else if (this.props.onClick) {
this.props.onClick();
return;
} else {
if (destination === undefined) {
destination = `/@${
status.getIn(['reblog', 'account', 'acct'], status.getIn(['account', 'acct']))
}/${
status.getIn(['reblog', 'id'], status.get('id'))
}`;
}
history.push(destination);
}
e.preventDefault();
} }
if (isCollapsed) this.setCollapsed(false);
else if (e.shiftKey) {
this.setCollapsed(true);
document.getSelection().removeAllRanges();
} else if (this.props.onClick) {
this.props.onClick();
return;
} else {
if (destination === undefined) {
destination = `/@${
status.getIn(['reblog', 'account', 'acct'], status.getIn(['account', 'acct']))
}/${
status.getIn(['reblog', 'id'], status.get('id'))
}`;
}
history.push(destination);
}
e.preventDefault();
}; };
handleToggleMediaVisibility = () => { handleToggleMediaVisibility = () => {
@ -590,6 +593,9 @@ class Status extends ImmutablePureComponent {
let prepend, rebloggedByText; let prepend, rebloggedByText;
const connectUp = previousId && previousId === status.get('in_reply_to_id');
const connectToRoot = rootId && rootId === status.get('in_reply_to_id');
const connectReply = nextInReplyToId && nextInReplyToId === status.get('id');
const matchedFilters = status.get('matched_filters'); const matchedFilters = status.get('matched_filters');
if (hidden) { if (hidden) {
@ -604,10 +610,6 @@ class Status extends ImmutablePureComponent {
); );
} }
const connectUp = previousId && previousId === status.get('in_reply_to_id');
const connectToRoot = rootId && rootId === status.get('in_reply_to_id');
const connectReply = nextInReplyToId && nextInReplyToId === status.get('id');
if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) { if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) {
const minHandlers = this.props.muted ? {} : { const minHandlers = this.props.muted ? {} : {
moveUp: this.handleHotkeyMoveUp, moveUp: this.handleHotkeyMoveUp,

View File

@ -18,15 +18,10 @@ export default class StatusHeader extends PureComponent {
parseClick: PropTypes.func.isRequired, parseClick: PropTypes.func.isRequired,
}; };
// Handles clicks on account name/image
handleClick = (acct, e) => {
const { parseClick } = this.props;
parseClick(e, `/@${acct}`);
};
handleAccountClick = (e) => { handleAccountClick = (e) => {
const { status } = this.props; const { status, parseClick } = this.props;
this.handleClick(status.getIn(['account', 'acct']), e); parseClick(e, `/@${status.getIn(['account', 'acct'])}`);
e.stopPropagation();
}; };
// Rendering. // Rendering.

View File

@ -7,16 +7,17 @@ export const MostUsedHashtag: React.FC<{
}> = ({ data }) => { }> = ({ data }) => {
const hashtag = data[0]; const hashtag = data[0];
if (!hashtag) {
return (
<div className='annual-report__bento__box annual-report__summary__most-used-hashtag' />
);
}
return ( return (
<div className='annual-report__bento__box annual-report__summary__most-used-hashtag'> <div className='annual-report__bento__box annual-report__summary__most-used-hashtag'>
<div className='annual-report__summary__most-used-hashtag__hashtag'> <div className='annual-report__summary__most-used-hashtag__hashtag'>
#{hashtag.name} {hashtag ? (
<>#{hashtag.name}</>
) : (
<FormattedMessage
id='annual_report.summary.most_used_hashtag.none'
defaultMessage='None'
/>
)}
</div> </div>
<div className='annual-report__summary__most-used-hashtag__label'> <div className='annual-report__summary__most-used-hashtag__label'>
<FormattedMessage <FormattedMessage

View File

@ -22,9 +22,9 @@ export const Percentile: React.FC<{
percentage: () => ( percentage: () => (
<div className='annual-report__summary__percentile__number'> <div className='annual-report__summary__percentile__number'>
<FormattedNumber <FormattedNumber
value={percentile / 100} value={Math.min(percentile, 99) / 100}
style='percent' style='percent'
maximumFractionDigits={1} maximumFractionDigits={percentile < 1 ? 1 : 0}
/> />
</div> </div>
), ),

View File

@ -532,7 +532,9 @@ class UI extends PureComponent {
} }
}; };
handleHotkeyBack = () => { handleHotkeyBack = e => {
e.preventDefault();
const { history } = this.props; const { history } = this.props;
if (history.location?.state?.fromMastodon) { if (history.location?.state?.fromMastodon) {

View File

@ -1943,3 +1943,31 @@ a.sparkline {
} }
} }
} }
.status__card {
padding: 15px;
border-radius: 4px;
background: $ui-base-color;
font-size: 15px;
line-height: 20px;
word-wrap: break-word;
font-weight: 400;
border: 1px solid lighten($ui-base-color, 4%);
color: $primary-text-color;
box-sizing: border-box;
min-height: 100%;
.status__prepend {
padding: 0 0 15px;
gap: 4px;
align-items: center;
}
.status__content {
padding-top: 0;
summary {
display: list-item;
}
}
}

View File

@ -103,6 +103,11 @@
background-color: var(--goldenrod-2); background-color: var(--goldenrod-2);
} }
} }
.status-card,
.hashtag-bar {
display: none;
}
} }
&__followers { &__followers {
@ -237,7 +242,7 @@
} }
&__number { &__number {
font-size: 61px; font-size: 54px;
font-weight: 600; font-weight: 600;
line-height: 73px; line-height: 73px;
color: var(--goldenrod-2); color: var(--goldenrod-2);
@ -306,7 +311,7 @@
} }
.annual-report-modal { .annual-report-modal {
max-width: 480px; max-width: 600px;
background: var(--indigo-1); background: var(--indigo-1);
border-radius: 16px; border-radius: 16px;
display: flex; display: flex;

View File

@ -598,3 +598,10 @@ a.sparkline {
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
opacity: 0.25; opacity: 0.25;
} }
.notification-group--annual-report {
.notification-group__icon,
.notification-group__main .link-button {
color: var(--indigo-3);
}
}

View File

@ -339,12 +339,12 @@ a.table-action-link {
} }
} }
.status__content { // Reset the status card to not have borders, background or padding when
padding-top: 0; // inline in the table of statuses
.status__card {
strong { border: none;
font-weight: 700; background: none;
} padding: 0;
} }
.nothing-here { .nothing-here {

View File

@ -395,24 +395,11 @@ class Status extends ImmutablePureComponent {
}; };
let media, statusAvatar, prepend, rebloggedByText; let media, statusAvatar, prepend, rebloggedByText;
const matchedFilters = status.get('matched_filters');
const expanded = (!matchedFilters || this.state.showDespiteFilter) && (!status.get('hidden') || status.get('spoiler_text').length === 0);
if (hidden) {
return (
<HotKeys handlers={handlers} tabIndex={unfocusable ? null : -1}>
<div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex={unfocusable ? null : 0}>
<span>{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}</span>
{status.get('spoiler_text').length > 0 && (<span>{status.get('spoiler_text')}</span>)}
{expanded && <span>{status.get('content')}</span>}
</div>
</HotKeys>
);
}
const connectUp = previousId && previousId === status.get('in_reply_to_id'); const connectUp = previousId && previousId === status.get('in_reply_to_id');
const connectToRoot = rootId && rootId === status.get('in_reply_to_id'); const connectToRoot = rootId && rootId === status.get('in_reply_to_id');
const connectReply = nextInReplyToId && nextInReplyToId === status.get('id'); const connectReply = nextInReplyToId && nextInReplyToId === status.get('id');
const matchedFilters = status.get('matched_filters');
if (featured) { if (featured) {
prepend = ( prepend = (
@ -448,6 +435,20 @@ class Status extends ImmutablePureComponent {
); );
} }
const expanded = (!matchedFilters || this.state.showDespiteFilter) && (!status.get('hidden') || status.get('spoiler_text').length === 0);
if (hidden) {
return (
<HotKeys handlers={handlers} tabIndex={unfocusable ? null : -1}>
<div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex={unfocusable ? null : 0}>
<span>{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}</span>
{status.get('spoiler_text').length > 0 && (<span>{status.get('spoiler_text')}</span>)}
{expanded && <span>{status.get('content')}</span>}
</div>
</HotKeys>
);
}
if (pictureInPicture.get('inUse')) { if (pictureInPicture.get('inUse')) {
media = <PictureInPicturePlaceholder aspectRatio={this.getAttachmentAspectRatio()} />; media = <PictureInPicturePlaceholder aspectRatio={this.getAttachmentAspectRatio()} />;
} else if (status.get('media_attachments').size > 0) { } else if (status.get('media_attachments').size > 0) {

View File

@ -7,16 +7,17 @@ export const MostUsedHashtag: React.FC<{
}> = ({ data }) => { }> = ({ data }) => {
const hashtag = data[0]; const hashtag = data[0];
if (!hashtag) {
return (
<div className='annual-report__bento__box annual-report__summary__most-used-hashtag' />
);
}
return ( return (
<div className='annual-report__bento__box annual-report__summary__most-used-hashtag'> <div className='annual-report__bento__box annual-report__summary__most-used-hashtag'>
<div className='annual-report__summary__most-used-hashtag__hashtag'> <div className='annual-report__summary__most-used-hashtag__hashtag'>
#{hashtag.name} {hashtag ? (
<>#{hashtag.name}</>
) : (
<FormattedMessage
id='annual_report.summary.most_used_hashtag.none'
defaultMessage='None'
/>
)}
</div> </div>
<div className='annual-report__summary__most-used-hashtag__label'> <div className='annual-report__summary__most-used-hashtag__label'>
<FormattedMessage <FormattedMessage

View File

@ -22,9 +22,9 @@ export const Percentile: React.FC<{
percentage: () => ( percentage: () => (
<div className='annual-report__summary__percentile__number'> <div className='annual-report__summary__percentile__number'>
<FormattedNumber <FormattedNumber
value={percentile / 100} value={Math.min(percentile, 99) / 100}
style='percent' style='percent'
maximumFractionDigits={1} maximumFractionDigits={percentile < 1 ? 1 : 0}
/> />
</div> </div>
), ),

View File

@ -482,7 +482,9 @@ class UI extends PureComponent {
} }
}; };
handleHotkeyBack = () => { handleHotkeyBack = e => {
e.preventDefault();
const { history } = this.props; const { history } = this.props;
if (history.location?.state?.fromMastodon) { if (history.location?.state?.fromMastodon) {

View File

@ -86,6 +86,7 @@
"alert.unexpected.title": "المعذرة!", "alert.unexpected.title": "المعذرة!",
"alt_text_badge.title": "نص بديل", "alt_text_badge.title": "نص بديل",
"announcement.announcement": "إعلان", "announcement.announcement": "إعلان",
"annual_report.summary.archetype.booster": "The cool-hunter",
"attachments_list.unprocessed": "(غير معالَج)", "attachments_list.unprocessed": "(غير معالَج)",
"audio.hide": "إخفاء المقطع الصوتي", "audio.hide": "إخفاء المقطع الصوتي",
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.", "block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",

View File

@ -154,7 +154,7 @@
"compose_form.hashtag_warning": "Гэты допіс не будзе паказаны пад аніякім хэштэгам, бо ён не публічны. Толькі публічныя допісы можна знайсці па хэштэгу.", "compose_form.hashtag_warning": "Гэты допіс не будзе паказаны пад аніякім хэштэгам, бо ён не публічны. Толькі публічныя допісы можна знайсці па хэштэгу.",
"compose_form.lock_disclaimer": "Ваш уліковы запіс не {locked}. Усе могуць падпісацца на вас, каб бачыць допісы толькі для падпісчыкаў.", "compose_form.lock_disclaimer": "Ваш уліковы запіс не {locked}. Усе могуць падпісацца на вас, каб бачыць допісы толькі для падпісчыкаў.",
"compose_form.lock_disclaimer.lock": "закрыты", "compose_form.lock_disclaimer.lock": "закрыты",
"compose_form.placeholder": "Што здарылася?", "compose_form.placeholder": "Што ў вас новага?",
"compose_form.poll.duration": "Працягласць апытання", "compose_form.poll.duration": "Працягласць апытання",
"compose_form.poll.multiple": "Множны выбар", "compose_form.poll.multiple": "Множны выбар",
"compose_form.poll.option_placeholder": "Варыянт {number}", "compose_form.poll.option_placeholder": "Варыянт {number}",

View File

@ -87,6 +87,17 @@
"alert.unexpected.title": "Опаа!", "alert.unexpected.title": "Опаа!",
"alt_text_badge.title": "Алтернативен текст", "alt_text_badge.title": "Алтернативен текст",
"announcement.announcement": "Оповестяване", "announcement.announcement": "Оповестяване",
"annual_report.summary.archetype.lurker": "Дебнещото",
"annual_report.summary.archetype.oracle": "Оракул",
"annual_report.summary.archetype.pollster": "Анкетьорче",
"annual_report.summary.archetype.replier": "Социална пеперуда",
"annual_report.summary.followers.followers": "последователи",
"annual_report.summary.followers.total": "{count} общо",
"annual_report.summary.highlighted_post.by_favourites": "най-правено като любима публикация",
"annual_report.summary.most_used_app.most_used_app": "най-употребявано приложение",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "най-употребяван хаштаг",
"annual_report.summary.new_posts.new_posts": "нови публикации",
"annual_report.summary.thanks": "Благодарим, че сте част от Mastodon!",
"attachments_list.unprocessed": "(необработено)", "attachments_list.unprocessed": "(необработено)",
"audio.hide": "Скриване на звука", "audio.hide": "Скриване на звука",
"block_modal.remote_users_caveat": "Ще поискаме сървърът {domain} да почита решението ви. Съгласието обаче не се гарантира откак някои сървъри могат да боравят с блоковете по различен начин. Обществените публикации още може да се виждат от невлезли в системата потребители.", "block_modal.remote_users_caveat": "Ще поискаме сървърът {domain} да почита решението ви. Съгласието обаче не се гарантира откак някои сървъри могат да боравят с блоковете по различен начин. Обществените публикации още може да се виждат от невлезли в системата потребители.",
@ -158,6 +169,7 @@
"compose_form.poll.duration": "Времетраене на анкетата", "compose_form.poll.duration": "Времетраене на анкетата",
"compose_form.poll.multiple": "Множествен избор", "compose_form.poll.multiple": "Множествен избор",
"compose_form.poll.option_placeholder": "Избор {number}", "compose_form.poll.option_placeholder": "Избор {number}",
"compose_form.poll.single": "Единичен избор",
"compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора", "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора",
"compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор", "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор",
"compose_form.poll.type": "Стил", "compose_form.poll.type": "Стил",
@ -195,6 +207,8 @@
"confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?", "confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?",
"confirmations.unfollow.title": "Спирате ли да следвате потребителя?", "confirmations.unfollow.title": "Спирате ли да следвате потребителя?",
"content_warning.hide": "Скриване на публ.", "content_warning.hide": "Скриване на публ.",
"content_warning.show": "Нека се покаже",
"content_warning.show_more": "Показване на още",
"conversation.delete": "Изтриване на разговора", "conversation.delete": "Изтриване на разговора",
"conversation.mark_as_read": "Маркиране като прочетено", "conversation.mark_as_read": "Маркиране като прочетено",
"conversation.open": "Преглед на разговора", "conversation.open": "Преглед на разговора",
@ -365,6 +379,9 @@
"home.pending_critical_update.link": "Преглед на обновяванията", "home.pending_critical_update.link": "Преглед на обновяванията",
"home.pending_critical_update.title": "Налично критично обновяване на сигурността!", "home.pending_critical_update.title": "Налично критично обновяване на сигурността!",
"home.show_announcements": "Показване на оповестяванията", "home.show_announcements": "Показване на оповестяванията",
"ignore_notifications_modal.disclaimer": "Mastodon не може да осведоми потребители, че сте пренебрегнали известията им. Пренебрегването на известията няма да спре самите съобщения да не бъдат изпращани.",
"ignore_notifications_modal.filter_to_act_users": "Вие все още ще може да приемате, отхвърляте или докладвате потребители",
"ignore_notifications_modal.filter_to_avoid_confusion": "Прецеждането помага за избягване на възможно объркване",
"interaction_modal.description.favourite": "Имайки акаунт в Mastodon, може да сложите тази публикации в любими, за да позволите на автора да узнае, че я цените и да я запазите за по-късно.", "interaction_modal.description.favourite": "Имайки акаунт в Mastodon, може да сложите тази публикации в любими, за да позволите на автора да узнае, че я цените и да я запазите за по-късно.",
"interaction_modal.description.follow": "С акаунт в Mastodon може да последвате {name}, за да получавате публикациите от този акаунт в началния си инфоканал.", "interaction_modal.description.follow": "С акаунт в Mastodon може да последвате {name}, за да получавате публикациите от този акаунт в началния си инфоканал.",
"interaction_modal.description.reblog": "С акаунт в Mastodon може да подсилите тази публикация, за да я споделите с последователите си.", "interaction_modal.description.reblog": "С акаунт в Mastodon може да подсилите тази публикация, за да я споделите с последователите си.",
@ -380,6 +397,7 @@
"interaction_modal.title.follow": "Последване на {name}", "interaction_modal.title.follow": "Последване на {name}",
"interaction_modal.title.reblog": "Подсилване на публикацията на {name}", "interaction_modal.title.reblog": "Подсилване на публикацията на {name}",
"interaction_modal.title.reply": "Отговаряне на публикацията на {name}", "interaction_modal.title.reply": "Отговаряне на публикацията на {name}",
"interaction_modal.title.vote": "Гласувайте в анкетата на {name}",
"intervals.full.days": "{number, plural, one {# ден} other {# дни}}", "intervals.full.days": "{number, plural, one {# ден} other {# дни}}",
"intervals.full.hours": "{number, plural, one {# час} other {# часа}}", "intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
"intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}", "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}",
@ -420,6 +438,8 @@
"lightbox.close": "Затваряне", "lightbox.close": "Затваряне",
"lightbox.next": "Напред", "lightbox.next": "Напред",
"lightbox.previous": "Назад", "lightbox.previous": "Назад",
"lightbox.zoom_in": "Увеличение до действителната големина",
"lightbox.zoom_out": "Увеличение до побиране",
"limited_account_hint.action": "Показване на профила въпреки това", "limited_account_hint.action": "Показване на профила въпреки това",
"limited_account_hint.title": "Този профил е бил скрит от модераторите на {domain}.", "limited_account_hint.title": "Този профил е бил скрит от модераторите на {domain}.",
"link_preview.author": "От {name}", "link_preview.author": "От {name}",
@ -441,6 +461,7 @@
"lists.subheading": "Вашите списъци", "lists.subheading": "Вашите списъци",
"load_pending": "{count, plural, one {# нов елемент} other {# нови елемента}}", "load_pending": "{count, plural, one {# нов елемент} other {# нови елемента}}",
"loading_indicator.label": "Зареждане…", "loading_indicator.label": "Зареждане…",
"media_gallery.hide": "Скриване",
"moved_to_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен, защото се преместихте в {movedToAccount}.", "moved_to_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен, защото се преместихте в {movedToAccount}.",
"mute_modal.hide_from_notifications": "Скриване от известията", "mute_modal.hide_from_notifications": "Скриване от известията",
"mute_modal.hide_options": "Скриване на възможностите", "mute_modal.hide_options": "Скриване на възможностите",
@ -489,6 +510,7 @@
"notification.favourite": "{name} направи любима публикацията ви", "notification.favourite": "{name} направи любима публикацията ви",
"notification.favourite.name_and_others_with_link": "{name} и <a>{count, plural, one {# друг} other {# други}}</a> направиха любима ваша публикация", "notification.favourite.name_and_others_with_link": "{name} и <a>{count, plural, one {# друг} other {# други}}</a> направиха любима ваша публикация",
"notification.follow": "{name} ви последва", "notification.follow": "{name} ви последва",
"notification.follow.name_and_others": "{name} и <a>{count, plural, one {# друг} other {# други}}</a> ви последваха",
"notification.follow_request": "{name} поиска да ви последва", "notification.follow_request": "{name} поиска да ви последва",
"notification.follow_request.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} поискаха да ви последват", "notification.follow_request.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} поискаха да ви последват",
"notification.label.mention": "Споменаване", "notification.label.mention": "Споменаване",
@ -496,6 +518,7 @@
"notification.label.private_reply": "Личен отговор", "notification.label.private_reply": "Личен отговор",
"notification.label.reply": "Отговор", "notification.label.reply": "Отговор",
"notification.mention": "Споменаване", "notification.mention": "Споменаване",
"notification.mentioned_you": "{name} ви спомена",
"notification.moderation-warning.learn_more": "Научете повече", "notification.moderation-warning.learn_more": "Научете повече",
"notification.moderation_warning": "Получихте предупреждение за модериране", "notification.moderation_warning": "Получихте предупреждение за модериране",
"notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.", "notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.",
@ -752,6 +775,7 @@
"status.bookmark": "Отмятане", "status.bookmark": "Отмятане",
"status.cancel_reblog_private": "Край на подсилването", "status.cancel_reblog_private": "Край на подсилването",
"status.cannot_reblog": "Публикацията не може да се подсилва", "status.cannot_reblog": "Публикацията не може да се подсилва",
"status.continued_thread": "Продължена нишка",
"status.copy": "Копиране на връзката към публикация", "status.copy": "Копиране на връзката към публикация",
"status.delete": "Изтриване", "status.delete": "Изтриване",
"status.detailed_status": "Подробен изглед на разговора", "status.detailed_status": "Подробен изглед на разговора",
@ -760,6 +784,7 @@
"status.edit": "Редактиране", "status.edit": "Редактиране",
"status.edited": "Последно редактирано на {date}", "status.edited": "Последно редактирано на {date}",
"status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}", "status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}",
"status.embed": "Вземане на кода за вграждане",
"status.favourite": "Любимо", "status.favourite": "Любимо",
"status.favourites": "{count, plural, one {любимо} other {любими}}", "status.favourites": "{count, plural, one {любимо} other {любими}}",
"status.filter": "Филтриране на публ.", "status.filter": "Филтриране на публ.",
@ -784,6 +809,7 @@
"status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.", "status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.",
"status.redraft": "Изтриване и преработване", "status.redraft": "Изтриване и преработване",
"status.remove_bookmark": "Премахване на отметката", "status.remove_bookmark": "Премахване на отметката",
"status.replied_in_thread": "Отговорено в нишката",
"status.replied_to": "В отговор до {name}", "status.replied_to": "В отговор до {name}",
"status.reply": "Отговор", "status.reply": "Отговор",
"status.replyAll": "Отговор на нишка", "status.replyAll": "Отговор на нишка",
@ -821,6 +847,7 @@
"upload_error.poll": "Качването на файлове не е позволено с анкети.", "upload_error.poll": "Качването на файлове не е позволено с анкети.",
"upload_form.audio_description": "Опишете за хора, които са глухи или трудно чуват", "upload_form.audio_description": "Опишете за хора, които са глухи или трудно чуват",
"upload_form.description": "Опишете за хора, които са слепи или имат слабо зрение", "upload_form.description": "Опишете за хора, които са слепи или имат слабо зрение",
"upload_form.drag_and_drop.instructions": "Натиснете интервал или enter, за да подберете мултимедийно прикачване. Провлачвайки, ползвайте клавишите със стрелки, за да премествате мултимедията във всяка дадена посока. Натиснете пак интервал или enter, за да се стовари мултимедийното прикачване в новото си положение или натиснете Esc за отмяна.",
"upload_form.edit": "Редактиране", "upload_form.edit": "Редактиране",
"upload_form.thumbnail": "Промяна на миниобраза", "upload_form.thumbnail": "Промяна на миниобраза",
"upload_form.video_description": "Опишете за хора, които са глухи или трудно чуват, слепи или имат слабо зрение", "upload_form.video_description": "Опишете за хора, които са глухи или трудно чуват, слепи или имат слабо зрение",

View File

@ -97,6 +97,7 @@
"annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "l'aplicació més utilitzada", "annual_report.summary.most_used_app.most_used_app": "l'aplicació més utilitzada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "l'etiqueta més utilitzada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "l'etiqueta més utilitzada",
"annual_report.summary.most_used_hashtag.none": "Cap",
"annual_report.summary.new_posts.new_posts": "publicacions noves", "annual_report.summary.new_posts.new_posts": "publicacions noves",
"annual_report.summary.thanks": "Gràcies per formar part de Mastodon!", "annual_report.summary.thanks": "Gràcies per formar part de Mastodon!",
"attachments_list.unprocessed": "(sense processar)", "attachments_list.unprocessed": "(sense processar)",

View File

@ -87,11 +87,30 @@
"alert.unexpected.title": "Wps!", "alert.unexpected.title": "Wps!",
"alt_text_badge.title": "Testun Amgen", "alt_text_badge.title": "Testun Amgen",
"announcement.announcement": "Cyhoeddiad", "announcement.announcement": "Cyhoeddiad",
"annual_report.summary.archetype.booster": "Y hyrwyddwr",
"annual_report.summary.archetype.lurker": "Yr arsylwr",
"annual_report.summary.archetype.oracle": "Yr oracl",
"annual_report.summary.archetype.pollster": "Yr arholwr",
"annual_report.summary.archetype.replier": "Y sbardunwr",
"annual_report.summary.followers.followers": "dilynwyr",
"annual_report.summary.followers.total": "{count} cyfanswm",
"annual_report.summary.here_it_is": "Dyma eich {year} yn gryno:",
"annual_report.summary.highlighted_post.by_favourites": "postiad wedi'i ffefrynu fwyaf",
"annual_report.summary.highlighted_post.by_reblogs": "postiad wedi'i hybu fwyaf",
"annual_report.summary.highlighted_post.by_replies": "postiad gyda'r ymatebion mwyaf",
"annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "ap a ddefnyddiwyd fwyaf",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashnod a ddefnyddiwyd fwyaf",
"annual_report.summary.most_used_hashtag.none": "Dim",
"annual_report.summary.new_posts.new_posts": "postiadau newydd",
"annual_report.summary.percentile.text": "<topLabel>Rydych chi yn y </topLabel><percentage></percentage><bottomLabel>mwyaf o ddefnyddwyr Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Ni fyddwn yn dweud wrth Bernie.",
"annual_report.summary.thanks": "Diolch am fod yn rhan o Mastodon!",
"attachments_list.unprocessed": "(heb eu prosesu)", "attachments_list.unprocessed": "(heb eu prosesu)",
"audio.hide": "Cuddio sain", "audio.hide": "Cuddio sain",
"block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystro mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.", "block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystro mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.",
"block_modal.show_less": "Dangos llai", "block_modal.show_less": "Dangos llai",
"block_modal.show_more": "Dangos mwy", "block_modal.show_more": "Dangos rhagor",
"block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.", "block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.",
"block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.", "block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.",
"block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.", "block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.",
@ -163,9 +182,9 @@
"compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis", "compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis",
"compose_form.poll.type": "Arddull", "compose_form.poll.type": "Arddull",
"compose_form.publish": "Postiad", "compose_form.publish": "Postiad",
"compose_form.publish_form": "Cyhoeddi", "compose_form.publish_form": "Postiad newydd",
"compose_form.reply": "Ateb", "compose_form.reply": "Ateb",
"compose_form.save_changes": "Diweddariad", "compose_form.save_changes": "Diweddaru",
"compose_form.spoiler.marked": "Dileu rhybudd cynnwys", "compose_form.spoiler.marked": "Dileu rhybudd cynnwys",
"compose_form.spoiler.unmarked": "Ychwanegu rhybudd cynnwys", "compose_form.spoiler.unmarked": "Ychwanegu rhybudd cynnwys",
"compose_form.spoiler_placeholder": "Rhybudd cynnwys (dewisol)", "compose_form.spoiler_placeholder": "Rhybudd cynnwys (dewisol)",
@ -508,6 +527,8 @@
"notification.admin.report_statuses_other": "Adroddodd {name} {target}", "notification.admin.report_statuses_other": "Adroddodd {name} {target}",
"notification.admin.sign_up": "Cofrestrodd {name}", "notification.admin.sign_up": "Cofrestrodd {name}",
"notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # arall}}", "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # arall}}",
"notification.annual_report.message": "Mae eich #Wrapstodon {year} yn aros i chi! Gwelwch eich uchafbwyntiau ac amseroedd i'w cofio o'r flwyddyn hon ar Mastodon!",
"notification.annual_report.view": "Gweld #Wrapstodon",
"notification.favourite": "Ffafriodd {name} eich postiad", "notification.favourite": "Ffafriodd {name} eich postiad",
"notification.favourite.name_and_others_with_link": "Ffafriodd {name} a <a>{count, plural, one {# arall} other {# arall}}</a> eich postiad", "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a <a>{count, plural, one {# arall} other {# arall}}</a> eich postiad",
"notification.follow": "Dilynodd {name} chi", "notification.follow": "Dilynodd {name} chi",

View File

@ -87,6 +87,25 @@
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Alt text", "alt_text_badge.title": "Alt text",
"announcement.announcement": "Bekendtgørelse", "announcement.announcement": "Bekendtgørelse",
"annual_report.summary.archetype.booster": "Cool-hunter",
"annual_report.summary.archetype.lurker": "Lurker",
"annual_report.summary.archetype.oracle": "Oracle",
"annual_report.summary.archetype.pollster": "Pollster",
"annual_report.summary.archetype.replier": "Social butterfly",
"annual_report.summary.followers.followers": "følgere",
"annual_report.summary.followers.total": "{count} i alt",
"annual_report.summary.here_it_is": "Her er {year} i sammendrag:",
"annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerede indlæg",
"annual_report.summary.highlighted_post.by_reblogs": "mest boostede indlæg",
"annual_report.summary.highlighted_post.by_replies": "indlæg med flest svar",
"annual_report.summary.highlighted_post.possessive": "{name}s",
"annual_report.summary.most_used_app.most_used_app": "mest benyttede app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede hashtag",
"annual_report.summary.most_used_hashtag.none": "Intet",
"annual_report.summary.new_posts.new_posts": "nye indlæg",
"annual_report.summary.percentile.text": "<topLabel>Det betyder, at man er i top</topLabel><percentage></percentage><bottomLabel>af Mastodon-brugere.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Vi fortæller det ikke til Bernie.",
"annual_report.summary.thanks": "Tak for at være en del af Mastodon!",
"attachments_list.unprocessed": "(ubehandlet)", "attachments_list.unprocessed": "(ubehandlet)",
"audio.hide": "Skjul lyd", "audio.hide": "Skjul lyd",
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.", "block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
@ -158,6 +177,7 @@
"compose_form.poll.duration": "Afstemningens varighed", "compose_form.poll.duration": "Afstemningens varighed",
"compose_form.poll.multiple": "Multivalg", "compose_form.poll.multiple": "Multivalg",
"compose_form.poll.option_placeholder": "Valgmulighed {number}", "compose_form.poll.option_placeholder": "Valgmulighed {number}",
"compose_form.poll.single": "Enkeltvalg",
"compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype", "compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype",
"compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype", "compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype",
"compose_form.poll.type": "Stil", "compose_form.poll.type": "Stil",
@ -507,6 +527,8 @@
"notification.admin.report_statuses_other": "{name} anmeldte {target}", "notification.admin.report_statuses_other": "{name} anmeldte {target}",
"notification.admin.sign_up": "{name} tilmeldte sig", "notification.admin.sign_up": "{name} tilmeldte sig",
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig", "notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig",
"notification.annual_report.message": "{year} #Wrapstodon venter! Afslør årets højdepunkter og mindeværdige øjeblikke på Mastodon!",
"notification.annual_report.view": "Vis #Wrapstodon",
"notification.favourite": "{name} favoritmarkerede dit indlæg", "notification.favourite": "{name} favoritmarkerede dit indlæg",
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> gjorde dit indlæg til favorit", "notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> gjorde dit indlæg til favorit",
"notification.follow": "{name} begyndte at følge dig", "notification.follow": "{name} begyndte at følge dig",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "am häufigsten verwendete App", "annual_report.summary.most_used_app.most_used_app": "am häufigsten verwendete App",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "am häufigsten verwendeter Hashtag", "annual_report.summary.most_used_hashtag.most_used_hashtag": "am häufigsten verwendeter Hashtag",
"annual_report.summary.most_used_hashtag.none": "Kein",
"annual_report.summary.new_posts.new_posts": "neue Beiträge", "annual_report.summary.new_posts.new_posts": "neue Beiträge",
"annual_report.summary.percentile.text": "<topLabel>Damit gehörst du zu den obersten</topLabel><percentage></percentage><bottomLabel>der Mastodon-Nutzer*innen.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Damit gehörst du zu den obersten</topLabel><percentage></percentage><bottomLabel>der Mastodon-Nutzer*innen.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Wir werden Bernie nichts verraten.", "annual_report.summary.percentile.we_wont_tell_bernie": "Wir werden Bernie nichts verraten.",
@ -525,15 +526,15 @@
"notification.admin.report_statuses": "{name} meldete {target} wegen {category}", "notification.admin.report_statuses": "{name} meldete {target} wegen {category}",
"notification.admin.report_statuses_other": "{name} meldete {target}", "notification.admin.report_statuses_other": "{name} meldete {target}",
"notification.admin.sign_up": "{name} registrierte sich", "notification.admin.sign_up": "{name} registrierte sich",
"notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} registrierten sich", "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} registrierten sich",
"notification.annual_report.message": "Dein {year} #Wrapstodon erwartet dich! Lass deine Highlights und unvergesslichen Momente auf Mastodon erneut aufleben!", "notification.annual_report.message": "Dein {year} #Wrapstodon erwartet dich! Lass deine Highlights und unvergesslichen Momente auf Mastodon erneut aufleben!",
"notification.annual_report.view": "#Wrapstodon ansehen", "notification.annual_report.view": "#Wrapstodon ansehen",
"notification.favourite": "{name} favorisierte deinen Beitrag", "notification.favourite": "{name} favorisierte deinen Beitrag",
"notification.favourite.name_and_others_with_link": "{name} und <a>{count, plural, one {# weitere Person} other {# weitere Personen}}</a> favorisierten deinen Beitrag", "notification.favourite.name_and_others_with_link": "{name} und <a>{count, plural, one {# weiteres Profil} other {# weitere Profile}}</a> favorisierten deinen Beitrag",
"notification.follow": "{name} folgt dir", "notification.follow": "{name} folgt dir",
"notification.follow.name_and_others": "{name} und <a>{count, plural, one {# weitere Person} other {# weitere Personen}}</a> folgen dir", "notification.follow.name_and_others": "{name} und <a>{count, plural, one {# weiteres Profil} other {# weitere Profile}}</a> folgen dir",
"notification.follow_request": "{name} möchte dir folgen", "notification.follow_request": "{name} möchte dir folgen",
"notification.follow_request.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} möchten dir folgen", "notification.follow_request.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} möchten dir folgen",
"notification.label.mention": "Erwähnung", "notification.label.mention": "Erwähnung",
"notification.label.private_mention": "Private Erwähnung", "notification.label.private_mention": "Private Erwähnung",
"notification.label.private_reply": "Private Antwort", "notification.label.private_reply": "Private Antwort",
@ -552,7 +553,7 @@
"notification.own_poll": "Deine Umfrage ist beendet", "notification.own_poll": "Deine Umfrage ist beendet",
"notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet", "notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
"notification.reblog": "{name} teilte deinen Beitrag", "notification.reblog": "{name} teilte deinen Beitrag",
"notification.reblog.name_and_others_with_link": "{name} und <a>{count, plural, one {# weitere Person} other {# weitere Personen}}</a> teilten deinen Beitrag", "notification.reblog.name_and_others_with_link": "{name} und <a>{count, plural, one {# weiteres Profil} other {# weitere Profile}}</a> teilten deinen Beitrag",
"notification.relationships_severance_event": "Verbindungen mit {name} verloren", "notification.relationships_severance_event": "Verbindungen mit {name} verloren",
"notification.relationships_severance_event.account_suspension": "Ein Admin von {from} hat {target} gesperrt. Du wirst von diesem Profil keine Updates mehr erhalten und auch nicht mit ihm interagieren können.", "notification.relationships_severance_event.account_suspension": "Ein Admin von {from} hat {target} gesperrt. Du wirst von diesem Profil keine Updates mehr erhalten und auch nicht mit ihm interagieren können.",
"notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.", "notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.",

View File

@ -87,6 +87,24 @@
"alert.unexpected.title": "Ουπς!", "alert.unexpected.title": "Ουπς!",
"alt_text_badge.title": "Εναλλακτικό κείμενο", "alt_text_badge.title": "Εναλλακτικό κείμενο",
"announcement.announcement": "Ανακοίνωση", "announcement.announcement": "Ανακοίνωση",
"annual_report.summary.archetype.booster": "Ο κυνηγός των φοβερών",
"annual_report.summary.archetype.lurker": "Ο διακριτικός",
"annual_report.summary.archetype.oracle": "Η Πυθία",
"annual_report.summary.archetype.pollster": "Ο δημοσκόπος",
"annual_report.summary.archetype.replier": "Η κοινωνική πεταλούδα",
"annual_report.summary.followers.followers": "ακόλουθοι",
"annual_report.summary.followers.total": "{count} συνολικά",
"annual_report.summary.here_it_is": "Εδώ είναι το {year} σου σε ανασκόπηση:",
"annual_report.summary.highlighted_post.by_favourites": "πιο αγαπημένη ανάρτηση",
"annual_report.summary.highlighted_post.by_reblogs": "πιο ενισχυμένη ανάρτηση",
"annual_report.summary.highlighted_post.by_replies": "ανάρτηση με τις περισσότερες απαντήσεις",
"annual_report.summary.highlighted_post.possessive": "του χρήστη {name}",
"annual_report.summary.most_used_app.most_used_app": "πιο χρησιμοποιημένη εφαρμογή",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "πιο χρησιμοποιημένη ετικέτα",
"annual_report.summary.new_posts.new_posts": "νέες αναρτήσεις",
"annual_report.summary.percentile.text": "<topLabel>Αυτό σε βάζει στην κορυφή του </topLabel><percentage></percentage><bottomLabel>των χρηστών του Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Δεν θα το πούμε στον Bernie.",
"annual_report.summary.thanks": "Ευχαριστούμε που συμμετέχεις στο Mastodon!",
"attachments_list.unprocessed": "(μη επεξεργασμένο)", "attachments_list.unprocessed": "(μη επεξεργασμένο)",
"audio.hide": "Απόκρυψη αρχείου ήχου", "audio.hide": "Απόκρυψη αρχείου ήχου",
"block_modal.remote_users_caveat": "Θα ζητήσουμε από τον διακομιστή {domain} να σεβαστεί την απόφασή σου. Ωστόσο, η συμμόρφωση δεν είναι εγγυημένη δεδομένου ότι ορισμένοι διακομιστές ενδέχεται να χειρίζονται τους αποκλεισμούς διαφορετικά. Οι δημόσιες αναρτήσεις ενδέχεται να είναι ορατές σε μη συνδεδεμένους χρήστες.", "block_modal.remote_users_caveat": "Θα ζητήσουμε από τον διακομιστή {domain} να σεβαστεί την απόφασή σου. Ωστόσο, η συμμόρφωση δεν είναι εγγυημένη δεδομένου ότι ορισμένοι διακομιστές ενδέχεται να χειρίζονται τους αποκλεισμούς διαφορετικά. Οι δημόσιες αναρτήσεις ενδέχεται να είναι ορατές σε μη συνδεδεμένους χρήστες.",
@ -158,6 +176,7 @@
"compose_form.poll.duration": "Διάρκεια δημοσκόπησης", "compose_form.poll.duration": "Διάρκεια δημοσκόπησης",
"compose_form.poll.multiple": "Πολλαπλή επιλογή", "compose_form.poll.multiple": "Πολλαπλή επιλογή",
"compose_form.poll.option_placeholder": "Επιλογή {number}", "compose_form.poll.option_placeholder": "Επιλογή {number}",
"compose_form.poll.single": "Μονή επιλογή",
"compose_form.poll.switch_to_multiple": "Ενημέρωση δημοσκόπησης με πολλαπλές επιλογές", "compose_form.poll.switch_to_multiple": "Ενημέρωση δημοσκόπησης με πολλαπλές επιλογές",
"compose_form.poll.switch_to_single": "Ενημέρωση δημοσκόπησης με μοναδική επιλογή", "compose_form.poll.switch_to_single": "Ενημέρωση δημοσκόπησης με μοναδική επιλογή",
"compose_form.poll.type": "Στυλ", "compose_form.poll.type": "Στυλ",
@ -196,6 +215,7 @@
"confirmations.unfollow.title": "Άρση ακολούθησης;", "confirmations.unfollow.title": "Άρση ακολούθησης;",
"content_warning.hide": "Απόκρυψη ανάρτησης", "content_warning.hide": "Απόκρυψη ανάρτησης",
"content_warning.show": "Εμφάνιση ούτως ή άλλως", "content_warning.show": "Εμφάνιση ούτως ή άλλως",
"content_warning.show_more": "Εμφάνιση περισσότερων",
"conversation.delete": "Διαγραφή συζήτησης", "conversation.delete": "Διαγραφή συζήτησης",
"conversation.mark_as_read": "Σήμανση ως αναγνωσμένο", "conversation.mark_as_read": "Σήμανση ως αναγνωσμένο",
"conversation.open": "Προβολή συνομιλίας", "conversation.open": "Προβολή συνομιλίας",
@ -304,6 +324,7 @@
"filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα", "filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα",
"filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης", "filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης",
"filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης", "filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης",
"filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “<span>{title}</span>”",
"filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις", "filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις",
"filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις", "filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις",
"firehose.all": "Όλα", "firehose.all": "Όλα",
@ -383,9 +404,10 @@
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.", "interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.", "interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
"interaction_modal.description.reply": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σε αυτή την ανάρτηση.", "interaction_modal.description.reply": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σε αυτή την ανάρτηση.",
"interaction_modal.login.action": "Take me home\nΠήγαινέ με στην αρχική σελίδα", "interaction_modal.description.vote": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σ' αυτή την ανάρτηση.",
"interaction_modal.login.action": "Πήγαινέ με στην αρχική σελίδα",
"interaction_modal.login.prompt": "Τομέας του οικιακού σου διακομιστή, πχ. mastodon.social", "interaction_modal.login.prompt": "Τομέας του οικιακού σου διακομιστή, πχ. mastodon.social",
"interaction_modal.no_account_yet": "Not on Mastodon?\nΔεν είστε στο Mastodon;", "interaction_modal.no_account_yet": "Δεν είστε στο Mastodon;",
"interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή", "interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
"interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή", "interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
"interaction_modal.sign_in": "Δεν είσαι συνδεδεμένος σε αυτόν το διακομιστή. Πού φιλοξενείται ο λογαριασμός σου;", "interaction_modal.sign_in": "Δεν είσαι συνδεδεμένος σε αυτόν το διακομιστή. Πού φιλοξενείται ο λογαριασμός σου;",
@ -394,6 +416,7 @@
"interaction_modal.title.follow": "Ακολούθησε {name}", "interaction_modal.title.follow": "Ακολούθησε {name}",
"interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}", "interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
"interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}", "interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}",
"interaction_modal.title.vote": "Ψήφισε στη δημοσκόπηση του χρήστη {name}",
"intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
"intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}", "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
"intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}", "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
@ -503,9 +526,12 @@
"notification.admin.report_statuses_other": "Ο χρήστης {name} ανέφερε τον χρήστη {target}", "notification.admin.report_statuses_other": "Ο χρήστης {name} ανέφερε τον χρήστη {target}",
"notification.admin.sign_up": "{name} έχει εγγραφεί", "notification.admin.sign_up": "{name} έχει εγγραφεί",
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί", "notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
"notification.annual_report.message": "Το #Wrapstodon {year} σε περιμένει! Αποκάλυψε τα στιγμιότυπα της χρονιάς και αξέχαστες στιγμές σου στο Mastodon!",
"notification.annual_report.view": "Προβολή #Wrapstodon",
"notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου", "notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου",
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου", "notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου",
"notification.follow": "Ο/Η {name} σε ακολούθησε", "notification.follow": "Ο/Η {name} σε ακολούθησε",
"notification.follow.name_and_others": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> σε ακολούθησαν",
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει", "notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
"notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν", "notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν",
"notification.label.mention": "Επισήμανση", "notification.label.mention": "Επισήμανση",
@ -513,6 +539,7 @@
"notification.label.private_reply": "Ιδιωτική απάντηση", "notification.label.private_reply": "Ιδιωτική απάντηση",
"notification.label.reply": "Απάντηση", "notification.label.reply": "Απάντηση",
"notification.mention": "Επισήμανση", "notification.mention": "Επισήμανση",
"notification.mentioned_you": "Ο χρήστης {name} σε επισήμανε",
"notification.moderation-warning.learn_more": "Μάθε περισσότερα", "notification.moderation-warning.learn_more": "Μάθε περισσότερα",
"notification.moderation_warning": "Έχετε λάβει μία προειδοποίηση συντονισμού", "notification.moderation_warning": "Έχετε λάβει μία προειδοποίηση συντονισμού",
"notification.moderation_warning.action_delete_statuses": "Ορισμένες από τις αναρτήσεις σου έχουν αφαιρεθεί.", "notification.moderation_warning.action_delete_statuses": "Ορισμένες από τις αναρτήσεις σου έχουν αφαιρεθεί.",
@ -563,6 +590,7 @@
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου", "notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
"notifications.column_settings.follow": "Νέοι ακόλουθοι:", "notifications.column_settings.follow": "Νέοι ακόλουθοι:",
"notifications.column_settings.follow_request": "Νέο αίτημα ακολούθησης:", "notifications.column_settings.follow_request": "Νέο αίτημα ακολούθησης:",
"notifications.column_settings.group": "Ομάδα",
"notifications.column_settings.mention": "Επισημάνσεις:", "notifications.column_settings.mention": "Επισημάνσεις:",
"notifications.column_settings.poll": "Αποτελέσματα δημοσκόπησης:", "notifications.column_settings.poll": "Αποτελέσματα δημοσκόπησης:",
"notifications.column_settings.push": "Ειδοποιήσεις Push", "notifications.column_settings.push": "Ειδοποιήσεις Push",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}'s", "annual_report.summary.highlighted_post.possessive": "{name}'s",
"annual_report.summary.most_used_app.most_used_app": "most used app", "annual_report.summary.most_used_app.most_used_app": "most used app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag", "annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag",
"annual_report.summary.most_used_hashtag.none": "None",
"annual_report.summary.new_posts.new_posts": "new posts", "annual_report.summary.new_posts.new_posts": "new posts",
"annual_report.summary.percentile.text": "<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of Mastodon users.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of Mastodon users.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.",

View File

@ -90,6 +90,8 @@
"annual_report.summary.archetype.replier": "La plej societema", "annual_report.summary.archetype.replier": "La plej societema",
"annual_report.summary.followers.followers": "sekvantoj", "annual_report.summary.followers.followers": "sekvantoj",
"annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj", "annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj",
"annual_report.summary.most_used_app.most_used_app": "plej uzita apo",
"annual_report.summary.most_used_hashtag.none": "Nenio",
"annual_report.summary.new_posts.new_posts": "novaj afiŝoj", "annual_report.summary.new_posts.new_posts": "novaj afiŝoj",
"annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!", "annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!",
"attachments_list.unprocessed": "(neprilaborita)", "attachments_list.unprocessed": "(neprilaborita)",
@ -219,7 +221,7 @@
"dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.", "dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.",
"dismissable_banner.dismiss": "Eksigi", "dismissable_banner.dismiss": "Eksigi",
"dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.", "dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.",
"dismissable_banner.explore_statuses": "Ĉi tiuj estas afiŝoj de la tuta socia reto, kiuj populariĝas hodiaŭ. Pli novaj afiŝoj kun pli da diskonigoj kaj plej ŝatataj estas rangigitaj pli alte.", "dismissable_banner.explore_statuses": "Jen afiŝoj en la socia reto kiuj populariĝis hodiaŭ. Novaj afiŝoj kun pli da diskonigoj kaj stelumoj aperas pli alte.",
"dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.",
"dismissable_banner.public_timeline": "Ĉi tiuj estas la plej lastatempaj publikaj afiŝoj de homoj en la socia reto, kiujn homoj sur {domain} sekvas.", "dismissable_banner.public_timeline": "Ĉi tiuj estas la plej lastatempaj publikaj afiŝoj de homoj en la socia reto, kiujn homoj sur {domain} sekvas.",
"domain_block_modal.block": "Bloki servilon", "domain_block_modal.block": "Bloki servilon",
@ -338,7 +340,7 @@
"followed_tags": "Sekvataj kradvortoj", "followed_tags": "Sekvataj kradvortoj",
"footer.about": "Pri", "footer.about": "Pri",
"footer.directory": "Profilujo", "footer.directory": "Profilujo",
"footer.get_app": "Akiru la Programon", "footer.get_app": "Akiri la apon",
"footer.invite": "Inviti homojn", "footer.invite": "Inviti homojn",
"footer.keyboard_shortcuts": "Fulmoklavoj", "footer.keyboard_shortcuts": "Fulmoklavoj",
"footer.privacy_policy": "Politiko de privateco", "footer.privacy_policy": "Politiko de privateco",
@ -387,7 +389,7 @@
"ignore_notifications_modal.not_followers_title": "Ĉu ignori sciigojn de homoj, kiuj ne sekvas vin?", "ignore_notifications_modal.not_followers_title": "Ĉu ignori sciigojn de homoj, kiuj ne sekvas vin?",
"ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?", "ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?",
"ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?", "ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?",
"interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.", "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumi ĉi tiun afiŝon por sciigi la afiŝanton ke vi sâtas kaj konservas ĝin por poste.",
"interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povas sekvi {name} por ricevi iliajn afiŝojn en via hejma fluo.", "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povas sekvi {name} por ricevi iliajn afiŝojn en via hejma fluo.",
"interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.",
"interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu afiŝo.", "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu afiŝo.",
@ -646,7 +648,7 @@
"onboarding.start.lead": "Vi nun estas parto de Mastodon, unika, malcentralizita socia amaskomunikilara platformo, kie vi—ne algoritmo—zorgas vian propran sperton. Ni komencu vin sur ĉi tiu nova socia limo:", "onboarding.start.lead": "Vi nun estas parto de Mastodon, unika, malcentralizita socia amaskomunikilara platformo, kie vi—ne algoritmo—zorgas vian propran sperton. Ni komencu vin sur ĉi tiu nova socia limo:",
"onboarding.start.skip": "Ĉu vi ne bezonas helpon por komenci?", "onboarding.start.skip": "Ĉu vi ne bezonas helpon por komenci?",
"onboarding.start.title": "Vi atingas ĝin!", "onboarding.start.title": "Vi atingas ĝin!",
"onboarding.steps.follow_people.body": "Sekvi interesajn homojn estas pri kio Mastodonto temas.", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Agordu vian hejman fluon", "onboarding.steps.follow_people.title": "Agordu vian hejman fluon",
"onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}", "onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}",
"onboarding.steps.publish_status.title": "Fari vian unuan afiŝon", "onboarding.steps.publish_status.title": "Fari vian unuan afiŝon",
@ -780,9 +782,9 @@
"server_banner.is_one_of_many": "{domain} estas unu el la multaj sendependaj Mastodon-serviloj, kiujn vi povas uzi por partopreni en la fediverso.", "server_banner.is_one_of_many": "{domain} estas unu el la multaj sendependaj Mastodon-serviloj, kiujn vi povas uzi por partopreni en la fediverso.",
"server_banner.server_stats": "Statistikoj de la servilo:", "server_banner.server_stats": "Statistikoj de la servilo:",
"sign_in_banner.create_account": "Krei konton", "sign_in_banner.create_account": "Krei konton",
"sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.", "sign_in_banner.follow_anyone": "Sekvu iun ajn tra la fediverso kaj vidu ĉion laŭ templinio. Nul algoritmo, reklamo aŭ kliklogilo ĉeestas.",
"sign_in_banner.mastodon_is": "Mastodonto estas la plej bona maniero por resti flank-al-flanke kun kio okazas.", "sign_in_banner.mastodon_is": "Mastodon estas la plej bona maniero resti ĝisdata pri aktualaĵoj.",
"sign_in_banner.sign_in": "Saluti", "sign_in_banner.sign_in": "Ensaluti",
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
"status.admin_account": "Malfermi fasadon de moderigado por @{name}", "status.admin_account": "Malfermi fasadon de moderigado por @{name}",
"status.admin_domain": "Malfermu moderigan interfacon por {domain}", "status.admin_domain": "Malfermu moderigan interfacon por {domain}",

View File

@ -87,22 +87,23 @@
"alert.unexpected.title": "¡Epa!", "alert.unexpected.title": "¡Epa!",
"alt_text_badge.title": "Texto alternativo", "alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anuncio", "announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "El cazador de tendencias", "annual_report.summary.archetype.booster": "Corrió la voz",
"annual_report.summary.archetype.lurker": "El acechador", "annual_report.summary.archetype.lurker": "El acechador",
"annual_report.summary.archetype.oracle": "El oráculo", "annual_report.summary.archetype.oracle": "El oráculo",
"annual_report.summary.archetype.pollster": "El encuestador", "annual_report.summary.archetype.pollster": "Estuvo consultando",
"annual_report.summary.archetype.replier": "El más sociable", "annual_report.summary.archetype.replier": "Respondió un montón",
"annual_report.summary.followers.followers": "seguidores", "annual_report.summary.followers.followers": "seguidores",
"annual_report.summary.followers.total": "{count} en total", "annual_report.summary.followers.total": "{count} en total",
"annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", "annual_report.summary.here_it_is": "Acá está tu resumen de {year}:",
"annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos", "annual_report.summary.highlighted_post.by_favourites": "el mensaje más veces marcado como favorito",
"annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", "annual_report.summary.highlighted_post.by_reblogs": "el mensaje que más adhesiones recibió",
"annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", "annual_report.summary.highlighted_post.by_replies": "el mensaje que más respuestas recibió",
"annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "aplicación más usada", "annual_report.summary.most_used_app.most_used_app": "la aplicación más usada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "la etiqueta más usada",
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones", "annual_report.summary.most_used_hashtag.none": "Ninguna",
"annual_report.summary.percentile.text": "<topLabel>Eso te pone en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>", "annual_report.summary.new_posts.new_posts": "nuevos mensajes",
"annual_report.summary.percentile.text": "<topLabel>Eso te pone en la cima</topLabel><percentage></percentage><bottomLabel>de los usuarios de Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
"attachments_list.unprocessed": "[sin procesar]", "attachments_list.unprocessed": "[sin procesar]",

View File

@ -89,9 +89,9 @@
"announcement.announcement": "Anuncio", "announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "El cazador de tendencias", "annual_report.summary.archetype.booster": "El cazador de tendencias",
"annual_report.summary.archetype.lurker": "El acechador", "annual_report.summary.archetype.lurker": "El acechador",
"annual_report.summary.archetype.oracle": "El oráculo", "annual_report.summary.archetype.oracle": "El oraculo",
"annual_report.summary.archetype.pollster": "El encuestador", "annual_report.summary.archetype.pollster": "El encuestador",
"annual_report.summary.archetype.replier": "El más sociable", "annual_report.summary.archetype.replier": "La mariposa sociable",
"annual_report.summary.followers.followers": "seguidores", "annual_report.summary.followers.followers": "seguidores",
"annual_report.summary.followers.total": "{count} en total", "annual_report.summary.followers.total": "{count} en total",
"annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:",
@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "aplicación más usada", "annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
"annual_report.summary.most_used_hashtag.none": "Ninguna",
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones", "annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
"annual_report.summary.percentile.text": "<topLabel>Eso te pone en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Eso te pone en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "aplicación más usada", "annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
"annual_report.summary.most_used_hashtag.none": "Ninguna",
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones", "annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
"annual_report.summary.percentile.text": "<topLabel>Eso te pone en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Eso te pone en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",

View File

@ -87,10 +87,22 @@
"alert.unexpected.title": "Hups!", "alert.unexpected.title": "Hups!",
"alt_text_badge.title": "Vaihtoehtoinen teksti", "alt_text_badge.title": "Vaihtoehtoinen teksti",
"announcement.announcement": "Tiedote", "announcement.announcement": "Tiedote",
"annual_report.summary.archetype.booster": "Tehostaja",
"annual_report.summary.archetype.lurker": "Lymyilijä",
"annual_report.summary.archetype.oracle": "Oraakkeli",
"annual_report.summary.archetype.pollster": "Mielipidetutkija",
"annual_report.summary.archetype.replier": "Sosiaalinen perhonen", "annual_report.summary.archetype.replier": "Sosiaalinen perhonen",
"annual_report.summary.followers.followers": "seuraajaa",
"annual_report.summary.followers.total": "{count} yhteensä",
"annual_report.summary.here_it_is": "Tässä on katsaus vuoteesi {year}:",
"annual_report.summary.highlighted_post.by_favourites": "suosikkeihin lisätyin julkaisu",
"annual_report.summary.highlighted_post.by_reblogs": "tehostetuin julkaisu", "annual_report.summary.highlighted_post.by_reblogs": "tehostetuin julkaisu",
"annual_report.summary.highlighted_post.by_replies": "julkaisu, jolla on eniten vastauksia",
"annual_report.summary.highlighted_post.possessive": "Käyttäjän {name}",
"annual_report.summary.most_used_app.most_used_app": "käytetyin sovellus", "annual_report.summary.most_used_app.most_used_app": "käytetyin sovellus",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "käytetyin aihetunniste", "annual_report.summary.most_used_hashtag.most_used_hashtag": "käytetyin aihetunniste",
"annual_report.summary.new_posts.new_posts": "uutta julkaisua",
"annual_report.summary.percentile.text": "<topLabel>Olet osa huippujoukkoa, johon kuuluu</topLabel><percentage></percentage><bottomLabel>Mastodon-käyttäjistä.</bottomLabel>",
"annual_report.summary.thanks": "Kiitos, että olet osa Mastodonia!", "annual_report.summary.thanks": "Kiitos, että olet osa Mastodonia!",
"attachments_list.unprocessed": "(käsittelemätön)", "attachments_list.unprocessed": "(käsittelemätön)",
"audio.hide": "Piilota ääni", "audio.hide": "Piilota ääni",
@ -513,6 +525,7 @@
"notification.admin.report_statuses_other": "{name} raportoi käyttäjän {target}", "notification.admin.report_statuses_other": "{name} raportoi käyttäjän {target}",
"notification.admin.sign_up": "{name} rekisteröityi", "notification.admin.sign_up": "{name} rekisteröityi",
"notification.admin.sign_up.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} rekisteröityivät", "notification.admin.sign_up.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} rekisteröityivät",
"notification.annual_report.message": "Vuoden {year} #Wrapstodon odottaa! Paljasta vuotesi kohokohdat ikimuistoiset hetket Mastodonissa!",
"notification.annual_report.view": "Näytä #Wrapstodon", "notification.annual_report.view": "Näytä #Wrapstodon",
"notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa", "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa",
"notification.favourite.name_and_others_with_link": "{name} ja <a>{count, plural, one {# muu} other {# muuta}}</a> lisäsivät julkaisusi suosikkeihinsa", "notification.favourite.name_and_others_with_link": "{name} ja <a>{count, plural, one {# muu} other {# muuta}}</a> lisäsivät julkaisusi suosikkeihinsa",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "hjá {name}", "annual_report.summary.highlighted_post.possessive": "hjá {name}",
"annual_report.summary.most_used_app.most_used_app": "mest brúkta app", "annual_report.summary.most_used_app.most_used_app": "mest brúkta app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brúkta frámerki", "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brúkta frámerki",
"annual_report.summary.most_used_hashtag.none": "Einki",
"annual_report.summary.new_posts.new_posts": "nýggir postar", "annual_report.summary.new_posts.new_posts": "nýggir postar",
"annual_report.summary.percentile.text": "<topLabel>Tað fær teg í topp</topLabel><percentage></percentage><bottomLabel>av Mastodon brúkarum.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Tað fær teg í topp</topLabel><percentage></percentage><bottomLabel>av Mastodon brúkarum.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Vit fara ikki at fortelja Bernie tað.", "annual_report.summary.percentile.we_wont_tell_bernie": "Vit fara ikki at fortelja Bernie tað.",

View File

@ -87,6 +87,9 @@
"alert.unexpected.title": "Oups!", "alert.unexpected.title": "Oups!",
"alt_text_badge.title": "Texte Alt", "alt_text_badge.title": "Texte Alt",
"announcement.announcement": "Annonce", "announcement.announcement": "Annonce",
"annual_report.summary.archetype.oracle": "Loracle",
"annual_report.summary.here_it_is": "Voici votre récap de {year}:",
"annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée",
"attachments_list.unprocessed": "(non traité)", "attachments_list.unprocessed": "(non traité)",
"audio.hide": "Masquer l'audio", "audio.hide": "Masquer l'audio",
"block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.",

View File

@ -87,6 +87,9 @@
"alert.unexpected.title": "Oups!", "alert.unexpected.title": "Oups!",
"alt_text_badge.title": "Texte Alt", "alt_text_badge.title": "Texte Alt",
"announcement.announcement": "Annonce", "announcement.announcement": "Annonce",
"annual_report.summary.archetype.oracle": "Loracle",
"annual_report.summary.here_it_is": "Voici votre récap de {year}:",
"annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée",
"attachments_list.unprocessed": "(non traité)", "attachments_list.unprocessed": "(non traité)",
"audio.hide": "Masquer l'audio", "audio.hide": "Masquer l'audio",
"block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.",

View File

@ -87,6 +87,11 @@
"alert.unexpected.title": "Vaites!", "alert.unexpected.title": "Vaites!",
"alt_text_badge.title": "Texto Alt", "alt_text_badge.title": "Texto Alt",
"announcement.announcement": "Anuncio", "announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "A axencia de noticias",
"annual_report.summary.archetype.lurker": "Volleur",
"annual_report.summary.archetype.oracle": "Sabichón/e",
"annual_report.summary.archetype.pollster": "O INE",
"annual_report.summary.archetype.replier": "Lareteire",
"annual_report.summary.followers.followers": "seguidoras", "annual_report.summary.followers.followers": "seguidoras",
"annual_report.summary.followers.total": "{count} en total", "annual_report.summary.followers.total": "{count} en total",
"annual_report.summary.here_it_is": "Este é o resumo do teu {year}:", "annual_report.summary.here_it_is": "Este é o resumo do teu {year}:",
@ -96,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "app que mais usaches", "annual_report.summary.most_used_app.most_used_app": "app que mais usaches",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "o cancelo mais utilizado", "annual_report.summary.most_used_hashtag.most_used_hashtag": "o cancelo mais utilizado",
"annual_report.summary.most_used_hashtag.none": "Nada",
"annual_report.summary.new_posts.new_posts": "novas publicacións", "annual_report.summary.new_posts.new_posts": "novas publicacións",
"annual_report.summary.percentile.text": "<topLabel>Sitúante no top</topLabel><percentage></percentage><bottomLabel> das usuarias de Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Sitúante no top</topLabel><percentage></percentage><bottomLabel> das usuarias de Mastodon.</bottomLabel>",
"annual_report.summary.thanks": "Grazas por ser parte de Mastodon!", "annual_report.summary.thanks": "Grazas por ser parte de Mastodon!",
@ -520,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} denunciou a {target}", "notification.admin.report_statuses_other": "{name} denunciou a {target}",
"notification.admin.sign_up": "{name} rexistrouse", "notification.admin.sign_up": "{name} rexistrouse",
"notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# máis} other {# máis}} crearon unha conta", "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# máis} other {# máis}} crearon unha conta",
"notification.annual_report.message": "A #VidaEnMastodon de {year} agarda por ti! Desvela os momentos máis destacados e historias reseñables en Mastodon!",
"notification.annual_report.view": "Ver #VidaEnMastodon",
"notification.favourite": "{name} marcou como favorita a túa publicación", "notification.favourite": "{name} marcou como favorita a túa publicación",
"notification.favourite.name_and_others_with_link": "{name} e <a>{count, plural, one {# máis} other {# máis}}</a> favoreceron a túa publicación", "notification.favourite.name_and_others_with_link": "{name} e <a>{count, plural, one {# máis} other {# máis}}</a> favoreceron a túa publicación",
"notification.follow": "{name} comezou a seguirte", "notification.follow": "{name} comezou a seguirte",

View File

@ -87,6 +87,24 @@
"alert.unexpected.title": "אופס!", "alert.unexpected.title": "אופס!",
"alt_text_badge.title": "כיתוב חלופי", "alt_text_badge.title": "כיתוב חלופי",
"announcement.announcement": "הכרזה", "announcement.announcement": "הכרזה",
"annual_report.summary.archetype.booster": "ההד-וניסט(ית)",
"annual_report.summary.archetype.lurker": "השורץ.ת השקט.ה",
"annual_report.summary.archetype.oracle": "כבוד הרב.ה",
"annual_report.summary.archetype.pollster": "הסקרן.ית",
"annual_report.summary.archetype.replier": "הפרפר.ית החברתי.ת",
"annual_report.summary.followers.followers": "עוקבים",
"annual_report.summary.followers.total": "{count} בסך הכל",
"annual_report.summary.here_it_is": "והנה סיכום {year} שלך:",
"annual_report.summary.highlighted_post.by_favourites": "התות הכי מחובב",
"annual_report.summary.highlighted_post.by_reblogs": "התות הכי מהודהד",
"annual_report.summary.highlighted_post.by_replies": "התות עם מספר התשובות הגבוה ביותר",
"annual_report.summary.highlighted_post.possessive": "של {name}",
"annual_report.summary.most_used_app.most_used_app": "היישומון שהכי בשימוש",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "התג בשימוש הרב ביותר",
"annual_report.summary.new_posts.new_posts": "הודעות חדשות",
"annual_report.summary.percentile.text": "<topLabel>ממקם אותך באחוזון </topLabel><percentage></percentage><bottomLabel>של משמשי מסטודון.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "לא נגלה לברני.",
"annual_report.summary.thanks": "תודה על היותך חלק ממסטודון!",
"attachments_list.unprocessed": "(לא מעובד)", "attachments_list.unprocessed": "(לא מעובד)",
"audio.hide": "השתק", "audio.hide": "השתק",
"block_modal.remote_users_caveat": "אנו נבקש מהשרת {domain} לכבד את החלטתך. עם זאת, ציות למוסכמות איננו מובטח כיוון ששרתים מסויימים עשויים לטפל בחסימות בצורה אחרת. הודעות פומביות עדיין יהיו גלויות לעיני משתמשים שאינם מחוברים.", "block_modal.remote_users_caveat": "אנו נבקש מהשרת {domain} לכבד את החלטתך. עם זאת, ציות למוסכמות איננו מובטח כיוון ששרתים מסויימים עשויים לטפל בחסימות בצורה אחרת. הודעות פומביות עדיין יהיו גלויות לעיני משתמשים שאינם מחוברים.",
@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} דיווח.ה על {target}", "notification.admin.report_statuses_other": "{name} דיווח.ה על {target}",
"notification.admin.sign_up": "{name} נרשמו", "notification.admin.sign_up": "{name} נרשמו",
"notification.admin.sign_up.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} נרשמו", "notification.admin.sign_up.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} נרשמו",
"notification.annual_report.message": "ה- #סיכומודון שלך לשנת {year} מחכה! גלו את רגעי השיא והזכרונות ממסטודון!",
"notification.annual_report.view": "לצפייה ב- #סיכומודון",
"notification.favourite": "הודעתך חובבה על ידי {name}", "notification.favourite": "הודעתך חובבה על ידי {name}",
"notification.favourite.name_and_others_with_link": "{name} ועוד <a>{count, plural,one {אחד נוסף}other {# נוספים}}</a> חיבבו את הודעתך", "notification.favourite.name_and_others_with_link": "{name} ועוד <a>{count, plural,one {אחד נוסף}other {# נוספים}}</a> חיבבו את הודעתך",
"notification.follow": "{name} במעקב אחרייך", "notification.follow": "{name} במעקב אחרייך",

View File

@ -87,6 +87,25 @@
"alert.unexpected.title": "Hoppá!", "alert.unexpected.title": "Hoppá!",
"alt_text_badge.title": "Helyettesítő szöveg", "alt_text_badge.title": "Helyettesítő szöveg",
"announcement.announcement": "Közlemény", "announcement.announcement": "Közlemény",
"annual_report.summary.archetype.booster": "A cool-vadász",
"annual_report.summary.archetype.lurker": "A settenkedő",
"annual_report.summary.archetype.oracle": "Az orákulum",
"annual_report.summary.archetype.pollster": "A közvélemény-kutató",
"annual_report.summary.archetype.replier": "A társasági pillangó",
"annual_report.summary.followers.followers": "követő",
"annual_report.summary.followers.total": "{count} összesen",
"annual_report.summary.here_it_is": "Itt a {year}. év értékelése:",
"annual_report.summary.highlighted_post.by_favourites": "legkedvencebb bejegyzés",
"annual_report.summary.highlighted_post.by_reblogs": "legtöbbet megtolt bejegyzés",
"annual_report.summary.highlighted_post.by_replies": "bejegyzés a legtöbb válasszal",
"annual_report.summary.highlighted_post.possessive": "{name} fióktól",
"annual_report.summary.most_used_app.most_used_app": "legtöbbet használt app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "legtöbbet használt hashtag",
"annual_report.summary.most_used_hashtag.none": "Nincs",
"annual_report.summary.new_posts.new_posts": "új bejegyzés",
"annual_report.summary.percentile.text": "<topLabel>Ezzel a</topLabel><percentage></percentage><bottomLabel>csúcs Mastodon felhasználó között vagy.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Nem mondjuk el Bernie-nek.",
"annual_report.summary.thanks": "Kösz, hogy a Mastodon része vagy!",
"attachments_list.unprocessed": "(feldolgozatlan)", "attachments_list.unprocessed": "(feldolgozatlan)",
"audio.hide": "Hang elrejtése", "audio.hide": "Hang elrejtése",
"block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.", "block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.",
@ -508,6 +527,8 @@
"notification.admin.report_statuses_other": "{name} jelentette: {target}", "notification.admin.report_statuses_other": "{name} jelentette: {target}",
"notification.admin.sign_up": "{name} regisztrált", "notification.admin.sign_up": "{name} regisztrált",
"notification.admin.sign_up.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} regisztrált", "notification.admin.sign_up.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} regisztrált",
"notification.annual_report.message": "Vár a {year}. év #Wrapstodon jelentése! Fedd fel az éved jelentős eseményeit és emlékezetes pillanatait a Mastodonon!",
"notification.annual_report.view": "#Wrapstodon Megtekintése",
"notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet", "notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet",
"notification.favourite.name_and_others_with_link": "{name} és <a>{count, plural, one {# másik} other {# másik}}</a> kedvencnek jelölte a bejegyzésedet", "notification.favourite.name_and_others_with_link": "{name} és <a>{count, plural, one {# másik} other {# másik}}</a> kedvencnek jelölte a bejegyzésedet",
"notification.follow": "{name} követ téged", "notification.follow": "{name} követ téged",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "mest notaða forrit", "annual_report.summary.most_used_app.most_used_app": "mest notaða forrit",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest notaða myllumerki", "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest notaða myllumerki",
"annual_report.summary.most_used_hashtag.none": "Ekkert",
"annual_report.summary.new_posts.new_posts": "nýjar færslur", "annual_report.summary.new_posts.new_posts": "nýjar færslur",
"annual_report.summary.percentile.text": "<topLabel>Það setur þig á meðal efstu</topLabel><percentage></percentage><bottomLabel>notenda Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Það setur þig á meðal efstu</topLabel><percentage></percentage><bottomLabel>notenda Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Við förum ekkert að raupa um þetta.", "annual_report.summary.percentile.we_wont_tell_bernie": "Við förum ekkert að raupa um þetta.",

View File

@ -97,9 +97,11 @@
"annual_report.summary.highlighted_post.possessive": "di {name}", "annual_report.summary.highlighted_post.possessive": "di {name}",
"annual_report.summary.most_used_app.most_used_app": "l'app più utilizzata", "annual_report.summary.most_used_app.most_used_app": "l'app più utilizzata",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "l'hashtag più usato", "annual_report.summary.most_used_hashtag.most_used_hashtag": "l'hashtag più usato",
"annual_report.summary.most_used_hashtag.none": "Nessuno",
"annual_report.summary.new_posts.new_posts": "nuovi post", "annual_report.summary.new_posts.new_posts": "nuovi post",
"annual_report.summary.percentile.text": "<topLabel>Questo ti colloca tra il</topLabel><percentage></percentage><bottomLabel>dei migliori utenti Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Questo ti colloca tra il</topLabel><percentage></percentage><bottomLabel>dei migliori utenti Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Non lo diremo a Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "Non lo diremo a Bernie.",
"annual_report.summary.thanks": "Grazie per far parte di Mastodon!",
"attachments_list.unprocessed": "(non elaborato)", "attachments_list.unprocessed": "(non elaborato)",
"audio.hide": "Nascondi audio", "audio.hide": "Nascondi audio",
"block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.", "block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.",

View File

@ -87,6 +87,24 @@
"alert.unexpected.title": "エラー!", "alert.unexpected.title": "エラー!",
"alt_text_badge.title": "代替テキスト", "alt_text_badge.title": "代替テキスト",
"announcement.announcement": "お知らせ", "announcement.announcement": "お知らせ",
"annual_report.summary.archetype.booster": "トレンドハンター",
"annual_report.summary.archetype.lurker": "ROM専",
"annual_report.summary.archetype.oracle": "予言者",
"annual_report.summary.archetype.pollster": "調査員",
"annual_report.summary.archetype.replier": "社交家",
"annual_report.summary.followers.followers": "フォロワー",
"annual_report.summary.followers.total": "合計{count}",
"annual_report.summary.here_it_is": "こちらがあなたの{year}年の振り返りです",
"annual_report.summary.highlighted_post.by_favourites": "最もお気に入りされた投稿",
"annual_report.summary.highlighted_post.by_reblogs": "最もブーストされた投稿",
"annual_report.summary.highlighted_post.by_replies": "最も返信が多かった投稿",
"annual_report.summary.highlighted_post.possessive": "{name}の",
"annual_report.summary.most_used_app.most_used_app": "最も使用されているアプリ",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "最も使用されたハッシュタグ",
"annual_report.summary.new_posts.new_posts": "新しい投稿",
"annual_report.summary.percentile.text": "<topLabel>それにより、あなたは上位に位置しています。</topLabel><percentage></percentage><bottomLabel>Mastodonユーザーの中で。</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "バー二ーには秘密にしておくよ。",
"annual_report.summary.thanks": "Mastodonの一員になってくれてありがとう",
"attachments_list.unprocessed": "(未処理)", "attachments_list.unprocessed": "(未処理)",
"audio.hide": "音声を閉じる", "audio.hide": "音声を閉じる",
"block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかしながら、ブロックの扱い方はサーバーによってさまざまで、相手のサーバーは必ずしもこのブロックを適切に取り扱うものではないことに留意が必要です。また、あなたの公開投稿はサーバーからログアウトすれば誰からも見ることができます。", "block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかしながら、ブロックの扱い方はサーバーによってさまざまで、相手のサーバーは必ずしもこのブロックを適切に取り扱うものではないことに留意が必要です。また、あなたの公開投稿はサーバーからログアウトすれば誰からも見ることができます。",
@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name}さんが{target}さんを通報しました", "notification.admin.report_statuses_other": "{name}さんが{target}さんを通報しました",
"notification.admin.sign_up": "{name}さんがサインアップしました", "notification.admin.sign_up": "{name}さんがサインアップしました",
"notification.admin.sign_up.name_and_others": "{name}さんとほか{count, plural, other {#人}}がサインアップしました", "notification.admin.sign_up.name_and_others": "{name}さんとほか{count, plural, other {#人}}がサインアップしました",
"notification.annual_report.message": "「あなたの{year}年の#Wrapstodonが待っていますMastodonであなたの年のハイライトや思い出の瞬間を公開しましょう」と訳せます。",
"notification.annual_report.view": "#Wrapstodon を表示",
"notification.favourite": "{name}さんがお気に入りしました", "notification.favourite": "{name}さんがお気に入りしました",
"notification.favourite.name_and_others_with_link": "{name}さんと<a>ほか{count, plural, other {#人}}</a>がお気に入りしました", "notification.favourite.name_and_others_with_link": "{name}さんと<a>ほか{count, plural, other {#人}}</a>がお気に入りしました",
"notification.follow": "{name}さんにフォローされました", "notification.follow": "{name}さんにフォローされました",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name} 님의", "annual_report.summary.highlighted_post.possessive": "{name} 님의",
"annual_report.summary.most_used_app.most_used_app": "가장 많이 사용한 앱", "annual_report.summary.most_used_app.most_used_app": "가장 많이 사용한 앱",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "가장 많이 사용한 해시태그", "annual_report.summary.most_used_hashtag.most_used_hashtag": "가장 많이 사용한 해시태그",
"annual_report.summary.most_used_hashtag.none": "없음",
"annual_report.summary.new_posts.new_posts": "새 게시물", "annual_report.summary.new_posts.new_posts": "새 게시물",
"annual_report.summary.percentile.text": "<topLabel>마스토돈 사용자의 상위</topLabel><percentage></percentage><bottomLabel>입니다.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>마스토돈 사용자의 상위</topLabel><percentage></percentage><bottomLabel>입니다.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "엄마한테 말 안 할게요.", "annual_report.summary.percentile.we_wont_tell_bernie": "엄마한테 말 안 할게요.",

View File

@ -87,6 +87,17 @@
"alert.unexpected.title": "Atyo!", "alert.unexpected.title": "Atyo!",
"alt_text_badge.title": "Teksto alternativo", "alt_text_badge.title": "Teksto alternativo",
"announcement.announcement": "Pregon", "announcement.announcement": "Pregon",
"annual_report.summary.archetype.pollster": "El anketero",
"annual_report.summary.followers.followers": "suivantes",
"annual_report.summary.highlighted_post.by_favourites": "la puvlikasyon mas favoritada",
"annual_report.summary.highlighted_post.by_reblogs": "la puvlikasyon mas repartajada",
"annual_report.summary.highlighted_post.by_replies": "la puvlikasyon kon mas repuestas",
"annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "la aplikasyon mas uzada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "la etiketa mas uzada",
"annual_report.summary.most_used_hashtag.none": "Dinguno",
"annual_report.summary.new_posts.new_posts": "puvlikasyones muevas",
"annual_report.summary.thanks": "Mersi por ser parte de Mastodon!",
"attachments_list.unprocessed": "(no prosesado)", "attachments_list.unprocessed": "(no prosesado)",
"audio.hide": "Eskonde audio", "audio.hide": "Eskonde audio",
"block_modal.show_less": "Amostra manko", "block_modal.show_less": "Amostra manko",
@ -97,6 +108,7 @@
"block_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.", "block_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.",
"boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez",
"boost_modal.reblog": "Repartajar puvlikasyon?", "boost_modal.reblog": "Repartajar puvlikasyon?",
"boost_modal.undo_reblog": "Departajar puvlikasyon?",
"bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro", "bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro",
"bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.", "bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.",
"bundle_column_error.error.title": "Atyo, no!", "bundle_column_error.error.title": "Atyo, no!",
@ -155,6 +167,7 @@
"compose_form.poll.duration": "Durasion de anketa", "compose_form.poll.duration": "Durasion de anketa",
"compose_form.poll.multiple": "Multiples opsyones", "compose_form.poll.multiple": "Multiples opsyones",
"compose_form.poll.option_placeholder": "Opsyon {number}", "compose_form.poll.option_placeholder": "Opsyon {number}",
"compose_form.poll.single": "Opsyon unika",
"compose_form.poll.switch_to_multiple": "Troka anketa para permeter a eskojer mas ke una opsyon", "compose_form.poll.switch_to_multiple": "Troka anketa para permeter a eskojer mas ke una opsyon",
"compose_form.poll.switch_to_single": "Troka anketa para permeter a eskojer solo una opsyon", "compose_form.poll.switch_to_single": "Troka anketa para permeter a eskojer solo una opsyon",
"compose_form.poll.type": "Estilo", "compose_form.poll.type": "Estilo",
@ -213,6 +226,7 @@
"dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.", "dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.",
"domain_block_modal.block": "Bloka sirvidor", "domain_block_modal.block": "Bloka sirvidor",
"domain_block_modal.block_account_instead": "Bloka @{name} en su lugar", "domain_block_modal.block_account_instead": "Bloka @{name} en su lugar",
"domain_block_modal.they_can_interact_with_old_posts": "Las personas de este sirvidor pueden enteraktuar kon tus puvlikasyones viejas.",
"domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.", "domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.",
"domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.", "domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.",
"domain_block_modal.title": "Bloka el domeno?", "domain_block_modal.title": "Bloka el domeno?",
@ -307,6 +321,7 @@
"follow_suggestions.personalized_suggestion": "Sujestion personalizada", "follow_suggestions.personalized_suggestion": "Sujestion personalizada",
"follow_suggestions.popular_suggestion": "Sujestion populara", "follow_suggestions.popular_suggestion": "Sujestion populara",
"follow_suggestions.popular_suggestion_longer": "Popular en {domain}", "follow_suggestions.popular_suggestion_longer": "Popular en {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similares a los profils ke tienes segido resyentemente",
"follow_suggestions.view_all": "Ve todos", "follow_suggestions.view_all": "Ve todos",
"follow_suggestions.who_to_follow": "A ken segir", "follow_suggestions.who_to_follow": "A ken segir",
"followed_tags": "Etiketas segidas", "followed_tags": "Etiketas segidas",
@ -335,6 +350,9 @@
"hashtag.follow": "Sige etiketa", "hashtag.follow": "Sige etiketa",
"hashtag.unfollow": "Desige etiketa", "hashtag.unfollow": "Desige etiketa",
"hashtags.and_other": "…i {count, plural, one {}other {# mas}}", "hashtags.and_other": "…i {count, plural, one {}other {# mas}}",
"hints.profiles.followers_may_be_missing": "Puede ser ke algunos suivantes de este profil no se amostren.",
"hints.profiles.follows_may_be_missing": "Puede ser ke algunos kuentos segidos por este profil no se amostren.",
"hints.profiles.posts_may_be_missing": "Puede ser ke algunas puvlikasyones de este profil no se amostren.",
"hints.profiles.see_more_followers": "Ve mas suivantes en {domain}", "hints.profiles.see_more_followers": "Ve mas suivantes en {domain}",
"hints.profiles.see_more_follows": "Ve mas segidos en {domain}", "hints.profiles.see_more_follows": "Ve mas segidos en {domain}",
"hints.profiles.see_more_posts": "Ve mas puvlikasyones en {domain}", "hints.profiles.see_more_posts": "Ve mas puvlikasyones en {domain}",
@ -352,10 +370,12 @@
"ignore_notifications_modal.new_accounts_title": "Inyorar avizos de kuentos muevos?", "ignore_notifications_modal.new_accounts_title": "Inyorar avizos de kuentos muevos?",
"ignore_notifications_modal.not_followers_title": "Inyorar avizos de personas a las kualas no te sigen?", "ignore_notifications_modal.not_followers_title": "Inyorar avizos de personas a las kualas no te sigen?",
"ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?", "ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?",
"ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?",
"interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.", "interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.",
"interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.", "interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.",
"interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.", "interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.",
"interaction_modal.description.reply": "Kon un kuento en Mastodon, puedes arispondir a esta publikasyon.", "interaction_modal.description.reply": "Kon un kuento en Mastodon, puedes arispondir a esta publikasyon.",
"interaction_modal.description.vote": "Kon un kuento en Mastodon, puedes votar en esta anketa.",
"interaction_modal.login.action": "Va a tu sirvidor", "interaction_modal.login.action": "Va a tu sirvidor",
"interaction_modal.login.prompt": "Domeno del sirvidor de tu kuento, por enshemplo mastodon.social", "interaction_modal.login.prompt": "Domeno del sirvidor de tu kuento, por enshemplo mastodon.social",
"interaction_modal.no_account_yet": "No tyenes kuento de Mastodon?", "interaction_modal.no_account_yet": "No tyenes kuento de Mastodon?",
@ -367,6 +387,7 @@
"interaction_modal.title.follow": "Sige a {name}", "interaction_modal.title.follow": "Sige a {name}",
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}", "interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
"interaction_modal.title.reply": "Arisponde a publikasyon de {name}", "interaction_modal.title.reply": "Arisponde a publikasyon de {name}",
"interaction_modal.title.vote": "Vota en la anketa de {name}",
"intervals.full.days": "{number, plural, one {# diya} other {# diyas}}", "intervals.full.days": "{number, plural, one {# diya} other {# diyas}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@ -466,13 +487,16 @@
"navigation_bar.security": "Segurita", "navigation_bar.security": "Segurita",
"not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.", "not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.",
"notification.admin.report": "{name} raporto {target}", "notification.admin.report": "{name} raporto {target}",
"notification.admin.report_statuses": "{name} raporto {target} por {category}",
"notification.admin.report_statuses_other": "{name} raporto {target}", "notification.admin.report_statuses_other": "{name} raporto {target}",
"notification.admin.sign_up": "{name} kriyo un konto", "notification.admin.sign_up": "{name} kriyo un konto",
"notification.annual_report.view": "Ve #Wrapstodon",
"notification.favourite": "A {name} le plaze tu publikasyon", "notification.favourite": "A {name} le plaze tu publikasyon",
"notification.follow": "{name} te ampeso a segir", "notification.follow": "{name} te ampeso a segir",
"notification.follow_request": "{name} tiene solisitado segirte", "notification.follow_request": "{name} tiene solisitado segirte",
"notification.label.mention": "Enmenta", "notification.label.mention": "Enmenta",
"notification.label.private_mention": "Enmentadura privada", "notification.label.private_mention": "Enmentadura privada",
"notification.label.private_reply": "Repuesta privada",
"notification.label.reply": "Arisponde", "notification.label.reply": "Arisponde",
"notification.mention": "Enmenta", "notification.mention": "Enmenta",
"notification.mentioned_you": "{name} te enmento", "notification.mentioned_you": "{name} te enmento",
@ -536,6 +560,7 @@
"notifications.policy.accept_hint": "Amostra en avizos", "notifications.policy.accept_hint": "Amostra en avizos",
"notifications.policy.drop": "Inyora", "notifications.policy.drop": "Inyora",
"notifications.policy.filter": "Filtra", "notifications.policy.filter": "Filtra",
"notifications.policy.filter_limited_accounts_hint": "Limitadas por moderadores del sirvidor",
"notifications.policy.filter_limited_accounts_title": "Kuentos moderados", "notifications.policy.filter_limited_accounts_title": "Kuentos moderados",
"notifications.policy.filter_new_accounts.hint": "Kriyadas durante {days, plural, one {el ultimo diya} other {los ultimos # diyas}}", "notifications.policy.filter_new_accounts.hint": "Kriyadas durante {days, plural, one {el ultimo diya} other {los ultimos # diyas}}",
"notifications.policy.filter_new_accounts_title": "Muevos kuentos", "notifications.policy.filter_new_accounts_title": "Muevos kuentos",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "labiausiai naudota programa", "annual_report.summary.most_used_app.most_used_app": "labiausiai naudota programa",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "labiausiai naudotas saitažodis", "annual_report.summary.most_used_hashtag.most_used_hashtag": "labiausiai naudotas saitažodis",
"annual_report.summary.most_used_hashtag.none": "Nieko",
"annual_report.summary.new_posts.new_posts": "nauji įrašai", "annual_report.summary.new_posts.new_posts": "nauji įrašai",
"annual_report.summary.percentile.text": "<topLabel>Tai reiškia, kad esate tarp</topLabel><percentage></percentage><bottomLabel>populiariausių „Mastodon“ naudotojų.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Tai reiškia, kad esate tarp</topLabel><percentage></percentage><bottomLabel>populiariausių „Mastodon“ naudotojų.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Mes nesakysime Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "Mes nesakysime Bernie.",

View File

@ -86,6 +86,10 @@
"alert.unexpected.message": "Radās negaidīta kļūda.", "alert.unexpected.message": "Radās negaidīta kļūda.",
"alert.unexpected.title": "Ups!", "alert.unexpected.title": "Ups!",
"announcement.announcement": "Paziņojums", "announcement.announcement": "Paziņojums",
"annual_report.summary.followers.followers": "sekotāji",
"annual_report.summary.followers.total": "pavisam {count}",
"annual_report.summary.here_it_is": "Šeit ir {year}. gada pārskats:",
"annual_report.summary.new_posts.new_posts": "jauni ieraksti",
"attachments_list.unprocessed": "(neapstrādāti)", "attachments_list.unprocessed": "(neapstrādāti)",
"audio.hide": "Slēpt audio", "audio.hide": "Slēpt audio",
"block_modal.remote_users_caveat": "Mēs vaicāsim serverim {domain} ņemt vērā Tavu lēmumu. Tomēr atbilstība nav nodrošināta, jo atsevišķi serveri var apstrādāt bloķēšanu citādi. Publiski ieraksti joprojām var būt redzami lietotājiem, kuri nav pieteikušies.", "block_modal.remote_users_caveat": "Mēs vaicāsim serverim {domain} ņemt vērā Tavu lēmumu. Tomēr atbilstība nav nodrošināta, jo atsevišķi serveri var apstrādāt bloķēšanu citādi. Publiski ieraksti joprojām var būt redzami lietotājiem, kuri nav pieteikušies.",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}'s", "annual_report.summary.highlighted_post.possessive": "{name}'s",
"annual_report.summary.most_used_app.most_used_app": "meest gebruikte app", "annual_report.summary.most_used_app.most_used_app": "meest gebruikte app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "meest gebruikte hashtag", "annual_report.summary.most_used_hashtag.most_used_hashtag": "meest gebruikte hashtag",
"annual_report.summary.most_used_hashtag.none": "Geen",
"annual_report.summary.new_posts.new_posts": "nieuwe berichten", "annual_report.summary.new_posts.new_posts": "nieuwe berichten",
"annual_report.summary.percentile.text": "<topLabel>Dat zet je in de top</topLabel><percentage></percentage><bottomLabel>van Mastodon-gebruikers.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Dat zet je in de top</topLabel><percentage></percentage><bottomLabel>van Mastodon-gebruikers.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "We zullen Bernie niets vertellen.", "annual_report.summary.percentile.we_wont_tell_bernie": "We zullen Bernie niets vertellen.",

View File

@ -87,6 +87,24 @@
"alert.unexpected.title": "Oi sann!", "alert.unexpected.title": "Oi sann!",
"alt_text_badge.title": "Alternativ tekst", "alt_text_badge.title": "Alternativ tekst",
"announcement.announcement": "Kunngjering", "announcement.announcement": "Kunngjering",
"annual_report.summary.archetype.booster": "Den som jaktar på noko kult",
"annual_report.summary.archetype.lurker": "Den som heng på hjørnet",
"annual_report.summary.archetype.oracle": "Orakelet",
"annual_report.summary.archetype.pollster": "Meiningsmålaren",
"annual_report.summary.archetype.replier": "Den sosiale sumarfuglen",
"annual_report.summary.followers.followers": "fylgjarar",
"annual_report.summary.followers.total": "{count} i alt",
"annual_report.summary.here_it_is": "Her er eit gjensyn med {year}:",
"annual_report.summary.highlighted_post.by_favourites": "det mest omtykte innlegget",
"annual_report.summary.highlighted_post.by_reblogs": "det mest framheva innlegget",
"annual_report.summary.highlighted_post.by_replies": "innlegget med flest svar",
"annual_report.summary.highlighted_post.possessive": "som {name} laga",
"annual_report.summary.most_used_app.most_used_app": "mest brukte app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brukte emneknagg",
"annual_report.summary.new_posts.new_posts": "nye innlegg",
"annual_report.summary.percentile.text": "<topLabel>Du er av dei</topLabel><percentage></percentage><bottomLabel>ivrigaste Mastodon-brukarane.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Ikkje eit ord til pressa.",
"annual_report.summary.thanks": "Takk for at du er med i Mastodon!",
"attachments_list.unprocessed": "(ubehandla)", "attachments_list.unprocessed": "(ubehandla)",
"audio.hide": "Gøym lyd", "audio.hide": "Gøym lyd",
"block_modal.remote_users_caveat": "Me vil be tenaren {domain} om å respektere di avgjerd. Me kan ikkje garantera at det vert gjort, sidan nokre tenarar kan handtera blokkering ulikt. Offentlege innlegg kan framleis vera synlege for ikkje-innlogga brukarar.", "block_modal.remote_users_caveat": "Me vil be tenaren {domain} om å respektere di avgjerd. Me kan ikkje garantera at det vert gjort, sidan nokre tenarar kan handtera blokkering ulikt. Offentlege innlegg kan framleis vera synlege for ikkje-innlogga brukarar.",
@ -197,6 +215,7 @@
"confirmations.unfollow.title": "Slutt å fylgja brukaren?", "confirmations.unfollow.title": "Slutt å fylgja brukaren?",
"content_warning.hide": "Gøym innlegg", "content_warning.hide": "Gøym innlegg",
"content_warning.show": "Vis likevel", "content_warning.show": "Vis likevel",
"content_warning.show_more": "Vis meir",
"conversation.delete": "Slett samtale", "conversation.delete": "Slett samtale",
"conversation.mark_as_read": "Marker som lesen", "conversation.mark_as_read": "Marker som lesen",
"conversation.open": "Sjå samtale", "conversation.open": "Sjå samtale",
@ -305,6 +324,7 @@
"filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny", "filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny",
"filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.select_filter.title": "Filtrer dette innlegget",
"filter_modal.title.status": "Filtrer eit innlegg", "filter_modal.title.status": "Filtrer eit innlegg",
"filter_warning.matches_filter": "Passar med filteret «<span>{title}</span>»",
"filtered_notifications_banner.pending_requests": "Frå {count, plural, =0 {ingen} one {éin person} other {# personar}} du kanskje kjenner", "filtered_notifications_banner.pending_requests": "Frå {count, plural, =0 {ingen} one {éin person} other {# personar}} du kanskje kjenner",
"filtered_notifications_banner.title": "Filtrerte varslingar", "filtered_notifications_banner.title": "Filtrerte varslingar",
"firehose.all": "Alle", "firehose.all": "Alle",
@ -506,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} rapporterte {target}", "notification.admin.report_statuses_other": "{name} rapporterte {target}",
"notification.admin.sign_up": "{name} er registrert", "notification.admin.sign_up": "{name} er registrert",
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} vart med", "notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} vart med",
"notification.annual_report.message": "#Året ditt for {year} ventar! Sjå kva som skjedde i løpet av Mastodon-året ditt!",
"notification.annual_report.view": "Sjå #Året ditt",
"notification.favourite": "{name} markerte innlegget ditt som favoritt", "notification.favourite": "{name} markerte innlegget ditt som favoritt",
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# annan} other {# andre}}</a> favorittmerka innlegget ditt", "notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# annan} other {# andre}}</a> favorittmerka innlegget ditt",
"notification.follow": "{name} fylgde deg", "notification.follow": "{name} fylgde deg",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "aplicativo mais usado", "annual_report.summary.most_used_app.most_used_app": "aplicativo mais usado",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag mais usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag mais usada",
"annual_report.summary.most_used_hashtag.none": "Nenhuma",
"annual_report.summary.new_posts.new_posts": "novas publicações", "annual_report.summary.new_posts.new_posts": "novas publicações",
"annual_report.summary.percentile.text": "<topLabel>Isso o coloca no topo</topLabel></percentage><bottomLabel>dos usuários de Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Isso o coloca no topo</topLabel></percentage><bottomLabel>dos usuários de Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Não contaremos à Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "Não contaremos à Bernie.",

View File

@ -85,7 +85,11 @@
"alert.rate_limited.title": "Limite de tentativas", "alert.rate_limited.title": "Limite de tentativas",
"alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.message": "Ocorreu um erro inesperado.",
"alert.unexpected.title": "Bolas!", "alert.unexpected.title": "Bolas!",
"alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anúncio", "announcement.announcement": "Anúncio",
"annual_report.summary.followers.total": "{count} total",
"annual_report.summary.here_it_is": "Aqui está o seu {year} em revisão:",
"annual_report.summary.new_posts.new_posts": "novas publicações",
"attachments_list.unprocessed": "(não processado)", "attachments_list.unprocessed": "(não processado)",
"audio.hide": "Ocultar áudio", "audio.hide": "Ocultar áudio",
"block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.", "block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.",

View File

@ -89,9 +89,11 @@
"announcement.announcement": "Объявление", "announcement.announcement": "Объявление",
"annual_report.summary.archetype.booster": "Репостер", "annual_report.summary.archetype.booster": "Репостер",
"annual_report.summary.archetype.lurker": "Молчун", "annual_report.summary.archetype.lurker": "Молчун",
"annual_report.summary.archetype.oracle": "Шаман",
"annual_report.summary.archetype.pollster": "Опросчик", "annual_report.summary.archetype.pollster": "Опросчик",
"annual_report.summary.archetype.replier": "Душа компании", "annual_report.summary.archetype.replier": "Душа компании",
"annual_report.summary.followers.followers": "подписчиков", "annual_report.summary.followers.followers": "подписчиков",
"annual_report.summary.followers.total": "{count} за всё время",
"annual_report.summary.here_it_is": "Вот ваши итоги {year} года:", "annual_report.summary.here_it_is": "Вот ваши итоги {year} года:",
"annual_report.summary.highlighted_post.by_favourites": "пост с наибольшим количеством звёздочек", "annual_report.summary.highlighted_post.by_favourites": "пост с наибольшим количеством звёздочек",
"annual_report.summary.highlighted_post.by_reblogs": "пост с наибольшим количеством продвижений", "annual_report.summary.highlighted_post.by_reblogs": "пост с наибольшим количеством продвижений",
@ -99,7 +101,9 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "наиболее часто используемое приложение", "annual_report.summary.most_used_app.most_used_app": "наиболее часто используемое приложение",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "наиболее часто используемый хэштег", "annual_report.summary.most_used_hashtag.most_used_hashtag": "наиболее часто используемый хэштег",
"annual_report.summary.most_used_hashtag.none": "Нет",
"annual_report.summary.new_posts.new_posts": "новых постов", "annual_report.summary.new_posts.new_posts": "новых постов",
"annual_report.summary.percentile.text": "<topLabel>Всё это помещает вас в топ</topLabel><percentage></percentage><bottomLabel>пользователей Mastodon.</bottomLabel>",
"annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!", "annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
"attachments_list.unprocessed": "(не обработан)", "attachments_list.unprocessed": "(не обработан)",
"audio.hide": "Скрыть аудио", "audio.hide": "Скрыть аудио",

View File

@ -88,6 +88,8 @@
"alt_text_badge.title": "Alternatívny popis", "alt_text_badge.title": "Alternatívny popis",
"announcement.announcement": "Oznámenie", "announcement.announcement": "Oznámenie",
"annual_report.summary.followers.followers": "sledovatelia", "annual_report.summary.followers.followers": "sledovatelia",
"annual_report.summary.followers.total": "{count} celkovo",
"annual_report.summary.highlighted_post.by_favourites": "najviac obľúbený príspevok",
"annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok", "annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok",
"annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami", "annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami",
"annual_report.summary.most_used_app.most_used_app": "najviac používaná aplikácia", "annual_report.summary.most_used_app.most_used_app": "najviac používaná aplikácia",
@ -99,6 +101,7 @@
"block_modal.show_less": "Zobraziť menej", "block_modal.show_less": "Zobraziť menej",
"block_modal.show_more": "Zobraziť viac", "block_modal.show_more": "Zobraziť viac",
"block_modal.they_cant_mention": "Nemôžu ťa spomenúť, alebo nasledovať.", "block_modal.they_cant_mention": "Nemôžu ťa spomenúť, alebo nasledovať.",
"block_modal.they_cant_see_posts": "On/a nemôže vidieť tvoje príspevky a ty neuvidíš jej/ho.",
"block_modal.they_will_know": "Môžu vidieť, že sú zablokovaní/ý.", "block_modal.they_will_know": "Môžu vidieť, že sú zablokovaní/ý.",
"block_modal.title": "Blokovať užívateľa?", "block_modal.title": "Blokovať užívateľa?",
"block_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ich spomínajú.", "block_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ich spomínajú.",
@ -345,6 +348,7 @@
"hashtag.follow": "Sledovať hashtag", "hashtag.follow": "Sledovať hashtag",
"hashtag.unfollow": "Prestať sledovať hashtag", "hashtag.unfollow": "Prestať sledovať hashtag",
"hashtags.and_other": "…a {count, plural, other {# ďalších}}", "hashtags.and_other": "…a {count, plural, other {# ďalších}}",
"hints.threads.see_more": "Pozri viac odpovedí na {domain}",
"home.column_settings.show_reblogs": "Zobraziť zdieľania", "home.column_settings.show_reblogs": "Zobraziť zdieľania",
"home.column_settings.show_replies": "Zobraziť odpovede", "home.column_settings.show_replies": "Zobraziť odpovede",
"home.hide_announcements": "Skryť oznámenia", "home.hide_announcements": "Skryť oznámenia",
@ -371,6 +375,7 @@
"interaction_modal.title.follow": "Sledovať {name}", "interaction_modal.title.follow": "Sledovať {name}",
"interaction_modal.title.reblog": "Zdieľať príspevok od {name}", "interaction_modal.title.reblog": "Zdieľať príspevok od {name}",
"interaction_modal.title.reply": "Odpovedať na príspevok od {name}", "interaction_modal.title.reply": "Odpovedať na príspevok od {name}",
"interaction_modal.title.vote": "Hlasuj v ankete od {name}",
"intervals.full.days": "{number, plural, one {# deň} few {# dni} many {# dní} other {# dní}}", "intervals.full.days": "{number, plural, one {# deň} few {# dni} many {# dní} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodín} other {# hodín}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodín} other {# hodín}}",
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minúty} many {# minút} other {# minút}}", "intervals.full.minutes": "{number, plural, one {# minúta} few {# minúty} many {# minút} other {# minút}}",

View File

@ -96,6 +96,7 @@
"annual_report.summary.highlighted_post.possessive": "nga {name}", "annual_report.summary.highlighted_post.possessive": "nga {name}",
"annual_report.summary.most_used_app.most_used_app": "aplikacioni më i përdorur", "annual_report.summary.most_used_app.most_used_app": "aplikacioni më i përdorur",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag-u më i përdorur", "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag-u më i përdorur",
"annual_report.summary.most_used_hashtag.none": "Asnjë",
"annual_report.summary.new_posts.new_posts": "postime të reja", "annual_report.summary.new_posts.new_posts": "postime të reja",
"annual_report.summary.percentile.text": "<topLabel>Kjo ju vë në krye</topLabel><percentage></percentage><bottomLabel>të përdoruesve të Mastodon-it.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Kjo ju vë në krye</topLabel><percentage></percentage><bottomLabel>të përdoruesve të Mastodon-it.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Nuk do tia themi Bernit.", "annual_report.summary.percentile.we_wont_tell_bernie": "Nuk do tia themi Bernit.",
@ -526,6 +527,7 @@
"notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer", "notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer",
"notification.favourite.name_and_others_with_link": "{name} dhe <a>{count, plural, one {# tjetër} other {# të tjerë}}</a> i vunë shenjë postimit tuaj si të parapëlqyer", "notification.favourite.name_and_others_with_link": "{name} dhe <a>{count, plural, one {# tjetër} other {# të tjerë}}</a> i vunë shenjë postimit tuaj si të parapëlqyer",
"notification.follow": "{name} zuri tju ndjekë", "notification.follow": "{name} zuri tju ndjekë",
"notification.follow.name_and_others": "Ju ndoqi {name} dhe <a>{count, plural, one {# tjetër} other {# të tjerë}}</a>",
"notification.follow_request": "{name} ka kërkuar tju ndjekë", "notification.follow_request": "{name} ka kërkuar tju ndjekë",
"notification.follow_request.name_and_others": "Ka kërkuar tju ndjekë {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", "notification.follow_request.name_and_others": "Ka kërkuar tju ndjekë {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}",
"notification.label.mention": "Përmendje", "notification.label.mention": "Përmendje",
@ -584,6 +586,7 @@
"notifications.column_settings.filter_bar.category": "Shtyllë filtrimesh të shpejta", "notifications.column_settings.filter_bar.category": "Shtyllë filtrimesh të shpejta",
"notifications.column_settings.follow": "Ndjekës të rinj:", "notifications.column_settings.follow": "Ndjekës të rinj:",
"notifications.column_settings.follow_request": "Kërkesa të reja për ndjekje:", "notifications.column_settings.follow_request": "Kërkesa të reja për ndjekje:",
"notifications.column_settings.group": "Grupoji",
"notifications.column_settings.mention": "Përmendje:", "notifications.column_settings.mention": "Përmendje:",
"notifications.column_settings.poll": "Përfundime pyetësori:", "notifications.column_settings.poll": "Përfundime pyetësori:",
"notifications.column_settings.push": "Njoftime Push", "notifications.column_settings.push": "Njoftime Push",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}s", "annual_report.summary.highlighted_post.possessive": "{name}s",
"annual_report.summary.most_used_app.most_used_app": "mest använda app", "annual_report.summary.most_used_app.most_used_app": "mest använda app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest använda hashtag", "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest använda hashtag",
"annual_report.summary.most_used_hashtag.none": "Inga",
"annual_report.summary.new_posts.new_posts": "nya inlägg", "annual_report.summary.new_posts.new_posts": "nya inlägg",
"annual_report.summary.percentile.text": "<topLabel>Det placerar dig i topp</topLabel><percentage></percentage><bottomLabel>av Mastodon-användare.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Det placerar dig i topp</topLabel><percentage></percentage><bottomLabel>av Mastodon-användare.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.",
@ -424,7 +425,7 @@
"keyboard_shortcuts.blocked": "Öppna listan över blockerade användare", "keyboard_shortcuts.blocked": "Öppna listan över blockerade användare",
"keyboard_shortcuts.boost": "Boosta inlägg", "keyboard_shortcuts.boost": "Boosta inlägg",
"keyboard_shortcuts.column": "Fokusera kolumn", "keyboard_shortcuts.column": "Fokusera kolumn",
"keyboard_shortcuts.compose": "för att fokusera skrivfältet", "keyboard_shortcuts.compose": "Fokusera skrivfältet",
"keyboard_shortcuts.description": "Beskrivning", "keyboard_shortcuts.description": "Beskrivning",
"keyboard_shortcuts.direct": "för att öppna privata nämningskolumnen", "keyboard_shortcuts.direct": "för att öppna privata nämningskolumnen",
"keyboard_shortcuts.down": "Flytta ner i listan", "keyboard_shortcuts.down": "Flytta ner i listan",
@ -433,20 +434,20 @@
"keyboard_shortcuts.favourites": "Öppna favoritlistan", "keyboard_shortcuts.favourites": "Öppna favoritlistan",
"keyboard_shortcuts.federated": "Öppna federerad tidslinje", "keyboard_shortcuts.federated": "Öppna federerad tidslinje",
"keyboard_shortcuts.heading": "Tangentbordsgenvägar", "keyboard_shortcuts.heading": "Tangentbordsgenvägar",
"keyboard_shortcuts.home": "för att öppna Hem-tidslinjen", "keyboard_shortcuts.home": "Öppna Hemtidslinjen",
"keyboard_shortcuts.hotkey": "Kommando", "keyboard_shortcuts.hotkey": "Kommando",
"keyboard_shortcuts.legend": "för att visa denna översikt", "keyboard_shortcuts.legend": "Visa denna översikt",
"keyboard_shortcuts.local": "för att öppna Lokal tidslinje", "keyboard_shortcuts.local": "Öppna lokal tidslinje",
"keyboard_shortcuts.mention": "för att nämna skaparen", "keyboard_shortcuts.mention": "Nämna skaparen",
"keyboard_shortcuts.muted": "Öppna listan över tystade användare", "keyboard_shortcuts.muted": "Öppna listan över tystade användare",
"keyboard_shortcuts.my_profile": "för att öppna din profil", "keyboard_shortcuts.my_profile": "Öppna din profil",
"keyboard_shortcuts.notifications": "för att öppna Meddelanden", "keyboard_shortcuts.notifications": "Öppna meddelanden",
"keyboard_shortcuts.open_media": "öppna media", "keyboard_shortcuts.open_media": "Öppna media",
"keyboard_shortcuts.pinned": "Öppna listan över fästa inlägg", "keyboard_shortcuts.pinned": "Öppna listan över fästa inlägg",
"keyboard_shortcuts.profile": "för att öppna skaparens profil", "keyboard_shortcuts.profile": "Öppna författarens profil",
"keyboard_shortcuts.reply": "Svara på inlägg", "keyboard_shortcuts.reply": "Svara på inlägg",
"keyboard_shortcuts.requests": "för att öppna Följförfrågningar", "keyboard_shortcuts.requests": "Öppna följförfrågningar",
"keyboard_shortcuts.search": "för att fokusera sökfältet", "keyboard_shortcuts.search": "Fokusera sökfältet",
"keyboard_shortcuts.spoilers": "Visa/dölja CW-fält", "keyboard_shortcuts.spoilers": "Visa/dölja CW-fält",
"keyboard_shortcuts.start": "Öppna \"Kom igång\"-kolumnen", "keyboard_shortcuts.start": "Öppna \"Kom igång\"-kolumnen",
"keyboard_shortcuts.toggle_hidden": "Visa/gömma text bakom CW", "keyboard_shortcuts.toggle_hidden": "Visa/gömma text bakom CW",

View File

@ -87,6 +87,13 @@
"alert.unexpected.title": "อุปส์!", "alert.unexpected.title": "อุปส์!",
"alt_text_badge.title": "ข้อความแสดงแทน", "alt_text_badge.title": "ข้อความแสดงแทน",
"announcement.announcement": "ประกาศ", "announcement.announcement": "ประกาศ",
"annual_report.summary.followers.followers": "ผู้ติดตาม",
"annual_report.summary.highlighted_post.by_favourites": "โพสต์ที่ได้รับการชื่นชอบมากที่สุด",
"annual_report.summary.highlighted_post.by_reblogs": "โพสต์ที่ได้รับการดันมากที่สุด",
"annual_report.summary.highlighted_post.by_replies": "โพสต์ที่มีการตอบกลับมากที่สุด",
"annual_report.summary.new_posts.new_posts": "โพสต์ใหม่",
"annual_report.summary.percentile.we_wont_tell_bernie": "เราจะไม่บอก Bernie",
"annual_report.summary.thanks": "ขอบคุณสำหรับการเป็นส่วนหนึ่งของ Mastodon!",
"attachments_list.unprocessed": "(ยังไม่ได้ประมวลผล)", "attachments_list.unprocessed": "(ยังไม่ได้ประมวลผล)",
"audio.hide": "ซ่อนเสียง", "audio.hide": "ซ่อนเสียง",
"block_modal.remote_users_caveat": "เราจะขอให้เซิร์ฟเวอร์ {domain} เคารพการตัดสินใจของคุณ อย่างไรก็ตาม ไม่รับประกันการปฏิบัติตามข้อกำหนดเนื่องจากเซิร์ฟเวอร์บางแห่งอาจจัดการการปิดกั้นแตกต่างกัน โพสต์สาธารณะอาจยังคงปรากฏแก่ผู้ใช้ที่ไม่ได้เข้าสู่ระบบ", "block_modal.remote_users_caveat": "เราจะขอให้เซิร์ฟเวอร์ {domain} เคารพการตัดสินใจของคุณ อย่างไรก็ตาม ไม่รับประกันการปฏิบัติตามข้อกำหนดเนื่องจากเซิร์ฟเวอร์บางแห่งอาจจัดการการปิดกั้นแตกต่างกัน โพสต์สาธารณะอาจยังคงปรากฏแก่ผู้ใช้ที่ไม่ได้เข้าสู่ระบบ",
@ -508,6 +515,7 @@
"notification.admin.report_statuses_other": "{name} ได้รายงาน {target}", "notification.admin.report_statuses_other": "{name} ได้รายงาน {target}",
"notification.admin.sign_up": "{name} ได้ลงทะเบียน", "notification.admin.sign_up": "{name} ได้ลงทะเบียน",
"notification.admin.sign_up.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ลงทะเบียน", "notification.admin.sign_up.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ลงทะเบียน",
"notification.annual_report.view": "ดู #Wrapstodon",
"notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ",
"notification.favourite.name_and_others_with_link": "{name} และ <a>{count, plural, other {# อื่น ๆ}}</a> ได้ชื่นชอบโพสต์ของคุณ", "notification.favourite.name_and_others_with_link": "{name} และ <a>{count, plural, other {# อื่น ๆ}}</a> ได้ชื่นชอบโพสต์ของคุณ",
"notification.follow": "{name} ได้ติดตามคุณ", "notification.follow": "{name} ได้ติดตามคุณ",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "en çok kullanılan uygulama", "annual_report.summary.most_used_app.most_used_app": "en çok kullanılan uygulama",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "en çok kullanılan etiket", "annual_report.summary.most_used_hashtag.most_used_hashtag": "en çok kullanılan etiket",
"annual_report.summary.most_used_hashtag.none": "Yok",
"annual_report.summary.new_posts.new_posts": "yeni gönderiler", "annual_report.summary.new_posts.new_posts": "yeni gönderiler",
"annual_report.summary.percentile.text": "<bottomLabel>Mastodon kullanıcılarının</bottomLabel><percentage></percentage><topLabel>üst dilimindesiniz</topLabel>.", "annual_report.summary.percentile.text": "<bottomLabel>Mastodon kullanıcılarının</bottomLabel><percentage></percentage><topLabel>üst dilimindesiniz</topLabel>.",
"annual_report.summary.percentile.we_wont_tell_bernie": "Bernie'ye söylemeyiz.", "annual_report.summary.percentile.we_wont_tell_bernie": "Bernie'ye söylemeyiz.",

View File

@ -87,7 +87,25 @@
"alert.unexpected.title": "Ой!", "alert.unexpected.title": "Ой!",
"alt_text_badge.title": "Альтернативний текст", "alt_text_badge.title": "Альтернативний текст",
"announcement.announcement": "Оголошення", "announcement.announcement": "Оголошення",
"annual_report.summary.archetype.booster": "Мисливець на дописи",
"annual_report.summary.archetype.lurker": "Причаєнець",
"annual_report.summary.archetype.oracle": "Оракул",
"annual_report.summary.archetype.pollster": "Опитувач",
"annual_report.summary.archetype.replier": "Душа компанії",
"annual_report.summary.followers.followers": "підписники",
"annual_report.summary.followers.total": "Загалом {count}",
"annual_report.summary.here_it_is": "Ось ваші підсумки {year} року:",
"annual_report.summary.highlighted_post.by_favourites": "найуподобаніші дописи",
"annual_report.summary.highlighted_post.by_reblogs": "найпоширюваніші дописи",
"annual_report.summary.highlighted_post.by_replies": "найкоментованіші дописи",
"annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "найчастіше використовуваний застосунок",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "найчастіший хештег",
"annual_report.summary.most_used_hashtag.none": "Немає",
"annual_report.summary.new_posts.new_posts": "нові дописи", "annual_report.summary.new_posts.new_posts": "нові дописи",
"annual_report.summary.percentile.text": "<topLabel>Це виводить вас в топ</topLabel><percentage></percentage><bottomLabel> користувачів Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Ми не скажемо Bernie.",
"annual_report.summary.thanks": "Дякуємо, що ви є частиною Mastodon!",
"attachments_list.unprocessed": "(не оброблено)", "attachments_list.unprocessed": "(не оброблено)",
"audio.hide": "Сховати аудіо", "audio.hide": "Сховати аудіо",
"block_modal.remote_users_caveat": "Ми попросимо сервер {domain} поважати ваше рішення. Однак дотримання вимог не гарантується, оскільки деякі сервери можуть обробляти блоки по-різному. Загальнодоступні дописи все ще можуть бути видимими для користувачів, які не увійшли в систему.", "block_modal.remote_users_caveat": "Ми попросимо сервер {domain} поважати ваше рішення. Однак дотримання вимог не гарантується, оскільки деякі сервери можуть обробляти блоки по-різному. Загальнодоступні дописи все ще можуть бути видимими для користувачів, які не увійшли в систему.",
@ -509,6 +527,8 @@
"notification.admin.report_statuses_other": "{name} повідомляє про {target}", "notification.admin.report_statuses_other": "{name} повідомляє про {target}",
"notification.admin.sign_up": "{name} приєдналися", "notification.admin.sign_up": "{name} приєдналися",
"notification.admin.sign_up.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} зареєструвалися", "notification.admin.sign_up.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} зареєструвалися",
"notification.annual_report.message": "#Wrapstodon за {year} чекає на вас! Дізнайтеся про найяскравіші та пам'ятні моменти вашого року на Mastodon!",
"notification.annual_report.view": "Переглянути #Wrapstodon",
"notification.favourite": "Ваш допис сподобався {name}", "notification.favourite": "Ваш допис сподобався {name}",
"notification.favourite.name_and_others_with_link": "{name} та <a>{count, plural, one {# інший} few {# інших} many {# інших} other {# інший}}</a> вподобали ваш допис", "notification.favourite.name_and_others_with_link": "{name} та <a>{count, plural, one {# інший} few {# інших} many {# інших} other {# інший}}</a> вподобали ваш допис",
"notification.follow": "{name} підписалися на вас", "notification.follow": "{name} підписалися на вас",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "app dùng nhiều nhất", "annual_report.summary.most_used_app.most_used_app": "app dùng nhiều nhất",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag dùng nhiều nhất", "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag dùng nhiều nhất",
"annual_report.summary.most_used_hashtag.none": "Không có",
"annual_report.summary.new_posts.new_posts": "tút mới", "annual_report.summary.new_posts.new_posts": "tút mới",
"annual_report.summary.percentile.text": "<topLabel>Bạn nằm trong top</topLabel><percentage></percentage><bottomLabel>thành viên Mastodon.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Bạn nằm trong top</topLabel><percentage></percentage><bottomLabel>thành viên Mastodon.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Chúng tôi sẽ không kể cho Bernie.", "annual_report.summary.percentile.we_wont_tell_bernie": "Chúng tôi sẽ không kể cho Bernie.",

View File

@ -101,6 +101,7 @@
"annual_report.summary.highlighted_post.possessive": "{name} 的", "annual_report.summary.highlighted_post.possessive": "{name} 的",
"annual_report.summary.most_used_app.most_used_app": "最常用的应用", "annual_report.summary.most_used_app.most_used_app": "最常用的应用",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "最常用的话题", "annual_report.summary.most_used_hashtag.most_used_hashtag": "最常用的话题",
"annual_report.summary.most_used_hashtag.none": "无",
"annual_report.summary.new_posts.new_posts": "新发嘟", "annual_report.summary.new_posts.new_posts": "新发嘟",
"annual_report.summary.percentile.text": "<topLabel>这使你跻身 Mastodon 用户的前</topLabel><percentage></percentage><bottomLabel></bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>这使你跻身 Mastodon 用户的前</topLabel><percentage></percentage><bottomLabel></bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "我们打死也不会告诉Bernie。", "annual_report.summary.percentile.we_wont_tell_bernie": "我们打死也不会告诉Bernie。",

View File

@ -87,23 +87,25 @@
"alert.unexpected.title": "哎呀!", "alert.unexpected.title": "哎呀!",
"alt_text_badge.title": "ALT 說明文字", "alt_text_badge.title": "ALT 說明文字",
"announcement.announcement": "公告", "announcement.announcement": "公告",
"annual_report.summary.archetype.booster": "酷炫獵人", "annual_report.summary.archetype.booster": "酷炫獵人",
"annual_report.summary.archetype.lurker": "潛伏者", "annual_report.summary.archetype.lurker": "潛水高手",
"annual_report.summary.archetype.oracle": "先知", "annual_report.summary.archetype.oracle": "先知",
"annual_report.summary.archetype.pollster": "民調人員", "annual_report.summary.archetype.pollster": "民調專家",
"annual_report.summary.archetype.replier": "社交菁英", "annual_report.summary.archetype.replier": "社交菁英",
"annual_report.summary.followers.followers": "跟隨者", "annual_report.summary.followers.followers": "跟隨者",
"annual_report.summary.followers.total": "總共 {count}", "annual_report.summary.followers.total": "總共 {count}",
"annual_report.summary.here_it_is": "以下是您的{year}年度回顧:", "annual_report.summary.here_it_is": "以下是您的 {year} 年度回顧:",
"annual_report.summary.highlighted_post.by_favourites": "最愛的嘟文", "annual_report.summary.highlighted_post.by_favourites": "最多被加到最愛的嘟文",
"annual_report.summary.highlighted_post.by_reblogs": "最多轉嘟的嘟文", "annual_report.summary.highlighted_post.by_reblogs": "最多轉嘟的嘟文",
"annual_report.summary.highlighted_post.by_replies": "最多回覆的嘟文", "annual_report.summary.highlighted_post.by_replies": "最多回覆的嘟文",
"annual_report.summary.highlighted_post.possessive": "{name} 的", "annual_report.summary.highlighted_post.possessive": "{name} 的",
"annual_report.summary.most_used_app.most_used_app": "最常使用的應用程式", "annual_report.summary.most_used_app.most_used_app": "最常使用的應用程式",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "最常使用的主題標籤", "annual_report.summary.most_used_hashtag.most_used_hashtag": "最常使用的主題標籤",
"annual_report.summary.most_used_hashtag.none": "無最常用之主題標籤",
"annual_report.summary.new_posts.new_posts": "新嘟文", "annual_report.summary.new_posts.new_posts": "新嘟文",
"annual_report.summary.percentile.text": "<topLabel>這讓您成為前</topLabel><percentage></percentage><bottomLabel>Mastodon 的使用者。</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>這讓您成為前</topLabel><percentage></percentage><bottomLabel>Mastodon 的使用者。</bottomLabel>",
"annual_report.summary.thanks": "感謝您成為 Mastodon 的一員!", "annual_report.summary.percentile.we_wont_tell_bernie": "我們不會告訴 Bernie。",
"annual_report.summary.thanks": "感謝您成為 Mastodon 的一份子!",
"attachments_list.unprocessed": "(未經處理)", "attachments_list.unprocessed": "(未經處理)",
"audio.hide": "隱藏音訊", "audio.hide": "隱藏音訊",
"block_modal.remote_users_caveat": "我們會要求 {domain} 伺服器尊重您的決定。然而,我們無法保證所有伺服器皆會遵守,某些伺服器可能以不同方式處理封鎖。未登入之使用者仍可能看見您的公開嘟文。", "block_modal.remote_users_caveat": "我們會要求 {domain} 伺服器尊重您的決定。然而,我們無法保證所有伺服器皆會遵守,某些伺服器可能以不同方式處理封鎖。未登入之使用者仍可能看見您的公開嘟文。",
@ -525,6 +527,8 @@
"notification.admin.report_statuses_other": "{name} 已檢舉 {target}", "notification.admin.report_statuses_other": "{name} 已檢舉 {target}",
"notification.admin.sign_up": "{name} 已經註冊", "notification.admin.sign_up": "{name} 已經註冊",
"notification.admin.sign_up.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已註冊", "notification.admin.sign_up.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已註冊",
"notification.annual_report.message": "您的 {year} #Wrapstodon 正等著您!揭開您 Mastodon 上的年度精彩時刻與值得回憶的難忘時光!",
"notification.annual_report.view": "檢視 #Wrapstodon",
"notification.favourite": "{name} 已將您的嘟文加入最愛", "notification.favourite": "{name} 已將您的嘟文加入最愛",
"notification.favourite.name_and_others_with_link": "{name} 與<a>{count, plural, other {其他 # 個人}}</a>已將您的嘟文加入最愛", "notification.favourite.name_and_others_with_link": "{name} 與<a>{count, plural, other {其他 # 個人}}</a>已將您的嘟文加入最愛",
"notification.follow": "{name} 已跟隨您", "notification.follow": "{name} 已跟隨您",

View File

@ -535,3 +535,10 @@ a.sparkline {
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
opacity: 0.25; opacity: 0.25;
} }
.notification-group--annual-report {
.notification-group__icon,
.notification-group__main .link-button {
color: var(--indigo-3);
}
}

View File

@ -1938,3 +1938,31 @@ a.sparkline {
} }
} }
} }
.status__card {
padding: 15px;
border-radius: 4px;
background: $ui-base-color;
font-size: 15px;
line-height: 20px;
word-wrap: break-word;
font-weight: 400;
border: 1px solid lighten($ui-base-color, 4%);
color: $primary-text-color;
box-sizing: border-box;
min-height: 100%;
.status__prepend {
padding: 0 0 15px;
gap: 4px;
align-items: center;
}
.status__content {
padding-top: 0;
summary {
display: list-item;
}
}
}

View File

@ -103,6 +103,11 @@
background-color: var(--goldenrod-2); background-color: var(--goldenrod-2);
} }
} }
.status-card,
.hashtag-bar {
display: none;
}
} }
&__followers { &__followers {
@ -237,7 +242,7 @@
} }
&__number { &__number {
font-size: 61px; font-size: 54px;
font-weight: 600; font-weight: 600;
line-height: 73px; line-height: 73px;
color: var(--goldenrod-2); color: var(--goldenrod-2);
@ -306,7 +311,7 @@
} }
.annual-report-modal { .annual-report-modal {
max-width: 480px; max-width: 600px;
background: var(--indigo-1); background: var(--indigo-1);
border-radius: 16px; border-radius: 16px;
display: flex; display: flex;

View File

@ -339,16 +339,12 @@ a.table-action-link {
} }
} }
.status__content { // Reset the status card to not have borders, background or padding when
padding-top: 0; // inline in the table of statuses
.status__card {
summary { border: none;
display: list-item; background: none;
} padding: 0;
strong {
font-weight: 700;
}
} }
.nothing-here { .nothing-here {

View File

@ -1,6 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
class AccountReachFinder class AccountReachFinder
RECENT_LIMIT = 2_000
STATUS_LIMIT = 200
STATUS_SINCE = 2.days
def initialize(account) def initialize(account)
@account = account @account = account
end end
@ -20,13 +24,27 @@ class AccountReachFinder
end end
def recently_mentioned_inboxes def recently_mentioned_inboxes
cutoff_id = Mastodon::Snowflake.id_at(2.days.ago, with_random: false) Account
recent_statuses = @account.statuses.recent.where(id: cutoff_id...).limit(200) .joins(:mentions)
.where(mentions: { status: recent_statuses })
Account.joins(:mentions).where(mentions: { status: recent_statuses }).inboxes.take(2000) .inboxes
.take(RECENT_LIMIT)
end end
def relay_inboxes def relay_inboxes
Relay.enabled.pluck(:inbox_url) Relay.enabled.pluck(:inbox_url)
end end
def oldest_status_id
Mastodon::Snowflake
.id_at(STATUS_SINCE.ago, with_random: false)
end
def recent_statuses
@account
.statuses
.recent
.where(id: oldest_status_id...)
.limit(STATUS_LIMIT)
end
end end

View File

@ -0,0 +1,22 @@
# frozen_string_literal: true
class DomainResource
attr_reader :domain
RESOLVE_TIMEOUT = 5
def initialize(domain)
@domain = domain
end
def mx
Resolv::DNS.open do |dns|
dns.timeouts = RESOLVE_TIMEOUT
dns
.getresources(domain, Resolv::DNS::Resource::IN::MX)
.to_a
.map { |mx| mx.exchange.to_s }
.compact_blank
end
end
end

View File

@ -334,14 +334,10 @@ class Request
def check_private_address(address, host) def check_private_address(address, host)
addr = IPAddr.new(address.to_s) addr = IPAddr.new(address.to_s)
return if Rails.env.development? || private_address_exceptions.any? { |range| range.include?(addr) } return if Rails.env.development? || Rails.configuration.x.private_address_exceptions.any? { |range| range.include?(addr) }
raise Mastodon::PrivateNetworkAddressError, host if PrivateAddressCheck.private_address?(addr) raise Mastodon::PrivateNetworkAddressError, host if PrivateAddressCheck.private_address?(addr)
end end
def private_address_exceptions
@private_address_exceptions = (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(/(?:\s*,\s*|\s+)/).map { |addr| IPAddr.new(addr) }
end
end end
end end

View File

@ -9,10 +9,16 @@ class Vacuum::ImportsVacuum
private private
def clean_unconfirmed_imports! def clean_unconfirmed_imports!
BulkImport.state_unconfirmed.where(created_at: ..10.minutes.ago).in_batches.delete_all BulkImport
.confirmation_missed
.in_batches
.delete_all
end end
def clean_old_imports! def clean_old_imports!
BulkImport.where(created_at: ..1.week.ago).in_batches.delete_all BulkImport
.archival_completed
.in_batches
.delete_all
end end
end end

View File

@ -90,6 +90,8 @@ class Account < ApplicationRecord
include Account::Interactions include Account::Interactions
include Account::Merging include Account::Merging
include Account::Search include Account::Search
include Account::Sensitizes
include Account::Silences
include Account::StatusesSearch include Account::StatusesSearch
include Account::Suspensions include Account::Suspensions
include Account::AttributionDomains include Account::AttributionDomains
@ -129,9 +131,6 @@ class Account < ApplicationRecord
scope :remote, -> { where.not(domain: nil) } scope :remote, -> { where.not(domain: nil) }
scope :local, -> { where(domain: nil) } scope :local, -> { where(domain: nil) }
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
scope :silenced, -> { where.not(silenced_at: nil) }
scope :sensitized, -> { where.not(sensitized_at: nil) }
scope :without_silenced, -> { where(silenced_at: nil) }
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) } scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
scope :recent, -> { reorder(id: :desc) } scope :recent, -> { reorder(id: :desc) }
scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) } scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) }
@ -244,30 +243,6 @@ class Account < ApplicationRecord
ResolveAccountService.new.call(acct) unless local? ResolveAccountService.new.call(acct) unless local?
end end
def silenced?
silenced_at.present?
end
def silence!(date = Time.now.utc)
update!(silenced_at: date)
end
def unsilence!
update!(silenced_at: nil)
end
def sensitized?
sensitized_at.present?
end
def sensitize!(date = Time.now.utc)
update!(sensitized_at: date)
end
def unsensitize!
update!(sensitized_at: nil)
end
def memorialize! def memorialize!
update!(memorial: true) update!(memorial: true)
end end

View File

@ -31,6 +31,7 @@ class Admin::ActionLogFilter
create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze, create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze,
create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze, create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze,
create_ip_block: { target_type: 'IpBlock', action: 'create' }.freeze, create_ip_block: { target_type: 'IpBlock', action: 'create' }.freeze,
create_relay: { target_type: 'Relay', action: 'create' }.freeze,
create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze, create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze,
create_user_role: { target_type: 'UserRole', action: 'create' }.freeze, create_user_role: { target_type: 'UserRole', action: 'create' }.freeze,
create_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'create' }.freeze, create_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'create' }.freeze,
@ -40,6 +41,7 @@ class Admin::ActionLogFilter
destroy_domain_allow: { target_type: 'DomainAllow', action: 'destroy' }.freeze, destroy_domain_allow: { target_type: 'DomainAllow', action: 'destroy' }.freeze,
destroy_domain_block: { target_type: 'DomainBlock', action: 'destroy' }.freeze, destroy_domain_block: { target_type: 'DomainBlock', action: 'destroy' }.freeze,
destroy_ip_block: { target_type: 'IpBlock', action: 'destroy' }.freeze, destroy_ip_block: { target_type: 'IpBlock', action: 'destroy' }.freeze,
destroy_relay: { target_type: 'Relay', action: 'destroy' }.freeze,
destroy_email_domain_block: { target_type: 'EmailDomainBlock', action: 'destroy' }.freeze, destroy_email_domain_block: { target_type: 'EmailDomainBlock', action: 'destroy' }.freeze,
destroy_instance: { target_type: 'Instance', action: 'destroy' }.freeze, destroy_instance: { target_type: 'Instance', action: 'destroy' }.freeze,
destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze, destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze,
@ -49,8 +51,10 @@ class Admin::ActionLogFilter
disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze, disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze,
disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze,
disable_user: { target_type: 'User', action: 'disable' }.freeze, disable_user: { target_type: 'User', action: 'disable' }.freeze,
disable_relay: { target_type: 'Relay', action: 'disable' }.freeze,
enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze, enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze,
enable_user: { target_type: 'User', action: 'enable' }.freeze, enable_user: { target_type: 'User', action: 'enable' }.freeze,
enable_relay: { target_type: 'Relay', action: 'enable' }.freeze,
memorialize_account: { target_type: 'Account', action: 'memorialize' }.freeze, memorialize_account: { target_type: 'Account', action: 'memorialize' }.freeze,
promote_user: { target_type: 'User', action: 'promote' }.freeze, promote_user: { target_type: 'User', action: 'promote' }.freeze,
remove_avatar_user: { target_type: 'User', action: 'remove_avatar' }.freeze, remove_avatar_user: { target_type: 'User', action: 'remove_avatar' }.freeze,

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class ApplicationRecord < ActiveRecord::Base class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true primary_abstract_class
include Remotable include Remotable

View File

@ -21,6 +21,9 @@
class BulkImport < ApplicationRecord class BulkImport < ApplicationRecord
self.inheritance_column = false self.inheritance_column = false
ARCHIVE_PERIOD = 1.week
CONFIRM_PERIOD = 10.minutes
belongs_to :account belongs_to :account
has_many :rows, class_name: 'BulkImportRow', inverse_of: :bulk_import, dependent: :delete_all has_many :rows, class_name: 'BulkImportRow', inverse_of: :bulk_import, dependent: :delete_all
@ -42,6 +45,9 @@ class BulkImport < ApplicationRecord
validates :type, presence: true validates :type, presence: true
scope :archival_completed, -> { where(created_at: ..ARCHIVE_PERIOD.ago) }
scope :confirmation_missed, -> { state_unconfirmed.where(created_at: ..CONFIRM_PERIOD.ago) }
def self.progress!(bulk_import_id, imported: false) def self.progress!(bulk_import_id, imported: false)
# Use `increment_counter` so that the incrementation is done atomically in the database # Use `increment_counter` so that the incrementation is done atomically in the database
BulkImport.increment_counter(:processed_items, bulk_import_id) BulkImport.increment_counter(:processed_items, bulk_import_id)

View File

@ -0,0 +1,21 @@
# frozen_string_literal: true
module Account::Sensitizes
extend ActiveSupport::Concern
included do
scope :sensitized, -> { where.not(sensitized_at: nil) }
end
def sensitized?
sensitized_at.present?
end
def sensitize!(date = Time.now.utc)
update!(sensitized_at: date)
end
def unsensitize!
update!(sensitized_at: nil)
end
end

View File

@ -0,0 +1,22 @@
# frozen_string_literal: true
module Account::Silences
extend ActiveSupport::Concern
included do
scope :silenced, -> { where.not(silenced_at: nil) }
scope :without_silenced, -> { where(silenced_at: nil) }
end
def silenced?
silenced_at.present?
end
def silence!(date = Time.now.utc)
update!(silenced_at: date)
end
def unsilence!
update!(silenced_at: nil)
end
end

View File

@ -34,7 +34,7 @@ class List < ApplicationRecord
private private
def validate_account_lists_limit def validate_account_lists_limit
errors.add(:base, I18n.t('lists.errors.limit')) if account.lists.count >= PER_ACCOUNT_LIMIT errors.add(:base, I18n.t('lists.errors.limit')) if account.owned_lists.count >= PER_ACCOUNT_LIMIT
end end
def clean_feed_manager def clean_feed_manager

View File

@ -25,6 +25,10 @@ class Relay < ApplicationRecord
alias enabled? accepted? alias enabled? accepted?
def to_log_human_identifier
inbox_url
end
def enable! def enable!
activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
payload = Oj.dump(follow_activity(activity_id)) payload = Oj.dump(follow_activity(activity_id))

View File

@ -22,19 +22,33 @@ class SoftwareUpdate < ApplicationRecord
Gem::Version.new(version) Gem::Version.new(version)
end end
def outdated?
runtime_version >= gem_version
end
def pending?
gem_version > runtime_version
end
class << self class << self
def check_enabled? def check_enabled?
ENV['UPDATE_CHECK_URL'] != '' Rails.configuration.x.mastodon.software_update_url.present?
end end
def pending_to_a def pending_to_a
return [] unless check_enabled? return [] unless check_enabled?
all.to_a.filter { |update| update.gem_version > Mastodon::Version.gem_version } all.to_a.filter(&:pending?)
end end
def urgent_pending? def urgent_pending?
pending_to_a.any?(&:urgent?) pending_to_a.any?(&:urgent?)
end end
end end
private
def runtime_version
Mastodon::Version.gem_version
end
end end

View File

@ -280,6 +280,15 @@ class User < ApplicationRecord
save! save!
end end
def applications_last_used
Doorkeeper::AccessToken
.where(resource_owner_id: id)
.where.not(last_used_at: nil)
.group(:application_id)
.maximum(:last_used_at)
.to_h
end
def token_for_app(app) def token_for_app(app)
return nil if app.nil? || app.owner != self return nil if app.nil? || app.owner != self
@ -457,13 +466,7 @@ class User < ApplicationRecord
# Doing this conditionally is not very satisfying, but this is consistent # Doing this conditionally is not very satisfying, but this is consistent
# with the MX records validations we do and keeps the specs tractable. # with the MX records validations we do and keeps the specs tractable.
unless self.class.skip_mx_check? records = DomainResource.new(domain).mx unless self.class.skip_mx_check?
Resolv::DNS.open do |dns|
dns.timeouts = 5
records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }.compact_blank
end
end
EmailDomainBlock.requires_approval?(records + [domain], attempt_ip: sign_up_ip) EmailDomainBlock.requires_approval?(records + [domain], attempt_ip: sign_up_ip)
end end

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class REST::CredentialApplicationSerializer < REST::ApplicationSerializer class REST::CredentialApplicationSerializer < REST::ApplicationSerializer
attributes :client_id, :client_secret attributes :client_id, :client_secret, :client_secret_expires_at
def client_id def client_id
object.uid object.uid
@ -10,4 +10,10 @@ class REST::CredentialApplicationSerializer < REST::ApplicationSerializer
def client_secret def client_secret
object.secret object.secret
end end
# Added for future forwards compatibility when we may decide to expire OAuth
# Applications. Set to zero means that the client_secret never expires.
def client_secret_expires_at
0
end
end end

View File

@ -12,7 +12,7 @@ class SoftwareUpdateCheckService < BaseService
def clean_outdated_updates! def clean_outdated_updates!
SoftwareUpdate.find_each do |software_update| SoftwareUpdate.find_each do |software_update|
software_update.delete if Mastodon::Version.gem_version >= software_update.gem_version software_update.delete if software_update.outdated?
rescue ArgumentError rescue ArgumentError
software_update.delete software_update.delete
end end
@ -27,7 +27,7 @@ class SoftwareUpdateCheckService < BaseService
end end
def api_url def api_url
ENV.fetch('UPDATE_CHECK_URL', 'https://api.joinmastodon.org/update-check') Rails.configuration.x.mastodon.software_update_url
end end
def version def version

View File

@ -1,5 +1,4 @@
- content_for :page_title do - content_for :page_title, t('about.title')
= t('about.title')
- content_for :header_tags do - content_for :header_tags do
= render partial: 'shared/og' = render partial: 'shared/og'

View File

@ -1,5 +1,4 @@
- content_for :page_title do - content_for :page_title, "#{display_name(@account)} (#{acct(@account)})"
#{display_name(@account)} (#{acct(@account)})
- content_for :header_tags do - content_for :header_tags do
- if @account.user_prefers_noindex? - if @account.user_prefers_noindex?

View File

@ -16,7 +16,7 @@
.dashboard__item .dashboard__item
= react_admin_component :counter, = react_admin_component :counter,
end_at: @time_period.last, end_at: @time_period.last,
href: admin_accounts_path(origin: 'local'), href: current_user.can?(:manage_users) ? admin_accounts_path(origin: 'local') : nil,
label: t('admin.dashboard.new_users'), label: t('admin.dashboard.new_users'),
measure: 'new_users', measure: 'new_users',
start_at: @time_period.first start_at: @time_period.first
@ -24,7 +24,7 @@
.dashboard__item .dashboard__item
= react_admin_component :counter, = react_admin_component :counter,
end_at: @time_period.last, end_at: @time_period.last,
href: admin_accounts_path(origin: 'local'), href: current_user.can?(:manage_users) ? admin_accounts_path(origin: 'local') : nil,
label: t('admin.dashboard.active_users'), label: t('admin.dashboard.active_users'),
measure: 'active_users', measure: 'active_users',
start_at: @time_period.first start_at: @time_period.first
@ -39,7 +39,7 @@
.dashboard__item .dashboard__item
= react_admin_component :counter, = react_admin_component :counter,
end_at: @time_period.last, end_at: @time_period.last,
href: admin_reports_path, href: current_user.can?(:manage_reports) ? admin_reports_path : nil,
label: t('admin.dashboard.opened_reports'), label: t('admin.dashboard.opened_reports'),
measure: 'opened_reports', measure: 'opened_reports',
start_at: @time_period.first start_at: @time_period.first
@ -47,7 +47,7 @@
.dashboard__item .dashboard__item
= react_admin_component :counter, = react_admin_component :counter,
end_at: @time_period.last, end_at: @time_period.last,
href: admin_reports_path(resolved: '1'), href: current_user.can?(:manage_reports) ? admin_reports_path(resolved: '1') : nil,
label: t('admin.dashboard.resolved_reports'), label: t('admin.dashboard.resolved_reports'),
measure: 'resolved_reports', measure: 'resolved_reports',
start_at: @time_period.first start_at: @time_period.first

View File

@ -30,12 +30,12 @@
%label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox
= f.input_field :other_domains, = f.input_field :other_domains,
as: :boolean, as: :boolean,
checked_value: record.exchange.to_s, checked_value: record,
include_hidden: false, include_hidden: false,
multiple: true multiple: true
.batch-table__row__content.pending-account .batch-table__row__content.pending-account
.pending-account__header .pending-account__header
%samp= record.exchange.to_s %samp= record
%br %br
= t('admin.email_domain_blocks.dns.types.mx') = t('admin.email_domain_blocks.dns.types.mx')

View File

@ -7,7 +7,7 @@
.dashboard__item .dashboard__item
= react_admin_component :counter, = react_admin_component :counter,
end_at: period_end_at, end_at: period_end_at,
href: admin_accounts_path(origin: 'remote', by_domain: instance_domain), href: current_user.can?(:manage_users) ? admin_accounts_path(origin: 'remote', by_domain: instance_domain) : nil,
label: t('admin.instances.dashboard.instance_accounts_measure'), label: t('admin.instances.dashboard.instance_accounts_measure'),
measure: 'instance_accounts', measure: 'instance_accounts',
params: { domain: instance_domain }, params: { domain: instance_domain },
@ -43,7 +43,7 @@
.dashboard__item .dashboard__item
= react_admin_component :counter, = react_admin_component :counter,
end_at: period_end_at, end_at: period_end_at,
href: admin_reports_path(by_target_domain: instance_domain), href: current_user.can?(:manage_reports) ? admin_reports_path(by_target_domain: instance_domain) : nil,
label: t('admin.instances.dashboard.instance_reports_measure'), label: t('admin.instances.dashboard.instance_reports_measure'),
measure: 'instance_reports', measure: 'instance_reports',
params: { domain: instance_domain }, params: { domain: instance_domain },

View File

@ -2,40 +2,52 @@
%label.batch-table__row__select.batch-checkbox %label.batch-table__row__select.batch-checkbox
= f.check_box :status_ids, { multiple: true, include_hidden: false }, status.id = f.check_box :status_ids, { multiple: true, include_hidden: false }, status.id
.batch-table__row__content .batch-table__row__content
.status__content>< .status__card
- if status.proper.spoiler_text.blank?
= prerender_custom_emojis(status_content_format(status.proper), status.proper.emojis)
- else
%details<
%summary><
%strong> Content warning: #{prerender_custom_emojis(h(status.proper.spoiler_text), status.proper.emojis)}
= prerender_custom_emojis(status_content_format(status.proper), status.proper.emojis)
- unless status.proper.ordered_media_attachments.empty?
= render partial: 'admin/reports/media_attachments', locals: { status: status.proper }
.detailed-status__meta
- if status.application
= status.application.name
·
= link_to ActivityPub::TagManager.instance.url_for(status.proper), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do
%time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
- if status.edited?
·
= link_to t('statuses.edited_at_html', date: content_tag(:time, l(status.edited_at), datetime: status.edited_at.iso8601, title: l(status.edited_at), class: 'formatted')),
admin_account_status_path(status.account_id, status),
class: 'detailed-status__datetime'
- if status.discarded?
·
%span.negative-hint= t('admin.statuses.deleted')
·
- if status.reblog? - if status.reblog?
= material_symbol('repeat_active') .status__prepend
= t('statuses.boosted_from_html', acct_link: admin_account_inline_link_to(status.proper.account)) = material_symbol('repeat')
- else = t('statuses.boosted_from_html', acct_link: admin_account_inline_link_to(status.proper.account, path: admin_account_status_path(status.proper.account.id, status.proper.id)))
- elsif status.reply? && status.in_reply_to_id.present?
.status__prepend
= material_symbol('reply')
= t('admin.statuses.replied_to_html', acct_link: admin_account_inline_link_to(status.in_reply_to_account, path: admin_account_status_path(status.thread.account_id, status.in_reply_to_id)))
.status__content><
- if status.proper.spoiler_text.blank?
= prerender_custom_emojis(status_content_format(status.proper), status.proper.emojis)
- else
%details<
%summary><
%strong> Content warning: #{prerender_custom_emojis(h(status.proper.spoiler_text), status.proper.emojis)}
= prerender_custom_emojis(status_content_format(status.proper), status.proper.emojis)
- unless status.proper.ordered_media_attachments.empty?
= render partial: 'admin/reports/media_attachments', locals: { status: status.proper }
.detailed-status__meta
- if status.application
= status.application.name
·
= link_to admin_account_status_path(status.account.id, status), class: 'detailed-status__datetime' do
%time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
- if status.edited?
·
= link_to t('statuses.edited_at_html', date: content_tag(:time, l(status.edited_at), datetime: status.edited_at.iso8601, title: l(status.edited_at), class: 'formatted')),
admin_account_status_path(status.account_id, status),
class: 'detailed-status__datetime'
- if status.discarded?
·
%span.negative-hint= t('admin.statuses.deleted')
·
= material_symbol visibility_icon(status) = material_symbol visibility_icon(status)
= t("statuses.visibilities.#{status.visibility}") = t("statuses.visibilities.#{status.visibility}")
- if status.proper.sensitive?
· ·
= material_symbol('visibility_off')
= t('stream_entries.sensitive_content') = link_to ActivityPub::TagManager.instance.url_for(status.proper), class: 'detailed-status__link', target: stream_link_target, rel: 'noopener noreferrer' do
= t('admin.statuses.view_publicly')
- if status.proper.sensitive?
·
= material_symbol('visibility_off')
= t('stream_entries.sensitive_content')

View File

@ -1,7 +1,5 @@
- content_for :page_title do - content_for :page_title do
= t('admin.statuses.title') = t('admin.statuses.title', name: @account.pretty_acct)
\-
@#{@account.pretty_acct}
.filters .filters
.filter-subset .filter-subset
@ -33,11 +31,18 @@
= check_box_tag :batch_checkbox_all, nil, false = check_box_tag :batch_checkbox_all, nil, false
.batch-table__toolbar__actions .batch-table__toolbar__actions
- unless @statuses.empty? - unless @statuses.empty?
= f.button safe_join([material_symbol('flag'), t('admin.statuses.batch.report')]), - if params[:report_id]
class: 'table-action-link', = f.button safe_join([material_symbol('add'), t('admin.statuses.batch.add_to_report', id: params[:report_id])]),
data: { confirm: t('admin.reports.are_you_sure') }, class: 'table-action-link',
name: :report, data: { confirm: t('admin.reports.are_you_sure') },
type: :submit name: :report,
type: :submit
- else
= f.button safe_join([material_symbol('flag'), t('admin.statuses.batch.report')]),
class: 'table-action-link',
data: { confirm: t('admin.reports.are_you_sure') },
name: :report,
type: :submit
.batch-table__body .batch-table__body
- if @statuses.empty? - if @statuses.empty?
= nothing_here 'nothing-here--under-tabs' = nothing_here 'nothing-here--under-tabs'

View File

@ -1,7 +1,14 @@
- content_for :page_title do - content_for :page_title do
= t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false)) = t('admin.statuses.status_title', name: @account.pretty_acct)
- content_for :heading_actions do - content_for :heading_actions do
= form_with model: @status_batch_action, url: batch_admin_account_statuses_path(@account.id) do |f|
= f.hidden_field :status_ids, { multiple: true, value: @status.id }
= f.button safe_join([material_symbol('flag'), t('admin.statuses.batch.report')]),
class: 'button',
data: { confirm: t('admin.reports.are_you_sure') },
name: :report,
type: :submit
= link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank', rel: 'noopener noreferrer' = link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank', rel: 'noopener noreferrer'
%h3= t('admin.statuses.metadata') %h3= t('admin.statuses.metadata')
@ -44,7 +51,56 @@
%hr.spacer/ %hr.spacer/
%h3= t('admin.statuses.history') %h3= t('admin.statuses.contents')
%ol.history .status__card
= render partial: 'admin/status_edits/status_edit', collection: batched_ordered_status_edits - if @status.reblog?
.status__prepend
= material_symbol('repeat')
= t('statuses.boosted_from_html', acct_link: admin_account_inline_link_to(@status.proper.account, path: admin_account_status_path(@status.proper.account.id, @status.proper.id)))
- elsif @status.reply? && @status.in_reply_to_id.present?
.status__prepend
= material_symbol('reply')
= t('admin.statuses.replied_to_html', acct_link: admin_account_inline_link_to(@status.in_reply_to_account, path: admin_account_status_path(@status.thread.account_id, @status.in_reply_to_id)))
.status__content><
- if @status.proper.spoiler_text.blank?
= prerender_custom_emojis(status_content_format(@status.proper), @status.proper.emojis)
- else
%details<
%summary><
%strong> Content warning: #{prerender_custom_emojis(h(@status.proper.spoiler_text), @status.proper.emojis)}
= prerender_custom_emojis(status_content_format(@status.proper), @status.proper.emojis)
- unless @status.proper.ordered_media_attachments.empty?
= render partial: 'admin/reports/media_attachments', locals: { status: @status.proper }
.detailed-status__meta
- if @status.application
= @status.application.name
·
%span.detailed-status__datetime
%time.formatted{ datetime: @status.created_at.iso8601, title: l(@status.created_at) }= l(@status.created_at)
- if @status.edited?
·
%span.detailed-status__datetime
= t('statuses.edited_at_html', date: content_tag(:time, l(@status.edited_at), datetime: @status.edited_at.iso8601, title: l(@status.edited_at), class: 'formatted'))
- if @status.discarded?
·
%span.negative-hint= t('admin.statuses.deleted')
- unless @status.reblog?
·
= material_symbol(visibility_icon(@status))
= t("statuses.visibilities.#{@status.visibility}")
- if @status.proper.sensitive?
·
= material_symbol('visibility_off')
= t('stream_entries.sensitive_content')
%hr.spacer/
%h3= t('admin.statuses.history')
- if @status.edits.empty?
%p= t('admin.statuses.no_history')
- else
%ol.history
= render partial: 'admin/status_edits/status_edit', collection: batched_ordered_status_edits

View File

@ -1,5 +1,4 @@
- content_for :page_title do - content_for :page_title, t('privacy_policy.title')
= t('privacy_policy.title')
- content_for :header_tags do - content_for :header_tags do
= render partial: 'shared/og' = render partial: 'shared/og'

View File

@ -65,7 +65,7 @@
%p.lead= t('author_attribution.then_instructions') %p.lead= t('author_attribution.then_instructions')
.fields-group .fields-group
= f.input :attribution_domains_as_text, as: :text, wrapper: :with_block_label, input_html: { placeholder: "example1.com\nexample2.com\nexample3.com", rows: 4 } = f.input :attribution_domains_as_text, as: :text, wrapper: :with_block_label, input_html: { placeholder: "example1.com\nexample2.com\nexample3.com", rows: 4, autocapitalize: 'none', autocorrect: 'off' }
.actions .actions
= f.button :button, t('generic.save_changes'), type: :submit = f.button :button, t('generic.save_changes'), type: :submit

View File

@ -1,3 +1,4 @@
- content_for :body_classes, 'app-body'
- content_for :header_tags do - content_for :header_tags do
- if user_signed_in? - if user_signed_in?
= preload_signed_in_js_packs = preload_signed_in_js_packs

View File

@ -1,5 +1,4 @@
- content_for :page_title do - content_for :page_title, t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false))
= t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false))
- content_for :header_tags do - content_for :header_tags do
- if @account.user_prefers_noindex? - if @account.user_prefers_noindex?

View File

@ -13,6 +13,8 @@ class Web::PushNotificationWorker
@subscription = Web::PushSubscription.find(subscription_id) @subscription = Web::PushSubscription.find(subscription_id)
@notification = Notification.find(notification_id) @notification = Notification.find(notification_id)
return if @notification.updated_at < TTL.ago
# Polymorphically associated activity could have been deleted # Polymorphically associated activity could have been deleted
# in the meantime, so we have to double-check before proceeding # in the meantime, so we have to double-check before proceeding
return unless @notification.activity.present? && @subscription.pushable?(@notification) return unless @notification.activity.present? && @subscription.pushable?(@notification)

View File

@ -105,6 +105,7 @@ module Mastodon
end end
config.x.captcha = config_for(:captcha) config.x.captcha = config_for(:captcha)
config.x.mastodon = config_for(:mastodon)
config.x.translation = config_for(:translation) config.x.translation = config_for(:translation)
config.to_prepare do config.to_prepare do

View File

@ -0,0 +1,5 @@
# frozen_string_literal: true
Rails.application.configure do
config.x.private_address_exceptions = (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(/(?:\s*,\s*|\s+)/).map { |addr| IPAddr.new(addr) }
end

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