Merge remote-tracking branch 'upstream/main'
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
commit
6cb18320c0
124 changed files with 923 additions and 467 deletions
2
.github/workflows/crowdin-download.yml
vendored
2
.github/workflows/crowdin-download.yml
vendored
|
@ -52,7 +52,7 @@ jobs:
|
|||
|
||||
# Create or update the pull request
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5.0.2
|
||||
uses: peter-evans/create-pull-request@v6.0.0
|
||||
with:
|
||||
commit-message: 'New Crowdin translations'
|
||||
title: 'New Crowdin Translations (automated)'
|
||||
|
|
|
@ -96,12 +96,6 @@ Rails/FilePath:
|
|||
Rails/HttpStatus:
|
||||
EnforcedStyle: numeric
|
||||
|
||||
# Reason: Allowed in boot ENV checker
|
||||
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
|
||||
Rails/Exit:
|
||||
Exclude:
|
||||
- 'config/boot.rb'
|
||||
|
||||
# Reason: Conflicts with `Lint/UselessMethodDefinition` for inherited controller actions
|
||||
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railslexicallyscopedactionfilter
|
||||
Rails/LexicallyScopedActionFilter:
|
||||
|
|
95
CHANGELOG.md
95
CHANGELOG.md
|
@ -2,6 +2,101 @@
|
|||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [4.2.7] - 2024-02-16
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix OmniAuth tests and edge cases in error handling ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29201), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/29207))
|
||||
- Fix new installs by upgrading to the latest release of the `nsa` gem, instead of a no longer existing commit ([mjankowski](https://github.com/mastodon/mastodon/pull/29065))
|
||||
|
||||
### Security
|
||||
|
||||
- Fix insufficient checking of remote posts ([GHSA-jhrq-qvrm-qr36](https://github.com/mastodon/mastodon/security/advisories/GHSA-jhrq-qvrm-qr36))
|
||||
|
||||
## [4.2.6] - 2024-02-14
|
||||
|
||||
### Security
|
||||
|
||||
- Update the `sidekiq-unique-jobs` dependency (see [GHSA-cmh9-rx85-xj38](https://github.com/mhenrixon/sidekiq-unique-jobs/security/advisories/GHSA-cmh9-rx85-xj38))
|
||||
In addition, we have disabled the web interface for `sidekiq-unique-jobs` out of caution.
|
||||
If you need it, you can re-enable it by setting `ENABLE_SIDEKIQ_UNIQUE_JOBS_UI=true`.
|
||||
If you only need to clear all locks, you can now use `bundle exec rake sidekiq_unique_jobs:delete_all_locks`.
|
||||
- Update the `nokogiri` dependency (see [GHSA-xc9x-jj77-9p9j](https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-xc9x-jj77-9p9j))
|
||||
- Disable administrative Doorkeeper routes ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/29187))
|
||||
- Fix ongoing streaming sessions not being invalidated when applications get deleted in some cases ([GHSA-7w3c-p9j8-mq3x](https://github.com/mastodon/mastodon/security/advisories/GHSA-7w3c-p9j8-mq3x))
|
||||
In some rare cases, the streaming server was not notified of access tokens revocation on application deletion.
|
||||
- Change external authentication behavior to never reattach a new identity to an existing user by default ([GHSA-vm39-j3vx-pch3](https://github.com/mastodon/mastodon/security/advisories/GHSA-vm39-j3vx-pch3))
|
||||
Up until now, Mastodon has allowed new identities from external authentication providers to attach to an existing local user based on their verified e-mail address.
|
||||
This allowed upgrading users from a database-stored password to an external authentication provider, or move from one authentication provider to another.
|
||||
However, this behavior may be unexpected, and means that when multiple authentication providers are configured, the overall security would be that of the least secure authentication provider.
|
||||
For these reasons, this behavior is now locked under the `ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH` environment variable.
|
||||
In addition, regardless of this environment variable, Mastodon will refuse to attach two identities from the same authentication provider to the same account.
|
||||
|
||||
## [4.2.5] - 2024-02-01
|
||||
|
||||
### Security
|
||||
|
||||
- Fix insufficient origin validation (CVE-2024-23832, [GHSA-3fjr-858r-92rw](https://github.com/mastodon/mastodon/security/advisories/GHSA-3fjr-858r-92rw))
|
||||
|
||||
## [4.2.4] - 2024-01-24
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix error when processing remote files with unusually long names ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28823))
|
||||
- Fix processing of compacted single-item JSON-LD collections ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28816))
|
||||
- Retry 401 errors on replies fetching ([ShadowJonathan](https://github.com/mastodon/mastodon/pull/28788))
|
||||
- Fix `RecordNotUnique` errors in LinkCrawlWorker ([tribela](https://github.com/mastodon/mastodon/pull/28748))
|
||||
- Fix Mastodon not correctly processing HTTP Signatures with query strings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28443), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/28476))
|
||||
- Fix potential redirection loop of streaming endpoint ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28665))
|
||||
- Fix streaming API redirection ignoring the port of `streaming_api_base_url` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28558))
|
||||
- Fix error when processing link preview with an array as `inLanguage` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28252))
|
||||
- Fix unsupported time zone or locale preventing sign-up ([Gargron](https://github.com/mastodon/mastodon/pull/28035))
|
||||
- Fix "Hide these posts from home" list setting not refreshing when switching lists ([brianholley](https://github.com/mastodon/mastodon/pull/27763))
|
||||
- Fix missing background behind dismissable banner in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/27479))
|
||||
- Fix line wrapping of language selection button with long locale codes ([gunchleoc](https://github.com/mastodon/mastodon/pull/27100), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27127))
|
||||
- Fix `Undo Announce` activity not being sent to non-follower authors ([MitarashiDango](https://github.com/mastodon/mastodon/pull/18482))
|
||||
- Fix N+1s because of association preloaders not actually getting called ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28339))
|
||||
- Fix empty column explainer getting cropped under certain conditions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28337))
|
||||
- Fix `LinkCrawlWorker` error when encountering empty OEmbed response ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28268))
|
||||
- Fix call to inefficient `delete_matched` cache method in domain blocks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28367))
|
||||
|
||||
### Security
|
||||
|
||||
- Add rate-limit of TOTP authentication attempts at controller level ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28801))
|
||||
|
||||
## [4.2.3] - 2023-12-05
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix dependency on `json-canonicalization` version that has been made unavailable since last release
|
||||
|
||||
## [4.2.2] - 2023-12-04
|
||||
|
||||
### Changed
|
||||
|
||||
- Change dismissed banners to be stored server-side ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27055))
|
||||
- Change GIF max matrix size error to explicitly mention GIF files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27927))
|
||||
- Change `Follow` activities delivery to bypass availability check ([ShadowJonathan](https://github.com/mastodon/mastodon/pull/27586))
|
||||
- Change single-column navigation notice to be displayed outside of the logo container ([renchap](https://github.com/mastodon/mastodon/pull/27462), [renchap](https://github.com/mastodon/mastodon/pull/27476))
|
||||
- Change Content-Security-Policy to be tighter on media paths ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26889))
|
||||
- Change post language code to include country code when relevant ([gunchleoc](https://github.com/mastodon/mastodon/pull/27099), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27207))
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix upper border radius of onboarding columns ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27890))
|
||||
- Fix incoming status creation date not being restricted to standard ISO8601 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27655), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/28081))
|
||||
- Fix some posts from threads received out-of-order sometimes not being inserted into timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27653))
|
||||
- Fix posts from force-sensitized accounts being able to trend ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27620))
|
||||
- Fix error when trying to delete already-deleted file with OpenStack Swift ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27569))
|
||||
- Fix batch attachment deletion when using OpenStack Swift ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27554))
|
||||
- Fix processing LDSigned activities from actors with unknown public keys ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27474))
|
||||
- Fix error and incorrect URLs in `/api/v1/accounts/:id/featured_tags` for remote accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27459))
|
||||
- Fix report processing notice not mentioning the report number when performing a custom action ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27442))
|
||||
- Fix handling of `inLanguage` attribute in preview card processing ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27423))
|
||||
- Fix own posts being removed from home timeline when unfollowing a used hashtag ([kmycode](https://github.com/mastodon/mastodon/pull/27391))
|
||||
- Fix some link anchors being recognized as hashtags ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27271), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27584))
|
||||
- Fix format-dependent redirects being cached regardless of requested format ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27634))
|
||||
|
||||
## [4.2.1] - 2023-10-10
|
||||
|
||||
### Added
|
||||
|
|
|
@ -219,7 +219,7 @@ GEM
|
|||
docile (1.4.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
doorkeeper (5.6.8)
|
||||
doorkeeper (5.6.9)
|
||||
railties (>= 5)
|
||||
dotenv (2.8.1)
|
||||
dotenv-rails (2.8.1)
|
||||
|
@ -505,7 +505,7 @@ GEM
|
|||
parslet (2.0.0)
|
||||
pastel (0.8.0)
|
||||
tty-color (~> 0.5)
|
||||
pg (1.5.4)
|
||||
pg (1.5.5)
|
||||
pghero (3.4.1)
|
||||
activerecord (>= 6)
|
||||
posix-spawn (0.3.15)
|
||||
|
@ -707,7 +707,7 @@ GEM
|
|||
rufus-scheduler (~> 3.2)
|
||||
sidekiq (>= 6, < 8)
|
||||
tilt (>= 1.4.0)
|
||||
sidekiq-unique-jobs (7.1.31)
|
||||
sidekiq-unique-jobs (7.1.33)
|
||||
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||
redis (< 5.0)
|
||||
|
@ -811,7 +811,7 @@ GEM
|
|||
xorcist (1.1.3)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
zeitwerk (2.6.12)
|
||||
zeitwerk (2.6.13)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
|
|
@ -69,7 +69,7 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre
|
|||
|
||||
- **PostgreSQL** 12+
|
||||
- **Redis** 4+
|
||||
- **Ruby** 2.7+
|
||||
- **Ruby** 3.0+
|
||||
- **Node.js** 16+
|
||||
|
||||
The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
|
||||
|
|
|
@ -7,7 +7,7 @@ class Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|||
def self.provides_callback_for(provider)
|
||||
define_method provider do
|
||||
@provider = provider
|
||||
@user = User.find_for_oauth(request.env['omniauth.auth'], current_user)
|
||||
@user = User.find_for_omniauth(request.env['omniauth.auth'], current_user)
|
||||
|
||||
if @user.persisted?
|
||||
record_login_activity
|
||||
|
@ -17,6 +17,9 @@ class Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|||
session["devise.#{provider}_data"] = request.env['omniauth.auth']
|
||||
redirect_to new_user_registration_url
|
||||
end
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
flash[:alert] = I18n.t('devise.failure.omniauth_user_creation_failure') if is_navigational_format?
|
||||
redirect_to new_user_session_url
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -174,7 +174,19 @@ module JsonLdHelper
|
|||
build_request(uri, on_behalf_of, options: request_options).perform do |response|
|
||||
raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
|
||||
|
||||
body_to_json(response.body_with_limit) if response.code == 200
|
||||
body_to_json(response.body_with_limit) if response.code == 200 && valid_activitypub_content_type?(response)
|
||||
end
|
||||
end
|
||||
|
||||
def valid_activitypub_content_type?(response)
|
||||
return true if response.mime_type == 'application/activity+json'
|
||||
|
||||
# When the mime type is `application/ld+json`, we need to check the profile,
|
||||
# but `http.rb` does not parse it for us.
|
||||
return false unless response.mime_type == 'application/ld+json'
|
||||
|
||||
response.headers[HTTP::Headers::CONTENT_TYPE]&.split(';')&.map(&:strip)&.any? do |str|
|
||||
str.start_with?('profile="') && str[9...-1].split.include?('https://www.w3.org/ns/activitystreams')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -152,8 +152,8 @@
|
|||
"compose_form.poll.switch_to_multiple": "Змяніце апытанне, каб дазволіць некалькі варыянтаў адказу",
|
||||
"compose_form.poll.switch_to_single": "Змяніце апытанне, каб дазволіць адзіны варыянт адказу",
|
||||
"compose_form.poll.type": "Стыль",
|
||||
"compose_form.publish": "Допіс",
|
||||
"compose_form.publish_form": "Апублікаваць",
|
||||
"compose_form.publish": "Даслаць",
|
||||
"compose_form.publish_form": "Новы допіс",
|
||||
"compose_form.reply": "Адказаць",
|
||||
"compose_form.save_changes": "Абнавіць",
|
||||
"compose_form.spoiler.marked": "Выдаліць папярэджанне аб змесціве",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"about.contact": "За контакти:",
|
||||
"about.disclaimer": "Mastodon е безплатен софтуер с отворен изходен код и търговска марка на Mastodon gGmbH.",
|
||||
"about.domain_blocks.no_reason_available": "Няма налична причина",
|
||||
"about.domain_blocks.preamble": "Mastodon обикновено позволява да разглеждате съдържание и да взаимодействате с други потребители от всякакви сървъри във Федивърс. Има изключения, направени конкретно за този сървър.",
|
||||
"about.domain_blocks.preamble": "Mastodon обикновено позволява да разглеждате съдържание и да взаимодействате с други потребители от всякакви сървъри във Федивселената. Има изключения, направени конкретно за този сървър.",
|
||||
"about.domain_blocks.silenced.explanation": "Обикновено няма да виждате профили и съдържание, освен ако изрично не го потърсите или се включете в него, следвайки го.",
|
||||
"about.domain_blocks.silenced.title": "Ограничено",
|
||||
"about.domain_blocks.suspended.explanation": "Никакви данни от този сървър няма да се обработват, съхраняват или обменят, правещи невъзможно всяко взаимодействие или комуникация с потребители от тези сървъри.",
|
||||
|
@ -110,7 +110,7 @@
|
|||
"column.about": "Относно",
|
||||
"column.blocks": "Блокирани потребители",
|
||||
"column.bookmarks": "Отметки",
|
||||
"column.community": "Локална часова ос",
|
||||
"column.community": "Локален инфопоток",
|
||||
"column.direct": "Частни споменавания",
|
||||
"column.directory": "Разглеждане на профили",
|
||||
"column.domain_blocks": "Блокирани домейни",
|
||||
|
@ -201,7 +201,7 @@
|
|||
"disabled_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен.",
|
||||
"dismissable_banner.community_timeline": "Ето най-скорошните публични публикации от хора, чиито акаунти са разположени в {domain}.",
|
||||
"dismissable_banner.dismiss": "Отхвърляне",
|
||||
"dismissable_banner.explore_links": "Тези новини се разказват от хората в този и други сървъри на децентрализираната мрежа точно сега.",
|
||||
"dismissable_banner.explore_links": "Това са най-споделяните новини в социалната мрежа днес. По-нови истории, споделени от повече хора се показват по-напред.",
|
||||
"dismissable_banner.explore_statuses": "Има публикации през социалната мрежа, които днес набират популярност. По-новите публикации с повече подсилвания и любими са класирани по-високо.",
|
||||
"dismissable_banner.explore_tags": "Тези хаштагове сега набират популярност сред хората в този и други сървъри на децентрализирата мрежа.",
|
||||
"dismissable_banner.public_timeline": "Ето най-новите обществени публикации от хора в социална мрежа, която хората в {domain} следват.",
|
||||
|
@ -228,10 +228,10 @@
|
|||
"empty_column.account_unavailable": "Профилът не е наличен",
|
||||
"empty_column.blocks": "Още не сте блокирали никакви потребители.",
|
||||
"empty_column.bookmarked_statuses": "Още не сте отметнали публикации. Отметвайки някоя, то тя ще се покаже тук.",
|
||||
"empty_column.community": "Местната часова ос е празна. Напишете нещо обществено, за да завъртите нещата!",
|
||||
"empty_column.community": "Локалният инфопоток е празен. Публикувайте нещо, за да започнете!",
|
||||
"empty_column.direct": "Още нямате никакви частни споменавания. Тук ще се показват, изпращайки или получавайки едно.",
|
||||
"empty_column.domain_blocks": "Още няма блокирани домейни.",
|
||||
"empty_column.explore_statuses": "Няма нищо налагащо се в момента. Проверете пак по-късно!",
|
||||
"empty_column.explore_statuses": "Няма тенденции в момента. Проверете пак по-късно!",
|
||||
"empty_column.favourited_statuses": "Още нямате никакви любими публикации. Правейки любима, то тя ще се покаже тук.",
|
||||
"empty_column.favourites": "Още никого не е слагал публикацията в любими. Когато някой го направи, този човек ще се покаже тук.",
|
||||
"empty_column.follow_requests": "Още нямате заявки за последване. Получавайки такава, то тя ще се покаже тук.",
|
||||
|
@ -348,10 +348,10 @@
|
|||
"keyboard_shortcuts.favourites": "Отваряне на списъка с любими",
|
||||
"keyboard_shortcuts.federated": "Отваряне на федерирания инфопоток",
|
||||
"keyboard_shortcuts.heading": "Клавишни съчетания",
|
||||
"keyboard_shortcuts.home": "Отваряне на началната часова ос",
|
||||
"keyboard_shortcuts.home": "Отваряне на личния инфопоток",
|
||||
"keyboard_shortcuts.hotkey": "Бърз клавиш",
|
||||
"keyboard_shortcuts.legend": "Показване на тази легенда",
|
||||
"keyboard_shortcuts.local": "Отваряне на местна часова ос",
|
||||
"keyboard_shortcuts.local": "Отваряне на локалния инфопоток",
|
||||
"keyboard_shortcuts.mention": "Споменаване на автора",
|
||||
"keyboard_shortcuts.muted": "Отваряне на списъка със заглушени потребители",
|
||||
"keyboard_shortcuts.my_profile": "Отваряне на профила ви",
|
||||
|
@ -402,12 +402,12 @@
|
|||
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
|
||||
"navigation_bar.blocks": "Блокирани потребители",
|
||||
"navigation_bar.bookmarks": "Отметки",
|
||||
"navigation_bar.community_timeline": "Локална часова ос",
|
||||
"navigation_bar.community_timeline": "Локален инфопоток",
|
||||
"navigation_bar.compose": "Съставяне на нова публикация",
|
||||
"navigation_bar.direct": "Частни споменавания",
|
||||
"navigation_bar.discover": "Откриване",
|
||||
"navigation_bar.domain_blocks": "Блокирани домейни",
|
||||
"navigation_bar.explore": "Изследване",
|
||||
"navigation_bar.explore": "Разглеждане",
|
||||
"navigation_bar.favourites": "Любими",
|
||||
"navigation_bar.filters": "Заглушени думи",
|
||||
"navigation_bar.follow_requests": "Заявки за последване",
|
||||
|
@ -474,10 +474,10 @@
|
|||
"notifications_permission_banner.title": "Никога не пропускате нещо",
|
||||
"onboarding.action.back": "Върнете ме обратно",
|
||||
"onboarding.actions.back": "Върнете ме обратно",
|
||||
"onboarding.actions.go_to_explore": "Вижте какво изгрява",
|
||||
"onboarding.actions.go_to_explore": "Виж тенденции",
|
||||
"onboarding.actions.go_to_home": "Към началния ви инфоканал",
|
||||
"onboarding.compose.template": "Здравейте, #Mastodon!",
|
||||
"onboarding.follows.empty": "За съжаление, в момента не могат да се показват резултати. Може да опитате да употребявате търсене или да прегледате страницата за изследване, за да намерите страница за последване, или да опитате пак по-късно.",
|
||||
"onboarding.follows.empty": "За съжаление, в момента не могат да бъдат показани резултати. Може да опитате да търсите или да разгледате, за да намерите кого да последвате, или опитайте отново по-късно.",
|
||||
"onboarding.follows.lead": "Може да бъдете куратор на началния си инфоканал. Последвайки повече хора, по-деен и по-интересен ще става. Тези профили може да са добра начална точка, от която винаги по-късно да спрете да следвате!",
|
||||
"onboarding.follows.title": "Популярно в Mastodon",
|
||||
"onboarding.profile.discoverable": "Правене на моя профил откриваем",
|
||||
|
@ -524,13 +524,13 @@
|
|||
"poll_button.add_poll": "Анкетиране",
|
||||
"poll_button.remove_poll": "Премахване на анкета",
|
||||
"privacy.change": "Промяна на поверителността на публикация",
|
||||
"privacy.direct.long": "Всеки споменат в публикацията",
|
||||
"privacy.direct.long": "Споменатите в публикацията",
|
||||
"privacy.direct.short": "Определени хора",
|
||||
"privacy.private.long": "Само последователите ви",
|
||||
"privacy.private.short": "Последователи",
|
||||
"privacy.public.long": "Всеки във и извън Mastodon",
|
||||
"privacy.public.short": "Публично",
|
||||
"privacy.unlisted.additional": "Това поведение е точно като публичното, с изключение на това, че публикацията няма да се появява в каналите на живо, хаштаговете, проучването или търсенето в Mastodon, дори ако сте се включили в целия акаунт.",
|
||||
"privacy.unlisted.additional": "Това действие е точно като публичното, с изключение на това, че публикацията няма да се появява в каналите на живо, хаштаговете, разглеждането или търсенето в Mastodon, дори ако сте избрали да се публично видими на ниво акаунт.",
|
||||
"privacy.unlisted.long": "По-малко алгоритмични фанфари",
|
||||
"privacy.unlisted.short": "Тиха публика",
|
||||
"privacy_policy.last_updated": "Последно осъвременяване на {date}",
|
||||
|
|
|
@ -532,7 +532,7 @@
|
|||
"privacy.public.short": "Públic",
|
||||
"privacy.unlisted.additional": "Es comporta igual que públic, excepte que la publicació no apareixerà als canals en directe o etiquetes, l'explora o a la cerca de Mastodon, fins i tot si ho heu activat a nivell de compte.",
|
||||
"privacy.unlisted.long": "Menys fanfàrries algorísmiques",
|
||||
"privacy.unlisted.short": "Públic tranquil",
|
||||
"privacy.unlisted.short": "Públic silenciós",
|
||||
"privacy_policy.last_updated": "Darrera actualització {date}",
|
||||
"privacy_policy.title": "Política de Privacitat",
|
||||
"recommended": "Recomanat",
|
||||
|
|
|
@ -146,12 +146,12 @@
|
|||
"compose_form.lock_disclaimer.lock": "geschützt",
|
||||
"compose_form.placeholder": "Was gibt’s Neues?",
|
||||
"compose_form.poll.duration": "Umfragedauer",
|
||||
"compose_form.poll.multiple": "Mehrfachauswahl",
|
||||
"compose_form.poll.option_placeholder": "{number}. Auswahlmöglichkeit",
|
||||
"compose_form.poll.multiple": "Multiple-Choice",
|
||||
"compose_form.poll.option_placeholder": "Option {number}",
|
||||
"compose_form.poll.single": "Einfachauswahl",
|
||||
"compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben",
|
||||
"compose_form.poll.switch_to_single": "Nur Einfachauswahl erlauben",
|
||||
"compose_form.poll.type": "Art",
|
||||
"compose_form.poll.type": "Stil",
|
||||
"compose_form.publish": "Veröffentlichen",
|
||||
"compose_form.publish_form": "Neuer Beitrag",
|
||||
"compose_form.reply": "Antworten",
|
||||
|
@ -277,9 +277,9 @@
|
|||
"follow_request.authorize": "Genehmigen",
|
||||
"follow_request.reject": "Ablehnen",
|
||||
"follow_requests.unlocked_explanation": "Auch wenn dein Konto öffentlich bzw. nicht geschützt ist, haben die Moderator*innen von {domain} gedacht, dass du diesen Follower lieber manuell bestätigen solltest.",
|
||||
"follow_suggestions.curated_suggestion": "Vom Server empfohlen",
|
||||
"follow_suggestions.curated_suggestion": "Auswahl des Herausgebers",
|
||||
"follow_suggestions.dismiss": "Nicht mehr anzeigen",
|
||||
"follow_suggestions.personalized_suggestion": "Personalisierte Empfehlung",
|
||||
"follow_suggestions.personalized_suggestion": "Persönliche Empfehlung",
|
||||
"follow_suggestions.popular_suggestion": "Beliebte Empfehlung",
|
||||
"follow_suggestions.view_all": "Alle anzeigen",
|
||||
"follow_suggestions.who_to_follow": "Empfohlene Profile",
|
||||
|
@ -528,7 +528,7 @@
|
|||
"privacy.direct.short": "Bestimmte Profile",
|
||||
"privacy.private.long": "Nur deine Follower",
|
||||
"privacy.private.short": "Follower",
|
||||
"privacy.public.long": "Alle auf und außerhalb von Mastodon",
|
||||
"privacy.public.long": "Alle in und außerhalb von Mastodon",
|
||||
"privacy.public.short": "Öffentlich",
|
||||
"privacy.unlisted.additional": "Das Verhalten ist wie bei „Öffentlich“, jedoch erscheint dieser Beitrag nicht in „Live-Feeds“, „Erkunden“, Hashtags oder über die Mastodon-Suchfunktion – selbst wenn du das in den Einstellungen aktiviert hast.",
|
||||
"privacy.unlisted.long": "Weniger im Algorithmus berücksichtigt",
|
||||
|
|
|
@ -530,6 +530,8 @@
|
|||
"privacy.private.short": "Seguidores",
|
||||
"privacy.public.long": "Cualquiera dentro y fuera de Mastodon",
|
||||
"privacy.public.short": "Público",
|
||||
"privacy.unlisted.additional": "Esto se comporta exactamente igual que el público, excepto que la publicación no aparecerá en la cronología en directo o en las etiquetas, la exploración o búsqueda de Mastodon, incluso si está optado por activar la cuenta de usuario.",
|
||||
"privacy.unlisted.long": "Menos fanfares algorítmicos",
|
||||
"privacy.unlisted.short": "Público tranquilo",
|
||||
"privacy_policy.last_updated": "Actualizado por última vez {date}",
|
||||
"privacy_policy.title": "Política de Privacidad",
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
"about.blocks": "Servitores moderate",
|
||||
"about.contact": "Contacto:",
|
||||
"about.disclaimer": "Mastodon es software libere, de codice aperte, e un marca de Mastodon gGmbH.",
|
||||
"about.domain_blocks.no_reason_available": "Ration non disponibile",
|
||||
"about.domain_blocks.silenced.title": "Limitate",
|
||||
"about.domain_blocks.suspended.title": "Suspendite",
|
||||
"about.not_available": "Iste information non faceva disponibile in iste servitor.",
|
||||
"about.rules": "Regulas del servitor",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Adder o remover ab listas",
|
||||
|
@ -153,6 +155,7 @@
|
|||
"disabled_account_banner.account_settings": "Parametros de conto",
|
||||
"disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.",
|
||||
"dismissable_banner.dismiss": "Dimitter",
|
||||
"embed.preview": "Hic es como il parera:",
|
||||
"emoji_button.activity": "Activitate",
|
||||
"emoji_button.clear": "Rader",
|
||||
"emoji_button.custom": "Personalisate",
|
||||
|
@ -171,6 +174,11 @@
|
|||
"empty_column.account_timeline": "Nulle messages hic!",
|
||||
"empty_column.account_unavailable": "Profilo non disponibile",
|
||||
"empty_column.blocks": "Tu non ha blocate alcun usator ancora.",
|
||||
"empty_column.domain_blocks": "Il non ha dominios blocate ancora.",
|
||||
"empty_column.explore_statuses": "Nihil es in tendentias ora mesme. Retorna postea!",
|
||||
"empty_column.favourited_statuses": "Tu non ha necun messages favorite ancora. Quando tu marca un como favorito, ille essera monstrate hic.",
|
||||
"empty_column.followed_tags": "Tu ancora non ha sequite necun hashtags. Quando tu lo face, illes essera monstrate hic.",
|
||||
"empty_column.hashtag": "Ancora non il ha nihil in iste hashtag.",
|
||||
"errors.unexpected_crash.report_issue": "Signalar un defecto",
|
||||
"explore.search_results": "Resultatos de recerca",
|
||||
"explore.suggested_follows": "Personas",
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
"compose_form.save_changes": "Actualisar",
|
||||
"compose_form.spoiler.marked": "Remover avise pri li contenete",
|
||||
"compose_form.spoiler.unmarked": "Adjunter avise pri li contenete",
|
||||
"compose_form.spoiler_placeholder": "Advertiment de contenete (optional)",
|
||||
"confirmation_modal.cancel": "Anullar",
|
||||
"confirmations.block.block_and_report": "Bloccar & Raportar",
|
||||
"confirmations.block.confirm": "Bloccar",
|
||||
|
@ -276,6 +277,12 @@
|
|||
"follow_request.authorize": "Autorisar",
|
||||
"follow_request.reject": "Rejecter",
|
||||
"follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fórsan vell voler tractar seque-petitiones de tis-ci contos manualmen.",
|
||||
"follow_suggestions.curated_suggestion": "Selection del Servitor",
|
||||
"follow_suggestions.dismiss": "Ne monstrar plu",
|
||||
"follow_suggestions.personalized_suggestion": "Personalisat suggestion",
|
||||
"follow_suggestions.popular_suggestion": "Populari suggestion",
|
||||
"follow_suggestions.view_all": "Vider omnicos",
|
||||
"follow_suggestions.who_to_follow": "Persones a sequer",
|
||||
"followed_tags": "Sequet hashtags",
|
||||
"footer.about": "Information",
|
||||
"footer.directory": "Profilarium",
|
||||
|
@ -517,11 +524,15 @@
|
|||
"poll_button.add_poll": "Adjunter un balotation",
|
||||
"poll_button.remove_poll": "Remover balotation",
|
||||
"privacy.change": "Changear li privatie del posta",
|
||||
"privacy.direct.long": "Omnes mentionat in li posta",
|
||||
"privacy.direct.short": "Specific persones",
|
||||
"privacy.private.long": "Solmen tui sequitores",
|
||||
"privacy.private.short": "Sequitores",
|
||||
"privacy.public.long": "Quicunc in e ex Mastodon",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.unlisted.additional": "It acte just quam public, except que li posta ne va aparir in tendentie o hashtags, explorar, o sercha de Mastodon, mem si tu ha optet por les sur tui tot conto.",
|
||||
"privacy.unlisted.long": "Minu fanfare algoritmic",
|
||||
"privacy.unlisted.short": "Quiet public",
|
||||
"privacy_policy.last_updated": "Ultimmen actualisat ye {date}",
|
||||
"privacy_policy.title": "Politica pri Privatie",
|
||||
"recommended": "Recomandat",
|
||||
|
@ -539,7 +550,9 @@
|
|||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"relative_time.today": "hodie",
|
||||
"reply_indicator.attachments": "{count, plural, one {# atachament} other {# atachamentes}}",
|
||||
"reply_indicator.cancel": "Anullar",
|
||||
"reply_indicator.poll": "Balotar",
|
||||
"report.block": "Bloccar",
|
||||
"report.block_explanation": "Tu ne va vider su postas. Li usator ni va posser vider tui postas, ni sequer te, ni va posser saver pri li statu de esser bloccat.",
|
||||
"report.categories.legal": "Legal",
|
||||
|
|
|
@ -11,11 +11,13 @@
|
|||
"account.blocked": "Yettusewḥel",
|
||||
"account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli",
|
||||
"account.cancel_follow_request": "Withdraw follow request",
|
||||
"account.copy": "Nɣel assaɣ ɣer umaɣnu",
|
||||
"account.disable_notifications": "Ḥbes ur iyi-d-ttazen ara ilɣa mi ara d-isuffeɣ @{name}",
|
||||
"account.domain_blocked": "Taɣult yeffren",
|
||||
"account.edit_profile": "Ẓreg amaɣnu",
|
||||
"account.enable_notifications": "Azen-iyi-d ilɣa mi ara d-isuffeɣ @{name}",
|
||||
"account.endorse": "Welleh fell-as deg umaɣnu-inek",
|
||||
"account.featured_tags.last_status_never": "Ulac tisuffaɣ",
|
||||
"account.follow": "Ḍfer",
|
||||
"account.followers": "Imeḍfaren",
|
||||
"account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.",
|
||||
|
@ -65,7 +67,7 @@
|
|||
"bundle_modal_error.message": "Tella-d kra n tuccḍa mi d-yettali ugbur-agi.",
|
||||
"bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen",
|
||||
"closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen",
|
||||
"column.about": "Γef",
|
||||
"column.about": "Ɣef",
|
||||
"column.blocks": "Imiḍanen yettusḥebsen",
|
||||
"column.bookmarks": "Ticraḍ",
|
||||
"column.community": "Tasuddemt tadigant",
|
||||
|
@ -77,7 +79,7 @@
|
|||
"column.lists": "Tibdarin",
|
||||
"column.mutes": "Imiḍanen yettwasgugmen",
|
||||
"column.notifications": "Tilɣa",
|
||||
"column.pins": "Tijewwaqin yettwasenṭḍen",
|
||||
"column.pins": "Tisuffaɣ yettwasenṭḍen",
|
||||
"column.public": "Tasuddemt tamatut",
|
||||
"column_back_button.label": "Tuɣalin",
|
||||
"column_header.hide_settings": "Ffer iɣewwaṛen",
|
||||
|
@ -88,32 +90,36 @@
|
|||
"column_header.unpin": "Kkes asenteḍ",
|
||||
"column_subheading.settings": "Iɣewwaṛen",
|
||||
"community.column_settings.local_only": "Adigan kan",
|
||||
"community.column_settings.media_only": "Allal n teywalt kan",
|
||||
"community.column_settings.media_only": "Imidyaten kan",
|
||||
"community.column_settings.remote_only": "Anmeggag kan",
|
||||
"compose.language.change": "Beddel tutlayt",
|
||||
"compose.language.search": "Nadi tutlayin …",
|
||||
"compose.published.open": "Ldi",
|
||||
"compose_form.direct_message_warning_learn_more": "Issin ugar",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
|
||||
"compose_form.encryption_warning": "",
|
||||
"compose_form.hashtag_warning": "",
|
||||
"compose_form.lock_disclaimer": "Amiḍan-ik·im ur yelli ara {locked}. Menwala yezmer ad k·kem-yeḍfeṛ akken ad iẓer acu tbeṭṭuḍ akked yimeḍfaṛen-ik·im.",
|
||||
"compose_form.lock_disclaimer.lock": "yettwacekkel",
|
||||
"compose_form.placeholder": "D acu i itezzin deg wallaɣ?",
|
||||
"compose_form.poll.duration": "Tanzagt n tefrant",
|
||||
"compose_form.poll.option_placeholder": "Taxtiṛt {number}",
|
||||
"compose_form.poll.single": "Fren yiwen",
|
||||
"compose_form.publish_form": "Suffeɣ",
|
||||
"compose_form.publish_form": "Tasuffeɣt tamaynut",
|
||||
"compose_form.reply": "Err",
|
||||
"compose_form.save_changes": "Leqqem",
|
||||
"compose_form.spoiler.marked": "Kkes aḍris yettwaffren deffir n walɣu",
|
||||
"compose_form.spoiler.unmarked": "Rnu aḍris yettwaffren deffir n walɣu",
|
||||
"confirmation_modal.cancel": "Sefsex",
|
||||
"confirmations.block.block_and_report": "Sewḥel & sewɛed",
|
||||
"confirmations.block.confirm": "Sewḥel",
|
||||
"confirmations.block.message": "Tebγiḍ s tidet ad tesḥebseḍ {name}?",
|
||||
"confirmations.block.message": "Tebɣiḍ s tidet ad tesḥebseḍ {name}?",
|
||||
"confirmations.delete.confirm": "Kkes",
|
||||
"confirmations.delete.message": "Tebɣiḍ s tidet ad tekkseḍ tasuffeɣt-agi?",
|
||||
"confirmations.delete_list.confirm": "Kkes",
|
||||
"confirmations.delete_list.message": "Tebɣiḍ s tidet ad tekkseḍ umuɣ-agi i lebda?",
|
||||
"confirmations.discard_edit_media.confirm": "Sefsex",
|
||||
"confirmations.domain_block.confirm": "Ffer taɣult meṛṛa",
|
||||
"confirmations.edit.confirm": "Ẓreg",
|
||||
"confirmations.logout.confirm": "Ffeɣ",
|
||||
"confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?",
|
||||
"confirmations.mute.confirm": "Sgugem",
|
||||
|
@ -133,12 +139,13 @@
|
|||
"directory.local": "Seg {domain} kan",
|
||||
"directory.new_arrivals": "Imaynuten id yewḍen",
|
||||
"directory.recently_active": "Yermed xas melmi kan",
|
||||
"disabled_account_banner.account_settings": "Iγewwaṛen n umiḍan",
|
||||
"disabled_account_banner.account_settings": "Iɣewwaṛen n umiḍan",
|
||||
"dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
|
||||
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
|
||||
"embed.instructions": "Ẓẓu addad-agi deg usmel-inek s wenγal n tangalt yellan sdaw-agi.",
|
||||
"embed.preview": "Akka ara d-iban:",
|
||||
"emoji_button.activity": "Aqeddic",
|
||||
"emoji_button.clear": "Sfeḍ",
|
||||
"emoji_button.custom": "Udmawan",
|
||||
"emoji_button.flags": "Innayen",
|
||||
"emoji_button.food": "Tegwella & Tissit",
|
||||
|
@ -153,7 +160,7 @@
|
|||
"emoji_button.symbols": "Izamulen",
|
||||
"emoji_button.travel": "Imeḍqan d Yinigen",
|
||||
"empty_column.account_suspended": "Amiḍan yettwaḥbas",
|
||||
"empty_column.account_timeline": "Ulac tijewwaqin dagi!",
|
||||
"empty_column.account_timeline": "Ulac tisuffaɣ da !",
|
||||
"empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi",
|
||||
"empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.",
|
||||
"empty_column.bookmarked_statuses": "Ulac tijewwaqin i terniḍ ɣer yismenyifen-ik ar tura. Ticki terniḍ yiwet, ad d-tettwasken da.",
|
||||
|
@ -174,7 +181,7 @@
|
|||
"explore.suggested_follows": "Imdanen",
|
||||
"explore.title": "Snirem",
|
||||
"explore.trending_links": "Isallen",
|
||||
"explore.trending_statuses": "Tisuffiɣin",
|
||||
"explore.trending_statuses": "Tisuffaɣ",
|
||||
"explore.trending_tags": "Ihacṭagen",
|
||||
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
|
||||
"filter_modal.select_filter.prompt_new": "Taggayt tamaynutt : {name}",
|
||||
|
@ -183,8 +190,9 @@
|
|||
"firehose.local": "Deg uqeddac-ayi",
|
||||
"follow_request.authorize": "Ssireg",
|
||||
"follow_request.reject": "Agi",
|
||||
"footer.about": "Γef",
|
||||
"footer.directory": "Akaram n imaγnuten",
|
||||
"followed_tags": "Ihacṭagen yettwaḍfaren",
|
||||
"footer.about": "Ɣef",
|
||||
"footer.directory": "Akaram n imaɣnuten",
|
||||
"footer.get_app": "Awi-d asnas",
|
||||
"footer.invite": "Ɛreḍ-d kra n yimdanen",
|
||||
"footer.keyboard_shortcuts": "Inegzumen n unasiw",
|
||||
|
@ -207,6 +215,7 @@
|
|||
"home.column_settings.show_replies": "Ssken-d tiririyin",
|
||||
"home.hide_announcements": "Ffer ulɣuyen",
|
||||
"home.show_announcements": "Ssken-d ulɣuyen",
|
||||
"interaction_modal.no_account_yet": "Ulac-ik·ikem deg Maṣṭudun?",
|
||||
"interaction_modal.on_this_server": "Deg uqeddac-ayi",
|
||||
"interaction_modal.title.follow": "Ḍfer {name}",
|
||||
"intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}",
|
||||
|
@ -247,8 +256,8 @@
|
|||
"lightbox.close": "Mdel",
|
||||
"lightbox.compress": "Ḥemmeẓ tamnaḍt n uskan n tugna",
|
||||
"lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna",
|
||||
"lightbox.next": "Γer zdat",
|
||||
"lightbox.previous": "Γer deffir",
|
||||
"lightbox.next": "Ɣer zdat",
|
||||
"lightbox.previous": "Ɣer deffir",
|
||||
"link_preview.author": "S-ɣur {name}",
|
||||
"lists.account.add": "Rnu ɣer tebdart",
|
||||
"lists.account.remove": "Kkes seg tebdart",
|
||||
|
@ -264,11 +273,12 @@
|
|||
"lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ",
|
||||
"lists.subheading": "Tibdarin-ik·im",
|
||||
"load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}",
|
||||
"media_gallery.toggle_visible": "Ffer {number, plural, one {tugna} other {tugniwin}}",
|
||||
"loading_indicator.label": "Yessalay-d …",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Ffer tugna} other {Ffer tugniwin}}",
|
||||
"mute_modal.duration": "Tanzagt",
|
||||
"mute_modal.hide_notifications": "Tebɣiḍ ad teffreḍ talɣutin n umseqdac-a?",
|
||||
"mute_modal.indefinite": "Ur yettwasbadu ara",
|
||||
"navigation_bar.about": "Γef",
|
||||
"navigation_bar.about": "Ɣef",
|
||||
"navigation_bar.blocks": "Imseqdacen yettusḥebsen",
|
||||
"navigation_bar.bookmarks": "Ticraḍ",
|
||||
"navigation_bar.community_timeline": "Tasuddemt tadigant",
|
||||
|
@ -284,7 +294,7 @@
|
|||
"navigation_bar.logout": "Ffeɣ",
|
||||
"navigation_bar.mutes": "Iseqdacen yettwasusmen",
|
||||
"navigation_bar.personal": "Udmawan",
|
||||
"navigation_bar.pins": "Tijewwiqin yettwasentḍen",
|
||||
"navigation_bar.pins": "Tisuffaɣ yettwasenṭḍen",
|
||||
"navigation_bar.preferences": "Imenyafen",
|
||||
"navigation_bar.public_timeline": "Tasuddemt tazayezt tamatut",
|
||||
"navigation_bar.search": "Nadi",
|
||||
|
@ -311,7 +321,7 @@
|
|||
"notifications.column_settings.reblog": "Seǧhed:",
|
||||
"notifications.column_settings.show": "Ssken-d tilɣa deg ujgu",
|
||||
"notifications.column_settings.sound": "Rmed imesli",
|
||||
"notifications.column_settings.status": "Tiẓenẓunin timaynutin:",
|
||||
"notifications.column_settings.status": "Tisuffaɣ timaynutin :",
|
||||
"notifications.filter.all": "Akk",
|
||||
"notifications.filter.boosts": "Seǧhed",
|
||||
"notifications.filter.favourites": "Imenyafen",
|
||||
|
@ -325,11 +335,15 @@
|
|||
"notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel.",
|
||||
"notifications_permission_banner.enable": "Rmed talɣutin n tnarit",
|
||||
"notifications_permission_banner.title": "Ur zeggel acemma",
|
||||
"onboarding.action.back": "Tuɣalin ɣer deffir",
|
||||
"onboarding.actions.back": "Tuɣalin ɣer deffir",
|
||||
"onboarding.actions.go_to_explore": "See what's trending",
|
||||
"onboarding.actions.go_to_home": "Go to your home feed",
|
||||
"onboarding.compose.template": "Azul a #Mastodon!",
|
||||
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
||||
"onboarding.follows.title": "Popular on Mastodon",
|
||||
"onboarding.profile.display_name": "Isem ara d-yettwaskanen",
|
||||
"onboarding.share.title": "Bḍu amaɣnu-inek·inem",
|
||||
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
|
||||
"onboarding.start.skip": "Want to skip right ahead?",
|
||||
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
|
||||
|
@ -365,7 +379,7 @@
|
|||
"report.block": "Sewḥel",
|
||||
"report.categories.other": "Tiyyaḍ",
|
||||
"report.categories.spam": "Aspam",
|
||||
"report.category.title_account": "ameγnu",
|
||||
"report.category.title_account": "ameɣnu",
|
||||
"report.category.title_status": "tasuffeɣt",
|
||||
"report.close": "Immed",
|
||||
"report.forward": "Bren-it ɣeṛ {target}",
|
||||
|
@ -383,6 +397,7 @@
|
|||
"report_notification.open": "Ldi aneqqis",
|
||||
"search.placeholder": "Nadi",
|
||||
"search.search_or_paste": "Nadi neɣ senṭeḍ URL",
|
||||
"search_popout.user": "amseqdac",
|
||||
"search_results.all": "Akk",
|
||||
"search_results.hashtags": "Ihacṭagen",
|
||||
"search_results.statuses": "Tisuffaɣ",
|
||||
|
@ -405,7 +420,7 @@
|
|||
"status.embed": "Seddu",
|
||||
"status.filtered": "Yettwasizdeg",
|
||||
"status.load_more": "Sali ugar",
|
||||
"status.media_hidden": "Taɣwalt tettwaffer",
|
||||
"status.media_hidden": "Amidya yettwaffer",
|
||||
"status.mention": "Bder-d @{name}",
|
||||
"status.more": "Ugar",
|
||||
"status.mute": "Sussem @{name}",
|
||||
|
@ -425,7 +440,7 @@
|
|||
"status.sensitive_warning": "Agbur amḥulfu",
|
||||
"status.share": "Bḍu",
|
||||
"status.show_less": "Ssken-d drus",
|
||||
"status.show_less_all": "Semẓi akk tisuffγin",
|
||||
"status.show_less_all": "Semẓi akk tisuffɣin",
|
||||
"status.show_more": "Ssken-d ugar",
|
||||
"status.show_more_all": "Ẓerr ugar lebda",
|
||||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
|
||||
|
@ -444,7 +459,7 @@
|
|||
"timeline_hint.remote_resource_not_displayed": "{resource} seg yiqeddacen-nniḍen ur d-ttwaskanent ara.",
|
||||
"timeline_hint.resources.followers": "Imeḍfaṛen",
|
||||
"timeline_hint.resources.follows": "T·Yeṭafaṛ",
|
||||
"timeline_hint.resources.statuses": "Tijewwaqin tiqdimin",
|
||||
"timeline_hint.resources.statuses": "Tisuffaɣ tiqdimin",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
||||
"trends.trending_now": "Ayen mucaɛen tura",
|
||||
"ui.beforeunload": "Arewway-ik·im ad iruḥ ma yella tefeɣ-d deg Maṣṭudun.",
|
||||
|
@ -465,7 +480,7 @@
|
|||
"upload_modal.choose_image": "Fren tugna",
|
||||
"upload_modal.description_placeholder": "Aberraɣ arurad ineggez nnig n uqjun amuṭṭis",
|
||||
"upload_modal.detect_text": "Sefru-d aḍris seg tugna",
|
||||
"upload_modal.edit_media": "Ẓreg taɣwalt",
|
||||
"upload_modal.edit_media": "Ẓreg amidya",
|
||||
"upload_modal.preparing_ocr": "Aheyyi n OCR…",
|
||||
"upload_modal.preview_label": "Taskant ({ratio})",
|
||||
"upload_progress.label": "Asali iteddu...",
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
"account.blocked": "Blocat",
|
||||
"account.browse_more_on_origin_server": "Vezi mai multe pe profilul original",
|
||||
"account.cancel_follow_request": "Retrage cererea de urmărire",
|
||||
"account.copy": "Copiază link-ul profilului",
|
||||
"account.direct": "Menționează pe @{name} în privat",
|
||||
"account.disable_notifications": "Nu îmi mai trimite notificări când postează @{name}",
|
||||
"account.domain_blocked": "Domeniu blocat",
|
||||
"account.edit_profile": "Modifică profilul",
|
||||
|
@ -30,6 +32,7 @@
|
|||
"account.featured_tags.last_status_never": "Fără postări",
|
||||
"account.featured_tags.title": "Haștagurile recomandate de {name}",
|
||||
"account.follow": "Abonează-te",
|
||||
"account.follow_back": "Urmăreşte înapoi",
|
||||
"account.followers": "Urmăritori",
|
||||
"account.followers.empty": "Acest utilizator nu are încă urmăritori.",
|
||||
"account.followers_counter": "{count, plural, one {Un abonat} few {{counter} abonați} other {{counter} de abonați}}",
|
||||
|
@ -38,6 +41,7 @@
|
|||
"account.follows.empty": "Momentan acest utilizator nu are niciun abonament.",
|
||||
"account.go_to_profile": "Mergi la profil",
|
||||
"account.hide_reblogs": "Ascunde distribuirile de la @{name}",
|
||||
"account.in_memoriam": "În Memoriam.",
|
||||
"account.joined_short": "Înscris",
|
||||
"account.languages": "Schimbă limbile abonate",
|
||||
"account.link_verified_on": "Proprietatea acestui link a fost verificată pe {date}",
|
||||
|
@ -46,7 +50,10 @@
|
|||
"account.mention": "Menționează pe @{name}",
|
||||
"account.moved_to": "{name} a indicat că noul său cont este acum:",
|
||||
"account.mute": "Pune pe @{name} pe silențios",
|
||||
"account.mute_notifications_short": "Amuțește notificările",
|
||||
"account.mute_short": "Ignoră",
|
||||
"account.muted": "Pus pe silențios",
|
||||
"account.no_bio": "Nicio descriere furnizată.",
|
||||
"account.open_original_page": "Deschide pagina originală",
|
||||
"account.posts": "Postări",
|
||||
"account.posts_with_replies": "Postări și răspunsuri",
|
||||
|
@ -69,6 +76,7 @@
|
|||
"admin.dashboard.retention.average": "În medie",
|
||||
"admin.dashboard.retention.cohort": "Înregistrări lunar",
|
||||
"admin.dashboard.retention.cohort_size": "Utilizatori noi",
|
||||
"admin.impact_report.title": "Rezumatul impactului",
|
||||
"alert.rate_limited.message": "Vă rugăm să reîncercați după {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Debit limitat",
|
||||
"alert.unexpected.message": "A apărut o eroare neașteptată.",
|
||||
|
@ -98,9 +106,11 @@
|
|||
"column.blocks": "Utilizatori blocați",
|
||||
"column.bookmarks": "Marcaje",
|
||||
"column.community": "Cronologie locală",
|
||||
"column.direct": "Mențiuni private",
|
||||
"column.directory": "Explorează profiluri",
|
||||
"column.domain_blocks": "Domenii blocate",
|
||||
"column.favourites": "Favorite",
|
||||
"column.firehose": "Fluxuri live",
|
||||
"column.follow_requests": "Cereri de abonare",
|
||||
"column.home": "Acasă",
|
||||
"column.lists": "Liste",
|
||||
|
@ -131,11 +141,19 @@
|
|||
"compose_form.lock_disclaimer.lock": "privat",
|
||||
"compose_form.placeholder": "La ce te gândești?",
|
||||
"compose_form.poll.duration": "Durata sondajului",
|
||||
"compose_form.poll.multiple": "Alegeri multiple",
|
||||
"compose_form.poll.option_placeholder": "Opțiune {number}",
|
||||
"compose_form.poll.single": "Alegeți unul",
|
||||
"compose_form.poll.switch_to_multiple": "Modifică sondajul pentru a permite mai multe opțiuni",
|
||||
"compose_form.poll.switch_to_single": "Modifică sondajul pentru a permite o singură opțiune",
|
||||
"compose_form.poll.type": "Stil",
|
||||
"compose_form.publish": "Postare",
|
||||
"compose_form.publish_form": "Publică",
|
||||
"compose_form.reply": "Răspundeți",
|
||||
"compose_form.save_changes": "Actualizare",
|
||||
"compose_form.spoiler.marked": "Elimină avertismentul privind conținutul",
|
||||
"compose_form.spoiler.unmarked": "Adaugă un avertisment privind conținutul",
|
||||
"compose_form.spoiler_placeholder": "Atenționare de conținut (opțional)",
|
||||
"confirmation_modal.cancel": "Anulează",
|
||||
"confirmations.block.block_and_report": "Blochează și raportează",
|
||||
"confirmations.block.confirm": "Blochează",
|
||||
|
@ -151,6 +169,7 @@
|
|||
"confirmations.domain_block.confirm": "Blochează întregul domeniu",
|
||||
"confirmations.domain_block.message": "Ești absolut sigur că vrei să blochezi tot domeniul {domain}? În cele mai multe cazuri, raportarea sau blocarea anumitor lucruri este suficientă și de preferat. Nu vei mai vedea niciun conținut din acest domeniu în vreun flux public sau în vreo notificare. Abonații tăi din acest domeniu vor fi eliminați.",
|
||||
"confirmations.edit.confirm": "Modifică",
|
||||
"confirmations.edit.message": "Editarea acum va suprascrie mesajul pe care îl compuneți în prezent. Sunteți sigur că vreți să continuați?",
|
||||
"confirmations.logout.confirm": "Deconectare",
|
||||
"confirmations.logout.message": "Ești sigur că vrei să te deconectezi?",
|
||||
"confirmations.mute.confirm": "Ignoră",
|
||||
|
@ -165,6 +184,7 @@
|
|||
"conversation.mark_as_read": "Marchează ca citit",
|
||||
"conversation.open": "Vizualizează conversația",
|
||||
"conversation.with": "Cu {names}",
|
||||
"copy_icon_button.copied": "Copiat în clipboard",
|
||||
"copypaste.copied": "Copiat",
|
||||
"copypaste.copy_to_clipboard": "Copiază în clipboard",
|
||||
"directory.federated": "Din fediversul cunoscut",
|
||||
|
@ -240,10 +260,17 @@
|
|||
"filter_modal.select_filter.title": "Filtrează această postare",
|
||||
"filter_modal.title.status": "Filtrează o postare",
|
||||
"firehose.all": "Toate",
|
||||
"firehose.local": "Acest Server",
|
||||
"firehose.remote": "Alte servere",
|
||||
"follow_request.authorize": "Acceptă",
|
||||
"follow_request.reject": "Respinge",
|
||||
"follow_requests.unlocked_explanation": "Chiar dacă contul tău nu este blocat, personalul {domain} a considerat că ai putea prefera să consulți manual cererile de abonare de la aceste conturi.",
|
||||
"follow_suggestions.curated_suggestion": "Alegerile Editorilor",
|
||||
"follow_suggestions.dismiss": "Nu mai afișa din nou",
|
||||
"follow_suggestions.personalized_suggestion": "Sugestie personalizată",
|
||||
"follow_suggestions.popular_suggestion": "Sugestie populară",
|
||||
"follow_suggestions.view_all": "Vizualizați tot",
|
||||
"follow_suggestions.who_to_follow": "Pe cine să urmăriți",
|
||||
"followed_tags": "Hastaguri urmărite",
|
||||
"footer.about": "Despre",
|
||||
"footer.directory": "Catalogul de profiluri",
|
||||
|
@ -272,12 +299,15 @@
|
|||
"home.hide_announcements": "Ascunde anunțurile",
|
||||
"home.pending_critical_update.body": "Te rugăm să-ți actualizezi serverul de Mastodon cat mai curând posibil!",
|
||||
"home.pending_critical_update.link": "Vezi noutăți",
|
||||
"home.pending_critical_update.title": "Actualizare critică de securitate disponibilă!",
|
||||
"home.show_announcements": "Afișează anunțurile",
|
||||
"interaction_modal.description.favourite": "Cu un cont pe Mastodon, poți adăuga această postare la favorite pentru a-l informa pe autorul ei că o apreciezi și pentru a o salva pentru mai târziu.",
|
||||
"interaction_modal.description.follow": "Cu un cont Mastodon, poți urmări pe {name} pentru a vedea postările sale în cronologia ta principală.",
|
||||
"interaction_modal.description.reblog": "Cu un cont pe Mastodon, poți distribui această postare pentru a le-o arăta și celor abonați ție.",
|
||||
"interaction_modal.description.reply": "Cu un cont pe Mastodon, poți răspunde acestei postări.",
|
||||
"interaction_modal.login.action": "Du-mă acasă",
|
||||
"interaction_modal.login.prompt": "Adresa serverului tău acasă, de ex. mastodon.social",
|
||||
"interaction_modal.no_account_yet": "Nu ești încă pe Mastodon?",
|
||||
"interaction_modal.on_another_server": "Pe un alt server",
|
||||
"interaction_modal.on_this_server": "Pe acest server",
|
||||
"interaction_modal.title.follow": "Urmărește pe {name}",
|
||||
|
|
|
@ -523,6 +523,7 @@
|
|||
"poll_button.add_poll": "Pridaj anketu",
|
||||
"poll_button.remove_poll": "Odstráň anketu",
|
||||
"privacy.change": "Uprav súkromie príspevku",
|
||||
"privacy.direct.long": "Všetci spomenutí v príspevku",
|
||||
"privacy.direct.short": "Konkrétni ľudia",
|
||||
"privacy.private.long": "Iba tvoji nasledovatelia",
|
||||
"privacy.private.short": "Sledovatelia",
|
||||
|
|
|
@ -148,6 +148,7 @@
|
|||
"compose_form.poll.duration": "Varaktighet för omröstning",
|
||||
"compose_form.poll.multiple": "Flera val",
|
||||
"compose_form.poll.option_placeholder": "Alternativ {number}",
|
||||
"compose_form.poll.single": "Välj en",
|
||||
"compose_form.poll.switch_to_multiple": "Ändra enkät för att tillåta flera val",
|
||||
"compose_form.poll.switch_to_single": "Ändra enkät för att tillåta ett enda val",
|
||||
"compose_form.poll.type": "Stil",
|
||||
|
|
|
@ -279,8 +279,8 @@
|
|||
"follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง",
|
||||
"follow_suggestions.curated_suggestion": "คัดสรรโดยบรรณาธิการ",
|
||||
"follow_suggestions.dismiss": "ไม่ต้องแสดงอีก",
|
||||
"follow_suggestions.personalized_suggestion": "คำแนะนำเฉพาะบุคคล",
|
||||
"follow_suggestions.popular_suggestion": "คำแนะนำยอดนิยม",
|
||||
"follow_suggestions.personalized_suggestion": "ข้อเสนอแนะเฉพาะบุคคล",
|
||||
"follow_suggestions.popular_suggestion": "ข้อเสนอแนะยอดนิยม",
|
||||
"follow_suggestions.view_all": "ดูทั้งหมด",
|
||||
"follow_suggestions.who_to_follow": "ติดตามใครดี",
|
||||
"followed_tags": "แฮชแท็กที่ติดตาม",
|
||||
|
|
|
@ -2,21 +2,25 @@
|
|||
"about.blocks": "ma lawa",
|
||||
"about.contact": "toki:",
|
||||
"about.domain_blocks.no_reason_available": "mi sona ala e tan",
|
||||
"about.domain_blocks.preamble": "ilo Masoton li ken e ni: sina lukin e toki jan pi ma ilo mute. sina ken toki tawa ona lon kulupu ma. taso, ma ni li ken ala e ni tawa ma ni:",
|
||||
"about.domain_blocks.silenced.explanation": "sina lukin ala e toki e jan tan ma ni. taso, sina wile la, sina ken ni.",
|
||||
"about.domain_blocks.silenced.title": "ken lili lukin",
|
||||
"about.domain_blocks.suspended.title": "weka",
|
||||
"about.not_available": "lon kulupu ni la sina ken alasa ala e sona ni.",
|
||||
"about.rules": "lawa kulupu",
|
||||
"account.account_note_header": "sona awen",
|
||||
"account.add_or_remove_from_list": "o ante e lipu jan",
|
||||
"account.badges.bot": "ilo nanpa li lawa e ni",
|
||||
"account.badges.group": "kulupu",
|
||||
"account.block": "o weka e @{name}",
|
||||
"account.block_domain": "o weka e ma {domain}",
|
||||
"account.block_short": "o weka e jan tawa mi",
|
||||
"account.blocked": "jan ni li weka tawa mi",
|
||||
"account.blocked": "jan li weka tawa mi",
|
||||
"account.browse_more_on_origin_server": "sina tawa ma tan pi jan ni la sina ken lukin e mute",
|
||||
"account.cancel_follow_request": "o pini kute",
|
||||
"account.copy": "o pali same e linja pi lipu jan",
|
||||
"account.direct": "len la o mu e @{name}",
|
||||
"account.disable_notifications": "@{name} li toki la o toki ala e toki ona tawa mi",
|
||||
"account.disable_notifications": "@{name} li toki la o mu ala e mi",
|
||||
"account.domain_blocked": "ma ni li weka tawa sina",
|
||||
"account.edit_profile": "o ante e lipu mi",
|
||||
"account.enable_notifications": "@{name} li toki la o toki e toki ona tawa mi",
|
||||
|
@ -31,6 +35,7 @@
|
|||
"account.follows.empty": "jan ni li kute e jan ala",
|
||||
"account.go_to_profile": "o tawa lipu jan",
|
||||
"account.hide_reblogs": "o lukin ala e pana toki tan @{name}",
|
||||
"account.in_memoriam": "jan ni li moli. pona o tawa ona.",
|
||||
"account.languages": "sina wile lukin e sitelen pi toki seme",
|
||||
"account.locked_info": "sina wile kute e jan ni la ona o toki e ken",
|
||||
"account.media": "sitelen",
|
||||
|
@ -52,6 +57,7 @@
|
|||
"account.unblock": "o weka ala e jan {name}",
|
||||
"account.unblock_domain": "o weka ala e ma {domain}",
|
||||
"account.unblock_short": "o pini weka",
|
||||
"account.unendorse": "lipu jan la o suli ala e ni",
|
||||
"account.unfollow": "o pini kute",
|
||||
"account.unmute": "o len ala e @{name}",
|
||||
"account.unmute_notifications_short": "o kute e mu tan jan ni",
|
||||
|
@ -64,6 +70,9 @@
|
|||
"alert.unexpected.title": "pakala a!",
|
||||
"announcement.announcement": "toki suli",
|
||||
"audio.hide": "o len e kalama",
|
||||
"boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama",
|
||||
"bundle_column_error.copy_stacktrace": "o awen e sona pakala lon ilo sina",
|
||||
"bundle_column_error.error.body": "ilo li ken ala pana e lipu ni. ni li ken tan pakala ilo.",
|
||||
"bundle_column_error.error.title": "ike a!",
|
||||
"bundle_column_error.network.title": "pakala la ilo sina li toki ala tawa ilo ante",
|
||||
"bundle_column_error.retry": "o ni sin",
|
||||
|
@ -74,7 +83,9 @@
|
|||
"bundle_modal_error.message": "ilo li wile kama e ijo ni, taso pakala li lon.",
|
||||
"bundle_modal_error.retry": "o ni sin",
|
||||
"closed_registrations_modal.find_another_server": "o alasa e ma ante",
|
||||
"column.about": "sona",
|
||||
"column.blocks": "kulupu pi jan weka",
|
||||
"column.bookmarks": "awen toki",
|
||||
"column.home": "lipu open",
|
||||
"column.lists": "kulupu lipu",
|
||||
"column.mutes": "jan len",
|
||||
|
@ -83,6 +94,7 @@
|
|||
"column_header.pin": "o sewi",
|
||||
"column_header.show_settings": "o lukin e lawa",
|
||||
"column_header.unpin": "o sewi ala",
|
||||
"column_subheading.settings": "ken ilo",
|
||||
"community.column_settings.local_only": "toki tan ni taso",
|
||||
"community.column_settings.media_only": "sitelen taso",
|
||||
"community.column_settings.remote_only": "toki tan ante taso",
|
||||
|
@ -92,6 +104,7 @@
|
|||
"compose.published.open": "o lukin",
|
||||
"compose.saved.body": "ilo li awen e ijo pana sina.",
|
||||
"compose_form.direct_message_warning_learn_more": "o kama sona e ijo ante",
|
||||
"compose_form.encryption_warning": "toki li len ala lon ilo Masoton ꞏ o pana ala e sona suli len lon ilo Masoton",
|
||||
"compose_form.placeholder": "sina wile toki e seme?",
|
||||
"compose_form.poll.duration": "tenpo pana",
|
||||
"compose_form.poll.multiple": "pana mute",
|
||||
|
@ -117,6 +130,7 @@
|
|||
"confirmations.discard_edit_media.confirm": "o weka",
|
||||
"confirmations.discard_edit_media.message": "toki sitelen anu lukin lili sitelen la ante pi awen ala li lon. sina wile weka e ante ni?",
|
||||
"confirmations.domain_block.confirm": "o weka.",
|
||||
"confirmations.domain_block.message": "sina wile ala a wile a len e ma {domain} ꞏ ken suli la len jan taso li pona ꞏ len pi ma ni la sina ken ala lukin e ijo pi ma ni lon lipu toki ale anu lukin toki ꞏ len ni la jan kute sina pi ma ni li weka",
|
||||
"confirmations.edit.confirm": "o ante",
|
||||
"confirmations.logout.confirm": "o weka",
|
||||
"confirmations.logout.message": "sina wile ala wile weka",
|
||||
|
@ -175,6 +189,8 @@
|
|||
"follow_request.reject": "o ala",
|
||||
"follow_suggestions.view_all": "o lukin e ale",
|
||||
"follow_suggestions.who_to_follow": "sina o kute e ni",
|
||||
"footer.about": "sona",
|
||||
"footer.directory": "lipu jan",
|
||||
"footer.get_app": "o jo e ilo",
|
||||
"footer.privacy_policy": "lawa len",
|
||||
"footer.source_code": "o lukin e toki ilo",
|
||||
|
@ -193,6 +209,7 @@
|
|||
"interaction_modal.title.follow": "o kute e {name}",
|
||||
"interaction_modal.title.reblog": "o wawa e toki {name}",
|
||||
"keyboard_shortcuts.blocked": "o lukin e lipu sina pi jan weka",
|
||||
"keyboard_shortcuts.boost": "o pana sin e toki",
|
||||
"keyboard_shortcuts.down": "o tawa anpa lon lipu",
|
||||
"keyboard_shortcuts.enter": "o lukin e toki",
|
||||
"keyboard_shortcuts.favourite": "o suli e toki",
|
||||
|
@ -202,6 +219,7 @@
|
|||
"keyboard_shortcuts.open_media": "o lukin e sitelen",
|
||||
"keyboard_shortcuts.pinned": "o lukin pi lipu sina pi toki sewi",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "o ante e ken lukin",
|
||||
"keyboard_shortcuts.toot": "o toki",
|
||||
"keyboard_shortcuts.up": "o tawa sewi lon lipu",
|
||||
"lightbox.close": "o pini",
|
||||
"lightbox.compress": "o lili e sitelen",
|
||||
|
@ -225,6 +243,7 @@
|
|||
"media_gallery.toggle_visible": "{number, plural, other {o len e sitelen}}",
|
||||
"mute_modal.duration": "tenpo",
|
||||
"mute_modal.indefinite": "tenpo ale",
|
||||
"navigation_bar.about": "sona",
|
||||
"navigation_bar.blocks": "jan weka",
|
||||
"navigation_bar.compose": "o pali e toki sin",
|
||||
"navigation_bar.favourites": "toki suli",
|
||||
|
@ -259,12 +278,14 @@
|
|||
"report.close": "o pini",
|
||||
"report.mute": "o kute ala e ona",
|
||||
"report.mute_explanation": "sina kama ala lukin e ijo pana ona. ona li awen ken kute e sina li awen ken lukin e sina li sona ala e weka kute sina e weka lukin sina.",
|
||||
"report.next": "awen",
|
||||
"report.reasons.dislike": "ni li ike tawa mi",
|
||||
"report.reasons.legal": "ni li ike tawa lawa",
|
||||
"report.reasons.other": "ni li ike tan ante",
|
||||
"report.reasons.spam": "ni li ike tan toki mute",
|
||||
"report.thanks.title": "sina wile ala lukin e ni anu seme?",
|
||||
"report.unfollow": "o pini kute e {name}",
|
||||
"report_notification.categories.legal": "ike tawa nasin lawa",
|
||||
"search.placeholder": "o alasa",
|
||||
"search.quick_action.go_to_account": "o tawa lipu jan {x}",
|
||||
"search_popout.language_code": "nimi toki kepeken nasin ISO",
|
||||
|
@ -273,6 +294,7 @@
|
|||
"search_results.statuses": "toki",
|
||||
"search_results.title": "o alasa e {q}",
|
||||
"status.block": "o weka e @{name}",
|
||||
"status.cancel_reblog_private": "o pini e pana",
|
||||
"status.delete": "o weka",
|
||||
"status.edit": "o ante",
|
||||
"status.edited": "ni li ante lon {date}",
|
||||
|
@ -303,7 +325,10 @@
|
|||
"status.unpin": "o sewi ala lon lipu sina",
|
||||
"subscribed_languages.save": "o awen e ante",
|
||||
"tabs_bar.home": "lipu open",
|
||||
"timeline_hint.resources.followers": "jan kute",
|
||||
"timeline_hint.resources.follows": "jan lukin",
|
||||
"timeline_hint.resources.statuses": "ijo pi tenpo suli",
|
||||
"trends.trending_now": "jan mute li toki",
|
||||
"units.short.million": "{count}AAA",
|
||||
"upload_button.label": "o pana e sitelen anu kalama",
|
||||
"upload_error.limit": "ilo li ken ala e suli pi ijo ni.",
|
||||
|
|
|
@ -5343,6 +5343,8 @@ a.status-card {
|
|||
inset-inline-start: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-width: 100vw;
|
||||
max-height: 100vh;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
|
|
@ -4,14 +4,34 @@ module ApplicationExtension
|
|||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
include Redisable
|
||||
|
||||
has_many :created_users, class_name: 'User', foreign_key: 'created_by_application_id', inverse_of: :created_by_application
|
||||
|
||||
validates :name, length: { maximum: 60 }
|
||||
validates :website, url: true, length: { maximum: 2_000 }, if: :website?
|
||||
validates :redirect_uri, length: { maximum: 2_000 }
|
||||
|
||||
# The relationship used between Applications and AccessTokens is using
|
||||
# dependent: delete_all, which means the ActiveRecord callback in
|
||||
# AccessTokenExtension is not run, so instead we manually announce to
|
||||
# streaming that these tokens are being deleted.
|
||||
before_destroy :push_to_streaming_api, prepend: true
|
||||
end
|
||||
|
||||
def confirmation_redirect_uri
|
||||
redirect_uri.lines.first.strip
|
||||
end
|
||||
|
||||
def push_to_streaming_api
|
||||
# TODO: #28793 Combine into a single topic
|
||||
payload = Oj.dump(event: :kill)
|
||||
access_tokens.in_batches do |tokens|
|
||||
redis.pipelined do |pipeline|
|
||||
tokens.ids.each do |id|
|
||||
pipeline.publish("timeline:access_token:#{id}", payload)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -85,8 +85,8 @@ class Account < ApplicationRecord
|
|||
include DomainNormalizable
|
||||
include Paginable
|
||||
|
||||
enum protocol: { ostatus: 0, activitypub: 1 }
|
||||
enum suspension_origin: { local: 0, remote: 1 }, _prefix: true
|
||||
enum :protocol, { ostatus: 0, activitypub: 1 }
|
||||
enum :suspension_origin, { local: 0, remote: 1 }, prefix: true
|
||||
|
||||
validates :username, presence: true
|
||||
validates_with UniqueUsernameValidator, if: -> { will_save_change_to_username? }
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#
|
||||
|
||||
class AccountWarning < ApplicationRecord
|
||||
enum action: {
|
||||
enum :action, {
|
||||
none: 0,
|
||||
disable: 1_000,
|
||||
mark_statuses_as_sensitive: 1_250,
|
||||
|
@ -25,7 +25,7 @@ class AccountWarning < ApplicationRecord
|
|||
sensitive: 2_000,
|
||||
silence: 3_000,
|
||||
suspend: 4_000,
|
||||
}, _suffix: :action
|
||||
}, suffix: :action
|
||||
|
||||
normalizes :text, with: ->(text) { text.to_s }, apply_to_nil: true
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ class BulkImport < ApplicationRecord
|
|||
belongs_to :account
|
||||
has_many :rows, class_name: 'BulkImportRow', inverse_of: :bulk_import, dependent: :delete_all
|
||||
|
||||
enum type: {
|
||||
enum :type, {
|
||||
following: 0,
|
||||
blocking: 1,
|
||||
muting: 2,
|
||||
|
@ -33,7 +33,7 @@ class BulkImport < ApplicationRecord
|
|||
lists: 5,
|
||||
}
|
||||
|
||||
enum state: {
|
||||
enum :state, {
|
||||
unconfirmed: 0,
|
||||
scheduled: 1,
|
||||
in_progress: 2,
|
||||
|
|
|
@ -25,7 +25,15 @@ module User::LdapAuthenticable
|
|||
resource = joins(:account).find_by(accounts: { username: safe_username })
|
||||
|
||||
if resource.blank?
|
||||
resource = new(email: attributes[Devise.ldap_mail.to_sym].first, agreement: true, account_attributes: { username: safe_username }, admin: false, external: true, confirmed_at: Time.now.utc)
|
||||
resource = new(
|
||||
email: attributes[Devise.ldap_mail.to_sym].first,
|
||||
agreement: true,
|
||||
account_attributes: {
|
||||
username: safe_username,
|
||||
},
|
||||
external: true,
|
||||
confirmed_at: Time.now.utc
|
||||
)
|
||||
resource.save!
|
||||
end
|
||||
|
||||
|
|
|
@ -19,17 +19,18 @@ module User::Omniauthable
|
|||
end
|
||||
|
||||
class_methods do
|
||||
def find_for_oauth(auth, signed_in_resource = nil)
|
||||
def find_for_omniauth(auth, signed_in_resource = nil)
|
||||
# EOLE-SSO Patch
|
||||
auth.uid = (auth.uid[0][:uid] || auth.uid[0][:user]) if auth.uid.is_a? Hashie::Array
|
||||
identity = Identity.find_for_oauth(auth)
|
||||
identity = Identity.find_for_omniauth(auth)
|
||||
|
||||
# If a signed_in_resource is provided it always overrides the existing user
|
||||
# to prevent the identity being locked with accidentally created accounts.
|
||||
# Note that this may leave zombie accounts (with no associated identity) which
|
||||
# can be cleaned up at a later date.
|
||||
user = signed_in_resource || identity.user
|
||||
user ||= create_for_oauth(auth)
|
||||
user ||= reattach_for_auth(auth)
|
||||
user ||= create_for_auth(auth)
|
||||
|
||||
if identity.user.nil?
|
||||
identity.user = user
|
||||
|
@ -39,19 +40,35 @@ module User::Omniauthable
|
|||
user
|
||||
end
|
||||
|
||||
def create_for_oauth(auth)
|
||||
# Check if the user exists with provided email. If no email was provided,
|
||||
private
|
||||
|
||||
def reattach_for_auth(auth)
|
||||
# If allowed, check if a user exists with the provided email address,
|
||||
# and return it if they does not have an associated identity with the
|
||||
# current authentication provider.
|
||||
|
||||
# This can be used to provide a choice of alternative auth providers
|
||||
# or provide smooth gradual transition between multiple auth providers,
|
||||
# but this is discouraged because any insecure provider will put *all*
|
||||
# local users at risk, regardless of which provider they registered with.
|
||||
|
||||
return unless ENV['ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH'] == 'true'
|
||||
|
||||
email, email_is_verified = email_from_auth(auth)
|
||||
return unless email_is_verified
|
||||
|
||||
user = User.find_by(email: email)
|
||||
return if user.nil? || Identity.exists?(provider: auth.provider, user_id: user.id)
|
||||
|
||||
user
|
||||
end
|
||||
|
||||
def create_for_auth(auth)
|
||||
# Create a user for the given auth params. If no email was provided,
|
||||
# we assign a temporary email and ask the user to verify it on
|
||||
# the next step via Auth::SetupController.show
|
||||
|
||||
strategy = Devise.omniauth_configs[auth.provider.to_sym].strategy
|
||||
assume_verified = strategy&.security&.assume_email_is_verified
|
||||
email_is_verified = auth.info.verified || auth.info.verified_email || auth.info.email_verified || assume_verified
|
||||
email = auth.info.verified_email || auth.info.email
|
||||
|
||||
user = User.find_by(email: email) if email_is_verified
|
||||
|
||||
return user unless user.nil?
|
||||
email, email_is_verified = email_from_auth(auth)
|
||||
|
||||
user = User.new(user_params_from_auth(email, auth))
|
||||
|
||||
|
@ -66,7 +83,14 @@ module User::Omniauthable
|
|||
user
|
||||
end
|
||||
|
||||
private
|
||||
def email_from_auth(auth)
|
||||
strategy = Devise.omniauth_configs[auth.provider.to_sym].strategy
|
||||
assume_verified = strategy&.security&.assume_email_is_verified
|
||||
email_is_verified = auth.info.verified || auth.info.verified_email || auth.info.email_verified || assume_verified
|
||||
email = auth.info.verified_email || auth.info.email
|
||||
|
||||
[email, email_is_verified]
|
||||
end
|
||||
|
||||
def user_params_from_auth(email, auth)
|
||||
{
|
||||
|
|
|
@ -32,7 +32,6 @@ module User::PamAuthenticable
|
|||
|
||||
self.email = "#{account.username}@#{find_pam_suffix}" if email.nil? && find_pam_suffix
|
||||
self.confirmed_at = Time.now.utc
|
||||
self.admin = false
|
||||
self.account = account
|
||||
self.external = true
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ class CustomFilter < ApplicationRecord
|
|||
include Expireable
|
||||
include Redisable
|
||||
|
||||
enum action: { warn: 0, hide: 1 }, _suffix: :action
|
||||
enum :action, { warn: 0, hide: 1 }, suffix: :action
|
||||
|
||||
belongs_to :account
|
||||
has_many :keywords, class_name: 'CustomFilterKeyword', inverse_of: :custom_filter, dependent: :destroy
|
||||
|
|
|
@ -21,7 +21,7 @@ class DomainBlock < ApplicationRecord
|
|||
include DomainNormalizable
|
||||
include DomainMaterializable
|
||||
|
||||
enum severity: { silence: 0, suspend: 1, noop: 2 }
|
||||
enum :severity, { silence: 0, suspend: 1, noop: 2 }
|
||||
|
||||
validates :domain, presence: true, uniqueness: true, domain: true
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ class Identity < ApplicationRecord
|
|||
validates :uid, presence: true, uniqueness: { scope: :provider }
|
||||
validates :provider, presence: true
|
||||
|
||||
def self.find_for_oauth(auth)
|
||||
def self.find_for_omniauth(auth)
|
||||
find_or_create_by(uid: auth.uid, provider: auth.provider)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -28,7 +28,7 @@ class Import < ApplicationRecord
|
|||
|
||||
belongs_to :account
|
||||
|
||||
enum type: { following: 0, blocking: 1, muting: 2, domain_blocking: 3, bookmarks: 4 }
|
||||
enum :type, { following: 0, blocking: 1, muting: 2, domain_blocking: 3, bookmarks: 4 }
|
||||
|
||||
validates :type, presence: true
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ class IpBlock < ApplicationRecord
|
|||
include Expireable
|
||||
include Paginable
|
||||
|
||||
enum severity: {
|
||||
enum :severity, {
|
||||
sign_up_requires_approval: 5000,
|
||||
sign_up_block: 5500,
|
||||
no_access: 9999,
|
||||
|
|
|
@ -18,7 +18,7 @@ class List < ApplicationRecord
|
|||
|
||||
PER_ACCOUNT_LIMIT = 50
|
||||
|
||||
enum replies_policy: { list: 0, followed: 1, none: 2 }, _prefix: :show
|
||||
enum :replies_policy, { list: 0, followed: 1, none: 2 }, prefix: :show
|
||||
|
||||
belongs_to :account, optional: true
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#
|
||||
|
||||
class LoginActivity < ApplicationRecord
|
||||
enum authentication_method: { password: 'password', otp: 'otp', webauthn: 'webauthn', sign_in_token: 'sign_in_token', omniauth: 'omniauth' }
|
||||
enum :authentication_method, { password: 'password', otp: 'otp', webauthn: 'webauthn', sign_in_token: 'sign_in_token', omniauth: 'omniauth' }
|
||||
|
||||
belongs_to :user
|
||||
|
||||
|
|
|
@ -34,8 +34,8 @@ class MediaAttachment < ApplicationRecord
|
|||
|
||||
include Attachmentable
|
||||
|
||||
enum type: { image: 0, gifv: 1, video: 2, unknown: 3, audio: 4 }
|
||||
enum processing: { queued: 0, in_progress: 1, complete: 2, failed: 3 }, _prefix: true
|
||||
enum :type, { image: 0, gifv: 1, video: 2, unknown: 3, audio: 4 }
|
||||
enum :processing, { queued: 0, in_progress: 1, complete: 2, failed: 3 }, prefix: true
|
||||
|
||||
MAX_DESCRIPTION_LENGTH = 1_500
|
||||
|
||||
|
|
|
@ -47,8 +47,8 @@ class PreviewCard < ApplicationRecord
|
|||
|
||||
self.inheritance_column = false
|
||||
|
||||
enum type: { link: 0, photo: 1, video: 2, rich: 3 }
|
||||
enum link_type: { unknown: 0, article: 1 }
|
||||
enum :type, { link: 0, photo: 1, video: 2, rich: 3 }
|
||||
enum :link_type, { unknown: 0, article: 1 }
|
||||
|
||||
has_many :preview_cards_statuses, dependent: :delete_all, inverse_of: :preview_card
|
||||
has_many :statuses, through: :preview_cards_statuses
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
class Relay < ApplicationRecord
|
||||
validates :inbox_url, presence: true, uniqueness: true, url: true, if: :will_save_change_to_inbox_url?
|
||||
|
||||
enum state: { idle: 0, pending: 1, accepted: 2, rejected: 3 }
|
||||
enum :state, { idle: 0, pending: 1, accepted: 2, rejected: 3 }
|
||||
|
||||
scope :enabled, -> { accepted }
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ class Report < ApplicationRecord
|
|||
# - app/javascript/mastodon/features/notifications/components/report.jsx
|
||||
# - app/javascript/mastodon/features/report/category.jsx
|
||||
# - app/javascript/mastodon/components/admin/ReportReasonSelector.jsx
|
||||
enum category: {
|
||||
enum :category, {
|
||||
other: 0,
|
||||
spam: 1_000,
|
||||
legal: 1_500,
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
class SoftwareUpdate < ApplicationRecord
|
||||
self.inheritance_column = nil
|
||||
|
||||
enum type: { patch: 0, minor: 1, major: 2 }, _suffix: :type
|
||||
enum :type, { patch: 0, minor: 1, major: 2 }, suffix: :type
|
||||
|
||||
def gem_version
|
||||
Gem::Version.new(version)
|
||||
|
|
|
@ -50,7 +50,7 @@ class Status < ApplicationRecord
|
|||
update_index('statuses', :proper)
|
||||
update_index('public_statuses', :proper)
|
||||
|
||||
enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, _suffix: :visibility
|
||||
enum :visibility, { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, suffix: :visibility
|
||||
|
||||
belongs_to :application, class_name: 'Doorkeeper::Application', optional: true
|
||||
|
||||
|
|
|
@ -51,6 +51,8 @@ class User < ApplicationRecord
|
|||
last_sign_in_ip
|
||||
skip_sign_in_token
|
||||
filtered_languages
|
||||
admin
|
||||
moderator
|
||||
)
|
||||
|
||||
include LanguagesHelper
|
||||
|
@ -342,6 +344,16 @@ class User < ApplicationRecord
|
|||
Doorkeeper::AccessToken.by_resource_owner(self).in_batches do |batch|
|
||||
batch.update_all(revoked_at: Time.now.utc)
|
||||
Web::PushSubscription.where(access_token_id: batch).delete_all
|
||||
|
||||
# Revoke each access token for the Streaming API, since `update_all``
|
||||
# doesn't trigger ActiveRecord Callbacks:
|
||||
# TODO: #28793 Combine into a single topic
|
||||
payload = Oj.dump(event: :kill)
|
||||
redis.pipelined do |pipeline|
|
||||
batch.ids.each do |id|
|
||||
pipeline.publish("timeline:access_token:#{id}", payload)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ class FetchResourceService < BaseService
|
|||
@response_code = response.code
|
||||
return nil if response.code != 200
|
||||
|
||||
if ['application/activity+json', 'application/ld+json'].include?(response.mime_type)
|
||||
if valid_activitypub_content_type?(response)
|
||||
body = response.body_with_limit
|
||||
json = body_to_json(body)
|
||||
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
unless ENV.key?('RAILS_ENV')
|
||||
warn 'ERROR: Missing RAILS_ENV environment variable, please set it to "production", "development", or "test".'
|
||||
exit 1
|
||||
abort <<~ERROR
|
||||
The RAILS_ENV environment variable is not set.
|
||||
|
||||
Please set it correctly depending on context:
|
||||
|
||||
- Use "production" for a live deployment of the application
|
||||
- Use "development" for local feature work
|
||||
- Use "test" when running the automated spec suite
|
||||
ERROR
|
||||
end
|
||||
|
||||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
||||
|
|
|
@ -7,7 +7,7 @@ user = ENV.fetch('ES_USER', nil).presence
|
|||
password = ENV.fetch('ES_PASS', nil).presence
|
||||
fallback_prefix = ENV.fetch('REDIS_NAMESPACE', nil).presence
|
||||
prefix = ENV.fetch('ES_PREFIX') { fallback_prefix }
|
||||
ca_file = ENV.fetch('ES_CA_CERT', nil).presence
|
||||
ca_file = ENV.fetch('ES_CA_FILE', nil).presence
|
||||
|
||||
transport_options = { ssl: { ca_file: ca_file } } if ca_file.present?
|
||||
|
||||
|
|
|
@ -21,9 +21,14 @@ Doorkeeper.configure do
|
|||
user unless user&.otp_required_for_login?
|
||||
end
|
||||
|
||||
# If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below.
|
||||
# Doorkeeper provides some administrative interfaces for managing OAuth
|
||||
# Applications, allowing creation, edit, and deletion of applications from the
|
||||
# server. At present, these administrative routes are not integrated into
|
||||
# Mastodon, and as such, we've disabled them by always return a 403 forbidden
|
||||
# response for them. This does not affect the ability for users to manage
|
||||
# their own OAuth Applications.
|
||||
admin_authenticator do
|
||||
current_user&.admin? || redirect_to(new_user_session_url)
|
||||
head 403
|
||||
end
|
||||
|
||||
# Authorization Code expiration time (default 10 minutes).
|
||||
|
|
|
@ -1548,7 +1548,7 @@ ca:
|
|||
unrecognized_emoji: no és un emoji reconegut
|
||||
redirects:
|
||||
prompt: Si confieu en aquest enllaç, feu-hi clic per a continuar.
|
||||
title: Esteu sortint de %{instance}.
|
||||
title: Deixeu %{instance}.
|
||||
relationships:
|
||||
activity: Activitat del compte
|
||||
confirm_follow_selected_followers: Segur que vols seguir els seguidors seleccionats?
|
||||
|
|
|
@ -979,7 +979,7 @@ de:
|
|||
next_steps: Du kannst dem Einspruch zustimmen, um die Moderationsentscheidung rückgängig zu machen, oder ihn ignorieren.
|
||||
subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung auf %{instance} erhoben"
|
||||
new_critical_software_updates:
|
||||
body: Kritische Updates wurden für Mastodon veröffentlicht – du solltest so schnell wie möglich aktualisieren!
|
||||
body: ein neues Sicherheitsupdate wurde veröffentlicht. Du solltest Mastodon so schnell wie möglich aktualisieren!
|
||||
subject: Kritische Mastodon-Updates sind für %{instance} verfügbar!
|
||||
new_pending_account:
|
||||
body: Die Details von diesem neuem Konto sind unten. Du kannst die Anfrage akzeptieren oder ablehnen.
|
||||
|
@ -1023,7 +1023,7 @@ de:
|
|||
salutation: "%{name},"
|
||||
settings: 'E-Mail-Einstellungen ändern: %{link}'
|
||||
unsubscribe: Abbestellen
|
||||
view: 'Hier überprüfen:'
|
||||
view: 'Siehe:'
|
||||
view_profile: Profil anzeigen
|
||||
view_status: Beitrag anschauen
|
||||
applications:
|
||||
|
|
|
@ -12,6 +12,7 @@ be:
|
|||
last_attempt: У вас ёсць яшчэ адна спроба, перш чым ваш рахунак будзе заблакаваны
|
||||
locked: Ваш уліковы запіс заблакіраваны.
|
||||
not_found_in_database: Няправільны %{authentication_keys} або пароль.
|
||||
omniauth_user_creation_failure: Памылка пры стварэнні ўліковага запісу для гэтай асобы.
|
||||
pending: Ваш уліковы запіс яшчэ разглядаецца.
|
||||
timeout: Ваш сеанс скончыўся. Каб працягнуць, увайдзіце яшчэ раз.
|
||||
unauthenticated: Вам патрэбна зайсьці альбо зарэгістравацца, каб працягнуць
|
||||
|
|
|
@ -14,6 +14,7 @@ ca:
|
|||
last_attempt: Tens un intent més abans no es bloqui el teu compte.
|
||||
locked: El teu compte s'ha blocat.
|
||||
not_found_in_database: "%{authentication_keys} o contrasenya no són vàlids."
|
||||
omniauth_user_creation_failure: S'ha produït un error en crear un compte per a aquesta identitat.
|
||||
pending: El teu compte encara està en revisió.
|
||||
timeout: La teva sessió ha expirat. Torna a iniciar-la per a continuar.
|
||||
unauthenticated: Necessites iniciar sessió o registrar-te abans de continuar.
|
||||
|
|
|
@ -12,6 +12,7 @@ da:
|
|||
last_attempt: Du har ét forsøg mere, før din konto bliver låst.
|
||||
locked: Din konto er låst.
|
||||
not_found_in_database: Ugyldig %{authentication_keys} eller adgangskode.
|
||||
omniauth_user_creation_failure: Fejl under oprettelse af konto for denne identitet.
|
||||
pending: Din konto er stadig under revision.
|
||||
timeout: Session udløbet. Log ind igen for at fortsætte.
|
||||
unauthenticated: Log ind eller tilmeld dig for at fortsætte.
|
||||
|
|
|
@ -12,6 +12,7 @@ de:
|
|||
last_attempt: Du hast nur noch einen Versuch, bevor dein Zugang gesperrt wird.
|
||||
locked: Dein Konto ist gesperrt.
|
||||
not_found_in_database: "%{authentication_keys} oder Passwort ungültig."
|
||||
omniauth_user_creation_failure: Fehler beim Erstellen eines Kontos für diese Identität.
|
||||
pending: Dein Konto wird weiterhin überprüft.
|
||||
timeout: Deine Sitzung ist abgelaufen. Bitte melde dich erneut an, um fortzufahren.
|
||||
unauthenticated: Du musst dich anmelden oder registrieren, bevor du fortfahren kannst.
|
||||
|
|
|
@ -12,6 +12,7 @@ en:
|
|||
last_attempt: You have one more attempt before your account is locked.
|
||||
locked: Your account is locked.
|
||||
not_found_in_database: Invalid %{authentication_keys} or password.
|
||||
omniauth_user_creation_failure: Error creating an account for this identity.
|
||||
pending: Your account is still under review.
|
||||
timeout: Your session expired. Please login again to continue.
|
||||
unauthenticated: You need to login or sign up before continuing.
|
||||
|
|
|
@ -12,6 +12,7 @@ es-AR:
|
|||
last_attempt: Tenés un intento más antes de que se bloquee tu cuenta.
|
||||
locked: Se bloqueó tu cuenta.
|
||||
not_found_in_database: "%{authentication_keys} o contraseña no válidas."
|
||||
omniauth_user_creation_failure: Error al crear una cuenta para esta identidad.
|
||||
pending: Tu cuenta todavía está bajo revisión.
|
||||
timeout: Venció tu sesión. Por favor, volvé a iniciar sesión para continuar.
|
||||
unauthenticated: Necesitás iniciar sesión o registrarte antes de continuar.
|
||||
|
|
|
@ -12,6 +12,7 @@ eu:
|
|||
last_attempt: Saiakera bat geratzen zaizu zure kontua giltzapetu aurretik.
|
||||
locked: Zure kontua giltzapetuta dago.
|
||||
not_found_in_database: Baliogabeko %{authentication_keys} edo pasahitza.
|
||||
omniauth_user_creation_failure: Errorea identitate honen kontu bat sortzean.
|
||||
pending: Zure kontua oraindik berrikusteke dago.
|
||||
timeout: Zure saioa iraungitu da. Hasi saioa berriro jarraitzeko.
|
||||
unauthenticated: Saioa hasi edo izena eman behar duzu jarraitu aurretik.
|
||||
|
|
|
@ -12,6 +12,7 @@ fi:
|
|||
last_attempt: Sinulla on vielä yksi yritys ennen kuin tilisi lukitaan.
|
||||
locked: Tilisi on lukittu.
|
||||
not_found_in_database: Virheellinen %{authentication_keys} tai salasana.
|
||||
omniauth_user_creation_failure: Virhe luotaessa tiliä tälle henkilöllisyydelle.
|
||||
pending: Tilisi on vielä tarkistamatta.
|
||||
timeout: Istuntosi on vanhentunut. Jatkaaksesi käyttöä, kirjaudu uudelleen.
|
||||
unauthenticated: Sinun on kirjauduttava tai rekisteröidyttävä ennen kuin voit jatkaa.
|
||||
|
|
|
@ -12,6 +12,7 @@ fo:
|
|||
last_attempt: Tú kanst royna einaferð afturat áðrenn kontan verður stongd.
|
||||
locked: Kontan hjá tær er læst.
|
||||
not_found_in_database: Ogyldigur %{authentication_keys} ella loyniorð.
|
||||
omniauth_user_creation_failure: Feilur í sambandi við, at ein konta fyri hendan samleikan bleiv stovnað.
|
||||
pending: Kontan hjá tær verður kannað enn.
|
||||
timeout: Tín innritan er útgingin. Innrita av nýggjum, fyri at hada fram.
|
||||
unauthenticated: Tú mást skriva teg inn aftur fyri at halda fram.
|
||||
|
|
|
@ -12,6 +12,7 @@ fy:
|
|||
last_attempt: Jo hawwe noch ien besykjen oer eardat jo account blokkearre wurdt.
|
||||
locked: Jo account is blokkearre.
|
||||
not_found_in_database: "%{authentication_keys} of wachtwurd ûnjildich."
|
||||
omniauth_user_creation_failure: Flater by it oanmeitsjen fan in account foar dizze identiteit.
|
||||
pending: Jo account moat noch hieltyd beoardiele wurde.
|
||||
timeout: Jo sesje is ferrûn. Meld jo opnij oan om troch te gean.
|
||||
unauthenticated: Jo moatte oanmelde of registrearje.
|
||||
|
|
|
@ -12,6 +12,7 @@ gl:
|
|||
last_attempt: Tes un intento máis antes de que a túa conta fique bloqueada.
|
||||
locked: A túa conta está bloqueada.
|
||||
not_found_in_database: "%{authentication_keys} ou contrasinal non válidos."
|
||||
omniauth_user_creation_failure: Erro ao crear unha conta para esta identidade.
|
||||
pending: A túa conta aínda está baixo revisión.
|
||||
timeout: A túa sesión caducou. Accede outra vez para continuar.
|
||||
unauthenticated: Precisas iniciar sesión ou rexistrarte antes de continuar.
|
||||
|
|
|
@ -12,6 +12,7 @@ he:
|
|||
last_attempt: יש לך עוד ניסיון אחד לפני נעילת החשבון.
|
||||
locked: חשבון זה נעול.
|
||||
not_found_in_database: "%{authentication_keys} או סיסמה לא נכונים."
|
||||
omniauth_user_creation_failure: שגיאה ביצירת חשבון לזהות הזו.
|
||||
pending: חשבונך נמצא עדיין בבדיקה.
|
||||
timeout: פג תוקף השהיה בחשבון. נא להכנס מחדש על מנת להמשיך.
|
||||
unauthenticated: יש להרשם או להכנס לחשבון על מנת להמשיך.
|
||||
|
|
|
@ -12,6 +12,7 @@ hu:
|
|||
last_attempt: Már csak egy próbálkozásod maradt, mielőtt a fiókodat zároljuk.
|
||||
locked: A fiókodat zároltuk.
|
||||
not_found_in_database: Helytelen %{authentication_keys} vagy jelszó.
|
||||
omniauth_user_creation_failure: Hiba történt a fiók létrehozása során ehhez az identitáshoz.
|
||||
pending: A fiókod még engedélyezésre vár.
|
||||
timeout: A munkameneted lejárt. A folytatáshoz jelentkezz be újra.
|
||||
unauthenticated: A folytatás előtt be kell jelentkezned vagy regisztrálnod kell.
|
||||
|
|
|
@ -39,6 +39,8 @@ ia:
|
|||
webauthn_enabled:
|
||||
title: Claves de securitate activate
|
||||
registrations:
|
||||
destroyed: A revider! Tu conto esseva cancellate con successo. Nos spera vider te novemente tosto.
|
||||
signed_up_but_pending: Un message con un ligamine de confirmation esseva inviate a tu conto de email. Post que tu clicca le ligamine, nos revidera tu application. Tu essera notificate si illo es approbate.
|
||||
updated: Tu conto ha essite actualisate con successo.
|
||||
unlocks:
|
||||
unlocked: Tu conto ha essite disblocate con successo. Initia session a continuar.
|
||||
|
|
|
@ -12,6 +12,7 @@ ie:
|
|||
last_attempt: Hay solmen un prova ante que tui conto deveni serrat.
|
||||
locked: Tui conto es serrat.
|
||||
not_found_in_database: Ínvalid %{authentication_keys} o passa-parol.
|
||||
omniauth_user_creation_failure: Errore in li creation de un conto por ti-ci identitá.
|
||||
pending: Tui conto es ancor sub revision.
|
||||
timeout: Tui session ha expirat. Ples reintrar denov por continuar.
|
||||
unauthenticated: Tu deve intrar o registrar te ante continuar.
|
||||
|
|
|
@ -12,6 +12,7 @@ is:
|
|||
last_attempt: Þú getur reynt einu sinni í viðbót áður en aðgangnum þínum verður læst.
|
||||
locked: Notandaaðgangurinn þinn er læstur.
|
||||
not_found_in_database: Ógilt %{authentication_keys} eða lykilorð.
|
||||
omniauth_user_creation_failure: Villa við að útbúa aðgang fyrir þetta auðkenni.
|
||||
pending: Notandaaðgangurinn þinn er enn til yfirferðar.
|
||||
timeout: Setan þín er útrunnin. Skráðu þig aftur inn til að halda áfram.
|
||||
unauthenticated: Þú þarft að skrá þig inn eða nýskrá þig áður en lengra er haldið.
|
||||
|
|
|
@ -12,6 +12,7 @@ it:
|
|||
last_attempt: Hai un altro tentativo, prima che il tuo profilo venga bloccato.
|
||||
locked: Il tuo profilo è bloccato.
|
||||
not_found_in_database: "%{authentication_keys} o password non valida."
|
||||
omniauth_user_creation_failure: Errore nella creazione di un account per questa identità.
|
||||
pending: Il tuo profilo è ancora in revisione.
|
||||
timeout: La tua sessione è scaduta. Sei pregato di accedere nuovamente per continuare.
|
||||
unauthenticated: Devi accedere o registrarti, per continuare.
|
||||
|
|
|
@ -13,13 +13,13 @@ kab:
|
|||
locked: Amiḍan-ik yettwargel.
|
||||
not_found_in_database: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir.
|
||||
pending: Amiḍan-inek mazal-it deg ɛiwed n tmuγli.
|
||||
timeout: Tiγimit n tuqqna tezri. Ma ulac aγilif ɛiwed tuqqna akken ad tkemmleḍ.
|
||||
unauthenticated: Ilaq ad teqqneḍ neγ ad tjerrḍeḍ akken ad tkemmelḍ.
|
||||
timeout: Tiɣimit n tuqqna tezri. Ma ulac aɣilif ɛiwed tuqqna akken ad tkemmleḍ.
|
||||
unauthenticated: Ilaq ad teqqneḍ neɣ ad tjerrḍeḍ akken ad tkemmelḍ.
|
||||
unconfirmed: Ilaq ad wekdeḍ tansa-inek imayl akken ad tkemmelḍ.
|
||||
mailer:
|
||||
confirmation_instructions:
|
||||
action: Senqed tansa-inek imayl
|
||||
action_with_app: Wekked sakkin uγal γer %{app}
|
||||
action_with_app: Sentem sakkin uɣal ɣer %{app}
|
||||
explanation: Aqla-k terniḍ amiḍan deg %{host} s tansa imayl-agi. Mazal-ak yiwen utekki akken ad t-tremdeḍ. Ma mačči d kečč i yessutren ay-agi, ttxil-k ssinef izen-a.
|
||||
explanation_when_pending: Tsutreḍ-d ajerred deg %{host} s tansa-agi imayl. Ad nγeṛ asuter-ik ticki tsentmeḍ tansa-ik imayl. Send asentem, ur tezmireḍ ara ad teqqneḍ γer umiḍan-ik. Ma yella nugi asuter-ik, isefka-ik ad ttwakksen seg uqeddac, ihi ulac tigawt-nniḍen ara k-d-yettuqeblen. Ma mačči d kečč i yellan deffir n usuter-agi, ttxil-k ssinef izen-agi.
|
||||
extra_html: Ttxil-k ẓer daγen <a href="%{terms_path}">ilugan n uqeddac</a> akked <a href="%{policy_path}">twetlin n useqdec-nneγ</a>.
|
||||
|
@ -87,7 +87,7 @@ kab:
|
|||
unlocks:
|
||||
send_instructions: Deg kra n tesdatin, ad teṭṭfeḍ imayl deg-s iwellihen i yilaqen i userreḥ n umiḍan-ik·im. Ma yella ur tufiḍ ara izen-agi, ttxil-k·m ẓer deg ukaram spam.
|
||||
send_paranoid_instructions: Ma yella umiḍan-ik·im yella, ad teṭṭfeḍ imayl deg tesdatin i d-iteddun, deg-s iwellihen i yilaqen i userreḥ n umiḍan-ik·im. Ma yella ur tufiḍ ara izen-agi, ttxil-k·m ẓer deg ukaram spam.
|
||||
unlocked: Iserreḥ umiḍan-ik·im akken iwata. ttxil qqen akken ad tkemleḍ.
|
||||
unlocked: Iserreḥ umiḍan-ik·im akken iwata. Ttxil qqen akken ad tkemleḍ.
|
||||
errors:
|
||||
messages:
|
||||
already_confirmed: ittwasentem yakan, ttxil εreḍ ad teqneḍ
|
||||
|
|
|
@ -12,6 +12,7 @@ ko:
|
|||
last_attempt: 계정이 잠기기까지 한 번의 시도가 남았습니다.
|
||||
locked: 계정이 잠겼습니다.
|
||||
not_found_in_database: 올바르지 않은 %{authentication_keys} 혹은 암호입니다.
|
||||
omniauth_user_creation_failure: 이 신원으로 계정을 만드는데 실패했습니다.
|
||||
pending: 이 계정은 아직 검토 중입니다.
|
||||
timeout: 세션이 만료되었습니다. 다시 로그인 하세요.
|
||||
unauthenticated: 계속 하려면 로그인을 해야 합니다.
|
||||
|
|
|
@ -12,6 +12,7 @@ lad:
|
|||
last_attempt: Aprova una vez mas antes de ke tu kuento sea blokado.
|
||||
locked: Tu kuento esta blokado.
|
||||
not_found_in_database: Inkorekto %{authentication_keys} o kod.
|
||||
omniauth_user_creation_failure: Ay un error en kriyar un kuento para esta identita.
|
||||
pending: Tu kuento ainda esta basho revizyon.
|
||||
timeout: Tu sesyon tiene kadukado. Por favor konektate kon tu kuento de muevo para kontinuar.
|
||||
unauthenticated: Kale konektarte kon tu kuento o enregistrarte antes de kontinuar.
|
||||
|
|
|
@ -12,6 +12,7 @@ nl:
|
|||
last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort.
|
||||
locked: Jouw account is opgeschort.
|
||||
not_found_in_database: "%{authentication_keys} of wachtwoord ongeldig."
|
||||
omniauth_user_creation_failure: Fout bij het aanmaken van een account voor deze identiteit.
|
||||
pending: Jouw account moet nog steeds worden beoordeeld.
|
||||
timeout: Jouw sessie is verlopen, log opnieuw in.
|
||||
unauthenticated: Je dient in te loggen of te registreren.
|
||||
|
|
|
@ -12,6 +12,7 @@ pl:
|
|||
last_attempt: Masz jeszcze jedną próbę; Twoje konto zostanie zablokowane jeśli się nie powiedzie.
|
||||
locked: Twoje konto zostało zablokowane.
|
||||
not_found_in_database: Nieprawidłowy %{authentication_keys} lub hasło.
|
||||
omniauth_user_creation_failure: Błąd przy tworzeniu konta dla tej tożsamości.
|
||||
pending: Twoje konto oczekuje na przegląd.
|
||||
timeout: Twoja sesja wygasła. Zaloguj się ponownie, aby kontynuować..
|
||||
unauthenticated: Zapisz się lub zaloguj, aby kontynuować.
|
||||
|
|
|
@ -12,6 +12,7 @@ pt-PT:
|
|||
last_attempt: Tem só mais uma tentativa antes da sua conta ser bloqueada.
|
||||
locked: A tua conta está bloqueada.
|
||||
not_found_in_database: "%{authentication_keys} ou palavra-passe inválida."
|
||||
omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade.
|
||||
pending: A sua conta está ainda a aguardar revisão.
|
||||
timeout: A tua sessão expirou. Por favor, entra de novo para continuares.
|
||||
unauthenticated: Precisas de entrar na tua conta ou de te registares antes de continuar.
|
||||
|
|
|
@ -47,14 +47,19 @@ ro:
|
|||
subject: Instrucțiuni pentru resetarea parolei
|
||||
title: Resetare parolă
|
||||
two_factor_disabled:
|
||||
explanation: Conectarea este acum posibilă folosind doar adresa de e-mail și parola.
|
||||
subject: Autentificare cu doi factori dezactivată
|
||||
subtitle: Autentificarea cu doi factori pentru contul dvs. a fost dezactivată.
|
||||
title: 2FA dezactivat
|
||||
two_factor_enabled:
|
||||
explanation: Pentru autentificare va fi necesar un token generat de aplicația TOTP asociată.
|
||||
subject: Autentificare în doi pași activată
|
||||
subtitle: Autentificarea cu doi factori a fost activată pentru contul dvs.
|
||||
title: 2FA activat
|
||||
two_factor_recovery_codes_changed:
|
||||
explanation: Codurile anterioare de recuperare au fost invalidate și unele noi generate.
|
||||
subject: Recuperare în doi factori
|
||||
subtitle: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi.
|
||||
title: Coduri de recuperare 2FA modificate
|
||||
unlock_instructions:
|
||||
subject: Instrucțiuni de deblocare
|
||||
|
@ -68,9 +73,13 @@ ro:
|
|||
subject: 'Mastodon: Cheie de securitate ștearsă'
|
||||
title: Una dintre cheile tale de securitate a fost ștearsă
|
||||
webauthn_disabled:
|
||||
explanation: Autentificarea cu chei de securitate a fost dezactivată pentru contul dvs.
|
||||
extra: Conectarea este acum posibilă folosind doar token-ul generat de aplicația TOTP asociată.
|
||||
subject: 'Mastodon: Autentificarea cu chei de securitate dezactivată'
|
||||
title: Chei de securitate dezactivate
|
||||
webauthn_enabled:
|
||||
explanation: Autentificarea cu cheie de securitate a fost activată pentru contul dvs.
|
||||
extra: Cheia ta de securitate poate fi acum folosită pentru conectare.
|
||||
subject: 'Mastodon: Autentificarea cheii de securitate activată'
|
||||
title: Chei de securitate activate
|
||||
omniauth_callbacks:
|
||||
|
|
|
@ -12,6 +12,7 @@ sk:
|
|||
last_attempt: Máš posledný pokus pred zamknutím tvojho účtu.
|
||||
locked: Tvoj účet je zamknutý.
|
||||
not_found_in_database: Nesprávny %{authentication_keys}, alebo heslo.
|
||||
omniauth_user_creation_failure: Chyba pri vytváraní účtu pre túto identitu.
|
||||
pending: Tvoj účet je stále prehodnocovaný.
|
||||
timeout: Tvoja aktívna sezóna vypršala. Pre pokračovanie sa prosím prihlás znovu.
|
||||
unauthenticated: K pokračovaniu sa musíš zaregistrovať alebo prihlásiť.
|
||||
|
|
|
@ -12,6 +12,7 @@ sl:
|
|||
last_attempt: Pred zaklepom računa imate še en poskus.
|
||||
locked: Vaš račun je zaklenjen.
|
||||
not_found_in_database: Neveljavno %{authentication_keys} ali geslo.
|
||||
omniauth_user_creation_failure: Napaka pri ustvarjanju računa za to identiteto.
|
||||
pending: Vaš račun je še vedno pod drobnogledom.
|
||||
timeout: Vaša seja je potekla. Če želite nadaljevati, se znova prijavite.
|
||||
unauthenticated: Pred nadaljevanjem se morate prijaviti ali vpisati.
|
||||
|
|
|
@ -12,6 +12,7 @@ sq:
|
|||
last_attempt: Mund të provoni edhe një herë, përpara se llogaria juaj të kyçet.
|
||||
locked: Llogaria juaj është e kyçur.
|
||||
not_found_in_database: "%{authentication_keys} ose fjalëkalim i pavlefshëm."
|
||||
omniauth_user_creation_failure: Gabim në krijim llogarie për këtë identitet.
|
||||
pending: Llogaria juaj është ende nën shqyrtim.
|
||||
timeout: Sesioni juaj ka skaduar. Ju lutemi, që të vazhdohet, ribëni hyrjen.
|
||||
unauthenticated: Përpara se të vazhdohet më tej, lypset të bëni hyrjen ose të regjistroheni.
|
||||
|
|
|
@ -12,6 +12,7 @@ sr-Latn:
|
|||
last_attempt: Imate još jedan pokušaj pre nego što Vaš nalog bude zaključan.
|
||||
locked: Vaš nalog je zaključan.
|
||||
not_found_in_database: Neispravna %{authentication_keys} ili lozinka.
|
||||
omniauth_user_creation_failure: Greška pri kreiranju naloga za ovaj identitet.
|
||||
pending: Vaš račun je još uvek u pregledu.
|
||||
timeout: Vreme trajanja Vaše sesije je isteklo. Za nastavak prijavite se ponovo.
|
||||
unauthenticated: Za nastavak se morate prijaviti ili registrovati.
|
||||
|
|
|
@ -12,6 +12,7 @@ sr:
|
|||
last_attempt: Имате још један покушај пре него што Ваш налог буде закључан.
|
||||
locked: Ваш налог је закључан.
|
||||
not_found_in_database: Неисправна %{authentication_keys} или лозинка.
|
||||
omniauth_user_creation_failure: Грешка при креирању налога за овај идентитет.
|
||||
pending: Ваш налог се још увек прегледа.
|
||||
timeout: Ваша сесија је истекла. Пријавите се поново да бисте наставили.
|
||||
unauthenticated: Морате да се пријавите или региструјете пре него што наставите.
|
||||
|
|
|
@ -12,6 +12,7 @@ tr:
|
|||
last_attempt: Hesabınız kilitlenmeden önce bir kez daha denemeniz gerekir.
|
||||
locked: Hesabınız kilitlendi.
|
||||
not_found_in_database: Geçersiz %{authentication_keys} ya da parola.
|
||||
omniauth_user_creation_failure: Bu kimlik için hesap oluşturmada hata.
|
||||
pending: Hesabınız hala inceleniyor.
|
||||
timeout: Oturum süreniz sona erdi. Lütfen devam etmek için tekrar giriş yapınız.
|
||||
unauthenticated: Devam etmeden önce oturum açmanız veya kayıt olmanız gerek.
|
||||
|
|
|
@ -12,6 +12,7 @@ uk:
|
|||
last_attempt: У вас залишилась ще одна спроба, після якої ваш обліковий запис буде заблоковано.
|
||||
locked: Ваш обліковий запис заблоковано.
|
||||
not_found_in_database: Неправильний %{authentication_keys} або пароль.
|
||||
omniauth_user_creation_failure: Помилка створення облікового запису для цієї особи.
|
||||
pending: Ваш обліковий запис ще перебуває на розгляді.
|
||||
timeout: Час сеансу минув. Будь ласка, увійдіть знову, щоб продовжити.
|
||||
unauthenticated: Щоб продовжити, увійдіть або зареєструйтеся.
|
||||
|
|
|
@ -12,6 +12,7 @@ zh-CN:
|
|||
last_attempt: 你只有最后一次尝试机会,若未通过,帐号将被锁定。
|
||||
locked: 你的账户已被锁定。
|
||||
not_found_in_database: "%{authentication_keys}或密码错误。"
|
||||
omniauth_user_creation_failure: 为此身份创建账户时出错。
|
||||
pending: 你的账号仍在审核中。
|
||||
timeout: 你的会话已过期。请重新登录再继续操作。
|
||||
unauthenticated: 继续操作前请注册或者登录。
|
||||
|
|
|
@ -12,6 +12,7 @@ zh-HK:
|
|||
last_attempt: 若你再一次嘗試失敗,我們將鎖定你的帳號,以策安全。
|
||||
locked: 你的帳號已被鎖定。
|
||||
not_found_in_database: 不正確的%{authentication_keys}或密碼。
|
||||
omniauth_user_creation_failure: 為此身份建立帳號時出錯。
|
||||
pending: 你的帳號仍在審核中
|
||||
timeout: 你的登入階段已經過期,請重新登入以繼續使用。
|
||||
unauthenticated: 你必須先登入或登記,以繼續使用。
|
||||
|
|
|
@ -12,6 +12,7 @@ zh-TW:
|
|||
last_attempt: 帳號鎖定前,您還有最後一次嘗試機會。
|
||||
locked: 已鎖定您的帳號。
|
||||
not_found_in_database: 無效的 %{authentication_keys} 或密碼。
|
||||
omniauth_user_creation_failure: 以此身分新增帳號時發生錯誤。
|
||||
pending: 您的帳號仍在審核中。
|
||||
timeout: 登入階段逾時。請重新登入以繼續。
|
||||
unauthenticated: 您必須先登入或註冊才能繼續使用。
|
||||
|
|
|
@ -34,6 +34,7 @@ ia:
|
|||
confirmations:
|
||||
revoke: Es tu secur?
|
||||
index:
|
||||
last_used_at: Ultime uso in %{date}
|
||||
never_used: Nunquam usate
|
||||
scopes: Permissiones
|
||||
title: Tu applicationes autorisate
|
||||
|
|
|
@ -36,7 +36,7 @@ kab:
|
|||
application: Asnas
|
||||
callback_url: URL n tririt n wawal
|
||||
delete: Kkes
|
||||
empty: Ulac γur-ek·em isnasen.
|
||||
empty: Ulac ɣur-k·m isnasen.
|
||||
name: Isem
|
||||
new: Asnas amaynut
|
||||
show: Ẓer
|
||||
|
@ -57,7 +57,7 @@ kab:
|
|||
new:
|
||||
title: Tlaq tsiregt
|
||||
show:
|
||||
title: Nγel tangalt n wurag sakkin senteḍ-itt deg usnas.
|
||||
title: Nɣel tangalt n wurag sakkin senteḍ-itt deg usnas.
|
||||
authorized_applications:
|
||||
buttons:
|
||||
revoke: Ḥwi
|
||||
|
@ -113,13 +113,13 @@ kab:
|
|||
read:notifications: ẓer tilγa-ik
|
||||
read:reports: ẓer ineqqisen-ik·im
|
||||
read:search: anadi deg umkan-ik·im
|
||||
read:statuses: ẓer meṛṛa tisuffaγ
|
||||
read:statuses: ẓer meṛṛa tisuffaɣ
|
||||
write: beddel meṛṛa isefka n umiḍan-ik
|
||||
write:accounts: ẓreg amaγnu-ik
|
||||
write:blocks: seḥbes imiḍanen d tγula
|
||||
write:bookmarks: ad yernu tisuffγin γer ticraḍ
|
||||
write:bookmarks: ad yernu tisuffaɣ ɣer ticraḍ
|
||||
write:filters: rnu-d imsizedgen
|
||||
write:follows: ḍfeṛ imdanen
|
||||
write:lists: ad yesnulfu tibdarin
|
||||
write:media: ad yessali ifayluyen n teγwalt
|
||||
write:media: ad yessali ifuyla n umidya
|
||||
write:notifications: sfeḍ tilɣa-k·m
|
||||
|
|
|
@ -236,6 +236,8 @@ ia:
|
|||
migrations:
|
||||
errors:
|
||||
not_found: non poterea esser trovate
|
||||
preferences:
|
||||
public_timelines: Chronologias public
|
||||
statuses_cleanup:
|
||||
min_age:
|
||||
'1209600': 2 septimanas
|
||||
|
@ -254,6 +256,7 @@ ia:
|
|||
disable: Disactivar 2FA
|
||||
user_mailer:
|
||||
welcome:
|
||||
final_step: 'Comencia a publicar! Mesmo sin sequitores, tu messages public poterea esser reguardate per alteres, per exemplo in le chronologia local o in hashtags. Tu poterea voler introducer te con le hashtag #introductiones.'
|
||||
subject: Benvenite in Mastodon
|
||||
webauthn_credentials:
|
||||
delete: Deler
|
||||
|
|
|
@ -1793,6 +1793,12 @@ ie:
|
|||
extra: It es ja pret a descargar!
|
||||
subject: Tui archive es pret por descargar
|
||||
title: Descargar archive
|
||||
failed_2fa:
|
||||
details: 'Vi li detallies del prova de intrar:'
|
||||
explanation: Alqui provat accesser tui conto ma usat un ínvalid duesim factor de autentication.
|
||||
further_actions_html: Si it ne esset tu, noi recomanda que tu strax %{action} nam li conto posse esser compromisset.
|
||||
subject: Falliment de autentication de duesim factor
|
||||
title: Fallit autentication de duesim factor
|
||||
suspicious_sign_in:
|
||||
change_password: changear tui passa-parol
|
||||
details: 'Vi li detallies del apertion de session:'
|
||||
|
|
|
@ -5,7 +5,7 @@ kab:
|
|||
contact_missing: Ur yettusbadu ara
|
||||
contact_unavailable: Wlac
|
||||
hosted_on: Maṣṭudun yersen deg %{domain}
|
||||
title: Γef
|
||||
title: Ɣef
|
||||
accounts:
|
||||
follow: Ḍfeṛ
|
||||
followers:
|
||||
|
@ -15,9 +15,9 @@ kab:
|
|||
last_active: armud aneggaru
|
||||
nothing_here: Ulac kra da!
|
||||
posts:
|
||||
one: Tajewwiqt
|
||||
other: Tijewwiqin
|
||||
posts_tab_heading: Tijewwiqin
|
||||
one: Tasuffeɣt
|
||||
other: Tisuffaɣ
|
||||
posts_tab_heading: Tisuffaɣ
|
||||
admin:
|
||||
account_actions:
|
||||
action: Eg tigawt
|
||||
|
@ -47,7 +47,7 @@ kab:
|
|||
disable_two_factor_authentication: Gdel 2FA
|
||||
disabled: Yensa
|
||||
display_name: Isem ara d-yettwaskanen
|
||||
domain: Taγult
|
||||
domain: Taɣult
|
||||
edit: Ẓreg
|
||||
email: Imayl
|
||||
email_status: Addad n imayl
|
||||
|
@ -111,7 +111,7 @@ kab:
|
|||
targeted_reports: Yettwazen uneqqis sɣur wiyaḍ
|
||||
silence: Sgugem
|
||||
silenced: Yettwasgugem
|
||||
statuses: Tisuffɣin
|
||||
statuses: Tisuffaɣ
|
||||
subscribe: Jerred
|
||||
suspended: Yeḥbes
|
||||
title: Imiḍanen
|
||||
|
@ -203,22 +203,22 @@ kab:
|
|||
announcements:
|
||||
destroyed_msg: Tamselɣut tettwakkes akken iwata!
|
||||
edit:
|
||||
title: Ẓreg ulγu
|
||||
empty: Ulac kra n ulγuyen.
|
||||
title: Ẓreg ulɣu
|
||||
empty: Ulac kra n yilɣa yettwafen.
|
||||
live: Srid
|
||||
new:
|
||||
create: Rnu-d ulγu
|
||||
title: Ulγu amaynut
|
||||
create: Snlufu-d ulɣu
|
||||
title: Ulɣu amaynut
|
||||
publish: Sufeɣ
|
||||
published_msg: Tamselɣut tettwasufeɣ-d akken iwata!
|
||||
scheduled_for: Yettusɣiwsen i %{time}
|
||||
scheduled_msg: Tamselɣut tettusɣiwes i usufeɣ!
|
||||
title: Ulγuyen
|
||||
title: Ilɣa
|
||||
custom_emojis:
|
||||
assign_category: Efk taggayt
|
||||
by_domain: Taγult
|
||||
by_domain: Taɣult
|
||||
copied_msg: Takna tadigant n imuji yettwarna-d mebla ugur
|
||||
copy: Nγel
|
||||
copy: Nɣel
|
||||
create_new_category: Rnu-d taggayt tamaynut
|
||||
created_msg: Imuji yettwarna-d mebla ugur!
|
||||
delete: Kkes
|
||||
|
@ -229,7 +229,7 @@ kab:
|
|||
enable: Rmed
|
||||
enabled: Yermed
|
||||
enabled_msg: Imuji yermed mebla ugur
|
||||
list: Umuγ
|
||||
list: Tabdart
|
||||
new:
|
||||
title: Timerna n imuji udmawan amaynut
|
||||
overwrite: Semselsi
|
||||
|
@ -256,7 +256,7 @@ kab:
|
|||
add_new: Rni iḥder amaynut n taɣult
|
||||
confirm_suspension:
|
||||
cancel: Sefsex
|
||||
domain: Taγult
|
||||
domain: Taɣult
|
||||
export: Sifeḍ
|
||||
import: Kter
|
||||
new:
|
||||
|
@ -274,9 +274,9 @@ kab:
|
|||
email_domain_blocks:
|
||||
add_new: Rnu amaynut
|
||||
delete: Kkes
|
||||
domain: Taγult
|
||||
domain: Taɣult
|
||||
new:
|
||||
create: Rnu taγult
|
||||
create: Rnu taɣult
|
||||
title: Timerna n taɣult tamaynut n imayl ɣer tebdart taberkant
|
||||
title: Tabdart taberkant n imayl
|
||||
follow_recommendations:
|
||||
|
@ -286,8 +286,8 @@ kab:
|
|||
instances:
|
||||
back_to_all: Akk
|
||||
back_to_limited: Ɣur-s talast
|
||||
back_to_warning: Γur-wat
|
||||
by_domain: Taγult
|
||||
back_to_warning: Ɣur-wat
|
||||
by_domain: Taɣult
|
||||
content_policies:
|
||||
policy: Tasertit
|
||||
delivery:
|
||||
|
@ -306,7 +306,7 @@ kab:
|
|||
private_comment: Awennit uslig
|
||||
public_comment: Awennit azayez
|
||||
title: Tamatut
|
||||
total_blocked_by_us: Ttwasḥebsen sγur-neγ
|
||||
total_blocked_by_us: Ttwasḥebsen sɣur-neɣ
|
||||
total_followed_by_them: Ṭtafaṛen-t
|
||||
total_followed_by_us: Neṭṭafaṛ-it
|
||||
total_reported: Ineqqisen fell-asen
|
||||
|
@ -354,12 +354,15 @@ kab:
|
|||
other: "%{count} n timawin"
|
||||
action_taken_by: Tigawt yettwaṭṭfen sɣur
|
||||
are_you_sure: Tetḥaq-eḍ?
|
||||
cancel: Sefsex
|
||||
category: Taggayt
|
||||
comment:
|
||||
none: Ula yiwen
|
||||
confirm: Sentem
|
||||
delete_and_resolve: Kkes tisuffaɣ
|
||||
mark_as_resolved: Creḍ-it yefra
|
||||
mark_as_unresolved: Creḍ-it ur yefra ara
|
||||
no_one_assigned: Ula yiwen
|
||||
notes:
|
||||
create: Rnu tazmilt
|
||||
create_and_resolve: Fru s tamawt
|
||||
|
@ -390,16 +393,16 @@ kab:
|
|||
title: Ilugan n uqeddac
|
||||
settings:
|
||||
about:
|
||||
title: Γef
|
||||
title: Ɣef
|
||||
appearance:
|
||||
title: Udem
|
||||
discovery:
|
||||
profile_directory: Akaram n imaγnuten
|
||||
profile_directory: Akaram n imaɣnuten
|
||||
trends: Ayen mucaɛen
|
||||
domain_blocks:
|
||||
all: I medden akk
|
||||
disabled: Γef ula yiwen
|
||||
users: Γef yimseqdacen idiganen i yeqqnen
|
||||
disabled: Ɣef ula yiwen
|
||||
users: Ɣef yimseqdacen idiganen i yeqqnen
|
||||
registrations:
|
||||
title: Ajerred
|
||||
registrations_mode:
|
||||
|
@ -408,19 +411,26 @@ kab:
|
|||
open: Zemren akk ad jerden
|
||||
site_uploads:
|
||||
delete: Kkes afaylu yulin
|
||||
software_updates:
|
||||
documentation_link: Issin ugar
|
||||
statuses:
|
||||
application: Asnas
|
||||
back_to_account: Tuγalin γer usebter n umiḍan
|
||||
back_to_account: Tuɣalin ɣer usebter n umiḍan
|
||||
deleted: Yettwakkes
|
||||
favourites: Imenyafen
|
||||
language: Tutlayt
|
||||
media:
|
||||
title: Taγwalt
|
||||
title: Tisuffiγin n umiḍan
|
||||
with_media: S taγwalt
|
||||
title: Amidya
|
||||
title: Tisuffaɣ n umiḍan
|
||||
trending: Ayen mucaɛen
|
||||
visibility: Abani
|
||||
with_media: S umidya
|
||||
title: Tadbelt
|
||||
trends:
|
||||
allow: Sireg
|
||||
statuses:
|
||||
title: Tisuffaɣ mucaɛen
|
||||
trending: Ayen mucaɛen
|
||||
warning_presets:
|
||||
add_new: Rnu amaynut
|
||||
delete: Kkes
|
||||
|
@ -431,7 +441,11 @@ kab:
|
|||
new_report:
|
||||
body: "%{reporter} yettwazen ɣef %{target}"
|
||||
subject: Aneqqis amaynut i %{instance} (#%{id})
|
||||
new_trends:
|
||||
new_trending_statuses:
|
||||
title: Tisuffaɣ mucaɛen
|
||||
appearance:
|
||||
advanced_web_interface: Agrudem n web leqqayen
|
||||
discovery: Asnirem
|
||||
localization:
|
||||
guide_link: https://crowdin.com/project/mastodon
|
||||
|
@ -448,6 +462,8 @@ kab:
|
|||
your_token: Ajiṭun-ik·im n unekcum
|
||||
auth:
|
||||
apply_for_account: Suter amiḍan
|
||||
confirmations:
|
||||
welcome_title: Ansuf yessek·em, %{name}!
|
||||
delete_account: Kkes amiḍan
|
||||
description:
|
||||
prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!"
|
||||
|
@ -455,9 +471,11 @@ kab:
|
|||
forgot_password: Tettud awal-ik uffir?
|
||||
log_in_with: Qqen s
|
||||
login: Qqen
|
||||
logout: Ffeγ
|
||||
migrate_account: Gujj γer umiḍan nniḍen
|
||||
or_log_in_with: Neγ eqqen s
|
||||
logout: Ffeɣ
|
||||
migrate_account: Gujj ɣer umiḍan nniḍen
|
||||
or_log_in_with: Neɣ eqqen s
|
||||
progress:
|
||||
confirm: Sentem imayl
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
|
@ -466,8 +484,11 @@ kab:
|
|||
reset_password: Wennez awal uffir
|
||||
rules:
|
||||
back: Tuɣalin
|
||||
security: Taγellist
|
||||
security: Taɣellist
|
||||
set_new_password: Egr-d awal uffir amaynut
|
||||
sign_in:
|
||||
preamble_html: Kcem ar <strong>%{domain}</strong> s inekcam-inek n tuqqna. Ma yella yezga-d umiḍan-ik deg uqeddac-nniḍen, ur tezmireḍ ara ad tkecmeḍ sya.
|
||||
title: Akeččum ɣer %{domain}
|
||||
status:
|
||||
account_status: Addad n umiḍan
|
||||
use_security_key: Seqdec tasarut n teɣlist
|
||||
|
@ -498,16 +519,21 @@ kab:
|
|||
warning:
|
||||
username_available: Isem-ik·im n useqdac ad yuɣal yella i tikkelt-nniḍen
|
||||
username_unavailable: Isem-ik·im n useqdac ad yeqqim ulac-it
|
||||
disputes:
|
||||
strikes:
|
||||
status: 'Tasuffeɣt #%{id}'
|
||||
title_actions:
|
||||
none: Ɣur-wat
|
||||
errors:
|
||||
'500':
|
||||
title: Asebter-ayi d arameγtu
|
||||
title: Asebter-ayi d arameɣtu
|
||||
existing_username_validator:
|
||||
not_found_multiple: ur yezmir ara ad yaf %{usernames}
|
||||
exports:
|
||||
archive_takeout:
|
||||
date: Azemz
|
||||
download: Sider-d aḥraz-ik·im
|
||||
size: Teγzi
|
||||
size: Teɣzi
|
||||
bookmarks: Ticraḍ
|
||||
csv: CSV
|
||||
lists: Tibdarin
|
||||
|
@ -516,8 +542,8 @@ kab:
|
|||
add_new: Rnu amaynut
|
||||
filters:
|
||||
contexts:
|
||||
account: Imuγna
|
||||
notifications: Tilγa
|
||||
account: Imuɣna
|
||||
notifications: Ilɣa
|
||||
thread: Idiwenniyen
|
||||
edit:
|
||||
title: Ẓreg amzizdig
|
||||
|
@ -534,8 +560,10 @@ kab:
|
|||
remove: Kkes seg umsizdeg
|
||||
generic:
|
||||
all: Akk
|
||||
cancel: Sefsex
|
||||
changes_saved_msg: Ttwaskelsen ibelliden-ik·im akken ilaq!
|
||||
copy: Nγel
|
||||
confirm: Sentem
|
||||
copy: Nɣel
|
||||
delete: Kkes
|
||||
order_by: Sizwer s
|
||||
save_changes: Sekles ibeddilen
|
||||
|
@ -575,7 +603,7 @@ kab:
|
|||
sign_in_token: tangalt n tɣellist n tansa imayl
|
||||
webauthn: tisura n tɣellist
|
||||
migrations:
|
||||
acct: Ibeddel γer
|
||||
acct: Ibeddel ɣer
|
||||
incoming_migrations: Tusiḍ-d seg umiḍan nniḍen
|
||||
proceed_with_move: Awid imeḍfaṛen-ik
|
||||
moderation:
|
||||
|
@ -597,7 +625,7 @@ kab:
|
|||
reblog:
|
||||
subject: "%{name} yesselha addad-ik·im"
|
||||
notifications:
|
||||
other_settings: Iγewwaṛen nniḍen n tilγa
|
||||
other_settings: Iɣewwaṛen nniḍen n yilɣa
|
||||
number:
|
||||
human:
|
||||
decimal_units:
|
||||
|
@ -611,11 +639,13 @@ kab:
|
|||
setup: Sbadu
|
||||
pagination:
|
||||
newer: Amaynut
|
||||
next: Γer zdat
|
||||
next: Ɣer zdat
|
||||
older: Aqbuṛ
|
||||
prev: Win iɛeddan
|
||||
preferences:
|
||||
other: Wiyaḍ
|
||||
privacy:
|
||||
privacy: Tabaḍnit
|
||||
privacy_policy:
|
||||
title: Tasertit tabaḍnit
|
||||
relationships:
|
||||
|
@ -634,6 +664,7 @@ kab:
|
|||
browser: Iminig
|
||||
browsers:
|
||||
alipay: Alipay
|
||||
blackberry: BlackBerry
|
||||
chrome: Chrome
|
||||
edge: Microsoft Edge
|
||||
electron: Electron
|
||||
|
@ -648,37 +679,41 @@ kab:
|
|||
qq: Iminig QQ
|
||||
safari: Safari
|
||||
weibo: Weibo
|
||||
current_session: Tiγimit tamirant
|
||||
current_session: Tiɣimit tamirant
|
||||
date: Azemz
|
||||
description: "%{browser} s %{platform}"
|
||||
ip: IP
|
||||
platforms:
|
||||
adobe_air: Adobe Air
|
||||
android: Android
|
||||
blackberry: BlackBerry
|
||||
chrome_os: ChromeOS
|
||||
firefox_os: Firefox OS
|
||||
ios: iOS
|
||||
kai_os: KaiOS
|
||||
linux: Linux
|
||||
mac: macOS
|
||||
windows: Windows
|
||||
windows_mobile: Windows Mobile
|
||||
windows_phone: Tiliγri Windows Phone
|
||||
windows_phone: Tiliɣri Windows Phone
|
||||
revoke: Ḥwi
|
||||
title: Tiɣimiyin
|
||||
settings:
|
||||
account: Amiḍan
|
||||
account_settings: Iγewwaṛen n umiḍan
|
||||
account_settings: Iɣewwaṛen n umiḍan
|
||||
appearance: Udem
|
||||
authorized_apps: Isnasen yettussirgen
|
||||
back: Uγal γer Maṣṭudun
|
||||
back: Uɣal ɣer Maṣṭudun
|
||||
delete: Tukksa n umiḍan
|
||||
development: Taneflit
|
||||
edit_profile: Ẓreg amaγnu
|
||||
edit_profile: Ẓreg amaɣnu
|
||||
export: Taktert n yisefka
|
||||
import: Kter
|
||||
import_and_export: Taktert d usifeḍ
|
||||
migrate: Tunigin n umiḍan
|
||||
notifications: Tilγa
|
||||
notifications: Ilɣa
|
||||
preferences: Imenyafen
|
||||
profile: Ameγnu
|
||||
profile: Ameɣnu
|
||||
relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ
|
||||
statuses_cleanup: Tukksa tawurmant n tsuffaɣ
|
||||
two_factor_authentication: Asesteb s snat n tarrayin
|
||||
|
@ -745,22 +780,25 @@ kab:
|
|||
otp: Asnas n usesteb
|
||||
webauthn: Tisura n teɣlist
|
||||
user_mailer:
|
||||
appeal_approved:
|
||||
action: Iɣewwaṛen n umiḍan
|
||||
warning:
|
||||
categories:
|
||||
spam: Aspam
|
||||
title:
|
||||
disable: Amiḍan i igersen
|
||||
none: Γur-wat
|
||||
none: Ɣur-wat
|
||||
silence: Amiḍan yesɛa talast
|
||||
suspend: Amiḍan yettwaḥbas
|
||||
welcome:
|
||||
final_action: Bdu asuffeɣ
|
||||
full_handle: Tansa umiḍan-ik takemmalit
|
||||
subject: Ansuf γer Maṣṭudun
|
||||
subject: Ansuf ɣer Maṣṭudun
|
||||
title: Ansuf yessek·em, %{name}!
|
||||
users:
|
||||
signed_in_as: 'Teqqneḍ amzun d:'
|
||||
verification:
|
||||
here_is_how: Ha-t-a amek
|
||||
verification: Asenqed
|
||||
webauthn_credentials:
|
||||
add: Rnu tasarut n teɣlist tamaynut
|
||||
|
|
|
@ -261,7 +261,7 @@ bg:
|
|||
status_page_url: URL адрес на страница със състоянието
|
||||
theme: Стандартна тема
|
||||
thumbnail: Образче на сървъра
|
||||
timeline_preview: Позволяване на неупълномощен достъп до публични часови оси
|
||||
timeline_preview: Позволяване на неудостоверен достъп до публични инфопотоци
|
||||
trendable_by_default: Без преглед на налагащото се
|
||||
trends: Включване на налагащи се
|
||||
trends_as_landing_page: Употреба на налагащото се като целева страница
|
||||
|
|
|
@ -26,6 +26,7 @@ ia:
|
|||
username: Nomine de usator
|
||||
username_or_email: Nomine de usator o e-mail
|
||||
form_admin_settings:
|
||||
bootstrap_timeline_accounts: Recommenda sempre iste contos a nove usatores
|
||||
custom_css: CSS personalisate
|
||||
profile_directory: Activar directorio de profilos
|
||||
site_contact_email: Adresse de e-mail de contacto
|
||||
|
|
|
@ -12,7 +12,7 @@ kab:
|
|||
defaults:
|
||||
autofollow: Imdanen ara ijerrden s usnebgi-inek, ad k-ḍefṛen s wudem awurman
|
||||
email: Ad n-teṭṭfeḍ imayl i usentem
|
||||
irreversible: Tijewwaqin i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat
|
||||
irreversible: Tisuffaɣ i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat
|
||||
locale: Tutlayt n ugrudem, imaylen d tilγa
|
||||
password: Seqdec ma drus 8 n yisekkilen
|
||||
setting_display_media_default: Ffer teywalt yettwacreḍ d tanafrit
|
||||
|
@ -69,12 +69,12 @@ kab:
|
|||
setting_display_media_show_all: Ssken kullec
|
||||
setting_hide_network: Ffer azetta-k·m
|
||||
setting_theme: Asental n wesmel
|
||||
setting_use_pending_items: Askar aleγwayan
|
||||
setting_use_pending_items: Askar aleɣwayan
|
||||
sign_in_token_attempt: Tangalt n tɣellist
|
||||
title: Azwel
|
||||
type: Anaw n uktar
|
||||
username: Isem n useqdac
|
||||
username_or_email: Isem n useqdac neγ imal
|
||||
username_or_email: Isem n useqdac neɣ imal
|
||||
whole_word: Awal akk
|
||||
featured_tag:
|
||||
name: Ahacṭag
|
||||
|
@ -84,7 +84,7 @@ kab:
|
|||
invite:
|
||||
comment: Awennit
|
||||
invite_request:
|
||||
text: Acimi tebγiḍ ad ternuḍ iman-ik?
|
||||
text: Acimi tebɣiḍ ad ternuḍ iman-ik?
|
||||
ip_block:
|
||||
comment: Awennit
|
||||
ip: IP
|
||||
|
|
|
@ -200,12 +200,12 @@ zh-TW:
|
|||
password: 密碼
|
||||
phrase: 關鍵字或片語
|
||||
setting_advanced_layout: 啟用進階網頁介面
|
||||
setting_aggregate_reblogs: 時間軸中的群組轉嘟
|
||||
setting_aggregate_reblogs: 於時間軸中不重複顯示轉嘟
|
||||
setting_always_send_emails: 總是發送電子郵件通知
|
||||
setting_auto_play_gif: 自動播放 GIF 動畫
|
||||
setting_boost_modal: 轉嘟前先詢問我
|
||||
setting_default_language: 嘟文語言
|
||||
setting_default_privacy: 嘟文可見範圍
|
||||
setting_default_privacy: 嘟文隱私設定
|
||||
setting_default_sensitive: 總是將媒體標記為敏感內容
|
||||
setting_delete_modal: 刪除嘟文前先詢問我
|
||||
setting_disable_swiping: 停用滑動手勢
|
||||
|
|
|
@ -251,14 +251,16 @@ sk:
|
|||
enable_user_html: "%{name} povolil/a prihlásenie pre používateľa %{target}"
|
||||
memorialize_account_html: "%{name} zmenil/a účet %{target} na pamätnú stránku"
|
||||
reject_appeal_html: "%{name} zamietol/la námietku moderovacieho rozhodnutia od %{target}"
|
||||
remove_avatar_user_html: "%{name} vymazal/a %{target}/ov/in avatar"
|
||||
reopen_report_html: "%{name} znovu otvoril/a nahlásenie %{target}"
|
||||
resend_user_html: "%{name} znovu odoslal/a potvrdzovací email pre %{target}"
|
||||
reset_password_user_html: "%{name} resetoval/a heslo používateľa %{target}"
|
||||
resolve_report_html: "%{name} vyriešil/a nahlásenie %{target}"
|
||||
sensitive_account_html: "%{name} označil médium od %{target} za chúlostivé"
|
||||
sensitive_account_html: "%{name} označil/a médium od %{target} za chúlostivé"
|
||||
silence_account_html: "%{name} obmedzil/a účet %{target}"
|
||||
suspend_account_html: "%{name} zablokoval/a účet používateľa %{target}"
|
||||
unassigned_report_html: "%{name} odobral/a report od %{target}"
|
||||
unsensitive_account_html: "%{name} odznačil/a médium od %{target} ako chúlostivé"
|
||||
unsuspend_account_html: "%{name} spojazdnil/a účet %{target}"
|
||||
update_announcement_html: "%{name} aktualizoval/a oboznámenie %{target}"
|
||||
update_custom_emoji_html: "%{name} aktualizoval/a emotikonu %{target}"
|
||||
|
|
|
@ -188,7 +188,7 @@ sq:
|
|||
create_user_role: Krijoni Rol
|
||||
demote_user: Zhgradoje Përdoruesin
|
||||
destroy_announcement: Fshije Lajmërimin
|
||||
destroy_canonical_email_block: Fshi Bllokim El-esh
|
||||
destroy_canonical_email_block: Fshi Bllokim Email-esh
|
||||
destroy_custom_emoji: Fshi Emotikon Vetjak
|
||||
destroy_domain_allow: Fshi Lejim Përkatësie
|
||||
destroy_domain_block: Fshi Bllokim Përkatësie
|
||||
|
@ -283,7 +283,7 @@ sq:
|
|||
unsuspend_account_html: "%{name} hoqi pezullimin për llogarinë e %{target}"
|
||||
update_announcement_html: "%{name} përditësoi lajmërimin %{target}"
|
||||
update_custom_emoji_html: "%{name} përditësoi emoxhin %{target}"
|
||||
update_domain_block_html: "%{name} përditësoi bllokimin e përkatësish për %{target}"
|
||||
update_domain_block_html: "%{name} përditësoi bllokim përkatësish për %{target}"
|
||||
update_ip_block_html: "%{name} ndryshoi rregull për IP-në %{target}"
|
||||
update_status_html: "%{name} përditësoi gjendjen me %{target}"
|
||||
update_user_role_html: "%{name} ndryshoi rolin për %{target}"
|
||||
|
|
|
@ -452,7 +452,7 @@ th:
|
|||
title: นำเข้าการปิดกั้นโดเมน
|
||||
no_file: ไม่ได้เลือกไฟล์
|
||||
follow_recommendations:
|
||||
description_html: "<strong>คำแนะนำการติดตามช่วยให้ผู้ใช้ใหม่ค้นหาเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว</strong> เมื่อผู้ใช้ไม่ได้โต้ตอบกับผู้อื่นมากพอที่จะสร้างคำแนะนำการติดตามส่วนบุคคล จะแนะนำบัญชีเหล่านี้แทน จะคำนวณคำแนะนำใหม่เป็นประจำทุกวันจากบัญชีต่าง ๆ ที่มีการมีส่วนร่วมล่าสุดสูงสุดและจำนวนผู้ติดตามในเซิร์ฟเวอร์สูงสุดสำหรับภาษาที่กำหนด"
|
||||
description_html: "<strong>คำแนะนำการติดตามช่วยให้ผู้ใช้ใหม่ค้นหาเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว</strong> เมื่อผู้ใช้ไม่ได้โต้ตอบกับผู้อื่นมากพอที่จะสร้างคำแนะนำการติดตามเฉพาะบุคคล จะแนะนำบัญชีเหล่านี้แทน จะคำนวณคำแนะนำใหม่เป็นประจำทุกวันจากบัญชีต่าง ๆ ที่มีการมีส่วนร่วมล่าสุดสูงสุดและจำนวนผู้ติดตามในเซิร์ฟเวอร์สูงสุดสำหรับภาษาที่กำหนด"
|
||||
language: สำหรับภาษา
|
||||
status: สถานะ
|
||||
suppress: ระงับคำแนะนำการติดตาม
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'sidekiq_unique_jobs/web'
|
||||
require 'sidekiq_unique_jobs/web' if ENV['ENABLE_SIDEKIQ_UNIQUE_JOBS_UI'] == true
|
||||
require 'sidekiq-scheduler/web'
|
||||
|
||||
class RedirectWithVary < ActionDispatch::Routing::PathRedirect
|
||||
|
|
|
@ -56,7 +56,7 @@ services:
|
|||
|
||||
web:
|
||||
build: .
|
||||
image: ghcr.io/mastodon/mastodon:v4.2.0
|
||||
image: ghcr.io/mastodon/mastodon:v4.2.7
|
||||
restart: always
|
||||
env_file: .env.production
|
||||
command: bundle exec puma -C config/puma.rb
|
||||
|
@ -77,7 +77,7 @@ services:
|
|||
|
||||
streaming:
|
||||
build: .
|
||||
image: ghcr.io/mastodon/mastodon:v4.2.0
|
||||
image: ghcr.io/mastodon/mastodon:v4.2.7
|
||||
restart: always
|
||||
env_file: .env.production
|
||||
command: node ./streaming
|
||||
|
@ -95,7 +95,7 @@ services:
|
|||
|
||||
sidekiq:
|
||||
build: .
|
||||
image: ghcr.io/mastodon/mastodon:v4.2.0
|
||||
image: ghcr.io/mastodon/mastodon:v4.2.7
|
||||
restart: always
|
||||
env_file: .env.production
|
||||
command: bundle exec sidekiq
|
||||
|
|
|
@ -17,7 +17,7 @@ module Mastodon
|
|||
end
|
||||
|
||||
def default_prerelease
|
||||
'alpha.1'
|
||||
'alpha.3'
|
||||
end
|
||||
|
||||
def prerelease
|
||||
|
|
11
lib/tasks/sidekiq_unique_jobs.rake
Normal file
11
lib/tasks/sidekiq_unique_jobs.rake
Normal file
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
namespace :sidekiq_unique_jobs do
|
||||
task delete_all_locks: :environment do
|
||||
digests = SidekiqUniqueJobs::Digests.new
|
||||
digests.delete_by_pattern('*', count: digests.count)
|
||||
|
||||
expiring_digests = SidekiqUniqueJobs::ExpiringDigests.new
|
||||
expiring_digests.delete_by_pattern('*', count: expiring_digests.count)
|
||||
end
|
||||
end
|
|
@ -30,21 +30,19 @@ RSpec.describe Admin::Disputes::AppealsController do
|
|||
end
|
||||
|
||||
describe 'POST #approve' do
|
||||
subject { post :approve, params: { id: appeal.id } }
|
||||
|
||||
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
|
||||
|
||||
before do
|
||||
post :approve, params: { id: appeal.id }
|
||||
end
|
||||
it 'redirects back to the strike page and notifies target account about approved appeal', :sidekiq_inline do
|
||||
subject
|
||||
|
||||
it 'unsuspends a suspended account' do
|
||||
expect(target_account.reload.suspended?).to be false
|
||||
end
|
||||
expect(response)
|
||||
.to redirect_to(disputes_strike_path(appeal.strike))
|
||||
|
||||
it 'redirects back to the strike page' do
|
||||
expect(response).to redirect_to(disputes_strike_path(appeal.strike))
|
||||
end
|
||||
expect(target_account.reload)
|
||||
.to_not be_suspended
|
||||
|
||||
it 'notifies target account about approved appeal', :sidekiq_inline do
|
||||
expect(UserMailer.deliveries.size).to eq(1)
|
||||
expect(UserMailer.deliveries.first.to.first).to eq(target_account.user.email)
|
||||
expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.appeal_approved.subject', date: I18n.l(appeal.created_at)))
|
||||
|
@ -52,17 +50,16 @@ RSpec.describe Admin::Disputes::AppealsController do
|
|||
end
|
||||
|
||||
describe 'POST #reject' do
|
||||
subject { post :reject, params: { id: appeal.id } }
|
||||
|
||||
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
|
||||
|
||||
before do
|
||||
post :reject, params: { id: appeal.id }
|
||||
end
|
||||
it 'redirects back to the strike page and notifies target account about rejected appeal', :sidekiq_inline do
|
||||
subject
|
||||
|
||||
it 'redirects back to the strike page' do
|
||||
expect(response).to redirect_to(disputes_strike_path(appeal.strike))
|
||||
end
|
||||
expect(response)
|
||||
.to redirect_to(disputes_strike_path(appeal.strike))
|
||||
|
||||
it 'notifies target account about rejected appeal', :sidekiq_inline do
|
||||
expect(UserMailer.deliveries.size).to eq(1)
|
||||
expect(UserMailer.deliveries.first.to.first).to eq(target_account.user.email)
|
||||
expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.appeal_rejected.subject', date: I18n.l(appeal.created_at)))
|
||||
|
|
|
@ -57,11 +57,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { email: 'pam_user1', password: '123456' } }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
it 'redirects to home and logs the user in' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to be_instance_of(User)
|
||||
end
|
||||
end
|
||||
|
@ -71,11 +69,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { email: 'pam_user1', password: 'WRONGPW' } }
|
||||
end
|
||||
|
||||
it 'shows a login error' do
|
||||
it 'shows a login error and does not log the user in' do
|
||||
expect(flash[:alert]).to match I18n.t('devise.failure.invalid', authentication_keys: I18n.t('activerecord.attributes.user.email'))
|
||||
end
|
||||
|
||||
it "doesn't log the user in" do
|
||||
expect(controller.current_user).to be_nil
|
||||
end
|
||||
end
|
||||
|
@ -92,11 +88,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { email: user.email, password: '123456' } }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
it 'redirects to home and logs the user in' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
end
|
||||
|
@ -110,16 +104,16 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { email: user.email, password: user.password } }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
it 'redirects to home and logs the user in' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
end
|
||||
|
||||
context 'when using a valid password on a previously-used account with a new IP address' do
|
||||
subject { post :create, params: { user: { email: user.email, password: user.password } } }
|
||||
|
||||
let(:previous_ip) { '1.2.3.4' }
|
||||
let(:current_ip) { '4.3.2.1' }
|
||||
|
||||
|
@ -127,18 +121,17 @@ RSpec.describe Auth::SessionsController do
|
|||
Fabricate(:login_activity, user: user, ip: previous_ip)
|
||||
allow(controller.request).to receive(:remote_ip).and_return(current_ip)
|
||||
user.update(current_sign_in_at: 1.month.ago)
|
||||
post :create, params: { user: { email: user.email, password: user.password } }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
it 'logs the user in and sends suspicious email and redirects home', :sidekiq_inline do
|
||||
subject
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
expect(response)
|
||||
.to redirect_to(root_path)
|
||||
|
||||
expect(controller.current_user)
|
||||
.to eq user
|
||||
|
||||
it 'sends a suspicious sign-in mail', :sidekiq_inline do
|
||||
expect(UserMailer.deliveries.size).to eq(1)
|
||||
expect(UserMailer.deliveries.first.to.first).to eq(user.email)
|
||||
expect(UserMailer.deliveries.first.subject).to eq(I18n.t('user_mailer.suspicious_sign_in.subject'))
|
||||
|
@ -150,11 +143,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
it 'redirects to home and logs the user in' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
end
|
||||
|
@ -164,11 +155,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { email: user.email, password: 'wrongpw' } }
|
||||
end
|
||||
|
||||
it 'shows a login error' do
|
||||
it 'shows a login error and does not log the user in' do
|
||||
expect(flash[:alert]).to match I18n.t('devise.failure.invalid', authentication_keys: I18n.t('activerecord.attributes.user.email'))
|
||||
end
|
||||
|
||||
it "doesn't log the user in" do
|
||||
expect(controller.current_user).to be_nil
|
||||
end
|
||||
end
|
||||
|
@ -270,7 +259,7 @@ RSpec.describe Auth::SessionsController do
|
|||
travel_to '2023-12-20T10:00:00Z'
|
||||
end
|
||||
|
||||
it 'does not log the user in' do
|
||||
it 'does not log the user in, sets a flash message, and sends a suspicious sign in email', :sidekiq_inline do
|
||||
Auth::SessionsController::MAX_2FA_ATTEMPTS_PER_HOUR.times do
|
||||
post :create, params: { user: { otp_attempt: '1234' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
expect(controller.current_user).to be_nil
|
||||
|
@ -278,17 +267,10 @@ RSpec.describe Auth::SessionsController do
|
|||
|
||||
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
|
||||
expect(controller.current_user).to be_nil
|
||||
expect(flash[:alert]).to match I18n.t('users.rate_limited')
|
||||
end
|
||||
|
||||
it 'sends a suspicious sign-in mail', :sidekiq_inline do
|
||||
Auth::SessionsController::MAX_2FA_ATTEMPTS_PER_HOUR.times do
|
||||
post :create, params: { user: { otp_attempt: '1234' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
expect(controller.current_user).to be_nil
|
||||
end
|
||||
|
||||
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
expect(controller.current_user)
|
||||
.to be_nil
|
||||
expect(flash[:alert])
|
||||
.to match I18n.t('users.rate_limited')
|
||||
|
||||
expect(UserMailer.deliveries.size).to eq(1)
|
||||
expect(UserMailer.deliveries.first.to.first).to eq(user.email)
|
||||
|
@ -301,11 +283,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
it 'redirects to home and logs the user in' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
end
|
||||
|
@ -318,11 +298,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
end
|
||||
|
||||
it 'shows a login error' do
|
||||
it 'shows a login error and does not log the user in' do
|
||||
expect(flash[:alert]).to match I18n.t('users.invalid_otp_token')
|
||||
end
|
||||
|
||||
it "doesn't log the user in" do
|
||||
expect(controller.current_user).to be_nil
|
||||
end
|
||||
end
|
||||
|
@ -332,11 +310,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
end
|
||||
|
||||
it 'redirects to home' do
|
||||
it 'redirects to home and logs the user in' do
|
||||
expect(response).to redirect_to(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
end
|
||||
|
@ -346,11 +322,9 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
end
|
||||
|
||||
it 'shows a login error' do
|
||||
it 'shows a login error and does not log the user in' do
|
||||
expect(flash[:alert]).to match I18n.t('users.invalid_otp_token')
|
||||
end
|
||||
|
||||
it "doesn't log the user in" do
|
||||
expect(controller.current_user).to be_nil
|
||||
end
|
||||
end
|
||||
|
@ -417,15 +391,11 @@ RSpec.describe Auth::SessionsController do
|
|||
post :create, params: { user: { credential: fake_credential } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||
end
|
||||
|
||||
it 'instructs the browser to redirect to home' do
|
||||
it 'instructs the browser to redirect to home, logs the user in, and updates the sign count' do
|
||||
expect(body_as_json[:redirect_path]).to eq(root_path)
|
||||
end
|
||||
|
||||
it 'logs the user in' do
|
||||
expect(controller.current_user).to eq user
|
||||
end
|
||||
|
||||
it 'updates the sign count' do
|
||||
expect(webauthn_credential.reload.sign_count).to eq(sign_count)
|
||||
end
|
||||
end
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue