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

Conflicts:
- `app/services/remove_status_service.rb`:
  Conflict caused by us having a distinc Direct timeline.
  Ported upstream changes.
- `app/javascript/mastodon/features/compose/components/compose_form.js`:
  Conflict between glitch-soc's variable character limit and upstream
  refactoring that part of the code.
  Ported upstream changes.
remotes/1727458204337373841/tmp_refs/heads/signup-info-prompt
Claire 2020-12-05 17:33:29 +01:00
commit f8d867bac4
104 changed files with 3341 additions and 478 deletions

View File

@ -3,6 +3,185 @@ Changelog
All notable changes to this project will be documented in this file.
## Unreleased
### Added
- **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15158), [Gargron](https://github.com/tootsuite/mastodon/pull/15198))
- `Space` and `k` to toggle playback
- `m` to toggle mute
- `f` to toggle fullscreen
- `j` and `l` to go back and forward by 10 seconds
- `.` and `,` to go back and forward by a frame (video only)
- Add expand/compress button on media modal in web UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15068), [mashirozx](https://github.com/tootsuite/mastodon/pull/15088), [mashirozx](https://github.com/tootsuite/mastodon/pull/15094))
- Add border around 🕺 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14769))
- Add border around 🐞 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14712))
- Add home link to the getting started column when home isn't mounted ([ThibG](https://github.com/tootsuite/mastodon/pull/14707))
- Add option to disable swiping motions across the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13885))
- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915))
- Continue watching/listening when you scroll away
- Action bar to interact with/open toot from the pop-out player
- Add unread notification markers in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14818), [ThibG](https://github.com/tootsuite/mastodon/pull/14960), [ThibG](https://github.com/tootsuite/mastodon/pull/14954), [noellabo](https://github.com/tootsuite/mastodon/pull/14897), [noellabo](https://github.com/tootsuite/mastodon/pull/14907))
- Add paragraph about browser add-ons when encountering errors in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14801))
- Add import and export for bookmarks ([ThibG](https://github.com/tootsuite/mastodon/pull/14956))
- Add cache buster feature for media files ([Gargron](https://github.com/tootsuite/mastodon/pull/15155))
- If you have a proxy cache in front of object storage, deleted files will persist until the cache expires
- If enabled, cache buster will make a special request to the proxy to signal a cache reset
- Add duration option to the mute function ([aquarla](https://github.com/tootsuite/mastodon/pull/13831))
- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205))
- Add `og:published_time` OpenGraph tags on toots ([nornagon](https://github.com/tootsuite/mastodon/pull/14865))
- **Add option to be notified when a followed user posts** ([Gargron](https://github.com/tootsuite/mastodon/pull/13546), [ThibG](https://github.com/tootsuite/mastodon/pull/14896), [Gargron](https://github.com/tootsuite/mastodon/pull/14822))
- If you don't want to miss a toot, click the bell button!
- Add client-side validation in password change forms ([ThibG](https://github.com/tootsuite/mastodon/pull/14564))
- Add client-side validation in the registration form ([ThibG](https://github.com/tootsuite/mastodon/pull/14560), [ThibG](https://github.com/tootsuite/mastodon/pull/14599))
- Add support for Gemini URLs ([joshleeb](https://github.com/tootsuite/mastodon/pull/15013))
- Add WebAuthn as an alternative 2FA method ([santiagorodriguez96](https://github.com/tootsuite/mastodon/pull/14466), [jiikko](https://github.com/tootsuite/mastodon/pull/14806))
- Add icon for mutual relationships in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15149))
- Add follow selected followers button in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15148))
- **Add subresource integrity for JS and CSS assets** ([Gargron](https://github.com/tootsuite/mastodon/pull/15096))
- If you use a CDN for static assets (JavaScript, CSS, and so on), you have to trust that the CDN does not modify the assets maliciously
- Subresource integrity compares server-generated asset digests with what's actually served from the CDN and prevents such attacks
- Add `ku`, `sa`, `sc`, `zgh` to available locales ([ykzts](https://github.com/tootsuite/mastodon/pull/15138))
- Add ability to force an account to mark media as sensitive ([noellabo](https://github.com/tootsuite/mastodon/pull/14361))
- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963))
- Add rules for IPs or CIDR ranges that automatically expire after a configurable amount of time
- Choose the severity of the rule, either blocking all access or merely limiting sign-ups
- **Add support for reversible suspensions through ActivityPub** ([Gargron](https://github.com/tootsuite/mastodon/pull/14989))
- Servers can signal that one of their accounts has been suspended
- During suspension, the account can only delete its own content
- A reversal of the suspension can be signalled the same way
- A local suspension always overrides a remote one
- Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026))
- Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721))
- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595))
- Add support for dereferencing objects through bearcaps ([Gargron](https://github.com/tootsuite/mastodon/pull/14683), [noellabo](https://github.com/tootsuite/mastodon/pull/14981))
- Add `S3_READ_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/14952))
- Add `ALLOWED_PRIVATE_ADDRESSES` environment variable ([ThibG](https://github.com/tootsuite/mastodon/pull/14722))
- Add `--fix-permissions` option to `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/14383), [uist1idrju3i](https://github.com/tootsuite/mastodon/pull/14715))
- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201))
- Has someone changed their domain or subdomain thereby creating two accounts where there should be one?
- This command will fix it on your end
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223))
- Index corruption in the database?
- This command is for you
- **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/tootsuite/mastodon/pull/14524), [Gargron](https://github.com/tootsuite/mastodon/pull/14566), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14859), [zunda](https://github.com/tootsuite/mastodon/pull/14608))
- Previously, getting live updates for multiple timelines required opening a HTTP or WebSocket connection for each
- More connections means more resource consumption on both ends, not to mention the (ever so slight) delay when establishing a new connection
- Now, with just a single WebSocket connection you can subscribe and unsubscribe to and from multiple streams
- Add support for limiting results by both `min_id` and `max_id` at the same time in REST API ([tateisu](https://github.com/tootsuite/mastodon/pull/14776))
- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817))
- Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396))
### Changed
- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221))
- Background of the overlay matches the color of the image
- Action bar to interact with or open the toot from the modal
- Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091))
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855))
- Suspensions no longer equal deletions
- A suspended account can be unsuspended with minimal consequences for 30 days
- Immediate deletion of data is still available as an explicit option
- Suspended accounts can request an archive of their data through the UI
- Change REST API to return empty data for suspended accounts (14765)
- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766))
- Change featured hashtag suggestions to be recently used instead of most used ([abcang](https://github.com/tootsuite/mastodon/pull/14760))
- Change direct toots to appear in the home feed again ([Gargron](https://github.com/tootsuite/mastodon/pull/14711), [ThibG](https://github.com/tootsuite/mastodon/pull/15182), [noellabo](https://github.com/tootsuite/mastodon/pull/14727))
- Return to treating all toots the same instead of trying to retrofit direct visibility into an instant messaging model
- Change email address validation to return more specific errors ([ThibG](https://github.com/tootsuite/mastodon/pull/14565))
- Change HTTP signature requirements to include `Digest` header on `POST` requests ([ThibG](https://github.com/tootsuite/mastodon/pull/15069))
- Change click area of video/audio player buttons to be bigger in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15049))
- Change order of filters by alphabetic by "keyword or phrase" ([ariasuni](https://github.com/tootsuite/mastodon/pull/15050))
- Change suspension of remote accounts to also undo outgoing follows ([ThibG](https://github.com/tootsuite/mastodon/pull/15188))
- Change string "Home" to "Home and lists" in the filter creation screen ([ariasuni](https://github.com/tootsuite/mastodon/pull/15139))
- Change string "Boost to original audience" to "Boost with original visibility" in web UI ([3n-k1](https://github.com/tootsuite/mastodon/pull/14598))
- Change string "Show more" to "Show newer" and "Show older" on public pages ([ariasuni](https://github.com/tootsuite/mastodon/pull/15052))
- Change order of announcements to be reverse chronological in web UI ([dariusk](https://github.com/tootsuite/mastodon/pull/15065), [dariusk](https://github.com/tootsuite/mastodon/pull/15070))
- Change visibility icon next to timestamp to be clickable in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15053), [mayaeh](https://github.com/tootsuite/mastodon/pull/15055))
### Removed
- Remove fade-in animation from modals in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15199))
- Remove auto-redirect to direct messages in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15142))
- Remove obsolete IndexedDB operations from web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14730))
- Remove dependency on unused and unmaintained http_parser.rb gem ([ThibG](https://github.com/tootsuite/mastodon/pull/14574))
### Fixed
- **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200))
- Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot
- Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned
- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ThibG](https://github.com/tootsuite/mastodon/pull/15187))
- Fix sending redundant ActivityPub events when processing remote account deletion ([ThibG](https://github.com/tootsuite/mastodon/pull/15104))
- Fix Move handler not being triggered when failing to fetch target account ([ThibG](https://github.com/tootsuite/mastodon/pull/15107))
- Fix downloading remote media files when server returns empty filename ([ThibG](https://github.com/tootsuite/mastodon/pull/14867))
- Fix account processing failing because of large collections ([ThibG](https://github.com/tootsuite/mastodon/pull/15027))
- Fix not being able to unfavorite toots one has lost access to ([ThibG](https://github.com/tootsuite/mastodon/pull/15192))
- Fix not being able to unbookmark toots one has lost access to ([ThibG](https://github.com/tootsuite/mastodon/pull/14604))
- Fix possible casing inconsistencies in hashtag search ([ThibG](https://github.com/tootsuite/mastodon/pull/14906))
- Fix updating account counters when association is not yet created ([Gargron](https://github.com/tootsuite/mastodon/pull/15108))
- Fix cookies not having a SameSite attribute ([Gargron](https://github.com/tootsuite/mastodon/pull/15098))
- Fix poll ending notifications being created for each vote ([ThibG](https://github.com/tootsuite/mastodon/pull/15071))
- Fix multiple boosts of a same toot erroneously appearing in TL ([ThibG](https://github.com/tootsuite/mastodon/pull/14759))
- Fix asset builds not picking up `CDN_HOST` change ([ThibG](https://github.com/tootsuite/mastodon/pull/14381))
- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543))
- Some time ago, browsers added a requirement that desktop notification prompts could only be displayed in response to a user-generated event (such as a click)
- This means that for some time, users who haven't already given the permission before were not getting a prompt and as such were not receiving desktop notifications
- Fix "Mark media as sensitive" string not supporting pluralizations in other languages in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15051))
- Fix glitched image uploads when canvas read access is blocked in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15180))
- Fix some account gallery items having empty labels in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15073))
- Fix alt-key hotkeys activating while typing in a text field in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14942))
- Fix wrong seek bar width on media player in web UI ([mfmfuyu](https://github.com/tootsuite/mastodon/pull/15060))
- Fix logging out on mobile in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14901))
- Fix wrong click area for GIFVs in media modal in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/14615))
- Fix unreadable placeholder text color in high contrast theme in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14803))
- Fix scrolling issues when closing some dropdown menus in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14606))
- Fix notification filter bar incorrectly filtering gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14808))
- Fix disabled boost icon being replaced by private boost icon on hover in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14456))
- Fix hashtag detection in compose form being different to server-side in web UI ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/14484), [ThibG](https://github.com/tootsuite/mastodon/pull/14513))
- Fix home last read marker mishandling gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14809))
- Fix inefficiency when fetching hashtag timeline ([noellabo](https://github.com/tootsuite/mastodon/pull/14861), [akihikodaki](https://github.com/tootsuite/mastodon/pull/14662))
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674))
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673))
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675))
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534))
- Fix PostgreSQL secret name for cronjob in Helm chart ([metal3d](https://github.com/tootsuite/mastodon/pull/15072))
- Fix Procfile not being compatible with herokuish ([acuteaura](https://github.com/tootsuite/mastodon/pull/12685))
- Fix installation of tini being split into multiple steps in Dockerfile ([ryncsn](https://github.com/tootsuite/mastodon/pull/14686))
### Security
- Fix streaming API allowing connections to persist after access token invalidation ([Gargron](https://github.com/tootsuite/mastodon/pull/15111))
- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802))
## [3.2.1] - 2020-10-19
### Added
- Add support for latest HTTP Signatures spec draft ([ThibG](https://github.com/tootsuite/mastodon/pull/14556))
- Add support for inlined objects in ActivityPub `to`/`cc` ([ThibG](https://github.com/tootsuite/mastodon/pull/14514))
### Changed
- Change actors to not be served at all without authentication in limited federation mode ([ThibG](https://github.com/tootsuite/mastodon/pull/14800))
- Previously, a bare version of an actor was served when not authenticated, i.e. username and public key
- Because all actor fetch requests are signed using a separate system actor, that is no longer required
### Fixed
- Fix `tootctl media` commands not recognizing very large IDs ([ThibG](https://github.com/tootsuite/mastodon/pull/14536))
- Fix crash when failing to load emoji picker in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14525))
- Fix contrast requirements in thumbnail color extraction ([ThibG](https://github.com/tootsuite/mastodon/pull/14464))
- Fix audio/video player not using `CDN_HOST` on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/14486))
- Fix private boost icon not being used on public pages ([OmmyZhang](https://github.com/tootsuite/mastodon/pull/14471))
- Fix audio player on Safari in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14485), [ThibG](https://github.com/tootsuite/mastodon/pull/14465))
- Fix dereferencing remote statuses not using the correct account for signature when receiving a targeted inbox delivery ([ThibG](https://github.com/tootsuite/mastodon/pull/14656))
- Fix nil error in `tootctl media remove` ([noellabo](https://github.com/tootsuite/mastodon/pull/14657))
- Fix videos with near-60 fps being rejected ([Gargron](https://github.com/tootsuite/mastodon/pull/14684))
- Fix reported statuses not being included in warning e-mail ([Gargron](https://github.com/tootsuite/mastodon/pull/14778))
- Fix `Reject` activities of `Follow` objects not correctly destroying a follow relationship ([ThibG](https://github.com/tootsuite/mastodon/pull/14479))
- Fix inefficiencies in fan-out-on-write service ([Gargron](https://github.com/tootsuite/mastodon/pull/14682), [noellabo](https://github.com/tootsuite/mastodon/pull/14709))
- Fix timeout errors when trying to webfinger some IPv6 configurations ([Gargron](https://github.com/tootsuite/mastodon/pull/14919))
- Fix files served as `application/octet-stream` being rejected without attempting mime type detection ([ThibG](https://github.com/tootsuite/mastodon/pull/14452))
## [3.2.0] - 2020-07-27
### Added

View File

@ -4,7 +4,7 @@ FROM ubuntu:20.04 as build-dep
SHELL ["bash", "-c"]
# Install Node v12 (LTS)
ENV NODE_VER="12.16.3"
ENV NODE_VER="12.20.0"
RUN ARCH= && \
dpkgArch="$(dpkg --print-architecture)" && \
case "${dpkgArch##*-}" in \

View File

@ -44,6 +44,7 @@ gem 'net-ldap', '~> 0.16'
gem 'omniauth-cas', '~> 2.0'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.9'
gem 'omniauth-rails_csrf_protection', '~> 0.1'
gem 'color_diff', '~> 0.1'
gem 'discard', '~> 1.2'

View File

@ -375,6 +375,9 @@ GEM
addressable (~> 2.3)
nokogiri (~> 1.5)
omniauth (~> 1.2)
omniauth-rails_csrf_protection (0.1.2)
actionpack (>= 4.2)
omniauth (>= 1.3.1)
omniauth-saml (1.10.3)
omniauth (~> 1.3, >= 1.3.2)
ruby-saml (~> 1.9)
@ -742,6 +745,7 @@ DEPENDENCIES
oj (~> 3.10)
omniauth (~> 1.9)
omniauth-cas (~> 2.0)
omniauth-rails_csrf_protection (~> 0.1)
omniauth-saml (~> 1.10)
ox (~> 2.13)
paperclip (~> 6.0)

View File

@ -17,6 +17,6 @@ class Api::V1::Accounts::FeaturedTagsController < Api::BaseController
end
def set_featured_tags
@featured_tags = @account.suspended? ? @account.featured_tags : []
@featured_tags = @account.suspended? ? [] : @account.featured_tags
end
end

View File

@ -7,6 +7,13 @@ module ApplicationHelper
follow
).freeze
RTL_LOCALES = %i(
ar
fa
he
ku
).freeze
def active_nav_class(*paths)
paths.any? { |path| current_page?(path) } ? 'active' : ''
end
@ -44,7 +51,7 @@ module ApplicationHelper
end
def locale_direction
if [:ar, :fa, :he].include?(I18n.locale)
if RTL_LOCALES.include?(I18n.locale)
'rtl'
else
'ltr'

View File

@ -1,12 +1,18 @@
import React from 'react';
import PropTypes from 'prop-types';
import 'wicg-inert';
import { normal } from 'color-blend';
export default class ModalRoot extends React.PureComponent {
static propTypes = {
children: PropTypes.node,
onClose: PropTypes.func.isRequired,
backgroundColor: PropTypes.shape({
r: PropTypes.number,
g: PropTypes.number,
b: PropTypes.number,
}),
};
activeElement = this.props.children ? document.activeElement : null;
@ -62,9 +68,7 @@ export default class ModalRoot extends React.PureComponent {
Promise.resolve().then(() => {
this.activeElement.focus({ preventScroll: true });
this.activeElement = null;
}).catch((error) => {
console.error(error);
});
}).catch(console.error);
}
}
@ -91,10 +95,16 @@ export default class ModalRoot extends React.PureComponent {
);
}
let backgroundColor = null;
if (this.props.backgroundColor) {
backgroundColor = normal({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.3 });
}
return (
<div className='modal-root' ref={this.setRef}>
<div style={{ pointerEvents: visible ? 'auto' : 'none' }}>
<div role='presentation' className='modal-root__overlay' onClick={onClose} />
<div role='presentation' className='modal-root__overlay' onClick={onClose} style={{ backgroundColor: backgroundColor ? `rgba(${backgroundColor.r}, ${backgroundColor.g}, ${backgroundColor.b}, 0.7)` : null }} />
<div role='dialog' className='modal-root__container'>{children}</div>
</div>
</div>

View File

@ -193,22 +193,24 @@ class Status extends ImmutablePureComponent {
}
handleOpenVideo = (media, options) => {
this.props.onOpenVideo(media, options);
this.props.onOpenVideo(this._properStatus().get('id'), media, options);
}
handleOpenMedia = (media, index) => {
this.props.onOpenMedia(this._properStatus().get('id'), media, index);
}
handleHotkeyOpenMedia = e => {
const { onOpenMedia, onOpenVideo } = this.props;
const status = this._properStatus();
const statusId = this._properStatus().get('id');
e.preventDefault();
if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {
// TODO: toggle play/paused?
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
onOpenVideo(statusId, status.getIn(['media_attachments', 0]), { startTime: 0 });
} else {
onOpenMedia(status.get('media_attachments'), 0);
onOpenMedia(statusId, status.get('media_attachments'), 0);
}
}
}
@ -416,7 +418,7 @@ class Status extends ImmutablePureComponent {
media={status.get('media_attachments')}
sensitive={status.get('sensitive')}
height={110}
onOpenMedia={this.props.onOpenMedia}
onOpenMedia={this.handleOpenMedia}
cacheWidth={this.props.cacheMediaWidth}
defaultWidth={this.props.cachedMediaWidth}
visible={this.state.showMedia}

View File

@ -30,6 +30,7 @@ export default class MediaContainer extends PureComponent {
media: null,
index: null,
time: null,
backgroundColor: null,
};
handleOpenMedia = (media, index) => {
@ -52,7 +53,16 @@ export default class MediaContainer extends PureComponent {
document.body.classList.remove('with-modals--active');
document.documentElement.style.marginRight = 0;
this.setState({ media: null, index: null, time: null });
this.setState({
media: null,
index: null,
time: null,
backgroundColor: null,
});
}
setBackgroundColor = color => {
this.setState({ backgroundColor: color });
}
render () {
@ -85,13 +95,14 @@ export default class MediaContainer extends PureComponent {
);
})}
<ModalRoot onClose={this.handleCloseMedia}>
<ModalRoot backgroundColor={this.state.backgroundColor} onClose={this.handleCloseMedia}>
{this.state.media && (
<MediaModal
media={this.state.media}
index={this.state.index || 0}
time={this.state.time}
onClose={this.handleCloseMedia}
onChangeBackgroundColor={this.setBackgroundColor}
/>
)}
</ModalRoot>

View File

@ -152,12 +152,12 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
dispatch(mentionCompose(account, router));
},
onOpenMedia (media, index) {
dispatch(openModal('MEDIA', { media, index }));
onOpenMedia (statusId, media, index) {
dispatch(openModal('MEDIA', { statusId, media, index }));
},
onOpenVideo (media, options) {
dispatch(openModal('VIDEO', { media, options }));
onOpenVideo (statusId, media, options) {
dispatch(openModal('VIDEO', { statusId, media, options }));
},
onBlock (status) {

View File

@ -105,15 +105,18 @@ class AccountGallery extends ImmutablePureComponent {
}
handleOpenMedia = attachment => {
const { dispatch } = this.props;
const statusId = attachment.getIn(['status', 'id']);
if (attachment.get('type') === 'video') {
this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } }));
dispatch(openModal('VIDEO', { media: attachment, statusId, options: { autoPlay: true } }));
} else if (attachment.get('type') === 'audio') {
this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } }));
dispatch(openModal('AUDIO', { media: attachment, statusId, options: { autoPlay: true } }));
} else {
const media = attachment.getIn(['status', 'media_attachments']);
const index = media.findIndex(x => x.get('id') === attachment.get('id'));
this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') }));
dispatch(openModal('MEDIA', { media, index, statusId }));
}
}

View File

@ -78,6 +78,18 @@ class ComposeForm extends ImmutablePureComponent {
}
}
getFulltextForCharacterCounting = () => {
return [this.props.spoiler? this.props.spoilerText: '', countableText(this.props.text)].join('');
}
canSubmit = () => {
const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;
const fulltext = this.getFulltextForCharacterCounting();
const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0;
return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > maxChars || (isOnlyWhitespace && !anyMedia));
}
handleSubmit = () => {
if (this.props.text !== this.autosuggestTextarea.textarea.value) {
// Something changed the text inside the textarea (e.g. browser extensions like Grammarly)
@ -85,11 +97,7 @@ class ComposeForm extends ImmutablePureComponent {
this.props.onChange(this.autosuggestTextarea.textarea.value);
}
// Submit disabled:
const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;
const fulltext = [this.props.spoilerText, countableText(this.props.text)].join('');
if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > maxChars || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {
if (!this.canSubmit()) {
return;
}
@ -179,10 +187,8 @@ class ComposeForm extends ImmutablePureComponent {
}
render () {
const { intl, onPaste, showSearch, anyMedia } = this.props;
const { intl, onPaste, showSearch } = this.props;
const disabled = this.props.isSubmitting;
const text = [this.props.spoilerText, countableText(this.props.text)].join('');
const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > maxChars || (text.length !== 0 && text.trim().length === 0 && !anyMedia);
let publishText = '';
if (this.props.privacy === 'private' || this.props.privacy === 'direct') {
@ -244,11 +250,11 @@ class ComposeForm extends ImmutablePureComponent {
<PrivacyDropdownContainer />
<SpoilerButtonContainer />
</div>
<div className='character-counter__wrapper'><CharacterCounter max={maxChars} text={text} /></div>
<div className='character-counter__wrapper'><CharacterCounter max={maxChars} text={this.getFulltextForCharacterCounting()} /></div>
</div>
<div className='compose-form__publish'>
<div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div>
<div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={!this.canSubmit()} block /></div>
</div>
</div>
);

View File

@ -22,6 +22,7 @@ const messages = defineMessages({
favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },
replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
open: { id: 'status.open', defaultMessage: 'Expand this status' },
});
const makeMapStateToProps = () => {
@ -49,11 +50,19 @@ class Footer extends ImmutablePureComponent {
intl: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
askReplyConfirmation: PropTypes.bool,
withOpenButton: PropTypes.bool,
onClose: PropTypes.func,
};
_performReply = () => {
const { dispatch, status } = this.props;
dispatch(replyCompose(status, this.context.router.history));
const { dispatch, status, onClose } = this.props;
const { router } = this.context;
if (onClose) {
onClose();
}
dispatch(replyCompose(status, router.history));
};
handleReplyClick = () => {
@ -97,8 +106,20 @@ class Footer extends ImmutablePureComponent {
}
};
handleOpenClick = e => {
const { router } = this.context;
if (e.button !== 0 || !router) {
return;
}
const { status } = this.props;
router.history.push(`/statuses/${status.get('id')}`);
}
render () {
const { status, intl } = this.props;
const { status, intl, withOpenButton } = this.props;
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';
@ -130,6 +151,7 @@ class Footer extends ImmutablePureComponent {
<IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount />
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} />
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} />
{withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} />}
</div>
);
}

View File

@ -276,22 +276,20 @@ class Status extends ImmutablePureComponent {
}
handleOpenMedia = (media, index) => {
this.props.dispatch(openModal('MEDIA', { media, index }));
this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.get('id'), media, index }));
}
handleOpenVideo = (media, options) => {
this.props.dispatch(openModal('VIDEO', { media, options }));
this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options }));
}
handleHotkeyOpenMedia = e => {
const status = this._properStatus();
const { status } = this.props;
e.preventDefault();
if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {
// TODO: toggle play/paused?
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
} else {
this.handleOpenMedia(status.get('media_attachments'), 0);

View File

@ -4,13 +4,14 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import Video from 'mastodon/features/video';
import classNames from 'classnames';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { defineMessages, injectIntl } from 'react-intl';
import IconButton from 'mastodon/components/icon_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ImageLoader from './image_loader';
import Icon from 'mastodon/components/icon';
import GIFV from 'mastodon/components/gifv';
import { disableSwiping } from 'mastodon/initial_state';
import Footer from 'mastodon/features/picture_in_picture/components/footer';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
@ -20,15 +21,121 @@ const messages = defineMessages({
export const previewState = 'previewMediaModal';
const digitCharacters = [
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'#',
'$',
'%',
'*',
'+',
',',
'-',
'.',
':',
';',
'=',
'?',
'@',
'[',
']',
'^',
'_',
'{',
'|',
'}',
'~',
];
const decode83 = (str) => {
let value = 0;
let c, digit;
for (let i = 0; i < str.length; i++) {
c = str[i];
digit = digitCharacters.indexOf(c);
value = value * 83 + digit;
}
return value;
};
const decodeRGB = int => ({
r: Math.max(0, (int >> 16)),
g: Math.max(0, (int >> 8) & 255),
b: Math.max(0, (int & 255)),
});
export default @injectIntl
class MediaModal extends ImmutablePureComponent {
static propTypes = {
media: ImmutablePropTypes.list.isRequired,
status: ImmutablePropTypes.map,
statusId: PropTypes.string,
index: PropTypes.number.isRequired,
onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
onChangeBackgroundColor: PropTypes.func.isRequired,
};
static contextTypes = {
@ -67,6 +174,7 @@ class MediaModal extends ImmutablePureComponent {
handleChangeIndex = (e) => {
const index = Number(e.currentTarget.getAttribute('data-index'));
this.setState({
index: index % this.props.media.size,
zoomButtonHidden: true,
@ -100,6 +208,25 @@ class MediaModal extends ImmutablePureComponent {
this.props.onClose();
});
}
this._sendBackgroundColor();
}
componentDidUpdate (prevProps, prevState) {
if (prevState.index !== this.state.index) {
this._sendBackgroundColor();
}
}
_sendBackgroundColor () {
const { media, onChangeBackgroundColor } = this.props;
const index = this.getIndex();
const blurhash = media.getIn([index, 'blurhash']);
if (blurhash) {
const backgroundColor = decodeRGB(decode83(blurhash.slice(2, 6)));
onChangeBackgroundColor(backgroundColor);
}
}
componentWillUnmount () {
@ -112,6 +239,8 @@ class MediaModal extends ImmutablePureComponent {
this.context.router.history.goBack();
}
}
this.props.onChangeBackgroundColor(null);
}
getIndex () {
@ -127,30 +256,19 @@ class MediaModal extends ImmutablePureComponent {
handleStatusClick = e => {
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
this.context.router.history.push(`/statuses/${this.props.statusId}`);
}
}
render () {
const { media, status, intl, onClose } = this.props;
const { media, statusId, intl, onClose } = this.props;
const { navigationHidden } = this.state;
const index = this.getIndex();
let pagination = [];
const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>;
const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>;
if (media.size > 1) {
pagination = media.map((item, i) => {
const classes = ['media-modal__button'];
if (i === index) {
classes.push('media-modal__button--active');
}
return (<li className='media-modal__page-dot' key={i}><button tabIndex='0' className={classes.join(' ')} onClick={this.handleChangeIndex} data-index={i}>{i + 1}</button></li>);
});
}
const content = media.map((image) => {
const width = image.getIn(['meta', 'original', 'width']) || null;
const height = image.getIn(['meta', 'original', 'height']) || null;
@ -218,13 +336,19 @@ class MediaModal extends ImmutablePureComponent {
'media-modal__navigation--hidden': navigationHidden,
});
let pagination;
if (media.size > 1) {
pagination = media.map((item, i) => (
<button key={i} className={classNames('media-modal__page-dot', { active: i === index })} data-index={i} onClick={this.handleChangeIndex}>
{i + 1}
</button>
));
}
return (
<div className='modal-root__modal media-modal'>
<div
className='media-modal__closer'
role='presentation'
onClick={onClose}
>
<div className='media-modal__closer' role='presentation' onClick={onClose} >
<ReactSwipeableViews
style={swipeableViewsStyle}
containerStyle={containerStyle}
@ -243,15 +367,10 @@ class MediaModal extends ImmutablePureComponent {
{leftNav}
{rightNav}
{status && (
<div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}>
<a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
<div className='media-modal__overlay'>
{pagination && <ul className='media-modal__pagination'>{pagination}</ul>}
{statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
</div>
)}
<ul className='media-modal__pagination'>
{pagination}
</ul>
</div>
</div>
);

View File

@ -45,6 +45,10 @@ export default class ModalRoot extends React.PureComponent {
onClose: PropTypes.func.isRequired,
};
state = {
backgroundColor: null,
};
getSnapshotBeforeUpdate () {
return { visible: !!this.props.type };
}
@ -59,6 +63,10 @@ export default class ModalRoot extends React.PureComponent {
}
}
setBackgroundColor = color => {
this.setState({ backgroundColor: color });
}
renderLoading = modalId => () => {
return ['MEDIA', 'VIDEO', 'BOOST', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
}
@ -71,13 +79,14 @@ export default class ModalRoot extends React.PureComponent {
render () {
const { type, props, onClose } = this.props;
const { backgroundColor } = this.state;
const visible = !!type;
return (
<Base onClose={onClose}>
<Base backgroundColor={backgroundColor} onClose={onClose}>
{visible && (
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
{(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
{(SpecificComponent) => <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={onClose} />}
</BundleContainer>
)}
</Base>

View File

@ -3,9 +3,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import Video from 'mastodon/features/video';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import Icon from 'mastodon/components/icon';
export const previewState = 'previewVideoModal';
@ -13,7 +10,7 @@ export default class VideoModal extends ImmutablePureComponent {
static propTypes = {
media: ImmutablePropTypes.map.isRequired,
status: ImmutablePropTypes.map,
statusId: PropTypes.string,
options: PropTypes.shape({
startTime: PropTypes.number,
autoPlay: PropTypes.bool,
@ -48,15 +45,8 @@ export default class VideoModal extends ImmutablePureComponent {
}
}
handleStatusClick = e => {
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
}
}
render () {
const { media, status, onClose } = this.props;
const { media, onClose } = this.props;
const options = this.props.options || {};
return (
@ -75,12 +65,6 @@ export default class VideoModal extends ImmutablePureComponent {
alt={media.get('description')}
/>
</div>
{status && (
<div className={classNames('media-modal__meta')}>
<a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
</div>
)}
</div>
);
}

View File

@ -118,7 +118,6 @@ class Video extends React.PureComponent {
deployPictureInPicture: PropTypes.func,
intl: PropTypes.object.isRequired,
blurhash: PropTypes.string,
link: PropTypes.node,
autoPlay: PropTypes.bool,
volume: PropTypes.number,
muted: PropTypes.bool,
@ -534,7 +533,7 @@ class Video extends React.PureComponent {
}
render () {
const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link, editable, blurhash } = this.props;
const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, editable, blurhash } = this.props;
const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
const progress = Math.min((currentTime / duration) * 100, 100);
const playerStyle = {};
@ -648,8 +647,6 @@ class Video extends React.PureComponent {
<span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span>
</span>
)}
{link && <span className='video-player__link'>{link}</span>}
</div>
<div className='video-player__buttons right'>

View File

@ -1,5 +1,5 @@
{
"account.account_note_header": "Note",
"account.account_note_header": "Poznámka",
"account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů",
"account.badges.bot": "Robot",
"account.badges.group": "Skupina",
@ -326,14 +326,14 @@
"notifications.column_settings.reblog": "Boosty:",
"notifications.column_settings.show": "Zobrazit ve sloupci",
"notifications.column_settings.sound": "Přehrát zvuk",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "Nové tooty:",
"notifications.filter.all": "Vše",
"notifications.filter.boosts": "Boosty",
"notifications.filter.favourites": "Oblíbení",
"notifications.filter.follows": "Sledování",
"notifications.filter.mentions": "Zmínky",
"notifications.filter.polls": "Výsledky anket",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.filter.statuses": "Aktuality od lidí, které sledujete",
"notifications.group": "{count} oznámení",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
@ -458,7 +458,7 @@
"upload_form.audio_description": "Popis pro sluchově postižené",
"upload_form.description": "Popis pro zrakově postižené",
"upload_form.edit": "Upravit",
"upload_form.thumbnail": "Change thumbnail",
"upload_form.thumbnail": "Změnit miniaturu",
"upload_form.undo": "Smazat",
"upload_form.video_description": "Popis pro sluchově či zrakově postižené",
"upload_modal.analyzing_picture": "Analyzuji obrázek…",

View File

@ -2388,6 +2388,10 @@
},
{
"descriptors": [
{
"defaultMessage": "Close",
"id": "lightbox.close"
},
{
"defaultMessage": "Never miss a thing",
"id": "notifications_permission_banner.title"
@ -2478,6 +2482,15 @@
],
"path": "app/javascript/mastodon/features/picture_in_picture/components/footer.json"
},
{
"descriptors": [
{
"defaultMessage": "Close",
"id": "lightbox.close"
}
],
"path": "app/javascript/mastodon/features/picture_in_picture/components/header.json"
},
{
"descriptors": [
{

View File

@ -236,7 +236,7 @@
"keyboard_shortcuts.hotkey": "Rapidklavo",
"keyboard_shortcuts.legend": "montri ĉi tiun noton",
"keyboard_shortcuts.local": "malfermi la lokan tempolinion",
"keyboard_shortcuts.mention": "por mencii la aŭtoron",
"keyboard_shortcuts.mention": "mencii la aŭtoron",
"keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj",
"keyboard_shortcuts.my_profile": "malfermi vian profilon",
"keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj",
@ -246,7 +246,7 @@
"keyboard_shortcuts.reply": "respondi",
"keyboard_shortcuts.requests": "malfermi la liston de petoj de sekvado",
"keyboard_shortcuts.search": "enfokusigi la serĉilon",
"keyboard_shortcuts.spoilers": "to show/hide CW field",
"keyboard_shortcuts.spoilers": "montri/kaŝi la kampon de enhava averto",
"keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»",
"keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto",
"keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn",
@ -326,7 +326,7 @@
"notifications.column_settings.reblog": "Diskonigoj:",
"notifications.column_settings.show": "Montri en kolumno",
"notifications.column_settings.sound": "Eligi sonon",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "Novaj mesaĝoj:",
"notifications.filter.all": "Ĉiuj",
"notifications.filter.boosts": "Diskonigoj",
"notifications.filter.favourites": "Stelumoj",

View File

@ -80,7 +80,7 @@
"column_header.pin": "ثابت‌کردن",
"column_header.show_settings": "نمایش تنظیمات",
"column_header.unpin": "رهاکردن",
"column_subheading.settings": "تنظیمات",
"column_subheading.settings": "ساماندهی",
"community.column_settings.local_only": "تنها بومی",
"community.column_settings.media_only": "فقط رسانه",
"community.column_settings.remote_only": "تنها دوردست",

View File

@ -99,7 +99,7 @@
"compose_form.publish": "Pouet",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marquer le média comme sensible",
"compose_form.sensitive.marked": "Média marqué comme sensible",
"compose_form.sensitive.marked": "{count, plural, one {Le média est marqué comme sensible} other {Les médias sont marqués comme sensibles}}",
"compose_form.sensitive.unmarked": "Le média nest pas marqué comme sensible",
"compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
"compose_form.spoiler.unmarked": "Le texte nest pas caché",

View File

@ -73,7 +73,7 @@
"column.notifications": "Notificacións",
"column.pins": "Toots fixados",
"column.public": "Cronoloxía federada",
"column_back_button.label": "Voltar",
"column_back_button.label": "Volver",
"column_header.hide_settings": "Agochar axustes",
"column_header.moveLeft_settings": "Mover columna cara a esquerda",
"column_header.moveRight_settings": "Mover columna cara a dereita",
@ -219,7 +219,7 @@
"introduction.welcome.action": "Imos!",
"introduction.welcome.headline": "Primeiros pasos",
"introduction.welcome.text": "Benvida ó fediverso! Nun intre poderás difundir mensaxes e falar coas túas amizades nun grande número de servidores. Mais este servidor, {domain}, é especial—hospeda o teu perfil, por iso lémbra o seu nome.",
"keyboard_shortcuts.back": "para voltar atrás",
"keyboard_shortcuts.back": "para volver atrás",
"keyboard_shortcuts.blocked": "abrir lista de usuarias bloqueadas",
"keyboard_shortcuts.boost": "promover",
"keyboard_shortcuts.column": "para destacar un toot nunha das columnas",
@ -336,10 +336,10 @@
"notifications.filter.statuses": "Actualizacións de xente á que segues",
"notifications.group": "{count} notificacións",
"notifications.mark_as_read": "Marcar todas as notificacións como lidas",
"notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso.",
"notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso",
"notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente",
"notifications_permission_banner.enable": "Activar notificacións de escritorio",
"notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións crean as notificacións de escritorio a través da {icon} superior unha vez activadas.",
"notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.",
"notifications_permission_banner.title": "Non perder nada",
"picture_in_picture.restore": "Devolver",
"poll.closed": "Pechado",
@ -411,7 +411,7 @@
"status.pinned": "Toot fixado",
"status.read_more": "Ler máis",
"status.reblog": "Promover",
"status.reblog_private": "Compartir á audiencia orixinal",
"status.reblog_private": "Compartir coa audiencia orixinal",
"status.reblogged_by": "{name} promoveu",
"status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.",
"status.redraft": "Eliminar e reescribir",

View File

@ -9,10 +9,10 @@
"account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում",
"account.cancel_follow_request": "չեղարկել հետեւելու հայցը",
"account.direct": "Նամակ գրել @{name} -ին",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար",
"account.domain_blocked": "Տիրոյթը արգելափակուած է",
"account.edit_profile": "Խմբագրել անձնական էջը",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "Ծանուցել ինձ @{name} գրառումների մասին",
"account.endorse": "Ցուցադրել անձնական էջում",
"account.follow": "Հետեւել",
"account.followers": "Հետեւողներ",
@ -168,9 +168,9 @@
"empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։",
"empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։",
"error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։",
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
"error.unexpected_crash.explanation_addons": "Այս էջի ճիշտ պատկերումը չի ստացում։ Խափանումը հաւանաբար առաջացել է դիտարկիչի յավելվածից կամ առցանց թարգմանիչից։",
"error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։",
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։",
"errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
"errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
"follow_request.authorize": "Վավերացնել",
@ -266,9 +266,9 @@
"lists.edit.submit": "Փոխել վերնագիրը",
"lists.new.create": "Ավելացնել ցանկ",
"lists.new.title_placeholder": "Նոր ցանկի վերնագիր",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.all_replies": "Ում հետևում եմ",
"lists.replies_policy.list_replies": "Ցանկի անդամները",
"lists.replies_policy.no_replies": "Ոչ ոք",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Փնտրել քո հետեւած մարդկանց մեջ",
"lists.subheading": "Քո ցանկերը",
@ -277,9 +277,9 @@
"media_gallery.toggle_visible": "Ցուցադրել/թաքցնել",
"missing_indicator.label": "Չգտնվեց",
"missing_indicator.sublabel": "Պաշարը չի գտնւում",
"mute_modal.duration": "Duration",
"mute_modal.duration": "Տևողություն",
"mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
"mute_modal.indefinite": "Indefinite",
"mute_modal.indefinite": "Անժամկետ",
"navigation_bar.apps": "Դիւրակիր յաւելուածներ",
"navigation_bar.blocks": "Արգելափակված օգտատերեր",
"navigation_bar.bookmarks": "Էջանիշեր",
@ -310,7 +310,7 @@
"notification.own_poll": "Հարցումդ աւարտուեց",
"notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։",
"notification.reblog": "{name} տարածեց թութդ",
"notification.status": "{name} just posted",
"notification.status": "{name} հենց նոր թթեց",
"notifications.clear": "Մաքրել ծանուցումները",
"notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։",
"notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ",
@ -326,7 +326,7 @@
"notifications.column_settings.reblog": "Տարածածներից՝",
"notifications.column_settings.show": "Ցուցադրել սիւնում",
"notifications.column_settings.sound": "Ձայն հանել",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "Նոր թթեր։",
"notifications.filter.all": "Բոլորը",
"notifications.filter.boosts": "Տարածածները",
"notifications.filter.favourites": "Հաւանածները",
@ -335,10 +335,10 @@
"notifications.filter.polls": "Հարցման արդիւնքները",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.group": "{count} ծանուցում",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",

View File

@ -338,7 +338,7 @@
"notifications.filter.follows": "フォロー",
"notifications.filter.mentions": "返信",
"notifications.filter.polls": "アンケート結果",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.filter.statuses": "フォローしている人の新着情報",
"notifications.group": "{count} 件の通知",
"notifications.mark_as_read": "すべて既読にする",
"notifications.permission_denied": "ブラウザの通知が拒否されているためデスクトップ通知は利用できません",
@ -362,7 +362,7 @@
"privacy.private.short": "フォロワー限定",
"privacy.public.long": "誰でも閲覧可、公開TLに表示",
"privacy.public.short": "公開",
"privacy.unlisted.long": "誰でも閲覧可、公開タイムラインに非表示",
"privacy.unlisted.long": "誰でも閲覧可、公開TLに非表示",
"privacy.unlisted.short": "未収載",
"refresh": "更新",
"regeneration_indicator.label": "読み込み中…",

View File

@ -14,8 +14,8 @@
"account.edit_profile": "Edit profile",
"account.enable_notifications": "Notify me when @{name} posts",
"account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
"account.follow": "ಹಿಂಬಾಲಿಸಿ",
"account.followers": "ಹಿಂಬಾಲಕರು",
"account.followers.empty": "No one follows this user yet.",
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
@ -32,7 +32,7 @@
"account.mute_notifications": "Mute notifications from @{name}",
"account.muted": "Muted",
"account.never_active": "Never",
"account.posts": "Toots",
"account.posts": "ಟೂಟ್‌ಗಳು",
"account.posts_with_replies": "Toots and replies",
"account.report": "Report @{name}",
"account.requested": "Awaiting approval",
@ -54,7 +54,7 @@
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again",
"bundle_column_error.retry": "ಮರಳಿ ಪ್ರಯತ್ನಿಸಿ",
"bundle_column_error.title": "Network error",
"bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this component.",

View File

@ -258,8 +258,8 @@
"keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania",
"keyboard_shortcuts.up": "aby przejść na górę listy",
"lightbox.close": "Zamknij",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "Zmniejsz pole widoku obrazu",
"lightbox.expand": "Rozwiń pole widoku obrazu",
"lightbox.next": "Następne",
"lightbox.previous": "Poprzednie",
"lightbox.view_context": "Pokaż kontekst",

View File

@ -98,7 +98,7 @@
"compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа",
"compose_form.publish": "Запостить",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Пометить медиафайл как чувствительный",
"compose_form.sensitive.hide": "{count, plural, one {Отметить медифайл как деликатный} other {Отметить медифайлы как деликатные}}",
"compose_form.sensitive.marked": "Медиафайл отмечен как деликатный",
"compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный",
"compose_form.spoiler.marked": "Текст скрыт за предупреждением",

View File

@ -6,18 +6,18 @@
"account.block": "Bloca @{name}",
"account.block_domain": "Bloca domìniu{domain}",
"account.blocked": "Blocadu",
"account.browse_more_on_origin_server": "Browse more on the original profile",
"account.browse_more_on_origin_server": "Esplora de prus in su profilu originale",
"account.cancel_follow_request": "Annulla rechesta de sighidura",
"account.direct": "Messàgiu deretu a @{name}",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.disable_notifications": "Acaba·la de mi notificare cando @{name} publicat carchi cosa",
"account.domain_blocked": "Domìniu blocadu",
"account.edit_profile": "Modìfica profilu",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "Notìfica·mi cando @{name} pùblicat carchi cosa",
"account.endorse": "Cussìgia in su profilu tuo",
"account.follow": "Sighi",
"account.followers": "Sighiduras",
"account.followers.empty": "Nemos sighit ancora custa persone.",
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
"account.followers_counter": "{count, plural, one {{counter} Sighidore} other {{counter} Sighidores}}",
"account.following_counter": "{count, plural, one {{counter} Sighidu} other {{counter} Sighidos}}",
"account.follows.empty": "Custa persone non sighit ancora a nemos.",
"account.follows_you": "Ti sighit",
@ -38,14 +38,14 @@
"account.requested": "Incarca pro annullare sa rechesta de sighidura",
"account.share": "Cumpartzi su profilu de @{name}",
"account.show_reblogs": "Ammustra is cumpartziduras de @{name}",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
"account.statuses_counter": "{count, plural, one {{counter} Tut} other {{counter} Tuts}}",
"account.unblock": "Isbloca @{name}",
"account.unblock_domain": "Isbloca su domìniu {domain}",
"account.unendorse": "Non cussiges in su profilu",
"account.unfollow": "Non sigas prus",
"account.unmute": "Torra a ativare @{name}",
"account.unmute_notifications": "Ativa notìficas pro @{name}",
"account_note.placeholder": "Click to add a note",
"account_note.placeholder": "Incarca pro agiùnghere una nota",
"alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.",
"alert.rate_limited.title": "Màssimu de rechestas barigadu",
"alert.unexpected.message": "B'at àpidu una faddina.",
@ -81,9 +81,9 @@
"column_header.show_settings": "Ammustra is cunfiguratziones",
"column_header.unpin": "Boga dae pitzu",
"column_subheading.settings": "Cunfiguratziones",
"community.column_settings.local_only": "Local only",
"community.column_settings.local_only": "Locale ebbia",
"community.column_settings.media_only": "Multimediale isceti",
"community.column_settings.remote_only": "Remote only",
"community.column_settings.remote_only": "Remotu ebbia",
"compose_form.direct_message_warning": "Custu tut at a èssere imbiadu isceti a is persones mentovadas.",
"compose_form.direct_message_warning_learn_more": "Àteras informatziones",
"compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu.",
@ -113,7 +113,7 @@
"confirmations.delete_list.confirm": "Cantzella",
"confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?",
"confirmations.domain_block.confirm": "Cua totu su domìniu",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.domain_block.message": "Ses seguru a beru, ma a beru a beru, de bòlere blocare su {domain} intreu? In sa parte manna de is casos pagos blocos o silentziamentos de utentes sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Is sighidores tuos dae cussu domìniu ant a èssere bogados.",
"confirmations.logout.confirm": "Essi·nche",
"confirmations.logout.message": "Seguru chi boles essire?",
"confirmations.mute.confirm": "A sa muda",
@ -168,15 +168,15 @@
"empty_column.notifications": "Non tenes ancora peruna notìfica. Chistiona cun una persone pro cumintzare un'arresonada.",
"empty_column.public": "Nudda inoghe. Iscrie calicuna cosa pùblica, o sighi àteras persones de àteros serbidores pro prenare custu ispàtziu",
"error.unexpected_crash.explanation": "A càusa de una faddina in su còdighe nostru o unu problema de cumpatibilidade de su navigadore, custa pàgina diat pòdere no èssere ammustrada in manera curreta.",
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
"error.unexpected_crash.explanation_addons": "Custa pàgina diat pòdere no èssere ammustrada comente si tocat. Custa faddina est probàbile chi dipendat dae un'estensione de su navigadore o dae ainas automàticas de tradutzione.",
"error.unexpected_crash.next_steps": "Proa de atualizare sa pàgina. Si custu non acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.",
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e a atualizare sa pàgina. Si custu non acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.",
"errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete",
"errors.unexpected_crash.report_issue": "Signala unu problema",
"follow_request.authorize": "Autoriza",
"follow_request.reject": "Refuda",
"follow_requests.unlocked_explanation": "Fintzas si su contu tuo no est blocadu, su personale de {domain} at pensadu chi forsis bolias revisionare a manu is rechestas de custos contos.",
"generic.saved": "Saved",
"generic.saved": "Sarvadu",
"getting_started.developers": "Iscuadra de isvilupu",
"getting_started.directory": "Diretòriu de profilos",
"getting_started.documentation": "Documentatzione",
@ -246,7 +246,7 @@
"keyboard_shortcuts.reply": "pro rispòndere",
"keyboard_shortcuts.requests": "pro abèrrere sa lista de rechestas de sighidura",
"keyboard_shortcuts.search": "pro atzentrare sa chirca",
"keyboard_shortcuts.spoilers": "to show/hide CW field",
"keyboard_shortcuts.spoilers": "pro ammustrare/cuare su campu AC",
"keyboard_shortcuts.start": "pro abèrrere sa colunna \"Cumintza\"",
"keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC",
"keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare mèdias",
@ -254,8 +254,8 @@
"keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca",
"keyboard_shortcuts.up": "pro mòere in susu in sa lista",
"lightbox.close": "Serra",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines",
"lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines",
"lightbox.next": "Sighi",
"lightbox.previous": "Pretzedente",
"lightbox.view_context": "Bide su cuntestu",
@ -266,10 +266,10 @@
"lists.edit.submit": "Muda su tìtulu",
"lists.new.create": "Agiunghe lista",
"lists.new.title_placeholder": "Lista noa",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.replies_policy.all_replies": "Cale si siat utente sighidu",
"lists.replies_policy.list_replies": "Membros de sa lista",
"lists.replies_policy.no_replies": "Perunu",
"lists.replies_policy.title": "Ammustra is rispostas a:",
"lists.search": "Chircare intre sa gente chi ses sighende",
"lists.subheading": "Is listas tuas",
"load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}",
@ -279,7 +279,7 @@
"missing_indicator.sublabel": "Resursa no agatada",
"mute_modal.duration": "Duration",
"mute_modal.hide_notifications": "Boles cuare is notìficas de custa persone?",
"mute_modal.indefinite": "Indefinite",
"mute_modal.indefinite": "Indefinida",
"navigation_bar.apps": "Aplicatziones mòbiles",
"navigation_bar.blocks": "Persones blocadas",
"navigation_bar.bookmarks": "Sinnalibros",
@ -310,7 +310,7 @@
"notification.own_poll": "Sondàgiu acabbadu",
"notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu",
"notification.reblog": "{name} at cumpartzidu s'istadu tuo",
"notification.status": "{name} just posted",
"notification.status": "{name} at publicadu cosa",
"notifications.clear": "Lìmpia notìficas",
"notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?",
"notifications.column_settings.alert": "Notìficas de iscrivania",
@ -326,19 +326,19 @@
"notifications.column_settings.reblog": "Cumpartziduras:",
"notifications.column_settings.show": "Ammustra in sa colunna",
"notifications.column_settings.sound": "Reprodue unu sonu",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "Tuts noos:",
"notifications.filter.all": "Totus",
"notifications.filter.boosts": "Cumpartziduras",
"notifications.filter.favourites": "Preferidos",
"notifications.filter.follows": "Sighende",
"notifications.filter.mentions": "Mentovos",
"notifications.filter.polls": "Resurtados dae su sondàgiu",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.filter.statuses": "Agiornamentos dae is persones chi sighis",
"notifications.group": "{count} notìficas",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications.permission_denied": "Is notìficas de iscrivania non sunt a disponimentu pro neghe de rechestas de permissu chi sunt istadas dennegadas in antis",
"notifications.permission_denied_alert": "Is notìficas de iscrivania non podent èssere abilitadas, ca su permissu de su navigadore est istadu dennegadu in antis",
"notifications_permission_banner.enable": "Abìlita is notìficas de iscrivania",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",

View File

@ -154,7 +154,7 @@
"empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.",
"empty_column.bookmarked_statuses": "Henüz yer imine eklediğiniz toot yok. Yer imine eklendiğinde burada görünecek.",
"empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!",
"empty_column.direct": "Henüz doğrudan mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.",
"empty_column.direct": "Henüz direkt mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.",
"empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.",
"empty_column.favourited_statuses": "Hiç favori tootunuz yok. Favori olduğunda burada görünecek.",
"empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.",

View File

@ -18,13 +18,13 @@
"account.followers": "Người theo dõi",
"account.followers.empty": "Chưa có người theo dõi nào.",
"account.followers_counter": "{count, plural, one {{counter} Người theo dõi} other {{counter} Người theo dõi}}",
"account.following_counter": "{count, plural, one {{counter} Đang theo dõi} other {{counter} Đang theo dõi}}",
"account.following_counter": "{count, plural, one {{counter} Theo dõi} other {{counter} Theo dõi}}",
"account.follows.empty": "Người dùng này chưa theo dõi ai.",
"account.follows_you": "Đang theo dõi bạn",
"account.hide_reblogs": "Ẩn chia sẻ từ @{name}",
"account.last_status": "Trực tuyến",
"account.last_status": "Online",
"account.link_verified_on": "Liên kết này đã được xác thực vào {date}",
"account.locked_info": "Người dùng này thiết lập trạng thái ẩn. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.",
"account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.",
"account.media": "Bộ sưu tập",
"account.mention": "Nhắc đến @{name}",
"account.moved_to": "{name} đã dời sang:",
@ -60,7 +60,7 @@
"bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải nội dung này.",
"bundle_modal_error.retry": "Thử lại",
"column.blocks": "Người dùng đã chặn",
"column.bookmarks": "Những tút bạn đã lưu",
"column.bookmarks": "Để dành đọc lại",
"column.community": "Máy chủ của bạn",
"column.direct": "Tin nhắn của bạn",
"column.directory": "Tìm người cùng sở thích",
@ -72,7 +72,7 @@
"column.mutes": "Người dùng đã ẩn",
"column.notifications": "Thông báo",
"column.pins": "Tút ghim",
"column.public": "Từ những máy chủ khác",
"column.public": "Mạng liên hợp",
"column_back_button.label": "Quay lại",
"column_header.hide_settings": "Ẩn bộ lọc",
"column_header.moveLeft_settings": "Dời cột sang bên trái",
@ -99,8 +99,8 @@
"compose_form.publish": "Tút",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Nội dung nhạy cảm",
"compose_form.sensitive.marked": "Nội dung đã đánh dấu nhạy cảm",
"compose_form.sensitive.unmarked": "Nội dung không đánh dấu nhạy cảm",
"compose_form.sensitive.marked": "{count, plural, one {Nội dung đã đánh dấu nhạy cảm} other {Nội dung đã đánh dấu là nhạy cảm}}",
"compose_form.sensitive.unmarked": "{count, plural, one {Nội dung này bình thường} other {Nội dung này bình thường}}",
"compose_form.spoiler.marked": "Hủy nội dung ẩn",
"compose_form.spoiler.unmarked": "Tạo nội dung ẩn",
"compose_form.spoiler_placeholder": "Viết nội dung ẩn của bạn ở đây",
@ -150,7 +150,7 @@
"emoji_button.symbols": "Biểu tượng",
"emoji_button.travel": "Du lịch",
"empty_column.account_timeline": "Chưa có tút nào!",
"empty_column.account_unavailable": "Tài khoản không còn nữa",
"empty_column.account_unavailable": "Tài khoản bị đình chỉ",
"empty_column.blocks": "Bạn chưa chặn bất cứ ai.",
"empty_column.bookmarked_statuses": "Bạn chưa lưu tút nào. Nếu có, nó sẽ hiển thị ở đây.",
"empty_column.community": "Máy chủ của bạn chưa có tút nào công khai. Bạn hãy thử viết gì đó đi!",
@ -159,7 +159,7 @@
"empty_column.favourited_statuses": "Bạn chưa thích tút nào. Hãy thử đi, nó sẽ xuất hiện ở đây.",
"empty_column.favourites": "Chưa có ai thích tút này.",
"empty_column.follow_requests": "Bạn chưa có yêu cầu theo dõi nào.",
"empty_column.hashtag": "Chưa có bài đăng nào sử dụng hashtag này.",
"empty_column.hashtag": "Chưa có bài đăng nào ng hashtag này.",
"empty_column.home": "Chưa có bất cứ gì! Hãy bắt đầu bằng cách tìm kiếm hoặc truy cập {public} để theo dõi những người bạn quan tâm.",
"empty_column.home.public_timeline": "tút công khai",
"empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.",
@ -246,7 +246,7 @@
"keyboard_shortcuts.reply": "trả lời",
"keyboard_shortcuts.requests": "mở danh sách yêu cầu theo dõi",
"keyboard_shortcuts.search": "mở tìm kiếm",
"keyboard_shortcuts.spoilers": "Hiện/ẩn nội dung nhạy cảm",
"keyboard_shortcuts.spoilers": "hiện/ẩn nội dung nhạy cảm",
"keyboard_shortcuts.start": "mở mục \"Dành cho người mới\"",
"keyboard_shortcuts.toggle_hidden": "ẩn/hiện văn bản bên dưới spoil",
"keyboard_shortcuts.toggle_sensitivity": "ẩn/hiện ảnh hoặc video",
@ -273,8 +273,8 @@
"lists.search": "Tìm kiếm những người mà bạn quan tâm",
"lists.subheading": "Danh sách của bạn",
"load_pending": "{count, plural, one {# tút mới} other {# tút mới}}",
"loading_indicator.label": "Chờ xíu...",
"media_gallery.toggle_visible": "Ẩn {number, plural, one {ảnh} other {ảnh}}",
"loading_indicator.label": "Đang tải...",
"media_gallery.toggle_visible": "Ẩn {number, plural, one {hình ảnh} other {hình ảnh}}",
"missing_indicator.label": "Không tìm thấy",
"missing_indicator.sublabel": "Nội dung này không còn tồn tại",
"mute_modal.duration": "Thời hạn",
@ -311,7 +311,7 @@
"notification.poll": "Một cuộc bình chọn mà bạn tham gia đã kết thúc",
"notification.reblog": "{name} chia sẻ tút của bạn",
"notification.status": "{name} vừa đăng",
"notifications.clear": "Làm trống thông báo",
"notifications.clear": "Xóa hết thông báo",
"notifications.clear_confirmation": "Bạn có chắc chắn muốn xóa vĩnh viễn tất cả thông báo của mình?",
"notifications.column_settings.alert": "Thông báo trên máy tính",
"notifications.column_settings.favourite": "Lượt thích:",
@ -371,13 +371,13 @@
"reply_indicator.cancel": "Hủy bỏ",
"report.forward": "Chuyển đến {target}",
"report.forward_hint": "Người dùng này ở máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?",
"report.hint": "Hãy cho quản trị viên biết lý do vì sao bạn báo cáo tài khoản này:",
"report.hint": "Hãy cho quản trị viên biết lý do vì sao bạn báo cáo người dùng này:",
"report.placeholder": "Bổ sung thêm",
"report.submit": "Gửi đi",
"report.target": "Báo cáo {target}",
"search.placeholder": "Tìm kiếm",
"search_popout.search_format": "Gợi ý",
"search_popout.tips.full_text": "Nội dung trả về bao gồm những tút do bạn viết, yêu thích, đã chia sẻ hoặc những tút có nhắc đến bạn. Bạn cũng có thể tìm địa chỉ người dùng, tên hiển thị và hashtag.",
"search_popout.tips.full_text": "Nội dung trả về bao gồm những tút mà bạn đã viết, thích, chia sẻ hoặc những tút có nhắc đến bạn. Bạn cũng có thể tìm địa chỉ người dùng, tên hiển thị và hashtag.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "tút",
"search_popout.tips.text": "Nội dung trả về là địa chỉ người dùng, tên hiển thị và hashtag",
@ -419,14 +419,14 @@
"status.reply": "Trả lời",
"status.replyAll": "Trả lời tất cả",
"status.report": "Báo cáo @{name}",
"status.sensitive_warning": "Nội dung nhạy cảm",
"status.sensitive_warning": "Nhạy cảm",
"status.share": "Chia sẻ",
"status.show_less": "Thu gọn",
"status.show_less_all": "Thu gọn tất cả",
"status.show_less_all": "Thu gọn toàn bộ",
"status.show_more": "Mở rộng",
"status.show_more_all": "Hiển thị tất cả",
"status.show_thread": "Xem thêm",
"status.uncached_media_warning": "N/A",
"status.uncached_media_warning": "Giới hạn",
"status.unmute_conversation": "Quan tâm",
"status.unpin": "Bỏ ghim trên trang cá nhân",
"suggestions.dismiss": "Tắt đề xuất",

View File

@ -1,13 +1,13 @@
{
"account.account_note_header": "Note",
"account.add_or_remove_from_list": "Add or Remove from lists",
"account.badges.bot": "Bot",
"account.account_note_header": "ⵍⵎⴷ ⵓⴳⴳⴰⵔ",
"account.add_or_remove_from_list": "ⵔⵏⵓ ⵏⵖ ⵙⵉⵜⵜⵢ ⵙⴳ ⵜⵍⴳⴰⵎⵜ",
"account.badges.bot": "ⴰⴱⵓⵜ",
"account.badges.group": "ⵜⴰⵔⴰⴱⴱⵓⵜ",
"account.block": "ⴳⴷⵍ @{name}",
"account.block_domain": "Block domain {domain}",
"account.blocked": "Blocked",
"account.blocked": "ⵉⵜⵜⵓⴳⴷⵍ",
"account.browse_more_on_origin_server": "Browse more on the original profile",
"account.cancel_follow_request": "Cancel follow request",
"account.cancel_follow_request": "ⵙⵔ ⵜⵓⵜⵔⴰ ⵓⴹⴼⵕ",
"account.direct": "Direct message @{name}",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.domain_blocked": "Domain blocked",
@ -25,7 +25,7 @@
"account.last_status": "Last active",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
"account.media": "Media",
"account.media": "ⴰⵙⵏⵖⵎⵉⵙ",
"account.mention": "Mention @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}",
@ -70,7 +70,7 @@
"column.home": "ⴰⵙⵏⵓⴱⴳ",
"column.lists": "ⵜⵉⵍⴳⴰⵎⵉⵏ",
"column.mutes": "Muted users",
"column.notifications": "Notifications",
"column.notifications": "ⵜⵉⵏⵖⵎⵉⵙⵉⵏ",
"column.pins": "Pinned toot",
"column.public": "Federated timeline",
"column_back_button.label": "Back",
@ -104,7 +104,7 @@
"compose_form.spoiler.marked": "Text is hidden behind warning",
"compose_form.spoiler.unmarked": "Text is not hidden",
"compose_form.spoiler_placeholder": "Write your warning here",
"confirmation_modal.cancel": "Cancel",
"confirmation_modal.cancel": "ⵙⵔ",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.confirm": "Block",
"confirmations.block.message": "Are you sure you want to block {name}?",
@ -183,7 +183,7 @@
"getting_started.heading": "Getting started",
"getting_started.invite": "Invite people",
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
"getting_started.security": "Security",
"getting_started.security": "ⵜⵉⵙⵖⴰⵍ ⵓⵎⵉⴹⴰⵏ",
"getting_started.terms": "Terms of service",
"hashtag.column_header.tag_mode.all": "and {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}",
@ -311,7 +311,7 @@
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your status",
"notification.status": "{name} just posted",
"notifications.clear": "Clear notifications",
"notifications.clear": "ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
"notifications.column_settings.alert": "Desktop notifications",
"notifications.column_settings.favourite": "Favourites:",

View File

@ -1,6 +1,6 @@
{
"account.account_note_header": "筆記",
"account.add_or_remove_from_list": "從名單中新增或移除",
"account.add_or_remove_from_list": "從列表中新增或移除",
"account.badges.bot": "機械人",
"account.badges.group": "群組",
"account.block": "封鎖 @{name}",
@ -9,10 +9,10 @@
"account.browse_more_on_origin_server": "在該服務器的個人檔案頁上瀏覽更多",
"account.cancel_follow_request": "取消關注請求",
"account.direct": "私訊 @{name}",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.disable_notifications": "如果 @{name} 發文請不要再通知我",
"account.domain_blocked": "服務站被隱藏",
"account.edit_profile": "修改個人資料",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "如果 @{name} 發文請通知我",
"account.endorse": "在個人資料推薦對方",
"account.follow": "關注",
"account.followers": "關注的人",
@ -168,9 +168,9 @@
"empty_column.notifications": "你沒有任何通知紀錄,快向其他用戶搭訕吧。",
"empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。",
"error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。",
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
"error.unexpected_crash.explanation_addons": "此頁面無法被正確顯示,這可能是由於瀏覽器的附加元件或網頁自動翻譯工具造成的。",
"error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。",
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。",
"errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿",
"errors.unexpected_crash.report_issue": "舉報問題",
"follow_request.authorize": "批准",
@ -254,10 +254,10 @@
"keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索",
"keyboard_shortcuts.up": "在列表往上移動",
"lightbox.close": "關閉",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.next": "繼續",
"lightbox.previous": "回退",
"lightbox.compress": "縮小檢視",
"lightbox.expand": "擴大檢視",
"lightbox.next": "下一頁",
"lightbox.previous": "上一頁",
"lightbox.view_context": "檢視內文",
"lists.account.add": "新增到列表",
"lists.account.remove": "從列表刪除",
@ -266,10 +266,10 @@
"lists.edit.submit": "變更標題",
"lists.new.create": "新增列表",
"lists.new.title_placeholder": "新列表標題",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.replies_policy.all_replies": "任何關注的用戶",
"lists.replies_policy.list_replies": "列表中的用戶",
"lists.replies_policy.no_replies": "沒有人",
"lists.replies_policy.title": "顯示回應文章︰",
"lists.search": "從你關注的用戶中搜索",
"lists.subheading": "列表",
"load_pending": "{count, plural, other {# 個新項目}}",
@ -277,9 +277,9 @@
"media_gallery.toggle_visible": "打開或關上",
"missing_indicator.label": "找不到內容",
"missing_indicator.sublabel": "無法找到內容",
"mute_modal.duration": "Duration",
"mute_modal.duration": "時間",
"mute_modal.hide_notifications": "隱藏來自這用戶的通知嗎?",
"mute_modal.indefinite": "Indefinite",
"mute_modal.indefinite": "沒期限",
"navigation_bar.apps": "封鎖的使用者",
"navigation_bar.blocks": "被你封鎖的用戶",
"navigation_bar.bookmarks": "書籤",
@ -310,7 +310,7 @@
"notification.own_poll": "您的投票已結束",
"notification.poll": "您投過的投票已經結束",
"notification.reblog": "{name} 轉推你的文章",
"notification.status": "{name} just posted",
"notification.status": "{name} 剛剛發了嘟文",
"notifications.clear": "清空通知紀錄",
"notifications.clear_confirmation": "你確定要清空通知紀錄嗎?",
"notifications.column_settings.alert": "顯示桌面通知",
@ -326,22 +326,22 @@
"notifications.column_settings.reblog": "轉推你的文章:",
"notifications.column_settings.show": "在通知欄顯示",
"notifications.column_settings.sound": "播放音效",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "新的文章",
"notifications.filter.all": "全部",
"notifications.filter.boosts": "轉嘟",
"notifications.filter.favourites": "最愛",
"notifications.filter.follows": "關注的使用者",
"notifications.filter.mentions": "提及",
"notifications.filter.polls": "投票結果",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.filter.statuses": "已關注的用戶的最新動態",
"notifications.group": "{count} 條通知",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",
"notifications.mark_as_read": "標記所有通知為已讀",
"notifications.permission_denied": "瀏覽器的桌面通知權限設定為拒絕,因此不可以啟用桌面通知",
"notifications.permission_denied_alert": "瀏覽器的桌面通知權限設定為拒絕,因此不可以啟用桌面通知",
"notifications_permission_banner.enable": "啟用桌面通知",
"notifications_permission_banner.how_to_control": "啟用桌面通知可以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。",
"notifications_permission_banner.title": "不放過任何通知",
"picture_in_picture.restore": "還原影片播放器",
"poll.closed": "已關閉",
"poll.refresh": "重新整理",
"poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}",
@ -468,7 +468,7 @@
"upload_modal.detect_text": "從圖片偵測文字",
"upload_modal.edit_media": "編輯媒體",
"upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preparing_ocr": "準備辨識圖片文字…",
"upload_modal.preview_label": "預覽 ({ratio})",
"upload_progress.label": "上載中……",
"video.close": "關閉影片",

View File

@ -254,8 +254,8 @@
"keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點",
"keyboard_shortcuts.up": "往上移動名單項目",
"lightbox.close": "關閉",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "折疊圖片檢視框",
"lightbox.expand": "展開圖片檢視框",
"lightbox.next": "下一步",
"lightbox.previous": "上一步",
"lightbox.view_context": "檢視內文",
@ -280,7 +280,7 @@
"mute_modal.duration": "持續時間",
"mute_modal.hide_notifications": "隱藏來自這位使用者的通知?",
"mute_modal.indefinite": "無期限",
"navigation_bar.apps": "封鎖的使用者",
"navigation_bar.apps": "行動應用程式",
"navigation_bar.blocks": "封鎖使用者",
"navigation_bar.bookmarks": "書籤",
"navigation_bar.community_timeline": "本機時間軸",
@ -335,12 +335,12 @@
"notifications.filter.polls": "投票結果",
"notifications.filter.statuses": "已跟隨使用者的最新動態",
"notifications.group": "{count} 條通知",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"notifications.mark_as_read": "將所有通知都標記為已讀",
"notifications.permission_denied": "由於之前拒絕了瀏覽器請求,因此桌面通知不可用",
"notifications.permission_denied_alert": "因為之前瀏覽器權限被拒絕,無法啟用桌面通知",
"notifications_permission_banner.enable": "啟用桌面通知",
"notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。",
"notifications_permission_banner.title": "不要錯過任何東西!",
"picture_in_picture.restore": "還原",
"poll.closed": "已關閉",
"poll.refresh": "重新整理",

File diff suppressed because one or more lines are too long

View File

@ -1652,11 +1652,11 @@ a.account__display-name {
}
}
.star-icon.active {
.icon-button.star-icon.active {
color: $gold-star;
}
.bookmark-icon.active {
.icon-button.bookmark-icon.active {
color: $red-bookmark;
}
@ -3007,7 +3007,6 @@ button.icon-button i.fa-retweet {
&::before {
display: none !important;
}
}
button.icon-button.active i.fa-retweet {
@ -4487,16 +4486,19 @@ a.status-card.compact:hover {
height: 100%;
position: relative;
.extended-video-player {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
&__close,
&__zoom-button {
color: rgba($white, 0.7);
video {
max-width: $media-modal-media-max-width;
max-height: $media-modal-media-max-height;
&:hover,
&:focus,
&:active {
color: $white;
background-color: rgba($white, 0.15);
}
&:focus {
background-color: rgba($white, 0.3);
}
}
}
@ -4533,10 +4535,10 @@ a.status-card.compact:hover {
}
.media-modal__nav {
background: rgba($base-overlay-background, 0.5);
background: transparent;
box-sizing: border-box;
border: 0;
color: $primary-text-color;
color: rgba($primary-text-color, 0.7);
cursor: pointer;
display: flex;
align-items: center;
@ -4547,6 +4549,12 @@ a.status-card.compact:hover {
position: absolute;
top: 0;
bottom: 0;
&:hover,
&:focus,
&:active {
color: $primary-text-color;
}
}
.media-modal__nav--left {
@ -4557,58 +4565,86 @@ a.status-card.compact:hover {
right: 0;
}
.media-modal__pagination {
width: 100%;
text-align: center;
.media-modal__overlay {
max-width: 600px;
position: absolute;
left: 0;
bottom: 20px;
pointer-events: none;
}
right: 0;
bottom: 0;
margin: 0 auto;
.media-modal__meta {
text-align: center;
position: absolute;
left: 0;
bottom: 20px;
width: 100%;
pointer-events: none;
.picture-in-picture__footer {
border-radius: 0;
background: transparent;
padding: 20px 0;
&--shifted {
bottom: 62px;
}
a {
pointer-events: auto;
text-decoration: none;
font-weight: 500;
color: $ui-secondary-color;
.icon-button {
color: $white;
&:hover,
&:focus,
&:active {
text-decoration: underline;
color: $white;
background-color: rgba($white, 0.15);
}
&:focus {
background-color: rgba($white, 0.3);
}
&.active {
color: $highlight-text-color;
&:hover,
&:focus,
&:active {
background: rgba($highlight-text-color, 0.15);
}
&:focus {
background: rgba($highlight-text-color, 0.3);
}
}
&.star-icon.active {
color: $gold-star;
&:hover,
&:focus,
&:active {
background: rgba($gold-star, 0.15);
}
&:focus {
background: rgba($gold-star, 0.3);
}
}
}
}
}
.media-modal__pagination {
display: flex;
justify-content: center;
margin-bottom: 20px;
}
.media-modal__page-dot {
display: inline-block;
}
.media-modal__button {
background-color: $primary-text-color;
height: 12px;
width: 12px;
border-radius: 6px;
margin: 10px;
flex: 0 0 auto;
background-color: $white;
opacity: 0.4;
height: 6px;
width: 6px;
border-radius: 50%;
margin: 0 4px;
padding: 0;
border: 0;
font-size: 0;
}
transition: opacity .2s ease-in-out;
.media-modal__button--active {
background-color: $highlight-text-color;
&.active {
opacity: 1;
}
}
.media-modal__close {

View File

@ -0,0 +1,52 @@
# frozen_string_literal: true
class StatusReachFinder
def initialize(status)
@status = status
end
def inboxes
Account.where(id: reached_account_ids).inboxes
end
private
def reached_account_ids
[
replied_to_account_id,
reblog_of_account_id,
mentioned_account_ids,
reblogs_account_ids,
favourites_account_ids,
replies_account_ids,
].tap do |arr|
arr.flatten!
arr.compact!
arr.uniq!
end
end
def replied_to_account_id
@status.in_reply_to_account_id
end
def reblog_of_account_id
@status.reblog.account_id if @status.reblog?
end
def mentioned_account_ids
@status.mentions.pluck(:account_id)
end
def reblogs_account_ids
@status.reblogs.pluck(:account_id)
end
def favourites_account_ids
@status.favourites.pluck(:account_id)
end
def replies_account_ids
@status.replies.pluck(:account_id)
end
end

View File

@ -15,7 +15,7 @@ module AccountMerging
Status, StatusPin, MediaAttachment, Poll, Report, Tombstone, Favourite,
Follow, FollowRequest, Block, Mute, AccountIdentityProof,
AccountModerationNote, AccountPin, AccountStat, ListAccount,
PollVote, Mention
PollVote, Mention, AccountDeletionRequest, AccountNote
]
owned_classes.each do |klass|
@ -28,7 +28,10 @@ module AccountMerging
end
end
target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin]
target_classes = [
Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin,
AccountNote
]
target_classes.each do |klass|
klass.where(target_account_id: other_account.id).find_each do |record|
@ -39,5 +42,10 @@ module AccountMerging
end
end
end
# Some follow relationships have moved, so the cache is stale
Rails.cache.delete_matched("followers_hash:#{id}:*")
Rails.cache.delete_matched("relationships:#{id}:*")
Rails.cache.delete_matched("relationships:*:#{id}")
end
end

View File

@ -14,40 +14,43 @@ class RemoveStatusService < BaseService
@payload = Oj.dump(event: :delete, payload: status.id.to_s)
@status = status
@account = status.account
@tags = status.tags.pluck(:name).to_a
@mentions = status.active_mentions.includes(:account).to_a
@reblogs = status.reblogs.includes(:account).to_a
@options = options
RedisLock.acquire(lock_options) do |lock|
if lock.acquired?
remove_from_self if status.account.local?
remove_from_self if @account.local?
remove_from_followers
remove_from_lists
remove_from_affected
remove_reblogs
remove_from_hashtags
remove_from_public
remove_from_media if status.media_attachments.any?
remove_from_direct if status.direct_visibility?
remove_from_spam_check
remove_media
@status.destroy! if @options[:immediate] || !@status.reported?
else
raise Mastodon::RaceConditionError
end
end
# There is no reason to send out Undo activities when the
# cause is that the original object has been removed, since
# original object being removed implicitly removes reblogs
# of it. The Delete activity of the original is forwarded
# separately.
return if !@account.local? || @options[:original_removed]
if @account.local? && !@options[:original_removed]
remove_from_remote_followers
remove_from_remote_affected
remove_from_remote_reach
end
# Since reblogs don't mention anyone, don't get reblogged,
# favourited and don't contain their own media attachments
# or hashtags, this can be skipped
unless @status.reblog?
remove_from_mentions
remove_reblogs
remove_from_hashtags
remove_from_public
remove_from_media if @status.media_attachments.any?
remove_from_direct if status.direct_visibility?
remove_from_spam_check
remove_media
end
@status.destroy! if @options[:immediate] || !@status.reported?
else
raise Mastodon::RaceConditionError
end
end
end
private
@ -69,31 +72,35 @@ class RemoveStatusService < BaseService
end
end
def remove_from_affected
@mentions.map(&:account).select(&:local?).each do |account|
redis.publish("timeline:#{account.id}", @payload)
def remove_from_mentions
# For limited visibility statuses, the mentions that determine
# who receives them in their home feed are a subset of followers
# and therefore the delete is already handled by sending it to all
# followers. Here we send a delete to actively mentioned accounts
# that may not follow the account
@status.active_mentions.find_each do |mention|
redis.publish("timeline:#{mention.account_id}", @payload)
end
end
def remove_from_remote_affected
def remove_from_remote_reach
return if @status.reblog?
# People who got mentioned in the status, or who
# reblogged it from someone else might not follow
# the author and wouldn't normally receive the
# delete notification - so here, we explicitly
# send it to them
target_accounts = (@mentions.map(&:account).reject(&:local?) + @reblogs.map(&:account).reject(&:local?))
target_accounts << @status.reblog.account if @status.reblog? && !@status.reblog.account.local?
target_accounts.uniq!(&:id)
status_reach_finder = StatusReachFinder.new(@status)
# ActivityPub
ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:preferred_inbox_url)) do |target_account|
[signed_activity_json, @account.id, target_account.preferred_inbox_url]
ActivityPub::DeliveryWorker.push_bulk(status_reach_finder.inboxes) do |inbox_url|
[signed_activity_json, @account.id, inbox_url]
end
end
def remove_from_remote_followers
# ActivityPub
ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url|
[signed_activity_json, @account.id, inbox_url]
end
@ -120,19 +127,19 @@ class RemoveStatusService < BaseService
# because once original status is gone, reblogs will disappear
# without us being able to do all the fancy stuff
@reblogs.each do |reblog|
@status.reblogs.includes(:account).find_each do |reblog|
RemoveStatusService.new.call(reblog, original_removed: true)
end
end
def remove_from_hashtags
@account.featured_tags.where(tag_id: @status.tags.pluck(:id)).each do |featured_tag|
@account.featured_tags.where(tag_id: @status.tags.map(&:id)).each do |featured_tag|
featured_tag.decrement(@status.id)
end
return unless @status.public_visibility?
@tags.each do |hashtag|
@status.tags.map(&:name).each do |hashtag|
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", @payload)
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", @payload) if @status.local?
end
@ -142,22 +149,14 @@ class RemoveStatusService < BaseService
return unless @status.public_visibility?
redis.publish('timeline:public', @payload)
if @status.local?
redis.publish('timeline:public:local', @payload)
else
redis.publish('timeline:public:remote', @payload)
end
redis.publish(@status.local? ? 'timeline:public:local' : 'timeline:public:remote', @payload)
end
def remove_from_media
return unless @status.public_visibility?
redis.publish('timeline:public:media', @payload)
if @status.local?
redis.publish('timeline:public:local:media', @payload)
else
redis.publish('timeline:public:remote:media', @payload)
end
redis.publish(@status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', @payload)
end
def remove_from_direct

View File

@ -22,7 +22,6 @@
.actions
- resource_class.omniauth_providers.each do |provider|
= link_to omniauth_authorize_path(resource_name, provider), class: "button button-#{provider}" do
= t("auth.providers.#{provider}", default: provider.to_s.chomp("_oauth2").capitalize)
= link_to t("auth.providers.#{provider}", default: provider.to_s.chomp("_oauth2").capitalize), omniauth_authorize_path(resource_name, provider), class: "button button-#{provider}", method: :post
.form-footer= render 'auth/shared/links'

View File

@ -1,3 +1,6 @@
:ruby
hide_show_thread ||= false
.status{ class: "status-#{status.visibility}" }
.status__info
= link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__relative-time u-url u-uid', target: stream_link_target, rel: 'noopener noreferrer' do
@ -47,7 +50,7 @@
- elsif status.preview_card
= react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json
- if !status.in_reply_to_id.nil? && status.in_reply_to_account_id == status.account.id
- if !status.in_reply_to_id.nil? && status.in_reply_to_account_id == status.account.id && !hide_show_thread
= link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__content__read-more-button', target: stream_link_target, rel: 'noopener noreferrer' do
= t 'statuses.show_thread'

View File

@ -39,7 +39,7 @@
%span
= t('stream_entries.pinned')
= render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, autoplay: autoplay
= render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, autoplay: autoplay, hide_show_thread: is_predecessor || is_successor
- if include_threads
- if @since_descendant_thread_id

View File

@ -1 +1,17 @@
--- {}
---
ku:
activerecord:
attributes:
poll:
expires_at: وادەی کۆتایی
options: هەڵبژاردنەکان
errors:
models:
account:
attributes:
username:
invalid: تەنها پیت، ژمارە و ژێرەوە
status:
attributes:
reblog:
taken: لە بار بوونی هەیە

View File

@ -842,6 +842,7 @@ ca:
request: Sol·licita el teu arxiu
size: Mida
blocks: Persones que has blocat
bookmarks: Marcadors
csv: CSV
domain_blocks: Bloquejos de dominis
lists: Llistes
@ -918,6 +919,7 @@ ca:
success: Les dades s'han rebut correctament i es processaran en breu
types:
blocking: Llista de blocats
bookmarks: Marcadors
domain_blocking: Llistat de dominis bloquejats
following: Llista de seguits
muting: Llista de silenciats
@ -1074,6 +1076,7 @@ ca:
relationships:
activity: Activitat del compte
dormant: Inactiu
follow_selected_followers: Segueix als seguidors seleccionats
followers: Seguidors
following: Seguint
invited: Convidat

View File

@ -1074,6 +1074,7 @@ co:
relationships:
activity: Attività di u contu
dormant: Inattivu
follow_selected_followers: Abbunassi à l'abbunati selezziunati
followers: Abbunati
following: Abbunamenti
invited: Invitatu

View File

@ -754,6 +754,7 @@ da:
request: Anmod om dit arkiv
size: Størrelse
blocks: Du blokerer
bookmarks: Bogmærker
csv: CSV
domain_blocks: Domæne blokeringer
lists: Lister
@ -816,6 +817,7 @@ da:
success: Dine data blev succesfuldt uploaded og vil nu blive behandlet hurtigst muligt
types:
blocking: Blokeringsliste
bookmarks: Bogmærker
domain_blocking: Domæne blokeringsliste
following: Følgningsliste
muting: Liste over dæmpninger
@ -941,6 +943,7 @@ da:
unrecognized_emoji: er ikke en genkendt emoji
relationships:
activity: Aktivitet for konto
follow_selected_followers: Følg valgte følgere
followers: Følgere
following: Følger
invited: Inviteret

View File

@ -842,6 +842,7 @@ de:
request: Dein Archiv anfragen
size: Größe
blocks: Du hast blockiert
bookmarks: Lesezeichen
csv: CSV
domain_blocks: Domainblockaden
lists: Listen
@ -918,6 +919,7 @@ de:
success: Deine Daten wurden erfolgreich hochgeladen und werden in Kürze verarbeitet
types:
blocking: Blockierliste
bookmarks: Lesezeichen
domain_blocking: Domain-Blockliste
following: Folgeliste
muting: Stummschaltungsliste
@ -1074,6 +1076,7 @@ de:
relationships:
activity: Kontoaktivität
dormant: Inaktiv
follow_selected_followers: Ausgewählte Follower folgen
followers: Folgende
following: Folgt
invited: Eingeladen

View File

@ -60,6 +60,19 @@ cs:
title: Záložní kódy pro 2FA změněny
unlock_instructions:
subject: 'Mastodon: Instrukce pro odemčení účtu'
webauthn_credential:
added:
explanation: Následující bezpečnostní klíč byl přidán k vašemu účtu
subject: 'Mastodon: Nový bezpečnostní klíč'
title: Byl přidán nový bezpečnostní klíč
deleted:
explanation: Následující bezpečnostní klíč byl odstraněn z vašeho účtu
subject: 'Mastodon: Bezpečnostní klíč byl smazán'
title: Jeden z vašich bezpečnostních klíčů byl smazán
webauthn_disabled:
title: Bezpečnostní klíče zakázány
webauthn_enabled:
title: Bezpečnostní klíče povoleny
omniauth_callbacks:
failure: Nelze vás ověřit z %{kind}, protože „%{reason}“.
success: Úspěšně ověřeno z účtu %{kind}.

View File

@ -1 +1,115 @@
--- {}
---
es:
devise:
confirmations:
confirmed: Su direccion de email ha sido confirmada con exito.
send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
send_paranoid_instructions: Si su dirección de correo electrónico existe en nuestra base de datos, recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos.
failure:
already_authenticated: Usted ya está registrado.
inactive: Su cuenta todavía no está activa.
invalid: Inválido %{authentication_keys} o contraseña.
last_attempt: Tiene un intento más antes de que su cuenta sea bloqueada.
locked: Su cuenta está bloqueada.
not_found_in_database: Inválido %{authentication_keys} o contraseña.
pending: Su cuenta aun se encuentra bajo revisión.
timeout: Su sesión ha expirado. Por favor inicie sesión de nuevo para continuar.
unauthenticated: Necesita iniciar sesión o registrarse antes de continuar.
unconfirmed: Tiene que confirmar su dirección de correo electrónico antes de continuar.
mailer:
confirmation_instructions:
action: Verificar dirección de correo electrónico
action_with_app: Confirmar y regresar a %{app}
explanation: Has creado una cuenta en %{host} con esta dirección de correo electrónico. Estas a un clic de activarla. Si no fue usted, por favor ignore este correo electrónico.
explanation_when_pending: Usted ha solicitado una invitación a %{host} con esta dirección de correo electrónico. Una vez que confirme su dirección de correo electrónico, revisaremos su aplicación. No puede iniciar sesión hasta que su aplicación sea revisada. Si su solicitud está rechazada, sus datos serán eliminados, así que no será necesaria ninguna acción adicional por ti. Si no fuera usted, por favor ignore este correo electrónico.
extra_html: Por favor revise <a href="%{terms_path}">las reglas de la instancia</a> y <a href="%{policy_path}">nuestros términos de servicio</a>.
subject: 'Mastodon: Instrucciones de confirmación para %{instance}'
title: Verificar dirección de correo electrónico
email_changed:
explanation: 'El correo electrónico para su cuenta esta siendo cambiada a:'
extra: Si usted no ha cambiado su correo electrónico, es probable que alguien haya conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte al administrador de la instancia si usted no puede iniciar sesión.
subject: 'Mastodon: Correo electrónico cambiado'
title: Nueva dirección de correo electrónico
password_change:
explanation: La contraseña de su cuenta a sido cambiada.
extra: Si usted no a cambiado su contraseña. es probable que alguien a conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte a el administrador de la instancia si usted esta bloqueado de su cuenta.
subject: 'Mastodon: Contraseña cambiada'
title: Contraseña cambiada
reconfirmation_instructions:
explanation: Confirme la nueva dirección para cambiar su coreo electrónico.
extra: Si no iniciaste este cambio, por favor ignora este correo. Esta dirección de correo para la cuenta de Mastodon no cambiará hasta que accedas al vinculo arriba.
subject: 'Mastodon: Confirme correo electrónico para %{instance}'
title: Verifique dirección de correo electrónico
reset_password_instructions:
action: Cambiar contraseña
explanation: Solicitaste una nueva contraseña para tu cuenta.
extra: Si no solicitaste esto, por favor ignora este correo. Tu contraseña no cambiará hasta que tu accedas al vinculo arriba y crees una nueva.
subject: 'Mastodon: Instrucciones para reiniciar contraseña'
title: Reiniciar contraseña
two_factor_disabled:
explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña.
subject: 'Mastodon: La autenticación de dos factores está deshabilitada'
title: 2FA desactivada
two_factor_enabled:
explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar.
subject: 'Mastodon: La autenticación de dos factores está habilitada'
title: 2FA activada
two_factor_recovery_codes_changed:
explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos.
subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados'
title: Códigos de recuperación 2FA cambiados
unlock_instructions:
subject: 'Mastodon: Instrucciones para desbloquear'
webauthn_credential:
added:
explanation: La siguiente clave de seguridad ha sido añadida a su cuenta
subject: 'Mastodon: Nueva clave de seguridad'
title: Se agregó una nueva clave de seguridad
deleted:
explanation: La siguiente clave de seguridad ha sido eliminada de su cuenta
subject: 'Mastodon: Clave de seguridad eliminada'
title: Una de sus claves de seguridad ha sido eliminada
webauthn_disabled:
explanation: La autenticación con claves de seguridad ha sido desactivada para tu cuenta. El inicio de sesión es ahora posible únicamente utilizando el token generado por la aplicación emparejada TOTP.
subject: 'Mastodon: Autenticación con claves de seguridad desactivada'
title: Claves de seguridad desactivadas
webauthn_enabled:
explanation: La autenticación con clave de seguridad ha sido habilitada para su cuenta. Su clave de seguridad ahora puede ser usada para iniciar sesión.
subject: 'Mastodon: Autenticación con clave de seguridad activada'
title: Claves de seguridad activadas
omniauth_callbacks:
failure: No podemos autentificarle desde %{kind} debido a "%{reason}".
success: Autentificado con éxito desde la cuenta %{kind} .
passwords:
no_token: No puede acceder a esta página sin provenir desde el correo de reinicio de contraseña. Si viene desde el correo de reinicio de contraseña, por favor asegúrese que está utilizando la dirección completa proporcionada.
send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo reiniciar su contraseña en pocos minutos.
send_paranoid_instructions: Si su correo electrónico existe en nuestra base de datos, recibirá un enlace de recuperación de contraseña en su dirección de correo en pocos minutos.
updated: Su contraseña ha sido cambiada con éxito. Ahora ya está registrado.
updated_not_active: Su contraseña ha sido cambiada con éxito.
registrations:
destroyed: "¡Adios! Su cuenta ha sido cancelada con éxito. Esperamos verle pronto de nuevo."
signed_up: "¡Bienvenido! Se ha registrado con éxito."
signed_up_but_inactive: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta no ha sido activada todavía.
signed_up_but_locked: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta está bloqueada.
signed_up_but_pending: Un mensaje con un enlace de confirmacion ha sido enviado a su direccion de email. Luego de clickear el link revisaremos su aplicacion. Seras notificado si es aprovada.
signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a su correo electrónico. Por favor siga el enlace para activar su cuenta.
update_needs_confirmation: Ha actualizado su cuenta con éxito, pero necesitamos verificar su nueva dirección de correo. Por favor compruebe su correo y siga el enlace para confirmar su nueva dirección de correo.
updated: su cuenta ha sido actualizada con éxito.
sessions:
already_signed_out: Cerró sesión con éxito.
signed_in: Se registró con éxito.
signed_out: Cerró sesión con éxito.
unlocks:
send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo desbloquear su cuenta en pocos minutos.
send_paranoid_instructions: Si su cuenta existe, recibirá un correo electrónico con instrucciones sobre cómo desbloquearla en pocos minutos.
unlocked: Su cuenta ha sido desbloqueada con éxito. Por favor inicie sesión para continuar.
errors:
messages:
already_confirmed: ya fue confirmado, por favor intente iniciar sesión
confirmation_period_expired: necesita ser confirmado dentro de %{period}, por favor pida una nueva
expired: ha expirado, por favor pida una nueva
not_found: no encontrado
not_locked: no fue bloqueada
not_saved:
one: '1 error prohibió este %{resource} de ser guardado:'
other: "%{count} errores prohibieron este %{resource} de ser guardado:"

View File

@ -19,7 +19,7 @@ gl:
mailer:
confirmation_instructions:
action: Verificar o enderezo de email
action_with_app: Confirmar e voltar a %{app}
action_with_app: Confirmar e volver a %{app}
explanation: Creaches unha conta en %{host} con este enderezo de email. Estás a un clic de activala. Se non foches ti o que fixeches este rexisto, por favor ignora esta mensaxe.
explanation_when_pending: Solicitaches un convite para %{host} con este enderezo de email. Logo de que confirmes o teu enderezo de email, imos revisar a túa inscrición. Podes iniciar sesión para mudar os teus datos ou eliminar a túa conta, mais non poderás aceder á meirande parte das funcións até que a túa conta sexa aprobada. Se a túa inscrición for rexeitada, os teus datos serán eliminados, polo que non será necesaria calquera acción adicional da túa parte. Se non solicitaches este convite, por favor, ignora este correo.
extra_html: Por favor, le <a href="%{terms_path}">as regras do servidor</a> e os <a href="%{policy_path}">nosos termos do servizo</a>.

View File

@ -76,7 +76,7 @@ ja:
webauthn_enabled:
explanation: あなたのアカウントでセキュリティキー認証が有効になりました。セキュリティキーをログインに使用できるようになりました。
subject: 'Mastodon: セキュリティキー認証が有効になりました'
title: セキュリティキーは効になっています
title: セキュリティキーは効になっています
omniauth_callbacks:
failure: "%{reason}によって%{kind}からのアクセスを認証できませんでした。"
success: "%{kind}からのアクセスは正常に認証されました。"

View File

@ -1 +1,115 @@
--- {}
---
ku:
devise:
confirmations:
confirmed: ناونیشانی ئیمەیڵەکەت بە سەرکەوتوویی پشتڕاستکرایەوە.
send_instructions: ئیمەیڵێکت بۆ دەنێردرێت لەگەڵ ڕێنمایی بۆ چۆنیەتی دڵنیابوون لە ناونیشانی ئیمەیلەکەت لە چەند خولەکێکدا. تکایە بوخچەی سپامەکەت چاولێبکە ئەگەر ئەم ئیمەیڵەت پێنەدرا.
send_paranoid_instructions: ئەگەر ناونیشانی ئیمەیڵەکەت لە بنکەی زانیارێکانماندا هەبێت، ئیمەیڵێکت پێدەگات لەگەڵ ڕێنماییەکانی چۆنیەتی دڵنیابوون لە ناونیشانی ئیمەیلەکەت لە چەند خولەکێکدا. تکایە بۆخچەی سپامەکەت بپشکنە ئەگەر ئەم ئیمەیڵەت پێنەدرا.
failure:
already_authenticated: تۆ پێشتر چوونە ژوورەوەت کردووە.
inactive: هەژمارەکەت هێشتا کارا نەکراوە.
invalid: "%{authentication_keys} یان نهێنوشە نادروستە."
last_attempt: تۆ یەک هەوڵیدیکەت ماوە پێش ئەوەی ئەژمێرەکەت قوفڵ بێت.
locked: هەژمارەکت داخراوە.
not_found_in_database: "%{authentication_keys} یان نهێنوشە نادروستە."
pending: هەژمێرەکەت هێشتا لەژێر پێداچوونەوەدایە.
timeout: کۆبوونەوەکەت بەسەرچووە. تکایە دووبارە بچۆ ژوورەوە بۆ بەردەوام بوون.
unauthenticated: پێویستە بچیتە ژوورەوە یان بچیتە ناو چوونە ناو پێش بەردەوام بوون.
unconfirmed: دەبێت ناونیشانی ئیمەیڵەکەت پشتڕاست بکەیتەوە پێش بەردەوام بوون.
mailer:
confirmation_instructions:
action: ناونیشانی ئیمەیڵ ساخ بکەرەوە
action_with_app: پشتڕاستی بکەوە و بگەڕێوە بۆ %{app}
explanation: ئەژمێرێکت دروست کردووە لەسەر %{host} بەم ناونیشانی ئیمەیڵە. تۆ یەک کرتە دووریت لە کاراکردنی. ئەگەر ئەمە تۆ نەبووی، تکایە ئەم ئیمەیڵە فەرامۆش بکە.
explanation_when_pending: تۆ داوای بانگهێشتت کرد بۆ %{host} بەم ناونیشانی ئیمەیڵە. هەر کە دڵنیایی لە ناونیشانی ئیمەیڵەکەت دەکەیت، ئێمە پێداچوونەوە دەکەین بە بەرنامەکەتدا. دەتوانیت بچیت بۆ چوونە ژوورەوە بۆ گۆڕینی ووردەکاریەکانت یان سڕینەوەی هەژمارەکەت، بەڵام ناتوانیت دەستگەیشتنت هەبێت بە زۆربەی ئەرکەکان تا ئەژمێرەکەت پەسەند ناکرێت. ئەگەر کاربەرنامەکەت ڕەتکرایەوە، داتاکەت لادەبرێت، بۆیە پێویست بە کاری زیاتر لە تۆ ناکرێت. ئەگەر ئەمە تۆ نەبووی، تکایە ئەم ئیمەیڵە فەرامۆش بکە.
extra_html: تکایە تێڕوانە لە <a href="%{terms_path}"> ڕێساکانی ڕاژەکار</a> و <a href="%{policy_path}"> مەرجەکانی خزمەتگوزاری</a>.
subject: 'ماستۆدۆن: ڕێنماییەکانی پشتڕاستکردنەوە بۆ %{instance}'
title: ناونیشانی ئیمەیڵ ساخ بکەرەوە
email_changed:
explanation: 'ناونیشانی ئیمەیڵەکەی ئەژمێرەکەت دەگۆڕدرێت بۆ:'
extra: ئەگەر ئیمەیلەکەت نەگۆڕیت، لەوانەیە کەسێک دەستگەیشتنی بۆ هەژمارەکەت بەدەست بێت. تکایە تێپەڕوشەکەت بگۆڕە دەستبەجێ یان پەیوەندی بکە بە بەڕێوەبەری ڕاژەوە ئەگەر تۆ لە هەژمارەکەت داخرایت.
subject: 'ماستۆدۆن: ئیمەیڵ گۆڕا'
title: ناونیشانی ئیمەیڵی نوێ
password_change:
explanation: تێپەڕوشە بۆ هەژمارەکەت گۆڕاوە.
extra: ئەگەر تێپەڕوشەکەت نەگۆڕی، وا دیارە کەسێک دەستگەیشتنی بۆ هەژمارەکەت بەدەست بێت. تکایە تێپەڕوسيکەت بگۆڕە دەستبەجێ یان پەیوەندی بکە بە بەڕێوەبەری ڕاژە ئەگەر تۆ لە هەژمارەکەت داخرایت.
subject: 'ماستۆدۆن: تێپەڕوشە گۆڕدرا'
title: تێپەڕوشە گۆڕدرا
reconfirmation_instructions:
explanation: دڵنیابوون لە ناونیشانی نوێ بۆ گۆڕینی ئیمەیڵەکەت.
extra: ئەگەر ئەم گۆڕانکاریە لەلایەن تۆوە دەست پێنەکراوە، تکایە ئەم ئیمەیڵە فەرامۆش بکە. ناونیشانی ئیمەیڵ بۆ هەژمێری ماستۆدۆن ناگۆڕێ هەتا ئەو کاتەی دەستپێگەیشتنی ئەم لینکەت لە سەرەوە نیە.
subject: 'ماستۆدۆن: دووپاتی ئیمەیل بۆ %{instance}'
title: ناونیشانی ئیمەیڵ ساخ بکەرەوە
reset_password_instructions:
action: گۆڕینی تێپەڕوشە
explanation: تۆ تیپەڕوشەی نوێت داوا کرد بۆ هەژمارەکەت.
extra: ئەگەر ئەم داواکاریەت نەکرد، تکایە ئەم ئیمەیڵە فەرامۆش بکە. تێپەڕوشەکەت ناگۆڕێ هەتا نەچیتە ناو لینکی سەرەوە و دانەیەکی نوێ دروست بکەیت.
subject: 'ماستۆدۆن: رێکردنەوەی رێنماییەکانی تێپەڕوشە'
title: گەڕانەوەی تێپەڕوشە
two_factor_disabled:
explanation: سەلماندنی دوو-فاکتەر بۆ هەژمارەکەت کە لە کارخراوە. چوونەژوورەوە ئێستا دەکرێت تەنها ناونیشانی ئیمەیڵ و تێپەڕوشەکەت بەکاربهێنی.
subject: 'ماستۆدۆن: سەلماندنی دوو-فاکتەری ناچالاک کراوە'
title: 2FA ناچالاک کرا
two_factor_enabled:
explanation: سەلماندنی دوو-فاکتەر بۆ هەژمارەکەت چالاک کراوە. ئاماژەیەک کە لەلایەن نەرمەکالایTOTP جووتکراو دروست کراوە پێویستە بە چوونە ژوورەوە.
subject: 'ماستۆدۆن: سەلماندنی دوو-فاکتەری چالاک کراوە'
title: 2FA چالاک کرا
two_factor_recovery_codes_changed:
explanation: کۆدەکانی چاککردنەوەی پێشوو هەڵوەشێنرانەوە و، نوێکان دروست بوون.
subject: 'ماستۆدۆن: کۆدەکانی گەڕانەوەی دوو فاکتەر، دووبارە دروست دەکرێتەوە'
title: 2FA کۆدی چاککردنەوە گۆڕا
unlock_instructions:
subject: 'ماستۆدۆن: رێنماییەکان بکەرەوە'
webauthn_credential:
added:
explanation: کلیلی ئاسایشی خوارەوە زیادکرا بۆ هەژمارەکەت
subject: 'ماستۆدۆن: کلیلی ئاسایشی نوێ'
title: کلیلی پاراستنی نوێ زیادکرا
deleted:
explanation: کلیلی ئاسایشی خوارەوە لە هەژمارەکەت سڕایەوە
subject: 'ماستۆدۆن: کلیلی پاراستن سڕایەوە'
title: کلیلە کانی پاراستنی یەکێک لە ئێوە سڕایەوە
webauthn_disabled:
explanation: سەلماندن بە کلیلەپارێزراوەکان لە کارخراوە بۆ هەژمارەکەت. چوونەژوورەوە ئێستا دەکرێت تەنها ئەو نیشانەیە بەکاربێنیت کە لەلایەن نەرمەکالایTOTP دروست کراوە.
subject: 'ماستۆدۆن: سەلماندن لەگەڵ کلیلە پاسایشی ناچالاک کراوە'
title: کلیلە پارستنەکان ناچالاک کراون
webauthn_enabled:
explanation: سەلماندنی کلیلی ئاسایش چالاک کراوە بۆ هەژمارەکەت. ئێستا کلیلی پاراستن دەتوانرێت بۆ چوونە ژوورەوە بەکار بێت.
subject: 'ماستۆدۆن: سەلماندنی کلیلی پاراستن چالاک کراوە'
title: کلیلە کانی پاراستن چالاک کرا
omniauth_callbacks:
failure: نەیتوانی ڕەسەنایە تی %{kind} بتەوبکات لەبەرئەوەی "%{reason}".
success: سەرکەوتووانە لە هەژماری %{kind} سەلمێنرا.
passwords:
no_token: ناتوانیت دەستگەیشتنت هەبێت بەم لاپەڕەیە بەبێ ئەوەی لە ئیمەیڵێکی گەڕانەوەی تێپەڕوشەت بێت. ئەگەر لە ئیمەیڵێکیگەڕانەوەی تێپەڕوشە هاتوویت، تکایە دڵنیابە لەوەی کە URLی تەواوت بەکارهێناوە کە دابینکراوە.
send_instructions: ئەگەر ناونیشانی ئیمەیڵەکەت لە بنکەی زانیارێکانماندا هەبێت، لە چەند خولەکێکی کەمدا لینکی هێنانەوەی تێپەڕوشە لە ناونیشانی ئیمەیلەکەت پێ دەگات. تکایە بوخچەی سپامەکەت بکەرەوە، ئەگەر ئەم ئیمەیڵەت پێنەدرا.
send_paranoid_instructions: ئەگەر ناونیشانی ئیمەیڵەکەت لە بنکەی زانیارێکانماندا هەبێت، لە چەند خولەکێکی کەمدا لینکی هێنانەوەی تێپەڕوشە لە ناونیشانی ئیمەیلەکەت پێ دەگات. تکایە بوخچەی سپامەکەت بکەرەوە، ئەگەر ئەم ئیمەیڵەت پێنەدرا.
updated: تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدرا. تۆ ئێستاچوویتە ژوورەوە.
updated_not_active: تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدرا.
registrations:
destroyed: خوات لەگەڵ! ئەژمێرەکەت بە سەرکەوتوویی هەڵوەشێنرایەوە. هیوادارین بەزوویی بتبینینەوە.
signed_up: بەخێربێیت! تۆ بە سەرکەوتوویی تۆمار کرای.
signed_up_but_inactive: تۆ بە سەرکەوتوویی تۆمارکرای. هەرچۆنێک بێت، نەمانتوانی چوونە ژوورەوەت بۆ بکەین لەبەرئەوەی هێشتا هەژمارەکەت کارا نەکراوە.
signed_up_but_locked: تۆ بە سەرکەوتوویی تۆمارکرای. هەرچۆنێک بێت، نەمانتوانی چوونە ژوورەوەت بۆ بکەین لەبەرئەوەی هێشتا هەژمارەکەت قوفڵ کراوە.
signed_up_but_pending: نامەیەک بە لینکی دووپاتکردنەوە نێردراوە بۆ ناونیشانی ئیمەیڵەکەت. دوای ئەوەی تۆ کرتە لەسەر لینکەکە دەکەیت، ئێمە پێداچوونەوە دەکەین بە بەرنامەکەتدا. ئاگادار دەکرێیت ئەگەر پەسەند کرا.
signed_up_but_unconfirmed: نامەیەک بە لینکی دووپاتکردنەوە نێردراوە بۆ ناونیشانی ئیمەیڵەکەت. تکایە دوای لینکەکە بکەوە بۆ کاراکردنی هەژمارەکەت. تکایە بوخچەی سپامەکەت بکەرەوە ئەگەر ئەم ئیمەیڵەت پێنەدرا.
update_needs_confirmation: تۆ ئەژمێرەکەت بە سەرکەوتوویی نوێکردەوە، بەڵام پێویستە ئیمەیڵە نوێکەت بسەلمێنین. تکایە ئیمەیڵەکەت بپشکنە و دوای بەستەری دڵنیابوونەوە بکەوە بۆ دڵنیابوون لە ناونیشانی ئیمەیڵە نوێکەت. تکایە بوخچەی سپامەکەت بکەرەوە ئەگەر ئەم ئیمەیڵەت پێنەدرا.
updated: هەژمارەکەت بە سەرکەوتوویی نوێکرایەوە.
sessions:
already_signed_out: چوونە دەرەوە بە سەرکەوتوویی ئەنجام بوو.
signed_in: بە سەرکەوتوویی چوونە ژوورەوە.
signed_out: چوونە دەرەوە بە سەرکەوتوویی ئەنجام بوو.
unlocks:
send_instructions: ئیمەیڵێکت بۆ دەنێردرێت لەگەڵ ڕێنمایی بۆ چۆنیەتی کردنەوەی هەژمارەکەت لە چەند خولەکێکدا. تکایە بوخچەی سپامەکەت بپشکنە ئەگەر ئەم ئیمەیڵەت پێنەدرا.
send_paranoid_instructions: ئەگەر هەژمارەکەت بوونی هەبێت، ئیمەیڵێکت پێدەگات لەگەڵ ڕێنمایی چۆنیەتی کردنەوەی لە چەند خولەکێکدا. تکایە بوخچەی سپامەکەت بپشکنە ئەگەر ئەم ئیمەیڵەت پێنەدرا.
unlocked: هەژمارەکەت بە سەرکەوتوویی لە قوفڵ لاچوو. تکایە بچۆ ژوورەوە بۆ بەردەوام بوون.
errors:
messages:
already_confirmed: پێشتر پشتڕاست کرایەوە، تکایە هەوڵ دەدە بچۆ ژوورەوە
confirmation_period_expired: پێویستە لە نێو %{period} دا پشتڕاست بکرێتەوە، تکایە داوای دانەیەکی نوێ بکە
expired: بەسەرچووە، تکایە داوایەکی نوێ بکە
not_found: نەدۆزرایەوە
not_locked: دانەخرابوو
not_saved:
one: '١ هەڵە قەدەغەکرا ئەم %{resource} لە تۆمارکردن:'
other: "%{count} هەڵەی قەدەغەکرد کە %{resource} لە پاشکەوتکردن:"

View File

@ -60,6 +60,21 @@ nn:
title: 2FA-gjenopprettingskodane er endra
unlock_instructions:
subject: 'Mastodon: Instruksjonar for å opne kontoen igjen'
webauthn_credential:
added:
explanation: Følgende sikkerhetsnøkkel har blitt lagt til i kontoen din
subject: 'Mastodon: Ny sikkerhetsnøkkel'
title: En ny sikkerhetsnøkkel har blitt lagt til
deleted:
explanation: Følgende sikkerhetsnøkkel har blitt slettet fra kontoen din
subject: 'Mastodon: Sikkerhetsnøkkel slettet'
title: En av sikkerhetsnøklene dine har blitt slettet
webauthn_disabled:
subject: 'Mastodon: Autentisering med sikkerhetsnøkler ble skrudd av'
title: Sikkerhetsnøkler deaktivert
webauthn_enabled:
subject: 'Mastodon: Sikkerhetsnøkkelsautentisering ble skrudd på'
title: Sikkerhetsnøkler aktivert
omniauth_callbacks:
failure: Du kunne ikkje verte autentisert frå %{kind} av di "%{reason}".
success: Autentisert frå %{kind}-konto.

View File

@ -81,7 +81,7 @@ vi:
failure: Không thể xác thực bạn từ %{kind} bởi vì "%{reason}".
success: Xác thực thành công từ tài khoản %{kind}.
passwords:
no_token: Bạn chỉ có thể truy cập trang này khi chuyển tiếp từ email phục hồi mật khẩu. Nếu vẫn không được, vui lòng chắc chắn rằng bạn đã sử dụng chính xác URL được cung cấp.
no_token: Bạn chỉ có thể truy cập trang này khi nhận được email phục hồi mật khẩu. Nếu vẫn không được, vui lòng chắc chắn rằng bạn đã ng chính xác URL được cung cấp.
send_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
send_paranoid_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
updated: Mật khẩu của bạn đã được thay đổi thành công. Hiện tại bạn đã đăng nhập.

View File

@ -60,6 +60,23 @@ zh-HK:
title: 雙重認證恢復碼已更改
unlock_instructions:
subject: 'Mastodon: 解除用戶鎖定'
webauthn_credential:
added:
explanation: 以下的安全鑰匙已經加進你的帳號
subject: 'Mastodon: 新的安全鑰匙'
title: 已經加入一個新的安全鑰匙
deleted:
explanation: 以下的安全鑰匙已經從你的帳號中移除了
subject: 'Mastodon: 安全鑰匙已移除'
title: 你其中的一個安全鑰匙已經被移除了
webauthn_disabled:
explanation: 你的帳號的安全鑰匙身份驗證已經停用。你只可以用過去已經配對好的基於時間一次性密碼程式生成的密碼來登錄。
subject: 'Mastodon: 安全鑰匙身份驗證已經停用'
title: 已啟用安全鑰匙
webauthn_enabled:
explanation: 安全鑰匙身份驗證已啟用。你的安全鑰匙現在可以用來登錄。
subject: 'Mastodon: 安全鑰匙身份驗證已啟用'
title: 已啟用安全鑰匙
omniauth_callbacks:
failure: 無法以 %{kind} 登入你的用戶,原因是︰「%{reason}」。
success: 成功以 %{kind} 登入你的用戶。

View File

@ -116,22 +116,22 @@ eo:
title: OAuth-a rajtigo bezonata
scopes:
admin:read: legu ĉiujn datumojn en la servilo
admin:read:accounts: legas senteman informacion de ĉiuj kontoj
admin:read:reports: legas konfidencajn informojn de ĉiuj signaloj kaj signalitaj kontoj
admin:write: modifu ĉiujn datumojn en la servilo
admin:read:accounts: legi konfidencajn informojn de ĉiuj kontoj
admin:read:reports: legi konfidencajn informojn de ĉiuj signaloj kaj signalitaj kontoj
admin:write: modifi ĉiujn datumojn en la servilo
admin:write:accounts: plenumi agojn de kontrolo sur kontoj
admin:write:reports: plenumi agojn de kontrolo sur signaloj
follow: ŝanĝi rilatojn al aliaj kontoj
push: ricevi viajn puŝ-sciigojn
read: legi ĉiujn datumojn de via konto
read:accounts: vidi la informojn de la konto
read:blocks: vidi viajn blokojn
read:accounts: vidi la informojn de la kontoj
read:blocks: vidi viajn blokadojn
read:bookmarks: vidi viajn legosignojn
read:favourites: vidi viajn stelumojn
read:filters: vidi viajn filtrilojn
read:follows: vidi viajn sekvatojn
read:lists: vidi viajn listojn
read:mutes: vidi viajn silentigojn
read:mutes: vidi viajn silentigadojn
read:notifications: vidi viajn sciigojn
read:reports: vidi viajn signalojn
read:search: serĉi vianome
@ -140,7 +140,7 @@ eo:
write:accounts: ŝanĝi vian profilon
write:blocks: bloki kontojn kaj domajnojn
write:bookmarks: aldoni mesaĝojn al la legosignoj
write:favourites: stelumitaj mesaĝoj
write:favourites: stelumi mesaĝojn
write:filters: krei filtrilojn
write:follows: sekvi homojn
write:lists: krei listojn

View File

@ -1 +1,151 @@
--- {}
---
ku:
activerecord:
attributes:
doorkeeper/application:
name: ناوی بەرنامە
redirect_uri: URI گۆڕانی شوێن
scopes: بوارەکان
website: نەرمەکالای ماڵپەڕ
errors:
models:
doorkeeper/application:
attributes:
redirect_uri:
fragment_present: ناتوانێت پارچەیەک لەخۆوە بگری.
invalid_uri: پێویستە URI دروست بێت.
relative_uri: پێویستە URI ی ڕەها بێت.
secured_uri: پێویستە HTTPS/SSL URI بێت.
doorkeeper:
applications:
buttons:
authorize: ڕێگەپێدان
cancel: هەڵوەشاندنەوه
destroy: لەناوبردن
edit: دەستکاری
submit: ناردن
confirmations:
destroy: دڵنیای?
edit:
title: دەستکاری کردنی بەرنامە
form:
error: تەحح! بزانە شتێکت لە نێو فۆرمەکە بە هەڵە نەنووسیوە
help:
native_redirect_uri: بۆ تاقیکردنەوەی ناوخۆیی %{native_redirect_uri} بەکاربەرە،
redirect_uri: بەکارهێنانی یەک هێڵ بۆ هەر URI
scopes: دۆمەینەکان جیاببکەن بە بۆشاییەکان. بۆ بەکارهێنانی دۆمەینی گریمانەیی چۆڵی بەجێبهێڵە.
index:
application: نەرمەکال
callback_url: Callback نیشانی
delete: سڕینەوە
empty: هیچ بەرنامەیەکت نیە.
name: ناو
new: بەرنامەی نوێ
scopes: دۆمەینەکان
show: نیشاندان
title: بەرنامەی تۆ
new:
title: بەرنامەی نوێ
show:
actions: کارەکان
application_id: کلیلی ڕاژەخواز
callback_urls: Callback نیشانەکانی
scopes: دۆمەینەکان
secret: نهێنی ڕاژەخواز
title: 'بەرنامە: %{name}'
authorizations:
buttons:
authorize: ڕێپێدراو
deny: نکۆڵی لێبکە
error:
title: هەڵەیەک ڕوویدا
new:
able_to: دەتوانێت
prompt: بەکارهێنانی %{client_name} داوای چوونە ژوورەوە بۆ هەژمارەکەت دەکات
title: ڕێپێدان پێویستە
show:
title: کۆپیکردنی کۆدی ئەم رێپێدانە و لکاندنی بە بەرنامەکە.
authorized_applications:
buttons:
revoke: بەتاڵی بکە
confirmations:
revoke: ئایا دڵنیایت?
index:
application: نەرمەکال
created_at: ده‌سه‌ڵاتپێدراو
date_format: "%Y-%m-%d %H:%M:%S"
scopes: بوارەکان
title: بەرنامە ڕێگەپێدراوەکانت
errors:
messages:
access_denied: خاوەنی سەرچاوە یان سێرڤەری ڕێپێدان داواکاریەکەی ڕەت کردەوە.
credential_flow_not_configured: لێشاوی بڕواپێدانی تێپەڕەوشەی خاوەن سەرچاوە شکستی هێنا بەهۆی Doorkeeper.configure.resource_owner_from_credentials شێوەبەندی نەکراو.
invalid_client: سەلماندنی کڕیار سەرکەوتوو نەبوو بەهۆی کڕیاری نەناسراوەوە، هیچ ڕەسەنایەتی سەلماندنێکی کلایەنت لەخۆوە نەدەگرێت، یان شێوازی سەلماندنی پەسەند نەکراو.
invalid_grant: بەخشین مۆڵەتی دابینکراو نایاساییە، بەسەرچووە، هەڵوەشاندنەوەیە، ناگونجێلەگەڵ ئاراستەی URI بەکارهاتوو لە داواکاری ڕێپێدان، یان دەرچووە بۆ کڕیارێکی تر.
invalid_redirect_uri: Uri دووبارە ئاڕاستەکردنەوەکە لەخۆدەگرێت دروست نیە.
invalid_request: داواکاریەکە پارامیتەری داواکراوی بزرە، بەهای پارامیتەری پشتگیری نەکراو لەخۆ دەگرێت، یان بە پێچەوانەوە نادروستە.
invalid_resource_owner: بڕواپێدانەکانی خاوەنی سەرچاوەی دابینکراو دروست نیە، یان ناتوانرێت خاوەنی سەرچاوە بدۆزرێتەوە
invalid_scope: بواری داواکراو نادروستە، نەناسراو، یان تێکچووە.
invalid_token:
expired: نیشانەی چوونەژورەوە بەسەرچووە
revoked: کۆدی دەستپێگەیشتن بەتاڵ بووەتەوە
unknown: دەستپێگەیشتن بە کۆدی چوونەژوور باوڕپێنەکراوە
resource_owner_authenticator_not_configured: خاوەنی سەرچاوە بەهۆی Doorkeeper.configure.resource_owner_authenticator کۆنفیگنەکردن سەرکەوتوو نەبوو.
server_error: ڕاژەکاری ڕێپێدان تووشی مەرجێکی چاوەڕوان نەکراو بوو کە رێگری دەکا لە جێبەجێ کردنی داواکاریەکە.
temporarily_unavailable: ڕاژەکاری ڕێپێدان لە ئێستادا ناتوانێت داواکاریەکە چارەسەر بکات لەبەر بارکردنی کاتی یان چاککردنەوەی سێرڤەرەکە.
unauthorized_client: ڕاژەخوازەکە دەسەڵاتی ئەوەی نییە ئەم داواکاریە بە بەکارهێنانی ئەم شێوازە بدات.
unsupported_grant_type: جۆری بەخشینە مۆڵەتپێدانەکە لەلایەن ڕاژەکاری مۆڵەتەوە پەسەند ناکرێت.
unsupported_response_type: ڕاژەکاری ڕێگەپێدان پشتگیری ئەم جۆرە وەڵامە ناکات.
flash:
applications:
create:
notice: بەرنامە دروستکرا.
destroy:
notice: بەرنامە سڕایەوە.
update:
notice: بەرنامە بەڕۆژکرا.
authorized_applications:
destroy:
notice: بەرنامە هەڵوەشێنڕا.
layouts:
admin:
nav:
applications: بەرنامەکان
oauth2_provider: OAuth2 Provider
application:
title: داوای ڕێپێدانی OAuth
scopes:
admin:read: خوێندنەوەی هەموو داتاکان لەسەر ڕاژەکارەکە
admin:read:accounts: زانیاری هەستیاری هەموو هەژمارەکان بخوێنەوە
admin:read:reports: زانیاری هەستیاری هەموو گوزارشت و هەژمارە گوزارشتکراوەکان بخوێنەوە
admin:write: دەستکاری هەموو داتاکان بکە لەسەر ڕاژەکار
admin:write:accounts: ئەنجامدانی کاری میانڕەوی لەسەر هەژمارەکان
admin:write:reports: ئەنجامدانی کاری میانڕەوی لەسەر گوزارشتەکان
follow: دەستکاریکردنی پەیوەندییەکانی هەژمارەی بەکارهێنەر
push: وەرگرتنی ئاگانامەکانی پاڵنان
read: هەموو دراوەکانی هەژمارەکەت بخوێنەوە
read:accounts: بینینی زانیاری هەژمارەکان
read:blocks: بینینی بلۆکەکانت
read:bookmarks: نیشانەکان ببینە
read:favourites: بینینی دڵخوازەکانت
read:filters: بینینی پاڵافتنەکانت
read:follows: سەیری شوێنکەوتەکانت بکە
read:lists: بینینی لیستەکانت
read:mutes: بێدەنگەکانت ببینە
read:notifications: ئاگانامەکانت ببینە
read:reports: سەیری گوزارشەکانت بکە
read:search: گەڕان لە جیاتی تۆ
read:statuses: بینینی هەموو بارودۆخەکان
write: دەستکاری هەموو داتاکانی هەژمارەکەت بکە
write:accounts: دەستکاری پرۆفایلەکەت بکە
write:blocks: بلۆک کردنی هەژمارەکەی دۆمەینەکان
write:bookmarks: بارەکانی نیشانکەر
write:favourites: دۆخی دڵخوازەکان
write:filters: پاڵێوەر دروست بکە
write:follows: دوای خەڵک بکەوە
write:lists: دروستکردنی لیستەکان
write:media: پەڕگەی میدیا باربکە
write:mutes: بێدەنگکردنی خەڵک و گفتوگۆکان
write:notifications: ئاگانامەکانت بسڕیەوە
write:reports: گوزارشتکردنی کەسانی تر
write:statuses: بڵاوکردنەوەی بارودۆخەکان

View File

@ -15,7 +15,7 @@ vi:
fragment_present: không thể chứa một mảnh.
invalid_uri: phải là một URI hợp lệ.
relative_uri: phải là một URI tuyệt đối.
secured_uri: phải sử dụng giao thức HTTPS / SSL.
secured_uri: phải là giao thức HTTPS/SSL.
doorkeeper:
applications:
buttons:
@ -31,9 +31,9 @@ vi:
form:
error: Rất tiếc! Hãy kiểm tra thông tin của bạn bởi vì nó có lỗi
help:
native_redirect_uri: Sử dụng %{native_redirect_uri} khi kiểm tra nội bộ
redirect_uri: Sử dụng mỗi dòng chỉ một URL
scopes: Phạm vi riêng biệt với không gian. Để trống để sử dụng phạm vi mặc định.
native_redirect_uri: ng %{native_redirect_uri} khi kiểm tra nội bộ
redirect_uri: Mỗi dòng chỉ một URL
scopes: Tách phạm vi ra bằng dấu cách. Bỏ trống để dùng phạm vi mặc định.
index:
application: Ứng dụng
callback_url: Gọi lại URL
@ -81,7 +81,7 @@ vi:
access_denied: Chủ sở hữu tài nguyên hoặc máy chủ đã từ chối yêu cầu.
credential_flow_not_configured: Resource Owner Password Credentials không thành công do Doorkeeper.configure.resource_owner_from_credentials không được định cấu hình.
invalid_client: Xác thực ứng dụng khách không thành công do máy khách mơ hồ, không bao gồm xác thực ứng dụng khách hoặc phương thức xác thực không được hỗ trợ.
invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị thu hồi hoặc không khớp với tài khoản đã cung cấp.
invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị thu hồi hoặc không khớp với tài khoản đã cấp phép. Hoặc xung đột với ứng dụng khác.
invalid_redirect_uri: URL chuyển hướng không hợp lệ.
invalid_request: Yêu cầu thiếu tham số bắt buộc, bao gồm giá trị tham số không được hỗ trợ hoặc không đúng định dạng.
invalid_resource_owner: Thông tin xác thực chủ sở hữu tài nguyên được cung cấp không hợp lệ hoặc không thể tìm thấy chủ sở hữu tài nguyên
@ -119,8 +119,8 @@ vi:
admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản
admin:read:reports: đọc thông tin của các báo cáo và các tài khoản bị báo cáo
admin:write: sửa đổi tất cả dữ liệu trên máy chủ
admin:write:accounts: thực hiện hành động kiểm duyệt trên tài khoản
admin:write:reports: thực hiện hành động kiểm duyệt với các báo cáo
admin:write:accounts: áp đặt hành động kiểm duyệt trên tài khoản
admin:write:reports: áp đặt kiểm duyệt với các báo cáo
follow: sửa đổi các mối quan hệ tài khoản
push: nhận thông báo đẩy của bạn
read: đọc tất cả dữ liệu tài khoản của bạn

View File

@ -40,3 +40,6 @@ zgh:
created_at: ⵜⴻⵜⵜⵓⵙⵓⵔⴳ
date_format: "%d-%m-%Y %H:%M:%S"
title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ ⵉⵜⵜⵓⵙⵓⵔⴷⵏ
scopes:
read:notifications: ⵥⵕ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ
write:notifications: ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ

View File

@ -766,7 +766,7 @@ eo:
filters:
contexts:
account: Profiloj
home: Hejma templinio
home: Hejmo kaj listoj
notifications: Sciigoj
public: Publika templinio
thread: Konversacioj
@ -958,6 +958,7 @@ eo:
relationships:
activity: Konta aktiveco
dormant: Dormanta
follow_selected_followers: Forigu selektitajn sekvantojn
followers: Sekvantoj
following: Sekvatoj
invited: Invitita
@ -1088,8 +1089,8 @@ eo:
other: "%{count} voĉdonoj"
vote: Voĉdoni
show_more: Malfoldi
show_newer: Neniam montru
show_older: Montru pli malnova
show_newer: Montri pli novajn
show_older: Montri pli malnovajn
show_thread: Montri la fadenon
sign_in_to_participate: Ensaluti por partopreni en la konversacio
title: "%{name}: “%{quote}”"
@ -1167,7 +1168,7 @@ eo:
tips: Konsiloj
title: Bonvenon, %{name}!
users:
follow_limit_reached: Vi ne povas sekvi pli da %{limit} homojn
follow_limit_reached: Vi ne povas sekvi pli ol %{limit} homo(j)
invalid_email: La retadreso estas nevalida
invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo
otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email}

View File

@ -842,6 +842,7 @@ es-AR:
request: Solicitá tu archivo historial
size: Tamaño
blocks: Cuentas que bloqueaste
bookmarks: Marcadores
csv: CSV
domain_blocks: Dominios bloqueados
lists: Listas
@ -855,7 +856,7 @@ es-AR:
filters:
contexts:
account: Perfiles
home: Línea temporal principal
home: Inicio y listas
notifications: Notificaciones
public: Líneas temporales públicas
thread: Conversaciones
@ -918,6 +919,7 @@ es-AR:
success: Tus datos se subieron exitosamente y serán procesados en brevedad
types:
blocking: Lista de bloqueados
bookmarks: Marcadores
domain_blocking: Lista de dominios bloqueados
following: Lista de seguidos
muting: Lista de silenciados
@ -1074,6 +1076,7 @@ es-AR:
relationships:
activity: Actividad de la cuenta
dormant: Inactivas
follow_selected_followers: Seguir a los seguidores seleccionados
followers: Seguidores
following: Siguiendo
invited: Invitado

View File

@ -842,6 +842,7 @@ es:
request: Solicitar tu archivo
size: Tamaño
blocks: Personas que has bloqueado
bookmarks: Marcadores
csv: CSV
domain_blocks: Bloqueos de dominios
lists: Listas
@ -918,6 +919,7 @@ es:
success: Sus datos se han cargado correctamente y serán procesados en brevedad
types:
blocking: Lista de bloqueados
bookmarks: Marcadores
domain_blocking: Lista de dominios bloqueados
following: Lista de seguidos
muting: Lista de silenciados
@ -1074,6 +1076,7 @@ es:
relationships:
activity: Actividad de la cuenta
dormant: Inactivo
follow_selected_followers: Seguir a los seguidores seleccionados
followers: Seguidores
following: Siguiendo
invited: Invitado

View File

@ -839,6 +839,7 @@ fa:
request: درخواست بایگانی داده‌هایتان
size: اندازه
blocks: حساب‌های مسدودشده
bookmarks: نشانک‌ها
csv: CSV
domain_blocks: دامین‌های مسدودشده
lists: فهرست‌ها
@ -915,6 +916,7 @@ fa:
success: داده‌های شما با موفقیت بارگذاری شد و به زودی پردازش می‌شود
types:
blocking: فهرست مسدودشده‌ها
bookmarks: نشانک‌ها
domain_blocking: فهرست دامین‌های مسدودشده
following: فهرست پی‌گیری‌ها
muting: فهرست بی‌صداشده‌ها

View File

@ -35,7 +35,7 @@ fr:
status_count_before: Ayant publié
tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles
terms: Conditions dutilisation
unavailable_content: Contenu non disponible
unavailable_content: Serveurs modérés
unavailable_content_description:
domain: Serveur
reason: Motif
@ -568,7 +568,7 @@ fr:
desc_html: Noms des domaines que ce serveur a découvert dans le fediverse
title: Publier la liste des serveurs découverts
preview_sensitive_media:
desc_html: Les liens de prévisualisation sur les autres sites web afficheront une vignette même si le média est sensible
desc_html: Les aperçus de lien sur les autres sites web afficheront une vignette même si les médias sont marqués comme sensibles
title: Montrer les médias sensibles dans les prévisualisations OpenGraph
profile_directory:
desc_html: Permettre aux utilisateur·ice·s dêtre découvert·e·s
@ -842,6 +842,7 @@ fr:
request: Demandez vos archives
size: Taille
blocks: Vous bloquez
bookmarks: Signets
csv: CSV
domain_blocks: Bloqueurs de domaine
lists: Listes
@ -855,7 +856,7 @@ fr:
filters:
contexts:
account: Profils
home: Accueil
home: Accueil et listes
notifications: Notifications
public: Fils publics
thread: Conversations
@ -918,6 +919,7 @@ fr:
success: Vos données ont été importées avec succès et seront traitées en temps et en heure
types:
blocking: Liste de comptes bloqués
bookmarks: Signets
domain_blocking: Liste des serveurs bloqués
following: Liste dutilisateur·rice·s suivi·e·s
muting: Liste dutilisateur·rice·s que vous masquez
@ -1074,6 +1076,7 @@ fr:
relationships:
activity: Activité du compte
dormant: Dormant
follow_selected_followers: Suivre les abonné·e·s sélectionné·e·s
followers: Abonné·e·s
following: Abonnements
invited: Invité·e
@ -1209,8 +1212,8 @@ fr:
other: "%{count} votes"
vote: Voter
show_more: Déplier
show_newer: Afficher les plus récents
show_older: Afficher les plus ancien
show_newer: Plus récents
show_older: Plus anciens
show_thread: Afficher le fil de discussion
sign_in_to_participate: Inscrivez-vous pour prendre part à la conversation
title: '%{name}: "%{quote}"'
@ -1362,7 +1365,7 @@ fr:
title:
disable: Compte gelé
none: Avertissement
sensitive: Votre média a été marqué comme sensible
sensitive: Vos médias ont été marqués comme sensibles
silence: Compte limité
suspend: Compte suspendu
welcome:

View File

@ -628,7 +628,7 @@ gl:
delete: Eliminar o ficheiro subido
destroyed_msg: Eliminado correctamente o subido!
statuses:
back_to_account: Voltar a páxina da conta
back_to_account: Volver a páxina da conta
batch:
delete: Eliminar
nsfw_off: Marcar como non sensible
@ -737,7 +737,7 @@ gl:
saml: SAML
register: Rexistro
registration_closed: "%{instance} non está a aceptar novas usuarias"
resend_confirmation: Voltar a enviar intruccións de confirmación
resend_confirmation: Reenviar as intruccións de confirmación
reset_password: Restablecer contrasinal
security: Seguranza
set_new_password: Estabelecer novo contrasinal
@ -842,6 +842,7 @@ gl:
request: Solicite o ficheiro
size: Tamaño
blocks: Bloqueos
bookmarks: Marcadores
csv: CSV
domain_blocks: Bloqueos de dominio
lists: Listaxes
@ -918,6 +919,7 @@ gl:
success: Os seus datos foron correctamente subidos e serán procesados ao momento
types:
blocking: Lista de bloqueo
bookmarks: Marcadores
domain_blocking: Lista de bloqueo de dominios
following: Lista de seguimento
muting: Lista de usuarias acaladas
@ -978,7 +980,7 @@ gl:
warning:
backreference_required: Tes que configurar primeiro a nova conta para referenciar hacia esta
before: 'Antes de seguir, por favor lé estas notas con atención:'
cooldown: Tras a migración existe un período de calma durante o cal non poderás voltar a migrar de novo
cooldown: Tras a migración existe un período de calma durante o cal non poderás volver a migrar de novo
disabled_account: Tras o cambio a túa conta actual non será totalmente usable, pero terás acceso a exportar os datos e tamén a reactivación.
followers: Esta acción moverá todas as túas seguidoras desde a conta actual a nova conta
only_redirect_html: De xeito alternativo, podes <a href="%{path}">simplemente por unha redirección no perfil</a>.
@ -1074,6 +1076,7 @@ gl:
relationships:
activity: Actividade da conta
dormant: En repouso
follow_selected_followers: Seguir seguidoras seleccionadas
followers: Seguidoras
following: Seguindo
invited: Convidado
@ -1155,7 +1158,7 @@ gl:
aliases: Alcumes da conta
appearance: Aparencia
authorized_apps: Apps autorizadas
back: Voltar a Mastodon
back: Volver a Mastodon
delete: Eliminación da conta
development: Desenvolvemento
edit_profile: Editar perfil
@ -1223,19 +1226,19 @@ gl:
unlisted_long: Visible para calquera, pero non listado en liñas de tempo públicas
stream_entries:
pinned: Mensaxe fixada
reblogged: promovida
reblogged: comparteu
sensitive_content: Contido sensible
tags:
does_not_match_previous_name: non concorda co nome anterior
terms:
body_html: |
<h2>Intimidade</h2>
<h2>Privacidade</h2>
<h3 id="collect">Qué información recollemos?</h3>
<ul>
<li><em>Información básica da conta</em>: Se se rexistra en este servidor, pediráselle un nome de usuaria, un enderezo de correo electrónico e un contrasinal. De xeito adicional tamén poderá introducir información como un nome público e biografía, tamén subir unha fotografía de perfil e unha imaxe para a cabeceira. O nome de usuaria, o nome público, a biografía e as imaxes de perfil e cabeceira sempre se mostran publicamente.</li>
<li><em>Publicacións, seguimento e outra información pública</em>: O listado das persoas que segue é un listado público, o mesmo acontece coas súas seguidoras. Cando evía unha mensaxe, a data e hora gárdanse así como o aplicativo que utilizou para enviar a mensaxe. As publicacións poderían conter ficheiros de medios anexos, como fotografías e vídeos. As publicacións públicas e as non listadas están dispoñibles de xeito público. Cando destaca unha publicación no seu perfil tamén é pública. As publicacións son enviadas as súas seguidoras, en algúns casos pode acontecer que estén en diferentes servidores e gárdanse copias neles. Cando elemina unha publicación tamén se envía as súas seguidoras. A acción de voltar a publicar ou marcar como favorita outra publicación sempre é pública.</li>
<li><em>Mensaxes directas e só para seguidoras</em>: Todas as mensaxes gárdanse e procésanse no servidor. As mensaxes só para seguidoras son entregadas as súas seguidoras e as usuarias que son mencionadas en elas, e as mensaxes directas entréganse só as usuarias mencionadas en elas. En algúns casos esto implica que son entregadas a diferentes servidores e gárdanse copias alí. Facemos un esforzo sincero para limitar o acceso a esas publicacións só as persoas autorizadas, pero outros servidores poderían non ser tan escrupulosos. Polo tanto, é importante revisar os servidores onde se hospedan as súas seguidoras. Nos axustes pode activar a opción de aprovar ou rexeitar novas seguidoras de xeito manual. <em>Teña en conta que a administración do servidor e todos os outros servidores implicados poden ver as mensaxes.</em>, e as destinatarias poderían facer capturas de pantalla, copiar e voltar a compartir as mensaxes. <em>Non comparta información comprometida en Mastodon.</em></li>
<li><em>Publicacións, seguimento e outra información pública</em>: O listado das persoas que segue é un listado público, o mesmo acontece coas súas seguidoras. Cando evía unha mensaxe, a data e hora gárdanse así como o aplicativo que utilizou para enviar a mensaxe. As publicacións poderían conter ficheiros de medios anexos, como fotografías e vídeos. As publicacións públicas e as non listadas están dispoñibles de xeito público. Cando destaca unha publicación no seu perfil tamén é pública. As publicacións son enviadas as súas seguidoras, en algúns casos pode acontecer que estén en diferentes servidores e gárdanse copias neles. Cando elemina unha publicación tamén se envía as súas seguidoras. A acción de volver a publicar ou marcar como favorita outra publicación sempre é pública.</li>
<li><em>Mensaxes directas e só para seguidoras</em>: Todas as mensaxes gárdanse e procésanse no servidor. As mensaxes só para seguidoras son entregadas as súas seguidoras e as usuarias que son mencionadas en elas, e as mensaxes directas entréganse só as usuarias mencionadas en elas. En algúns casos esto implica que son entregadas a diferentes servidores e gárdanse copias alí. Facemos un esforzo sincero para limitar o acceso a esas publicacións só as persoas autorizadas, pero outros servidores poderían non ser tan escrupulosos. Polo tanto, é importante revisar os servidores onde se hospedan as súas seguidoras. Nos axustes pode activar a opción de aprovar ou rexeitar novas seguidoras de xeito manual. <em>Teña en conta que a administración do servidor e todos os outros servidores implicados poden ver as mensaxes.</em>, e as destinatarias poderían facer capturas de pantalla, copiar e volver a compartir as mensaxes. <em>Non comparta información comprometida en Mastodon.</em></li>
<li><em>IPs e outros metadatos</em>: Cando se conecta, gravamos o IP desde onde se conecta, así como o nome do aplicativo desde onde o fai. Todas as sesións conectadas están dispoñibles para revisar e revogar nos axustes. O último enderezo IP utilizado gárdase ate por 12 meses. Tamén poderiamos gardar informes do servidor que inclúan o enderezo IP de cada petición ao servidor.</li>
</ul>

View File

@ -842,6 +842,7 @@ hu:
request: Archív kérése
size: Méret
blocks: Tiltólistádon
bookmarks: Könyvjelzők
csv: CSV
domain_blocks: Tiltott domainjeid
lists: Listáid
@ -918,6 +919,7 @@ hu:
success: Adataidat sikeresen feltöltöttük és feldolgozásukat megkezdtük
types:
blocking: Letiltottak listája
bookmarks: Könyvjelzők
domain_blocking: Letiltott domainek listája
following: Követettjeid listája
muting: Némított felhasználók listája
@ -1074,6 +1076,7 @@ hu:
relationships:
activity: Fiók aktivitás
dormant: Elhagyott
follow_selected_followers: Kiválasztott követők bekövetése
followers: Követők
following: Követve
invited: Meghívva

View File

@ -105,6 +105,7 @@ hy:
confirm: Հաստատել
confirmed: Հաստատված է
confirming: Հաստատում
delete: Ջնջել տվյալները
deleted: Ջնջված է
demote: Աստիճանազրկել
disable: Անջատել
@ -194,13 +195,17 @@ hy:
create_account_warning: Ստեղծել զգուշացում
create_announcement: Ստեղծել յայտարարութիւն
create_email_domain_block: Ստեղծել էլ․ հասցէի դոմէյնի արգելափակում
create_ip_block: Ստեղծել IP կանոն
destroy_announcement: Ջնջել յայտարարութիւնը
destroy_domain_allow: Ջնջել դոմէնի թոյլտուութիւնը
destroy_domain_block: Ապաարգելափակել դոմէնը
destroy_email_domain_block: Ապաարգելափակել էլ․ հասցէի դոմէնը
destroy_ip_block: Ջնջել IP կանոնը
destroy_status: Ջնջել գրառումը
disable_2fa_user: Անջատել 2FA
disable_custom_emoji: Անջատել սեփական էմոջիները
disable_user: Ապաակտիւացնել օգտատիրոջը
enable_custom_emoji: Միացնել սեփական էմոջիները
enable_user: Ակտիւացնել օգտատիրոջը
memorialize_account: Յիշել հաշիւը
promote_user: Աջակցել օգտատիրոջը
@ -214,6 +219,7 @@ hy:
unsilence_account: Լսել հաշուին
unsuspend_account: Ապակասեցնել հաշիւը
update_announcement: Թարմացնել յայտարարութիւնը
update_custom_emoji: Թարմացնել սեփական էմոջիները
update_status: Թարմացնել գրառումը
actions:
assigned_to_self_report: "%{name} բողոքել է %{target} իրենց համար"
@ -347,6 +353,7 @@ hy:
title: Մոդերացիա
private_comment: Փակ մեկնաբանութիւն
public_comment: Հրապարակային մեկնաբանութիւն
title: Դաշնություն
total_blocked_by_us: Մենք արգելափակել ենք
total_followed_by_them: Նրանք հետեւում են
total_followed_by_us: Մենք հետեւում ենք
@ -360,6 +367,19 @@ hy:
expired: Սպառուած
title: Զտիչ
title: Հրաւէրներ
ip_blocks:
add_new: Ստեղծել կանոն
delete: Ջնջել
expires_in:
'1209600': 2 շաբաթ
'15778476': 6 ամիս
'2629746': 1 ամիս
'31556952': 1 տարի
'86400': 1 օր
'94670856': 3 տարի
new:
title: Ստեղծել նոր IP կանոն
title: IP կանոններ
pending_accounts:
title: Սպասող հաշիւներ (%{count})
relationships:
@ -402,6 +422,8 @@ hy:
settings:
contact_information:
username: Կոնտակտի ծածկանուն
custom_css:
title: Սեփական CSS
domain_blocks:
all: Բոլորին
disabled: Ոչ մէկին
@ -468,6 +490,7 @@ hy:
new_report:
subject: Նոր բողոք %{instance}ի համար(#%{id})
appearance:
advanced_web_interface: Սյունակավոր ինտերֆեյս
animations_and_accessibility: Անիմացիաներ եւ հասանելիութիւն
discovery: Բացայայտում
localization:
@ -523,6 +546,7 @@ hy:
date:
formats:
default: "%b %d, %Y"
with_month_name: "%d %B %Y"
datetime:
distance_in_words:
about_x_hours: "%{count}ժ"
@ -568,6 +592,7 @@ hy:
request: Պահանջել քո արքիւը
size: Չափը
blocks: Արգելափակել
bookmarks: Էջանիշեր
csv: CSV
domain_blocks: Տիրոյթի արգելափակումներ
lists: Ցանկեր
@ -580,6 +605,7 @@ hy:
account: Պրոֆիլներ
home: Տեղական հոսք
notifications: Ծանուցումներ
public: Հանրային հոսքեր
thread: Զրոյցներ
edit:
title: Խմբագրել զտիչը
@ -595,6 +621,7 @@ hy:
trending_now: Այժմ արդիական
generic:
all: Բոլորը
changes_saved_msg: Փոփոխութիւնները յաջող պահուած են
copy: Պատճենել
delete: Ջնջել
order_by: Դասաւորել ըստ
@ -617,9 +644,12 @@ hy:
overwrite: Վերագրել
types:
blocking: Արգելափակումների ցուցակ
bookmarks: Էջանիշեր
domain_blocking: Տիրոյթի արգելափակումների ցուցակ
upload: Վերբեռնել
invites:
delete: Ապաակտիւացնել
expired: Ժամկետանց
expires_in:
'1800': 30 րոպե
'21600': 6 ժամ
@ -629,7 +659,13 @@ hy:
'86400': 1 օր
expires_in_prompt: Երբեք
generate: Գեներացնել հրաւէրի յղում
max_uses:
one: "%{count} կիրառում"
other: "%{count} կիրառում"
max_uses_prompt: Սահմանափակում չկայ
table:
expires_at: Սպառւում է
uses: Կիրառում
title: Հրաւիրել մարդկանց
media_attachments:
validations:
@ -639,6 +675,7 @@ hy:
errors:
not_found: չգտնուեց
past_migrations: Նախոդ միգրացիաները
proceed_with_move: Տեղափոխել հետեւորդներին
warning:
followers: Այս քայլով քո բոլոր հետեւորդներին այս հաշուից կը տեղափոխես դէպի նորը
moderation:
@ -657,12 +694,16 @@ hy:
number:
human:
decimal_units:
format: "%n %u"
units:
billion: Մլր
million: Մլն
quadrillion: Քլր
thousand: Հազ
trillion: Տրլ
otp_authentication:
enable: Միացնել
setup: Կարգաւորել
pagination:
newer: Ավելի նոր
next: Հաջորդ
@ -680,9 +721,14 @@ hy:
last_active: Վերջին ակտիւութիւնը
most_recent: Վերջին
moved: Տեղափոխուած
mutual: Փոխադարձ
primary: Հիմնական
relationship: Կապ
remove_selected_domains: Հեռացնել բոլոր հետեւորդներին նշուած դոմեյններից
remove_selected_followers: Հեռացնել նշուած հետեւորդներին
status: Հաշուի կարգավիճակ
sessions:
activity: Վերջին թութը
browser: Դիտարկիչ
browsers:
alipay: Alipay
@ -719,14 +765,31 @@ hy:
revoke: Չեղարկել
settings:
account: Հաշիվ
appearance: Տեսք
delete: Հաշուի ջնջում
development: Ծրագրավորում
edit_profile: Խմբագրել պրոֆիլը
export: Տվյալների արտահանում
import: Ներմուծել
import_and_export: Ներմուծել և արտահանել
migrate: Հաշուի տեղափոխում
notifications: Ծանուցումներ
preferences: Կարգավորումներ
profile: Հաշիւ
relationships: Հետեւումներ և հետեւորդներ
two_factor_authentication: Երկքայլ նոյնականացում
webauthn_authentication: Անվտանգութեան բանալիներ
statuses:
attached:
audio:
one: "%{count} ձայնագրութիւն"
other: "%{count} ձայնագրութիւն"
image:
one: "%{count} նկար"
other: "%{count} նկար"
language_detection: Ինքնուրոյն ճանաչել լեզուն
open_in_web: Բացել վէբում
over_character_limit: "%{max} նիշի սահմանը գերազանցուած է"
poll:
total_people:
one: "%{count} մարդ"
@ -736,10 +799,16 @@ hy:
other: "%{count} ձայներ"
vote: Քուէարկել
show_more: Աւելին
show_thread: Բացել շղթան
sign_in_to_participate: Մուտք գործէք՝ զրոյցին միանալու համար
title: '%{name}: "%{quote}"'
visibilities:
private: Միայն հետեւողներին
private_long: Հասանելի միայն հետեւորդներին
public: Հրապարակային
public_long: Տեսանելի բոլորին
unlisted: Ծածուկ
unlisted_long: Տեսանելի է բոլորին, բայց չի յայտնւում հանրային հոսքերում
stream_entries:
pinned: Ամրացուած թութ
reblogged: տարածուած
@ -830,6 +899,7 @@ hy:
<p><strong>Ոչ պաշտօնական, ոչ իրաւական թարգմանութիւն</strong></p>
themes:
contrast: Mastodon (բարձր կոնտրաստով)
default: Mastodon (Մուգ)
mastodon-light: Mastodon (Լուսավոր)
time:
@ -837,13 +907,28 @@ hy:
default: "%b %d, %Y, %H:%M"
month: "%b %Y"
two_factor_authentication:
add: Ավելացնել
disable: Անջատել
disabled_success: Երկքայլ նոյնականացումը հաջողութեամբ անջուած է
edit: Խմբագրել
enabled: Երկքայլ նոյնականացումը միացուած է
enabled_success: Երկքայլ նոյնականացումը հաջողութեամբ միացուած է
generate_recovery_codes: Ստեղծել վերականգնման կոդեր
lost_recovery_codes: Վերականգնման կոդերը հնարաւորութիւն են տալիս մուտք գործել հաշիւ՝ հեռախօսի կորստի դէպքում։ Եթէ կորցրել ես վերականգնման կոդերը, այստեղ կարող ես ստեղծել նորերը։ Նախկին վերականգման կոդերը կչեղարկվեն։
methods: Երկքայլ նոյնականացում տարբերակներ
otp: Նոյնականացման հավելված
recovery_codes: Վերականգնման կոդեր
recovery_codes_regenerated: Վերականգման կոդերը հաջողութեամբ ստեղծուել են
user_mailer:
warning:
title:
none: Զգուշացում
welcome:
final_action: Սկսել թթել
subject: Բարի գալուստ Մաստոդոն
tip_federated_timeline: Դաշնային հոսքում երևում է ամբողջ Մաստոդոնի ցանցը։ Բայց այն ներառում է միայն այն օգտատերերին որոնց բաժանորդագրուած են ձեր հարևաններ, այդ պատճառով այն կարող է լինել ոչ ամբողջական։
tip_following: Դու հետեւում էս քո հանգոյցի ադմին(ներ)ին լռելայն։ Այլ հետաքրքիր անձանց գտնելու համար՝ թերթիր տեղական և դաշնային հոսքերը։
tip_local_timeline: Տեղական հոսքում երևում են %{instance} հանգոյցի օգտատերի գրառումները։ Նրանք քո հանգոյցի հարևաններն են։
tips: Հուշումներ
users:
blocked_email_provider: Սույն էլփոստի տրամադրողը արգելված է
@ -855,3 +940,5 @@ hy:
verification:
explanation_html: Պիտակների յղումների հեղինակութիւնը կարելի է վաւերացնել։ Անհրաժեշտ է որ յղուած կայքը պարունակի յետադարձ յղում ձեր մաստադոնի էջին, որը <strong>պէտք է</strong> ունենայ <code>rel="me"</code> նիշքը։ Յղման բովանդակութիւնը կարևոր չէ։ Օրինակ՝
verification: Ստուգում
webauthn_credentials:
delete: Ջնջել

View File

@ -834,6 +834,7 @@ id:
request: Meminta arsip Anda
size: Ukuran
blocks: Anda blokir
bookmarks: Markah
csv: CSV
domain_blocks: Blokir domain
lists: Daftar
@ -909,6 +910,7 @@ id:
success: Data anda berhasil diupload dan akan diproses sesegera mungkin
types:
blocking: Daftar diblokir
bookmarks: Markah
domain_blocking: Daftar blokir domain
following: Daftar diikuti
muting: Daftar didiamkan
@ -1062,6 +1064,7 @@ id:
relationships:
activity: Aktivitas akun
dormant: Terbengkalai
follow_selected_followers: Ikuti pengikut yang dipilih
followers: Pengikut
following: Mengikuti
invited: Diundang

View File

@ -1074,6 +1074,7 @@ is:
relationships:
activity: Virkni aðgangs
dormant: Sofandi
follow_selected_followers: Fylgjast með völdum fylgjendum
followers: Fylgjendur
following: Fylgist með
invited: Boðið

View File

@ -844,6 +844,7 @@ it:
request: Chiedi il tuo archivio
size: Dimensioni
blocks: Stai bloccando
bookmarks: Segnalibri
csv: CSV
domain_blocks: Blocchi di dominio
lists: Liste
@ -920,6 +921,7 @@ it:
success: Le tue impostazioni sono state importate correttamente e verranno applicate in breve tempo
types:
blocking: Lista dei bloccati
bookmarks: Segnalibri
domain_blocking: Lista dei domini bloccati
following: Lista dei seguiti
muting: Lista dei silenziati
@ -1076,6 +1078,7 @@ it:
relationships:
activity: Attività dell'account
dormant: Dormiente
follow_selected_followers: Segui i seguaci selezionati
followers: Seguaci
following: Seguiti
invited: Invitato

View File

@ -183,7 +183,7 @@ ja:
search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー
search_same_ip: 同じ IP のユーザーを検索
sensitive: 閲覧注意
sensitized: 閲覧注意にする
sensitized: 閲覧注意済み
shared_inbox_url: Shared inbox URL
show:
created_reports: このアカウントで作られた通報
@ -198,7 +198,7 @@ ja:
time_in_queue: "%{time} 待ち"
title: アカウント
unconfirmed_email: 確認待ちのメールアドレス
undo_sensitized: 機密情報から戻す
undo_sensitized: 閲覧注意から戻す
undo_silenced: サイレンスから戻す
undo_suspension: 停止から戻す
unsubscribe: 購読の解除
@ -238,9 +238,11 @@ ja:
reopen_report: 通報を再度開く
reset_password_user: パスワードをリセット
resolve_report: 通報を解決済みにする
sensitive_account: アカウントのメディアを閲覧注意にマーク
silence_account: アカウントをサイレンス
suspend_account: アカウントを停止
unassigned_report: 通報の担当を解除
unsensitive_account: アカウントのメディアの閲覧注意マークを解除
unsilence_account: アカウントのサイレンスを解除
unsuspend_account: アカウントの停止を解除
update_announcement: お知らせを更新
@ -276,9 +278,11 @@ ja:
reopen_report: "%{name} さんが通報 %{target} を再び開きました"
reset_password_user: "%{name} さんが %{target} さんのパスワードをリセットしました"
resolve_report: "%{name} さんが通報 %{target} を解決済みにしました"
sensitive_account: "%{name} さんが %{target} さんのメディアを閲覧注意にマークしました"
silence_account: "%{name} さんが %{target} さんをサイレンスにしました"
suspend_account: "%{name} さんが %{target} さんを停止しました"
unassigned_report: "%{name} さんが通報 %{target} の担当を外しました"
unsensitive_account: "%{name} さんが %{target} さんのメディアの閲覧注意を解除しました"
unsilence_account: "%{name} さんが %{target} さんのサイレンスを解除しました"
unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました"
update_announcement: "%{name} さんがお知らせ %{target} を更新しました"
@ -825,6 +829,7 @@ ja:
request: アーカイブをリクエスト
size: 容量
blocks: ブロック
bookmarks: ブックマーク
csv: CSV
domain_blocks: 非表示にしたドメイン
lists: リスト
@ -900,6 +905,7 @@ ja:
success: ファイルは正常にアップロードされ、現在処理中です。しばらくしてから確認してください
types:
blocking: ブロックしたアカウントリスト
bookmarks: ブックマーク
domain_blocking: 非表示にしたドメインリスト
following: フォロー中のアカウントリスト
muting: ミュートしたアカウントリスト
@ -1020,6 +1026,7 @@ ja:
otp_authentication:
code_hint: 続行するには認証アプリで表示されたコードを入力してください
description_html: "<strong>二要素認証</strong>を有効にすると、ログイン時に認証アプリからコードを入力する必要があります。"
enable: 有効化
instructions_html: "<strong>Google Authenticatorか、もしくはほかのTOTPアプリでこのQRコードをスキャンしてください。</strong>これ以降、ログインするときはそのアプリで生成されるコードが必要になります。"
manual_instructions: 'QRコードがスキャンできず、手動での登録を希望の場合はこのシークレットコードを利用してください。:'
setup: セットアップ
@ -1052,6 +1059,7 @@ ja:
relationships:
activity: 活動
dormant: 非アクティブ
follow_selected_followers: 選択したフォロワーをフォロー
followers: フォロワー
following: フォロー中
invited: 招待済み
@ -1293,7 +1301,7 @@ ja:
two_factor_authentication:
add: 追加
disable: 無効化
disabled_success: 要素認証が更新されました
disabled_success: 段階認証が無効になりました
edit: 編集
enabled: 二段階認証は有効になっています
enabled_success: 二段階認証が有効になりました
@ -1319,7 +1327,7 @@ ja:
warning:
explanation:
disable: あなたのアカウントはログインが禁止され使用できなくなりました。しかしアカウントのデータはそのまま残っています。
sensitive: アップロードされたメディアファイルとリンクされたメディアは閲覧注意として扱われます。
sensitive: あなたのアップロードしたメディアファイルとリンク先のメディアは、閲覧注意として扱われます。
silence: あなたのアカウントは制限されましたがそのまま使用できます。ただし既にフォローしている人はあなたのトゥートを見ることができますが、様々な公開タイムラインには表示されない場合があります。また他のユーザーは今後も手動であなたをフォローすることができます。
suspend: あなたのアカウントは使用できなくなりプロフィールやその他データにアクセスできなくなりました。アカウントが完全に削除されるまではログインしてデータのエクスポートをリクエストできます。証拠隠滅を防ぐため一部のデータは削除されず残ります。
get_in_touch: このメールに返信することで %{instance} のスタッフと連絡を取ることができます。
@ -1328,13 +1336,13 @@ ja:
subject:
disable: あなたのアカウント %{acct} は凍結されました
none: "%{acct} に対する警告"
sensitive: あなたのアカウント %{acct} が投稿したメディアは閲覧注意にマークされました
sensitive: あなたのアカウント %{acct} の投稿メディアは閲覧注意とマークされました
silence: あなたのアカウント %{acct} はサイレンスにされました
suspend: あなたのアカウント %{acct} は停止されました
title:
disable: アカウントが凍結されました
none: 警告
sensitive: あなたのメディアが閲覧注意に指定されました
sensitive: あなたのメディアが閲覧注意とマークされました
silence: アカウントがサイレンスにされました
suspend: アカウントが停止されました
welcome:

View File

@ -836,6 +836,7 @@ ko:
request: 아카이브 요청하기
size: 크기
blocks: 차단
bookmarks: 보관함
csv: CSV
domain_blocks: 도메인 차단
lists: 리스트
@ -911,6 +912,7 @@ ko:
success: 파일이 정상적으로 업로드 되었으며, 현재 처리 중입니다
types:
blocking: 차단한 계정 목록
bookmarks: 보관함
domain_blocking: 도메인 차단 목록
following: 팔로우 중인 계정 목록
muting: 뮤트 중인 계정 목록
@ -1064,6 +1066,7 @@ ko:
relationships:
activity: 계정 활동
dormant: 휴면
follow_selected_followers: 선택한 팔로워들을 팔로우
followers: 팔로워
following: 팔로잉
invited: 초대됨

File diff suppressed because it is too large Load Diff

View File

@ -171,6 +171,8 @@ oc:
user: Uitlizaire
search: Cercar
search_same_ip: Autres utilizaires amb la meteissa IP
sensitive: Sensible
sensitized: marcar coma sensible
shared_inbox_url: URL de recepcion partejada
show:
created_reports: Senhalaments creats
@ -183,6 +185,7 @@ oc:
time_in_queue: En espèra a la fila %{time}
title: Comptes
unconfirmed_email: Adreça pas confirmada
undo_sensitized: Desmarcar coma sensible
undo_silenced: Levar lo silenci
undo_suspension: Levar la suspension
unsubscribe: Se desabonar
@ -198,6 +201,7 @@ oc:
create_account_warning: Crear un avertiment
create_announcement: Crear una anóncia
create_custom_emoji: Crear un emoji personalizat
create_ip_block: Crear una règla IP
demote_user: Retrogradar lutilizaire
destroy_announcement: Suprimir lanóncia
destroy_custom_emoji: Suprimir lemoji personalizat
@ -419,6 +423,8 @@ oc:
title: Filtre
title: Convits
ip_blocks:
add_new: Crear una règla
delete: Suprimir
expires_in:
'1209600': 2 setmanas
'15778476': 6 meses
@ -426,6 +432,9 @@ oc:
'31556952': 1 an
'86400': 1 jorn
'94670856': 3 ans
new:
title: Crear una règlas IP novèla
title: Règlas IP
pending_accounts:
title: Comptes en espèra (%{count})
relationships:
@ -700,7 +709,8 @@ oc:
prompt: Confirmatz lo senhal per dire de contunhar
date:
formats:
default: "%d %B de %Y"
default: "%e %B de %Y"
with_month_name: "%e %B de %Y"
datetime:
distance_in_words:
about_x_hours: "%{count} h"
@ -1207,8 +1217,8 @@ oc:
mastodon-light: Mastodon (Clar)
time:
formats:
default: Lo %d %b de %Y a %Ho%M
month: "%b de %Y"
default: Lo %e %B de %Y a %Ho%M
month: "%B de %Y"
two_factor_authentication:
disable: Desactivar
enabled: Autentificacion en dos temps activada

View File

@ -196,6 +196,8 @@ pl:
search: Szukaj
search_same_email_domain: Inni użytkownicy z e-mail w tej domenie
search_same_ip: Inni użytkownicy z tym samym IP
sensitive: Wrażliwe
sensitized: oznaczono jako wrażliwe
shared_inbox_url: Adres udostępnianej skrzynki
show:
created_reports: Zgłoszenia tego użytkownika
@ -210,6 +212,7 @@ pl:
time_in_queue: Czekanie w kolejce %{time}
title: Konta
unconfirmed_email: Niepotwierdzony adres e-mail
undo_sensitized: Cofnij oznaczenie
undo_silenced: Cofnij wyciszenie
undo_suspension: Cofnij zawieszenie
unsilenced_msg: Pomyślnie zwolniono z ograniczeń konto %{username}
@ -251,9 +254,11 @@ pl:
reopen_report: Otwórz zgłoszenie ponownie
reset_password_user: Resetuj hasło
resolve_report: Rozwiąż zgłoszenie
sensitive_account: Oznacz zawartość multimedialną swojego konta jako wrażliwą
silence_account: Wycisz konto
suspend_account: Zawieś konto
unassigned_report: Cofnij przypisanie zgłoszenia
unsensitive_account: Cofnij oznaczenie zawartości multimedialnej swojego konta jako wrażliwą
unsilence_account: Cofnij wyciszenie konta
unsuspend_account: Cofnij zawieszenie konta
update_announcement: Aktualizuj ogłoszenie
@ -289,9 +294,11 @@ pl:
reopen_report: "%{name} otworzył(a) ponownie zgłoszenie %{target}"
reset_password_user: "%{name} przywrócił(a) hasło użytkownikowi %{target}"
resolve_report: "%{name} rozwiązał(a) zgłoszenie %{target}"
sensitive_account: "%{name} oznaczył(a) zawartość multimedialną %{target} jako wrażliwą"
silence_account: "%{name} wyciszył(a) konto %{target}"
suspend_account: "%{name} zawiesił(a) konto %{target}"
unassigned_report: "%{name} cofnął(-ęła) przypisanie zgłoszenia %{target}"
unsensitive_account: "%{name} cofnął(-ęła) oznaczenie zawartości multimedialnej %{target} jako wrażliwą"
unsilence_account: "%{name} cofnął(-ęła) wyciszenie konta %{target}"
unsuspend_account: "%{name} cofnął(-ęła) zawieszenie konta %{target}"
update_announcement: "%{name} zaktualizował(-a) ogłoszenie %{target}"
@ -851,6 +858,7 @@ pl:
request: Uzyskaj archiwum
size: Rozmiar
blocks: Zablokowani
bookmarks: Zakładki
csv: CSV
domain_blocks: Blokady domen
lists: Listy
@ -929,6 +937,7 @@ pl:
success: Twoje dane zostały załadowane i zostaną niebawem przetworzone
types:
blocking: Lista blokowanych
bookmarks: Zakładki
domain_blocking: Lista zablokowanych domen
following: Lista śledzonych
muting: Lista wyciszonych
@ -1091,6 +1100,7 @@ pl:
relationships:
activity: Aktywność konta
dormant: Uśpione
follow_selected_followers: Zacznij śledzić wybranych śledzących
followers: Śledzący
following: Śledzeni
invited: Zaproszeni
@ -1238,6 +1248,8 @@ pl:
other: "%{count} głosy"
vote: Głosuj
show_more: Pokaż więcej
show_newer: Pokaż nowsze
show_older: Pokaż starsze
show_thread: Pokaż wątek
sign_in_to_participate: Zaloguj się, aby udzielić się w tej konwersacji
title: '%{name}: "%{quote}"'
@ -1374,6 +1386,7 @@ pl:
warning:
explanation:
disable: Kiedy Twoje konto jest wyłączone, Twoje dane pozostają na serwerze, ale nie możesz wykonywać żadnych działań, zanim zostanie odblokowane.
sensitive: Wysyłane przez Ciebie pliki multimedialne i media z odnośników będą traktowane jako wrażliwe.
silence: Kiedy Twoje konto jest ograniczone, tylko osoby które je śledzą będą widzieć Twoje wpisy. Może ono też przestać być widoczne na publicznych listach. Inni wciąż mogą zacząć Cię śledzić.
suspend: Twoje konto zostało zawieszone i wszystkie Twoje wpisy wraz z zawartością multimedialną zostały nieodwracalnie usunięte z tego serwera i serwerów, których użytkownicy śledzili Cię.
get_in_touch: Możesz odpowiedzieć na ten e-mail aby pozostać w kontakcie z prowadzącymi %{instance}.
@ -1382,11 +1395,13 @@ pl:
subject:
disable: Twoje konto %{acct} zostało wyłączone
none: Ostrzeżenie dla %{acct}
sensitive: Zawartość multimedialna publikowana przez Twoje konto %{acct} została oznaczona jako wrażliwa
silence: Twoje konto %{acct} zostało ograniczone
suspend: Twoje konto %{acct} zostało zawieszone
title:
disable: Konto wyłączone
none: Ostrzeżenie
sensitive: Twoja zawartość multimedialna została oznaczona jako wrażliwa
silence: Konto ograniczone
suspend: Konto zawieszone
welcome:

View File

@ -188,6 +188,8 @@ pt-BR:
search: Pesquisar
search_same_email_domain: Outros usuários com o mesmo domínio de e-mail
search_same_ip: Outros usuários com o mesmo IP
sensitive: Sensíveis
sensitized: marcadas como sensíveis
shared_inbox_url: Link da caixa de entrada compartilhada
show:
created_reports: Denúncias desta conta
@ -202,6 +204,7 @@ pt-BR:
time_in_queue: Esperando na fila por %{time}
title: Contas
unconfirmed_email: E-mail não confirmado
undo_sensitized: Desfazer sensível
undo_silenced: Desfazer silêncio
undo_suspension: Desbanir
unsilenced_msg: Removidas com sucesso as limitações da conta de %{username}
@ -243,9 +246,11 @@ pt-BR:
reopen_report: Reabrir Relatório
reset_password_user: Redefinir a senha
resolve_report: Resolver Relatório
sensitive_account: Marcar a mídia na sua conta como sensível
silence_account: Silenciar conta
suspend_account: Suspender Conta
unassigned_report: Remover relatório
unsensitive_account: Desmarcar a mídia na sua conta como sensível
unsilence_account: Desfazer silenciar conta
unsuspend_account: Remover suspensão de conta
update_announcement: Editar anúncio
@ -281,9 +286,11 @@ pt-BR:
reopen_report: "%{name} reabriu a denúncia %{target}"
reset_password_user: "%{name} redefiniu a senha do usuário %{target}"
resolve_report: "%{name} resolveu a denúncia %{target}"
sensitive_account: "%{name} marcou a mídia de %{target} como sensível"
silence_account: "%{name} silenciou a conta de %{target}"
suspend_account: "%{name} baniu a conta de %{target}"
unassigned_report: "%{name} largou a denúncia %{target}"
unsensitive_account: "%{name} desmarcou a mídia de %{target} como sensível"
unsilence_account: "%{name} desativou o silêncio de %{target}"
unsuspend_account: "%{name} removeu a suspensão da conta de %{target}"
update_announcement: "%{name} atualizou o anúncio %{target}"
@ -1067,6 +1074,7 @@ pt-BR:
relationships:
activity: Atividade da conta
dormant: Inativo
follow_selected_followers: Seguir os seguidores selecionados
followers: Seguidores
following: Seguindo
invited: Convidado
@ -1202,6 +1210,8 @@ pt-BR:
other: "%{count} votos"
vote: Votar
show_more: Mostrar mais
show_newer: Mostrar mais recentes
show_older: Mostrar mais antigos
show_thread: Mostrar conversa
sign_in_to_participate: Entre para participar dessa conversa
title: '%{name}: "%{quote}"'
@ -1338,6 +1348,7 @@ pt-BR:
warning:
explanation:
disable: Enquanto sua conta está congelada, seus dados de conta permanecem intactos, mas você não pode realizar nenhuma ação até que esteja destrancada.
sensitive: Seus arquivos de mídia carregados e mídias vinculadas serão tratados como sensíveis.
silence: Enquanto sua conta está silenciada, somente pessoas que já estão seguindo você poderão ver seus toots nessa instância, e você pode ser excluído de várias listas públicas. No entanto, outros ainda podem te seguir manualmente.
suspend: Sua conta foi banida e todos os seus toots e mídias foram irreversivelmente excluídos desta instância e das instâncias dos seus seguidores.
get_in_touch: Você pode responder a este e-mail para entrar em contato com a equipe de %{instance}.
@ -1346,11 +1357,13 @@ pt-BR:
subject:
disable: Sua conta %{acct} foi bloqueada
none: Aviso para %{acct}
sensitive: Sua conta %{acct} de postagem de mídia foi marcada como sensível
silence: Sua conta %{acct} foi silenciada
suspend: Sua conta %{acct} foi banida
title:
disable: Conta bloqueada
none: Aviso
sensitive: Sua mídia foi marcada como sensível
silence: Conta silenciada
suspend: Conta banida
welcome:

View File

@ -842,6 +842,7 @@ pt-PT:
request: Pede o teu arquivo
size: Tamanho
blocks: Bloqueaste
bookmarks: Itens Salvos
csv: CSV
domain_blocks: Bloqueios de domínio
lists: Listas
@ -918,6 +919,7 @@ pt-PT:
success: Os teus dados foram enviados com sucesso e serão processados em breve
types:
blocking: Lista de bloqueio
bookmarks: Itens salvos
domain_blocking: Lista de domínios bloqueados
following: Lista de pessoas que estás a seguir
muting: Lista de utilizadores silenciados
@ -1074,6 +1076,7 @@ pt-PT:
relationships:
activity: Atividade da conta
dormant: Inativo
follow_selected_followers: Seguir seguidores selecionados
followers: Seguidores
following: A seguir
invited: Convidado

View File

@ -863,6 +863,7 @@ ru:
request: Запросить ваш архив
size: Размер
blocks: Список блокировки
bookmarks: Закладки
csv: CSV
domain_blocks: Доменные блокировки
lists: Списки
@ -941,6 +942,7 @@ ru:
success: Ваши данные были успешно загружены и будут обработаны с должной скоростью
types:
blocking: Список блокировки
bookmarks: Закладки
domain_blocking: Список доменных блокировок
following: Подписки
muting: Список глушения
@ -1103,6 +1105,7 @@ ru:
relationships:
activity: Активность учётной записи
dormant: Заброшенная
follow_selected_followers: Подписаться на выбранных подписчиков
followers: Подписчики
following: Подписки
invited: Приглашённые

View File

@ -29,7 +29,7 @@ eo:
phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo
scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn.
setting_aggregate_reblogs: Ne montri novajn diskonigojn de mesaĝoj laste diskonigitaj (nur efikas al novaj diskonigoj)
setting_default_sensitive: Sentema komunikilo estas kaŝita defaŭlte kaj povas esti rivelita per alklako
setting_default_sensitive: Tiklaj aŭdovidaĵoj estas defaŭlte kaŝita kaj povas esti malkiŝita per klako
setting_display_media_default: Kaŝi aŭdovidaĵojn markitajn kiel tiklaj
setting_display_media_hide_all: Ĉiam kaŝi ĉiujn aŭdovidaĵojn
setting_display_media_show_all: Ĉiam montri aŭdovidaĵojn markitajn kiel tiklaj

View File

@ -205,7 +205,7 @@ fr:
recommended: Recommandé
required:
mark: "*"
text: Champs requis
text: champs requis
title:
sessions:
webauthn: Utilisez l'une de vos clés de sécurité pour vous connecter

View File

@ -65,6 +65,8 @@ hy:
data: CSV ֆայլը ներմուծուել է Մաստոդոնի այլ սերուերից
invite_request:
text: Սա կօգնի մեզ ստուգել քո յաւելուածը
ip_block:
ip: Ներմուծէք IPv4 կամ IPv6 հասցէն։ Նաև կարող ես արգելափակել հասցէների միջակայքեր օգտագործելով CIDR սինտաքսը։ Զգոյշ եղիր՝ ինքդ քեզ չարգելափակես։
sessions:
otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝
tag:
@ -168,6 +170,13 @@ hy:
comment: Մեկնաբանություն
invite_request:
text: Ինչո՞ւ ես ցանկանում միանալ
ip_block:
comment: Մեկնաբանություն
ip: IP
severities:
no_access: Մուտքը արգելել
sign_up_requires_approval: Սահմանափակել գրանցումները
severity: Կանոն
notification_emails:
digest: Ուղարկել դասակարգուած իմակներ
favourite: Որեւէ մեկը հաւանեց գրառումդ

View File

@ -1 +1,211 @@
--- {}
---
ku:
simple_form:
hints:
account_alias:
acct: دیاریکردنی username@domain ئەو هەژمارە کە دەتەوێت بیگوازیەوە لە
account_migration:
acct: دیاریکردنی username@domain ئەو هەژمارە کە دەتەوێت بیگوازیەوە لە
account_warning_preset:
text: دەتوانی ڕستەسازی ی توت بەکاربێنیت، وەک لینک، هاشتاگ و باسەکان
title: ئارەزوومەندانە. دیار نیە بۆ وەرگر
admin_account_action:
include_statuses: بەکارهێنەرەکە دەبینێت کام توتی هۆکاری کرداری بەڕێوەبەر یان ئاگادارکردنەوە
send_email_notification: بەکارهێنەر ڕوننکردەوەیەک دەبینێت کە تێدا دەزانێت چی بە سەر هەژمارەکەی هاتووە
text_html: ئارزوومەندانە. دەتوانن وەک توتی ئاسایی بینووسن. دەتوانن بۆ کەمکردنەوەی کات <a href="%{path}">ئاگادارییەکان لە پێشەوە زیادبکەن</a>
type_html: گەرکتە لەگەڵ هەژمارەی <strong>%{acct}</strong> چی بکەیت
warning_preset_id: ئارەزوومەندانەیە. هێشتا دەتوانیت لە کۆتایی دەق شتێک زیاد بکەی
announcement:
all_day: کاتێک چاودێریکرا، تەنها بەروارەکانی مەودای کات پیشان دەدرێت
ends_at: ئارەزوومەندانەیە. ئەم کاتە راگەیەنراوەکە بە شێوەیەکی خۆکارانە بڵاوناکرێتەوە
scheduled_at: چۆڵ یبهێڵەوە بۆ بڵاوکردنەوەی دەستبەجێی بانگەوازەکە
starts_at: ئارەزوومەندانەیە. لە حاڵەتی ڕاگەیاندنی تۆ بەستراو بە مەودایەکی کاتی دیاریکراو
text: دەتوانیت ڕستەسازی توت بەکار بێنیت. تکایە بیر لەو بۆشاییە بکەوە کە بانگەوازەکە لەسەر شاشەی بەکارهێنەرەکە دەست نیشان دەکات
defaults:
autofollow: ئەو کەسانەی کە لە ڕێگەی بانگهێشتکردنەوە تۆمار دەکرێن بە خۆکارانە شوێنت دەکەون
avatar: PNG, GIF یان JPG. لە زۆربەی %{size}. دەبێتە ئەندازەیەکی کەمکراوە بۆ %{dimensions}px
bot: ئەم هەژمارە بەشێوەیەکی سەرەکی کردارە خۆکارانە ئەنجام دەدات و لەوانەیە چاودێری نەکرێت
context: یەک یان چەند دەقێک کە پالافتنەکە جێبەجێ بکات
current_password: بۆ مەبەستی پاراستن تکایە تێپەروشەی هەژمارەی ئێستاکەت بنووسە
current_username: بۆ دڵنیابوون، تکایە ناوی بەکارهێنەری ئەم هەژمارەیە بنووسە
digest: تەنیا دوای ماوەیەکی زۆر لە بێ چالاکیدەنێردرێت و تەنیا ئەگەر نامەیەکی کەسیت بۆ نووسرابێت
discoverable: پێرستی هەڵبژاردەی بەکارهێنەران،تەنها ڕیگایەکی دیکەیە بۆ گەیشتنی بەکارهێنەری فرەتر بۆ هەژمارەکەت
email: ئیمەیڵێکی پشتڕاستکردنەوەت بۆ دەنێردرێت
fields: دەتوانیت تا ٤بڕگەت هەبێت کە وەک خشتەیەک لەسەر پرۆفایلەکەت پیشان بدرێت
header: PNG, GIF یان JPG. لە زۆربەی %{size}. دەبێتە ئەندازەیەکی کەمکراوە بۆ %{dimensions}پیکسێڵ
inbox_url: نیشانەی پەڕەی سەرەکی ئەو رێڵە کە هەرەکتە بەکاریببەیت ڕوونووس دەکات
irreversible: توتە فلتەرکراوەکە بە شێوەیەکی نەگەڕاو فرەدەدرێن، تەنانەت ئەگەر فلتەردواتر لاببرێت
locale: زمانی ڕووکاری بەکارهێنەر، ئیمەیلەکان و ئاگانامەکان
locked: بە دەستی شوێنکەوتوانی خۆت پەسەند بکە
password: بەلایەنی کەمەوە ٨ نووسە بەکاربهێنە
phrase: سەربەخۆ لە بچکۆلی و گەورەیی پیتەکان، لەگەڵ دەقی ئەسڵی یان ئاگانامەکانی ناوەرۆکی توتەکان هاوئاهەنگ دەکرێت
scopes: APIـیەکانی بەرنامەنووسی کە ئەم ماڵپەڕە دەستپێگەیشتنی لەگەڵیان هیە. ئەگەر بەرزترین ئاست هەڵبژێرن ئیتر نیاز بە بژاردەی ئاستی نزم نییە.
setting_aggregate_reblogs: بۆ ئەو دووبارە توتانە کە بە نوێیی پێتان نیشان دراوە،دووبارە توتەکانی پێشتر زیاد مەکە(تەنها کاریگەری لەسەر توتەکانی ئەم دواییە هەیە)
setting_default_sensitive: میدیای هەستیار لە بنەڕەت شاراوەیە و دەتوانرێت بە کلیکیک ئاشکرا بکرێت
setting_display_media_default: شاردنەوەی ئەو میدیایانەی وەک هەستیار نیشانکراون
setting_display_media_hide_all: هەمیشە میدیا بشارەوە
setting_display_media_show_all: هەمیشە میدیا نیشان بدە
setting_hide_network: کێ دوای دەکەویت و کێ دوای تۆ دەکەوێت لە پرۆفایلەکەت پیشان نادرێت
setting_noindex: کاردەکاتە سەر پرۆفایل و لاپەڕە گشتیەکانت
setting_show_application: بەرنامەیەک کە بە یارمەتیت توت دەکەیت، لە دیمەنی وردی توتەکان پیشان دەدرێت
setting_use_blurhash: سێبەرەکان لە سەر بنەمای ڕەنگەکانی بەکارهاتوو لە وێنە داشاراوەکان دروست دەبن بەڵام وردەزانیاری وێنە تێیدا ڕوون نییە
setting_use_pending_items: لەجیاتی ئەوەی بە خۆکارانە کێشان هەبێت لە نووسراوەکان بە کرتەیەک بەڕۆژبوونی پێرستی نووسراوەکان بشارەوە
username: ناوی بەکارهێنەری ئێوە لەسەر %{domain} یەکتا دەبێت
whole_word: کاتێک کلیل‌وشە بریتییە لە ژمارە و پیت، تنەها کاتێک پەیدا دەبێت کە لەگەڵ گشتی وشە لە نێو دەقەکە هاوئاهەنگ بێت، نە تەنها لەگەڵ بەشێک لە وشە
domain_allow:
domain: ئەم دۆمەینە دەتوانێت دراوە لە ئەم ڕاژە وەربگرێت و دراوەی ئەم دۆمەینە لێرە ڕێکدەخرین و پاشکەوت دەکرێن
email_domain_block:
domain: ئەمە دەکرێت ناوی دۆمەینەکە بێت کە لە ناونیشانی ئیمەیلدا دەرکەوێ، تۆماری MX کە دۆمەین چارەسەری دەکات یان IPی ڕاژەکە کە تۆماری MX چارەسەری دەکات. ئەوانە دەپشکنن لەسەر تۆمارکردنی بەکارهێنەر و تۆمارکردن ڕەت دەکرێت.
with_dns_records: هەوڵێک بۆ چارەسەرکردنی تۆمارەکانی DNSی دۆمەین دراوە کە ئەنجامەکان بلۆک دەکرێت
featured_tag:
name: 'لەوانەیە بتەوێت یەکێک لەمانە بەکاربهێنیت:'
form_challenge:
current_password: تۆ دەچیتە ناو ناوچەی پارێزراو
imports:
data: فایلی CSV هەناردەکراوە لە ڕاژەیەکی تری ماستۆدۆن
invite_request:
text: ئەمە یارمەتیمان دەدات بۆ پێداچوونەوەی بەرنامەکەت
ip_block:
comment: دڵخوازە. لەبیرتە بۆچی ئەم یاسایەت زیاد کرد.
expires_in: ناونیشانی IP سەرچاوەی سنوردارن، هەندێک جار هاوبەشکراون و زۆر جار دەستەکان دەگۆڕن. لەبەر ئەم هۆیە، بلۆکی IP بێ نەناسراو پێشنیار نەکراوە.
ip: ناونیشانی IPv4 یان IPv6 تێبنووسە. دەتوانیت هەموو مەوداکان بلۆک بکەیت بە بەکارهێنانی داڕستانی CIDR. وریابە خۆت قفڵ مەکە!
severities:
no_access: بلۆککردنی گەیشتن بە هەموو سەرچاوەکان
sign_up_requires_approval: نوێ ناوتۆمارکردن پێویستی بە ڕەزامەندی تۆیە
severity: هەڵبژێرە چی ڕوودەدات لەگەڵ داواکاریەکانی ئەم IP
sessions:
otp: 'کۆدی دوو-فاکتۆر بنووسە کە لەلایەن ئەپی تەلەفۆنەکەتەوە دروست کراوە یان یەکێک لە کۆدەکانی هێنانەوەی خۆت بەکاربهێنە:'
webauthn: ئەگەر کلیلی USB بێت دڵنیابە لە تێکردنی و ئەگەر پێویست بوو، لێیبدە.
tag:
name: ئێوە دەتوانن گەورەیی و بجکۆلیی پیتەکان دەستکاری بکەن تاکوو خوێنەوارتر دیاربن
user:
chosen_languages: کاتێک چاودێری کرا، تەنها توتەکان بە زمانە دیاریکراوەکان لە هێڵی‌کاتی گشتی پیشان دەدرێت
labels:
account:
fields:
name: ناونیشان
value: ناوەڕۆک
account_alias:
acct: چارەسەرکردنی هەژمارە کۆنەکە
account_migration:
acct: چارەسەرکردنی هەژمارە نوێکە
account_warning_preset:
text: دەقی پێشوەختی ڕێکخستن
title: سەردێڕ
admin_account_action:
include_statuses: لەخۆگرتنی توتەکانی گوزارشت لە ئیمەیل
send_email_notification: بەکارهێنەر ئاگادار بکەوە بۆ هەر ئیمەیڵێک
text: ئاگاداری تایبەتمەند
type: کردار
types:
disable: بەستن
none: ناردنی ئاگاداری
silence: سنوور
suspend: ڕاگرتن
warning_preset_id: بەکاهێنانی ئاگاداری پێش وەختە
announcement:
all_day: ڕووداوی هەموو ڕۆژەکە
ends_at: کۆتایی ڕووداو
scheduled_at: بڵاوکراوەکە خشتە بکە
starts_at: دەستپێکردنی ڕووداو
text: بانگەواز
defaults:
autofollow: بانگهێشت کردن بۆ شوێنکەوتنی هەژمارەکەت
avatar: وێنۆچکە
bot: ئەمە هەژمارێکی ساختەیە
chosen_languages: پاڵاوتنی زمانەکان
confirm_new_password: پشتڕاستکردنەوەی تێپەڕوشەی نوێ
confirm_password: پشتڕاستکردنەوەی تێپەڕوشە
context: چوارچێوەی پاڵافتن
current_password: تێپەروشەی ئێستا
data: دراوه
discoverable: ئەم هەژمێرە لە پێرستی بژاردەی بەکارهێنەران نیشان بدە
display_name: ناوی پیشاندان
email: ناونیشانی ئیمەیڵ
expires_in: بەسەردەچێت پاش
fields: مێتاداتای پرۆفایل
header: سەرپەڕە
inbox_url: بەستەری سندوقی گواستنەوەی
irreversible: فرێدان لەجیاتی شاردنەوە
locale: زمانی پەڕەی بەکارهێنەر
locked: داخستنی هەژمارە
max_uses: زۆرترین ژمارەی بەکاربەرەکان
new_password: تێپەروشەی نوێ
note: دەربارەی ئیوە
otp_attempt: کۆدی دووقۆناغی هاتنەژوور
password: تێپەڕوشە
phrase: وشەکلیل یان دەستەواژە
setting_advanced_layout: چالاککردنی ڕووکاری وێبی پێشکەوتوو
setting_aggregate_reblogs: گرووپی توتەکان یەکبخە
setting_auto_play_gif: خۆکاربەخشکردنی GIFــەکان
setting_boost_modal: پیشاندانی دیالۆگی دووپاتکردنەوە پێش دوبارە توتاندن
setting_crop_images: لە تووتی نەکراوە،وینەکان لە ئەندازی ۱٦×۹ ببڕە
setting_default_language: زمانی نووسراوەکانتان
setting_default_privacy: چوارچێوەی تایبەتێتی ئێوە
setting_default_sensitive: هەمیشە نیشانکردنی میدیا وەک هەستیار
setting_delete_modal: نیساندانی پەیامی پەسەند کردن پاش سڕینەوە
setting_disable_swiping: جوڵەی سڕینەوە لە کاربخە
setting_display_media: پیشاندانی میدیا
setting_display_media_default: بنەڕەت
setting_display_media_hide_all: شاردنەوەی هەموو
setting_display_media_show_all: هەموو نیشان بدە
setting_expand_spoilers: هەمیشە ئەو توتانەی کە بە ئاگادارکردنەوەکانی ناوەڕۆکەوە نیشانەکراون، پیسان بدە
setting_hide_network: شاردنەوەی تۆڕەکەت
setting_noindex: داوا لە مەکینەی گەڕان بۆ پیشاننەدان لە دەئەنجامی گەڕانەکان
setting_reduce_motion: کەمکردنەوەی جوڵە لە ئەنیمەکان
setting_show_application: ئاشکراکردنی ئەپەکان بۆ ناردنی توتەکان
setting_system_font_ui: فۆنتی بنەڕەتی سیستەم بەکاربهێنە
setting_theme: ڕووکاری ماڵپەڕ
setting_trends: پیشاندانی نووسراوە بەرچاوکراوەی ئەمڕۆ
setting_unfollow_modal: پیشاندانی پەیامی پەسەندکردن پێش شوێن‌نەکەوتنی کەسێک
setting_use_blurhash: بەجیاتی وینەی داشاراوە، سێبەری ڕەنگاوڕەنگ نیشان بدە
setting_use_pending_items: دۆخی خاو
severity: ئاستی گرنگی
sign_in_token_attempt: کۆدی پاراستن
type: جۆری هاوردەکردن
username: ناوی بەکارهێنەر
username_or_email: ناوی بەکاهێنەر یان ئیمەیڵ
whole_word: هەموو وشەکە
email_domain_block:
with_dns_records: لەخۆگرتنی تۆمارەکانی MX و ئای پییەکانی دۆمەین
featured_tag:
name: هەشتاگ
interactions:
must_be_follower: قەپاتکردنی ئاگانامەکان بێجگە لە شوێنکەوتووان
must_be_following: بەئاگانامەکان بلۆک بکە لە خەڵکێک کە پەیڕەویان ناکەیت
must_be_following_dm: پەیامەکانی ڕاستەوخۆ بلۆک بکە لەو کەسانەی کە، پەیڕەوی ناکەن
invite:
comment: بۆچوون
invite_request:
text: بۆچی دەتەوێت بەشدار بیت?
ip_block:
comment: بۆچوون
ip: IP
severities:
no_access: بلۆککردنی ده‌ستپێگه‌یشتن
sign_up_requires_approval: سنووردارکردنی چوونەناو
severity: یاسا
notification_emails:
digest: کورتکردنی ئاگادارییکەن لەیەک ئیمەیل
favourite: کەسێک دۆخی تۆی بەدڵ بوو
follow: کەسێک دوای تۆ کەوت
follow_request: کەسێک داوای کردووە کە بەدوات بکەوێت
mention: کەسێک باسی کردووی
pending_account: هەژمارەی نوێ پێویستی بە پێداچوونەوەهەیە
reblog: کاتێک کەسێک نووسراوەی ئێوە دووبارە توت دەکاتەوە
report: گوزارشتی نوێ پێشکەش کراوە
trending_tag: کاتێک هاشتاگێکی پێدانەچوو هۆگری فرە بوو، ئیمەیلێک بنێرە
tag:
listable: ڕیگەبدە ئەم هاشتاگە لە پێرستی هەڵبژاردەی بەکارهێنەران و پەڕەی گەڕان نیشان بدرێت
name: هەشتاگ
trendable: ڕێگەبدە ئەم هەشتاگە لە نووسراوەی بەرچاوکراو نیسان بدرێت
usable: ڕێگەبدە بە توتەکان بۆ بەکارهێنانی ئەم هەشتاگە
'no': نە
recommended: پێشنیارکراوە
required:
mark: "*"
text: پێویستە
title:
sessions:
webauthn: یەکێک لە کلیلەکانی پاراستن بەکاربهێنە بۆ چوونە ژوورەوە
'yes': بەڵێ

View File

@ -67,6 +67,11 @@ oc:
text: Aquò nos ajudarà per validar vòstra demanda
ip_block:
comment: Opcional. Remembratz-vos perque ajustèretz aquesta règla.
expires_in: Las adreças IP son una ressorsa finida, son de còps partejadas e càmbian sovent de mans. Per aquesta rason, los blocatges dIP sens fin son pas recomandats.
ip: Dintratz una adreça IPv4 o IPv6. Podètz blocar de plajas entièras en utilizant la sintaxi CIDR. Agachatz de pas vos blocar defòra!
severities:
no_access: Blocar laccès a totas las ressorsas
sign_up_requires_approval: Las inscripcions novèlas requeriràn vòstra validacion
severity: Causissètz que far amb las requèstas daquesta IP
sessions:
otp: 'Picatz lo còdi dautentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion:'

View File

@ -100,6 +100,7 @@ pl:
types:
disable: Wyłącz
none: Nie rób niczego
sensitive: Wrażliwe
silence: Wycisz
suspend: Zawieś i nieodwracalnie usuń dane konta
warning_preset_id: Użyj szablonu ostrzeżenia

View File

@ -100,6 +100,7 @@ pt-BR:
types:
disable: Congelar
none: Não fazer nada
sensitive: Sensível
silence: Silenciar
suspend: Banir e excluir irreversivelmente dados da conta
warning_preset_id: Usar um aviso pré-definido

View File

@ -7,12 +7,12 @@ vi:
account_migration:
acct: Nhập tên_người_dùng@máy chủ của tài khoản bạn muốn dời sang
account_warning_preset:
text: Bạn có thể sử dụng URL, hashtag và nhắc đến
text: Bạn có thể ng URL, hashtag và nhắc đến
title: Tùy chọn. Không cho người nhận xem
admin_account_action:
include_statuses: Người dùng sẽ thấy các tút bị kiểm duyệt hoặc cảnh cáo
include_statuses: Người dùng sẽ thấy các tút bị kiểm duyệt
send_email_notification: Người dùng sẽ nhận được lời giải thích về những gì xảy ra với tài khoản của họ
text_html: Tùy chọn. Bạn nên sử dụng <a href="%{path}">cảnh cáo cài sẵn</a> để tiết kiệm thời gian
text_html: Tùy chọn. Bạn nên ng <a href="%{path}">cảnh cáo cài sẵn</a> để tiết kiệm thời gian
type_html: Chọn làm gì với <strong>%{acct}</strong>
warning_preset_id: Tùy chọn. Bạn vẫn có thể thêm ghi chú riêng
announcement:
@ -20,7 +20,7 @@ vi:
ends_at: Tùy chọn. Thông báo sẽ tự động hủy vào lúc này
scheduled_at: Để trống nếu muốn đăng thông báo ngay lập tức
starts_at: Tùy chọn. Trong trường hợp thông báo của bạn đăng vào một khoảng thời gian cụ thể
text: Bạn có thể sử dụng tút dạng cú pháp. Cố gắng ngắn gọn bởi vì thông báo sẽ xuất hiện trên màn hình điện thoại của người dùng
text: Bạn có thể dùng URL, hashtag và nhắc đến. Cố gắng ngắn gọn bởi vì thông báo sẽ xuất hiện trên màn hình điện thoại của người dùng
defaults:
autofollow: Những người đăng ký sẽ tự động theo dõi bạn
avatar: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
@ -33,11 +33,11 @@ vi:
email: Bạn sẽ được gửi một email xác nhận
fields: Được phép tạo tối đa 4 mục trên trang cá nhân của bạn
header: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
inbox_url: Sao chép URL của relay mà bạn muốn sử dụng
inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng
irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc
locale: Ngôn ngữ của giao diện, email và thông báo đẩy
locked: Tự bạn sẽ phê duyệt người theo dõi
password: Sử dụng ít nhất 8 ký tự
password: ng ít nhất 8 ký tự
phrase: Sẽ được hiện thị trong văn bản hoặc cảnh báo nội dung của một tút
scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn quyền hạn cấp cao nhất, bạn không cần chọn từng phạm vi.
setting_aggregate_reblogs: Nếu một tút đã được chia sẻ thì những lượt chia sẻ sau sẽ không hiển thị trên bảng tin nữa
@ -58,7 +58,7 @@ vi:
domain: Đây có thể là tên miền hoặc IP của dịch vụ email. Người dùng của những dịch vụ email này sẽ bị từ chối khi đăng ký.
with_dns_records: Nếu DNS có vấn đề, nó sẽ bị đưa vào danh sách cấm
featured_tag:
name: 'Những hashtag khuyến nghị bạn sử dụng:'
name: 'Những hashtag gợi ý cho bạn:'
form_challenge:
current_password: Biểu mẫu này an toàn
imports:
@ -67,14 +67,14 @@ vi:
text: Điều này sẽ giúp chúng tôi phê duyệt đăng ký của bạn
ip_block:
comment: Tùy chọn. Hãy cho biết lý do bạn chặn IP này.
expires_in: Có thể sẽ có nhiều người khác nhau sử dụng chung một địa chỉ IP. Vì vậy, bạn nên xem xét không nên chặn IP nào đó vĩnh viễn.
expires_in: Có thể sẽ có nhiều người khác nhau dùng chung một địa chỉ IP. Vì vậy, bạn nên cân nhắc không nên chặn IP nào đó vĩnh viễn.
ip: Nhập một địa chỉ IPv4 hoặc IPv6. Bạn cũng có thể chặn toàn bộ dãy IP bằng cú pháp CIDR. Hãy cẩn thận đừng chặn nhầm toàn bộ!
severities:
no_access: Chặn truy cập từ tất cả IP này
sign_up_requires_approval: Bạn sẽ phê duyệt những đăng ký mới từ IP này
severity: Chọn hành động nếu nhận được yêu cầu từ IP này
sessions:
otp: 'Nhập mã xác thực hai yếu tố được tạo bởi ứng dụng điện thoại của bạn hoặc sử dụng một trong các mã khôi phục của bạn:'
otp: 'Nhập mã xác thực hai bước được tạo bởi ứng dụng điện thoại của bạn hoặc dùng một trong các mã khôi phục của bạn:'
webauthn: Nếu đây là USB key, hãy cắm vào và thử xoay chiều.
tag:
name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn
@ -99,11 +99,11 @@ vi:
type: Hành động
types:
disable: Tạm khóa
none: Gửi cảnh cáo
none: Cấm upload
sensitive: Nhạy cảm
silence: Tạm ẩn
suspend: Vô hiệu hóa
warning_preset_id: Sử dụng cảnh cáo cài sẵn
warning_preset_id: ng cảnh cáo cài sẵn
announcement:
all_day: Sự kiện diễn ra hằng ngày
ends_at: Kết thúc sự kiện
@ -130,7 +130,7 @@ vi:
irreversible: Xóa bỏ vĩnh viễn
locale: Ngôn ngữ
locked: Đây là tài khoản riêng tư
max_uses: Số lần sử dụng tối đa
max_uses: Số lần ng tối đa
new_password: Mật khẩu mới
note: Tiểu sử
otp_attempt: Xác thực hai bước
@ -155,7 +155,7 @@ vi:
setting_noindex: Không xuất hiện trong công cụ tìm kiếm
setting_reduce_motion: Giảm chuyển động ảnh GIF
setting_show_application: Hiện ứng dụng đã dùng để đăng tút
setting_system_font_ui: Sử dụng phông chữ mặc định của hệ thống
setting_system_font_ui: ng phông chữ mặc định của hệ thống
setting_theme: Giao diện
setting_trends: Hiển thị xu hướng hôm nay
setting_unfollow_modal: Yêu cầu xác nhận trước khi hủy theo dõi ai đó
@ -200,7 +200,7 @@ vi:
listable: Cho phép hashtag này xuất hiện trong tìm kiếm và trên tiểu sử cá nhân
name: Hashtag
trendable: Cho phép hashtag này xuất hiện trong xu hướng
usable: Cho phép sử dụng hashtag này trong tút
usable: Cho phép ng hashtag này trong tút
'no': Tắt
recommended: Khuyến nghị
required:

View File

@ -168,6 +168,8 @@ zh-HK:
comment: 備註
invite_request:
text: 加入的原因
ip_block:
ip: IP 地址
notification_emails:
digest: 定期電郵摘要
favourite: 當有用戶喜歡你的文章時,發電郵通知

View File

@ -24,6 +24,7 @@ zh-TW:
current_password: 因安全因素,請輸入目前帳戶的密碼
current_username: 請輸入目前帳戶的使用者名稱以確認
digest: 僅在你長時間未登入且在未登入期間收到私訊時傳送
discoverable: 加入個人資料目錄能接觸更多閱聽眾
email: 您將收到一封確認電子郵件
fields: 您可在個人資料上有至多 4 個以表格形式顯示的項目
header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會按比例縮小成 %{dimensions} 像素

View File

@ -842,6 +842,7 @@ sq:
request: Kërkoni arkivin tuaj
size: Madhësi
blocks: Bllokoni
bookmarks: Faqerojtës
csv: CSV
domain_blocks: Bllokime përkatësish
lists: Lista
@ -918,6 +919,7 @@ sq:
success: Të dhënat tuaja u ngarkuan me sukses dhe tani do të përpunohet në kohë
types:
blocking: Listë bllokimesh
bookmarks: Faqerojtës
domain_blocking: Listë bllokimesh përkatësish
following: Listë ndjekjesh
muting: Listë heshtimesh
@ -1074,6 +1076,7 @@ sq:
relationships:
activity: Veprimtari llogarie
dormant: Në gjumë
follow_selected_followers: Ndiq ndjekësit e përzgjedhur
followers: Ndjekës
following: Ndjek
invited: Të ftuar

View File

@ -642,6 +642,7 @@ sv:
request: Efterfråga ditt arkiv
size: Storlek
blocks: Du blockerar
bookmarks: Bokmärken
csv: CSV
lists: Listor
mutes: Du tystar
@ -678,6 +679,7 @@ sv:
success: Dina uppgifter har laddats upp och kommer nu att behandlas snarast
types:
blocking: Lista av blockerade
bookmarks: Bokmärken
following: Lista av följare
muting: Lista av nertystade
upload: Ladda upp
@ -766,6 +768,7 @@ sv:
other: Annat
relationships:
activity: Kontoaktivitet
follow_selected_followers: Följ valda personer
followers: Följare
following: Följer
last_active: Senast aktiv

View File

@ -127,6 +127,7 @@ th:
login_status: สถานะการเข้าสู่ระบบ
media_attachments: ไฟล์แนบสื่อ
memorialize: เปลี่ยนเป็นอนุสรณ์
memorialized_msg: เปลี่ยน %{username} เป็นบัญชีอนุสรณ์สำเร็จ
moderation:
active: ใช้งานอยู่
all: ทั้งหมด
@ -150,6 +151,8 @@ th:
reject_all: ปฏิเสธทั้งหมด
remove_avatar: เอาภาพประจำตัวออก
remove_header: เอาส่วนหัวออก
removed_avatar_msg: เอาภาพประจำตัวของ %{username} ออกสำเร็จ
removed_header_msg: เอาภาพส่วนหัวของ %{username} ออกสำเร็จ
resend_confirmation:
already_confirmed: ผู้ใช้นี้ได้รับการยืนยันอยู่แล้ว
send: ส่งอีเมลยืนยันอีกครั้ง
@ -750,6 +753,7 @@ th:
request: ขอการเก็บถาวรของคุณ
size: ขนาด
blocks: คุณปิดกั้น
bookmarks: ที่คั่นหน้า
csv: CSV
domain_blocks: การปิดกั้นโดเมน
lists: รายการ
@ -806,6 +810,7 @@ th:
overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่
types:
blocking: รายการปิดกั้น
bookmarks: ที่คั่นหน้า
domain_blocking: รายการปิดกั้นโดเมน
following: รายการติดตาม
muting: รายการซ่อน
@ -920,6 +925,7 @@ th:
relationships:
activity: กิจกรรมบัญชี
dormant: ไม่เคลื่อนไหว
follow_selected_followers: ติดตามผู้ติดตามที่เลือก
followers: ผู้ติดตาม
following: กำลังติดตาม
invited: เชิญแล้ว

View File

@ -35,7 +35,7 @@ tr:
status_count_before: Şu ana kadar
tagline: Arkadaşlarını takip et ve yenilerini keşfet
terms: Kullanım şartları
unavailable_content: Mevcut olmayan içerik
unavailable_content: Denetlenen sunucular
unavailable_content_description:
domain: Sunucu
reason: Sebep
@ -52,16 +52,16 @@ tr:
user_count_before: Kayıtlı
what_is_mastodon: Mastodon nedir?
accounts:
choices_html: "%{name} seçimleri:"
choices_html: "%{name} kişisinin seçimleri:"
endorsements_hint: Takip ettiğiniz kişileri web arayüzünden onaylayabilirsiniz, burada görünecekler.
featured_tags_hint: Burada görüntülenecek belirli etiketlere sahip olabilirsiniz.
follow: Takip et
followers:
one: Takipçi
other: Takipçi
following: Takip ettikleri
following: Takip edilenler
joined: "%{date} tarihinde katıldı"
last_active: son aktivite
last_active: son etkinlik
link_verified_on: Bu bağlantının mülkiyeti %{date} tarihinde kontrol edildi
media: Medya
moved_html: "%{name}, %{new_profile_link} adresine taşındı:"
@ -77,7 +77,7 @@ tr:
other: Toot
posts_tab_heading: Tootlar
posts_with_replies: Tootlar ve yanıtlar
reserved_username: Kullanıcı adı saklıdır
reserved_username: Kullanıcı adı rezerve edildi
roles:
admin: Yönetici
bot: Bot
@ -90,7 +90,7 @@ tr:
action: Eylemi gerçekleştir
title: "%{acct} üzerinde denetleme eylemi gerçekleştir"
account_moderation_notes:
create: Not bırakın
create: Not bırak
created_msg: Denetim notu başarıyla oluşturuldu!
delete: Sil
destroyed_msg: Denetim notu başarıyla yok edildi!
@ -139,9 +139,9 @@ tr:
local: Yerel
remote: Uzaktan
title: Konum
login_status: Giriş durumu
login_status: Oturum açma durumu
media_attachments: Medya ekleri
memorialize: Bir hatıraya dön
memorialize: Anıta dönüştür
memorialized: Anıtlaştırıldı
memorialized_msg: "%{username} hesabı başarıyla anıt hesabına dönüştürüldü"
moderation:
@ -150,7 +150,7 @@ tr:
pending: Bekliyor
silenced: Susturulanlar
suspended: Uzaklaştırılanlar
title: netim
title: Denetim
moderation_notes: Denetleme notları
most_recent_activity: Son aktivite
most_recent_ip: Son IP
@ -218,7 +218,7 @@ tr:
action_logs:
action_types:
assigned_to_self_report: Raporu Ata
change_email_user: Kullanıcı için e-postayı değiştir
change_email_user: Kullanıcı E-postasını Değiştir
confirm_user: Kullanıcıyı Onayla
create_account_warning: Uyarı Oluştur
create_announcement: Duyuru Oluştur
@ -235,14 +235,14 @@ tr:
destroy_email_domain_block: E-posta alan adı engelini sil
destroy_ip_block: IP kuralını sil
destroy_status: Durumu Sil
disable_2fa_user: 2 Adımlı Doğrulamayı Kapat
disable_custom_emoji: Özel İfadeyi Engelle
disable_user: Kullanıcıyı Engelle
disable_2fa_user: 2AD Kapat
disable_custom_emoji: Özel İfadeyi Devre Dışı Bırak
disable_user: Kullanıcıyı Devre Dışı Bırak
enable_custom_emoji: Özel İfadeyi Etkinleştir
enable_user: Kullanıcıyı Etkinleştir
memorialize_account: Hesabı Hatırlat
memorialize_account: Hesabı Anıtlaştır
promote_user: Kullanıcıyı Yükselt
remove_avatar_user: Avatarı Kaldır
remove_avatar_user: Profil Resmini Kaldır
reopen_report: Şikayeti Tekrar Aç
reset_password_user: Parolayı Sıfırla
resolve_report: Şikayeti Çöz
@ -280,7 +280,7 @@ tr:
disable_user: "%{name} %{target} kullanıcısı için oturum açmayı devre dışı bıraktı"
enable_custom_emoji: "%{name} %{target} için emojiyi etkinleştirdi"
enable_user: "%{name} %{target} için oturum açmayı etkinleştirdi"
memorialize_account: "%{name} %{target}'in hesabını bir hatıra sayfasına dönüştürdü"
memorialize_account: "%{name}, %{target} kişisinin hesabını anıt sayfasına dönüştürdü"
promote_user: "%{name} %{target} kullanıcısını yükseltti"
remove_avatar_user: "%{name} %{target}'in avatarını kaldırdı"
reopen_report: "%{name} %{target} şikayetini yeniden açtı"
@ -842,6 +842,7 @@ tr:
request: Arşivinizi isteyin
size: Boyut
blocks: Engellediklerin
bookmarks: Yer imleri
csv: CSV
domain_blocks: Alan adı engelleri
lists: Listeler
@ -918,6 +919,7 @@ tr:
success: Verileriniz başarıyla yüklendi ve zaman içinde işlenecek
types:
blocking: Engellenenler listesi
bookmarks: Yer imleri
domain_blocking: Alan adı engelleme listesi
following: Takip edilenler listesi
muting: Susturulanlar listesi
@ -1074,6 +1076,7 @@ tr:
relationships:
activity: Hesap etkinliği
dormant: Uykuda
follow_selected_followers: Seçili takipçileri takip et
followers: Takipçiler
following: Takip edilenler
invited: Davet edildi

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,9 @@
zgh:
about:
about_this: ⵖⴼ
api: API
contact: ⴰⵎⵢⴰⵡⴰⴹ
learn_more: ⵙⵙⵏ ⵓⴳⴳⴰⵔ
unavailable_content_description:
domain: ⴰⵎⴰⴽⴽⴰⵢ
what_is_mastodon: ⵎⴰ'ⵢⴷ ⵉⴳⴰⵏ ⵎⴰⵙⵜⵔⴷⵓⵎ?
@ -9,6 +12,7 @@ zgh:
follow: ⴹⴼⵕ
never_active: ⵓⵙⴰⵔ
roles:
bot: ⴰⴱⵓⵜ
group: ⵜⴰⵔⴰⴱⴱⵓⵜ
admin:
account_moderation_notes:
@ -19,23 +23,36 @@ zgh:
submit: ⵙⵏⴼⵍ ⵉⵎⴰⵢⵍ
confirm: ⵙⵏⵜⵎ
delete: ⴽⴽⵙ ⵉⴼⵙⴽⴰ
deleted: ⵉⵜⵜⵡⴰⴽⴽⵙ
domain: ⵉⴳⵔ
edit: ⵙⵏⴼⵍ
email: ⵉⵎⴰⵢⵍ
email_status: ⴰⴷⴷⴰⴷ ⵢⵉⵍⴰⵢⵍ
location:
all: ⵎⴰⵕⵕⴰ
local: ⴰⴷⵖⴰⵔⴰⵏ
moderation:
all: ⵎⴰⵕⵕⴰ
public: ⴰⴳⴷⵓⴷⴰⵏ
reject: ⴰⴳⵢ
roles:
user: ⵓⵏⵙⵙⵓⵎⵔⵙ
title: ⵉⵎⵉⴹⴰⵏⵏ
web: ⵡⵉⴱ
action_logs:
action_types:
update_status: ⵙⴷⵖⵉ ⴰⴷⴷⴰⴷ
announcements:
live: ⵓⵙⵔⵉⴷ
custom_emojis:
by_domain: ⵉⴳⵔ
copy: ⵙⵏⵖⵍ
delete: ⴽⴽⵙ
emoji: ⵉⵎⵓⵊⵉ
domain_blocks:
domain: ⵉⴳⵔ
email_domain_blocks:
add_new: ⵔⵏⵓ ⴰⵎⴰⵢⵏⵓ
delete: ⴽⴽⵙ
instances:
moderation:
@ -123,4 +140,5 @@ zgh:
settings:
account: ⴰⵎⵉⴹⴰⵏ
account_settings: ⵜⵉⵙⵖⴰⵍ ⵓⵎⵉⴹⴰⵏ
notifications: ⵜⵉⵏⵖⵎⵉⵙⵉⵏ
profile: ⵉⴼⵔⵙ

View File

@ -834,6 +834,7 @@ zh-CN:
request: 请求你的存档
size: 大小
blocks: 屏蔽的用户
bookmarks: 书签
csv: CSV
domain_blocks: 域名屏蔽
lists: 列表
@ -909,6 +910,7 @@ zh-CN:
success: 数据上传成功,正在处理中
types:
blocking: 屏蔽列表
bookmarks: 书签
domain_blocking: 域名屏蔽列表
following: 关注列表
muting: 隐藏列表
@ -1062,6 +1064,7 @@ zh-CN:
relationships:
activity: 帐号活动
dormant: 休眠
follow_selected_followers: 关注选中的关注者
followers: 关注者
following: 正在关注
invited: 已邀请

View File

@ -7,6 +7,7 @@ zh-HK:
active_count_after: 活躍
active_footnote: 每月活躍使用者 (MAU)
administered_by: 管理者:
api: API
apps: 行動應用程式
apps_platforms: 在 iOS、Android 和其他平台使用 Mastodon
browse_directory: 依興趣瀏覽個人資料目錄和過濾器
@ -158,6 +159,8 @@ zh-HK:
search: 搜索
search_same_email_domain: 其他有同個電子郵件網域的使用者
search_same_ip: 其他有同個 IP 的使用者
sensitive: 敏感内容
sensitized: 已標記為敏感內容
shared_inbox_url: 公共收件箱Shared InboxURL
show:
created_reports: 此用戶所提舉報的紀錄

View File

@ -625,6 +625,8 @@ zh-TW:
lists: 列表
mutes: 您靜音的使用者
storage: 儲存空間大小
featured_tags:
hint_html: "<strong>推薦標籤是什麼?</strong> 這些標籤將顯示於您的公開個人檔案頁,訪客可以藉此閱覽您標示了這些標籤的嘟文,拿來展示創意作品或者長期更新的專案很好用唷!"
filters:
index:
empty: 您沒有過濾器。
@ -767,6 +769,7 @@ zh-TW:
development: 開發
edit_profile: 編輯使用者資訊
export: 匯出
featured_tags: 推薦標籤
import: 匯入
migrate: 帳戶搬遷
notifications: 通知
@ -849,3 +852,6 @@ zh-TW:
otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫
seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼與電子郵件。
signed_in_as: 目前登入的帳戶:
verification:
explanation_html: 您在 Mastodon 個人資料頁上所列出的連結,可以用此方式<strong>驗證您確實掌控該連結網頁的內容</strong>。您可以在連結的網頁上加上一個連回 Mastodon 個人資料頁的連結,該連結的原始碼 <strong>必須</strong>包含<code>rel="me"</code>屬性。連結的顯示文字可自由發揮,以下為範例:
verification: 驗證連結

View File

@ -47,7 +47,7 @@ module Mastodon
ip_block ||= IpBlock.new(ip: address)
ip_block.severity = options[:severity]
ip_block.comment = options[:comment]
ip_block.comment = options[:comment] if options[:comment].present?
ip_block.expires_in = options[:duration]
if ip_block.save

View File

@ -55,8 +55,8 @@ module Mastodon
belongs_to :account, inverse_of: :account_stat
end
class Account < ApplicationRecord
# Dummy class, to make migration possible across version changes
class Account < ApplicationRecord
has_one :user, inverse_of: :account
has_one :account_stat, inverse_of: :account
@ -69,6 +69,49 @@ module Mastodon
def acct
local? ? username : "#{username}@#{domain}"
end
# This is a duplicate of the AccountMerging concern because we need it to
# be independent from code version.
def merge_with!(other_account)
# Since it's the same remote resource, the remote resource likely
# already believes we are following/blocking, so it's safe to
# re-attribute the relationships too. However, during the presence
# of the index bug users could have *also* followed the reference
# account already, therefore mass update will not work and we need
# to check for (and skip past) uniqueness errors
owned_classes = [
Status, StatusPin, MediaAttachment, Poll, Report, Tombstone, Favourite,
Follow, FollowRequest, Block, Mute, AccountIdentityProof,
AccountModerationNote, AccountPin, AccountStat, ListAccount,
PollVote, Mention
]
owned_classes << AccountDeletionRequest if ActiveRecord::Base.connection.table_exists?(:account_deletion_requests)
owned_classes << AccountNote if ActiveRecord::Base.connection.table_exists?(:account_notes)
owned_classes.each do |klass|
klass.where(account_id: other_account.id).find_each do |record|
begin
record.update_attribute(:account_id, id)
rescue ActiveRecord::RecordNotUnique
next
end
end
end
target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin]
target_classes << AccountNote if ActiveRecord::Base.connection.table_exists?(:account_notes)
target_classes.each do |klass|
klass.where(target_account_id: other_account.id).find_each do |record|
begin
record.update_attribute(:target_account_id, id)
rescue ActiveRecord::RecordNotUnique
next
end
end
end
end
end
class User < ApplicationRecord

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