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. 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 ## [3.2.0] - 2020-07-27
### Added ### Added

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -105,15 +105,18 @@ class AccountGallery extends ImmutablePureComponent {
} }
handleOpenMedia = attachment => { handleOpenMedia = attachment => {
const { dispatch } = this.props;
const statusId = attachment.getIn(['status', 'id']);
if (attachment.get('type') === 'video') { 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') { } 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 { } else {
const media = attachment.getIn(['status', 'media_attachments']); const media = attachment.getIn(['status', 'media_attachments']);
const index = media.findIndex(x => x.get('id') === attachment.get('id')); 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 = () => { handleSubmit = () => {
if (this.props.text !== this.autosuggestTextarea.textarea.value) { if (this.props.text !== this.autosuggestTextarea.textarea.value) {
// Something changed the text inside the textarea (e.g. browser extensions like Grammarly) // 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); this.props.onChange(this.autosuggestTextarea.textarea.value);
} }
// Submit disabled: if (!this.canSubmit()) {
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)) {
return; return;
} }
@ -179,10 +187,8 @@ class ComposeForm extends ImmutablePureComponent {
} }
render () { render () {
const { intl, onPaste, showSearch, anyMedia } = this.props; const { intl, onPaste, showSearch } = this.props;
const disabled = this.props.isSubmitting; 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 = ''; let publishText = '';
if (this.props.privacy === 'private' || this.props.privacy === 'direct') { if (this.props.privacy === 'private' || this.props.privacy === 'direct') {
@ -244,11 +250,11 @@ class ComposeForm extends ImmutablePureComponent {
<PrivacyDropdownContainer /> <PrivacyDropdownContainer />
<SpoilerButtonContainer /> <SpoilerButtonContainer />
</div> </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>
<div className='compose-form__publish'> <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>
</div> </div>
); );

View File

@ -22,6 +22,7 @@ const messages = defineMessages({
favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },
replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, 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?' }, 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 = () => { const makeMapStateToProps = () => {
@ -49,11 +50,19 @@ class Footer extends ImmutablePureComponent {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,
askReplyConfirmation: PropTypes.bool, askReplyConfirmation: PropTypes.bool,
withOpenButton: PropTypes.bool,
onClose: PropTypes.func,
}; };
_performReply = () => { _performReply = () => {
const { dispatch, status } = this.props; const { dispatch, status, onClose } = this.props;
dispatch(replyCompose(status, this.context.router.history)); const { router } = this.context;
if (onClose) {
onClose();
}
dispatch(replyCompose(status, router.history));
}; };
handleReplyClick = () => { 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 () { render () {
const { status, intl } = this.props; const { status, intl, withOpenButton } = this.props;
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; 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='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={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')} /> <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> </div>
); );
} }

View File

@ -276,22 +276,20 @@ class Status extends ImmutablePureComponent {
} }
handleOpenMedia = (media, index) => { 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) => { 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 => { handleHotkeyOpenMedia = e => {
const status = this._properStatus(); const { status } = this.props;
e.preventDefault(); e.preventDefault();
if (status.get('media_attachments').size > 0) { if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
// TODO: toggle play/paused?
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 }); this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
} else { } else {
this.handleOpenMedia(status.get('media_attachments'), 0); 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 PropTypes from 'prop-types';
import Video from 'mastodon/features/video'; import Video from 'mastodon/features/video';
import classNames from 'classnames'; 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 IconButton from 'mastodon/components/icon_button';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import ImageLoader from './image_loader'; import ImageLoader from './image_loader';
import Icon from 'mastodon/components/icon'; import Icon from 'mastodon/components/icon';
import GIFV from 'mastodon/components/gifv'; import GIFV from 'mastodon/components/gifv';
import { disableSwiping } from 'mastodon/initial_state'; import { disableSwiping } from 'mastodon/initial_state';
import Footer from 'mastodon/features/picture_in_picture/components/footer';
const messages = defineMessages({ const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' }, close: { id: 'lightbox.close', defaultMessage: 'Close' },
@ -20,15 +21,121 @@ const messages = defineMessages({
export const previewState = 'previewMediaModal'; 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 export default @injectIntl
class MediaModal extends ImmutablePureComponent { class MediaModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.list.isRequired, media: ImmutablePropTypes.list.isRequired,
status: ImmutablePropTypes.map, statusId: PropTypes.string,
index: PropTypes.number.isRequired, index: PropTypes.number.isRequired,
onClose: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
onChangeBackgroundColor: PropTypes.func.isRequired,
}; };
static contextTypes = { static contextTypes = {
@ -67,6 +174,7 @@ class MediaModal extends ImmutablePureComponent {
handleChangeIndex = (e) => { handleChangeIndex = (e) => {
const index = Number(e.currentTarget.getAttribute('data-index')); const index = Number(e.currentTarget.getAttribute('data-index'));
this.setState({ this.setState({
index: index % this.props.media.size, index: index % this.props.media.size,
zoomButtonHidden: true, zoomButtonHidden: true,
@ -100,6 +208,25 @@ class MediaModal extends ImmutablePureComponent {
this.props.onClose(); 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 () { componentWillUnmount () {
@ -112,6 +239,8 @@ class MediaModal extends ImmutablePureComponent {
this.context.router.history.goBack(); this.context.router.history.goBack();
} }
} }
this.props.onChangeBackgroundColor(null);
} }
getIndex () { getIndex () {
@ -127,30 +256,19 @@ class MediaModal extends ImmutablePureComponent {
handleStatusClick = e => { handleStatusClick = e => {
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault(); e.preventDefault();
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); this.context.router.history.push(`/statuses/${this.props.statusId}`);
} }
} }
render () { render () {
const { media, status, intl, onClose } = this.props; const { media, statusId, intl, onClose } = this.props;
const { navigationHidden } = this.state; const { navigationHidden } = this.state;
const index = this.getIndex(); 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 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>; 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 content = media.map((image) => {
const width = image.getIn(['meta', 'original', 'width']) || null; const width = image.getIn(['meta', 'original', 'width']) || null;
const height = image.getIn(['meta', 'original', 'height']) || null; const height = image.getIn(['meta', 'original', 'height']) || null;
@ -218,13 +336,19 @@ class MediaModal extends ImmutablePureComponent {
'media-modal__navigation--hidden': navigationHidden, '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 ( return (
<div className='modal-root__modal media-modal'> <div className='modal-root__modal media-modal'>
<div <div className='media-modal__closer' role='presentation' onClick={onClose} >
className='media-modal__closer'
role='presentation'
onClick={onClose}
>
<ReactSwipeableViews <ReactSwipeableViews
style={swipeableViewsStyle} style={swipeableViewsStyle}
containerStyle={containerStyle} containerStyle={containerStyle}
@ -243,15 +367,10 @@ class MediaModal extends ImmutablePureComponent {
{leftNav} {leftNav}
{rightNav} {rightNav}
{status && ( <div className='media-modal__overlay'>
<div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}> {pagination && <ul className='media-modal__pagination'>{pagination}</ul>}
<a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
</div> </div>
)}
<ul className='media-modal__pagination'>
{pagination}
</ul>
</div> </div>
</div> </div>
); );

View File

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

View File

@ -3,9 +3,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Video from 'mastodon/features/video'; import Video from 'mastodon/features/video';
import ImmutablePureComponent from 'react-immutable-pure-component'; 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'; export const previewState = 'previewVideoModal';
@ -13,7 +10,7 @@ export default class VideoModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
media: ImmutablePropTypes.map.isRequired, media: ImmutablePropTypes.map.isRequired,
status: ImmutablePropTypes.map, statusId: PropTypes.string,
options: PropTypes.shape({ options: PropTypes.shape({
startTime: PropTypes.number, startTime: PropTypes.number,
autoPlay: PropTypes.bool, 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 () { render () {
const { media, status, onClose } = this.props; const { media, onClose } = this.props;
const options = this.props.options || {}; const options = this.props.options || {};
return ( return (
@ -75,12 +65,6 @@ export default class VideoModal extends ImmutablePureComponent {
alt={media.get('description')} alt={media.get('description')}
/> />
</div> </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> </div>
); );
} }

View File

@ -118,7 +118,6 @@ class Video extends React.PureComponent {
deployPictureInPicture: PropTypes.func, deployPictureInPicture: PropTypes.func,
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
blurhash: PropTypes.string, blurhash: PropTypes.string,
link: PropTypes.node,
autoPlay: PropTypes.bool, autoPlay: PropTypes.bool,
volume: PropTypes.number, volume: PropTypes.number,
muted: PropTypes.bool, muted: PropTypes.bool,
@ -534,7 +533,7 @@ class Video extends React.PureComponent {
} }
render () { 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 { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
const progress = Math.min((currentTime / duration) * 100, 100); const progress = Math.min((currentTime / duration) * 100, 100);
const playerStyle = {}; const playerStyle = {};
@ -648,8 +647,6 @@ class Video extends React.PureComponent {
<span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span> <span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span>
</span> </span>
)} )}
{link && <span className='video-player__link'>{link}</span>}
</div> </div>
<div className='video-player__buttons right'> <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.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů",
"account.badges.bot": "Robot", "account.badges.bot": "Robot",
"account.badges.group": "Skupina", "account.badges.group": "Skupina",
@ -326,14 +326,14 @@
"notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.reblog": "Boosty:",
"notifications.column_settings.show": "Zobrazit ve sloupci", "notifications.column_settings.show": "Zobrazit ve sloupci",
"notifications.column_settings.sound": "Přehrát zvuk", "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.all": "Vše",
"notifications.filter.boosts": "Boosty", "notifications.filter.boosts": "Boosty",
"notifications.filter.favourites": "Oblíbení", "notifications.filter.favourites": "Oblíbení",
"notifications.filter.follows": "Sledování", "notifications.filter.follows": "Sledování",
"notifications.filter.mentions": "Zmínky", "notifications.filter.mentions": "Zmínky",
"notifications.filter.polls": "Výsledky anket", "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.group": "{count} oznámení",
"notifications.mark_as_read": "Mark every notification as read", "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": "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.audio_description": "Popis pro sluchově postižené",
"upload_form.description": "Popis pro zrakově postižené", "upload_form.description": "Popis pro zrakově postižené",
"upload_form.edit": "Upravit", "upload_form.edit": "Upravit",
"upload_form.thumbnail": "Change thumbnail", "upload_form.thumbnail": "Změnit miniaturu",
"upload_form.undo": "Smazat", "upload_form.undo": "Smazat",
"upload_form.video_description": "Popis pro sluchově či zrakově postižené", "upload_form.video_description": "Popis pro sluchově či zrakově postižené",
"upload_modal.analyzing_picture": "Analyzuji obrázek…", "upload_modal.analyzing_picture": "Analyzuji obrázek…",

View File

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

View File

@ -236,7 +236,7 @@
"keyboard_shortcuts.hotkey": "Rapidklavo", "keyboard_shortcuts.hotkey": "Rapidklavo",
"keyboard_shortcuts.legend": "montri ĉi tiun noton", "keyboard_shortcuts.legend": "montri ĉi tiun noton",
"keyboard_shortcuts.local": "malfermi la lokan tempolinion", "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.muted": "malfermi la liston de silentigitaj uzantoj",
"keyboard_shortcuts.my_profile": "malfermi vian profilon", "keyboard_shortcuts.my_profile": "malfermi vian profilon",
"keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj", "keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj",
@ -246,7 +246,7 @@
"keyboard_shortcuts.reply": "respondi", "keyboard_shortcuts.reply": "respondi",
"keyboard_shortcuts.requests": "malfermi la liston de petoj de sekvado", "keyboard_shortcuts.requests": "malfermi la liston de petoj de sekvado",
"keyboard_shortcuts.search": "enfokusigi la serĉilon", "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.start": "malfermi la kolumnon «por komenci»",
"keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto", "keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto",
"keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn", "keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn",
@ -326,7 +326,7 @@
"notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.reblog": "Diskonigoj:",
"notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.show": "Montri en kolumno",
"notifications.column_settings.sound": "Eligi sonon", "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.all": "Ĉiuj",
"notifications.filter.boosts": "Diskonigoj", "notifications.filter.boosts": "Diskonigoj",
"notifications.filter.favourites": "Stelumoj", "notifications.filter.favourites": "Stelumoj",

View File

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

View File

@ -99,7 +99,7 @@
"compose_form.publish": "Pouet", "compose_form.publish": "Pouet",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Marquer le média comme sensible", "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.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.marked": "Le texte est caché derrière un avertissement",
"compose_form.spoiler.unmarked": "Le texte nest pas caché", "compose_form.spoiler.unmarked": "Le texte nest pas caché",

View File

@ -73,7 +73,7 @@
"column.notifications": "Notificacións", "column.notifications": "Notificacións",
"column.pins": "Toots fixados", "column.pins": "Toots fixados",
"column.public": "Cronoloxía federada", "column.public": "Cronoloxía federada",
"column_back_button.label": "Voltar", "column_back_button.label": "Volver",
"column_header.hide_settings": "Agochar axustes", "column_header.hide_settings": "Agochar axustes",
"column_header.moveLeft_settings": "Mover columna cara a esquerda", "column_header.moveLeft_settings": "Mover columna cara a esquerda",
"column_header.moveRight_settings": "Mover columna cara a dereita", "column_header.moveRight_settings": "Mover columna cara a dereita",
@ -219,7 +219,7 @@
"introduction.welcome.action": "Imos!", "introduction.welcome.action": "Imos!",
"introduction.welcome.headline": "Primeiros pasos", "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.", "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.blocked": "abrir lista de usuarias bloqueadas",
"keyboard_shortcuts.boost": "promover", "keyboard_shortcuts.boost": "promover",
"keyboard_shortcuts.column": "para destacar un toot nunha das columnas", "keyboard_shortcuts.column": "para destacar un toot nunha das columnas",
@ -336,10 +336,10 @@
"notifications.filter.statuses": "Actualizacións de xente á que segues", "notifications.filter.statuses": "Actualizacións de xente á que segues",
"notifications.group": "{count} notificacións", "notifications.group": "{count} notificacións",
"notifications.mark_as_read": "Marcar todas as notificacións como lidas", "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_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.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", "notifications_permission_banner.title": "Non perder nada",
"picture_in_picture.restore": "Devolver", "picture_in_picture.restore": "Devolver",
"poll.closed": "Pechado", "poll.closed": "Pechado",
@ -411,7 +411,7 @@
"status.pinned": "Toot fixado", "status.pinned": "Toot fixado",
"status.read_more": "Ler máis", "status.read_more": "Ler máis",
"status.reblog": "Promover", "status.reblog": "Promover",
"status.reblog_private": "Compartir á audiencia orixinal", "status.reblog_private": "Compartir coa audiencia orixinal",
"status.reblogged_by": "{name} promoveu", "status.reblogged_by": "{name} promoveu",
"status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.", "status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.",
"status.redraft": "Eliminar e reescribir", "status.redraft": "Eliminar e reescribir",

View File

@ -9,10 +9,10 @@
"account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում", "account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում",
"account.cancel_follow_request": "չեղարկել հետեւելու հայցը", "account.cancel_follow_request": "չեղարկել հետեւելու հայցը",
"account.direct": "Նամակ գրել @{name} -ին", "account.direct": "Նամակ գրել @{name} -ին",
"account.disable_notifications": "Stop notifying me when @{name} posts", "account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար",
"account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.domain_blocked": "Տիրոյթը արգելափակուած է",
"account.edit_profile": "Խմբագրել անձնական էջը", "account.edit_profile": "Խմբագրել անձնական էջը",
"account.enable_notifications": "Notify me when @{name} posts", "account.enable_notifications": "Ծանուցել ինձ @{name} գրառումների մասին",
"account.endorse": "Ցուցադրել անձնական էջում", "account.endorse": "Ցուցադրել անձնական էջում",
"account.follow": "Հետեւել", "account.follow": "Հետեւել",
"account.followers": "Հետեւողներ", "account.followers": "Հետեւողներ",
@ -168,9 +168,9 @@
"empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։", "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։",
"empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։", "empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։",
"error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։", "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": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։",
"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.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
"errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
"follow_request.authorize": "Վավերացնել", "follow_request.authorize": "Վավերացնել",
@ -266,9 +266,9 @@
"lists.edit.submit": "Փոխել վերնագիրը", "lists.edit.submit": "Փոխել վերնագիրը",
"lists.new.create": "Ավելացնել ցանկ", "lists.new.create": "Ավելացնել ցանկ",
"lists.new.title_placeholder": "Նոր ցանկի վերնագիր", "lists.new.title_placeholder": "Նոր ցանկի վերնագիր",
"lists.replies_policy.all_replies": "Any followed user", "lists.replies_policy.all_replies": "Ում հետևում եմ",
"lists.replies_policy.list_replies": "Members of the list", "lists.replies_policy.list_replies": "Ցանկի անդամները",
"lists.replies_policy.no_replies": "No one", "lists.replies_policy.no_replies": "Ոչ ոք",
"lists.replies_policy.title": "Show replies to:", "lists.replies_policy.title": "Show replies to:",
"lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", "lists.search": "Փնտրել քո հետեւած մարդկանց մեջ",
"lists.subheading": "Քո ցանկերը", "lists.subheading": "Քո ցանկերը",
@ -277,9 +277,9 @@
"media_gallery.toggle_visible": "Ցուցադրել/թաքցնել", "media_gallery.toggle_visible": "Ցուցադրել/թաքցնել",
"missing_indicator.label": "Չգտնվեց", "missing_indicator.label": "Չգտնվեց",
"missing_indicator.sublabel": "Պաշարը չի գտնւում", "missing_indicator.sublabel": "Պաշարը չի գտնւում",
"mute_modal.duration": "Duration", "mute_modal.duration": "Տևողություն",
"mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։", "mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
"mute_modal.indefinite": "Indefinite", "mute_modal.indefinite": "Անժամկետ",
"navigation_bar.apps": "Դիւրակիր յաւելուածներ", "navigation_bar.apps": "Դիւրակիր յաւելուածներ",
"navigation_bar.blocks": "Արգելափակված օգտատերեր", "navigation_bar.blocks": "Արգելափակված օգտատերեր",
"navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.bookmarks": "Էջանիշեր",
@ -310,7 +310,7 @@
"notification.own_poll": "Հարցումդ աւարտուեց", "notification.own_poll": "Հարցումդ աւարտուեց",
"notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։", "notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։",
"notification.reblog": "{name} տարածեց թութդ", "notification.reblog": "{name} տարածեց թութդ",
"notification.status": "{name} just posted", "notification.status": "{name} հենց նոր թթեց",
"notifications.clear": "Մաքրել ծանուցումները", "notifications.clear": "Մաքրել ծանուցումները",
"notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։", "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։",
"notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ", "notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ",
@ -326,7 +326,7 @@
"notifications.column_settings.reblog": "Տարածածներից՝", "notifications.column_settings.reblog": "Տարածածներից՝",
"notifications.column_settings.show": "Ցուցադրել սիւնում", "notifications.column_settings.show": "Ցուցադրել սիւնում",
"notifications.column_settings.sound": "Ձայն հանել", "notifications.column_settings.sound": "Ձայն հանել",
"notifications.column_settings.status": "New toots:", "notifications.column_settings.status": "Նոր թթեր։",
"notifications.filter.all": "Բոլորը", "notifications.filter.all": "Բոլորը",
"notifications.filter.boosts": "Տարածածները", "notifications.filter.boosts": "Տարածածները",
"notifications.filter.favourites": "Հաւանածները", "notifications.filter.favourites": "Հաւանածները",
@ -335,10 +335,10 @@
"notifications.filter.polls": "Հարցման արդիւնքները", "notifications.filter.polls": "Հարցման արդիւնքները",
"notifications.filter.statuses": "Updates from people you follow", "notifications.filter.statuses": "Updates from people you follow",
"notifications.group": "{count} ծանուցում", "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": "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_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.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_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back", "picture_in_picture.restore": "Put it back",

View File

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

View File

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

View File

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

View File

@ -98,7 +98,7 @@
"compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа",
"compose_form.publish": "Запостить", "compose_form.publish": "Запостить",
"compose_form.publish_loud": "{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.marked": "Медиафайл отмечен как деликатный",
"compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный", "compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный",
"compose_form.spoiler.marked": "Текст скрыт за предупреждением", "compose_form.spoiler.marked": "Текст скрыт за предупреждением",

View File

@ -6,18 +6,18 @@
"account.block": "Bloca @{name}", "account.block": "Bloca @{name}",
"account.block_domain": "Bloca domìniu{domain}", "account.block_domain": "Bloca domìniu{domain}",
"account.blocked": "Blocadu", "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.cancel_follow_request": "Annulla rechesta de sighidura",
"account.direct": "Messàgiu deretu a @{name}", "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.domain_blocked": "Domìniu blocadu",
"account.edit_profile": "Modìfica profilu", "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.endorse": "Cussìgia in su profilu tuo",
"account.follow": "Sighi", "account.follow": "Sighi",
"account.followers": "Sighiduras", "account.followers": "Sighiduras",
"account.followers.empty": "Nemos sighit ancora custa persone.", "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.following_counter": "{count, plural, one {{counter} Sighidu} other {{counter} Sighidos}}",
"account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows.empty": "Custa persone non sighit ancora a nemos.",
"account.follows_you": "Ti sighit", "account.follows_you": "Ti sighit",
@ -38,14 +38,14 @@
"account.requested": "Incarca pro annullare sa rechesta de sighidura", "account.requested": "Incarca pro annullare sa rechesta de sighidura",
"account.share": "Cumpartzi su profilu de @{name}", "account.share": "Cumpartzi su profilu de @{name}",
"account.show_reblogs": "Ammustra is cumpartziduras 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": "Isbloca @{name}",
"account.unblock_domain": "Isbloca su domìniu {domain}", "account.unblock_domain": "Isbloca su domìniu {domain}",
"account.unendorse": "Non cussiges in su profilu", "account.unendorse": "Non cussiges in su profilu",
"account.unfollow": "Non sigas prus", "account.unfollow": "Non sigas prus",
"account.unmute": "Torra a ativare @{name}", "account.unmute": "Torra a ativare @{name}",
"account.unmute_notifications": "Ativa notìficas pro @{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.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.",
"alert.rate_limited.title": "Màssimu de rechestas barigadu", "alert.rate_limited.title": "Màssimu de rechestas barigadu",
"alert.unexpected.message": "B'at àpidu una faddina.", "alert.unexpected.message": "B'at àpidu una faddina.",
@ -81,9 +81,9 @@
"column_header.show_settings": "Ammustra is cunfiguratziones", "column_header.show_settings": "Ammustra is cunfiguratziones",
"column_header.unpin": "Boga dae pitzu", "column_header.unpin": "Boga dae pitzu",
"column_subheading.settings": "Cunfiguratziones", "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.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": "Custu tut at a èssere imbiadu isceti a is persones mentovadas.",
"compose_form.direct_message_warning_learn_more": "Àteras informatziones", "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.", "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.confirm": "Cantzella",
"confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?", "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.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.confirm": "Essi·nche",
"confirmations.logout.message": "Seguru chi boles essire?", "confirmations.logout.message": "Seguru chi boles essire?",
"confirmations.mute.confirm": "A sa muda", "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.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", "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": "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": "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.copy_stacktrace": "Còpia stacktrace in punta de billete",
"errors.unexpected_crash.report_issue": "Signala unu problema", "errors.unexpected_crash.report_issue": "Signala unu problema",
"follow_request.authorize": "Autoriza", "follow_request.authorize": "Autoriza",
"follow_request.reject": "Refuda", "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.", "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.developers": "Iscuadra de isvilupu",
"getting_started.directory": "Diretòriu de profilos", "getting_started.directory": "Diretòriu de profilos",
"getting_started.documentation": "Documentatzione", "getting_started.documentation": "Documentatzione",
@ -246,7 +246,7 @@
"keyboard_shortcuts.reply": "pro rispòndere", "keyboard_shortcuts.reply": "pro rispòndere",
"keyboard_shortcuts.requests": "pro abèrrere sa lista de rechestas de sighidura", "keyboard_shortcuts.requests": "pro abèrrere sa lista de rechestas de sighidura",
"keyboard_shortcuts.search": "pro atzentrare sa chirca", "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.start": "pro abèrrere sa colunna \"Cumintza\"",
"keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC", "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC",
"keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare mèdias", "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.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca",
"keyboard_shortcuts.up": "pro mòere in susu in sa lista", "keyboard_shortcuts.up": "pro mòere in susu in sa lista",
"lightbox.close": "Serra", "lightbox.close": "Serra",
"lightbox.compress": "Compress image view box", "lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines",
"lightbox.expand": "Expand image view box", "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines",
"lightbox.next": "Sighi", "lightbox.next": "Sighi",
"lightbox.previous": "Pretzedente", "lightbox.previous": "Pretzedente",
"lightbox.view_context": "Bide su cuntestu", "lightbox.view_context": "Bide su cuntestu",
@ -266,10 +266,10 @@
"lists.edit.submit": "Muda su tìtulu", "lists.edit.submit": "Muda su tìtulu",
"lists.new.create": "Agiunghe lista", "lists.new.create": "Agiunghe lista",
"lists.new.title_placeholder": "Lista noa", "lists.new.title_placeholder": "Lista noa",
"lists.replies_policy.all_replies": "Any followed user", "lists.replies_policy.all_replies": "Cale si siat utente sighidu",
"lists.replies_policy.list_replies": "Members of the list", "lists.replies_policy.list_replies": "Membros de sa lista",
"lists.replies_policy.no_replies": "No one", "lists.replies_policy.no_replies": "Perunu",
"lists.replies_policy.title": "Show replies to:", "lists.replies_policy.title": "Ammustra is rispostas a:",
"lists.search": "Chircare intre sa gente chi ses sighende", "lists.search": "Chircare intre sa gente chi ses sighende",
"lists.subheading": "Is listas tuas", "lists.subheading": "Is listas tuas",
"load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}", "load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}",
@ -279,7 +279,7 @@
"missing_indicator.sublabel": "Resursa no agatada", "missing_indicator.sublabel": "Resursa no agatada",
"mute_modal.duration": "Duration", "mute_modal.duration": "Duration",
"mute_modal.hide_notifications": "Boles cuare is notìficas de custa persone?", "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.apps": "Aplicatziones mòbiles",
"navigation_bar.blocks": "Persones blocadas", "navigation_bar.blocks": "Persones blocadas",
"navigation_bar.bookmarks": "Sinnalibros", "navigation_bar.bookmarks": "Sinnalibros",
@ -310,7 +310,7 @@
"notification.own_poll": "Sondàgiu acabbadu", "notification.own_poll": "Sondàgiu acabbadu",
"notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu",
"notification.reblog": "{name} at cumpartzidu s'istadu tuo", "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": "Lìmpia notìficas",
"notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?",
"notifications.column_settings.alert": "Notìficas de iscrivania", "notifications.column_settings.alert": "Notìficas de iscrivania",
@ -326,19 +326,19 @@
"notifications.column_settings.reblog": "Cumpartziduras:", "notifications.column_settings.reblog": "Cumpartziduras:",
"notifications.column_settings.show": "Ammustra in sa colunna", "notifications.column_settings.show": "Ammustra in sa colunna",
"notifications.column_settings.sound": "Reprodue unu sonu", "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.all": "Totus",
"notifications.filter.boosts": "Cumpartziduras", "notifications.filter.boosts": "Cumpartziduras",
"notifications.filter.favourites": "Preferidos", "notifications.filter.favourites": "Preferidos",
"notifications.filter.follows": "Sighende", "notifications.filter.follows": "Sighende",
"notifications.filter.mentions": "Mentovos", "notifications.filter.mentions": "Mentovos",
"notifications.filter.polls": "Resurtados dae su sondàgiu", "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.group": "{count} notìficas",
"notifications.mark_as_read": "Mark every notification as read", "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": "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": "Desktop notifications can't be enabled, as browser permission has been denied before", "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": "Enable desktop notifications", "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.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_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back", "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.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.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.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.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.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.", "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": "Người theo dõi",
"account.followers.empty": "Chưa có người theo dõi nào.", "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.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.empty": "Người dùng này chưa theo dõi ai.",
"account.follows_you": "Đang theo dõi bạn", "account.follows_you": "Đang theo dõi bạn",
"account.hide_reblogs": "Ẩn chia sẻ từ @{name}", "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.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.media": "Bộ sưu tập",
"account.mention": "Nhắc đến @{name}", "account.mention": "Nhắc đến @{name}",
"account.moved_to": "{name} đã dời sang:", "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.message": "Đã có lỗi xảy ra trong khi tải nội dung này.",
"bundle_modal_error.retry": "Thử lại", "bundle_modal_error.retry": "Thử lại",
"column.blocks": "Người dùng đã chặn", "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.community": "Máy chủ của bạn",
"column.direct": "Tin nhắn của bạn", "column.direct": "Tin nhắn của bạn",
"column.directory": "Tìm người cùng sở thích", "column.directory": "Tìm người cùng sở thích",
@ -72,7 +72,7 @@
"column.mutes": "Người dùng đã ẩn", "column.mutes": "Người dùng đã ẩn",
"column.notifications": "Thông báo", "column.notifications": "Thông báo",
"column.pins": "Tút ghim", "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_back_button.label": "Quay lại",
"column_header.hide_settings": "Ẩn bộ lọc", "column_header.hide_settings": "Ẩn bộ lọc",
"column_header.moveLeft_settings": "Dời cột sang bên trái", "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": "Tút",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Nội dung nhạy cảm", "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.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": "Nội dung không đánh dấu 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.marked": "Hủy nội dung ẩn",
"compose_form.spoiler.unmarked": "Tạo 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", "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.symbols": "Biểu tượng",
"emoji_button.travel": "Du lịch", "emoji_button.travel": "Du lịch",
"empty_column.account_timeline": "Chưa có tút nào!", "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.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.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!", "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.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.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.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": "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.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.", "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.reply": "trả lời",
"keyboard_shortcuts.requests": "mở danh sách yêu cầu theo dõ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.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.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_hidden": "ẩn/hiện văn bản bên dưới spoil",
"keyboard_shortcuts.toggle_sensitivity": "ẩn/hiện ảnh hoặc video", "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.search": "Tìm kiếm những người mà bạn quan tâm",
"lists.subheading": "Danh sách của bạn", "lists.subheading": "Danh sách của bạn",
"load_pending": "{count, plural, one {# tút mới} other {# tút mới}}", "load_pending": "{count, plural, one {# tút mới} other {# tút mới}}",
"loading_indicator.label": "Chờ xíu...", "loading_indicator.label": "Đang tải...",
"media_gallery.toggle_visible": "Ẩn {number, plural, one {ảnh} other {ảnh}}", "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.label": "Không tìm thấy",
"missing_indicator.sublabel": "Nội dung này không còn tồn tại", "missing_indicator.sublabel": "Nội dung này không còn tồn tại",
"mute_modal.duration": "Thời hạn", "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.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.reblog": "{name} chia sẻ tút của bạn",
"notification.status": "{name} vừa đăng", "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.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.alert": "Thông báo trên máy tính",
"notifications.column_settings.favourite": "Lượt thích:", "notifications.column_settings.favourite": "Lượt thích:",
@ -371,13 +371,13 @@
"reply_indicator.cancel": "Hủy bỏ", "reply_indicator.cancel": "Hủy bỏ",
"report.forward": "Chuyển đến {target}", "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.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.placeholder": "Bổ sung thêm",
"report.submit": "Gửi đi", "report.submit": "Gửi đi",
"report.target": "Báo cáo {target}", "report.target": "Báo cáo {target}",
"search.placeholder": "Tìm kiếm", "search.placeholder": "Tìm kiếm",
"search_popout.search_format": "Gợi ý", "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.hashtag": "hashtag",
"search_popout.tips.status": "tút", "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", "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.reply": "Trả lời",
"status.replyAll": "Trả lời tất cả", "status.replyAll": "Trả lời tất cả",
"status.report": "Báo cáo @{name}", "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.share": "Chia sẻ",
"status.show_less": "Thu gọn", "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": "Mở rộng",
"status.show_more_all": "Hiển thị tất cả", "status.show_more_all": "Hiển thị tất cả",
"status.show_thread": "Xem thêm", "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.unmute_conversation": "Quan tâm",
"status.unpin": "Bỏ ghim trên trang cá nhân", "status.unpin": "Bỏ ghim trên trang cá nhân",
"suggestions.dismiss": "Tắt đề xuất", "suggestions.dismiss": "Tắt đề xuất",

View File

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

View File

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

View File

@ -254,8 +254,8 @@
"keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點", "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點",
"keyboard_shortcuts.up": "往上移動名單項目", "keyboard_shortcuts.up": "往上移動名單項目",
"lightbox.close": "關閉", "lightbox.close": "關閉",
"lightbox.compress": "Compress image view box", "lightbox.compress": "折疊圖片檢視框",
"lightbox.expand": "Expand image view box", "lightbox.expand": "展開圖片檢視框",
"lightbox.next": "下一步", "lightbox.next": "下一步",
"lightbox.previous": "上一步", "lightbox.previous": "上一步",
"lightbox.view_context": "檢視內文", "lightbox.view_context": "檢視內文",
@ -280,7 +280,7 @@
"mute_modal.duration": "持續時間", "mute_modal.duration": "持續時間",
"mute_modal.hide_notifications": "隱藏來自這位使用者的通知?", "mute_modal.hide_notifications": "隱藏來自這位使用者的通知?",
"mute_modal.indefinite": "無期限", "mute_modal.indefinite": "無期限",
"navigation_bar.apps": "封鎖的使用者", "navigation_bar.apps": "行動應用程式",
"navigation_bar.blocks": "封鎖使用者", "navigation_bar.blocks": "封鎖使用者",
"navigation_bar.bookmarks": "書籤", "navigation_bar.bookmarks": "書籤",
"navigation_bar.community_timeline": "本機時間軸", "navigation_bar.community_timeline": "本機時間軸",
@ -335,12 +335,12 @@
"notifications.filter.polls": "投票結果", "notifications.filter.polls": "投票結果",
"notifications.filter.statuses": "已跟隨使用者的最新動態", "notifications.filter.statuses": "已跟隨使用者的最新動態",
"notifications.group": "{count} 條通知", "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": "由於之前拒絕了瀏覽器請求,因此桌面通知不可用",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_denied_alert": "因為之前瀏覽器權限被拒絕,無法啟用桌面通知",
"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.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。",
"notifications_permission_banner.title": "Never miss a thing", "notifications_permission_banner.title": "不要錯過任何東西!",
"picture_in_picture.restore": "還原", "picture_in_picture.restore": "還原",
"poll.closed": "已關閉", "poll.closed": "已關閉",
"poll.refresh": "重新整理", "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; color: $gold-star;
} }
.bookmark-icon.active { .icon-button.bookmark-icon.active {
color: $red-bookmark; color: $red-bookmark;
} }
@ -3007,7 +3007,6 @@ button.icon-button i.fa-retweet {
&::before { &::before {
display: none !important; display: none !important;
} }
} }
button.icon-button.active i.fa-retweet { button.icon-button.active i.fa-retweet {
@ -4487,16 +4486,19 @@ a.status-card.compact:hover {
height: 100%; height: 100%;
position: relative; position: relative;
.extended-video-player { &__close,
width: 100%; &__zoom-button {
height: 100%; color: rgba($white, 0.7);
display: flex;
align-items: center;
justify-content: center;
video { &:hover,
max-width: $media-modal-media-max-width; &:focus,
max-height: $media-modal-media-max-height; &: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 { .media-modal__nav {
background: rgba($base-overlay-background, 0.5); background: transparent;
box-sizing: border-box; box-sizing: border-box;
border: 0; border: 0;
color: $primary-text-color; color: rgba($primary-text-color, 0.7);
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
@ -4547,6 +4549,12 @@ a.status-card.compact:hover {
position: absolute; position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
&:hover,
&:focus,
&:active {
color: $primary-text-color;
}
} }
.media-modal__nav--left { .media-modal__nav--left {
@ -4557,58 +4565,86 @@ a.status-card.compact:hover {
right: 0; right: 0;
} }
.media-modal__pagination { .media-modal__overlay {
width: 100%; max-width: 600px;
text-align: center;
position: absolute; position: absolute;
left: 0; left: 0;
bottom: 20px; right: 0;
pointer-events: none; bottom: 0;
} margin: 0 auto;
.media-modal__meta { .picture-in-picture__footer {
text-align: center; border-radius: 0;
position: absolute; background: transparent;
left: 0; padding: 20px 0;
bottom: 20px;
width: 100%;
pointer-events: none;
&--shifted { .icon-button {
bottom: 62px; color: $white;
}
a { &:hover,
pointer-events: auto; &:focus,
text-decoration: none; &:active {
font-weight: 500; color: $white;
color: $ui-secondary-color; background-color: rgba($white, 0.15);
}
&:hover, &:focus {
&:focus, background-color: rgba($white, 0.3);
&:active { }
text-decoration: underline;
&.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__page-dot { .media-modal__pagination {
display: inline-block; display: flex;
justify-content: center;
margin-bottom: 20px;
} }
.media-modal__button { .media-modal__page-dot {
background-color: $primary-text-color; flex: 0 0 auto;
height: 12px; background-color: $white;
width: 12px; opacity: 0.4;
border-radius: 6px; height: 6px;
margin: 10px; width: 6px;
border-radius: 50%;
margin: 0 4px;
padding: 0; padding: 0;
border: 0; border: 0;
font-size: 0; font-size: 0;
} transition: opacity .2s ease-in-out;
.media-modal__button--active { &.active {
background-color: $highlight-text-color; opacity: 1;
}
} }
.media-modal__close { .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, Status, StatusPin, MediaAttachment, Poll, Report, Tombstone, Favourite,
Follow, FollowRequest, Block, Mute, AccountIdentityProof, Follow, FollowRequest, Block, Mute, AccountIdentityProof,
AccountModerationNote, AccountPin, AccountStat, ListAccount, AccountModerationNote, AccountPin, AccountStat, ListAccount,
PollVote, Mention PollVote, Mention, AccountDeletionRequest, AccountNote
] ]
owned_classes.each do |klass| owned_classes.each do |klass|
@ -28,7 +28,10 @@ module AccountMerging
end end
end end
target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin] target_classes = [
Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin,
AccountNote
]
target_classes.each do |klass| target_classes.each do |klass|
klass.where(target_account_id: other_account.id).find_each do |record| klass.where(target_account_id: other_account.id).find_each do |record|
@ -39,5 +42,10 @@ module AccountMerging
end end
end 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
end end

View File

@ -9,45 +9,48 @@ class RemoveStatusService < BaseService
# @param [Hash] options # @param [Hash] options
# @option [Boolean] :redraft # @option [Boolean] :redraft
# @option [Boolean] :immediate # @option [Boolean] :immediate
# @option [Boolean] :original_removed # @option [Boolean] :original_removed
def call(status, **options) def call(status, **options)
@payload = Oj.dump(event: :delete, payload: status.id.to_s) @payload = Oj.dump(event: :delete, payload: status.id.to_s)
@status = status @status = status
@account = status.account @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 @options = options
RedisLock.acquire(lock_options) do |lock| RedisLock.acquire(lock_options) do |lock|
if lock.acquired? if lock.acquired?
remove_from_self if status.account.local? remove_from_self if @account.local?
remove_from_followers remove_from_followers
remove_from_lists remove_from_lists
remove_from_affected
remove_reblogs # There is no reason to send out Undo activities when the
remove_from_hashtags # cause is that the original object has been removed, since
remove_from_public # original object being removed implicitly removes reblogs
remove_from_media if status.media_attachments.any? # of it. The Delete activity of the original is forwarded
remove_from_direct if status.direct_visibility? # separately.
remove_from_spam_check if @account.local? && !@options[:original_removed]
remove_media remove_from_remote_followers
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? @status.destroy! if @options[:immediate] || !@status.reported?
else else
raise Mastodon::RaceConditionError raise Mastodon::RaceConditionError
end end
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]
remove_from_remote_followers
remove_from_remote_affected
end end
private private
@ -69,31 +72,35 @@ class RemoveStatusService < BaseService
end end
end end
def remove_from_affected def remove_from_mentions
@mentions.map(&:account).select(&:local?).each do |account| # For limited visibility statuses, the mentions that determine
redis.publish("timeline:#{account.id}", @payload) # 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
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 # People who got mentioned in the status, or who
# reblogged it from someone else might not follow # reblogged it from someone else might not follow
# the author and wouldn't normally receive the # the author and wouldn't normally receive the
# delete notification - so here, we explicitly # delete notification - so here, we explicitly
# send it to them # send it to them
target_accounts = (@mentions.map(&:account).reject(&:local?) + @reblogs.map(&:account).reject(&:local?)) status_reach_finder = StatusReachFinder.new(@status)
target_accounts << @status.reblog.account if @status.reblog? && !@status.reblog.account.local?
target_accounts.uniq!(&:id)
# ActivityPub ActivityPub::DeliveryWorker.push_bulk(status_reach_finder.inboxes) do |inbox_url|
ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:preferred_inbox_url)) do |target_account| [signed_activity_json, @account.id, inbox_url]
[signed_activity_json, @account.id, target_account.preferred_inbox_url]
end end
end end
def remove_from_remote_followers def remove_from_remote_followers
# ActivityPub
ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url| ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url|
[signed_activity_json, @account.id, inbox_url] [signed_activity_json, @account.id, inbox_url]
end end
@ -120,19 +127,19 @@ class RemoveStatusService < BaseService
# because once original status is gone, reblogs will disappear # because once original status is gone, reblogs will disappear
# without us being able to do all the fancy stuff # 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) RemoveStatusService.new.call(reblog, original_removed: true)
end end
end end
def remove_from_hashtags 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) featured_tag.decrement(@status.id)
end end
return unless @status.public_visibility? 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}", @payload)
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", @payload) if @status.local? redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", @payload) if @status.local?
end end
@ -142,22 +149,14 @@ class RemoveStatusService < BaseService
return unless @status.public_visibility? return unless @status.public_visibility?
redis.publish('timeline:public', @payload) redis.publish('timeline:public', @payload)
if @status.local? redis.publish(@status.local? ? 'timeline:public:local' : 'timeline:public:remote', @payload)
redis.publish('timeline:public:local', @payload)
else
redis.publish('timeline:public:remote', @payload)
end
end end
def remove_from_media def remove_from_media
return unless @status.public_visibility? return unless @status.public_visibility?
redis.publish('timeline:public:media', @payload) redis.publish('timeline:public:media', @payload)
if @status.local? redis.publish(@status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', @payload)
redis.publish('timeline:public:local:media', @payload)
else
redis.publish('timeline:public:remote:media', @payload)
end
end end
def remove_from_direct def remove_from_direct

View File

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

View File

@ -1,3 +1,6 @@
:ruby
hide_show_thread ||= false
.status{ class: "status-#{status.visibility}" } .status{ class: "status-#{status.visibility}" }
.status__info .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 = 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 - 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 = 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 = 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' = t 'statuses.show_thread'

View File

@ -39,7 +39,7 @@
%span %span
= t('stream_entries.pinned') = 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 include_threads
- if @since_descendant_thread_id - 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 request: Sol·licita el teu arxiu
size: Mida size: Mida
blocks: Persones que has blocat blocks: Persones que has blocat
bookmarks: Marcadors
csv: CSV csv: CSV
domain_blocks: Bloquejos de dominis domain_blocks: Bloquejos de dominis
lists: Llistes lists: Llistes
@ -918,6 +919,7 @@ ca:
success: Les dades s'han rebut correctament i es processaran en breu success: Les dades s'han rebut correctament i es processaran en breu
types: types:
blocking: Llista de blocats blocking: Llista de blocats
bookmarks: Marcadors
domain_blocking: Llistat de dominis bloquejats domain_blocking: Llistat de dominis bloquejats
following: Llista de seguits following: Llista de seguits
muting: Llista de silenciats muting: Llista de silenciats
@ -1074,6 +1076,7 @@ ca:
relationships: relationships:
activity: Activitat del compte activity: Activitat del compte
dormant: Inactiu dormant: Inactiu
follow_selected_followers: Segueix als seguidors seleccionats
followers: Seguidors followers: Seguidors
following: Seguint following: Seguint
invited: Convidat invited: Convidat

View File

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

View File

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

View File

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

View File

@ -60,6 +60,19 @@ cs:
title: Záložní kódy pro 2FA změněny title: Záložní kódy pro 2FA změněny
unlock_instructions: unlock_instructions:
subject: 'Mastodon: Instrukce pro odemčení účtu' 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: omniauth_callbacks:
failure: Nelze vás ověřit z %{kind}, protože „%{reason}“. failure: Nelze vás ověřit z %{kind}, protože „%{reason}“.
success: Úspěšně ověřeno z účtu %{kind}. 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: mailer:
confirmation_instructions: confirmation_instructions:
action: Verificar o enderezo de email 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: 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. 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>. 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: webauthn_enabled:
explanation: あなたのアカウントでセキュリティキー認証が有効になりました。セキュリティキーをログインに使用できるようになりました。 explanation: あなたのアカウントでセキュリティキー認証が有効になりました。セキュリティキーをログインに使用できるようになりました。
subject: 'Mastodon: セキュリティキー認証が有効になりました' subject: 'Mastodon: セキュリティキー認証が有効になりました'
title: セキュリティキーは効になっています title: セキュリティキーは効になっています
omniauth_callbacks: omniauth_callbacks:
failure: "%{reason}によって%{kind}からのアクセスを認証できませんでした。" failure: "%{reason}によって%{kind}からのアクセスを認証できませんでした。"
success: "%{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 title: 2FA-gjenopprettingskodane er endra
unlock_instructions: unlock_instructions:
subject: 'Mastodon: Instruksjonar for å opne kontoen igjen' 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: omniauth_callbacks:
failure: Du kunne ikkje verte autentisert frå %{kind} av di "%{reason}". failure: Du kunne ikkje verte autentisert frå %{kind} av di "%{reason}".
success: Autentisert frå %{kind}-konto. 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}". 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}. success: Xác thực thành công từ tài khoản %{kind}.
passwords: 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_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. 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. 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: 雙重認證恢復碼已更改 title: 雙重認證恢復碼已更改
unlock_instructions: unlock_instructions:
subject: 'Mastodon: 解除用戶鎖定' 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: omniauth_callbacks:
failure: 無法以 %{kind} 登入你的用戶,原因是︰「%{reason}」。 failure: 無法以 %{kind} 登入你的用戶,原因是︰「%{reason}」。
success: 成功以 %{kind} 登入你的用戶。 success: 成功以 %{kind} 登入你的用戶。

View File

@ -116,22 +116,22 @@ eo:
title: OAuth-a rajtigo bezonata title: OAuth-a rajtigo bezonata
scopes: scopes:
admin:read: legu ĉiujn datumojn en la servilo admin:read: legu ĉiujn datumojn en la servilo
admin:read:accounts: legas senteman informacion de ĉiuj kontoj admin:read:accounts: legi konfidencajn informojn de ĉiuj kontoj
admin:read:reports: legas konfidencajn informojn de ĉiuj signaloj kaj signalitaj kontoj admin:read:reports: legi konfidencajn informojn de ĉiuj signaloj kaj signalitaj kontoj
admin:write: modifu ĉiujn datumojn en la servilo admin:write: modifi ĉiujn datumojn en la servilo
admin:write:accounts: plenumi agojn de kontrolo sur kontoj admin:write:accounts: plenumi agojn de kontrolo sur kontoj
admin:write:reports: plenumi agojn de kontrolo sur signaloj admin:write:reports: plenumi agojn de kontrolo sur signaloj
follow: ŝanĝi rilatojn al aliaj kontoj follow: ŝanĝi rilatojn al aliaj kontoj
push: ricevi viajn puŝ-sciigojn push: ricevi viajn puŝ-sciigojn
read: legi ĉiujn datumojn de via konto read: legi ĉiujn datumojn de via konto
read:accounts: vidi la informojn de la konto read:accounts: vidi la informojn de la kontoj
read:blocks: vidi viajn blokojn read:blocks: vidi viajn blokadojn
read:bookmarks: vidi viajn legosignojn read:bookmarks: vidi viajn legosignojn
read:favourites: vidi viajn stelumojn read:favourites: vidi viajn stelumojn
read:filters: vidi viajn filtrilojn read:filters: vidi viajn filtrilojn
read:follows: vidi viajn sekvatojn read:follows: vidi viajn sekvatojn
read:lists: vidi viajn listojn read:lists: vidi viajn listojn
read:mutes: vidi viajn silentigojn read:mutes: vidi viajn silentigadojn
read:notifications: vidi viajn sciigojn read:notifications: vidi viajn sciigojn
read:reports: vidi viajn signalojn read:reports: vidi viajn signalojn
read:search: serĉi vianome read:search: serĉi vianome
@ -140,7 +140,7 @@ eo:
write:accounts: ŝanĝi vian profilon write:accounts: ŝanĝi vian profilon
write:blocks: bloki kontojn kaj domajnojn write:blocks: bloki kontojn kaj domajnojn
write:bookmarks: aldoni mesaĝojn al la legosignoj write:bookmarks: aldoni mesaĝojn al la legosignoj
write:favourites: stelumitaj mesaĝoj write:favourites: stelumi mesaĝojn
write:filters: krei filtrilojn write:filters: krei filtrilojn
write:follows: sekvi homojn write:follows: sekvi homojn
write:lists: krei listojn 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. fragment_present: không thể chứa một mảnh.
invalid_uri: phải là một URI hợp lệ. invalid_uri: phải là một URI hợp lệ.
relative_uri: phải là một URI tuyệt đối. 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: doorkeeper:
applications: applications:
buttons: buttons:
@ -31,9 +31,9 @@ vi:
form: 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 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: help:
native_redirect_uri: Sử dụng %{native_redirect_uri} khi kiểm tra nội bộ native_redirect_uri: ng %{native_redirect_uri} khi kiểm tra nội bộ
redirect_uri: Sử dụng mỗi dòng chỉ một URL redirect_uri: 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. 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: index:
application: Ứng dụng application: Ứng dụng
callback_url: Gọi lại URL 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. 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. 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_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_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_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 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: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: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: 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:accounts: áp đặt 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: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 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 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 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: ⵜⴻⵜⵜⵓⵙⵓⵔⴳ created_at: ⵜⴻⵜⵜⵓⵙⵓⵔⴳ
date_format: "%d-%m-%Y %H:%M:%S" date_format: "%d-%m-%Y %H:%M:%S"
title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ ⵉⵜⵜⵓⵙⵓⵔⴷⵏ title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ ⵉⵜⵜⵓⵙⵓⵔⴷⵏ
scopes:
read:notifications: ⵥⵕ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ
write:notifications: ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ

View File

@ -766,7 +766,7 @@ eo:
filters: filters:
contexts: contexts:
account: Profiloj account: Profiloj
home: Hejma templinio home: Hejmo kaj listoj
notifications: Sciigoj notifications: Sciigoj
public: Publika templinio public: Publika templinio
thread: Konversacioj thread: Konversacioj
@ -958,6 +958,7 @@ eo:
relationships: relationships:
activity: Konta aktiveco activity: Konta aktiveco
dormant: Dormanta dormant: Dormanta
follow_selected_followers: Forigu selektitajn sekvantojn
followers: Sekvantoj followers: Sekvantoj
following: Sekvatoj following: Sekvatoj
invited: Invitita invited: Invitita
@ -1088,8 +1089,8 @@ eo:
other: "%{count} voĉdonoj" other: "%{count} voĉdonoj"
vote: Voĉdoni vote: Voĉdoni
show_more: Malfoldi show_more: Malfoldi
show_newer: Neniam montru show_newer: Montri pli novajn
show_older: Montru pli malnova show_older: Montri pli malnovajn
show_thread: Montri la fadenon show_thread: Montri la fadenon
sign_in_to_participate: Ensaluti por partopreni en la konversacio sign_in_to_participate: Ensaluti por partopreni en la konversacio
title: "%{name}: “%{quote}”" title: "%{name}: “%{quote}”"
@ -1167,7 +1168,7 @@ eo:
tips: Konsiloj tips: Konsiloj
title: Bonvenon, %{name}! title: Bonvenon, %{name}!
users: 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_email: La retadreso estas nevalida
invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo
otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email} 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 request: Solicitá tu archivo historial
size: Tamaño size: Tamaño
blocks: Cuentas que bloqueaste blocks: Cuentas que bloqueaste
bookmarks: Marcadores
csv: CSV csv: CSV
domain_blocks: Dominios bloqueados domain_blocks: Dominios bloqueados
lists: Listas lists: Listas
@ -855,7 +856,7 @@ es-AR:
filters: filters:
contexts: contexts:
account: Perfiles account: Perfiles
home: Línea temporal principal home: Inicio y listas
notifications: Notificaciones notifications: Notificaciones
public: Líneas temporales públicas public: Líneas temporales públicas
thread: Conversaciones thread: Conversaciones
@ -918,6 +919,7 @@ es-AR:
success: Tus datos se subieron exitosamente y serán procesados en brevedad success: Tus datos se subieron exitosamente y serán procesados en brevedad
types: types:
blocking: Lista de bloqueados blocking: Lista de bloqueados
bookmarks: Marcadores
domain_blocking: Lista de dominios bloqueados domain_blocking: Lista de dominios bloqueados
following: Lista de seguidos following: Lista de seguidos
muting: Lista de silenciados muting: Lista de silenciados
@ -1074,6 +1076,7 @@ es-AR:
relationships: relationships:
activity: Actividad de la cuenta activity: Actividad de la cuenta
dormant: Inactivas dormant: Inactivas
follow_selected_followers: Seguir a los seguidores seleccionados
followers: Seguidores followers: Seguidores
following: Siguiendo following: Siguiendo
invited: Invitado invited: Invitado

View File

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

View File

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

View File

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

View File

@ -628,7 +628,7 @@ gl:
delete: Eliminar o ficheiro subido delete: Eliminar o ficheiro subido
destroyed_msg: Eliminado correctamente o subido! destroyed_msg: Eliminado correctamente o subido!
statuses: statuses:
back_to_account: Voltar a páxina da conta back_to_account: Volver a páxina da conta
batch: batch:
delete: Eliminar delete: Eliminar
nsfw_off: Marcar como non sensible nsfw_off: Marcar como non sensible
@ -737,7 +737,7 @@ gl:
saml: SAML saml: SAML
register: Rexistro register: Rexistro
registration_closed: "%{instance} non está a aceptar novas usuarias" 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 reset_password: Restablecer contrasinal
security: Seguranza security: Seguranza
set_new_password: Estabelecer novo contrasinal set_new_password: Estabelecer novo contrasinal
@ -842,6 +842,7 @@ gl:
request: Solicite o ficheiro request: Solicite o ficheiro
size: Tamaño size: Tamaño
blocks: Bloqueos blocks: Bloqueos
bookmarks: Marcadores
csv: CSV csv: CSV
domain_blocks: Bloqueos de dominio domain_blocks: Bloqueos de dominio
lists: Listaxes lists: Listaxes
@ -918,6 +919,7 @@ gl:
success: Os seus datos foron correctamente subidos e serán procesados ao momento success: Os seus datos foron correctamente subidos e serán procesados ao momento
types: types:
blocking: Lista de bloqueo blocking: Lista de bloqueo
bookmarks: Marcadores
domain_blocking: Lista de bloqueo de dominios domain_blocking: Lista de bloqueo de dominios
following: Lista de seguimento following: Lista de seguimento
muting: Lista de usuarias acaladas muting: Lista de usuarias acaladas
@ -978,7 +980,7 @@ gl:
warning: warning:
backreference_required: Tes que configurar primeiro a nova conta para referenciar hacia esta 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:' 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. 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 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>. only_redirect_html: De xeito alternativo, podes <a href="%{path}">simplemente por unha redirección no perfil</a>.
@ -1074,6 +1076,7 @@ gl:
relationships: relationships:
activity: Actividade da conta activity: Actividade da conta
dormant: En repouso dormant: En repouso
follow_selected_followers: Seguir seguidoras seleccionadas
followers: Seguidoras followers: Seguidoras
following: Seguindo following: Seguindo
invited: Convidado invited: Convidado
@ -1155,7 +1158,7 @@ gl:
aliases: Alcumes da conta aliases: Alcumes da conta
appearance: Aparencia appearance: Aparencia
authorized_apps: Apps autorizadas authorized_apps: Apps autorizadas
back: Voltar a Mastodon back: Volver a Mastodon
delete: Eliminación da conta delete: Eliminación da conta
development: Desenvolvemento development: Desenvolvemento
edit_profile: Editar perfil edit_profile: Editar perfil
@ -1223,19 +1226,19 @@ gl:
unlisted_long: Visible para calquera, pero non listado en liñas de tempo públicas unlisted_long: Visible para calquera, pero non listado en liñas de tempo públicas
stream_entries: stream_entries:
pinned: Mensaxe fixada pinned: Mensaxe fixada
reblogged: promovida reblogged: comparteu
sensitive_content: Contido sensible sensitive_content: Contido sensible
tags: tags:
does_not_match_previous_name: non concorda co nome anterior does_not_match_previous_name: non concorda co nome anterior
terms: terms:
body_html: | body_html: |
<h2>Intimidade</h2> <h2>Privacidade</h2>
<h3 id="collect">Qué información recollemos?</h3> <h3 id="collect">Qué información recollemos?</h3>
<ul> <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>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>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 voltar a compartir as mensaxes. <em>Non comparta información comprometida en Mastodon.</em></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> <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> </ul>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -188,6 +188,8 @@ pt-BR:
search: Pesquisar search: Pesquisar
search_same_email_domain: Outros usuários com o mesmo domínio de e-mail 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 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 shared_inbox_url: Link da caixa de entrada compartilhada
show: show:
created_reports: Denúncias desta conta created_reports: Denúncias desta conta
@ -202,6 +204,7 @@ pt-BR:
time_in_queue: Esperando na fila por %{time} time_in_queue: Esperando na fila por %{time}
title: Contas title: Contas
unconfirmed_email: E-mail não confirmado unconfirmed_email: E-mail não confirmado
undo_sensitized: Desfazer sensível
undo_silenced: Desfazer silêncio undo_silenced: Desfazer silêncio
undo_suspension: Desbanir undo_suspension: Desbanir
unsilenced_msg: Removidas com sucesso as limitações da conta de %{username} unsilenced_msg: Removidas com sucesso as limitações da conta de %{username}
@ -243,9 +246,11 @@ pt-BR:
reopen_report: Reabrir Relatório reopen_report: Reabrir Relatório
reset_password_user: Redefinir a senha reset_password_user: Redefinir a senha
resolve_report: Resolver Relatório resolve_report: Resolver Relatório
sensitive_account: Marcar a mídia na sua conta como sensível
silence_account: Silenciar conta silence_account: Silenciar conta
suspend_account: Suspender Conta suspend_account: Suspender Conta
unassigned_report: Remover relatório unassigned_report: Remover relatório
unsensitive_account: Desmarcar a mídia na sua conta como sensível
unsilence_account: Desfazer silenciar conta unsilence_account: Desfazer silenciar conta
unsuspend_account: Remover suspensão de conta unsuspend_account: Remover suspensão de conta
update_announcement: Editar anúncio update_announcement: Editar anúncio
@ -281,9 +286,11 @@ pt-BR:
reopen_report: "%{name} reabriu a denúncia %{target}" reopen_report: "%{name} reabriu a denúncia %{target}"
reset_password_user: "%{name} redefiniu a senha do usuário %{target}" reset_password_user: "%{name} redefiniu a senha do usuário %{target}"
resolve_report: "%{name} resolveu a denúncia %{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}" silence_account: "%{name} silenciou a conta de %{target}"
suspend_account: "%{name} baniu a conta de %{target}" suspend_account: "%{name} baniu a conta de %{target}"
unassigned_report: "%{name} largou a denúncia %{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}" unsilence_account: "%{name} desativou o silêncio de %{target}"
unsuspend_account: "%{name} removeu a suspensão da conta de %{target}" unsuspend_account: "%{name} removeu a suspensão da conta de %{target}"
update_announcement: "%{name} atualizou o anúncio %{target}" update_announcement: "%{name} atualizou o anúncio %{target}"
@ -1067,6 +1074,7 @@ pt-BR:
relationships: relationships:
activity: Atividade da conta activity: Atividade da conta
dormant: Inativo dormant: Inativo
follow_selected_followers: Seguir os seguidores selecionados
followers: Seguidores followers: Seguidores
following: Seguindo following: Seguindo
invited: Convidado invited: Convidado
@ -1202,6 +1210,8 @@ pt-BR:
other: "%{count} votos" other: "%{count} votos"
vote: Votar vote: Votar
show_more: Mostrar mais show_more: Mostrar mais
show_newer: Mostrar mais recentes
show_older: Mostrar mais antigos
show_thread: Mostrar conversa show_thread: Mostrar conversa
sign_in_to_participate: Entre para participar dessa conversa sign_in_to_participate: Entre para participar dessa conversa
title: '%{name}: "%{quote}"' title: '%{name}: "%{quote}"'
@ -1338,6 +1348,7 @@ pt-BR:
warning: warning:
explanation: 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. 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. 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. 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}. 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: subject:
disable: Sua conta %{acct} foi bloqueada disable: Sua conta %{acct} foi bloqueada
none: Aviso para %{acct} none: Aviso para %{acct}
sensitive: Sua conta %{acct} de postagem de mídia foi marcada como sensível
silence: Sua conta %{acct} foi silenciada silence: Sua conta %{acct} foi silenciada
suspend: Sua conta %{acct} foi banida suspend: Sua conta %{acct} foi banida
title: title:
disable: Conta bloqueada disable: Conta bloqueada
none: Aviso none: Aviso
sensitive: Sua mídia foi marcada como sensível
silence: Conta silenciada silence: Conta silenciada
suspend: Conta banida suspend: Conta banida
welcome: welcome:

View File

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

View File

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

View File

@ -29,7 +29,7 @@ eo:
phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo 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. 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_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_default: Kaŝi aŭdovidaĵojn markitajn kiel tiklaj
setting_display_media_hide_all: Ĉiam kaŝi ĉiujn aŭdovidaĵojn 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 setting_display_media_show_all: Ĉiam montri aŭdovidaĵojn markitajn kiel tiklaj

View File

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

View File

@ -65,6 +65,8 @@ hy:
data: CSV ֆայլը ներմուծուել է Մաստոդոնի այլ սերուերից data: CSV ֆայլը ներմուծուել է Մաստոդոնի այլ սերուերից
invite_request: invite_request:
text: Սա կօգնի մեզ ստուգել քո յաւելուածը text: Սա կօգնի մեզ ստուգել քո յաւելուածը
ip_block:
ip: Ներմուծէք IPv4 կամ IPv6 հասցէն։ Նաև կարող ես արգելափակել հասցէների միջակայքեր օգտագործելով CIDR սինտաքսը։ Զգոյշ եղիր՝ ինքդ քեզ չարգելափակես։
sessions: sessions:
otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝ otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝
tag: tag:
@ -168,6 +170,13 @@ hy:
comment: Մեկնաբանություն comment: Մեկնաբանություն
invite_request: invite_request:
text: Ինչո՞ւ ես ցանկանում միանալ text: Ինչո՞ւ ես ցանկանում միանալ
ip_block:
comment: Մեկնաբանություն
ip: IP
severities:
no_access: Մուտքը արգելել
sign_up_requires_approval: Սահմանափակել գրանցումները
severity: Կանոն
notification_emails: notification_emails:
digest: Ուղարկել դասակարգուած իմակներ digest: Ուղարկել դասակարգուած իմակներ
favourite: Որեւէ մեկը հաւանեց գրառումդ 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 text: Aquò nos ajudarà per validar vòstra demanda
ip_block: ip_block:
comment: Opcional. Remembratz-vos perque ajustèretz aquesta règla. 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 severity: Causissètz que far amb las requèstas daquesta IP
sessions: 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:' 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: types:
disable: Wyłącz disable: Wyłącz
none: Nie rób niczego none: Nie rób niczego
sensitive: Wrażliwe
silence: Wycisz silence: Wycisz
suspend: Zawieś i nieodwracalnie usuń dane konta suspend: Zawieś i nieodwracalnie usuń dane konta
warning_preset_id: Użyj szablonu ostrzeżenia warning_preset_id: Użyj szablonu ostrzeżenia

View File

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

View File

@ -7,12 +7,12 @@ vi:
account_migration: 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 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: 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 title: Tùy chọn. Không cho người nhận xem
admin_account_action: 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ọ 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> 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 warning_preset_id: Tùy chọn. Bạn vẫn có thể thêm ghi chú riêng
announcement: 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 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 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ể 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: defaults:
autofollow: Những người đăng ký sẽ tự động theo dõi bạn 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 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 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 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 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 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 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 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 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. 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 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ý. 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 with_dns_records: Nếu DNS có vấn đề, nó sẽ bị đưa vào danh sách cấm
featured_tag: 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: form_challenge:
current_password: Biểu mẫu này an toàn current_password: Biểu mẫu này an toàn
imports: 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 text: Điều này sẽ giúp chúng tôi phê duyệt đăng ký của bạn
ip_block: ip_block:
comment: Tùy chọn. Hãy cho biết lý do bạn chặn IP này. 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ộ! 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: severities:
no_access: Chặn truy cập từ tất cả IP này 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 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 severity: Chọn hành động nếu nhận được yêu cầu từ IP này
sessions: 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. webauthn: Nếu đây là USB key, hãy cắm vào và thử xoay chiều.
tag: 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 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 type: Hành động
types: types:
disable: Tạm khóa disable: Tạm khóa
none: Gửi cảnh cáo none: Cấm upload
sensitive: Nhạy cảm sensitive: Nhạy cảm
silence: Tạm ẩn silence: Tạm ẩn
suspend: Vô hiệu hóa 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: announcement:
all_day: Sự kiện diễn ra hằng ngày all_day: Sự kiện diễn ra hằng ngày
ends_at: Kết thúc sự kiện ends_at: Kết thúc sự kiện
@ -130,7 +130,7 @@ vi:
irreversible: Xóa bỏ vĩnh viễn irreversible: Xóa bỏ vĩnh viễn
locale: Ngôn ngữ locale: Ngôn ngữ
locked: Đây là tài khoản riêng tư 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 new_password: Mật khẩu mới
note: Tiểu sử note: Tiểu sử
otp_attempt: Xác thực hai bước 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_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_reduce_motion: Giảm chuyển động ảnh GIF
setting_show_application: Hiện ứng dụng đã dùng để đăng tút 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_theme: Giao diện
setting_trends: Hiển thị xu hướng hôm nay 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 đó 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 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 name: Hashtag
trendable: Cho phép hashtag này xuất hiện trong xu hướng 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 'no': Tắt
recommended: Khuyến nghị recommended: Khuyến nghị
required: required:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

View File

@ -625,6 +625,8 @@ zh-TW:
lists: 列表 lists: 列表
mutes: 您靜音的使用者 mutes: 您靜音的使用者
storage: 儲存空間大小 storage: 儲存空間大小
featured_tags:
hint_html: "<strong>推薦標籤是什麼?</strong> 這些標籤將顯示於您的公開個人檔案頁,訪客可以藉此閱覽您標示了這些標籤的嘟文,拿來展示創意作品或者長期更新的專案很好用唷!"
filters: filters:
index: index:
empty: 您沒有過濾器。 empty: 您沒有過濾器。
@ -767,6 +769,7 @@ zh-TW:
development: 開發 development: 開發
edit_profile: 編輯使用者資訊 edit_profile: 編輯使用者資訊
export: 匯出 export: 匯出
featured_tags: 推薦標籤
import: 匯入 import: 匯入
migrate: 帳戶搬遷 migrate: 帳戶搬遷
notifications: 通知 notifications: 通知
@ -849,3 +852,6 @@ zh-TW:
otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫 otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫
seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼與電子郵件。 seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼與電子郵件。
signed_in_as: 目前登入的帳戶: 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 ||= IpBlock.new(ip: address)
ip_block.severity = options[:severity] 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] ip_block.expires_in = options[:duration]
if ip_block.save if ip_block.save

View File

@ -55,8 +55,8 @@ module Mastodon
belongs_to :account, inverse_of: :account_stat belongs_to :account, inverse_of: :account_stat
end end
# Dummy class, to make migration possible across version changes
class Account < ApplicationRecord class Account < ApplicationRecord
# Dummy class, to make migration possible across version changes
has_one :user, inverse_of: :account has_one :user, inverse_of: :account
has_one :account_stat, inverse_of: :account has_one :account_stat, inverse_of: :account
@ -69,6 +69,49 @@ module Mastodon
def acct def acct
local? ? username : "#{username}@#{domain}" local? ? username : "#{username}@#{domain}"
end 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 end
class User < ApplicationRecord class User < ApplicationRecord

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