diff --git a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml index 01f062b972..98801f07f1 100644 --- a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml @@ -59,7 +59,7 @@ body: Any additional technical details you may have, like logs or error traces value: | If this is happening on your own Mastodon server, please fill out those: - - Ruby version: (from `ruby --version`, eg. v4.0.2) + - Ruby version: (from `ruby --version`, eg. v4.0.3) - Node.js version: (from `node --version`, eg. v22.16.0) validations: required: false diff --git a/.github/ISSUE_TEMPLATE/3.troubleshooting.yml b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml index 9fe5df7ce3..9856ae4428 100644 --- a/.github/ISSUE_TEMPLATE/3.troubleshooting.yml +++ b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml @@ -60,7 +60,7 @@ body: value: | Please at least include those informations: - Operating system: (eg. Ubuntu 24.04.2) - - Ruby version: (from `ruby --version`, eg. v4.0.2) + - Ruby version: (from `ruby --version`, eg. v4.0.3) - Node.js version: (from `node --version`, eg. v22.16.0) validations: required: false diff --git a/.github/actions/setup-javascript/action.yml b/.github/actions/setup-javascript/action.yml index f326d0dee4..7f29265c1c 100644 --- a/.github/actions/setup-javascript/action.yml +++ b/.github/actions/setup-javascript/action.yml @@ -9,7 +9,7 @@ runs: using: 'composite' steps: - name: Set up Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version-file: '.nvmrc' @@ -23,7 +23,7 @@ runs: shell: bash run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 + - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} diff --git a/.github/actions/setup-ruby/action.yml b/.github/actions/setup-ruby/action.yml index 9f50aa60ff..317c1256d5 100644 --- a/.github/actions/setup-ruby/action.yml +++ b/.github/actions/setup-ruby/action.yml @@ -17,7 +17,7 @@ runs: sudo apt-get install --no-install-recommends -y libicu-dev libidn11-dev libvips42 ${{ inputs.additional-system-dependencies }} - name: Set up Ruby - uses: ruby/setup-ruby@c984c1a20bb35a1cbda04477c816cea024418be9 # v1 + uses: ruby/setup-ruby@94e4d89d3e6c1c7599e0210d114c5ffb23f1a866 # v1 with: ruby-version: ${{ inputs.ruby-version }} bundler-cache: true diff --git a/.github/workflows/bundler-audit.yml b/.github/workflows/bundler-audit.yml index 964d93378d..0cbbeb5878 100644 --- a/.github/workflows/bundler-audit.yml +++ b/.github/workflows/bundler-audit.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Set up Ruby - uses: ruby/setup-ruby@c984c1a20bb35a1cbda04477c816cea024418be9 # v1 + uses: ruby/setup-ruby@94e4d89d3e6c1c7599e0210d114c5ffb23f1a866 # v1 with: bundler-cache: true diff --git a/.github/workflows/lint-haml.yml b/.github/workflows/lint-haml.yml index 33dc4e4fb6..b59a4b2d69 100644 --- a/.github/workflows/lint-haml.yml +++ b/.github/workflows/lint-haml.yml @@ -36,7 +36,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Set up Ruby - uses: ruby/setup-ruby@c984c1a20bb35a1cbda04477c816cea024418be9 # v1 + uses: ruby/setup-ruby@94e4d89d3e6c1c7599e0210d114c5ffb23f1a866 # v1 with: bundler-cache: true diff --git a/.github/workflows/lint-ruby.yml b/.github/workflows/lint-ruby.yml index b68f50e033..ae4cc6faf2 100644 --- a/.github/workflows/lint-ruby.yml +++ b/.github/workflows/lint-ruby.yml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Set up Ruby - uses: ruby/setup-ruby@c984c1a20bb35a1cbda04477c816cea024418be9 # v1 + uses: ruby/setup-ruby@94e4d89d3e6c1c7599e0210d114c5ffb23f1a866 # v1 with: bundler-cache: true diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index a8695cae8c..b8c525d9d4 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -43,7 +43,7 @@ jobs: onlyProduction: 'true' - name: Cache assets from compilation - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 with: path: | public/assets @@ -151,7 +151,7 @@ jobs: bin/flatware fan bin/rails db:test:prepare - name: Cache RSpec persistence file - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 with: path: | tmp/rspec/examples.txt @@ -167,7 +167,7 @@ jobs: - name: Upload coverage reports to Codecov if: matrix.ruby-version == '.ruby-version' - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5 + uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5 with: files: coverage/lcov/*.lcov env: @@ -247,7 +247,7 @@ jobs: - name: Cache Playwright Chromium browser id: playwright-cache - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 with: path: ~/.cache/ms-playwright key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }} diff --git a/.ruby-version b/.ruby-version index 4d54daddb6..c4e41f9459 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -4.0.2 +4.0.3 diff --git a/Dockerfile b/Dockerfile index 6812939291..1f50c0f1a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io" # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="4.0.x"] # renovate: datasource=docker depName=docker.io/ruby -ARG RUBY_VERSION="4.0.2" +ARG RUBY_VERSION="4.0.3" # # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"] # renovate: datasource=node-version depName=node ARG NODE_MAJOR_VERSION="24" diff --git a/Gemfile b/Gemfile index 6d22ed3e19..f5d72aed1b 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'https://rubygems.org' ruby '>= 3.3.0', '< 4.1.0' gem 'propshaft' -gem 'puma', '~> 7.0' +gem 'puma' gem 'rails', '~> 8.1.0' gem 'thor', '~> 1.2' diff --git a/Gemfile.lock b/Gemfile.lock index de97b60df9..57879896e9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -99,8 +99,8 @@ GEM ast (2.4.3) attr_required (1.0.2) aws-eventstream (1.4.0) - aws-partitions (1.1238.0) - aws-sdk-core (3.244.0) + aws-partitions (1.1242.0) + aws-sdk-core (3.246.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -108,10 +108,10 @@ GEM bigdecimal jmespath (~> 1, >= 1.6.1) logger - aws-sdk-kms (1.123.0) + aws-sdk-kms (1.124.0) aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.219.0) + aws-sdk-s3 (1.220.0) aws-sdk-core (~> 3, >= 3.244.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -132,7 +132,7 @@ GEM binding_of_caller (2.0.0) debug_inspector (>= 1.2.0) blurhash (0.1.8) - bootsnap (1.23.0) + bootsnap (1.24.1) msgpack (~> 1.2) brakeman (8.0.4) racc @@ -178,7 +178,7 @@ GEM bigdecimal rexml crass (1.0.6) - css_parser (2.0.0) + css_parser (2.1.0) addressable csv (3.3.5) database_cleaner-active_record (2.2.2) @@ -226,7 +226,7 @@ GEM elasticsearch-dsl (0.1.10) email_validator (2.2.4) activemodel - erb (6.0.3) + erb (6.0.4) erubi (1.13.1) et-orbi (1.4.0) tzinfo @@ -264,7 +264,7 @@ GEM excon (~> 1.0) formatador (>= 0.2, < 2.0) mime-types - fog-json (1.2.0) + fog-json (1.3.0) fog-core multi_json (~> 1.10) fog-openstack (1.1.5) @@ -314,7 +314,7 @@ GEM http-cookie (~> 1.0) http-form_data (~> 2.2) llhttp-ffi (~> 0.5.0) - http-cookie (1.1.4) + http-cookie (1.1.6) domain_name (~> 0.5) http-form_data (2.3.0) http_accept_language (2.1.1) @@ -343,7 +343,7 @@ GEM activesupport (>= 3.0) nokogiri (>= 1.6) io-console (0.8.2) - irb (1.17.0) + irb (1.18.0) pp (>= 0.6.0) prism (>= 1.3.0) rdoc (>= 4.0.0) @@ -458,7 +458,7 @@ GEM mutex_m (0.3.0) net-http (0.6.0) uri - net-imap (0.6.3) + net-imap (0.6.4) date net-protocol net-ldap (0.20.0) @@ -471,7 +471,7 @@ GEM net-smtp (0.5.1) net-protocol nio4r (2.7.5) - nokogiri (1.19.2) + nokogiri (1.19.3) mini_portile2 (~> 2.8.2) racc (~> 1.4) omniauth (2.1.4) @@ -625,7 +625,7 @@ GEM date stringio public_suffix (7.0.5) - puma (7.2.0) + puma (8.0.1) nio4r (~> 2.0) pundit (2.5.2) activesupport (>= 3.0.0) @@ -691,7 +691,7 @@ GEM tsort (>= 0.2) zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.4.1) + rake (13.4.2) rdf (3.3.4) bcp47_spec (~> 0.2) bigdecimal (~> 3.1, >= 3.1.5) @@ -848,7 +848,7 @@ GEM stackprof (0.2.28) starry (0.2.0) base64 - stoplight (5.8.0) + stoplight (5.8.2) concurrent-ruby zeitwerk stringio (3.2.0) @@ -1045,7 +1045,7 @@ DEPENDENCIES prometheus_exporter (~> 2.2) propshaft public_suffix (~> 7.0) - puma (~> 7.0) + puma pundit (~> 2.3) rack-attack (~> 6.6) rack-cors @@ -1097,7 +1097,7 @@ DEPENDENCIES xorcist (~> 1.1) RUBY VERSION - ruby 4.0.2 + ruby 4.0.3 BUNDLED WITH - 4.0.10 + 4.0.11 diff --git a/app/controllers/api/v1/notifications_controller.rb b/app/controllers/api/v1/notifications_controller.rb index bdc163d4b6..3d5399d978 100644 --- a/app/controllers/api/v1/notifications_controller.rb +++ b/app/controllers/api/v1/notifications_controller.rb @@ -16,7 +16,7 @@ class Api::V1::NotificationsController < Api::BaseController @relationships = StatusRelationshipsPresenter.new(target_statuses_from_notifications, current_user&.account_id) end - render json: @notifications, each_serializer: REST::NotificationSerializer, relationships: @relationships + render json: @notifications, each_serializer: REST::NotificationSerializer, relationships: @relationships, supported_notification_types: params[:supported_types] end def unread_count @@ -29,7 +29,7 @@ class Api::V1::NotificationsController < Api::BaseController def show @notification = current_account.notifications.without_suspended.find(params[:id]) - render json: @notification, serializer: REST::NotificationSerializer + render json: @notification, serializer: REST::NotificationSerializer, supported_notification_types: params[:supported_types] end def clear @@ -98,6 +98,8 @@ class Api::V1::NotificationsController < Api::BaseController end def pagination_params(core_params) - params.slice(:limit, :account_id, :types, :exclude_types, :include_filtered).permit(:limit, :account_id, :include_filtered, types: [], exclude_types: []).merge(core_params) + params.slice(:limit, :account_id, :types, :exclude_types, :include_filtered, :supported_types) + .permit(:limit, :account_id, :include_filtered, types: [], exclude_types: [], supported_types: []) + .merge(core_params) end end diff --git a/app/controllers/api/v2/notifications_controller.rb b/app/controllers/api/v2/notifications_controller.rb index 848c361cfc..f54cd230b7 100644 --- a/app/controllers/api/v2/notifications_controller.rb +++ b/app/controllers/api/v2/notifications_controller.rb @@ -33,7 +33,7 @@ class Api::V2::NotificationsController < Api::BaseController 'app.notification_grouping.expand_accounts_param' => expand_accounts_param ) - render json: @presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, expand_accounts: expand_accounts_param + render json: @presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, expand_accounts: expand_accounts_param, supported_notification_types: params[:supported_types] end end @@ -48,7 +48,7 @@ class Api::V2::NotificationsController < Api::BaseController def show @notification = current_account.notifications.without_suspended.by_group_key(params[:group_key]).take! presenter = GroupedNotificationsPresenter.new(NotificationGroup.from_notifications([@notification])) - render json: presenter, serializer: REST::DedupNotificationGroupSerializer + render json: presenter, serializer: REST::DedupNotificationGroupSerializer, supported_notification_types: params[:supported_types] end def clear @@ -138,7 +138,9 @@ class Api::V2::NotificationsController < Api::BaseController end def pagination_params(core_params) - params.slice(:limit, :include_filtered, :types, :exclude_types, :grouped_types).permit(:limit, :include_filtered, types: [], exclude_types: [], grouped_types: []).merge(core_params) + params.slice(:limit, :include_filtered, :types, :exclude_types, :grouped_types, :supported_types) + .permit(:limit, :include_filtered, types: [], exclude_types: [], grouped_types: [], supported_types: []) + .merge(core_params) end def expand_accounts_param diff --git a/app/javascript/images/icons/icon_clock.svg b/app/javascript/images/icons/icon_clock.svg new file mode 100644 index 0000000000..cba7451c5b --- /dev/null +++ b/app/javascript/images/icons/icon_clock.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 9bd118934e..d855c9c3a2 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -8,6 +8,7 @@ import { browserHistory } from 'mastodon/components/router'; import { countableText } from 'mastodon/features/compose/util/counter'; import { search as emojiSearch } from 'mastodon/features/emoji/emoji_mart_search_light'; import { tagHistory } from 'mastodon/settings'; +import { fetchCustomEmojiData } from '@/mastodon/features/emoji/picker'; import { showAlert, showAlertForError } from './alerts'; import { useEmoji } from './emojis'; @@ -565,7 +566,7 @@ export function clearComposeSuggestions() { }; } -const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) => { +const fetchComposeSuggestionsAccounts = throttle((dispatch, token) => { if (fetchComposeSuggestionsAccountsController) { fetchComposeSuggestionsAccountsController.abort(); } @@ -592,12 +593,13 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) => }); }, 200, { leading: true, trailing: true }); -const fetchComposeSuggestionsEmojis = (dispatch, getState, token) => { - const results = emojiSearch(token.replace(':', ''), { maxResults: 5 }); +const fetchComposeSuggestionsEmojis = async (dispatch, token) => { + const custom = await fetchCustomEmojiData(); + const results = emojiSearch(token.replace(':', ''), { maxResults: 5, custom }); dispatch(readyComposeSuggestionsEmojis(token, results)); }; -const fetchComposeSuggestionsTags = throttle((dispatch, getState, token) => { +const fetchComposeSuggestionsTags = throttle((dispatch, token) => { if (fetchComposeSuggestionsTagsController) { fetchComposeSuggestionsTagsController.abort(); } @@ -631,14 +633,14 @@ export function fetchComposeSuggestions(token) { return (dispatch, getState) => { switch (token[0]) { case ':': - fetchComposeSuggestionsEmojis(dispatch, getState, token); + void fetchComposeSuggestionsEmojis(dispatch, token); break; case '#': case '#': - fetchComposeSuggestionsTags(dispatch, getState, token); + fetchComposeSuggestionsTags(dispatch, token); break; default: - fetchComposeSuggestionsAccounts(dispatch, getState, token); + fetchComposeSuggestionsAccounts(dispatch, token); break; } }; diff --git a/app/javascript/mastodon/actions/custom_emojis.js b/app/javascript/mastodon/actions/custom_emojis.js deleted file mode 100644 index fb65f072dc..0000000000 --- a/app/javascript/mastodon/actions/custom_emojis.js +++ /dev/null @@ -1,40 +0,0 @@ -import api from '../api'; - -export const CUSTOM_EMOJIS_FETCH_REQUEST = 'CUSTOM_EMOJIS_FETCH_REQUEST'; -export const CUSTOM_EMOJIS_FETCH_SUCCESS = 'CUSTOM_EMOJIS_FETCH_SUCCESS'; -export const CUSTOM_EMOJIS_FETCH_FAIL = 'CUSTOM_EMOJIS_FETCH_FAIL'; - -export function fetchCustomEmojis() { - return (dispatch) => { - dispatch(fetchCustomEmojisRequest()); - - api().get('/api/v1/custom_emojis').then(response => { - dispatch(fetchCustomEmojisSuccess(response.data)); - }).catch(error => { - dispatch(fetchCustomEmojisFail(error)); - }); - }; -} - -export function fetchCustomEmojisRequest() { - return { - type: CUSTOM_EMOJIS_FETCH_REQUEST, - skipLoading: true, - }; -} - -export function fetchCustomEmojisSuccess(custom_emojis) { - return { - type: CUSTOM_EMOJIS_FETCH_SUCCESS, - custom_emojis, - skipLoading: true, - }; -} - -export function fetchCustomEmojisFail(error) { - return { - type: CUSTOM_EMOJIS_FETCH_FAIL, - error, - skipLoading: true, - }; -} diff --git a/app/javascript/mastodon/api/collections.ts b/app/javascript/mastodon/api/collections.ts index 862f98b60a..7f39651f02 100644 --- a/app/javascript/mastodon/api/collections.ts +++ b/app/javascript/mastodon/api/collections.ts @@ -34,11 +34,16 @@ export const apiGetCollection = (collectionId: string) => `v1_alpha/collections/${collectionId}`, ); -export const apiGetAccountCollections = (accountId: string) => +export const apiGetCollectionsCreatedByAccount = (accountId: string) => apiRequestGet( `v1_alpha/accounts/${accountId}/collections`, ); +export const apiGetCollectionsFeaturingAccount = (accountId: string) => + apiRequestGet( + `v1_alpha/accounts/${accountId}/in_collections`, + ); + export const apiAddCollectionItem = (collectionId: string, accountId: string) => apiRequestPost( `v1_alpha/collections/${collectionId}/items`, diff --git a/app/javascript/mastodon/features/account_timeline/components/badges.tsx b/app/javascript/mastodon/components/account_header/badges.tsx similarity index 98% rename from app/javascript/mastodon/features/account_timeline/components/badges.tsx rename to app/javascript/mastodon/components/account_header/badges.tsx index ec8b00f5ac..401f0d0fb1 100644 --- a/app/javascript/mastodon/features/account_timeline/components/badges.tsx +++ b/app/javascript/mastodon/components/account_header/badges.tsx @@ -4,6 +4,10 @@ import type { FC } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchRelationships } from '@/mastodon/actions/accounts'; +import { useAccount } from '@/mastodon/hooks/useAccount'; +import type { AccountRole } from '@/mastodon/models/account'; +import { useAppDispatch, useAppSelector } from '@/mastodon/store'; + import { AdminBadge, AutomatedBadge, @@ -11,10 +15,7 @@ import { BlockedBadge, GroupBadge, MutedBadge, -} from '@/mastodon/components/badge'; -import { useAccount } from '@/mastodon/hooks/useAccount'; -import type { AccountRole } from '@/mastodon/models/account'; -import { useAppDispatch, useAppSelector } from '@/mastodon/store'; +} from '../badge'; import classes from './styles.module.scss'; diff --git a/app/javascript/mastodon/features/account_timeline/components/buttons.tsx b/app/javascript/mastodon/components/account_header/buttons.tsx similarity index 95% rename from app/javascript/mastodon/features/account_timeline/components/buttons.tsx rename to app/javascript/mastodon/components/account_header/buttons.tsx index 0c24207b6a..737a3b9ca5 100644 --- a/app/javascript/mastodon/features/account_timeline/components/buttons.tsx +++ b/app/javascript/mastodon/components/account_header/buttons.tsx @@ -6,9 +6,6 @@ import { defineMessages, useIntl } from 'react-intl'; import classNames from 'classnames'; import { followAccount } from '@/mastodon/actions/accounts'; -import { CopyIconButton } from '@/mastodon/components/copy_icon_button'; -import { FollowButton } from '@/mastodon/components/follow_button'; -import { IconButton } from '@/mastodon/components/icon_button'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { getAccountHidden } from '@/mastodon/selectors/accounts'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; @@ -16,6 +13,10 @@ import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react import NotificationsActiveIcon from '@/material-icons/400-24px/notifications_active-fill.svg?react'; import ShareIcon from '@/material-icons/400-24px/share.svg?react'; +import { CopyIconButton } from '../copy_icon_button'; +import { FollowButton } from '../follow_button'; +import { IconButton } from '../icon_button'; + import { AccountMenu } from './menu'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/features/account_timeline/components/fields.tsx b/app/javascript/mastodon/components/account_header/fields.tsx similarity index 93% rename from app/javascript/mastodon/features/account_timeline/components/fields.tsx rename to app/javascript/mastodon/components/account_header/fields.tsx index 38e93b100f..ce2fe9d322 100644 --- a/app/javascript/mastodon/features/account_timeline/components/fields.tsx +++ b/app/javascript/mastodon/components/account_header/fields.tsx @@ -7,21 +7,21 @@ import classNames from 'classnames'; import IconVerified from '@/images/icons/icon_verified.svg?react'; import { openModal } from '@/mastodon/actions/modal'; -import { CustomEmojiProvider } from '@/mastodon/components/emoji/context'; -import type { EmojiHTMLProps } from '@/mastodon/components/emoji/html'; -import { EmojiHTML } from '@/mastodon/components/emoji/html'; -import { Icon } from '@/mastodon/components/icon'; -import { IconButton } from '@/mastodon/components/icon_button'; -import { MiniCard } from '@/mastodon/components/mini_card'; -import { useElementHandledLink } from '@/mastodon/components/status/handled_link'; +import { useFieldHtml } from '@/mastodon/features/account_timeline/hooks/useFieldHtml'; +import { cleanExtraEmojis } from '@/mastodon/features/emoji/normalize'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useResizeObserver } from '@/mastodon/hooks/useObserver'; +import type { AccountFieldShape } from '@/mastodon/models/account'; import { useAppDispatch } from '@/mastodon/store'; import MoreIcon from '@/material-icons/400-24px/more_horiz.svg?react'; -import { cleanExtraEmojis } from '../../emoji/normalize'; -import type { AccountField } from '../common'; -import { useFieldHtml } from '../hooks/useFieldHtml'; +import { CustomEmojiProvider } from '../emoji/context'; +import type { EmojiHTMLProps } from '../emoji/html'; +import { EmojiHTML } from '../emoji/html'; +import { Icon } from '../icon'; +import { IconButton } from '../icon_button'; +import { MiniCard } from '../mini_card'; +import { useElementHandledLink } from '../status/handled_link'; import classes from './styles.module.scss'; @@ -37,6 +37,12 @@ const dateFormatOptions: Intl.DateTimeFormatOptions = { minute: '2-digit', }; +export interface AccountField extends AccountFieldShape { + nameHasEmojis: boolean; + value_plain: string; + valueHasEmojis: boolean; +} + export const AccountHeaderFields: FC<{ accountId: string }> = ({ accountId, }) => { diff --git a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx b/app/javascript/mastodon/components/account_header/index.tsx similarity index 94% rename from app/javascript/mastodon/features/account_timeline/components/account_header.tsx rename to app/javascript/mastodon/components/account_header/index.tsx index 174f862365..9222d0eb32 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx +++ b/app/javascript/mastodon/components/account_header/index.tsx @@ -4,9 +4,6 @@ import classNames from 'classnames'; import { Helmet } from 'react-helmet'; import { openModal } from '@/mastodon/actions/modal'; -import { AccountBio } from '@/mastodon/components/account_bio'; -import { Avatar } from '@/mastodon/components/avatar'; -import { AnimateEmojiProvider } from '@/mastodon/components/emoji/context'; import FollowRequestNoteContainer from '@/mastodon/features/account/containers/follow_request_note_container'; import { useLayout } from '@/mastodon/hooks/useLayout'; import { useVisibility } from '@/mastodon/hooks/useVisibility'; @@ -19,17 +16,20 @@ import type { Account } from '@/mastodon/models/account'; import { getAccountHidden } from '@/mastodon/selectors/accounts'; import { useAppSelector, useAppDispatch } from '@/mastodon/store'; -import { FamiliarFollowers } from '../../../components/familiar_followers'; +import { AccountBio } from '../account_bio'; +import { Avatar } from '../avatar'; +import { AnimateEmojiProvider } from '../emoji/context'; +import { FamiliarFollowers } from '../familiar_followers'; -import { AccountName } from './account_name'; -import { AccountSubscriptionForm } from './account_subscription_form'; import { AccountButtons } from './buttons'; import { AccountHeaderFields } from './fields'; import { MemorialNote } from './memorial_note'; import { MovedNote } from './moved_note'; +import { AccountName } from './name'; import { AccountNote } from './note'; import { AccountNumberFields } from './number_fields'; import classes from './styles.module.scss'; +import { AccountSubscriptionForm } from './subscription_form'; import { AccountTabs } from './tabs'; const titleFromAccount = (account: Account) => { diff --git a/app/javascript/mastodon/features/account_timeline/components/memorial_note.tsx b/app/javascript/mastodon/components/account_header/memorial_note.tsx similarity index 100% rename from app/javascript/mastodon/features/account_timeline/components/memorial_note.tsx rename to app/javascript/mastodon/components/account_header/memorial_note.tsx diff --git a/app/javascript/mastodon/features/account_timeline/components/menu.tsx b/app/javascript/mastodon/components/account_header/menu.tsx similarity index 99% rename from app/javascript/mastodon/features/account_timeline/components/menu.tsx rename to app/javascript/mastodon/components/account_header/menu.tsx index 366115ee29..936609e91f 100644 --- a/app/javascript/mastodon/features/account_timeline/components/menu.tsx +++ b/app/javascript/mastodon/components/account_header/menu.tsx @@ -21,7 +21,6 @@ import { import { openModal } from '@/mastodon/actions/modal'; import { initMuteModal } from '@/mastodon/actions/mutes'; import { initReport } from '@/mastodon/actions/reports'; -import { Dropdown } from '@/mastodon/components/dropdown_menu'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useIdentity } from '@/mastodon/identity_context'; import type { Account } from '@/mastodon/models/account'; @@ -40,6 +39,8 @@ import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react' import ReportIcon from '@/material-icons/400-24px/report.svg?react'; import ShareIcon from '@/material-icons/400-24px/share.svg?react'; +import { Dropdown } from '../dropdown_menu'; + import classes from './styles.module.scss'; export const AccountMenu: FC<{ accountId: string }> = ({ accountId }) => { diff --git a/app/javascript/mastodon/features/account_timeline/components/moved_note.tsx b/app/javascript/mastodon/components/account_header/moved_note.tsx similarity index 87% rename from app/javascript/mastodon/features/account_timeline/components/moved_note.tsx rename to app/javascript/mastodon/components/account_header/moved_note.tsx index f2457dedd7..153c206bbc 100644 --- a/app/javascript/mastodon/features/account_timeline/components/moved_note.tsx +++ b/app/javascript/mastodon/components/account_header/moved_note.tsx @@ -2,9 +2,10 @@ import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; -import { DisplayName } from '@/mastodon/components/display_name'; -import { AvatarOverlay } from 'mastodon/components/avatar_overlay'; -import { useAppSelector } from 'mastodon/store'; +import { useAppSelector } from '@/mastodon/store'; + +import { AvatarOverlay } from '../avatar_overlay'; +import { DisplayName } from '../display_name'; export const MovedNote: React.FC<{ accountId: string; diff --git a/app/javascript/mastodon/features/account_timeline/components/account_name.tsx b/app/javascript/mastodon/components/account_header/name.tsx similarity index 89% rename from app/javascript/mastodon/features/account_timeline/components/account_name.tsx rename to app/javascript/mastodon/components/account_header/name.tsx index a1d646ac8b..2b3f1907b4 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_name.tsx +++ b/app/javascript/mastodon/components/account_header/name.tsx @@ -7,12 +7,7 @@ import classNames from 'classnames'; import Overlay from 'react-overlays/esm/Overlay'; -import FollowerIcon from '@/images/icons/icon_follower.svg?react'; import { showAlert } from '@/mastodon/actions/alerts'; -import { Badge } from '@/mastodon/components/badge'; -import { Button } from '@/mastodon/components/button'; -import { DisplayName } from '@/mastodon/components/display_name'; -import { Icon } from '@/mastodon/components/icon'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useRelationship } from '@/mastodon/hooks/useRelationship'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; @@ -21,6 +16,11 @@ import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; import HelpIcon from '@/material-icons/400-24px/help.svg?react'; import DomainIcon from '@/material-icons/400-24px/language.svg?react'; +import { FollowsYouBadge } from '../badge'; +import { Button } from '../button'; +import { DisplayName } from '../display_name'; +import { Icon } from '../icon'; + import { AccountBadges } from './badges'; import classes from './styles.module.scss'; @@ -60,17 +60,7 @@ export const AccountName: FC<{ accountId: string }> = ({ accountId }) => { - {relationship?.followed_by && ( - } - label={ - - } - /> - )} + {relationship?.followed_by && } {handle} - diff --git a/app/javascript/mastodon/features/account_timeline/components/note.tsx b/app/javascript/mastodon/components/account_header/note.tsx similarity index 93% rename from app/javascript/mastodon/features/account_timeline/components/note.tsx rename to app/javascript/mastodon/components/account_header/note.tsx index 6bd727791a..d58c37aec9 100644 --- a/app/javascript/mastodon/features/account_timeline/components/note.tsx +++ b/app/javascript/mastodon/components/account_header/note.tsx @@ -5,11 +5,12 @@ import { defineMessages, useIntl } from 'react-intl'; import { fetchRelationships } from '@/mastodon/actions/accounts'; import { openModal } from '@/mastodon/actions/modal'; -import { Callout } from '@/mastodon/components/callout'; -import { IconButton } from '@/mastodon/components/icon_button'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; import EditIcon from '@/material-icons/400-24px/edit_square.svg?react'; +import { Callout } from '../callout'; +import { IconButton } from '../icon_button'; + import classes from './styles.module.scss'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/features/account_timeline/components/number_fields.tsx b/app/javascript/mastodon/components/account_header/number_fields.tsx similarity index 91% rename from app/javascript/mastodon/features/account_timeline/components/number_fields.tsx rename to app/javascript/mastodon/components/account_header/number_fields.tsx index fb6301952f..50f7f67aab 100644 --- a/app/javascript/mastodon/features/account_timeline/components/number_fields.tsx +++ b/app/javascript/mastodon/components/account_header/number_fields.tsx @@ -4,15 +4,13 @@ import type { FC } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import { openModal } from '@/mastodon/actions/modal'; -import { FormattedDateWrapper } from '@/mastodon/components/formatted_date'; -import { - NumberFields, - NumberFieldsItem, -} from '@/mastodon/components/number_fields'; -import { ShortNumber } from '@/mastodon/components/short_number'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAppDispatch } from '@/mastodon/store'; +import { FormattedDateWrapper } from '../formatted_date'; +import { NumberFields, NumberFieldsItem } from '../number_fields'; +import { ShortNumber } from '../short_number'; + export const AccountNumberFields: FC<{ accountId: string }> = ({ accountId, }) => { diff --git a/app/javascript/mastodon/features/account_timeline/components/styles.module.scss b/app/javascript/mastodon/components/account_header/styles.module.scss similarity index 89% rename from app/javascript/mastodon/features/account_timeline/components/styles.module.scss rename to app/javascript/mastodon/components/account_header/styles.module.scss index 9c13026b97..7d87dde147 100644 --- a/app/javascript/mastodon/features/account_timeline/components/styles.module.scss +++ b/app/javascript/mastodon/components/account_header/styles.module.scss @@ -37,10 +37,6 @@ } } -.followerBadgeIcon { - color: var(--color-text-secondary); -} - .badges { margin-top: 8px; } @@ -50,13 +46,14 @@ gap: 2px; padding: 0; margin-top: 4px; - align-items: center; appearance: none; background: none; border: none; color: var(--color-text-secondary); font-size: 13px; transition: color 0.2s ease-in-out; + word-break: break-all; + text-align: left; > svg { width: 16px; @@ -203,6 +200,9 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; .noteContent { white-space-collapse: preserve-breaks; + overflow-wrap: break-word; + word-break: break-all; + hyphens: auto; } .noteEditButton { @@ -275,10 +275,7 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; &.fieldItem { border-color: var(--color-border-success-soft); - } - - dt { - padding-right: 24px; + padding-right: 32px; // 8px padding + 16px for the icon + 8px gap } } @@ -355,48 +352,10 @@ $button-fallback-breakpoint: $button-breakpoint + 55px; } } -.tabs, -.noTabs { - border-bottom: 1px solid var(--color-border-primary); -} - -.tabs { - display: flex; - gap: 16px; - padding: 0 16px; - - @container (width < 500px) { - a { - flex: 1 1 0px; - text-align: center; - } - } - - a { - display: block; - font-size: 15px; - font-weight: 500; - padding: 18px 0; - text-decoration: none; - color: var(--color-text-primary); - border-radius: 0; - transition: color 0.2s ease-in-out; - - &:not([aria-current='page']):is(:hover, :focus) { - color: var(--color-text-brand-soft); - } - } - - :global(.active) { - color: var(--color-text-brand); - border-bottom: 4px solid var(--color-border-brand); - padding-bottom: 14px; - } -} - .noTabs { width: 100%; border-width: 0 0 1px; + border-bottom: 1px solid var(--color-border-primary); } .bannerBase { diff --git a/app/javascript/mastodon/features/account_timeline/components/account_subscription_form.tsx b/app/javascript/mastodon/components/account_header/subscription_form.tsx similarity index 92% rename from app/javascript/mastodon/features/account_timeline/components/account_subscription_form.tsx rename to app/javascript/mastodon/components/account_header/subscription_form.tsx index e3fc8146e6..f78077bef7 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_subscription_form.tsx +++ b/app/javascript/mastodon/components/account_header/subscription_form.tsx @@ -8,16 +8,17 @@ import { Link } from 'react-router-dom'; import { AxiosError } from 'axios'; -import { apiSubscribeByEmail } from 'mastodon/api/accounts'; +import { apiSubscribeByEmail } from '@/mastodon/api/accounts'; import type { ValidationErrorResponse, ValidationError, -} from 'mastodon/api_types/errors'; -import { Button } from 'mastodon/components/button'; -import { DisplayName } from 'mastodon/components/display_name'; -import type { FieldStatus } from 'mastodon/components/form_fields'; -import { TextInputField } from 'mastodon/components/form_fields/text_input_field'; -import { useAppSelector } from 'mastodon/store'; +} from '@/mastodon/api_types/errors'; +import { useAppSelector } from '@/mastodon/store'; + +import { Button } from '../button'; +import { DisplayName } from '../display_name'; +import type { FieldStatus } from '../form_fields'; +import { TextInputField } from '../form_fields/text_input_field'; import classes from './styles.module.scss'; diff --git a/app/javascript/mastodon/features/account_timeline/components/tabs.tsx b/app/javascript/mastodon/components/account_header/tabs.tsx similarity index 79% rename from app/javascript/mastodon/features/account_timeline/components/tabs.tsx rename to app/javascript/mastodon/components/account_header/tabs.tsx index b2970412df..f2f4ebbe27 100644 --- a/app/javascript/mastodon/features/account_timeline/components/tabs.tsx +++ b/app/javascript/mastodon/components/account_header/tabs.tsx @@ -3,11 +3,12 @@ import type { FC } from 'react'; import { FormattedMessage } from 'react-intl'; import type { NavLinkProps } from 'react-router-dom'; -import { NavLink } from 'react-router-dom'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAccountId } from '@/mastodon/hooks/useAccountId'; +import { TabLink, TabList } from '../tab_list'; + import classes from './styles.module.scss'; const isActive: Required['isActive'] = (match, location) => @@ -28,20 +29,20 @@ export const AccountTabs: FC = () => { } return ( - - + + - + {show_media && ( - + - + )} {show_featured && ( - + - + )} - + ); }; diff --git a/app/javascript/mastodon/components/account_list_item/account_list_item.stories.tsx b/app/javascript/mastodon/components/account_list_item/account_list_item.stories.tsx index bad1667b12..62875b02f6 100644 --- a/app/javascript/mastodon/components/account_list_item/account_list_item.stories.tsx +++ b/app/javascript/mastodon/components/account_list_item/account_list_item.stories.tsx @@ -1,6 +1,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite'; -import { accountFactoryState } from '@/testing/factories'; +import { accountFactoryState, relationshipsFactory } from '@/testing/factories'; + +import { PendingBadge } from '../badge'; import { AccountListItem } from './index'; @@ -26,12 +28,30 @@ type Story = StoryObj; export const Default: Story = {}; +export const FollowsYou: Story = { + parameters: { + state: { + relationships: { + '1': relationshipsFactory({ + followed_by: true, + }), + }, + }, + }, +}; + export const WithCustomStats: Story = { args: { stats: ['posts', 'last-active'], }, }; +export const WithCustomBadge: Story = { + args: { + badge: , + }, +}; + export const WithBorder: Story = { args: { withBorder: true, diff --git a/app/javascript/mastodon/components/account_list_item/index.tsx b/app/javascript/mastodon/components/account_list_item/index.tsx index 34ae8b0daf..04817cb33e 100644 --- a/app/javascript/mastodon/components/account_list_item/index.tsx +++ b/app/javascript/mastodon/components/account_list_item/index.tsx @@ -1,18 +1,23 @@ +import type { ReactNode } from 'react'; import { useMemo } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import classNames from 'classnames'; -import { Account } from 'mastodon/components/account'; -import { VerifiedBadge } from 'mastodon/components/badge'; +import { FollowsYouBadge, VerifiedBadge } from 'mastodon/components/badge'; import { useAccount } from 'mastodon/hooks/useAccount'; import { useRelationship } from 'mastodon/hooks/useRelationship'; +import { domain } from 'mastodon/initial_state'; import type { Relationship } from 'mastodon/models/relationship'; +import { Avatar } from '../avatar'; +import { useAccountHandle } from '../display_name/default'; +import { DisplayNameSimple } from '../display_name/simple'; import { EmojiHTML } from '../emoji/html'; import { FollowButton } from '../follow_button'; import { FormattedDateWrapper } from '../formatted_date'; +import { ListItemLink, ListItemWrapper } from '../list_item'; import { NumberFields, NumberFieldsItem } from '../number_fields'; import { RelativeTimestamp } from '../relative_timestamp'; import { ShortNumber } from '../short_number'; @@ -29,9 +34,10 @@ type Stat = 'followers' | 'following' | 'posts' | 'joined' | 'last-active'; interface Props { accountId: string | undefined; stats?: Stat[]; - renderButton?: (options: RenderButtonOptions) => React.ReactNode; withBio?: boolean; withBorder?: boolean; + badge?: ReactNode; + renderButton?: (options: RenderButtonOptions) => React.ReactNode; } const DEFAULT_STATS: Stat[] = ['followers', 'posts', 'last-active']; @@ -48,10 +54,12 @@ export const AccountListItem: React.FC = ({ stats = DEFAULT_STATS, withBio = true, withBorder = true, + badge: badgeProp, renderButton = defaultRenderButton, }) => { const intl = useIntl(); const account = useAccount(accountId); + const handle = useAccountHandle(account, domain); const relationship = useRelationship(accountId); const createdThisYear = useMemo( @@ -63,22 +71,34 @@ export const AccountListItem: React.FC = ({ return null; } + const badge = + badgeProp ?? (relationship?.followed_by ? : null); + const firstVerifiedField = account.fields.find((item) => !!item.verified_at); return ( - - - - {renderButton({ accountId, relationship })} - + } + sideContent={ + + {renderButton({ accountId, relationship })} + + } + > + + + {badge && {badge}} + + {stats.includes('followers') && ( diff --git a/app/javascript/mastodon/components/account_list_item/styles.module.scss b/app/javascript/mastodon/components/account_list_item/styles.module.scss index 61d0169bf3..69949508c5 100644 --- a/app/javascript/mastodon/components/account_list_item/styles.module.scss +++ b/app/javascript/mastodon/components/account_list_item/styles.module.scss @@ -10,22 +10,22 @@ } } -.header { - display: flex; - align-items: start; - width: 100%; +.main { + --list-item-padding: 0; } -.account { - --account-name-size: 15px; - --account-handle-color: var(--color-text-secondary); - --account-handle-size: 13px; - --account-bio-color: var(--color-text-primary); - --account-bio-size: 13px; - --account-outer-spacing: 0; +.displayName { + // Spacing for badge + margin-inline-end: 6px; +} - flex-grow: 1; - margin-inline-end: 16px; +.badge { + // Sort out vertical alignment next to name + vertical-align: -4px; +} + +.button { + align-self: start; } .verifiedBadge { diff --git a/app/javascript/mastodon/components/badge/index.tsx b/app/javascript/mastodon/components/badge/index.tsx index 1cc4b531c7..56a6788c3e 100644 --- a/app/javascript/mastodon/components/badge/index.tsx +++ b/app/javascript/mastodon/components/badge/index.tsx @@ -5,6 +5,8 @@ import { FormattedMessage, useIntl } from 'react-intl'; import classNames from 'classnames'; import AdminIcon from '@/images/icons/icon_admin.svg?react'; +import ClockIcon from '@/images/icons/icon_clock.svg?react'; +import FollowerIcon from '@/images/icons/icon_follower.svg?react'; import IconVerified from '@/images/icons/icon_verified.svg?react'; import type { OnAttributeHandler } from '@/mastodon/utils/html'; import BlockIcon from '@/material-icons/400-24px/block.svg?react'; @@ -32,6 +34,11 @@ interface BadgeProps extends React.ComponentPropsWithoutRef<'div'> { | 'danger'; } +type PresetBadgeProps = Omit< + BadgeProps, + 'label' | 'icon' | 'domain' | 'roleId' +>; + export const Badge: FC = ({ icon = , variant = 'default', @@ -83,13 +90,32 @@ export const GroupBadge: FC> = ({ label, ...props }) => ( /> ); -export const AutomatedBadge: FC<{ className?: string }> = ({ className }) => ( +export const AutomatedBadge: FC = (props) => ( } label={ } - className={className} + {...props} + /> +); + +export const FollowsYouBadge: FC = (props) => ( + } + label={ + + } + {...props} + /> +); + +export const PendingBadge: FC = (props) => ( + } + label={} + {...props} /> ); diff --git a/app/javascript/mastodon/components/badge/styles.module.scss b/app/javascript/mastodon/components/badge/styles.module.scss index d359bc38eb..b216e3eb20 100644 --- a/app/javascript/mastodon/components/badge/styles.module.scss +++ b/app/javascript/mastodon/components/badge/styles.module.scss @@ -1,6 +1,7 @@ .badge { color: var(--color-text-primary); font-size: 13px; + font-weight: 400; display: inline-flex; max-width: 100%; padding: 4px; @@ -61,7 +62,6 @@ .warning { background-color: var(--color-bg-warning-softest); - color: var(--color-text-warning); } .danger { diff --git a/app/javascript/mastodon/components/callout/styles.module.css b/app/javascript/mastodon/components/callout/styles.module.css index 95ca5e0b94..f7fbce491b 100644 --- a/app/javascript/mastodon/components/callout/styles.module.css +++ b/app/javascript/mastodon/components/callout/styles.module.css @@ -87,7 +87,7 @@ } .variantSubtle { - border: 1px solid var(--color-bg-brand-softest); + border: 1px solid var(--color-border-brand-soft); background-color: var(--color-bg-primary); .icon { diff --git a/app/javascript/mastodon/components/column_header.tsx b/app/javascript/mastodon/components/column_header.tsx index b8ab2bbe54..076ca3085e 100644 --- a/app/javascript/mastodon/components/column_header.tsx +++ b/app/javascript/mastodon/components/column_header.tsx @@ -276,9 +276,11 @@ export const ColumnHeader: React.FC = ({ > ); + const HeadingElement = hasTitle ? 'h1' : 'div'; + const component = ( - + {hasTitle && ( <> {backButton} @@ -311,7 +313,7 @@ export const ColumnHeader: React.FC = ({ {extraButton} {collapseButton} - + = ({ image = 'default', title = ( @@ -26,11 +29,12 @@ export const EmptyState: React.FC<{ ), message, children, + className, }) => { const imageToRender = typeof image === 'string' ? images[image] : image; return ( - + {(title || message || imageToRender) && ( {imageToRender} diff --git a/app/javascript/mastodon/components/form_fields/text_input.module.scss b/app/javascript/mastodon/components/form_fields/text_input.module.scss index 105b956cc5..cbb45e0a3a 100644 --- a/app/javascript/mastodon/components/form_fields/text_input.module.scss +++ b/app/javascript/mastodon/components/form_fields/text_input.module.scss @@ -1,7 +1,6 @@ .input { box-sizing: border-box; display: block; - resize: vertical; width: 100%; padding: 10px 16px; font-family: inherit; @@ -50,6 +49,10 @@ } } +textarea.input { + resize: vertical; +} + .iconWrapper { position: relative; } diff --git a/app/javascript/mastodon/features/account_timeline/components/limited_account_hint.tsx b/app/javascript/mastodon/components/limited_account_hint.tsx similarity index 78% rename from app/javascript/mastodon/features/account_timeline/components/limited_account_hint.tsx rename to app/javascript/mastodon/components/limited_account_hint.tsx index f06bf574a7..b780e802e5 100644 --- a/app/javascript/mastodon/features/account_timeline/components/limited_account_hint.tsx +++ b/app/javascript/mastodon/components/limited_account_hint.tsx @@ -2,10 +2,11 @@ import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; -import { revealAccount } from 'mastodon/actions/accounts_typed'; -import { Button } from 'mastodon/components/button'; -import { domain } from 'mastodon/initial_state'; -import { useAppDispatch } from 'mastodon/store'; +import { revealAccount } from '@/mastodon/actions/accounts_typed'; +import { domain } from '@/mastodon/initial_state'; +import { useAppDispatch } from '@/mastodon/store'; + +import { Button } from './button'; export const LimitedAccountHint: React.FC<{ accountId: string }> = ({ accountId, diff --git a/app/javascript/mastodon/components/modal_shell/index.tsx b/app/javascript/mastodon/components/modal_shell/index.tsx index 8b06087532..df8be5ef1f 100644 --- a/app/javascript/mastodon/components/modal_shell/index.tsx +++ b/app/javascript/mastodon/components/modal_shell/index.tsx @@ -1,16 +1,17 @@ import classNames from 'classnames'; +import { polymorphicForwardRef } from '@/types/polymorphic'; + interface ModalShellProps { className?: string; children?: React.ReactNode; } -export const ModalShell: React.FC = ({ - children, - className, -}) => { - return ( - ( + ({ as: Comp = 'form', children, className, ...restProps }, ref) => ( + = ({ )} > {children} - - ); -}; + + ), +); +ModalShell.displayName = 'ModalShell'; export const ModalShellBody: React.FC = ({ children, diff --git a/app/javascript/mastodon/components/scrollable_list/components.tsx b/app/javascript/mastodon/components/scrollable_list/components.tsx index 9e90ce807e..5582c8e5b3 100644 --- a/app/javascript/mastodon/components/scrollable_list/components.tsx +++ b/app/javascript/mastodon/components/scrollable_list/components.tsx @@ -1,8 +1,10 @@ import type { ComponentPropsWithoutRef } from 'react'; -import { Children, forwardRef } from 'react'; +import { forwardRef } from 'react'; import classNames from 'classnames'; +import { hasReactChildren } from '@/mastodon/utils/has_react_children'; + import { LoadingIndicator } from '../loading_indicator'; export const Scrollable = forwardRef< @@ -36,7 +38,7 @@ export const ItemList = forwardRef< emptyMessage?: React.ReactNode; } >(({ isLoading, emptyMessage, className, children, ...otherProps }, ref) => { - if (!isLoading && Children.count(children) === 0 && emptyMessage) { + if (!isLoading && !hasReactChildren(children) && emptyMessage) { return ( {emptyMessage} diff --git a/app/javascript/mastodon/components/status_list.jsx b/app/javascript/mastodon/components/status_list.jsx index 817a9e9ce4..5e2c960ed1 100644 --- a/app/javascript/mastodon/components/status_list.jsx +++ b/app/javascript/mastodon/components/status_list.jsx @@ -8,7 +8,7 @@ import { debounce } from 'lodash'; import { TIMELINE_GAP, TIMELINE_PINNED_VIEW_ALL, TIMELINE_SUGGESTIONS } from 'mastodon/actions/timelines'; import { RegenerationIndicator } from 'mastodon/components/regeneration_indicator'; import { InlineFollowSuggestions } from 'mastodon/features/home_timeline/components/inline_follow_suggestions'; -import { PinnedShowAllButton } from '@/mastodon/features/account_timeline/v2/pinned_statuses'; +import { PinnedShowAllButton } from '@/mastodon/features/account_timeline/components/pinned_statuses'; import { StatusQuoteManager } from '../components/status_quoted'; diff --git a/app/javascript/mastodon/components/tab_list/index.tsx b/app/javascript/mastodon/components/tab_list/index.tsx new file mode 100644 index 0000000000..98651ff4d0 --- /dev/null +++ b/app/javascript/mastodon/components/tab_list/index.tsx @@ -0,0 +1,51 @@ +import type { ComponentPropsWithoutRef, FC } from 'react'; + +import classNames from 'classnames'; +import type { NavLinkProps } from 'react-router-dom'; +import { NavLink } from 'react-router-dom'; + +import classes from './styles.module.scss'; + +interface TabListProps { + /** + * Setting this will remove the default border and + * horizontal padding from the component + */ + plain?: boolean; +} + +/** + * Display a simple row of links as tabs. + * The current page will be highlighted automatically based on the link destination. + */ +export const TabList: FC> = ({ + plain, + className, + children, + ...otherProps +}) => { + return ( + + {children} + + ); +}; + +export const TabLink: FC = ({ + className, + children, + ...otherProps +}) => { + return ( + + {children} + + ); +}; diff --git a/app/javascript/mastodon/components/tab_list/styles.module.scss b/app/javascript/mastodon/components/tab_list/styles.module.scss new file mode 100644 index 0000000000..95a71114fd --- /dev/null +++ b/app/javascript/mastodon/components/tab_list/styles.module.scss @@ -0,0 +1,45 @@ +.tabList { + display: flex; + gap: 16px; +} + +.withSpaceAndBorder { + padding-inline: 16px; + border-bottom: 1px solid var(--color-border-primary); +} + +.tab { + display: block; + padding: 18px 0; + color: var(--color-text-primary); + font-size: 15px; + font-weight: 500; + text-decoration: none; + border-radius: 0; + transition: color 0.2s ease-in-out; + + @container (width < 500px) { + flex: 1 1 0px; + text-align: center; + } + + &:hover { + text-decoration: none; + } + + &:focus { + // Override silly global border radius on focused links + border-radius: 0; + outline-offset: 2px; + } + + &:not(:global(.active)):is(:hover, :focus) { + color: var(--color-text-brand-soft); + } + + &:global(.active) { + color: var(--color-text-brand); + border-bottom: 4px solid var(--color-border-brand); + padding-bottom: 14px; + } +} diff --git a/app/javascript/mastodon/components/tab_list/tab_list.stories.tsx b/app/javascript/mastodon/components/tab_list/tab_list.stories.tsx new file mode 100644 index 0000000000..56edb1b324 --- /dev/null +++ b/app/javascript/mastodon/components/tab_list/tab_list.stories.tsx @@ -0,0 +1,33 @@ +import type { Meta, StoryObj } from '@storybook/react-vite'; + +import { TabList, TabLink } from './index'; + +const meta = { + title: 'Components/TabList', + component: TabList, + subcomponents: { TabLink }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + render: () => ( + + Activity + Media + Featured + + ), +}; + +export const Plain: Story = { + render: () => ( + + Activity + Media + Featured + + ), +}; diff --git a/app/javascript/mastodon/containers/compose_container.jsx b/app/javascript/mastodon/containers/compose_container.jsx index 3e6d20c74c..33fc3a79a3 100644 --- a/app/javascript/mastodon/containers/compose_container.jsx +++ b/app/javascript/mastodon/containers/compose_container.jsx @@ -1,6 +1,5 @@ import { Provider } from 'react-redux'; -import { fetchCustomEmojis } from 'mastodon/actions/custom_emojis'; import { fetchServer } from 'mastodon/actions/server'; import { hydrateStore } from 'mastodon/actions/store'; import { Router } from 'mastodon/components/router'; @@ -13,7 +12,6 @@ if (initialState) { store.dispatch(hydrateStore(initialState)); } -store.dispatch(fetchCustomEmojis()); store.dispatch(fetchServer()); const ComposeContainer = () => ( diff --git a/app/javascript/mastodon/containers/mastodon.jsx b/app/javascript/mastodon/containers/mastodon.jsx index ee861366a5..f697c5a8b0 100644 --- a/app/javascript/mastodon/containers/mastodon.jsx +++ b/app/javascript/mastodon/containers/mastodon.jsx @@ -5,8 +5,6 @@ import { Route } from 'react-router-dom'; import { Provider as ReduxProvider } from 'react-redux'; - -import { fetchCustomEmojis } from 'mastodon/actions/custom_emojis'; import { hydrateStore } from 'mastodon/actions/store'; import { connectUserStream } from 'mastodon/actions/streaming'; import ErrorBoundary from 'mastodon/components/error_boundary'; @@ -26,9 +24,6 @@ const title = isProduction() ? siteTitle : `${siteTitle} (Dev)`; const hydrateAction = hydrateStore(initialState); store.dispatch(hydrateAction); -if (initialState.meta.me) { - store.dispatch(fetchCustomEmojis()); -} export default class Mastodon extends PureComponent { identity = createIdentityContext(initialState); diff --git a/app/javascript/mastodon/features/account_edit/index.tsx b/app/javascript/mastodon/features/account_edit/index.tsx index d3a3c96707..0199c3efa4 100644 --- a/app/javascript/mastodon/features/account_edit/index.tsx +++ b/app/javascript/mastodon/features/account_edit/index.tsx @@ -107,11 +107,11 @@ export const messages = defineMessages({ }, profileTabTitle: { id: 'account_edit.profile_tab.title', - defaultMessage: 'Profile tab settings', + defaultMessage: 'Profile display settings', }, profileTabSubtitle: { id: 'account_edit.profile_tab.subtitle', - defaultMessage: 'Customize the tabs on your profile and what they display.', + defaultMessage: 'Customize how your profile is displayed.', }, advancedSettingsTitle: { id: 'account_edit.advanced_settings.title', diff --git a/app/javascript/mastodon/features/account_edit/modals/profile_display_modal.tsx b/app/javascript/mastodon/features/account_edit/modals/profile_display_modal.tsx index dc2d961c69..d832fe00e3 100644 --- a/app/javascript/mastodon/features/account_edit/modals/profile_display_modal.tsx +++ b/app/javascript/mastodon/features/account_edit/modals/profile_display_modal.tsx @@ -27,7 +27,8 @@ export const ProfileDisplayModal: FC = ({ onClose }) => { const handleToggleChange: ChangeEventHandler = useCallback( (event) => { const { name, checked } = event.target; - void dispatch(patchProfile({ [name]: checked })); + const targetChecked = name === 'hide_collections' ? !checked : checked; + void dispatch(patchProfile({ [name]: targetChecked })); }, [dispatch], ); @@ -101,6 +102,25 @@ export const ProfileDisplayModal: FC = ({ onClose }) => { /> } /> + + + } + hint={ + + } + /> = ({ ) as ImmutableList, ); const { collections, status: collectionsLoadStatus } = - useAccountCollections(accountId); + useCollectionsCreatedBy(accountId); const { listedCollections = [], unlistedCollections = [] } = Object.groupBy( collections, diff --git a/app/javascript/mastodon/features/account_gallery/index.tsx b/app/javascript/mastodon/features/account_gallery/index.tsx index 069f1242f7..feba6f454d 100644 --- a/app/javascript/mastodon/features/account_gallery/index.tsx +++ b/app/javascript/mastodon/features/account_gallery/index.tsx @@ -4,23 +4,23 @@ import { FormattedMessage } from 'react-intl'; import { List as ImmutableList, isList } from 'immutable'; -import { openModal } from 'mastodon/actions/modal'; -import { expandAccountMediaTimeline } from 'mastodon/actions/timelines'; -import { ColumnBackButton } from 'mastodon/components/column_back_button'; -import { RemoteHint } from 'mastodon/components/remote_hint'; -import ScrollableList from 'mastodon/components/scrollable_list'; -import { AccountHeader } from 'mastodon/features/account_timeline/components/account_header'; -import { LimitedAccountHint } from 'mastodon/features/account_timeline/components/limited_account_hint'; -import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; -import Column from 'mastodon/features/ui/components/column'; -import { useAccountId } from 'mastodon/hooks/useAccountId'; -import { useAccountVisibility } from 'mastodon/hooks/useAccountVisibility'; -import type { MediaAttachment } from 'mastodon/models/media_attachment'; +import { openModal } from '@/mastodon/actions/modal'; +import { expandAccountMediaTimeline } from '@/mastodon/actions/timelines'; +import { AccountHeader } from '@/mastodon/components/account_header'; +import { ColumnBackButton } from '@/mastodon/components/column_back_button'; +import { LimitedAccountHint } from '@/mastodon/components/limited_account_hint'; +import { RemoteHint } from '@/mastodon/components/remote_hint'; +import ScrollableList from '@/mastodon/components/scrollable_list'; +import BundleColumnError from '@/mastodon/features/ui/components/bundle_column_error'; +import Column from '@/mastodon/features/ui/components/column'; +import { useAccountId } from '@/mastodon/hooks/useAccountId'; +import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility'; +import type { MediaAttachment } from '@/mastodon/models/media_attachment'; import { useAppSelector, useAppDispatch, createAppSelector, -} from 'mastodon/store'; +} from '@/mastodon/store'; import { MediaItem } from './components/media_item'; diff --git a/app/javascript/mastodon/features/account_timeline/common.ts b/app/javascript/mastodon/features/account_timeline/common.ts deleted file mode 100644 index b036530e14..0000000000 --- a/app/javascript/mastodon/features/account_timeline/common.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { AccountFieldShape } from '@/mastodon/models/account'; - -export interface AccountField extends AccountFieldShape { - nameHasEmojis: boolean; - value_plain: string; - valueHasEmojis: boolean; -} diff --git a/app/javascript/mastodon/features/account_timeline/v2/featured_tags.tsx b/app/javascript/mastodon/features/account_timeline/components/featured_tags.tsx similarity index 96% rename from app/javascript/mastodon/features/account_timeline/v2/featured_tags.tsx rename to app/javascript/mastodon/features/account_timeline/components/featured_tags.tsx index b8061fced4..c4d43bb2b9 100644 --- a/app/javascript/mastodon/features/account_timeline/v2/featured_tags.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/featured_tags.tsx @@ -13,8 +13,8 @@ import { useOverflowButton } from '@/mastodon/hooks/useOverflow'; import { selectAccountFeaturedTags } from '@/mastodon/selectors/accounts'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; -import { useAccountContext } from './context'; -import classes from './styles.module.scss'; +import { useAccountContext } from '../hooks/useAccountContext'; +import classes from '../styles.module.scss'; export const FeaturedTags: FC<{ accountId: string }> = ({ accountId }) => { // Fetch tags. diff --git a/app/javascript/mastodon/features/account_timeline/v2/filters.tsx b/app/javascript/mastodon/features/account_timeline/components/filters.tsx similarity index 95% rename from app/javascript/mastodon/features/account_timeline/v2/filters.tsx rename to app/javascript/mastodon/features/account_timeline/components/filters.tsx index 2dc8254a20..e24ca64209 100644 --- a/app/javascript/mastodon/features/account_timeline/v2/filters.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/filters.tsx @@ -7,14 +7,13 @@ import { useParams } from 'react-router'; import Overlay from 'react-overlays/esm/Overlay'; +import { AccountTabs } from '@/mastodon/components/account_header/tabs'; import { Toggle } from '@/mastodon/components/form_fields'; import { Icon } from '@/mastodon/components/icon'; import KeyboardArrowDownIcon from '@/material-icons/400-24px/keyboard_arrow_down.svg?react'; -import { AccountTabs } from '../components/tabs'; - -import { useAccountContext } from './context'; -import classes from './styles.module.scss'; +import { useAccountContext } from '../hooks/useAccountContext'; +import classes from '../styles.module.scss'; export const AccountFilters: FC = () => { const { acct } = useParams<{ acct: string }>(); diff --git a/app/javascript/mastodon/features/account_timeline/components/info.tsx b/app/javascript/mastodon/features/account_timeline/components/info.tsx deleted file mode 100644 index bb99999c41..0000000000 --- a/app/javascript/mastodon/features/account_timeline/components/info.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import type { FC } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import type { Relationship } from '@/mastodon/models/relationship'; - -export const AccountInfo: FC<{ relationship?: Relationship }> = ({ - relationship, -}) => { - if (!relationship) { - return null; - } - return ( - - {(relationship.followed_by || relationship.requested_by) && ( - - - - )} - {relationship.blocking && ( - - - - )} - {relationship.muting && ( - - - - )} - {relationship.domain_blocking && ( - - - - )} - - ); -}; - -const AccountInfoFollower: FC<{ relationship: Relationship }> = ({ - relationship, -}) => { - if ( - relationship.followed_by && - (relationship.following || relationship.requested) - ) { - return ( - - ); - } else if (relationship.followed_by) { - return ( - - ); - } else if (relationship.requested_by) { - return ( - - ); - } - return null; -}; diff --git a/app/javascript/mastodon/features/account_timeline/components/pinned_statuses.tsx b/app/javascript/mastodon/features/account_timeline/components/pinned_statuses.tsx new file mode 100644 index 0000000000..11de336002 --- /dev/null +++ b/app/javascript/mastodon/features/account_timeline/components/pinned_statuses.tsx @@ -0,0 +1,55 @@ +import type { FC } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import classNames from 'classnames'; + +import IconPinned from '@/images/icons/icon_pinned.svg?react'; +import { Badge } from '@/mastodon/components/badge'; +import { Button } from '@/mastodon/components/button'; +import { Icon } from '@/mastodon/components/icon'; +import { StatusHeader } from '@/mastodon/components/status/header'; +import type { StatusHeaderRenderFn } from '@/mastodon/components/status/header'; + +import { useAccountContext } from '../hooks/useAccountContext'; +import classes from '../styles.module.scss'; + +export const renderPinnedStatusHeader: StatusHeaderRenderFn = ({ + featured, + ...args +}) => { + if (!featured) { + return ; + } + return ( + + } + label={ + + } + /> + + ); +}; + +export const PinnedShowAllButton: FC = () => { + const { onShowAllPinned } = useAccountContext(); + + return ( + + + + + ); +}; diff --git a/app/javascript/mastodon/features/account_timeline/v2/tags_suggestions.tsx b/app/javascript/mastodon/features/account_timeline/components/tags_suggestions.tsx similarity index 98% rename from app/javascript/mastodon/features/account_timeline/v2/tags_suggestions.tsx rename to app/javascript/mastodon/features/account_timeline/components/tags_suggestions.tsx index f3ac52ca3b..555dc6e7c9 100644 --- a/app/javascript/mastodon/features/account_timeline/v2/tags_suggestions.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/tags_suggestions.tsx @@ -20,7 +20,7 @@ import { createAppSelector, } from '@/mastodon/store'; -import classes from './styles.module.scss'; +import classes from '../styles.module.scss'; const MAX_SUGGESTED_TAGS = 3; diff --git a/app/javascript/mastodon/features/account_timeline/v2/context.tsx b/app/javascript/mastodon/features/account_timeline/hooks/useAccountContext.ts similarity index 82% rename from app/javascript/mastodon/features/account_timeline/v2/context.tsx rename to app/javascript/mastodon/features/account_timeline/hooks/useAccountContext.ts index c95eba3733..46595425bd 100644 --- a/app/javascript/mastodon/features/account_timeline/v2/context.tsx +++ b/app/javascript/mastodon/features/account_timeline/hooks/useAccountContext.ts @@ -1,4 +1,3 @@ -import type { FC, ReactNode } from 'react'; import { createContext, useCallback, @@ -10,7 +9,7 @@ import { import { useStorageState } from '@/mastodon/hooks/useStorage'; interface AccountTimelineContextValue { - accountId: string; + accountId: string | null; boosts: boolean; replies: boolean; showAllPinned: boolean; @@ -19,13 +18,20 @@ interface AccountTimelineContextValue { onShowAllPinned: () => void; } -const AccountTimelineContext = +export const AccountTimelineContext = createContext(null); -export const AccountTimelineProvider: FC<{ - accountId: string; - children: ReactNode; -}> = ({ accountId, children }) => { +export function useAccountContext() { + const values = useContext(AccountTimelineContext); + if (!values) { + throw new Error( + 'useAccountFilters must be used within an AccountTimelineProvider', + ); + } + return values; +} + +export const useAccountContextValue = (accountId?: string | null) => { const storageOptions = { type: 'local', prefix: 'account-filters', @@ -62,9 +68,9 @@ export const AccountTimelineProvider: FC<{ }, []); // Memoize the context value to avoid unnecessary re-renders. - const value = useMemo( + return useMemo( () => ({ - accountId, + accountId: accountId ?? null, boosts, replies, showAllPinned, @@ -82,20 +88,4 @@ export const AccountTimelineProvider: FC<{ showAllPinned, ], ); - - return ( - - {children} - - ); }; - -export function useAccountContext() { - const values = useContext(AccountTimelineContext); - if (!values) { - throw new Error( - 'useAccountFilters must be used within an AccountTimelineProvider', - ); - } - return values; -} diff --git a/app/javascript/mastodon/features/account_timeline/hooks/usePinned.ts b/app/javascript/mastodon/features/account_timeline/hooks/usePinned.ts new file mode 100644 index 0000000000..2ff2c16965 --- /dev/null +++ b/app/javascript/mastodon/features/account_timeline/hooks/usePinned.ts @@ -0,0 +1,58 @@ +import { useEffect, useMemo } from 'react'; + +import { TIMELINE_PINNED_VIEW_ALL } from '@/mastodon/actions/timelines'; +import { + expandTimelineByKey, + timelineKey, +} from '@/mastodon/actions/timelines_typed'; +import { selectTimelineByKey } from '@/mastodon/selectors/timelines'; +import { useAppDispatch, useAppSelector } from '@/mastodon/store'; + +import { useAccountContext } from './useAccountContext'; + +export function usePinnedStatusIds({ + accountId, + tagged, + forceEmptyState = false, +}: { + accountId: string; + tagged?: string; + forceEmptyState?: boolean; +}) { + const pinnedKey = timelineKey({ + type: 'account', + userId: accountId, + tagged, + pinned: true, + replies: true, + }); + + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch(expandTimelineByKey({ key: pinnedKey })); + }, [dispatch, pinnedKey]); + + const pinnedTimeline = useAppSelector((state) => + selectTimelineByKey(state, pinnedKey), + ); + + const { showAllPinned } = useAccountContext(); + + const pinnedTimelineItems = pinnedTimeline?.items; // Make a const to avoid the React Compiler complaining. + const pinnedStatusIds = useMemo(() => { + if (!pinnedTimelineItems || forceEmptyState) { + return undefined; + } + + if (pinnedTimelineItems.size <= 1 || showAllPinned) { + return pinnedTimelineItems; + } + return pinnedTimelineItems.slice(0, 1).push(TIMELINE_PINNED_VIEW_ALL); + }, [forceEmptyState, pinnedTimelineItems, showAllPinned]); + + return { + statusIds: pinnedStatusIds, + isLoading: !!pinnedTimeline?.isLoading, + showAllPinned, + }; +} diff --git a/app/javascript/mastodon/features/account_timeline/index.jsx b/app/javascript/mastodon/features/account_timeline/index.jsx deleted file mode 100644 index 70e607d5f2..0000000000 --- a/app/javascript/mastodon/features/account_timeline/index.jsx +++ /dev/null @@ -1,197 +0,0 @@ -import PropTypes from 'prop-types'; - -import { FormattedMessage } from 'react-intl'; - -import { List as ImmutableList } from 'immutable'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; - -import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; -import { me } from 'mastodon/initial_state'; -import { normalizeForLookup } from 'mastodon/reducers/accounts_map'; -import { getAccountHidden } from 'mastodon/selectors/accounts'; - -import { lookupAccount, fetchAccount } from '../../actions/accounts'; -import { expandAccountFeaturedTimeline, expandAccountTimeline, connectTimeline, disconnectTimeline } from '../../actions/timelines'; -import { ColumnBackButton } from '../../components/column_back_button'; -import { LoadingIndicator } from '../../components/loading_indicator'; -import StatusList from '../../components/status_list'; -import Column from '../ui/components/column'; -import { RemoteHint } from 'mastodon/components/remote_hint'; - -import { AccountHeader } from './components/account_header'; -import { LimitedAccountHint } from './components/limited_account_hint'; -import { FeaturedCarousel } from '@/mastodon/components/featured_carousel'; - -const emptyList = ImmutableList(); - -const mapStateToProps = (state, { params: { acct, id, tagged }, withReplies = false }) => { - const accountId = id || state.accounts_map[normalizeForLookup(acct)]; - - if (accountId === null) { - return { - isLoading: false, - isAccount: false, - statusIds: emptyList, - }; - } else if (!accountId) { - return { - isLoading: true, - statusIds: emptyList, - }; - } - - const path = withReplies ? `${accountId}:with_replies` : `${accountId}${tagged ? `:${tagged}` : ''}`; - - return { - accountId, - isAccount: !!state.getIn(['accounts', accountId]), - statusIds: state.getIn(['timelines', `account:${path}`, 'items'], emptyList), - isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']), - hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']), - suspended: state.getIn(['accounts', accountId, 'suspended'], false), - hidden: getAccountHidden(state, accountId), - blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), - }; -}; - -class AccountTimeline extends ImmutablePureComponent { - - static propTypes = { - params: PropTypes.shape({ - acct: PropTypes.string, - id: PropTypes.string, - tagged: PropTypes.string, - }).isRequired, - accountId: PropTypes.string, - dispatch: PropTypes.func.isRequired, - statusIds: ImmutablePropTypes.list, - isLoading: PropTypes.bool, - hasMore: PropTypes.bool, - withReplies: PropTypes.bool, - blockedBy: PropTypes.bool, - isAccount: PropTypes.bool, - suspended: PropTypes.bool, - hidden: PropTypes.bool, - multiColumn: PropTypes.bool, - }; - - _load () { - const { accountId, withReplies, params: { tagged }, dispatch } = this.props; - - dispatch(fetchAccount(accountId)); - - if (!withReplies) { - dispatch(expandAccountFeaturedTimeline(accountId, { tagged })); - } - - dispatch(expandAccountTimeline(accountId, { withReplies, tagged })); - - if (accountId === me) { - dispatch(connectTimeline(`account:${me}`)); - } - } - - componentDidMount () { - const { params: { acct }, accountId, dispatch } = this.props; - - if (accountId) { - this._load(); - } else { - dispatch(lookupAccount(acct)); - } - } - - componentDidUpdate (prevProps) { - const { params: { acct, tagged }, accountId, withReplies, dispatch } = this.props; - - if (prevProps.accountId !== accountId && accountId) { - this._load(); - } else if (prevProps.params.acct !== acct) { - dispatch(lookupAccount(acct)); - } else if (prevProps.params.tagged !== tagged) { - if (!withReplies) { - dispatch(expandAccountFeaturedTimeline(accountId, { tagged })); - } - dispatch(expandAccountTimeline(accountId, { withReplies, tagged })); - } - - if (prevProps.accountId === me && accountId !== me) { - dispatch(disconnectTimeline({ timeline: `account:${me}` })); - } - } - - componentWillUnmount () { - const { dispatch, accountId } = this.props; - - if (accountId === me) { - dispatch(disconnectTimeline({ timeline: `account:${me}` })); - } - } - - handleLoadMore = maxId => { - this.props.dispatch(expandAccountTimeline(this.props.accountId, { maxId, withReplies: this.props.withReplies, tagged: this.props.params.tagged })); - }; - - render () { - const { accountId, statusIds, isLoading, hasMore, blockedBy, suspended, isAccount, hidden, multiColumn, remote, remoteUrl, params: { tagged } } = this.props; - - if (isLoading && statusIds.isEmpty()) { - return ( - - - - ); - } else if (!isLoading && !isAccount) { - return ( - - ); - } - - let emptyMessage; - - const forceEmptyState = suspended || blockedBy || hidden; - - if (suspended) { - emptyMessage = ; - } else if (hidden) { - emptyMessage = ; - } else if (blockedBy) { - emptyMessage = ; - } else if (remote && statusIds.isEmpty()) { - emptyMessage = ; - } else { - emptyMessage = ; - } - - return ( - - - - - - {!forceEmptyState && } - > - } - alwaysPrepend - append={} - scrollKey='account_timeline' - statusIds={forceEmptyState ? emptyList : statusIds} - isLoading={isLoading} - hasMore={!forceEmptyState && hasMore} - onLoadMore={this.handleLoadMore} - emptyMessage={emptyMessage} - bindToDocument={!multiColumn} - timelineId='account' - withCounters - /> - - ); - } - -} - -export default connect(mapStateToProps)(AccountTimeline); diff --git a/app/javascript/mastodon/features/account_timeline/v2/index.tsx b/app/javascript/mastodon/features/account_timeline/index.tsx similarity index 85% rename from app/javascript/mastodon/features/account_timeline/v2/index.tsx rename to app/javascript/mastodon/features/account_timeline/index.tsx index 693813bdbe..ce1e99a45f 100644 --- a/app/javascript/mastodon/features/account_timeline/v2/index.tsx +++ b/app/javascript/mastodon/features/account_timeline/index.tsx @@ -12,8 +12,10 @@ import { expandTimelineByKey, timelineKey, } from '@/mastodon/actions/timelines_typed'; +import { AccountHeader } from '@/mastodon/components/account_header'; import { Column } from '@/mastodon/components/column'; import { ColumnBackButton } from '@/mastodon/components/column_back_button'; +import { LimitedAccountHint } from '@/mastodon/components/limited_account_hint'; import { LoadingIndicator } from '@/mastodon/components/loading_indicator'; import { RemoteHint } from '@/mastodon/components/remote_hint'; import StatusList from '@/mastodon/components/status_list'; @@ -26,23 +28,23 @@ import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility'; import { selectTimelineByKey } from '@/mastodon/selectors/timelines'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; -import { AccountHeader } from '../components/account_header'; -import { LimitedAccountHint } from '../components/limited_account_hint'; - -import { AccountTimelineProvider, useAccountContext } from './context'; -import { FeaturedTags } from './featured_tags'; -import { AccountFilters } from './filters'; +import { FeaturedTags } from './components/featured_tags'; +import { AccountFilters } from './components/filters'; +import { renderPinnedStatusHeader } from './components/pinned_statuses'; +import { TagSuggestions } from './components/tags_suggestions'; import { - renderPinnedStatusHeader, - usePinnedStatusIds, -} from './pinned_statuses'; + AccountTimelineContext, + useAccountContext, + useAccountContextValue, +} from './hooks/useAccountContext'; +import { usePinnedStatusIds } from './hooks/usePinned'; import classes from './styles.module.scss'; -import { TagSuggestions } from './tags_suggestions'; const emptyList = ImmutableList(); -const AccountTimelineV2: FC<{ multiColumn: boolean }> = ({ multiColumn }) => { +const AccountTimeline: FC<{ multiColumn: boolean }> = ({ multiColumn }) => { const accountId = useAccountId(); + const accountContext = useAccountContextValue(accountId); // Null means accountId does not exist (e.g. invalid acct). Undefined means loading. if (accountId === null) { @@ -59,13 +61,13 @@ const AccountTimelineV2: FC<{ multiColumn: boolean }> = ({ multiColumn }) => { // Add this key to remount the timeline when accountId changes. return ( - + - + ); }; @@ -183,4 +185,4 @@ const EmptyMessage: FC<{ accountId: string }> = ({ accountId }) => { }; // eslint-disable-next-line import/no-default-export -export default AccountTimelineV2; +export default AccountTimeline; diff --git a/app/javascript/mastodon/features/account_timeline/modals/field_modal.tsx b/app/javascript/mastodon/features/account_timeline/modals/field_modal.tsx index d2b05703c2..baf0c70f76 100644 --- a/app/javascript/mastodon/features/account_timeline/modals/field_modal.tsx +++ b/app/javascript/mastodon/features/account_timeline/modals/field_modal.tsx @@ -2,6 +2,7 @@ import type { FC } from 'react'; import { FormattedMessage } from 'react-intl'; +import type { AccountField } from '@/mastodon/components/account_header/fields'; import { Button } from '@/mastodon/components/button'; import { EmojiHTML } from '@/mastodon/components/emoji/html'; import { @@ -10,7 +11,6 @@ import { ModalShellBody, } from '@/mastodon/components/modal_shell'; -import type { AccountField } from '../common'; import { useFieldHtml } from '../hooks/useFieldHtml'; import classes from './styles.module.scss'; diff --git a/app/javascript/mastodon/features/account_timeline/modals/join_modal.tsx b/app/javascript/mastodon/features/account_timeline/modals/join_modal.tsx index 0d21c82482..e5401fbebe 100644 --- a/app/javascript/mastodon/features/account_timeline/modals/join_modal.tsx +++ b/app/javascript/mastodon/features/account_timeline/modals/join_modal.tsx @@ -97,7 +97,7 @@ export const AccountJoinModal: FC<{ }, [anniversary, handle, dispatch, isMe]); return ( - + diff --git a/app/javascript/mastodon/features/account_timeline/v2/styles.module.scss b/app/javascript/mastodon/features/account_timeline/styles.module.scss similarity index 100% rename from app/javascript/mastodon/features/account_timeline/v2/styles.module.scss rename to app/javascript/mastodon/features/account_timeline/styles.module.scss diff --git a/app/javascript/mastodon/features/account_timeline/v2/pinned_statuses.tsx b/app/javascript/mastodon/features/account_timeline/v2/pinned_statuses.tsx deleted file mode 100644 index 78dad72478..0000000000 --- a/app/javascript/mastodon/features/account_timeline/v2/pinned_statuses.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import type { FC } from 'react'; -import { useEffect, useMemo } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import classNames from 'classnames'; - -import IconPinned from '@/images/icons/icon_pinned.svg?react'; -import { TIMELINE_PINNED_VIEW_ALL } from '@/mastodon/actions/timelines'; -import { - expandTimelineByKey, - timelineKey, -} from '@/mastodon/actions/timelines_typed'; -import { Badge } from '@/mastodon/components/badge'; -import { Button } from '@/mastodon/components/button'; -import { Icon } from '@/mastodon/components/icon'; -import { StatusHeader } from '@/mastodon/components/status/header'; -import type { StatusHeaderRenderFn } from '@/mastodon/components/status/header'; -import { selectTimelineByKey } from '@/mastodon/selectors/timelines'; -import { useAppDispatch, useAppSelector } from '@/mastodon/store'; - -import { useAccountContext } from './context'; -import classes from './styles.module.scss'; - -export function usePinnedStatusIds({ - accountId, - tagged, - forceEmptyState = false, -}: { - accountId: string; - tagged?: string; - forceEmptyState?: boolean; -}) { - const pinnedKey = timelineKey({ - type: 'account', - userId: accountId, - tagged, - pinned: true, - replies: true, - }); - - const dispatch = useAppDispatch(); - useEffect(() => { - dispatch(expandTimelineByKey({ key: pinnedKey })); - }, [dispatch, pinnedKey]); - - const pinnedTimeline = useAppSelector((state) => - selectTimelineByKey(state, pinnedKey), - ); - - const { showAllPinned } = useAccountContext(); - - const pinnedTimelineItems = pinnedTimeline?.items; // Make a const to avoid the React Compiler complaining. - const pinnedStatusIds = useMemo(() => { - if (!pinnedTimelineItems || forceEmptyState) { - return undefined; - } - - if (pinnedTimelineItems.size <= 1 || showAllPinned) { - return pinnedTimelineItems; - } - return pinnedTimelineItems.slice(0, 1).push(TIMELINE_PINNED_VIEW_ALL); - }, [forceEmptyState, pinnedTimelineItems, showAllPinned]); - - return { - statusIds: pinnedStatusIds, - isLoading: !!pinnedTimeline?.isLoading, - showAllPinned, - }; -} - -export const renderPinnedStatusHeader: StatusHeaderRenderFn = ({ - featured, - ...args -}) => { - if (!featured) { - return ; - } - return ( - - } - label={ - - } - /> - - ); -}; - -export const PinnedShowAllButton: FC = () => { - const { onShowAllPinned } = useAccountContext(); - - return ( - - - - - ); -}; diff --git a/app/javascript/mastodon/features/account_timeline/v2/status_header.tsx b/app/javascript/mastodon/features/account_timeline/v2/status_header.tsx deleted file mode 100644 index 5f0ff88685..0000000000 --- a/app/javascript/mastodon/features/account_timeline/v2/status_header.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import type { FC } from 'react'; - -import { Link } from 'react-router-dom'; - -import { RelativeTimestamp } from '@/mastodon/components/relative_timestamp'; -import type { StatusHeaderProps } from '@/mastodon/components/status/header'; -import { - StatusDisplayName, - StatusEditedAt, - StatusVisibility, -} from '@/mastodon/components/status/header'; -import type { Account } from '@/mastodon/models/account'; - -export const AccountStatusHeader: FC = ({ - status, - account, - children, - avatarSize = 48, - wrapperProps, - onHeaderClick, -}) => { - const statusAccount = status.get('account') as Account | undefined; - const editedAt = status.get('edited_at') as string; - - return ( - /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */ - - - - - {editedAt && } - - - - - {children} - - ); -}; diff --git a/app/javascript/mastodon/features/collections/components/collection_list_item.module.scss b/app/javascript/mastodon/features/collections/components/collection_list_item.module.scss index 5d440d62f7..1079d1aebf 100644 --- a/app/javascript/mastodon/features/collections/components/collection_list_item.module.scss +++ b/app/javascript/mastodon/features/collections/components/collection_list_item.module.scss @@ -1,6 +1,5 @@ .wrapper { --list-item-padding: 16px; - --list-item-padding-block: 12px; --list-item-gap: 16px; &:not(.wrapperWithoutBorder) { diff --git a/app/javascript/mastodon/features/collections/components/collection_lockup.tsx b/app/javascript/mastodon/features/collections/components/collection_lockup.tsx index 9593f02e2d..22c584559f 100644 --- a/app/javascript/mastodon/features/collections/components/collection_lockup.tsx +++ b/app/javascript/mastodon/features/collections/components/collection_lockup.tsx @@ -111,7 +111,7 @@ export const CollectionLockup: React.FC = ({ sideContent={sideContent} > diff --git a/app/javascript/mastodon/features/collections/detail/accounts_list.tsx b/app/javascript/mastodon/features/collections/detail/accounts_list.tsx index 1127bdad24..01718381c9 100644 --- a/app/javascript/mastodon/features/collections/detail/accounts_list.tsx +++ b/app/javascript/mastodon/features/collections/detail/accounts_list.tsx @@ -2,8 +2,12 @@ import { useCallback, useMemo, useRef, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; +import { PendingBadge } from '@/mastodon/components/badge'; import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import type { ApiCollectionJSON } from 'mastodon/api_types/collections'; +import type { + ApiCollectionJSON, + CollectionAccountItem, +} from 'mastodon/api_types/collections'; import type { RenderButtonOptions } from 'mastodon/components/account_list_item'; import { AccountListItem, @@ -75,47 +79,53 @@ const SensitiveScreen: React.FC<{ ); }; -const getCollectionAccounts = createAppSelector( +type CollectionItemWithAccount = CollectionAccountItem & { + account?: Account | null; +}; + +const getCollectionItems = createAppSelector( [ (state) => state.accounts, (state, collectionId?: string) => state.collections.collections[collectionId ?? '']?.items, ], (accounts, collectionAccountItems) => - (collectionAccountItems ?? []).map(({ account_id }) => - account_id ? accounts.get(account_id) : null, + (collectionAccountItems ?? []).map( + (item): CollectionItemWithAccount => ({ + ...item, + account: item.account_id ? accounts.get(item.account_id) : null, + }), ), ); export const CollectionAccountsList: React.FC<{ - collection?: ApiCollectionJSON; - isLoading: boolean; -}> = ({ collection, isLoading }) => { + collection: ApiCollectionJSON; +}> = ({ collection }) => { const intl = useIntl(); const confirmRevoke = useConfirmRevoke(collection); const listHeadingRef = useRef(null); - const isOwnCollection = collection?.account_id === me; - const { account_id: collectionOwnerId, id } = collection ?? {}; + const isOwnCollection = collection.account_id === me; + const { account_id: collectionOwnerId, id } = collection; const relationships = useAppSelector((state) => state.relationships); const collectionAccounts = useAppSelector((state) => - getCollectionAccounts(state, id), + getCollectionItems(state, id), ); const { visibleAccounts, hiddenAccounts } = useMemo(() => { - const visibleAccounts: Account[] = []; - const hiddenAccounts: Account[] = []; + const visibleAccounts: CollectionItemWithAccount[] = []; + const hiddenAccounts: CollectionItemWithAccount[] = []; collectionAccounts.forEach((item) => { - if (!item) { - // We currently simply hide unavailable accounts, this includes - // accounts that are pending inclusion; at least for the collection - // owner we should display an indication of pending users + const { account, account_id } = item; + + if (!isOwnCollection && !account) { + // Hide unavailable accounts unless you own this collection return; } - const relationship = relationships.get(item.id); + const relationship = account_id ? relationships.get(account_id) : null; if (relationship?.blocking || relationship?.muting) { hiddenAccounts.push(item); } else { @@ -124,7 +134,7 @@ export const CollectionAccountsList: React.FC<{ }); return { visibleAccounts, hiddenAccounts }; - }, [collectionAccounts, relationships]); + }, [collectionAccounts, isOwnCollection, relationships]); const renderAccountItemButton = useCallback( ({ relationship, accountId }: RenderButtonOptions) => { @@ -159,15 +169,16 @@ export const CollectionAccountsList: React.FC<{ index, totalListLength, isLastElement, - }: TruncatedListItemInfo) => ( + }: TruncatedListItemInfo) => ( : null} renderButton={renderAccountItemButton} /> @@ -182,53 +193,41 @@ export const CollectionAccountsList: React.FC<{ tabIndex={-1} ref={listHeadingRef} > - {collection ? ( - - ) : ( - - )} + - {collection && ( - - - - ), - subtitle: ( - - ), - }} - renderListItem={renderListItem} - /> - - - )} + + + + ), + subtitle: ( + + ), + }} + renderListItem={renderListItem} + /> + + > ); }; diff --git a/app/javascript/mastodon/features/collections/detail/index.tsx b/app/javascript/mastodon/features/collections/detail/index.tsx index d3fbd4c2cb..12701d1fd4 100644 --- a/app/javascript/mastodon/features/collections/detail/index.tsx +++ b/app/javascript/mastodon/features/collections/detail/index.tsx @@ -6,17 +6,24 @@ import { Helmet } from 'react-helmet'; import { useHistory, useLocation, useParams } from 'react-router'; import { Link } from 'react-router-dom'; -import { openModal } from '@/mastodon/actions/modal'; -import { useAccountHandle } from '@/mastodon/components/display_name/default'; +import HelpIcon from '@/material-icons/400-24px/help.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ShareIcon from '@/material-icons/400-24px/share.svg?react'; -import type { ApiCollectionJSON } from 'mastodon/api_types/collections'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import { openModal } from 'mastodon/actions/modal'; +import type { + ApiCollectionJSON, + CollectionAccountItem, +} from 'mastodon/api_types/collections'; import { Badge } from 'mastodon/components/badge'; import { Callout } from 'mastodon/components/callout'; import { Column } from 'mastodon/components/column'; import { ColumnHeader } from 'mastodon/components/column_header'; import { DisplayName } from 'mastodon/components/display_name'; +import { useAccountHandle } from 'mastodon/components/display_name/default'; +import { FormattedDateWrapper } from 'mastodon/components/formatted_date'; import { IconButton } from 'mastodon/components/icon_button'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import { Scrollable } from 'mastodon/components/scrollable_list/components'; import { useAccount } from 'mastodon/hooks/useAccount'; import { domain, me } from 'mastodon/initial_state'; @@ -68,13 +75,15 @@ export const AuthorNote: React.FC<{ id: string }> = ({ id }) => { }; const RevokeControls: React.FC<{ + currentUserCollectionItem: CollectionAccountItem; collection: ApiCollectionJSON; -}> = ({ collection }) => { +}> = ({ currentUserCollectionItem, collection }) => { const authorAccount = useAccount(collection.account_id); const confirmRevoke = useConfirmRevoke(collection); return ( , - date: '{date}', // TODO: Data not yet provided by API + date: ( + + ), }} /> ); }; +export const PendingNote: React.FC = () => { + return ( + + } + > + + + ); +}; + const CollectionHeader: React.FC<{ collection: ApiCollectionJSON }> = ({ collection, }) => { @@ -110,10 +146,11 @@ const CollectionHeader: React.FC<{ collection: ApiCollectionJSON }> = ({ const history = useHistory(); const isOwnCollection = account_id === me; - const currentUserIndex = items.findIndex( + const currentUserCollectionItem = items.find( (account) => account.account_id === me, ); - const isCurrentUserInCollection = !isOwnCollection && currentUserIndex > -1; + const isCurrentUserInCollection = + !isOwnCollection && !!currentUserCollectionItem; const openShareModal = useCallback(() => { dispatch( @@ -136,6 +173,8 @@ const CollectionHeader: React.FC<{ collection: ApiCollectionJSON }> = ({ } }, [history, openShareModal, isNewCollection, location.pathname]); + const hasPendingAccounts = items.some((item) => item.state === 'pending'); + return ( @@ -160,7 +199,13 @@ const CollectionHeader: React.FC<{ collection: ApiCollectionJSON }> = ({ {description && {description}} - {isCurrentUserInCollection && } + {hasPendingAccounts && } + {isCurrentUserInCollection && ( + + )} ); }; @@ -174,7 +219,6 @@ export const CollectionDetailPage: React.FC<{ const collection = useAppSelector((state) => id ? state.collections.collections[id] : undefined, ); - const isLoading = !!id && !collection; useEffect(() => { if (id) { @@ -195,8 +239,14 @@ export const CollectionDetailPage: React.FC<{ /> - {collection && } - + {collection ? ( + <> + + + > + ) : ( + + )} diff --git a/app/javascript/mastodon/features/collections/detail/revoke_collection_inclusion_modal.tsx b/app/javascript/mastodon/features/collections/detail/revoke_collection_inclusion_modal.tsx index a5fc887ff6..489a35f3ae 100644 --- a/app/javascript/mastodon/features/collections/detail/revoke_collection_inclusion_modal.tsx +++ b/app/javascript/mastodon/features/collections/detail/revoke_collection_inclusion_modal.tsx @@ -27,7 +27,7 @@ const messages = defineMessages({ }, }); -export function useConfirmRevoke(collection?: ApiCollectionJSON) { +export function useConfirmRevoke(collection?: ApiCollectionJSON | null) { const dispatch = useAppDispatch(); const { id, items = [] } = collection ?? {}; const ownCollectionItemId = items.find((item) => item.account_id === me)?.id; diff --git a/app/javascript/mastodon/features/collections/editor/accounts.tsx b/app/javascript/mastodon/features/collections/editor/accounts.tsx index dddd0242e0..3643072f10 100644 --- a/app/javascript/mastodon/features/collections/editor/accounts.tsx +++ b/app/javascript/mastodon/features/collections/editor/accounts.tsx @@ -6,16 +6,17 @@ import { useHistory } from 'react-router-dom'; import type { Map as ImmutableMap } from 'immutable'; -import { useComboboxItemProps } from '@/mastodon/components/form_fields/combobox_field'; import type { ApiMutedAccountJSON } from 'mastodon/api_types/accounts'; import type { ApiCollectionJSON } from 'mastodon/api_types/collections'; import { AccountListItem } from 'mastodon/components/account_list_item'; import { Avatar } from 'mastodon/components/avatar'; +import { PendingBadge } from 'mastodon/components/badge'; import { Button } from 'mastodon/components/button'; import { DisplayName } from 'mastodon/components/display_name'; import { useAccountHandle } from 'mastodon/components/display_name/default'; import { EmptyState } from 'mastodon/components/empty_state'; import { FormStack, ComboboxField } from 'mastodon/components/form_fields'; +import { useComboboxItemProps } from 'mastodon/components/form_fields/combobox_field'; import { ListItemContent, ListItemWrapper, @@ -31,12 +32,14 @@ import { domain } from 'mastodon/initial_state'; import type { Relationship } from 'mastodon/models/relationship'; import { addCollectionItem, - getCollectionItemIds, + getEditorCollectionItems, removeCollectionItem, updateCollectionEditorField, } from 'mastodon/reducers/slices/collections'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; +import { PendingNote } from '../detail'; + import classes from './styles.module.scss'; import { WizardStepTitle } from './wizard_step_title'; @@ -44,8 +47,9 @@ const MAX_ACCOUNT_COUNT = 25; const AddedAccountItem: React.FC<{ accountId: string; + pending?: boolean; onRemove: (id: string) => void; -}> = ({ accountId, onRemove }) => { +}> = ({ accountId, pending, onRemove }) => { const handleRemoveAccount = useCallback(() => { onRemove(accountId); }, [accountId, onRemove]); @@ -62,7 +66,13 @@ const AddedAccountItem: React.FC<{ [handleRemoveAccount], ); - return ; + return ( + } + renderButton={renderButton} + /> + ); }; const SuggestedAccountItem: React.FC<{ id: string }> = ({ id }) => { @@ -183,22 +193,26 @@ export const CollectionAccounts: React.FC<{ const { id, items: collectionItems } = collection ?? {}; const isEditMode = !!id; - const addedAccountIds = useAppSelector( - (state) => state.collections.editor.accountIds, + const editorItemsFromState = useAppSelector( + (state) => state.collections.editor.items, ); - // In edit mode, we're bypassing state and just return collection items directly, - // since they're edited "live", saving after each addition/deletion - const accountIds = useMemo( + // In edit mode, we're bypassing our Redux state and just work on the + // collection items directly since they're edited "live", saving right + // after each addition/deletion + const editorItems = useMemo( () => - isEditMode ? getCollectionItemIds(collectionItems) : addedAccountIds, - [isEditMode, collectionItems, addedAccountIds], + isEditMode + ? getEditorCollectionItems(collectionItems) + : editorItemsFromState, + [isEditMode, collectionItems, editorItemsFromState], ); + const hasPendingItems = editorItems.some((item) => item.state === 'pending'); const [searchValue, setSearchValue] = useState(''); - const hasAccounts = accountIds.length > 0; - const hasMaxAccounts = accountIds.length === MAX_ACCOUNT_COUNT; + const hasItems = editorItems.length > 0; + const hasMaxItems = editorItems.length === MAX_ACCOUNT_COUNT; const { accounts: suggestedAccounts, @@ -208,7 +222,8 @@ export const CollectionAccounts: React.FC<{ } = useSearchAccounts({ withRelationships: true, // Don't suggest accounts that were already added - filterResults: (account) => !accountIds.includes(account.id), + filterResults: (account) => + !editorItems.find((item) => item.account_id === account.id), }); const relationships = useAppSelector((state) => state.relationships); @@ -236,24 +251,33 @@ export const CollectionAccounts: React.FC<{ (accountId: string) => { dispatch( updateCollectionEditorField({ - field: 'accountIds', - value: accountIds.filter((id) => id !== accountId), + field: 'items', + value: editorItems.filter((item) => item.account_id !== accountId), }), ); }, - [accountIds, dispatch], + [editorItems, dispatch], ); const addAccountItem = useCallback( (item: ApiMutedAccountJSON) => { dispatch( updateCollectionEditorField({ - field: 'accountIds', - value: [...accountIds, item.id], + field: 'items', + value: [ + ...editorItems, + { + account_id: item.id, + state: + item.feature_approval.current_user === 'manual' + ? 'pending' + : 'accepted', + }, + ], }), ); }, - [accountIds, dispatch], + [editorItems, dispatch], ); const instantRemoveAccountItem = useCallback( @@ -319,12 +343,10 @@ export const CollectionAccounts: React.FC<{ e.preventDefault(); if (!id) { - history.push(`/collections/new/details`, { - account_ids: accountIds, - }); + history.push('/collections/new/details'); } }, - [id, history, accountIds], + [id, history], ); const inputId = useId(); @@ -345,16 +367,17 @@ export const CollectionAccounts: React.FC<{ } /> )} + {hasPendingItems && } - {hasAccounts && ( + {hasItems && ( )} @@ -410,14 +433,15 @@ export const CollectionAccounts: React.FC<{ /> } > - {accountIds.map((accountId, index) => ( + {editorItems.map(({ account_id, state }, index) => ( @@ -426,7 +450,7 @@ export const CollectionAccounts: React.FC<{ - {!isEditMode && hasAccounts && ( + {!isEditMode && hasItems && ( {id ? ( diff --git a/app/javascript/mastodon/features/collections/editor/details.tsx b/app/javascript/mastodon/features/collections/editor/details.tsx index de568137e8..f90f4be5e1 100644 --- a/app/javascript/mastodon/features/collections/editor/details.tsx +++ b/app/javascript/mastodon/features/collections/editor/details.tsx @@ -46,7 +46,7 @@ import { WizardStepTitle } from './wizard_step_title'; export const CollectionDetails: React.FC = () => { const dispatch = useAppDispatch(); const history = useHistory(); - const { id, name, description, topic, discoverable, sensitive, accountIds } = + const { id, name, description, topic, discoverable, sensitive, items } = useAppSelector((state) => state.collections.editor); const handleNameChange = useCallback( @@ -123,7 +123,7 @@ export const CollectionDetails: React.FC = () => { description, discoverable, sensitive, - account_ids: accountIds, + account_ids: items.map((item) => item.account_id), }; if (topic) { payload.tag_name = topic; @@ -152,7 +152,7 @@ export const CollectionDetails: React.FC = () => { sensitive, dispatch, history, - accountIds, + items, currentUserName, ], ); diff --git a/app/javascript/mastodon/features/collections/editor/index.tsx b/app/javascript/mastodon/features/collections/editor/index.tsx index e48e8718cf..beb4719a3e 100644 --- a/app/javascript/mastodon/features/collections/editor/index.tsx +++ b/app/javascript/mastodon/features/collections/editor/index.tsx @@ -25,7 +25,7 @@ import { } from 'mastodon/reducers/slices/collections'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; -import { useAccountCollections } from '..'; +import { useCollectionsCreatedBy } from '../overview/created_by_you'; import { CollectionAccounts } from './accounts'; import { CollectionDetails } from './details'; @@ -86,7 +86,7 @@ export const CollectionEditorPage: React.FC<{ // When creating a new collection, we load the current account's collections // to determine if they're allowed to create more. const { collections: collectionList, status: collectionListStatus } = - useAccountCollections(isEditMode ? null : accountId); + useCollectionsCreatedBy(isEditMode ? null : accountId); const isLoading = (isEditMode && !collection) || @@ -144,7 +144,7 @@ export const CollectionEditorPage: React.FC<{ /> ) : ( - + )} @@ -156,9 +156,11 @@ export const CollectionEditorPage: React.FC<{ ); }; -export const MaxCollectionsCallout: React.FC = () => ( +export const MaxCollectionsCallout: React.FC<{ className?: string }> = ({ + className, +}) => ( { - if (accountId && areCollectionsEnabled()) { - void dispatch(fetchAccountCollections({ accountId })); - } - }, [dispatch, accountId]); - - return useAppSelector((state) => selectAccountCollections(state, accountId)); -} - export const Collections: React.FC<{ multiColumn?: boolean; }> = ({ multiColumn }) => { @@ -59,37 +45,11 @@ export const Collections: React.FC<{ const me = useCurrentAccountId(); const accountId = useAccountId(); const account = useAccount(accountId); + const { path } = useRouteMatch(); - const { collections, status } = useAccountCollections(accountId); + const isOwnCollectionsPage = accountId === me; - const emptyMessage = - status === 'error' || !accountId ? ( - - ) : ( - <> - - - - - - - - > - ); - - const canCreateMoreCollections = collections.length < userCollectionLimit; - const isOwnCollection = accountId === me; - const titleMessage = isOwnCollection + const titleMessage = isOwnCollectionsPage ? messages.headingMe : messages.headingOther; @@ -100,45 +60,41 @@ export const Collections: React.FC<{ name: , }); + const createdByTabMessage = isOwnCollectionsPage + ? messages.createdByYou + : messages.createdByAuthor; + return ( - - - - ) - } - /> + - {status === 'idle' && !canCreateMoreCollections && ( - - )} - - {collections.map((item, index) => ( - - ))} - + + {pageTitleHtml} + + + {intl.formatMessage(createdByTabMessage, { + name: , + })} + + {isOwnCollectionsPage && ( + + {intl.formatMessage(messages.featuringYou)} + + )} + + + + + + diff --git a/app/javascript/mastodon/features/collections/overview/created_by_you.tsx b/app/javascript/mastodon/features/collections/overview/created_by_you.tsx new file mode 100644 index 0000000000..25b812e9bd --- /dev/null +++ b/app/javascript/mastodon/features/collections/overview/created_by_you.tsx @@ -0,0 +1,133 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import { EmptyState } from 'mastodon/components/empty_state'; +import { Icon } from 'mastodon/components/icon'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; +import { ItemList } from 'mastodon/components/scrollable_list/components'; +import { useAccountId, useCurrentAccountId } from 'mastodon/hooks/useAccountId'; +import { + fetchCollectionsCreatedByAccount, + selectAccountCollections, +} from 'mastodon/reducers/slices/collections'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; + +import { CollectionListItem } from '../components/collection_list_item'; +import { + messages as editorMessages, + MaxCollectionsCallout, + userCollectionLimit, +} from '../editor'; +import classes from '../styles.module.scss'; +import { areCollectionsEnabled } from '../utils'; + +const CreateButton: React.FC = () => ( + + + + +); + +export const CollectionListError: React.FC = () => ( + + } + /> +); + +export function useCollectionsCreatedBy(accountId: string | null | undefined) { + const dispatch = useAppDispatch(); + + useEffect(() => { + if (accountId && areCollectionsEnabled()) { + void dispatch(fetchCollectionsCreatedByAccount({ accountId })); + } + }, [dispatch, accountId]); + + return useAppSelector((state) => + selectAccountCollections(state, accountId, 'createdBy'), + ); +} + +export const CollectionsCreatedByYou: React.FC = () => { + const me = useCurrentAccountId(); + const accountId = useAccountId(); + + const { collections, status } = useCollectionsCreatedBy(accountId); + + const canCreateMoreCollections = collections.length < userCollectionLimit; + const isOwnCollectionPage = accountId === me; + const showCreateButton = + isOwnCollectionPage && status === 'idle' && canCreateMoreCollections; + + if (status === 'error' || !accountId) { + return ; + } + + if (status === 'loading') { + return ; + } + + if (collections.length === 0) { + return ( + + } + message={ + + } + > + + + ); + } + + return ( + <> + + + + + {showCreateButton && } + + + {!canCreateMoreCollections && ( + + )} + {collections.map((item, index) => ( + + ))} + + > + ); +}; diff --git a/app/javascript/mastodon/features/collections/overview/featuring_you.tsx b/app/javascript/mastodon/features/collections/overview/featuring_you.tsx new file mode 100644 index 0000000000..3fb93bbfc9 --- /dev/null +++ b/app/javascript/mastodon/features/collections/overview/featuring_you.tsx @@ -0,0 +1,87 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { EmptyState } from 'mastodon/components/empty_state'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; +import { ItemList } from 'mastodon/components/scrollable_list/components'; +import { useAccountId } from 'mastodon/hooks/useAccountId'; +import { + fetchCollectionsFeaturingAccount, + selectAccountCollections, +} from 'mastodon/reducers/slices/collections'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; + +import { CollectionListItem } from '../components/collection_list_item'; +import classes from '../styles.module.scss'; +import { areCollectionsEnabled } from '../utils'; + +import { CollectionListError } from './created_by_you'; + +function useCollectionsFeaturing(accountId: string | null | undefined) { + const dispatch = useAppDispatch(); + + useEffect(() => { + if (accountId && areCollectionsEnabled()) { + void dispatch(fetchCollectionsFeaturingAccount({ accountId })); + } + }, [dispatch, accountId]); + + return useAppSelector((state) => + selectAccountCollections(state, accountId, 'featuring'), + ); +} + +export const CollectionsFeaturingYou: React.FC = () => { + const accountId = useAccountId(); + + const { collections, status } = useCollectionsFeaturing(accountId); + + if (status === 'error' || !accountId) { + return ; + } + + if (status === 'loading') { + return ; + } + + if (collections.length === 0) { + return ( + + } + /> + ); + } + + return ( + <> + + + + + + + {collections.map((item, index) => ( + + ))} + + > + ); +}; diff --git a/app/javascript/mastodon/features/collections/styles.module.scss b/app/javascript/mastodon/features/collections/styles.module.scss new file mode 100644 index 0000000000..ed2ba13a09 --- /dev/null +++ b/app/javascript/mastodon/features/collections/styles.module.scss @@ -0,0 +1,39 @@ +.header { + display: flex; + flex-direction: column; + gap: 8px; + padding-top: 24px; + padding-inline: 16px; + border-bottom: 1px solid var(--color-border-primary); +} + +.heading { + font-size: 22px; + font-weight: 500; + line-height: 1.2; + overflow-wrap: break-word; +} + +.listHeader { + display: flex; + justify-content: space-between; + align-items: center; + min-height: 28px; + padding-top: 16px; + padding-inline: 16px; +} + +.subHeading { + font-size: 15px; + font-weight: 500; + line-height: 1.2; + overflow-wrap: break-word; +} + +.maxCollectionsError { + margin: 8px 16px; +} + +.error { + flex-grow: 1; +} diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx index c7c5e88f8c..0013db281a 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx @@ -5,8 +5,6 @@ import { defineMessages, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import ImmutablePropTypes from 'react-immutable-proptypes'; - import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; @@ -14,7 +12,6 @@ import MoodIcon from '@/material-icons/400-20px/mood.svg?react'; import { IconButton } from 'mastodon/components/icon_button'; import { injectIntl } from '@/mastodon/components/intl'; -import { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji'; import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components'; const messages = defineMessages({ @@ -156,7 +153,6 @@ class ModifierPicker extends PureComponent { class EmojiPickerMenuImpl extends PureComponent { static propTypes = { - custom_emojis: ImmutablePropTypes.list, frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string), loading: PropTypes.bool, onClose: PropTypes.func.isRequired, @@ -254,7 +250,7 @@ class EmojiPickerMenuImpl extends PureComponent { }; render() { - const { loading, style, intl, custom_emojis, skinTone, frequentlyUsedEmojis } = this.props; + const { loading, style, intl, skinTone, frequentlyUsedEmojis } = this.props; if (loading) { return ; @@ -264,32 +260,16 @@ class EmojiPickerMenuImpl extends PureComponent { const { modifierOpen } = this.state; - const categoriesSort = [ - 'recent', - 'people', - 'nature', - 'foods', - 'activity', - 'places', - 'objects', - 'symbols', - 'flags', - ]; - - categoriesSort.splice(1, 0, ...Array.from(categoriesFromEmojis(custom_emojis)).sort()); - return ( { + this.setState({ loading: false }); + }); }).catch(() => { this.setState({ loading: false, active: false }); }); @@ -408,7 +388,6 @@ class EmojiPickerDropdown extends PureComponent { state.get('custom_emojis'), -], emojis => emojis.filter(e => e.get('visible_in_picker')).sort((a, b) => { - const aShort = a.get('shortcode').toLowerCase(); - const bShort = b.get('shortcode').toLowerCase(); - - if (aShort < bShort) { - return -1; - } else if (aShort > bShort ) { - return 1; - } else { - return 0; - } -})); - const mapStateToProps = state => ({ - custom_emojis: getCustomEmojis(state), skinTone: state.getIn(['settings', 'skinTone']), frequentlyUsedEmojis: getFrequentlyUsedEmojis(state), }); diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index 859665a531..8f45c76ac7 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -168,29 +168,3 @@ const emojify = (str, customEmojis = {}) => { }; export default emojify; - -export const buildCustomEmojis = (customEmojis) => { - const emojis = []; - - customEmojis.forEach(emoji => { - const shortcode = emoji.get('shortcode'); - const url = autoPlayGif ? emoji.get('url') : emoji.get('static_url'); - const name = shortcode.replace(':', ''); - - emojis.push({ - id: name, - name, - short_names: [name], - text: '', - emoticons: [], - keywords: [name], - imageUrl: url, - custom: true, - customCategory: emoji.get('category'), - }); - }); - - return emojis; -}; - -export const categoriesFromEmojis = customEmojis => customEmojis.reduce((set, emoji) => set.add(emoji.get('category') ? `custom-${emoji.get('category')}` : 'custom'), new Set(['custom'])); diff --git a/app/javascript/mastodon/features/emoji/emoji_picker.tsx b/app/javascript/mastodon/features/emoji/emoji_picker.tsx index 37fc94dde7..233c451aad 100644 --- a/app/javascript/mastodon/features/emoji/emoji_picker.tsx +++ b/app/javascript/mastodon/features/emoji/emoji_picker.tsx @@ -1,49 +1,62 @@ +import type { FC } from 'react'; + import type { EmojiProps, PickerProps } from 'emoji-mart'; import EmojiRaw from 'emoji-mart/dist-es/components/emoji/nimble-emoji'; import PickerRaw from 'emoji-mart/dist-es/components/picker/nimble-picker'; -import { assetHost } from 'mastodon/utils/config'; +import { assetHost } from '@/mastodon/utils/config'; import { EMOJI_MODE_NATIVE } from './constants'; import EmojiData from './emoji_data.json'; import { useEmojiAppState } from './mode'; +import { usePickerEmojis } from './picker'; const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_16_0.png`; -const Emoji = ({ +export { fetchCustomEmojiData as loadCustomEmojiData } from './picker'; + +export const Picker: FC = ({ set = 'twitter', sheetSize = 32, sheetColumns = 62, sheetRows = 62, backgroundImageFn = backgroundImageFnDefault, ...props -}: EmojiProps) => { +}) => { + const { mode } = useEmojiAppState(); + const { customCategories, customEmojis } = usePickerEmojis(); + + if (!customEmojis) { + return null; + } + + return ( + + ); +}; + +export const Emoji: FC = ({ + set = 'twitter', + sheetSize = 32, + sheetColumns = 62, + sheetRows = 62, + backgroundImageFn = backgroundImageFnDefault, + ...props +}) => { const { mode } = useEmojiAppState(); return ( - ); -}; - -const Picker = ({ - set = 'twitter', - sheetSize = 32, - sheetColumns = 62, - sheetRows = 62, - backgroundImageFn = backgroundImageFnDefault, - ...props -}: PickerProps) => { - const { mode } = useEmojiAppState(); - return ( - ); }; - -export { Picker, Emoji }; diff --git a/app/javascript/mastodon/features/emoji/picker.ts b/app/javascript/mastodon/features/emoji/picker.ts new file mode 100644 index 0000000000..b40a3020e4 --- /dev/null +++ b/app/javascript/mastodon/features/emoji/picker.ts @@ -0,0 +1,85 @@ +import { useEffect, useState } from 'react'; + +import type { CategoryName, CustomEmoji } from 'emoji-mart'; + +import { autoPlayGif } from '@/mastodon/initial_state'; + +import { emojiLogger } from './utils'; + +const log = emojiLogger('picker'); + +let customEmojis: CustomEmoji[] | null = null; +let customCategories = [ + 'recent', + 'people', + 'nature', + 'foods', + 'activity', + 'places', + 'objects', + 'symbols', + 'flags', +] as CategoryName[]; + +export async function fetchCustomEmojiData() { + if (customEmojis !== null) { + return customEmojis; + } + + const { loadAllCustomEmoji } = await import('./database'); + const emojisRaw = await loadAllCustomEmoji(); + if (emojisRaw.length === 0) { + return []; + } + + const categories = new Set(['custom']); + const emojis = []; + for (const emoji of emojisRaw) { + const name = emoji.shortcode.replaceAll(':', ''); + emojis.push({ + name, + id: name, + custom: true, + short_names: [name], + imageUrl: autoPlayGif ? emoji.url : emoji.static_url, + customCategory: emoji.category, + }); + + if (emoji.category) { + categories.add(`custom-${emoji.category}`); + } + } + + customEmojis = emojis.toSorted((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }); + customCategories = customCategories.toSpliced( + 1, + 0, + ...(Array.from(categories).toSorted() as CategoryName[]), + ); + log( + 'loaded %d custom emojis in %d categories', + customEmojis.length, + categories.size, + ); + + return customEmojis; +} + +export function usePickerEmojis() { + const [, setLoaded] = useState(customEmojis !== null); + + useEffect(() => { + if (customEmojis === null) { + void fetchCustomEmojiData().then(() => { + setLoaded(true); + }); + } + }, []); + + return { + customEmojis, + customCategories, + }; +} diff --git a/app/javascript/mastodon/features/followers/components/empty.tsx b/app/javascript/mastodon/features/followers/components/empty.tsx index 3fb92c1061..edb675e80a 100644 --- a/app/javascript/mastodon/features/followers/components/empty.tsx +++ b/app/javascript/mastodon/features/followers/components/empty.tsx @@ -2,7 +2,7 @@ import type { FC, ReactNode } from 'react'; import { FormattedMessage } from 'react-intl'; -import { LimitedAccountHint } from '@/mastodon/features/account_timeline/components/limited_account_hint'; +import { LimitedAccountHint } from '@/mastodon/components/limited_account_hint'; import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility'; import type { Account } from '@/mastodon/models/account'; diff --git a/app/javascript/mastodon/features/followers/components/header.tsx b/app/javascript/mastodon/features/followers/components/header.tsx index 2733e1d0f4..f7b2359c02 100644 --- a/app/javascript/mastodon/features/followers/components/header.tsx +++ b/app/javascript/mastodon/features/followers/components/header.tsx @@ -3,8 +3,12 @@ import type { FC } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import type { MessageDescriptor } from 'react-intl'; +import { Link } from 'react-router-dom'; + +import { Callout } from '@/mastodon/components/callout'; import { DisplayNameSimple } from '@/mastodon/components/display_name/simple'; import { useAccount } from '@/mastodon/hooks/useAccount'; +import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId'; import classes from '../styles.module.scss'; @@ -15,6 +19,7 @@ export const AccountListHeader: FC<{ }> = ({ accountId, total, titleText }) => { const intl = useIntl(); const account = useAccount(accountId); + const currentId = useCurrentAccountId(); return ( <> @@ -31,6 +36,35 @@ export const AccountListHeader: FC<{ /> )} + {accountId === currentId && account?.hide_collections && ( + + {chunks}, + page: ( + + ), + modal: ( + + ), + field: ( + + ), + }} + /> + + )} > ); }; diff --git a/app/javascript/mastodon/features/followers/styles.module.scss b/app/javascript/mastodon/features/followers/styles.module.scss index f58b345bec..6294044c3b 100644 --- a/app/javascript/mastodon/features/followers/styles.module.scss +++ b/app/javascript/mastodon/features/followers/styles.module.scss @@ -4,8 +4,12 @@ margin: 20px 16px 10px; } +.subtitle, +.callout { + margin: 10px 16px; +} + .subtitle { font-size: 14px; color: var(--color-text-secondary); - margin: 10px 16px; } diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_collection.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_collection.tsx index 6b70bf68cb..10466b5d3d 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_collection.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_collection.tsx @@ -24,9 +24,14 @@ export const NotificationCollection: React.FC<{ unread: boolean; }> = ({ notification, unread }) => { const { collection, type } = notification; - const collectionCreatorAccount = useAccount(collection.account_id); + + const collectionCreatorAccount = useAccount(collection?.account_id); const confirmRevoke = useConfirmRevoke(collection); + if (!collection) { + return null; + } + return ( + {title} {message && {message}} @@ -99,6 +99,7 @@ export const ConfirmationModal: React.FC< {/* eslint-disable jsx-a11y/no-autofocus -- we are in a modal and thus autofocusing is justified */} { - void dispatch(deleteCollection({ collectionId: id })); + const onConfirm = useCallback(async () => { + await dispatch(deleteCollection({ collectionId: id })); history.push(`/@${currentUserName}/collections`); }, [dispatch, history, id, currentUserName]); diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index f976604a4e..a6685587e9 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -77,7 +77,7 @@ export function PinnedStatuses () { } export function AccountTimeline () { - return import('../../account_timeline/v2'); + return import('../../account_timeline'); } export function AccountGallery () { diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 9b156a5fa9..fb08a71ee6 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -28,12 +28,10 @@ "account.block_domain": "حظر اسم النِّطاق {domain}", "account.block_short": "حظر", "account.blocked": "محظور", - "account.blocking": "محظور", "account.cancel_follow_request": "إلغاء طلب المتابعة", "account.copy": "نسخ الرابط إلى الملف الشخصي", "account.direct": "إشارة خاصة لـ @{name}", "account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}", - "account.domain_blocking": "نطاق محظور", "account.edit_note": "تعديل الملاحظة الشخصية", "account.edit_profile": "تعديل الملف الشخصي", "account.edit_profile_short": "تعديل", @@ -95,7 +93,6 @@ "account.mute_notifications_short": "كتم الإشعارات", "account.mute_short": "اكتم", "account.muted": "مَكتوم", - "account.muting": "مكتوم", "account.mutual": "أنتم تتابعون بعضكم البعض", "account.name.copy": "نسخ المعرف", "account.name_info": "ما معنى ذلك؟", @@ -112,7 +109,6 @@ "account.remove_from_followers": "إزالة {name} من المتابعين", "account.report": "الإبلاغ عن @{name}", "account.requested_follow": "لقد طلب {name} متابعتك", - "account.requests_to_follow_you": "طلبات المتابعة", "account.share": "شارِك الملف التعريفي لـ @{name}", "account.show_reblogs": "اعرض إعادات نشر @{name}", "account.statuses_counter": "{count, plural, zero {}one {{counter} مشور} two {{counter} منشور} few {{counter} منشور} many {{counter} منشور} other {{counter} منشور}}", @@ -269,7 +265,6 @@ "collections.copy_link_confirmation": "نسخ الرابط إلى الحافظة", "collections.create.basic_details_title": "المعلومات الأساسية", "collections.create.steps": "الخطوة {step}/{total}", - "collections.detail.accounts_heading": "الحسابات", "collections.detail.revoke_inclusion": "أزلني", "collections.detail.sensitive_content": "محتوى حساس", "collections.edit_details": "تعديل التفاصيل", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index aa3feb6222..41dc1c7d40 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -28,12 +28,10 @@ "account.block_domain": "{domain} domenini blokla", "account.block_short": "Blok", "account.blocked": "Bloklanıb", - "account.blocking": "Əngəlləmə", "account.cancel_follow_request": "İzləməni ləğv et", "account.copy": "Profil linkini kopyala", "account.direct": "@{name} istifadəçisini fərdi olaraq etiketlə", "account.disable_notifications": "@{name} paylaşım edəndə mənə bildiriş göndərməyi dayandır", - "account.domain_blocking": "Domenin bloklanması", "account.edit_note": "Fərdi nota düzəliş", "account.edit_profile": "Profili redaktə et", "account.edit_profile_short": "Düzəliş", @@ -109,7 +107,6 @@ "account.mute_notifications_short": "Bildirişləri səssizləşdir", "account.mute_short": "Səssizləşdir", "account.muted": "Səssizləşdirilib", - "account.muting": "Səssizə alınır", "account.mutual": "Bir-birinizi izləyirsiniz", "account.no_bio": "Təsvir göstərilməyib.", "account.open_original_page": "Orijinal səhifəni aç", @@ -117,7 +114,6 @@ "account.remove_from_followers": "{name} - izləyicilərdən çıxart", "account.report": "@{name} istifadəçisini şikayət et", "account.requested_follow": "{name} sizi izləmək sorğusu göndərib", - "account.requests_to_follow_you": "Sizi izləmək istəyir", "account.share": "@{name} profilini paylaş", "account.show_reblogs": "@{name} - təkrar paylaşımlarını göstər", "account.statuses_counter": "{count, plural, one {{counter} paylaşım} other {{counter} paylaşım}}", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index b00d49bdef..e0c3b8792b 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -28,12 +28,10 @@ "account.block_domain": "Заблакіраваць дамен {domain}", "account.block_short": "Заблакіраваць", "account.blocked": "Заблакіраваны", - "account.blocking": "Блакіраванне", "account.cancel_follow_request": "Скасаваць запыт на падпіску", "account.copy": "Скапіраваць спасылку на профіль", "account.direct": "Згадаць прыватна @{name}", "account.disable_notifications": "Не паведамляць мне пра публікацыі @{name}", - "account.domain_blocking": "Блакіраванне дамена", "account.edit_note": "Рэдагаваць асабістую нататку", "account.edit_profile": "Рэдагаваць профіль", "account.edit_profile_short": "Рэдагаваць", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Не апавяшчаць", "account.mute_short": "Ігнараваць", "account.muted": "Ігнаруецца", - "account.muting": "Ігнараванне", "account.mutual": "Вы падпісаныя адно на аднаго", "account.name.copy": "Скапір. ідэнтыфікатар", "account.name.help.domain": "{domain} — сервер, які ўтрымлівае профіль і допісы гэтага карыстальніка.", @@ -135,7 +132,6 @@ "account.remove_from_followers": "Выдаліць {name} з падпісчыкаў", "account.report": "Паскардзіцца на @{name}", "account.requested_follow": "{name} адправіў(-ла) запыт на падпіску", - "account.requests_to_follow_you": "Хоча падпісацца на вас", "account.share": "Абагуліць профіль @{name}", "account.show_reblogs": "Паказаць падштурхоўванні ад @{name}", "account.statuses_counter": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}", @@ -227,8 +223,6 @@ "account_edit.profile_tab.show_media.title": "Паказваць укладку \"Медыя\"", "account_edit.profile_tab.show_media_replies.description": "Калі ўключыць, укладка \"Медыя\" будзе адлюстроўваць як Вашыя допісы, гэтак і Вашыя адказы на допісы іншых людзей.", "account_edit.profile_tab.show_media_replies.title": "Змяшчаць адказы ва ўкладцы \"Медыя\"", - "account_edit.profile_tab.subtitle": "Змяняйце на свой густ укладкі свайго профілю і тое, што яны паказваюць.", - "account_edit.profile_tab.title": "Налады ўкладкі профілю", "account_edit.save": "Захаваць", "account_edit.upload_modal.back": "Назад", "account_edit.upload_modal.done": "Гатова", @@ -387,11 +381,9 @@ "collections.create.accounts_title": "Каго Вы ўключыце ў гэтую калекцыю?", "collections.create.basic_details_title": "Асноўныя звесткі", "collections.create.steps": "Крок {step}/{total}", - "collections.create_a_collection_hint": "Стварыце калекцыю, каб параіць або падзяліцца сваімі любімымі ўліковымі запісамі з іншымі.", "collections.create_collection": "Стварыць калекцыю", "collections.delete_collection": "Выдаліць калекцыю", "collections.description_length_hint": "Максімум 100 сімвалаў", - "collections.detail.accounts_heading": "Уліковыя запісы", "collections.detail.author_added_you_on_date": "{author} дадаў(-ла) Вас {date}", "collections.detail.loading": "Загружаецца калекцыя…", "collections.detail.revoke_inclusion": "Прыбраць сябе", @@ -400,11 +392,14 @@ "collections.detail.share": "Падзяліцца гэтай калекцыяй", "collections.detail.you_are_in_this_collection": "Вас уключылі ў гэтую калекцыю", "collections.edit_details": "Рэдагаваць падрабязнасці", - "collections.error_loading_collections": "Адбылася памылка падчас загрузкі Вашых калекцый.", "collections.hidden_accounts_description": "Вы заблакіравалі або ігнаруеце {count, plural, one {гэтага карыстальніка} other {гэтых карыстальнікаў}}", "collections.hidden_accounts_link": "{count, plural, one {# схаваны ўліковы запіс} few {# схаваныя ўліковыя запісы} other {# схаваных уліковых запісаў}}", "collections.hints.accounts_counter": "{count}/{max} уліковых запісаў", "collections.last_updated_at": "Апошняе абнаўленне: {date}", + "collections.list.collections_with_count": "{count, plural, one {калекцыя} few {калекцыі} many {калекцыяў} other {калекцыі}}", + "collections.list.created_by_author": "Створаныя {name}", + "collections.list.created_by_you": "Створаныя Вамі", + "collections.list.featuring_you": "У якіх ёсць Вы", "collections.manage_accounts": "Кіраванне ўліковымі запісамі", "collections.mark_as_sensitive": "Пазначыць як адчувальную", "collections.mark_as_sensitive_hint": "Схаваць апісанне калекцыі і ўліковыя запісы за банерам з папярэджаннем. Назва калекцыі застанецца бачнай.", @@ -412,7 +407,6 @@ "collections.maximum_collection_count_reached": "Вы стварылі максімальную колькасць калекцый", "collections.name_length_hint": "Максімум 40 сімвалаў", "collections.new_collection": "Новая калекцыя", - "collections.no_collections_yet": "Пакуль няма калекцый.", "collections.remove_account": "Выдаліць", "collections.report_collection": "Паскардзіцца на гэту калекцыю", "collections.revoke_collection_inclusion": "Прыбраць сябе з гэтай калекцыі", @@ -454,11 +448,11 @@ "column.list_members": "Кіраванне ўдзельнікамі спіса", "column.lists": "Спісы", "column.mutes": "Ігнараваныя карыстальнікі", - "column.my_collections": "Мае калекцыі", "column.notifications": "Апавяшчэнні", "column.other_collections": "Калекцыі {name}", "column.pins": "Замацаваныя допісы", "column.public": "Інтэграваная стужка", + "column.your_collections": "Вашы калекцыі", "column_back_button.label": "Назад", "column_header.hide_settings": "Схаваць налады", "column_header.moveLeft_settings": "Пасунуць слупок улева", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 750c54459d..7281a4cb34 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -21,12 +21,10 @@ "account.block_domain": "Блокиране на домейн {domain}", "account.block_short": "Блокиране", "account.blocked": "Блокирани", - "account.blocking": "Блокиране", "account.cancel_follow_request": "Оттегляне на заявката за последване", "account.copy": "Копиране на връзка към профила", "account.direct": "Частно споменаване на @{name}", "account.disable_notifications": "Спиране на известяване при публикуване от @{name}", - "account.domain_blocking": "Блокиране на домейн", "account.edit_profile": "Редактиране на профила", "account.edit_profile_short": "Редактиране", "account.enable_notifications": "Известяване при публикуване от @{name}", @@ -63,7 +61,6 @@ "account.mute_notifications_short": "Заглушаване на известията", "account.mute_short": "Заглушаване", "account.muted": "Заглушено", - "account.muting": "Заглушаване", "account.mutual": "Взаимно се следвате", "account.no_bio": "Няма представен опис.", "account.open_original_page": "Отваряне на първообразната страница", @@ -71,7 +68,6 @@ "account.remove_from_followers": "Премахване на {name} от последователи", "account.report": "Докладване на @{name}", "account.requested_follow": "{name} поиска да ви последва", - "account.requests_to_follow_you": "Заявки да ви последват", "account.share": "Споделяне на профила на @{name}", "account.show_reblogs": "Показване на подсилвания от @{name}", "account.statuses_counter": "{count, plural, one {{counter} публикация} other {{counter} публикации}}", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 6dbfeb291c..f43050e09b 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -21,12 +21,10 @@ "account.block_domain": "Stankañ an domani {domain}", "account.block_short": "Stankañ", "account.blocked": "Stanket", - "account.blocking": "Stanket", "account.cancel_follow_request": "Nullañ ar reked heuliañ", "account.copy": "Eilañ al liamm war-zu ho profil", "account.direct": "Menegiñ @{name} ent-prevez", "account.disable_notifications": "Paouez d'am c'hemenn pa vez embannet traoù gant @{name}", - "account.domain_blocking": "Domani stanket", "account.edit_profile": "Kemmañ ar profil", "account.edit_profile_short": "Kemmañ", "account.enable_notifications": "Ma c'hemenn pa vez embannet traoù gant @{name}", @@ -62,7 +60,6 @@ "account.mute_notifications_short": "Kuzhat ar c'hemennoù", "account.mute_short": "Kuzhat", "account.muted": "Kuzhet", - "account.muting": "O kuzhat", "account.mutual": "Heuliañ a rit an eil egile", "account.no_bio": "Deskrivadur ebet da gaout.", "account.open_original_page": "Digeriñ ar bajenn orin", @@ -70,7 +67,6 @@ "account.remove_from_followers": "Dilemel {name} eus an heulierien·ezed", "account.report": "Disklêriañ @{name}", "account.requested_follow": "Gant {name} eo bet goulennet ho heuliañ", - "account.requests_to_follow_you": "Rekedoù d'ho heuliañ", "account.share": "Skignañ profil @{name}", "account.show_reblogs": "Diskouez skignadennoù @{name}", "account.statuses_counter": "{count, plural, one {{counter} embannadur} two {{counter} embannadur} few {{counter} embannadur} many {{counter} embannadur} other {{counter} embannadur}}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index be19218216..9946756b62 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -27,12 +27,10 @@ "account.block_domain": "Bloca el domini {domain}", "account.block_short": "Bloca", "account.blocked": "Blocat", - "account.blocking": "Blocat", "account.cancel_follow_request": "Cancel·la el seguiment", "account.copy": "Copia l'enllaç al perfil", "account.direct": "Menciona privadament @{name}", "account.disable_notifications": "Deixa de notificar-me els tuts de @{name}", - "account.domain_blocking": "Bloquem el domini", "account.edit_note": "Edita una nota personal", "account.edit_profile": "Edita el perfil", "account.edit_profile_short": "Edita", @@ -95,7 +93,6 @@ "account.mute_notifications_short": "Silencia les notificacions", "account.mute_short": "Silencia", "account.muted": "Silenciat", - "account.muting": "Silenciem", "account.mutual": "Us seguiu l'un a l'altre", "account.no_bio": "No s'ha proporcionat cap descripció.", "account.node_modal.callout": "Ningú més pot veure les vostres notes personals.", @@ -111,7 +108,6 @@ "account.remove_from_followers": "Elimina {name} dels seguidors", "account.report": "Informa sobre @{name}", "account.requested_follow": "{name} ha demanat de seguir-te", - "account.requests_to_follow_you": "Peticions de seguir-vos", "account.share": "Comparteix el perfil de @{name}", "account.show_reblogs": "Mostra els impulsos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicació} other {{counter} publicacions}}", @@ -205,15 +201,12 @@ "collections.collection_description": "Descripció", "collections.collection_name": "Nom", "collections.collection_topic": "Tema", - "collections.create_a_collection_hint": "Creeu una coŀlecció per a recomanar o compartir amb d'altres els vostres comptes preferits.", "collections.create_collection": "Crea una coŀlecció", "collections.delete_collection": "Elimina la coŀlecció", "collections.description_length_hint": "Límit de 100 caràcters", - "collections.error_loading_collections": "Hi ha hagut un error en carregar les vostres coŀleccions.", "collections.last_updated_at": "Última actualització: {date}", "collections.mark_as_sensitive": "Marcar com a sensible", "collections.mark_as_sensitive_hint": "Amaga la descripció i els comptes de la coŀlecció rere un avís de contingut. El nom de la coŀlecció serà encara visible.", - "collections.no_collections_yet": "Encara no hi ha coŀleccions.", "collections.topic_hint": "Afegir una etiqueta que ajudi altres a entendre el tema principal de la coŀlecció.", "collections.view_collection": "Mostra la coŀlecció", "column.about": "Quant a", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index f1251fae17..87428e5c20 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -28,12 +28,10 @@ "account.block_domain": "Blokovat doménu {domain}", "account.block_short": "Zablokovat", "account.blocked": "Blokovaný", - "account.blocking": "Blokovaní", "account.cancel_follow_request": "Zrušit sledování", "account.copy": "Kopírovat odkaz na profil", "account.direct": "Soukromě zmínit @{name}", "account.disable_notifications": "Přestat mě upozorňovat, když @{name} zveřejní příspěvek", - "account.domain_blocking": "Blokované domény", "account.edit_note": "Upravit vlastní poznámku", "account.edit_profile": "Upravit profil", "account.edit_profile_short": "Upravit", @@ -97,7 +95,6 @@ "account.mute_notifications_short": "Ztlumit upozornění", "account.mute_short": "Ztlumit", "account.muted": "Skrytý", - "account.muting": "Ztlumení", "account.mutual": "Sledujete se navzájem", "account.name.help.domain": "{domain} je server, který hostuje profily a příspěvky uživatelů.", "account.name.help.domain_self": "{domain} je váš server, který hostuje váš profil a příspěvky.", @@ -119,7 +116,6 @@ "account.remove_from_followers": "Odebrat {name} ze sledujících", "account.report": "Nahlásit @{name}", "account.requested_follow": "{name} tě požádal o sledování", - "account.requests_to_follow_you": "Žádosti o sledování", "account.share": "Sdílet profil @{name}", "account.show_reblogs": "Zobrazit boosty od @{name}", "account.statuses_counter": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} many {{counter} příspěvků} other {{counter} příspěvků}}", @@ -251,7 +247,6 @@ "collections.mark_as_sensitive_hint": "Skryje popis kolekce a účty za varováním obsahu. Název kolekce bude stále viditelný.", "collections.name_length_hint": "Limit 40 znaků", "collections.new_collection": "Nová sbírka", - "collections.no_collections_yet": "Ještě nemáte žádné sbírky.", "collections.search_accounts_max_reached": "Přidali jste maximální počet účtů", "collections.sensitive": "Citlivé", "collections.topic_hint": "Přidat štítek, který pomůže ostatním pochopit hlavní téma této kolekce.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index d464f2593c..a1252a4b93 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -28,12 +28,10 @@ "account.block_domain": "Rhwystro'r parth {domain}", "account.block_short": "Rhwystro", "account.blocked": "Wedi'i rwystro", - "account.blocking": "Yn Rhwystro", "account.cancel_follow_request": "Tynnu cais i ddilyn", "account.copy": "Copïo dolen i'r proffil", "account.direct": "Crybwyll yn breifat @{name}", "account.disable_notifications": "Stopiwch fy hysbysu pan fydd @{name} yn postio", - "account.domain_blocking": "Parthau'n cael eu rhwystro", "account.edit_note": "Golygu nodyn personol", "account.edit_profile": "Golygu'r proffil", "account.edit_profile_short": "Golygu", @@ -99,7 +97,6 @@ "account.mute_notifications_short": "Diffodd hysbysiadau", "account.mute_short": "Anwybyddu", "account.muted": "Wedi anwybyddu", - "account.muting": "Tewi", "account.mutual": "Rydych chi'n dilyn eich gilydd", "account.name.help.domain": "{domain} yw'r gweinydd sy'n cynnal proffil a phostiadau'r defnyddiwr.", "account.name.help.domain_self": "{domain} yw eich gweinydd sy'n cynnal eich proffil a'ch postiadau.", @@ -121,7 +118,6 @@ "account.remove_from_followers": "Tynnu {name} o'ch dilynwyr", "account.report": "Adrodd @{name}", "account.requested_follow": "Mae {name} wedi gwneud cais i'ch dilyn", - "account.requests_to_follow_you": "Ceisiadau i'ch dilyn", "account.share": "Rhannu proffil @{name}", "account.show_reblogs": "Dangos hybiau gan @{name}", "account.statuses_counter": "{count, plural, one {{counter} postiad} two {{counter} bostiad} few {{counter} phostiad} many {{counter} postiad} other {{counter} postiad}}", @@ -195,8 +191,6 @@ "account_edit.profile_tab.show_media.title": "Dangos y tab ‘Cyfryngau’", "account_edit.profile_tab.show_media_replies.description": "Pan fydd wedi'i alluogi, mae'r tab Cyfryngau yn dangos eich postiadau ac atebion i bostiadau pobl eraill.", "account_edit.profile_tab.show_media_replies.title": "Cynhwyswch atebion ar y tab ‘Cyfryngau’", - "account_edit.profile_tab.subtitle": "Cyfaddaswch y tabiau ar eich proffil a'r hyn maen nhw'n ei ddangos.", - "account_edit.profile_tab.title": "Gosodiadau tab proffil", "account_edit.save": "Cadw", "account_edit.upload_modal.back": "Nôl", "account_edit.upload_modal.done": "Gorffen", @@ -339,24 +333,20 @@ "collections.create.accounts_title": "Pwy fyddwch chi'n ei gynnwys yn y casgliad hwn?", "collections.create.basic_details_title": "Manylion sylfaenol", "collections.create.steps": "Cam {step}/{total}", - "collections.create_a_collection_hint": "Creu casgliad i argymell neu rannu eich hoff gyfrifon gydag eraill.", "collections.create_collection": "Creu casgliad", "collections.delete_collection": "Dileu casgliad", "collections.description_length_hint": "Terfyn o 100 nod", - "collections.detail.accounts_heading": "Cyfrifon", "collections.detail.loading": "Yn llwytho casgliad…", "collections.detail.revoke_inclusion": "Tynnu fi", "collections.detail.sensitive_note": "Mae'r casgliad hwn yn cynnwys cyfrifon a chynnwys a allai fod yn sensitif i rai defnyddwyr.", "collections.detail.share": "Rhannu'r casgliad hwn", "collections.edit_details": "Golygu manylion", - "collections.error_loading_collections": "Bu gwall wrth geisio llwytho eich casgliadau.", "collections.last_updated_at": "Diweddarwyd ddiwethaf: {date}", "collections.manage_accounts": "Rheoli cyfrifon", "collections.mark_as_sensitive": "Marcio fel sensitif", "collections.mark_as_sensitive_hint": "Yn cuddio disgrifiad a chyfrifon y casgliad y tu ôl i rybudd cynnwys. Bydd enw'r casgliad yn dal i fod yn weladwy.", "collections.name_length_hint": "Terfyn o 40 nod", "collections.new_collection": "Casgliad newydd", - "collections.no_collections_yet": "Dim casgliadau eto.", "collections.report_collection": "Adroddwch am y casgliad hwn", "collections.revoke_collection_inclusion": "Tynnu fy hun o'r casgliad hwn", "collections.revoke_inclusion.confirmation": "Rydych chi wedi cael eich tynnu o \"{collection}\"", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index af6e6b16ab..f4e69924c5 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -28,12 +28,10 @@ "account.block_domain": "Blokér domænet {domain}", "account.block_short": "Bloker", "account.blocked": "Blokeret", - "account.blocking": "Blokering", "account.cancel_follow_request": "Annullér anmodning om at følge", "account.copy": "Kopiér link til profil", "account.direct": "Nævn @{name} privat", "account.disable_notifications": "Giv mig ikke længere en notifikation, når @{name} laver indlæg", - "account.domain_blocking": "Blokerer domæne", "account.edit_note": "Rediger personlig note", "account.edit_profile": "Redigér profil", "account.edit_profile_short": "Rediger", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Sluk for notifikationer", "account.mute_short": "Skjul", "account.muted": "Skjult", - "account.muting": "Skjuler", "account.mutual": "I følger hinanden", "account.name.copy": "Kopiér handle", "account.name.help.domain": "{domain} er den server, der er vært for brugerens profil og indlæg.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Rediger", "account.note.title": "Personlig note (kun synlige for dig)", "account.open_original_page": "Åbn oprindelig side", + "account.pending": "Afventer", "account.posts": "Indlæg", "account.remove_from_followers": "Fjern {name} fra følgere", "account.report": "Anmeld @{name}", "account.requested_follow": "{name} har anmodet om at følge dig", - "account.requests_to_follow_you": "Anmoder om at følge dig", "account.share": "Del @{name}s profil", "account.show_reblogs": "Vis fremhævelser fra @{name}", "account.statuses_counter": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "Vis fanebladet ‘Medier‘", "account_edit.profile_tab.show_media_replies.description": "Når aktiveret, viser fanen Medier både dine indlæg og svar på andres indlæg.", "account_edit.profile_tab.show_media_replies.title": "Inkludér svar på fanen 'Medier'", - "account_edit.profile_tab.subtitle": "Tilpas fanerne på din profil og det, de viser.", - "account_edit.profile_tab.title": "Indstillinger for profil-fane", + "account_edit.profile_tab.show_relations.description": "Viser de konti, du følger, samt dine følgere for andre brugere på din profil. Andre kan stadig se, om du følger dem.", + "account_edit.profile_tab.show_relations.title": "Vis ‘Følgere‘ og ‘Fulgte’", + "account_edit.profile_tab.subtitle": "Tilpas, hvordan din profil vises.", + "account_edit.profile_tab.title": "Indstillinger for profilvisning", "account_edit.save": "Gem", "account_edit.upload_modal.back": "Tilbage", "account_edit.upload_modal.done": "Færdig", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "Angiv et hashtag…", "account_edit_tags.suggestions": "Forslag:", "account_edit_tags.tag_status_count": "{count, plural, one {# indlæg} other {# indlæg}}", + "account_list.hidden_notice": "Dette kan kun ses af dig. Hvis du vil vise denne liste for andre, skal du gå til {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# konto} other {# konti}}", "account_note.placeholder": "Klik for at tilføje notat", "admin.dashboard.daily_retention": "Brugerfastholdelsesrate pr. dag efter tilmelding", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "Hvem vil du fremhæve i denne samling?", "collections.create.basic_details_title": "Grundlæggende oplysninger", "collections.create.steps": "Trin {step}/{total}", - "collections.create_a_collection_hint": "Opret en samling for at anbefale eller dele dine yndlingskonti med andre.", "collections.create_collection": "Opret samling", "collections.delete_collection": "Slet samling", "collections.description_length_hint": "Begrænset til 100 tegn", - "collections.detail.accounts_heading": "Konti", "collections.detail.author_added_you_on_date": "{author} tilføjede dig {date}", "collections.detail.loading": "Indlæser samling…", "collections.detail.revoke_inclusion": "Fjern mig", @@ -400,11 +398,15 @@ "collections.detail.share": "Del denne samling", "collections.detail.you_are_in_this_collection": "Du er med i denne samling", "collections.edit_details": "Rediger detaljer", - "collections.error_loading_collections": "Der opstod en fejl under indlæsning af dine samlinger.", + "collections.error_loading_collections": "Der opstod en fejl under indlæsning af disse samlinger.", "collections.hidden_accounts_description": "Du har blokeret eller skjult {count, plural, one {denne bruger} other {disse brugere}}", "collections.hidden_accounts_link": "{count, plural, one {# skjult konto} other {# skjulte konti}}", "collections.hints.accounts_counter": "{count}/{max} konti", "collections.last_updated_at": "Senest opdateret: {date}", + "collections.list.collections_with_count": "{count, plural, one {# samling} other {# samlinger}}", + "collections.list.created_by_author": "Oprettet af {name}", + "collections.list.created_by_you": "Oprettet af dig", + "collections.list.featuring_you": "Med dig", "collections.manage_accounts": "Administrer konti", "collections.mark_as_sensitive": "Markér som sensitiv", "collections.mark_as_sensitive_hint": "Skjuler samlingens beskrivelse og konti bag en indholdsadvarsel. Samlingens navn vil stadig være synligt.", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "Du har oprettet det maksimale antal samlinger", "collections.name_length_hint": "Begrænset til 40 tegn", "collections.new_collection": "Ny samling", - "collections.no_collections_yet": "Ingen samlinger endnu.", + "collections.pending_accounts.message": "Konti kan vises som afventende, når vi venter på et svar fra brugeren eller dennes server. Det er kun dig, der kan se de afventende konti.", + "collections.pending_accounts.title": "Hvorfor ser jeg afventende konti?", "collections.remove_account": "Fjern", "collections.report_collection": "Anmeld denne samling", "collections.revoke_collection_inclusion": "Fjern mig selv fra denne samling", @@ -454,11 +457,11 @@ "column.list_members": "Håndtér listemedlemmer", "column.lists": "Lister", "column.mutes": "Skjulte brugere", - "column.my_collections": "Mine samlinger", "column.notifications": "Notifikationer", "column.other_collections": "Samlinger af {name}", "column.pins": "Fastgjorte indlæg", "column.public": "Fælles tidslinje", + "column.your_collections": "Dine samlinger", "column_back_button.label": "Tilbage", "column_header.hide_settings": "Skjul indstillinger", "column_header.moveLeft_settings": "Flyt kolonne til venstre", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "Profil utilgængelig", "empty_column.blocks": "Du har ikke blokeret nogle brugere endnu.", "empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.", + "empty_column.collections.featured_in": "Du er ikke blevet tilføjet til nogen samlinger endnu.", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!", "empty_column.direct": "Du har ikke nogen private omtaler endnu. Når du sender eller modtager en, vil den blive vist her.", "empty_column.disabled_feed": "Dette feed er blevet deaktiveret af dine serveradministratorer.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 7fcae45073..77fbc6dd05 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -28,12 +28,10 @@ "account.block_domain": "{domain} blockieren", "account.block_short": "Blockieren", "account.blocked": "Blockiert", - "account.blocking": "Blockiert", "account.cancel_follow_request": "Anfrage zurückziehen", "account.copy": "Link zum Profil kopieren", "account.direct": "@{name} privat erwähnen", "account.disable_notifications": "Benachrichtige mich nicht mehr, wenn @{name} etwas veröffentlicht", - "account.domain_blocking": "Domain blockiert", "account.edit_note": "Persönliche Notiz bearbeiten", "account.edit_profile": "Profil bearbeiten", "account.edit_profile_short": "Bearbeiten", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Benachrichtigungen stummschalten", "account.mute_short": "Stummschalten", "account.muted": "Stummgeschaltet", - "account.muting": "Stummgeschaltet", "account.mutual": "Ihr folgt einander", "account.name.copy": "Adresse kopieren", "account.name.help.domain": "{domain} ist der Server, auf dem das Profil registriert ist und die Beiträge verwaltet werden.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Bearbeiten", "account.note.title": "Persönliche Notiz (nur für dich sichtbar)", "account.open_original_page": "Originalseite öffnen", + "account.pending": "Ausstehend", "account.posts": "Beiträge", "account.remove_from_followers": "@{name} als Follower entfernen", "account.report": "@{name} melden", "account.requested_follow": "{name} möchte dir folgen", - "account.requests_to_follow_you": "Möchte dir folgen", "account.share": "Profil von @{name} teilen", "account.show_reblogs": "Geteilte Beiträge von @{name} anzeigen", "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "„Medien“-Tab anzeigen", "account_edit.profile_tab.show_media_replies.description": "Durch das Aktivieren werden sowohl deine Beiträge als auch deine Antworten auf Beiträge anderer im „Medien“-Tab angezeigt.", "account_edit.profile_tab.show_media_replies.title": "Antworten im „Medien“-Tab anzeigen", - "account_edit.profile_tab.subtitle": "Passe die Tabs deines Profils und deren Inhalte an.", - "account_edit.profile_tab.title": "Profil-Tab-Einstellungen", + "account_edit.profile_tab.show_relations.description": "Dadurch werden die Konten, die dir folgen, und die Profile, denen du folgst, für andere sichtbar. Sie werden immer sehen können, ob du ihnen folgst.", + "account_edit.profile_tab.show_relations.title": "Follower und „Folge ich“ anzeigen", + "account_edit.profile_tab.subtitle": "Passe die Darstellung deines Profils an.", + "account_edit.profile_tab.title": "Einstellungen für die Profilübersicht", "account_edit.save": "Speichern", "account_edit.upload_modal.back": "Zurück", "account_edit.upload_modal.done": "Fertig", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "Gib einen Hashtag ein …", "account_edit_tags.suggestions": "Vorschläge:", "account_edit_tags.tag_status_count": "{count, plural, one {# Beitrag} other {# Beiträge}}", + "account_list.hidden_notice": "Die Liste ist nur für dich sichtbar. Damit sie für andere zugänglich wird, rufe {page} > {modal}> {field} auf.", "account_list.total": "{total, plural, one {# Konto} other {# Konten}}", "account_note.placeholder": "Klicken, um private Anmerkung hinzuzufügen", "admin.dashboard.daily_retention": "Verweildauer der Nutzer*innen pro Tag seit der Registrierung", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "Wen möchtest du in dieser Sammlung präsentieren?", "collections.create.basic_details_title": "Allgemeine Informationen", "collections.create.steps": "Schritt {step}/{total}", - "collections.create_a_collection_hint": "Erstelle eine Sammlung, um deine Lieblingsprofile anderen zu empfehlen oder sie zu teilen.", "collections.create_collection": "Sammlung erstellen", "collections.delete_collection": "Sammlung löschen", "collections.description_length_hint": "Maximal 100 Zeichen", - "collections.detail.accounts_heading": "Konten", "collections.detail.author_added_you_on_date": "{author} fügte dich am {date} hinzu", "collections.detail.loading": "Sammlung wird geladen …", "collections.detail.revoke_inclusion": "Mich entfernen", @@ -400,11 +398,15 @@ "collections.detail.share": "Sammlung teilen", "collections.detail.you_are_in_this_collection": "Du bist ein Teil dieser Sammlung", "collections.edit_details": "Details bearbeiten", - "collections.error_loading_collections": "Beim Laden deiner Sammlungen ist ein Fehler aufgetreten.", + "collections.error_loading_collections": "Beim Laden dieser Sammlungen ist ein Fehler aufgetreten.", "collections.hidden_accounts_description": "Du hast {count, plural, one {dieses Profil} other {diese Profile}} blockiert oder stummgeschaltet", "collections.hidden_accounts_link": "{count, plural, one {# Konto ausgeblendet} other {# Konten ausgeblendet}}", "collections.hints.accounts_counter": "{count}/{max} Konten", "collections.last_updated_at": "Aktualisiert: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Sammlung} other {# Sammlungen}}", + "collections.list.created_by_author": "Von {name} erstellt", + "collections.list.created_by_you": "Von mir erstellt", + "collections.list.featuring_you": "Stellen mich vor", "collections.manage_accounts": "Profile verwalten", "collections.mark_as_sensitive": "Mit Inhaltswarnung versehen", "collections.mark_as_sensitive_hint": "Die Beschreibung sowie enthaltenen Profile werden durch eine Inhaltswarnung ausgeblendet. Der Titel bleibt weiterhin sichtbar.", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "Du hast die Höchstzahl an Sammlungen erreicht", "collections.name_length_hint": "Maximal 40 Zeichen", "collections.new_collection": "Neue Sammlung", - "collections.no_collections_yet": "Bisher keine Sammlungen vorhanden.", + "collections.pending_accounts.message": "Ein Konto erscheint als ausstehend, wenn eine Antwort vom Konto oder deren Server erwartet wird. Ausstehende Konten sind nur für dich sichtbar.", + "collections.pending_accounts.title": "Warum sehe ich ausstehende Konten?", "collections.remove_account": "Entfernen", "collections.report_collection": "Sammlung melden", "collections.revoke_collection_inclusion": "Mich aus dieser Sammlung entfernen", @@ -424,7 +427,7 @@ "collections.share_short": "Teilen", "collections.suggestions.can_not_add": "Kann nicht hinzugefügt werden", "collections.suggestions.can_not_add_desc": "Diese Konten möchten möglicherweise nicht entdeckt werden oder deren Server unterstützt noch keine Sammlungen.", - "collections.suggestions.must_follow": "Zuerst Profil folgen", + "collections.suggestions.must_follow": "Profil muss gefolgt werden", "collections.suggestions.must_follow_desc": "Diese Konten überprüfen ihre Follower-Anfragen manuell. Follower können sie zu Sammlungen hinzufügen.", "collections.topic_hint": "Ein Hashtag für diese Sammlung kann anderen dabei helfen, dein Anliegen besser einordnen zu können.", "collections.topic_special_chars_hint": "Sonderzeichen werden beim Speichern entfernt", @@ -454,11 +457,11 @@ "column.list_members": "Listenmitglieder verwalten", "column.lists": "Listen", "column.mutes": "Stummgeschaltete Profile", - "column.my_collections": "Meine Sammlungen", "column.notifications": "Benachrichtigungen", "column.other_collections": "Sammlungen von {name}", "column.pins": "Angeheftete Beiträge", "column.public": "Föderierte Timeline", + "column.your_collections": "Deine Sammlungen", "column_back_button.label": "Zurück", "column_header.hide_settings": "Einstellungen ausblenden", "column_header.moveLeft_settings": "Diese Spalte nach links verschieben", @@ -635,7 +638,7 @@ "empty_column.account_featured_self.no_collections_button": "Sammlung erstellen", "empty_column.account_featured_self.no_collections_hide_tab": "Diesen Tab ausblenden", "empty_column.account_featured_self.pre_collections": "Sammlungen sind bald verfügbar", - "empty_column.account_featured_self.pre_collections_desc": "Mit Sammlungen (ab Mastodon v4.6) kannst du eigene Liste kuratieren, um auf empfehlenswerte Profile hinzuweisen.", + "empty_column.account_featured_self.pre_collections_desc": "Mit Sammlungen (ab Mastodon v4.6) kannst du eigene Listen kuratieren, um auf empfehlenswerte Profile hinzuweisen.", "empty_column.account_featured_self.showcase_accounts": "Präsentiere deine liebsten Konten", "empty_column.account_featured_self.showcase_accounts_desc": "Sammlungen sind kuratierte Listen, die anderen helfen, mehr Konten im Fediverse zu entdecken.", "empty_column.account_featured_unknown.other": "Dieser Account hat noch nichts vorgestellt.", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "Profil nicht verfügbar", "empty_column.blocks": "Du hast bisher keine Profile blockiert.", "empty_column.bookmarked_statuses": "Du hast bisher keine Beiträge als Lesezeichen abgelegt. Sobald du einen Beitrag als Lesezeichen speicherst, wird er hier erscheinen.", + "empty_column.collections.featured_in": "Du wurdest noch keiner Sammlung hinzugefügt.", "empty_column.community": "Die lokale Timeline ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!", "empty_column.direct": "Du hast noch keine privaten Erwähnungen. Sobald du eine sendest oder erhältst, wird sie hier erscheinen.", "empty_column.disabled_feed": "Diesen Feed haben deine Server-Administrator*innen deaktiviert.", @@ -962,8 +966,8 @@ "notification.quoted_update": "{name} bearbeitete einen von dir zitierten Beitrag", "notification.reblog": "{name} teilte deinen Beitrag", "notification.reblog.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} teilten deinen Beitrag", - "notification.relationships_severance_event": "Verbindungen mit {name} verloren", - "notification.relationships_severance_event.account_suspension": "Ein Admin von {from} hat {target} gesperrt. Du wirst von diesem Profil keine Updates mehr erhalten und auch nicht mit ihm interagieren können.", + "notification.relationships_severance_event": "Verbindung zu {name} verloren", + "notification.relationships_severance_event.account_suspension": "Administrator*innen von {from} haben den Zugriff auf den externen Server {target} gesperrt. Das bedeutet, dass du keine Inhalte mehr von dort erhältst. Du kannst auch nicht mehr mit den Profilen dieses Servers interagieren.", "notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} gesperrt – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.", "notification.relationships_severance_event.learn_more": "Mehr erfahren", "notification.relationships_severance_event.user_domain_block": "Du hast {target} blockiert – {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst, wurden entfernt.", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 1a5a448b05..60c1a17c45 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -28,12 +28,10 @@ "account.block_domain": "Αποκλεισμός τομέα {domain}", "account.block_short": "Αποκλεισμός", "account.blocked": "Αποκλεισμένος/η", - "account.blocking": "Αποκλείεται", "account.cancel_follow_request": "Απόσυρση αιτήματος παρακολούθησης", "account.copy": "Αντιγραφή συνδέσμου προφίλ", "account.direct": "Ιδιωτική επισήμανση @{name}", "account.disable_notifications": "Σταμάτα να με ειδοποιείς όταν δημοσιεύει ο @{name}", - "account.domain_blocking": "Αποκλείεται ο τομέας", "account.edit_note": "Επεξεργασία προσωπικής σημείωσης", "account.edit_profile": "Επεξεργασία προφίλ", "account.edit_profile_short": "Επεξεργασία", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Σίγαση ειδοποιήσεων", "account.mute_short": "Σίγαση", "account.muted": "Σε σίγαση", - "account.muting": "Σίγαση", "account.mutual": "Ακολουθείτε ο ένας τον άλλο", "account.name.copy": "Αντιγραφή πλήρους ονόματος χρήστη", "account.name.help.domain": "Το {domain} είναι ο διακομιστής που φιλοξενεί το προφίλ και τις αναρτήσεις του χρήστη.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Επεξεργασία", "account.note.title": "Προσωπική σημείωση (ορατή μόνο σε εσάς)", "account.open_original_page": "Άνοιγμα πρωτότυπης σελίδας", + "account.pending": "Εκκρεμεί", "account.posts": "Αναρτήσεις", "account.remove_from_followers": "Κατάργηση {name} από τους ακόλουθους", "account.report": "Αναφορά @{name}", "account.requested_follow": "Ο/Η {name} αιτήθηκε να σε ακολουθήσει", - "account.requests_to_follow_you": "Αιτήματα για να σε ακολουθήσουν", "account.share": "Κοινοποίηση του προφίλ @{name}", "account.show_reblogs": "Εμφάνιση ενισχύσεων από @{name}", "account.statuses_counter": "{count, plural, one {{counter} ανάρτηση} other {{counter} αναρτήσεις}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Εμφάνιση καρτέλας «Πολυμέσα»", "account_edit.profile_tab.show_media_replies.description": "Όταν ενεργοποιηθεί, η καρτέλα Πολυμέσα εμφανίζει τόσο τις αναρτήσεις σας όσο και τις απαντήσεις σας σε αναρτήσεις άλλων ατόμων.", "account_edit.profile_tab.show_media_replies.title": "Συμπερίληψη απαντήσεων στην καρτέλα «Πολυμέσα»", - "account_edit.profile_tab.subtitle": "Προσαρμόστε τις καρτέλες στο προφίλ σας και τι εμφανίζουν.", - "account_edit.profile_tab.title": "Ρυθμίσεις καρτελών προφίλ", "account_edit.save": "Αποθήκευση", "account_edit.upload_modal.back": "Πίσω", "account_edit.upload_modal.done": "Έγινε", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Ποιον θα αναδείξετε σε αυτήν τη συλλογή;", "collections.create.basic_details_title": "Βασικά στοιχεία", "collections.create.steps": "Βήμα {step}/{total}", - "collections.create_a_collection_hint": "Δημιουργήστε μια συλλογή για να προτείνετε ή να μοιραστείτε τους αγαπημένους σας λογαριασμούς με άλλους.", "collections.create_collection": "Δημιουργία συλλογής", "collections.delete_collection": "Διαγραφή συλλογής", "collections.description_length_hint": "Όριο 100 χαρακτήρων", - "collections.detail.accounts_heading": "Λογαριασμοί", "collections.detail.author_added_you_on_date": "Ο χρήστης {author} σας πρόσθεσε στις {date}", "collections.detail.loading": "Γίνεται φόρτωση της συλλογής…", "collections.detail.revoke_inclusion": "Αφαίρεσε με", @@ -400,11 +393,14 @@ "collections.detail.share": "Κοινοποιήστε αυτήν τη συλλογή", "collections.detail.you_are_in_this_collection": "Είστε αναδεδειγμένοι σε αυτήν τη συλλογή", "collections.edit_details": "Επεξεργασία λεπτομερειών", - "collections.error_loading_collections": "Παρουσιάστηκε σφάλμα κατά την προσπάθεια φόρτωσης των συλλογών σας.", "collections.hidden_accounts_description": "Έχετε αποκλείσει ή κάνει σίγαση {count, plural, one {αυτόν τον χρήστη} other {αυτούς τους χρήστες}}", "collections.hidden_accounts_link": "{count, plural, one {# κρυμμένος λογαριασμός} other {# κρυμμένοι λογαριασμοί}}", "collections.hints.accounts_counter": "{count}/{max} λογαριασμοί", "collections.last_updated_at": "Τελευταία ενημέρωση: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Συλλογή} other {# Συλλογές}}", + "collections.list.created_by_author": "Δημιουργήθηκε από {name}", + "collections.list.created_by_you": "Δημιουργήθηκε από εσάς", + "collections.list.featuring_you": "Σας αναδεικνύει", "collections.manage_accounts": "Διαχείριση λογαριασμών", "collections.mark_as_sensitive": "Σήμανση ως ευαίσθητο", "collections.mark_as_sensitive_hint": "Κρύβει την περιγραφή και τους λογαριασμούς της συλλογής πίσω από μια προειδοποίηση περιεχομένου. Το όνομα της συλλογής θα είναι ακόμη ορατό.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Έχεις δημιουργήσει τον μέγιστο αριθμό συλλογών", "collections.name_length_hint": "Όριο 40 χαρακτήρων", "collections.new_collection": "Νέα συλλογή", - "collections.no_collections_yet": "Καμία συλλογή ακόμη.", + "collections.pending_accounts.message": "Οι λογαριασμοί μπορεί να εμφανίζονται ως εκκρεμείς όταν περιμένουμε απάντηση από τον χρήστη ή τον διακομιστή τους. Μόνο εσείς μπορείτε να δείτε εκκρεμείς λογαριασμούς.", + "collections.pending_accounts.title": "Γιατί βλέπω εκκρεμείς λογαριασμούς;", "collections.remove_account": "Αφαίρεση", "collections.report_collection": "Αναφορά αυτής της συλλογής", "collections.revoke_collection_inclusion": "Αφαίρεσε τον εαυτό μου από αυτήν τη συλλογή", @@ -454,11 +451,11 @@ "column.list_members": "Διαχείριση μελών λίστας", "column.lists": "Λίστες", "column.mutes": "Αποσιωπημένοι χρήστες", - "column.my_collections": "Οι συλλογές μου", "column.notifications": "Ειδοποιήσεις", "column.other_collections": "Συλλογές από {name}", "column.pins": "Καρφιτσωμένες αναρτήσεις", "column.public": "Ομοσπονδιακή ροή", + "column.your_collections": "Οι Συλλογές σας", "column_back_button.label": "Πίσω", "column_header.hide_settings": "Απόκρυψη ρυθμίσεων", "column_header.moveLeft_settings": "Μεταφορά στήλης στα αριστερά", @@ -959,16 +956,16 @@ "notification.moderation_warning.action_suspend": "Ο λογαριασμός σου έχει ανασταλεί.", "notification.own_poll": "Η δημοσκόπησή σου έληξε", "notification.poll": "Μία ψηφοφορία στην οποία συμμετείχες έχει τελειώσει", - "notification.quoted_update": "Ο χρήστης {name} επεξεργάστηκε μία ανάρτηση που παρέθεσες", + "notification.quoted_update": "{name} επεξεργάστηκε μία ανάρτηση που παρέθεσες", "notification.reblog": "Ο/Η {name} ενίσχυσε την ανάρτηση σου", "notification.reblog.name_and_others_with_link": "{name} και {count, plural, one {# ακόμα} other {# ακόμα}} ενίσχυσαν την ανάρτησή σου", - "notification.relationships_severance_event": "Χάθηκε η σύνδεση με το {name}", - "notification.relationships_severance_event.account_suspension": "Ένας διαχειριστής από το {from} ανέστειλε το {target}, πράγμα που σημαίνει ότι δεν μπορείς πλέον να λαμβάνεις ενημερώσεις από αυτούς ή να αλληλεπιδράς μαζί τους.", - "notification.relationships_severance_event.domain_block": "Ένας διαχειριστής από {from} έχει μπλοκάρει το {target}, συμπεριλαμβανομένων {followersCount} από τους ακόλουθούς σου και {followingCount, plural, one {# λογαριασμό} other {# λογαριασμοί}} που ακολουθείς.", + "notification.relationships_severance_event": "Χάθηκαν συνδέσεις με το {name}", + "notification.relationships_severance_event.account_suspension": "Ένας διαχειριστής από το {from} ανέστειλε το {target}, το οποίο σημαίνει ότι δεν μπορείς πλέον να λαμβάνεις ενημερώσεις από αυτούς ή να αλληλεπιδράς μαζί τους.", + "notification.relationships_severance_event.domain_block": "Ένας διαχειριστής από {from} έχει μπλοκάρει το {target}, συμπεριλαμβανομένων {followersCount} από τους ακόλουθούς σου και {followingCount, plural, one {# λογαριασμό} other {# λογαριασμούς}} που ακολουθείς.", "notification.relationships_severance_event.learn_more": "Μάθε περισσότερα", - "notification.relationships_severance_event.user_domain_block": "Έχεις αποκλείσει τον λογαριασμό {target}, αφαιρώντας {followersCount} από τους ακόλουθούς σου και {followingCount, plural, one {# λογαριασμό} other {# λογαριασμοί}} που ακολουθείς.", + "notification.relationships_severance_event.user_domain_block": "Έχεις αποκλείσει τον λογαριασμό {target}, αφαιρώντας {followersCount} από τους ακόλουθούς σου και {followingCount, plural, one {# λογαριασμό} other {# λογαριασμούς}} που ακολουθείς.", "notification.status": "Ο/Η {name} μόλις ανέρτησε κάτι", - "notification.update": "Ο/Η {name} επεξεργάστηκε μια ανάρτηση", + "notification.update": "{name} επεξεργάστηκε μια ανάρτηση", "notification_requests.accept": "Αποδοχή", "notification_requests.accept_multiple": "{count, plural, one {Αποδοχή # αιτήματος…} other {Αποδοχή # αιτημάτων…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Αποδοχή αιτήματος} other {Αποδοχή αιτημάτων}}", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 00a68df78b..366ba8a25e 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -28,12 +28,10 @@ "account.block_domain": "Block domain {domain}", "account.block_short": "Block", "account.blocked": "Blocked", - "account.blocking": "Blocking", "account.cancel_follow_request": "Cancel follow", "account.copy": "Copy link to profile", "account.direct": "Privately mention @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocking": "Blocking domain", "account.edit_note": "Edit personal note", "account.edit_profile": "Edit profile", "account.edit_profile_short": "Edit", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Mute notifications", "account.mute_short": "Mute", "account.muted": "Muted", - "account.muting": "Muting", "account.mutual": "You follow each other", "account.name.copy": "Copy handle", "account.name.help.domain": "{domain} is the server that hosts the user’s profile and posts.", @@ -135,7 +132,6 @@ "account.remove_from_followers": "Remove {name} from followers", "account.report": "Report @{name}", "account.requested_follow": "{name} has requested to follow you", - "account.requests_to_follow_you": "Requests to follow you", "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} posts}}", @@ -153,7 +149,6 @@ "account_edit.advanced_settings.bot_hint": "Signal to others that the account mainly performs automated actions and might not be monitored", "account_edit.advanced_settings.bot_label": "Automated account", "account_edit.advanced_settings.title": "Advanced settings", - "account_edit.bio.add_label": "", "account_edit.bio.edit_label": "Edit bio", "account_edit.bio.placeholder": "Add a short introduction to help others identify you.", "account_edit.bio.title": "Bio", @@ -169,23 +164,16 @@ "account_edit.custom_fields.tip_title": "Tip: adding verified links", "account_edit.custom_fields.title": "Custom fields", "account_edit.custom_fields.verified_hint": "How do I add a verified link?", - "account_edit.display_name.add_label": "He", - "account_edit.display_name.edit_label": "Xs", "account_edit.display_name.placeholder": "Your display name is how your name appears on your profile and in timelines.", "account_edit.display_name.title": "Display name", "account_edit.featured_hashtags.edit_label": "Add hashtags", "account_edit.featured_hashtags.placeholder": "Help others identify, and have quick access to, your favourite topics.", "account_edit.featured_hashtags.title": "Featured hashtags", - "account_edit.field_actions.delete": "Delete", - "account_edit.field_actions.edit": "Edit", "account_edit.field_delete_modal.confirm": "Are you sure you want to delete this custom field? This action can’t be undone.", "account_edit.field_delete_modal.delete_button": "Delete", "account_edit.field_delete_modal.title": "Delete custom field?", "account_edit.field_edit_modal.add_title": "Add custom field", - "account_edit.field_edit_modal.discard_confirm": "Confirm", - "account_edit.field_edit_modal.discard_message": "Discord them", "account_edit.field_edit_modal.edit_title": "Edit custom field", - "account_edit.field_edit_modal.length_warning": "Lenght_warning", "account_edit.field_edit_modal.link_emoji_warning": "We recommend against the use of custom emoji in combination with URLs. Custom fields containing both will display as text only instead of as a link, in order to prevent user confusion.", "account_edit.field_edit_modal.name_hint": "Eg “Personal website”", "account_edit.field_edit_modal.name_label": "Label", @@ -200,7 +188,6 @@ "account_edit.field_reorder_modal.drag_start": "Picked up field \"{item}\".", "account_edit.field_reorder_modal.handle_label": "Drag field \"{item}\"", "account_edit.field_reorder_modal.title": "Rearrange fields", - "account_edit.image_alt_modal.add_title": "Iphone xs", "account_edit.image_alt_modal.details_content": "DO: Describe yourself as pictured Use third person language (e.g. “Alex” instead of “me”) Be succinct – a few words is often enough DON’T: Start with “Photo of” – it’s redundant for screen readers EXAMPLE: “Alex wearing a green shirt and glasses” ", "account_edit.image_alt_modal.details_title": "Tips: Alt text for profile photos", "account_edit.image_alt_modal.edit_title": "Edit alt text", @@ -214,8 +201,6 @@ "account_edit.image_edit.alt_edit_button": "Edit alt text", "account_edit.image_edit.remove_button": "Remove image", "account_edit.image_edit.replace_button": "Replace image", - "account_edit.item_list.delete": "Rifat Chowdhury", - "account_edit.item_list.edit": "Anas Chowdhury", "account_edit.name_modal.add_title": "Add display name", "account_edit.name_modal.edit_title": "Edit display name", "account_edit.profile_tab.button_label": "Customise", @@ -227,17 +212,11 @@ "account_edit.profile_tab.show_media.title": "Show ‘Media’ tab", "account_edit.profile_tab.show_media_replies.description": "When enabled, Media tab shows both your posts and replies to other people’s posts.", "account_edit.profile_tab.show_media_replies.title": "Include replies on ‘Media’ tab", - "account_edit.profile_tab.subtitle": "Customise the tabs on your profile and what they display.", - "account_edit.profile_tab.title": "Profile tab settings", "account_edit.save": "Save", - "account_edit.upload_modal.back": "Iphone xs", "account_edit.upload_modal.done": "Done", "account_edit.upload_modal.next": "Next", - "account_edit.upload_modal.step_crop.zoom": "I'm ", - "account_edit.upload_modal.step_upload.button": "The only way", "account_edit.upload_modal.step_upload.dragging": "Drop to upload", "account_edit.upload_modal.step_upload.header": "Choose an image", - "account_edit.upload_modal.step_upload.hint": "The only way I could do that was if you had to do a lot more work and then you would be done ", "account_edit.upload_modal.title_add.avatar": "Add profile photo", "account_edit.upload_modal.title_add.header": "Add cover photo", "account_edit.upload_modal.title_replace.avatar": "Replace profile photo", @@ -373,7 +352,6 @@ "collections.accounts.empty_editor_title": "No one is in this collection yet", "collections.accounts.empty_title": "This collection is empty", "collections.block_collection_owner": "Block account", - "collections.by_account": "Delete", "collections.collection_description": "Description", "collections.collection_language": "Language", "collections.collection_language_none": "None", @@ -387,11 +365,9 @@ "collections.create.accounts_title": "Who will you feature in this collection?", "collections.create.basic_details_title": "Basic details", "collections.create.steps": "Step {step}/{total}", - "collections.create_a_collection_hint": "Create a collection to recommend or share your favourite accounts with others.", "collections.create_collection": "Create collection", "collections.delete_collection": "Delete collection", "collections.description_length_hint": "100 characters limit", - "collections.detail.accounts_heading": "Accounts", "collections.detail.author_added_you_on_date": "{author} added you on {date}", "collections.detail.loading": "Loading collection…", "collections.detail.revoke_inclusion": "Remove me", @@ -400,7 +376,6 @@ "collections.detail.share": "Share this collection", "collections.detail.you_are_in_this_collection": "You're featured in this collection", "collections.edit_details": "Edit details", - "collections.error_loading_collections": "There was an error when trying to load your collections.", "collections.hidden_accounts_description": "You’ve blocked or muted {count, plural, one {this user} other {these users}}", "collections.hidden_accounts_link": "{count, plural, one {# hidden account} other {# hidden accounts}}", "collections.hints.accounts_counter": "{count}/{max} accounts", @@ -412,7 +387,6 @@ "collections.maximum_collection_count_reached": "You have created the maximum number of collections", "collections.name_length_hint": "40 characters limit", "collections.new_collection": "New collection", - "collections.no_collections_yet": "No collections yet.", "collections.remove_account": "Remove", "collections.report_collection": "Report this collection", "collections.revoke_collection_inclusion": "Remove myself from this collection", @@ -454,7 +428,6 @@ "column.list_members": "Manage list members", "column.lists": "Lists", "column.mutes": "Muted users", - "column.my_collections": "My collections", "column.notifications": "Notifications", "column.other_collections": "Collections by {name}", "column.pins": "Pinned posts", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index d72d8b986b..95a6649871 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -28,12 +28,10 @@ "account.block_domain": "Block domain {domain}", "account.block_short": "Block", "account.blocked": "Blocked", - "account.blocking": "Blocking", "account.cancel_follow_request": "Cancel follow", "account.copy": "Copy link to profile", "account.direct": "Privately mention @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocking": "Blocking domain", "account.edit_note": "Edit personal note", "account.edit_profile": "Edit profile", "account.edit_profile_short": "Edit", @@ -111,12 +109,11 @@ "account.mute_notifications_short": "Mute notifications", "account.mute_short": "Mute", "account.muted": "Muted", - "account.muting": "Muting", "account.mutual": "You follow each other", "account.name.copy": "Copy handle", "account.name.help.domain": "{domain} is the server that hosts the user’s profile and posts.", "account.name.help.domain_self": "{domain} is your server that hosts your profile and posts.", - "account.name.help.footer": "Just like you can send emails to people using different email providers, you can interact with people on other Mastodon servers, and with anyone on other Mastodon-compatible social apps.", + "account.name.help.footer": "Just like you can send emails to people using different email providers, you can interact with people on other Mastodon servers, and with anyone on other Fediverse apps.", "account.name.help.header": "A handle is like an email address", "account.name.help.username": "{username} is this account’s username on their server. Someone on another server might have the same username.", "account.name.help.username_self": "{username} is your username on this server. Someone on another server might have the same username.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Edit", "account.note.title": "Personal note (visible only to you)", "account.open_original_page": "Open original page", + "account.pending": "Pending", "account.posts": "Posts", "account.remove_from_followers": "Remove {name} from followers", "account.report": "Report @{name}", "account.requested_follow": "{name} has requested to follow you", - "account.requests_to_follow_you": "Requests to follow you", "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} posts}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "Show ‘Media’ tab", "account_edit.profile_tab.show_media_replies.description": "When enabled, Media tab shows both your posts and replies to other people’s posts.", "account_edit.profile_tab.show_media_replies.title": "Include replies on ‘Media’ tab", - "account_edit.profile_tab.subtitle": "Customize the tabs on your profile and what they display.", - "account_edit.profile_tab.title": "Profile tab settings", + "account_edit.profile_tab.show_relations.description": "Shows accounts you follow and followers to other users in your profile. People will still be able to see if you are following them.", + "account_edit.profile_tab.show_relations.title": "Show ‘Followers’ and ‘Following’", + "account_edit.profile_tab.subtitle": "Customize how your profile is displayed.", + "account_edit.profile_tab.title": "Profile display settings", "account_edit.save": "Save", "account_edit.upload_modal.back": "Back", "account_edit.upload_modal.done": "Done", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "Enter a hashtag…", "account_edit_tags.suggestions": "Suggestions:", "account_edit_tags.tag_status_count": "{count, plural, one {# post} other {# posts}}", + "account_list.hidden_notice": "This is only visible to you. To show this list to others, go to {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# account} other {# accounts}}", "account_note.placeholder": "Click to add note", "admin.dashboard.daily_retention": "User retention rate by day after sign-up", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "Who will you feature in this collection?", "collections.create.basic_details_title": "Basic details", "collections.create.steps": "Step {step}/{total}", - "collections.create_a_collection_hint": "Create a collection to recommend or share your favourite accounts with others.", "collections.create_collection": "Create collection", "collections.delete_collection": "Delete collection", "collections.description_length_hint": "100 characters limit", - "collections.detail.accounts_heading": "Accounts", "collections.detail.author_added_you_on_date": "{author} added you on {date}", "collections.detail.loading": "Loading collection…", "collections.detail.revoke_inclusion": "Remove me", @@ -400,11 +398,15 @@ "collections.detail.share": "Share this collection", "collections.detail.you_are_in_this_collection": "You're featured in this collection", "collections.edit_details": "Edit details", - "collections.error_loading_collections": "There was an error when trying to load your collections.", + "collections.error_loading_collections": "There was an error when trying to load these collections.", "collections.hidden_accounts_description": "You’ve blocked or muted {count, plural, one {this user} other {these users}}", "collections.hidden_accounts_link": "{count, plural, one {# hidden account} other {# hidden accounts}}", "collections.hints.accounts_counter": "{count}/{max} accounts", "collections.last_updated_at": "Last updated: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Collection} other {# Collections}}", + "collections.list.created_by_author": "Created by {name}", + "collections.list.created_by_you": "Created by you", + "collections.list.featuring_you": "Featuring you", "collections.manage_accounts": "Manage accounts", "collections.mark_as_sensitive": "Mark as sensitive", "collections.mark_as_sensitive_hint": "Hides the collection's description and accounts behind a content warning. The collection name will still be visible.", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "You have created the maximum number of collections", "collections.name_length_hint": "40 characters limit", "collections.new_collection": "New collection", - "collections.no_collections_yet": "No collections yet.", + "collections.pending_accounts.message": "Accounts may appear as pending when we’re awaiting a response from the user or their server. Only you can see pending accounts.", + "collections.pending_accounts.title": "Why am I seeing pending accounts?", "collections.remove_account": "Remove", "collections.report_collection": "Report this collection", "collections.revoke_collection_inclusion": "Remove myself from this collection", @@ -454,11 +457,11 @@ "column.list_members": "Manage list members", "column.lists": "Lists", "column.mutes": "Muted users", - "column.my_collections": "My collections", "column.notifications": "Notifications", "column.other_collections": "Collections by {name}", "column.pins": "Pinned posts", "column.public": "Federated timeline", + "column.your_collections": "Your Collections", "column_back_button.label": "Back", "column_header.hide_settings": "Hide settings", "column_header.moveLeft_settings": "Move column to the left", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.", + "empty_column.collections.featured_in": "You have not been added to any collections yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.disabled_feed": "This feed has been disabled by your server administrators.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 97ab396897..ae0f37e8eb 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -22,12 +22,10 @@ "account.block_domain": "Bloki la domajnon {domain}", "account.block_short": "Bloko", "account.blocked": "Blokita", - "account.blocking": "Bloko", "account.cancel_follow_request": "Nuligi peton por sekvado", "account.copy": "Kopii ligilon al profilo", "account.direct": "Private mencii @{name}", "account.disable_notifications": "Ĉesu sciigi min kiam @{name} afiŝas", - "account.domain_blocking": "Blokas domajnon", "account.edit_profile": "Redakti la profilon", "account.edit_profile_short": "Redakti", "account.enable_notifications": "Sciigu min kiam @{name} afiŝos", @@ -65,7 +63,6 @@ "account.mute_notifications_short": "Silentigu sciigojn", "account.mute_short": "Silentigu", "account.muted": "Silentigita", - "account.muting": "Silentas", "account.mutual": "Vi sekvas unu la alian", "account.no_bio": "Neniu priskribo estas provizita.", "account.node_modal.field_label": "Persona noto", @@ -74,7 +71,6 @@ "account.remove_from_followers": "Forigi {name}-n de sekvantoj", "account.report": "Raporti @{name}", "account.requested_follow": "{name} petis sekvi vin", - "account.requests_to_follow_you": "Petoj sekvi vin", "account.share": "Diskonigi la profilon de @{name}", "account.show_reblogs": "Montri diskonigojn de @{name}", "account.statuses_counter": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}", @@ -156,7 +152,6 @@ "closed_registrations_modal.title": "Registriĝi en Mastodon", "collections.create_collection": "Krei kolekton", "collections.delete_collection": "Forigi kolekton", - "collections.error_loading_collections": "Okazis eraro provante ŝargi viajn kolektojn.", "column.about": "Pri", "column.blocks": "Blokitaj uzantoj", "column.bookmarks": "Legosignoj", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index e9a943c2a0..c80e61ae95 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquear dominio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.blocking": "Bloqueo", "account.cancel_follow_request": "Dejar de seguir", "account.copy": "Copiar enlace al perfil", "account.direct": "Mención privada a @{name}", "account.disable_notifications": "Dejar de notificarme cuando @{name} envíe mensajes", - "account.domain_blocking": "Dominio bloqueado", "account.edit_note": "Editar nota personal", "account.edit_profile": "Editar perfil", "account.edit_profile_short": "Editar", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", - "account.muting": "Silenciada", "account.mutual": "Se siguen mutuamente", "account.name.copy": "Copiar alias", "account.name.help.domain": "«{domain}» es el servidor que hospeda el perfil y los mensajes del usuario.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Editar", "account.note.title": "Nota personal (visible solo para vos)", "account.open_original_page": "Abrir página original", + "account.pending": "Pendiente", "account.posts": "Mensajes", "account.remove_from_followers": "Quitar a {name} de tus seguidores", "account.report": "Denunciar a @{name}", "account.requested_follow": "{name} solicitó seguirte", - "account.requests_to_follow_you": "Solicita seguirte", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar adhesiones de @{name}", "account.statuses_counter": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestaña «Medios»", "account_edit.profile_tab.show_media_replies.description": "Cuando está habilitada, la pestaña «Medios» muestra tanto tus mensajes como tus respuestas a otras cuentas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respuestas en la pestaña «Medios»", - "account_edit.profile_tab.subtitle": "Personalizá las pestañas en tu perfil y qué van a mostrar.", - "account_edit.profile_tab.title": "Configuración de pestaña de perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Volver", "account_edit.upload_modal.done": "Listo", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "¿A quién vas a destacar en esta colección?", "collections.create.basic_details_title": "Detalles básicos", "collections.create.steps": "Paso {step}/{total}", - "collections.create_a_collection_hint": "Creá una colección para recomendar o compartir tus cuentas favoritas con otras personas.", "collections.create_collection": "Crear colección", "collections.delete_collection": "Eliminar colección", "collections.description_length_hint": "Límite de 100 caracteres", - "collections.detail.accounts_heading": "Cuentas", "collections.detail.author_added_you_on_date": "{author} te agregó el {date}", "collections.detail.loading": "Cargando colección…", "collections.detail.revoke_inclusion": "Quitarme", @@ -400,11 +393,14 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Te destacaron en esta colección", "collections.edit_details": "Editar detalles", - "collections.error_loading_collections": "Hubo un error al intentar cargar tus colecciones.", "collections.hidden_accounts_description": "Bloqueaste o silenciaste a {count, plural, one {este usuario} other {estos usuarios}}", "collections.hidden_accounts_link": "{count, plural, one {# cuenta oculta} other {# cuentas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} cuentas", "collections.last_updated_at": "Última actualización: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Colección} other {# Colecciones}}", + "collections.list.created_by_author": "Creadas por {name}", + "collections.list.created_by_you": "Creadas por vos", + "collections.list.featuring_you": "En las que te destacan", "collections.manage_accounts": "Administrar cuentas", "collections.mark_as_sensitive": "Marcar como sensible", "collections.mark_as_sensitive_hint": "Oculta la descripción de la colección y las cuentas detrás de una advertencia de contenido. El nombre de la colección seguirá siendo visible.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Creaste el número máximo de colecciones", "collections.name_length_hint": "Límite de 40 caracteres", "collections.new_collection": "Nueva colección", - "collections.no_collections_yet": "No hay colecciones aún.", + "collections.pending_accounts.message": "Las cuentas pueden aparecer como pendientes cuando estamos esperando una respuesta del usuario o su servidor. Solo vos podés ver cuentas pendientes.", + "collections.pending_accounts.title": "¿Por qué estoy viendo cuentas pendientes?", "collections.remove_account": "Quitar", "collections.report_collection": "Denunciar esta colección", "collections.revoke_collection_inclusion": "Quitarme de esta colección", @@ -454,11 +451,11 @@ "column.list_members": "Administrar miembros de la lista", "column.lists": "Listas", "column.mutes": "Usuarios silenciados", - "column.my_collections": "Mis colecciones", "column.notifications": "Notificaciones", "column.other_collections": "Colecciones de {name}", "column.pins": "Mensajes fijados", "column.public": "Línea temporal federada", + "column.your_collections": "Tus colecciones", "column_back_button.label": "Volver", "column_header.hide_settings": "Ocultar configuración", "column_header.moveLeft_settings": "Mover columna a la izquierda", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index cc93beda77..67d866a1c3 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquear dominio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.blocking": "Bloqueando", "account.cancel_follow_request": "Cancelar seguimiento", "account.copy": "Copiar enlace al perfil", "account.direct": "Mención privada @{name}", "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", - "account.domain_blocking": "Bloqueando dominio", "account.edit_note": "Editar nota personal", "account.edit_profile": "Editar perfil", "account.edit_profile_short": "Editar", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", - "account.muting": "Silenciando", "account.mutual": "Se siguen el uno al otro", "account.name.copy": "Copiar identificador", "account.name.help.domain": "{domain} es el servidor que aloja el perfil y las publicaciones del usuario.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Editar", "account.note.title": "Nota personal (visible solo para ti)", "account.open_original_page": "Abrir página original", + "account.pending": "Pendiente", "account.posts": "Publicaciones", "account.remove_from_followers": "Eliminar {name} de tus seguidores", "account.report": "Denunciar a @{name}", "account.requested_follow": "{name} ha solicitado seguirte", - "account.requests_to_follow_you": "Solicita seguirte", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestaña «Multimedia»", "account_edit.profile_tab.show_media_replies.description": "Cuando está habilitada, la pestaña Multimedia muestra tanto tus publicaciones como tus respuestas a las publicaciones de otras personas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respuestas en la pestaña «Multimedia»", - "account_edit.profile_tab.subtitle": "Personaliza las pestañas de tu perfil y lo que muestran.", - "account_edit.profile_tab.title": "Configuración de la pestaña de perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Volver", "account_edit.upload_modal.done": "Hecho", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "¿A quién incluirás en esta colección?", "collections.create.basic_details_title": "Detalles básicos", "collections.create.steps": "Paso {step}/{total}", - "collections.create_a_collection_hint": "Crea una colección para recomendar o compartir tus cuentas favoritas con otras personas.", "collections.create_collection": "Crear colección", "collections.delete_collection": "Eliminar colección", "collections.description_length_hint": "Limitado a 100 caracteres", - "collections.detail.accounts_heading": "Cuentas", "collections.detail.author_added_you_on_date": "{author} te agregó el {date}", "collections.detail.loading": "Cargando colección…", "collections.detail.revoke_inclusion": "Excluirme", @@ -400,11 +393,14 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Apareces en esta colección", "collections.edit_details": "Editar detalles", - "collections.error_loading_collections": "Se produjo un error al intentar cargar tus colecciones.", "collections.hidden_accounts_description": "Has bloqueado o silenciado {count, plural, one {a este usuario} other {a estos usuarios}}", "collections.hidden_accounts_link": "{count, plural, one {# cuenta oculta} other {# cuentas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} cuentas", "collections.last_updated_at": "Última actualización: {date}", + "collections.list.collections_with_count": "{count, plural,one {# Colección} other {# Colecciones}}", + "collections.list.created_by_author": "Creado por {name}", + "collections.list.created_by_you": "Creado por ti", + "collections.list.featuring_you": "Con tu partipación", "collections.manage_accounts": "Administrar cuentas", "collections.mark_as_sensitive": "Marcar como sensible", "collections.mark_as_sensitive_hint": "Oculta la descripción y las cuentas de la colección detrás de una advertencia de contenido. El nombre de la colección seguirá siendo visible.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Has alcanzado el número máximo de colecciones", "collections.name_length_hint": "Limitado a 40 caracteres", "collections.new_collection": "Nueva colección", - "collections.no_collections_yet": "No hay colecciones todavía.", + "collections.pending_accounts.message": "Las cuentas pueden aparecer como pendientes cuando estamos esperando una respuesta del usuario o de su servidor. Solo tú puedes ver las cuentas pendientes.", + "collections.pending_accounts.title": "¿Por qué estoy viendo cuentas pendientes?", "collections.remove_account": "Eliminar", "collections.report_collection": "Reportar esta colección", "collections.revoke_collection_inclusion": "Excluirme de esta colección", @@ -454,11 +451,11 @@ "column.list_members": "Administrar miembros de la lista", "column.lists": "Listas", "column.mutes": "Usuarios silenciados", - "column.my_collections": "Mis colecciones", "column.notifications": "Notificaciones", "column.other_collections": "Colecciones de {name}", "column.pins": "Publicaciones fijadas", "column.public": "Cronología federada", + "column.your_collections": "Tus colecciones", "column_back_button.label": "Atrás", "column_header.hide_settings": "Ocultar configuración", "column_header.moveLeft_settings": "Mover columna a la izquierda", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 1ecaa9f5f9..e58e6598ba 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquear dominio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.blocking": "Bloqueando", "account.cancel_follow_request": "Retirar solicitud de seguimiento", "account.copy": "Copiar enlace al perfil", "account.direct": "Mención privada a @{name}", "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", - "account.domain_blocking": "Bloqueando dominio", "account.edit_note": "Eidtar nota personal", "account.edit_profile": "Editar perfil", "account.edit_profile_short": "Editar", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", - "account.muting": "Silenciando", "account.mutual": "Os seguís mutuamente", "account.name.copy": "Copiar alias", "account.name.help.domain": "{domain} es el servidor que alberga el perfil y las publicaciones del usuario.", @@ -135,7 +132,6 @@ "account.remove_from_followers": "Eliminar {name} de tus seguidores", "account.report": "Reportar a @{name}", "account.requested_follow": "{name} ha solicitado seguirte", - "account.requests_to_follow_you": "Solicita seguirte", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", @@ -227,8 +223,6 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestaña «Multimedia»", "account_edit.profile_tab.show_media_replies.description": "Cuando está activado, la pestaña Multimedia muestra tanto tus publicaciones como tus respuestas a las publicaciones de otras personas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respuestas en la pestaña «Multimedia»", - "account_edit.profile_tab.subtitle": "Personaliza las pestañas de tu perfil y lo que muestran.", - "account_edit.profile_tab.title": "Configuración de la pestaña de perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Atrás", "account_edit.upload_modal.done": "Hecho", @@ -387,11 +381,9 @@ "collections.create.accounts_title": "¿A quién vas a destacar en esta colección?", "collections.create.basic_details_title": "Datos básicos", "collections.create.steps": "Paso {step}/{total}", - "collections.create_a_collection_hint": "Crea una colección para recomendar o compartir tus cuentas favoritas con otros.", "collections.create_collection": "Crear colección", "collections.delete_collection": "Eliminar colección", "collections.description_length_hint": "Limitado a 100 caracteres", - "collections.detail.accounts_heading": "Cuentas", "collections.detail.author_added_you_on_date": "{author} te agregó el {date}", "collections.detail.loading": "Cargando colección…", "collections.detail.revoke_inclusion": "Sácame de aquí", @@ -400,7 +392,6 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Apareces en esta colección", "collections.edit_details": "Editar detalles", - "collections.error_loading_collections": "Se ha producido un error al intentar cargar tus colecciones.", "collections.hidden_accounts_description": "Has bloqueado o silenciado {count, plural,one {a este usuario}other {a estos usuarios}}", "collections.hidden_accounts_link": "{count, plural, one {# cuenta oculta} other {# cuentas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} cuentas", @@ -412,7 +403,6 @@ "collections.maximum_collection_count_reached": "Has creado el número máximo de colecciones", "collections.name_length_hint": "Límite de 40 caracteres", "collections.new_collection": "Nueva colección", - "collections.no_collections_yet": "Aún no hay colecciones.", "collections.remove_account": "Eliminar", "collections.report_collection": "Informar de esta colección", "collections.revoke_collection_inclusion": "Sácame de esta colección", @@ -454,7 +444,6 @@ "column.list_members": "Administrar miembros de la lista", "column.lists": "Listas", "column.mutes": "Usuarios silenciados", - "column.my_collections": "Mis colecciones", "column.notifications": "Notificaciones", "column.other_collections": "Colecciones de {name}", "column.pins": "Publicaciones fijadas", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 257edd2576..3ed32e1767 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -28,12 +28,10 @@ "account.block_domain": "Blokeeri kõik domeenist {domain}", "account.block_short": "Blokeeri", "account.blocked": "Blokeeritud", - "account.blocking": "Blokeeritud kasutaja", "account.cancel_follow_request": "Võta jälgimissoov tagasi", "account.copy": "Kopeeri profiili link", "account.direct": "Maini privaatselt kasutajat @{name}", "account.disable_notifications": "Ära teavita, kui @{name} postitab", - "account.domain_blocking": "Blokeeritud domeen", "account.edit_note": "Muuda isiklikku märget", "account.edit_profile": "Muuda profiili", "account.edit_profile_short": "Muuda", @@ -85,9 +83,9 @@ "account.languages": "Muuda tellitud keeli", "account.last_active": "Viimati aktiivne", "account.link_verified_on": "Selle lingi autorsus on kontrollitud {date}", - "account.locked_info": "Selle konto privaatsussätteks on lukustatud. Omanik vaatab käsitsi üle, kes teda jälgida saab.", + "account.locked_info": "Selle konto privaatsusolek on „lukustatud“. Omanik vaatab üle, kes teda jälgida saab.", "account.media": "Meedium", - "account.mention": "Maini @{name}", + "account.mention": "Maini kasutajat @{name}", "account.menu.add_to_list": "Lisa loendisse…", "account.menu.block": "Blokeeri kasutajakonto", "account.menu.block_domain": "Blokeeri {domain}", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Summuta teavitused", "account.mute_short": "Summuta", "account.muted": "Summutatud", - "account.muting": "Summutatud konto", "account.mutual": "Te jälgite teineteist", "account.name.copy": "Kopeeri kasutajatunnus", "account.name.help.domain": "{domain} on server, kus antud konto koos profiiliga asub ning kust postitused saavad alguse.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Muuda", "account.note.title": "Isiklikud märked (nähtavad vaid sulle)", "account.open_original_page": "Ava algne leht", + "account.pending": "Ootel", "account.posts": "Postitused", "account.remove_from_followers": "Eemalda {name} jälgijate seast", "account.report": "Teata kasutajast {name}", "account.requested_follow": "{name} on soovinud sinu jälgimist", - "account.requests_to_follow_you": "soovib sind jälgida", "account.share": "Jaga @{name} profiili", "account.show_reblogs": "Näita @{name} jagamisi", "account.statuses_counter": "{count, plural, one {{counter} postitus} other {{counter} postitust}}", @@ -192,26 +189,26 @@ "account_edit.field_edit_modal.url_warning": "Lingi lisamisel lisa palun algusesse {protocol}.", "account_edit.field_edit_modal.value_hint": "Näit. \"https://naiteks.me\"", "account_edit.field_edit_modal.value_label": "Väärtus", - "account_edit.field_reorder_modal.drag_cancel": "Lohistamine tühistati. Väli \"{item}\" kukutati.", - "account_edit.field_reorder_modal.drag_end": "Väli \"{item}\" kukutati.", - "account_edit.field_reorder_modal.drag_instructions": "Kohandatud väljade ümberjärjestamiseks vajuta tühikut või Enterit. Lohistamise ajal kasuta nooleklahve, et liigutada välja üles või alla. Vajuta uuesti tühikut või Enterit, et paigutada väli uuele kohale, või vajuta Esc, et tühistada.", - "account_edit.field_reorder_modal.drag_move": "Väli \"{item}\" on teisaldatud.", - "account_edit.field_reorder_modal.drag_over": "Väli \"{item}\" teisaldati \"{over}\" kohale.", - "account_edit.field_reorder_modal.drag_start": "Võeti väli \"{item}\".", - "account_edit.field_reorder_modal.handle_label": "Välja \"{item}\" lohistamine", + "account_edit.field_reorder_modal.drag_cancel": "Lohistamine tühistati. „{item}“ väli on eemaldatud.", + "account_edit.field_reorder_modal.drag_end": "„{item}“ väli eemaldati.", + "account_edit.field_reorder_modal.drag_instructions": "Kohandatud väljade järjestuse muutmiseks vajuta tühikut või sisestusklahvi. Lohistamise ajal kasuta nooleklahve, et liigutada välja üles või alla. Vajuta uuesti tühikut või sisestusklahvi, et paigutada väli uuele kohale, või tühistamiseks vajuta Esc-klahvi.", + "account_edit.field_reorder_modal.drag_move": "„{item}“ väli on teisaldatud.", + "account_edit.field_reorder_modal.drag_over": "„{item}“ väli teisaldati „{over}“ välja kohale.", + "account_edit.field_reorder_modal.drag_start": "Valisid „{item}“ välja.", + "account_edit.field_reorder_modal.handle_label": "Lohistad „{item}“ välja", "account_edit.field_reorder_modal.title": "Väljade järjestuse muutmine", - "account_edit.image_alt_modal.add_title": "Lisa alt-tekst", - "account_edit.image_alt_modal.details_content": "TEE NII: Kirjelda end pildil olevana Kasuta kolmandat isikut (nt „Alex“ mitte „mina“) Ole lakooniline – paar sõna on sageli piisav ÄRA TEE NII: Ära alusta sõnadega „Foto“ – see on ekraanilugeja kasutajale üleliigne NÄIDE: „Alex, kes kannab rohelist särki ja prille” ", - "account_edit.image_alt_modal.details_title": "Soovitus: Alt-tekst profiili fotode jaoks", - "account_edit.image_alt_modal.edit_title": "Muuda alt-teksti", - "account_edit.image_alt_modal.text_hint": "Alt-tekst aitab ekraanilugeja kasutajatel sinu sisu mõista.", - "account_edit.image_alt_modal.text_label": "Alt-tekst", + "account_edit.image_alt_modal.add_title": "Lisa selgitustekst", + "account_edit.image_alt_modal.details_content": "TEE NII: Kirjelda end pildil olevana Kasuta kolmandat isikut (nt „Alex“ mitte „mina“) Ole lakooniline – paar sõna on sageli piisav ÄRA TEE NII: Ära alusta sõnadega „Foto“ – see on ekraanilugeja kasutajale üleliigne NÄIDE: „Alex, kes kannab rohelist särki ja prille“ ", + "account_edit.image_alt_modal.details_title": "Soovitus: Selgitustekst profiili fotode jaoks", + "account_edit.image_alt_modal.edit_title": "Muuda selgitusteksti", + "account_edit.image_alt_modal.text_hint": "Selgitustekst aitab ekraanilugeja kasutajatel sinu sisu mõista.", + "account_edit.image_alt_modal.text_label": "Selgitustekst", "account_edit.image_delete_modal.confirm": "Kas oled kindel, et soovid selle pildi kustutada? Seda toimingut ei saa tagasi võtta.", "account_edit.image_delete_modal.delete_button": "Kustuta", - "account_edit.image_delete_modal.title": "Kustuta pilt?", + "account_edit.image_delete_modal.title": "Kas kustutad pildi?", "account_edit.image_edit.add_button": "Lisa pilt", - "account_edit.image_edit.alt_add_button": "Lisa alt-tekst", - "account_edit.image_edit.alt_edit_button": "Muuda alt-teksti", + "account_edit.image_edit.alt_add_button": "Lisa selgitustekst", + "account_edit.image_edit.alt_edit_button": "Muuda selgitusteksti", "account_edit.image_edit.remove_button": "Eemalda pilt", "account_edit.image_edit.replace_button": "Asenda pilt", "account_edit.item_list.delete": "Kustuta {name}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Näita multimeedia vahekaarti", "account_edit.profile_tab.show_media_replies.description": "Sisselülitatuna näitab mediumi vahekaart, nii sinu postitusi kui su vastuseid teiste kasutajate postitustele.", "account_edit.profile_tab.show_media_replies.title": "Kaasa vahekaardile „Meedium“ ka vastused", - "account_edit.profile_tab.subtitle": "Kohanda oma profiili vahekaarte ja nende sisu.", - "account_edit.profile_tab.title": "Profiili vahekaartide seadistused", "account_edit.save": "Salvesta", "account_edit.upload_modal.back": "Tagasi", "account_edit.upload_modal.done": "Valmis", @@ -299,14 +294,14 @@ "annual_report.summary.archetype.oracle.desc_public": "{name} lõi rohkem uusi postitusi kui vastuseid, hoides Mastodoni värskena ja tulevikku suunatuna.", "annual_report.summary.archetype.oracle.desc_self": "Sa lõid rohkem uusi postitusi kui vastuseid, hoides Mastodoni värskena ja tulevikku suunatuna.", "annual_report.summary.archetype.oracle.name": "Oraakel", - "annual_report.summary.archetype.pollster.desc_public": "{name} lõi rohkem küsitlusi kui teisi postituse tüüpe, äratades Mastodonis uudishimu.", - "annual_report.summary.archetype.pollster.desc_self": "Sa lõid rohkem küsitlusi kui teisi postituse tüüpe, äratades Mastodonis uudishimu.", + "annual_report.summary.archetype.pollster.desc_public": "{name} koostas rohkem küsitlusi kui teisi postituse tüüpe, äratades Mastodonis uudishimu.", + "annual_report.summary.archetype.pollster.desc_self": "Sa koostasid rohkem küsitlusi kui teisi postituse tüüpe, äratades Mastodonis uudishimu.", "annual_report.summary.archetype.pollster.name": "Uudishimulik", "annual_report.summary.archetype.replier.desc_public": "{name} vastas sageli teiste inimeste postitustele, pakkudes Mastodonile uusi aruteluteemasid.", "annual_report.summary.archetype.replier.desc_self": "Sa vastasid sageli teiste inimeste postitustele, pakkudes Mastodonile uusi aruteluteemasid.", "annual_report.summary.archetype.replier.name": "Liblikas", "annual_report.summary.archetype.reveal": "Näita mu põhitüüpi", - "annual_report.summary.archetype.reveal_description": "Täname, et oled Mastodoni liige! Aeg on välja selgitada, millist põhitüüpi sa {year}. kehastasid.", + "annual_report.summary.archetype.reveal_description": "Täname, et oled tegutsed Mastodoni võrgus! Aeg on välja selgitada, millist põhitüüpi sa {year}. aastal kehastasid.", "annual_report.summary.archetype.title_public": "Kasutaja {name} põhitüüp", "annual_report.summary.archetype.title_self": "Sinu põhitüüp", "annual_report.summary.close": "Sulge", @@ -321,7 +316,7 @@ "annual_report.summary.most_used_hashtag.used_count": "Sa lisasid selle teemaviite {count, plural, one {ühele postitusele} other {#-le postitusele}}.", "annual_report.summary.most_used_hashtag.used_count_public": "{name} kasutas seda teemaviidet {count, plural, one {ühes postituses} other {#-s postituses}}.", "annual_report.summary.new_posts.new_posts": "uued postitused", - "annual_report.summary.percentile.text": "See paneb su top {domain} kasutajate hulka.", + "annual_report.summary.percentile.text": "See paneb su top {domain} serveri kasutajate hulka.", "annual_report.summary.percentile.we_wont_tell_bernie": "Vägev.", "annual_report.summary.share_elsewhere": "Jaga mujal", "annual_report.summary.share_message": "Minu arhetüüp on {archetype}!", @@ -331,12 +326,12 @@ "block_modal.remote_users_caveat": "Serverile {domain} edastatakse palve otsust järgida. Ometi pole see tagatud, kuna mõned serverid võivad blokeeringuid käsitleda omal moel. Avalikud postitused võivad tuvastamata kasutajatele endiselt näha olla.", "block_modal.show_less": "Kuva vähem", "block_modal.show_more": "Kuva rohkem", - "block_modal.they_cant_mention": "Ta ei saa mainida sind ega jälgida.", + "block_modal.they_cant_mention": "Ta ei saa sind mainida ega jälgida.", "block_modal.they_cant_see_posts": "Ta ei näe sinu postitusi ja sa ei näe tema omi.", "block_modal.they_will_know": "Ta näeb, et ta on blokeeritud.", - "block_modal.title": "Blokeeri kasutaja?", + "block_modal.title": "Kas blokeerid kasutaja?", "block_modal.you_wont_see_mentions": "Sa ei näe postitusi, mis mainivad teda.", - "boost_modal.combo": "Vajutades {combo}, saab selle edaspidi vahele jätta", + "boost_modal.combo": "Vajutades {combo}, saad selle edaspidi vahele jätta", "boost_modal.reblog": "Jagada postitust?", "boost_modal.undo_reblog": "Tühista postituse jagamine?", "bundle_column_error.copy_stacktrace": "Kopeeri veateade", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Kes saavad olema selles kogumikus?", "collections.create.basic_details_title": "Põhiandmed", "collections.create.steps": "Samm {step}/{total}", - "collections.create_a_collection_hint": "Soovitamaks oma lemmikuid teistele kasutajatele lisa asjakohane kogumik.", "collections.create_collection": "Loo kogumik", "collections.delete_collection": "Kustuta kogumik", "collections.description_length_hint": "Kuni 100 tähemärki", - "collections.detail.accounts_heading": "Kontod", "collections.detail.author_added_you_on_date": "{author} lisas sind ajal {date}", "collections.detail.loading": "Kogumiku laadimine…", "collections.detail.revoke_inclusion": "Eemalda mind", @@ -400,11 +393,14 @@ "collections.detail.share": "Jaga seda kogumikku", "collections.detail.you_are_in_this_collection": "Sa oled selles kogumikus esile tõstetud", "collections.edit_details": "Muuda üksikasju", - "collections.error_loading_collections": "Sinu kogumike laadimisel tekkis viga.", "collections.hidden_accounts_description": "Oled blokeerinud või vaigistanud {count, plural, one {selle kasutaja} other {need kasutajad}}", "collections.hidden_accounts_link": "{count, plural, one {# peidetud konto} other {# peidetud kontot}}", "collections.hints.accounts_counter": "{count}/{max} kontot", "collections.last_updated_at": "Viimati uuendatud: {date}", + "collections.list.collections_with_count": "{count, plural, one {# kogumik} other {# kogumikku}}", + "collections.list.created_by_author": "Looja: {name}", + "collections.list.created_by_you": "Sinu poolt loodud", + "collections.list.featuring_you": "Tõstab sind esile", "collections.manage_accounts": "Halda kasutajakontosid", "collections.mark_as_sensitive": "Märgi delikaatseks", "collections.mark_as_sensitive_hint": "Peidab kogumiku kirjelduse ja kontod sisuhoiatuse taha. Kogumiku nimi ise on sellele vaatamata nähtav.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Sa oled loonud nii palju kogumikke, kui on lubatud", "collections.name_length_hint": "40 märgi piir", "collections.new_collection": "Uus kogumik", - "collections.no_collections_yet": "Kogumikke veel pole.", + "collections.pending_accounts.message": "Kui oled ootamst vastut kasutajalt oma serverist, võivad kasutajakontod tunduda olema ootel olekus. Vaid sina saad näha ootel kasutajakontosid.", + "collections.pending_accounts.title": "Miks ma näen ootel kasutajakontosid?", "collections.remove_account": "Eemalda", "collections.report_collection": "Raporteeri sellest kogumikust", "collections.revoke_collection_inclusion": "Eemalda mind sellest kogumikust", @@ -454,11 +451,11 @@ "column.list_members": "Halda loendi liikmeid", "column.lists": "Loetelud", "column.mutes": "Summutatud kasutajad", - "column.my_collections": "Minu kogumikud", "column.notifications": "Teated", "column.other_collections": "Kasutaja {name} kogumikud", "column.pins": "Esiletõstetud postitused", "column.public": "Föderatiivne ajajoon", + "column.your_collections": "Sinu kogumikud", "column_back_button.label": "Tagasi", "column_header.hide_settings": "Peida sätted", "column_header.moveLeft_settings": "Liiguta tulp vasakule", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 16107dd956..dc58b8d677 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -21,12 +21,10 @@ "account.block_domain": "Blokeatu {domain} domeinua", "account.block_short": "Blokeatu", "account.blocked": "Blokeatuta", - "account.blocking": "Eragotzitakoak", "account.cancel_follow_request": "Baztertu jarraitzeko eskaera", "account.copy": "Kopiatu profilerako esteka", "account.direct": "Aipatu pribatuki @{name}", "account.disable_notifications": "Utzi jakinarazteari @{name} erabiltzaileak argitaratzean", - "account.domain_blocking": "Eragotzitako domeinua", "account.edit_profile": "Editatu profila", "account.edit_profile_short": "Editatu", "account.enable_notifications": "Jakinarazi @{name} erabiltzaileak argitaratzean", @@ -65,7 +63,6 @@ "account.mute_notifications_short": "Mututu jakinarazpenak", "account.mute_short": "Mututu", "account.muted": "Mutututa", - "account.muting": "Isilarazitakoak", "account.mutual": "Elkar jarraitzen duzue", "account.no_bio": "Ez da deskribapenik eman.", "account.open_original_page": "Ireki jatorrizko orria", @@ -73,7 +70,6 @@ "account.remove_from_followers": "Kendu {name} zure jarraitzaileengandik", "account.report": "Salatu @{name}", "account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du", - "account.requests_to_follow_you": "Zu jarraitzeko eskaera egin du", "account.share": "Partekatu @{name} erabiltzailearen profila", "account.show_reblogs": "Erakutsi @{name} erabiltzailearen bultzadak", "account.statuses_counter": "{count, plural, one {{counter} bidalketa} other {{counter} bidalketa}}", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index a6cd1c20a8..389a78798d 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -21,12 +21,10 @@ "account.block_domain": "انسداد دامنهٔ {domain}", "account.block_short": "انسداد", "account.blocked": "مسدود", - "account.blocking": "مسدود کرده", "account.cancel_follow_request": "رد کردن درخواست پیگیری", "account.copy": "رونوشت از پیوند به نمایه", "account.direct": "اشارهٔ خصوصی به @{name}", "account.disable_notifications": "آگاه کردن من هنگام فرستههای @{name} را متوقّف کن", - "account.domain_blocking": "دامنهٔ مسدود کرده", "account.edit_profile": "ویرایش نمایه", "account.edit_profile_short": "ویرایش", "account.enable_notifications": "هنگام فرستههای @{name} مرا آگاه کن", @@ -65,7 +63,6 @@ "account.mute_notifications_short": "خموشی آگاهیها", "account.mute_short": "خموشی", "account.muted": "خموش", - "account.muting": "خموشش کردهاید", "account.mutual": "یکدیگر را پی میگیرید", "account.no_bio": "شرحی فراهم نشده.", "account.open_original_page": "گشودن صفحهٔ اصلی", @@ -73,7 +70,6 @@ "account.remove_from_followers": "برداشتن {name} از پیگیران", "account.report": "گزارش @{name}", "account.requested_follow": "{name} درخواست پیگیریتان را داد", - "account.requests_to_follow_you": "درخواست پیگیریتان را دارد", "account.share": "همرسانی نمایهٔ @{name}", "account.show_reblogs": "نمایش تقویتهای @{name}", "account.statuses_counter": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 47a7e6ea5a..aca15536ba 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -28,12 +28,10 @@ "account.block_domain": "Estä verkkotunnus {domain}", "account.block_short": "Estä", "account.blocked": "Estetty", - "account.blocking": "Estetty", "account.cancel_follow_request": "Peruuta seurantapyyntö", "account.copy": "Kopioi linkki profiiliin", "account.direct": "Mainitse @{name} yksityisesti", "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee", - "account.domain_blocking": "Verkkotunnus estetty", "account.edit_note": "Muokkaa henkilökohtaista muistiinpanoa", "account.edit_profile": "Muokkaa profiilia", "account.edit_profile_short": "Muokkaa", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Mykistä ilmoitukset", "account.mute_short": "Mykistä", "account.muted": "Mykistetty", - "account.muting": "Mykistetty", "account.mutual": "Seuraatte toisianne", "account.name.copy": "Kopioi käyttäjätunnus", "account.name.help.domain": "{domain} on palvelin, jolla käyttäjän profiili ja julkaisut sijaitsevat.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Muokkaa", "account.note.title": "Henkilökohtainen muistiinpano (näkyy vain sinulle)", "account.open_original_page": "Avaa alkuperäinen sivu", + "account.pending": "Odottava", "account.posts": "Julkaisut", "account.remove_from_followers": "Poista {name} seuraajista", "account.report": "Raportoi @{name}", "account.requested_follow": "{name} on pyytänyt lupaa seurata sinua", - "account.requests_to_follow_you": "Pyynnöt seurata sinua", "account.share": "Jaa käyttäjän @{name} profiili", "account.show_reblogs": "Näytä käyttäjän @{name} tehostukset", "account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Näytä Media-välilehti", "account_edit.profile_tab.show_media_replies.description": "Kun käytössä, Media-välilehti näyttää sekä julkaisusi että vastauksesi muiden julkaisuihin.", "account_edit.profile_tab.show_media_replies.title": "Sisällytä vastaukset Media-välilehdelle", - "account_edit.profile_tab.subtitle": "Mukauta profiilisi välilehtiä ja sitä, mitä niissä näkyy.", - "account_edit.profile_tab.title": "Profiilin välilehtien asetukset", "account_edit.save": "Tallenna", "account_edit.upload_modal.back": "Takaisin", "account_edit.upload_modal.done": "Valmis", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Keitä esittelet tässä kokoelmassa?", "collections.create.basic_details_title": "Perustiedot", "collections.create.steps": "Vaihe {step}/{total}", - "collections.create_a_collection_hint": "Luomalla kokoelman voit suositella tai jakaa suosikkitilejäsi muiden kanssa.", "collections.create_collection": "Luo kokoelma", "collections.delete_collection": "Poista kokoelma", "collections.description_length_hint": "100 merkin rajoitus", - "collections.detail.accounts_heading": "Tilit", "collections.detail.author_added_you_on_date": "{author} lisäsi sinut {date}", "collections.detail.loading": "Ladataan kokoelmaa…", "collections.detail.revoke_inclusion": "Poista minut", @@ -400,11 +393,14 @@ "collections.detail.share": "Jaa tämä kokoelma", "collections.detail.you_are_in_this_collection": "Esiinnyt tässä kokoelmassa", "collections.edit_details": "Muokkaa tietoja", - "collections.error_loading_collections": "Kokoelmien latauksessa tapahtui virhe.", "collections.hidden_accounts_description": "Olet estänyt tai mykistänyt {count, plural, one {tämän käyttäjän} other {nämä käyttäjät}}", "collections.hidden_accounts_link": "{count, plural, one {# piilotettu tili} other {# piilotettua tiliä}}", "collections.hints.accounts_counter": "{count}/{max} tiliä", "collections.last_updated_at": "Päivitetty viimeksi {date}", + "collections.list.collections_with_count": "{count, plural, one {# kokoelma} other {# kokoelmaa}}", + "collections.list.created_by_author": "Luonut {name}", + "collections.list.created_by_you": "Itse luomasi", + "collections.list.featuring_you": "Esittelevät sinua", "collections.manage_accounts": "Hallitse tilejä", "collections.mark_as_sensitive": "Merkitse arkaluonteiseksi", "collections.mark_as_sensitive_hint": "Piilottaa kokoelman kuvauksen ja tilit sisältövaroituksen taakse. Kokoelman nimi jää esiin.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Olet luonut enimmäismäärän kokoelmia", "collections.name_length_hint": "40 merkin rajoitus", "collections.new_collection": "Uusi kokoelma", - "collections.no_collections_yet": "Ei vielä kokoelmia.", + "collections.pending_accounts.message": "Tilit saattavat näkyä odottavina, kun odotetaan vastausta käyttäjältä tai hänen palvelimeltaan. Vain sinä voit nähdä odottavat tilit.", + "collections.pending_accounts.title": "Miksi näen odottavia tilejä?", "collections.remove_account": "Poista", "collections.report_collection": "Raportoi tämä kokoelma", "collections.revoke_collection_inclusion": "Poista itseni tästä kokoelmasta", @@ -454,11 +451,11 @@ "column.list_members": "Hallitse listan jäseniä", "column.lists": "Listat", "column.mutes": "Mykistetyt käyttäjät", - "column.my_collections": "Omat kokoelmat", "column.notifications": "Ilmoitukset", "column.other_collections": "Käyttäjän {name} kokoelmat", "column.pins": "Kiinnitetyt julkaisut", "column.public": "Yleinen aikajana", + "column.your_collections": "Omat kokoelmat", "column_back_button.label": "Takaisin", "column_header.hide_settings": "Piilota asetukset", "column_header.moveLeft_settings": "Siirrä saraketta vasemmalle", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 44b6500fce..6899544b2f 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -21,12 +21,10 @@ "account.block_domain": "Hadlangan ang domain na {domain}", "account.block_short": "Hadlangan", "account.blocked": "Hinadlangan", - "account.blocking": "Pagharang", "account.cancel_follow_request": "I-kansela ang pagsunod", "account.copy": "I-sipi ang kawing sa profile", "account.direct": "Palihim banggitin si @{name}", "account.disable_notifications": "I-tigil ang pagpapaalam sa akin tuwing nagpopost si @{name}", - "account.domain_blocking": "Pag-block ng domain", "account.edit_profile": "Baguhin ang profile", "account.edit_profile_short": "I-edit", "account.enable_notifications": "Ipaalam sa akin kapag nag-post si @{name}", @@ -65,7 +63,6 @@ "account.mute_notifications_short": "I-mute ang mga abiso", "account.mute_short": "I-mute", "account.muted": "Naka-mute", - "account.muting": "Pag-mute", "account.mutual": "Pina-follow nyo ang isa't-isa", "account.no_bio": "Walang nakalaan na paglalarawan.", "account.open_original_page": "Buksan ang pinagmulang pahina", @@ -73,7 +70,6 @@ "account.remove_from_followers": "Alisin si {name} sa mga follower", "account.report": "I-ulat si/ang @{name}", "account.requested_follow": "Hinihiling ni {name} na sundan ka", - "account.requests_to_follow_you": "Mga Request para i-fillow ka", "account.share": "Ibahagi ang profile ni @{name}", "account.show_reblogs": "Ipakita ang mga pagpapalakas mula sa/kay {name}", "account.statuses_counter": "{count,plural,one {{counter} i-post} other {{counter} mga post}}", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 908181ca3c..54353cb277 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -28,12 +28,10 @@ "account.block_domain": "Banna økisnavnið {domain}", "account.block_short": "Banna", "account.blocked": "Bannað/ur", - "account.blocking": "Banni", "account.cancel_follow_request": "Strika fylgjaraumbøn", "account.copy": "Avrita leinki til vangan", "account.direct": "Umrøð @{name} privat", "account.disable_notifications": "Ikki boða mær frá, tá @{name} skrivar", - "account.domain_blocking": "Banni økisnavn", "account.edit_note": "Rætta persónliga notu", "account.edit_profile": "Broyt vanga", "account.edit_profile_short": "Rætta", @@ -99,7 +97,6 @@ "account.mute_notifications_short": "Sløkk fráboðanir", "account.mute_short": "Doyv", "account.muted": "Sløkt/ur", - "account.muting": "Doyvir", "account.mutual": "Tit fylgja hvønn annan", "account.name.help.domain": "{domain} er ambætarin, sum hýsir vangan og postarnar hjá brúkaranum.", "account.name.help.domain_self": "{domain} er tín ambætari, sum hýsir tín vanga og postar.", @@ -121,7 +118,6 @@ "account.remove_from_followers": "Strika {name} av fylgjaralista", "account.report": "Melda @{name}", "account.requested_follow": "{name} hevur biðið um at fylgja tær", - "account.requests_to_follow_you": "Umbønir um at fylgja tær", "account.share": "Deil vanga @{name}'s", "account.show_reblogs": "Vís stimbran frá @{name}", "account.statuses_counter": "{count, plural, one {{counter} postur} other {{counter} postar}}", @@ -159,8 +155,6 @@ "account_edit.profile_tab.show_media.title": "Vís 'Miðlar' spjaldur", "account_edit.profile_tab.show_media_replies.description": "Tá tað er virkið, vísir Miðlar spjaldrið bæði tínar postar og svar til postar hjá øðrum.", "account_edit.profile_tab.show_media_replies.title": "Írokna svar á 'Miðlar' spjaldrinum", - "account_edit.profile_tab.subtitle": "Tillaga spjøldrini á vanganum hjá tær og tað, tey vísa.", - "account_edit.profile_tab.title": "Stillingar fyri spjøldur á vanga", "account_edit.save": "Goym", "account_edit_tags.add_tag": "Legg #{tagName} afturat", "account_edit_tags.help_text": "Sermerkt frámerki hjálpa brúkarum at varnast og virka saman við vanga tínum. Tey síggjast sum filtur á virksemisvísingini av vanga tínum.", @@ -288,22 +282,18 @@ "collections.create.accounts_title": "Hvønn vil tú framhevja í hesum savninum?", "collections.create.basic_details_title": "Grundleggjandi smálutir", "collections.create.steps": "Stig {step}/{total}", - "collections.create_a_collection_hint": "Ger eitt savn sum kann brúkast til at viðmæla ella deila yndiskontur við øðrum.", "collections.create_collection": "Ger savn", "collections.delete_collection": "Strika savn", "collections.description_length_hint": "Í mesta lagi 100 tekn", - "collections.detail.accounts_heading": "Kontur", "collections.detail.loading": "Innlesi savn…", "collections.detail.share": "Deil hetta savnið", "collections.edit_details": "Rætta smálutir", - "collections.error_loading_collections": "Ein feilur hendi, tá tú royndi at finna fram søvnini hjá tær.", "collections.last_updated_at": "Seinast dagført: {date}", "collections.manage_accounts": "Umsit kontur", "collections.mark_as_sensitive": "Merk sum viðkvæmt", "collections.mark_as_sensitive_hint": "Fjalið lýsingina av og konturnar hjá savninum aftan fyri eina innihaldsávaring. Savnsnavnið verður framvegis sjónligt.", "collections.name_length_hint": "Í mesta lagi 40 tekn", "collections.new_collection": "Nýtt savn", - "collections.no_collections_yet": "Eingi søvn enn.", "collections.report_collection": "Melda hetta savnið", "collections.search_accounts_max_reached": "Tú hevur lagt afturat mesta talið av kontum", "collections.sensitive": "Viðkvæmt", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 8a6cc5e67a..455f3ef0bb 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquer le domaine {domain}", "account.block_short": "Bloquer", "account.blocked": "Bloqué·e", - "account.blocking": "Bloqué·e", "account.cancel_follow_request": "Retirer cette demande d'abonnement", "account.copy": "Copier le lien du profil", "account.direct": "Mention privée @{name}", "account.disable_notifications": "Ne plus me notifier quand @{name} publie", - "account.domain_blocking": "Domaine bloqué", "account.edit_note": "Modifier la note personnelle", "account.edit_profile": "Modifier le profil", "account.edit_profile_short": "Modifier", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Rendre les notifications muettes", "account.mute_short": "Rendre muet", "account.muted": "Masqué·e", - "account.muting": "Masqué·e", "account.mutual": "Vous vous suivez mutuellement", "account.name.copy": "Copier l’identifiant", "account.name.help.domain": "{domain} est le serveur qui héberge le profil et les messages du compte.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Modifier", "account.note.title": "Note personnelle (visible uniquement pour vous)", "account.open_original_page": "Ouvrir la page d'origine", + "account.pending": "En attente", "account.posts": "Publications", "account.remove_from_followers": "Retirer {name} des abonnés", "account.report": "Signaler @{name}", "account.requested_follow": "{name} a demandé à vous suivre", - "account.requests_to_follow_you": "Demande à vous suivre", "account.share": "Partager le profil de @{name}", "account.show_reblogs": "Afficher les boosts de @{name}", "account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Afficher l'onglet « Média »", "account_edit.profile_tab.show_media_replies.description": "En activant cette option l'onglet « Média » affiche à la fois vos messages et vos réponses aux messages d'autres personnes.", "account_edit.profile_tab.show_media_replies.title": "Inclure les réponses dans l'onglet « Média »", - "account_edit.profile_tab.subtitle": "Personnaliser les onglets de votre profil et leur contenu.", - "account_edit.profile_tab.title": "Paramètres de l'onglet du profil", "account_edit.save": "Enregistrer", "account_edit.upload_modal.back": "Retour", "account_edit.upload_modal.done": "Terminé", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Qui voulez-vous mettre en avant dans cette collection ?", "collections.create.basic_details_title": "Informations générales", "collections.create.steps": "Étape {step}/{total}", - "collections.create_a_collection_hint": "Créez une collection pour recommander ou partager vos comptes préférés.", "collections.create_collection": "Créer une collection", "collections.delete_collection": "Supprimer la collection", "collections.description_length_hint": "Maximum 100 caractères", - "collections.detail.accounts_heading": "Comptes", "collections.detail.author_added_you_on_date": "{author} vous a ajouté·e le {date}", "collections.detail.loading": "Chargement de la collection…", "collections.detail.revoke_inclusion": "Me retirer", @@ -400,11 +393,14 @@ "collections.detail.share": "Partager la collection", "collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection", "collections.edit_details": "Modifier les détails", - "collections.error_loading_collections": "Une erreur s'est produite durant le chargement de vos collections.", "collections.hidden_accounts_description": "Vous avez bloqué ou masqué {count, plural, one {ce compte} other {ces comptes}}", "collections.hidden_accounts_link": "{count, plural, one {# compte caché} other {# comptes cachés}}", "collections.hints.accounts_counter": "{count}/{max} comptes", "collections.last_updated_at": "Dernière mise à jour : {date}", + "collections.list.collections_with_count": "{count, plural, one {# collection} other {# collections}}", + "collections.list.created_by_author": "Créée par {name}", + "collections.list.created_by_you": "Créées par vous", + "collections.list.featuring_you": "Avec vous", "collections.manage_accounts": "Gérer les comptes", "collections.mark_as_sensitive": "Marquer comme sensible", "collections.mark_as_sensitive_hint": "Masque la description et les comptes de la collection derrière un avertissement au public. Le titre reste visible.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Vous avez créé le nombre maximum de collections", "collections.name_length_hint": "Maximum 40 caractères", "collections.new_collection": "Nouvelle collection", - "collections.no_collections_yet": "Aucune collection pour le moment.", + "collections.pending_accounts.message": "Des comptes peuvent apparaître en attente lorsque nous attendons une réponse de l'utilisateur·ice ou de son serveur. Les comptes en attente sont visibles uniquement pour vous.", + "collections.pending_accounts.title": "Pourquoi est-ce que je vois des comptes en attente ?", "collections.remove_account": "Supprimer", "collections.report_collection": "Signaler cette collection", "collections.revoke_collection_inclusion": "Me retirer de cette collection", @@ -454,11 +451,11 @@ "column.list_members": "Gérer les membres de la liste", "column.lists": "Listes", "column.mutes": "Comptes masqués", - "column.my_collections": "Mes collections", "column.notifications": "Notifications", "column.other_collections": "Les collections par {name}", "column.pins": "Publications épinglés", "column.public": "Fil global", + "column.your_collections": "Vos collections", "column_back_button.label": "Retour", "column_header.hide_settings": "Cacher les paramètres", "column_header.moveLeft_settings": "Déplacer cette colonne vers la gauche", @@ -855,13 +852,13 @@ "lists.add_to_list": "Ajouter à la liste", "lists.add_to_lists": "Ajouter {name} aux listes", "lists.create": "Créer", - "lists.create_a_list_to_organize": "Créer une nouvelle liste pour organiser votre Page d'accueil", + "lists.create_a_list_to_organize": "Créer une nouvelle liste pour organiser votre fil d'actualité", "lists.create_list": "Créer une liste", "lists.delete": "Supprimer la liste", "lists.done": "Terminé", "lists.edit": "Modifier la liste", - "lists.exclusive": "Cacher les membres de la page d'accueil", - "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil pour éviter de voir leurs messages deux fois.", + "lists.exclusive": "Cacher les membres du fil d'actualité", + "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil d'actualité pour éviter de voir leurs messages deux fois.", "lists.find_users_to_add": "Trouver des utilisateurs à ajouter", "lists.list_members_count": "{count, plural, one {# membre} other {# membres}}", "lists.list_name": "Nom de la liste", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 9c9eab09e6..ae425aefde 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquer le domaine {domain}", "account.block_short": "Bloquer", "account.blocked": "Bloqué·e", - "account.blocking": "Bloqué·e", "account.cancel_follow_request": "Annuler l'abonnement", "account.copy": "Copier le lien du profil", "account.direct": "Mentionner @{name} en privé", "account.disable_notifications": "Ne plus me notifier les publications de @{name}", - "account.domain_blocking": "Domaine bloqué", "account.edit_note": "Modifier la note personnelle", "account.edit_profile": "Modifier le profil", "account.edit_profile_short": "Modifier", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Désactiver les notifications", "account.mute_short": "Masquer", "account.muted": "Masqué·e", - "account.muting": "Masqué·e", "account.mutual": "Vous vous suivez mutuellement", "account.name.copy": "Copier l’identifiant", "account.name.help.domain": "{domain} est le serveur qui héberge le profil et les messages du compte.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Modifier", "account.note.title": "Note personnelle (visible uniquement pour vous)", "account.open_original_page": "Ouvrir la page d'origine", + "account.pending": "En attente", "account.posts": "Messages", "account.remove_from_followers": "Retirer {name} des abonnés", "account.report": "Signaler @{name}", "account.requested_follow": "{name} a demandé à vous suivre", - "account.requests_to_follow_you": "Demande à vous suivre", "account.share": "Partager le profil de @{name}", "account.show_reblogs": "Afficher les partages de @{name}", "account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Afficher l'onglet « Média »", "account_edit.profile_tab.show_media_replies.description": "En activant cette option l'onglet « Média » affiche à la fois vos messages et vos réponses aux messages d'autres personnes.", "account_edit.profile_tab.show_media_replies.title": "Inclure les réponses dans l'onglet « Média »", - "account_edit.profile_tab.subtitle": "Personnaliser les onglets de votre profil et leur contenu.", - "account_edit.profile_tab.title": "Paramètres de l'onglet du profil", "account_edit.save": "Enregistrer", "account_edit.upload_modal.back": "Retour", "account_edit.upload_modal.done": "Terminé", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Qui voulez-vous mettre en avant dans cette collection ?", "collections.create.basic_details_title": "Informations générales", "collections.create.steps": "Étape {step}/{total}", - "collections.create_a_collection_hint": "Créez une collection pour recommander ou partager vos comptes préférés.", "collections.create_collection": "Créer une collection", "collections.delete_collection": "Supprimer la collection", "collections.description_length_hint": "Maximum 100 caractères", - "collections.detail.accounts_heading": "Comptes", "collections.detail.author_added_you_on_date": "{author} vous a ajouté·e le {date}", "collections.detail.loading": "Chargement de la collection…", "collections.detail.revoke_inclusion": "Me retirer", @@ -400,11 +393,14 @@ "collections.detail.share": "Partager la collection", "collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection", "collections.edit_details": "Modifier les détails", - "collections.error_loading_collections": "Une erreur s'est produite durant le chargement de vos collections.", "collections.hidden_accounts_description": "Vous avez bloqué ou masqué {count, plural, one {ce compte} other {ces comptes}}", "collections.hidden_accounts_link": "{count, plural, one {# compte caché} other {# comptes cachés}}", "collections.hints.accounts_counter": "{count}/{max} comptes", "collections.last_updated_at": "Dernière mise à jour : {date}", + "collections.list.collections_with_count": "{count, plural, one {# collection} other {# collections}}", + "collections.list.created_by_author": "Créée par {name}", + "collections.list.created_by_you": "Créées par vous", + "collections.list.featuring_you": "Avec vous", "collections.manage_accounts": "Gérer les comptes", "collections.mark_as_sensitive": "Marquer comme sensible", "collections.mark_as_sensitive_hint": "Masque la description et les comptes de la collection derrière un avertissement au public. Le titre reste visible.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Vous avez créé le nombre maximum de collections", "collections.name_length_hint": "Maximum 40 caractères", "collections.new_collection": "Nouvelle collection", - "collections.no_collections_yet": "Aucune collection pour le moment.", + "collections.pending_accounts.message": "Des comptes peuvent apparaître en attente lorsque nous attendons une réponse de l'utilisateur·ice ou de son serveur. Les comptes en attente sont visibles uniquement pour vous.", + "collections.pending_accounts.title": "Pourquoi est-ce que je vois des comptes en attente ?", "collections.remove_account": "Supprimer", "collections.report_collection": "Signaler cette collection", "collections.revoke_collection_inclusion": "Me retirer de cette collection", @@ -454,11 +451,11 @@ "column.list_members": "Gérer les membres de la liste", "column.lists": "Listes", "column.mutes": "Comptes masqués", - "column.my_collections": "Mes collections", "column.notifications": "Notifications", "column.other_collections": "Les collections par {name}", "column.pins": "Messages épinglés", "column.public": "Fil fédéré", + "column.your_collections": "Vos collections", "column_back_button.label": "Retour", "column_header.hide_settings": "Cacher les paramètres", "column_header.moveLeft_settings": "Déplacer la colonne vers la gauche", @@ -855,13 +852,13 @@ "lists.add_to_list": "Ajouter à la liste", "lists.add_to_lists": "Ajouter {name} aux listes", "lists.create": "Créer", - "lists.create_a_list_to_organize": "Créer une nouvelle liste pour organiser votre Page d'accueil", + "lists.create_a_list_to_organize": "Créer une nouvelle liste pour organiser votre fil d'actualité", "lists.create_list": "Créer une liste", "lists.delete": "Supprimer la liste", "lists.done": "Terminé", "lists.edit": "Modifier la liste", - "lists.exclusive": "Cacher les membres de la page d'accueil", - "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil pour éviter de voir leurs messages deux fois.", + "lists.exclusive": "Cacher les membres du fil d'actualité", + "lists.exclusive_hint": "Si quelqu'un est dans cette liste, les cacher dans votre fil d'actualité pour éviter de voir leurs messages deux fois.", "lists.find_users_to_add": "Trouver des utilisateurs à ajouter", "lists.list_members_count": "{count, plural, one {# membre} other {# membres}}", "lists.list_name": "Nom de la liste", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index b998c1a826..81e0b4edd3 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -21,12 +21,10 @@ "account.block_domain": "Domein {domain} blokkearje", "account.block_short": "Blokkearje", "account.blocked": "Blokkearre", - "account.blocking": "Blokkearre", "account.cancel_follow_request": "Folchfersyk annulearje", "account.copy": "Keppeling nei profyl kopiearje", "account.direct": "Privee fermelde @{name}", "account.disable_notifications": "Jou gjin melding mear wannear @{name} in berjocht pleatst", - "account.domain_blocking": "Domein blokkearre", "account.edit_profile": "Profyl bewurkje", "account.enable_notifications": "Jou in melding mear wannear @{name} in berjocht pleatst", "account.endorse": "Op profyl werjaan", @@ -59,7 +57,6 @@ "account.mute_notifications_short": "Meldingen negearje", "account.mute_short": "Negearje", "account.muted": "Negearre", - "account.muting": "Dôve", "account.mutual": "Jim folgje inoar", "account.no_bio": "Gjin omskriuwing opjûn.", "account.open_original_page": "Orizjinele side iepenje", @@ -67,7 +64,6 @@ "account.remove_from_followers": "{name} as folger fuortsmite", "account.report": "@{name} rapportearje", "account.requested_follow": "{name} hat dy in folchfersyk stjoerd", - "account.requests_to_follow_you": "Fersiken om jo te folgjen", "account.share": "Profyl fan @{name} diele", "account.show_reblogs": "Boosts fan @{name} toane", "account.statuses_counter": "{count, plural, one {{counter} berjocht} other {{counter} berjochten}}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 9b87fab82c..64c8d0967a 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -28,12 +28,10 @@ "account.block_domain": "Bac ainm fearainn {domain}", "account.block_short": "Bac", "account.blocked": "Bactha", - "account.blocking": "Ag Blocáil", "account.cancel_follow_request": "Cealaigh leanúint", "account.copy": "Cóipeáil nasc chuig an bpróifíl", "account.direct": "Luaigh @{name} go príobháideach", "account.disable_notifications": "Stop ag cur in iúl dom nuair a dhéanann @{name} postáil", - "account.domain_blocking": "Fearann a bhlocáil", "account.edit_note": "Cuir nóta pearsanta in eagar", "account.edit_profile": "Cuir an phróifíl in eagar", "account.edit_profile_short": "Cuir in Eagar", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Balbhaigh fógraí", "account.mute_short": "Balbhaigh", "account.muted": "Balbhaithe", - "account.muting": "Ag balbhaigh", "account.mutual": "Leanann sibh a chéile", "account.name.copy": "Láimhseáil chóipeála", "account.name.help.domain": "Is é {domain} an freastalaí a óstálann próifíl agus poist an úsáideora.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Eagar", "account.note.title": "Nóta pearsanta (le feiceáil agatsa amháin)", "account.open_original_page": "Oscail an leathanach bunaidh", + "account.pending": "Ar feitheamh", "account.posts": "Postálacha", "account.remove_from_followers": "Bain {name} de na leantóirí", "account.report": "Tuairiscigh @{name}", "account.requested_follow": "D'iarr {name} ort do chuntas a leanúint", - "account.requests_to_follow_you": "Iarratais chun tú a leanúint", "account.share": "Roinn próifíl @{name}", "account.show_reblogs": "Taispeáin moltaí ó @{name}", "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} poist}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Taispeáin an cluaisín ‘Meáin’", "account_edit.profile_tab.show_media_replies.description": "Nuair a bhíonn sé cumasaithe, taispeánann an cluaisín Meáin do phoist agus freagraí ar phoist daoine eile araon.", "account_edit.profile_tab.show_media_replies.title": "Cuir freagraí san áireamh ar an táb ‘Meáin’", - "account_edit.profile_tab.subtitle": "Saincheap na cluaisíní ar do phróifíl agus a bhfuil á thaispeáint iontu.", - "account_edit.profile_tab.title": "Socruithe an chluaisín próifíle", "account_edit.save": "Sábháil", "account_edit.upload_modal.back": "Ar ais", "account_edit.upload_modal.done": "Déanta", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Cé a bheidh le feiceáil agat sa bhailiúchán seo?", "collections.create.basic_details_title": "Sonraí bunúsacha", "collections.create.steps": "Céim {step}/{total}", - "collections.create_a_collection_hint": "Cruthaigh bailiúchán chun do chuntais is fearr leat a mholadh nó a roinnt le daoine eile.", "collections.create_collection": "Cruthaigh bailiúchán", "collections.delete_collection": "Scrios bailiúchán", "collections.description_length_hint": "Teorainn 100 carachtar", - "collections.detail.accounts_heading": "Cuntais", "collections.detail.author_added_you_on_date": "Chuir {author} leis thú ar {date}", "collections.detail.loading": "Ag lódáil an bhailiúcháin…", "collections.detail.revoke_inclusion": "Bain mé", @@ -400,11 +393,14 @@ "collections.detail.share": "Comhroinn an bailiúchán seo", "collections.detail.you_are_in_this_collection": "Tá tú le feiceáil sa bhailiúchán seo", "collections.edit_details": "Cuir sonraí in eagar", - "collections.error_loading_collections": "Tharla earráid agus iarracht á déanamh do bhailiúcháin a luchtú.", "collections.hidden_accounts_description": "Tá bac nó múchadh déanta agat ar {count, plural, one {an t-úsáideoir seo} two {na húsáideoirí seo} few {na húsáideoirí seo} many {na húsáideoirí seo} other {na húsáideoirí seo}}", "collections.hidden_accounts_link": "{count, plural, one {# cuntas folaithe} two {# cuntais folaithe} few {# cuntais folaithe} many {# cuntais folaithe} other {# cuntais folaithe}}", "collections.hints.accounts_counter": "cuntais {count}/{max}", "collections.last_updated_at": "Nuashonraithe go deireanach: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Bailiúchán} two {# Bailiúcháin} few {# Bailiúcháin} many {# Bailiúcháin} other {# Bailiúcháin}}", + "collections.list.created_by_author": "Cruthaithe ag {name}", + "collections.list.created_by_you": "Cruthaithe agatsa", + "collections.list.featuring_you": "Ag cur san áireamh thú", "collections.manage_accounts": "Bainistigh cuntais", "collections.mark_as_sensitive": "Marcáil mar íogair", "collections.mark_as_sensitive_hint": "Folaíonn sé cur síos agus cuntais an bhailiúcháin taobh thiar de rabhadh ábhair. Beidh ainm an bhailiúcháin le feiceáil fós.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Tá an líon uasta bailiúcháin cruthaithe agat", "collections.name_length_hint": "Teorainn 40 carachtar", "collections.new_collection": "Bailiúchán nua", - "collections.no_collections_yet": "Gan aon bhailiúcháin fós.", + "collections.pending_accounts.message": "Seans go bhfeicfear cuntais mar atá ar feitheamh agus muid ag fanacht ar fhreagra ón úsáideoir nó ón bhfreastalaí. Ní féidir ach leatsa cuntais atá ar feitheamh a fheiceáil.", + "collections.pending_accounts.title": "Cén fáth a bhfuil cuntais ar feitheamh á bhfaca mé?", "collections.remove_account": "Bain", "collections.report_collection": "Tuairiscigh an bailiúchán seo", "collections.revoke_collection_inclusion": "Bain mé féin as an mbailiúchán seo", @@ -454,11 +451,11 @@ "column.list_members": "Bainistigh baill liosta", "column.lists": "Liostaí", "column.mutes": "Úsáideoirí balbhaithe", - "column.my_collections": "Mo bhailiúcháin", "column.notifications": "Fógraí", "column.other_collections": "Bailiúcháin le {name}", "column.pins": "Postálacha pionnáilte", "column.public": "Amlíne cónaidhmithe", + "column.your_collections": "Do Bhailiúcháin", "column_back_button.label": "Ar ais", "column_header.hide_settings": "Folaigh socruithe", "column_header.moveLeft_settings": "Bog an colún ar chlé", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 83cba68fa6..ffb9a2c11b 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -28,12 +28,10 @@ "account.block_domain": "Bac an àrainn {domain}", "account.block_short": "Bac", "account.blocked": "’Ga bhacadh", - "account.blocking": "’Ga bhacadh", "account.cancel_follow_request": "Sguir dhen leantainn", "account.copy": "Dèan lethbhreac dhen cheangal dhan phròifil", "account.direct": "Thoir iomradh air @{name} gu prìobhaideach", "account.disable_notifications": "Na cuir brath thugam tuilleadh nuair a chuireas @{name} post ris", - "account.domain_blocking": "Àrainn ’ga bacadh", "account.edit_note": "Deasaich an nòta pearsanta", "account.edit_profile": "Deasaich a’ phròifil", "account.edit_profile_short": "Deasaich", @@ -100,7 +98,6 @@ "account.mute_notifications_short": "Mùch na brathan", "account.mute_short": "Mùch", "account.muted": "’Ga mhùchadh", - "account.muting": "’Ga mhùchadh", "account.mutual": "A’ leantainn càch a chèile", "account.name.copy": "Dèan lethbhreac dhen aithnichear", "account.name.help.domain": "Is {domain} am frithealaiche a tha ag òstadh pròifil ’s postaichean a’ chleachdaiche.", @@ -123,7 +120,6 @@ "account.remove_from_followers": "Thoir {name} air falbh on luchd-leantainn", "account.report": "Dèan gearan mu @{name}", "account.requested_follow": "Dh’iarr {name} ’gad leantainn", - "account.requests_to_follow_you": "Iarrtasan leantainn", "account.share": "Co-roinn a’ phròifil aig @{name}", "account.show_reblogs": "Seall na brosnachaidhean o @{name}", "account.statuses_counter": "{count, plural, one {{counter} phost} two {{counter} phost} few {{counter} postaichean} other {{counter} post}}", @@ -215,8 +211,6 @@ "account_edit.profile_tab.show_media.title": "Seall an taba “Meadhanan”", "account_edit.profile_tab.show_media_replies.description": "Nuair a bhios seo an comas, seallaidh an taba “Meadhanan” an dà chuid na postaichean agad agus na freagairtean a rinn thu do phostaichean càich.", "account_edit.profile_tab.show_media_replies.title": "Gabh a-staigh freagairtean air an taba “Meadhanan”", - "account_edit.profile_tab.subtitle": "Gnàthaich na tabaichean air a’ phròifil agad is na sheallas iad.", - "account_edit.profile_tab.title": "Roghainnean tabaichean na pròifile", "account_edit.save": "Sàbhail", "account_edit.upload_modal.back": "Air ais", "account_edit.upload_modal.done": "Deiseil", @@ -369,11 +363,9 @@ "collections.create.accounts_title": "Cò bhrosnaicheas tu sa chruinneachadh seo?", "collections.create.basic_details_title": "Bun-fhiosrachadh", "collections.create.steps": "Ceum {step}/{total}", - "collections.create_a_collection_hint": "Cruthaich cruinneachadh airson na cunntasan as fheàrr leat a mholadh no a cho-roinneadh le càch.", "collections.create_collection": "Cruthaich cruinneachadh", "collections.delete_collection": "Sguab an cruinneachadh às", "collections.description_length_hint": "Crìoch de 100 caractar", - "collections.detail.accounts_heading": "Cunntasan", "collections.detail.author_added_you_on_date": "Chuir {author} ris thu {date}", "collections.detail.loading": "A’ luchdadh a’ chruinneachaidh…", "collections.detail.revoke_inclusion": "Thoir air falbh mi", @@ -382,14 +374,12 @@ "collections.detail.share": "Co-roinn an cruinneachadh seo", "collections.detail.you_are_in_this_collection": "Thathar do bhrosnachadh sa chruinneachadh seo", "collections.edit_details": "Deasaich am fiosrachadh", - "collections.error_loading_collections": "Thachair mearachd nuair a dh’fheuch sinn ris a’ chruinneachaidhean agad a luchdadh.", "collections.last_updated_at": "An tùrachadh mu dheireadh: {date}", "collections.manage_accounts": "Stiùirich na cunntasan", "collections.mark_as_sensitive": "Cuir comharra gu bheil e frionasach", "collections.mark_as_sensitive_hint": "Falaichidh seo tuairisgeul is cunntasan a’ chruinneachaidh air cùlaibh rabhadh susbainte. Chithear ainm a’ chruinneachaidh fhathast.", "collections.name_length_hint": "Crìoch de 40 caractar", "collections.new_collection": "Cruinneachadh ùr", - "collections.no_collections_yet": "Chan eil cruinneachadh agad fhathast.", "collections.report_collection": "Dèan gearan mun chruinneachadh seo", "collections.revoke_collection_inclusion": "Thoir mi fhìn air falbh on chruinneachadh seo", "collections.revoke_inclusion.confirmation": "Chaidh do thoirt air falbh o “{collection}”", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index a73f67dc35..05b2fb9b2b 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquear o dominio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueada", - "account.blocking": "Bloqueos", "account.cancel_follow_request": "Desbotar a solicitude de seguimento", "account.copy": "Copiar ligazón ao perfil", "account.direct": "Mencionar de xeito privado a @{name}", "account.disable_notifications": "Deixar de notificarme cando @{name} publica", - "account.domain_blocking": "Bloqueo do dominio", "account.edit_note": "Editar a nota persoal", "account.edit_profile": "Editar perfil", "account.edit_profile_short": "Editar", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Silenciar notificacións", "account.mute_short": "Acalar", "account.muted": "Acalada", - "account.muting": "Silenciamento", "account.mutual": "Seguimento mútuo", "account.name.copy": "Copiar identificador", "account.name.help.domain": "{domain} é o servidor que aloxa o perfil e as publicacións da usuaria.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Editar", "account.note.title": "Nota persoal (só ti podes vela)", "account.open_original_page": "Abrir páxina orixinal", + "account.pending": "Pendente", "account.posts": "Publicacións", "account.remove_from_followers": "Retirar a {name} das seguidoras", "account.report": "Informar sobre @{name}", "account.requested_follow": "{name} solicitou seguirte", - "account.requests_to_follow_you": "Solicita seguirte", "account.share": "Compartir o perfil de @{name}", "account.show_reblogs": "Amosar compartidos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Mostrar pestana 'Multimedia'", "account_edit.profile_tab.show_media_replies.description": "Ao activala, a pestana Multimedia mostra tanto as túas publicacións como as respostas a outras persoas.", "account_edit.profile_tab.show_media_replies.title": "Incluír respostas na pestana 'Multimedia'", - "account_edit.profile_tab.subtitle": "Personaliza as pestanas e o seu contido no teu perfil.", - "account_edit.profile_tab.title": "Perfil e axustes das pestanas", "account_edit.save": "Gardar", "account_edit.upload_modal.back": "Volver", "account_edit.upload_modal.done": "Feito", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "A quen queres incluír nesta colección?", "collections.create.basic_details_title": "Detalles básicos", "collections.create.steps": "Paso {step}/{total}", - "collections.create_a_collection_hint": "Crear unha colección para recomendar ou compartir as túas contas favoritas.", "collections.create_collection": "Crear colección", "collections.delete_collection": "Eliminar colección", "collections.description_length_hint": "Límite de 100 caracteres", - "collections.detail.accounts_heading": "Contas", "collections.detail.author_added_you_on_date": "{author} engadiute o {date}", "collections.detail.loading": "Cargando colección…", "collections.detail.revoke_inclusion": "Quítame de aí", @@ -400,11 +393,14 @@ "collections.detail.share": "Compartir esta colección", "collections.detail.you_are_in_this_collection": "Engadíronte a esta colección", "collections.edit_details": "Editar detalles", - "collections.error_loading_collections": "Houbo un erro ao intentar cargar as túas coleccións.", "collections.hidden_accounts_description": "Bloqueaches ou silenciaches {count, plural, one {esta conta} other {estas contas}}", "collections.hidden_accounts_link": "{count, plural, one {# conta oculta} other {# contas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} contas", "collections.last_updated_at": "Última actualización: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Colección} other {# Coleccións}}", + "collections.list.created_by_author": "Creada por {name}", + "collections.list.created_by_you": "Creada por ti", + "collections.list.featuring_you": "Das que formas parte", "collections.manage_accounts": "Xestionar contas", "collections.mark_as_sensitive": "Marcar como sensible", "collections.mark_as_sensitive_hint": "Oculta a descrición e contas da colección detrás dun aviso sobre o contido. O nome da colección permanece visible.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Creaches o número máximo de coleccións", "collections.name_length_hint": "Límite de 40 caracteres", "collections.new_collection": "Nova colección", - "collections.no_collections_yet": "Aínda non tes coleccións.", + "collections.pending_accounts.message": "As contas poden aparecer como pendentes cando están agardando a resposta da usuaria no seu servidor. As contas pendentes só as podes ver ti.", + "collections.pending_accounts.title": "Por que vexo contas que están pendentes?", "collections.remove_account": "Retirar", "collections.report_collection": "Denunciar esta colección", "collections.revoke_collection_inclusion": "Sácame desta colección", @@ -454,11 +451,11 @@ "column.list_members": "Xestionar membros da lista", "column.lists": "Listaxes", "column.mutes": "Usuarias acaladas", - "column.my_collections": "As miñas coleccións", "column.notifications": "Notificacións", "column.other_collections": "Coleccións de {name}", "column.pins": "Publicacións fixadas", "column.public": "Cronoloxía federada", + "column.your_collections": "As túas coleccións", "column_back_button.label": "Volver", "column_header.hide_settings": "Agochar axustes", "column_header.moveLeft_settings": "Mover columna cara a esquerda", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 81ab07b802..928c48261a 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -28,12 +28,10 @@ "account.block_domain": "חסמו את קהילת {domain}", "account.block_short": "לחסום", "account.blocked": "חסום", - "account.blocking": "רשימת החשבונות החסומים", "account.cancel_follow_request": "משיכת בקשת מעקב", "account.copy": "להעתיק קישור לפרופיל", "account.direct": "הודעה פרטית אל @{name}", "account.disable_notifications": "הפסק לשלוח לי התראות כש@{name} מפרסמים", - "account.domain_blocking": "רשימת השרתים החסומים", "account.edit_note": "עריכת הערה פרטית", "account.edit_profile": "עריכת פרופיל", "account.edit_profile_short": "עריכה", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "השתקת התראות", "account.mute_short": "השתקה", "account.muted": "מושתק", - "account.muting": "רשימת החשבונות המושתקים", "account.mutual": "אתם עוקביםות הדדית", "account.name.copy": "העתקת הכינוי", "account.name.help.domain": "{domain} הוא השרת שמארח את פרופיל המשתמש(ת) וההודעות שכתב(ה).", @@ -131,11 +128,11 @@ "account.note.edit_button": "עריכה", "account.note.title": "הערה פרטית (זמין רק לך)", "account.open_original_page": "לפתיחת העמוד המקורי", + "account.pending": "בהמתנה", "account.posts": "פוסטים", "account.remove_from_followers": "הסרת {name} מעוקבי", "account.report": "דווח על @{name}", "account.requested_follow": "{name} ביקשו לעקוב אחריך", - "account.requests_to_follow_you": "ביקשו לעקוב אחריך", "account.share": "שתף את הפרופיל של @{name}", "account.show_reblogs": "הצג הדהודים מאת @{name}", "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "הצגת כרטיסיית \"מדיה\"", "account_edit.profile_tab.show_media_replies.description": "כשמאופשר, כרטיסיית המדיה מציגה גם הודעות מקוריות וגם תשובות להודעות של אחרים.", "account_edit.profile_tab.show_media_replies.title": "לכלול תגובות בכרטיסיית המדיה", - "account_edit.profile_tab.subtitle": "התאימו את הכרטיסיות בפרופיל שלכם ומה שהן יציגו.", - "account_edit.profile_tab.title": "הגדרות כרטיסיות לפרופיל", + "account_edit.profile_tab.show_relations.description": "מראה את העוקבים והנעקבים שלכם בפרופיל. אחרים יוכלו לראות אם אתם עוקבים אחריהם.", + "account_edit.profile_tab.show_relations.title": "לחשוף עוקבים ונעקבים", + "account_edit.profile_tab.subtitle": "בחרו בהתאמה אישית איך תרצו שהפרופיל שלכם יוצג.", + "account_edit.profile_tab.title": "הגדרות הצגת פרופיל", "account_edit.save": "שמירה", "account_edit.upload_modal.back": "חזרה", "account_edit.upload_modal.done": "בוצע", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "הזנת תגית…", "account_edit_tags.suggestions": "הצעות:", "account_edit_tags.tag_status_count": "{count, plural, one {הודעה אחת} two {הודעותיים} other {# הודעות}}", + "account_list.hidden_notice": "הרשימה גלויה רק לך. כדי לחשוף אותה לאחרים, יש ללכת אל {page} < {modal} < {field}.", "account_list.total": "{total, plural, one {חשבון אחד} other {# חשבונות}}", "account_note.placeholder": "יש ללחוץ כדי להוסיף הערות", "admin.dashboard.daily_retention": "קצב שימור משתמשים יומי אחרי ההרשמה", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "את מי תבליטו באוסף זה?", "collections.create.basic_details_title": "פרטים בסיסיים", "collections.create.steps": "צעד {step} מתוך {total}", - "collections.create_a_collection_hint": "יצירת אוסף כדי להמליץ או לשתף את החשבונות החביבים עליך עם אחרים.", "collections.create_collection": "יצירת אוסף", "collections.delete_collection": "מחיקת האוסף", "collections.description_length_hint": "מגבלה של 100 תווים", - "collections.detail.accounts_heading": "חשבונות", "collections.detail.author_added_you_on_date": "{author} הוסיפו אותך בתאריך {date}", "collections.detail.loading": "טוען אוסף…", "collections.detail.revoke_inclusion": "הסירוני", @@ -400,11 +398,15 @@ "collections.detail.share": "שיתוף אוסף", "collections.detail.you_are_in_this_collection": "אתם מופיעים באוסף זה", "collections.edit_details": "עריכת פרטים", - "collections.error_loading_collections": "חלה שגיאה בנסיון לטעון את אוספיך.", + "collections.error_loading_collections": "חלה שגיאה בנסיון לטעון אוספים אלו.", "collections.hidden_accounts_description": "חסמת או השתקת {count, plural,one {המשתמש.ת}other {המשתמשים}} האלו", "collections.hidden_accounts_link": "{count, plural, one {חשבון מוסתר אחד} other {# חשבונות מוסתרים}}", "collections.hints.accounts_counter": "{count} \\ {max} חשבונות", "collections.last_updated_at": "עדכון אחרון: {date}", + "collections.list.collections_with_count": "{count, plural, one {אוסף אחד} other {# אוספים}}", + "collections.list.created_by_author": "נוצר בידי {name}", + "collections.list.created_by_you": "נוצר על ידיך", + "collections.list.featuring_you": "כולל אותך", "collections.manage_accounts": "ניהול חשבונות", "collections.mark_as_sensitive": "מסומנים כרגישים", "collections.mark_as_sensitive_hint": "הסתרת תיאור וחשבונות האוסף מאחורי אזהרת תוכן. שם האוסף עדיין ישאר גלוי.", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "יצרת את מספר האוספים המירבי", "collections.name_length_hint": "מגבלה של 40 תווים", "collections.new_collection": "אוסף חדש", - "collections.no_collections_yet": "עוד אין אוספים.", + "collections.pending_accounts.message": "חשבונות יסומנו כממתינים כאשר מחכים לתגובה מהמשתמשים בשרת שלהם. רק אתם יכולים לראות חשבונות בהמתנה לאישור.", + "collections.pending_accounts.title": "מדוע אני רואה חשבונות ממתינים לאישור?", "collections.remove_account": "הסרה", "collections.report_collection": "דיווח על אוסף זה", "collections.revoke_collection_inclusion": "הסירוני מאוסף זה", @@ -454,11 +457,11 @@ "column.list_members": "ניהול חברי הרשימה", "column.lists": "רשימות", "column.mutes": "משתמשים בהשתקה", - "column.my_collections": "האוספים שלי", "column.notifications": "התראות", "column.other_collections": "אוספים מאת {name}", "column.pins": "חיצרוצים נעוצים", "column.public": "פיד כללי (כל השרתים)", + "column.your_collections": "האוספים שלך", "column_back_button.label": "בחזרה", "column_header.hide_settings": "הסתרת הגדרות", "column_header.moveLeft_settings": "הזזת טור לשמאל", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "פרופיל לא זמין", "empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.", "empty_column.bookmarked_statuses": "אין עדיין הודעות שחיבבת. כשתחבב את הראשונה, היא תופיע כאן.", + "empty_column.collections.featured_in": "עוד לא הוסיפו אותך לאף אוסף.", "empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.", "empty_column.disabled_feed": "פיד זה נחסם לשימוש על ידי מנהלי השרת שלך.", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 55780f03f5..b5c49b217e 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -21,12 +21,10 @@ "account.block_domain": "{domain} के सारी चीज़े छुपाएं", "account.block_short": "ब्लॉक किया गया", "account.blocked": "ब्लॉक", - "account.blocking": "प्रतिबंधित करना", "account.cancel_follow_request": "फॉलो रिक्वेस्ट वापस लें", "account.copy": "प्रोफाइल पर लिंक कॉपी करें", "account.direct": "निजि तरीके से उल्लेख करे @{name}", "account.disable_notifications": "@{name} पोस्ट के लिए मुझे सूचित मत करो", - "account.domain_blocking": "डोमेन ब्लॉक करें", "account.edit_profile": "प्रोफ़ाइल संपादित करें", "account.edit_profile_short": "संपादित करें", "account.enable_notifications": "जब @{name} पोस्ट मौजूद हो सूचित करें", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 93901adc5a..9bfd365db4 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -81,7 +81,6 @@ "account_edit.column_title": "Uredi profil", "account_edit.custom_fields.title": "Prilagođena polja", "account_edit.featured_hashtags.title": "Istaknuti hashtagovi", - "account_edit.profile_tab.title": "Prikaz kartice profila", "account_edit.save": "Spremi", "account_note.placeholder": "Kliknite za dodavanje bilješke", "admin.dashboard.daily_retention": "Stopa zadržavanja korisnika po danu nakon prijave", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index c8fa002da2..675e147bd3 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -28,12 +28,10 @@ "account.block_domain": "Domain letiltása: {domain}", "account.block_short": "Letiltás", "account.blocked": "Letiltva", - "account.blocking": "Tiltás", "account.cancel_follow_request": "Követési kérés visszavonása", "account.copy": "Hivatkozás másolása a profilba", "account.direct": "@{name} személyes említése", "account.disable_notifications": "Ne figyelmeztessen, ha @{name} bejegyzést tesz közzé", - "account.domain_blocking": "Domain tiltás", "account.edit_note": "Személyes megjegyzés szerkesztése", "account.edit_profile": "Profil szerkesztése", "account.edit_profile_short": "Szerkesztés", @@ -71,6 +69,16 @@ "account.go_to_profile": "Ugrás a profilhoz", "account.hide_reblogs": "@{name} megtolásainak elrejtése", "account.in_memoriam": "Emlékünkben.", + "account.join_modal.day": "Nap", + "account.join_modal.me": "Ekkor csatlakoztál ide: {server}", + "account.join_modal.me_anniversary": "Boldog Födinapot! Ekkor csatlakoztál ide: {server}", + "account.join_modal.me_today": "Ez az első napod itt: {server}!", + "account.join_modal.other": "{name} ekkor csatlakozott ide: {server}", + "account.join_modal.other_today": "Ez {name} első napja itt: {server}!", + "account.join_modal.share.celebrate": "Ünnepi bejegyzés megosztása", + "account.join_modal.share.intro": "Bemutatkozó bejegyzés megosztása", + "account.join_modal.share.welcome": "Üdvözlő bejegyzés megosztása", + "account.join_modal.years": "{number, plural, one {év} other {év}}", "account.joined_short": "Csatlakozott", "account.languages": "Feliratkozott nyelvek módosítása", "account.last_active": "Utoljára aktív", @@ -101,7 +109,6 @@ "account.mute_notifications_short": "Értesítések némítása", "account.mute_short": "Némítás", "account.muted": "Némítva", - "account.muting": "Némítás", "account.mutual": "Követitek egymást", "account.name.copy": "Fióknév másolása", "account.name.help.domain": "A(z) {domain} a kiszolgáló, amely a felhasználó profilját és bejegyzéseit szolgálja ki.", @@ -121,11 +128,11 @@ "account.note.edit_button": "Szerkesztés", "account.note.title": "Személyes megjegyzés (csak te látod)", "account.open_original_page": "Eredeti oldal megnyitása", + "account.pending": "Függőben", "account.posts": "Bejegyzések", "account.remove_from_followers": "{name} eltávolítása a követők közül", "account.report": "@{name} jelentése", "account.requested_follow": "{name} kérte, hogy követhessen", - "account.requests_to_follow_you": "Kéri, hogy követhessen", "account.share": "@{name} profiljának megosztása", "account.show_reblogs": "@{name} megtolásainak mutatása", "account.statuses_counter": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}", @@ -217,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "„Média” lap megjelenítése", "account_edit.profile_tab.show_media_replies.description": "Ha engedélyezve van, akkor a Média lap megjeleníti a bejegyzéseidet és a mások bejegyzéseihez írt válaszaidat.", "account_edit.profile_tab.show_media_replies.title": "Válaszok megjelenítése a „Média” lapon", - "account_edit.profile_tab.subtitle": "Szabd testre a profilodon látható lapokat, és a megjelenített tartalmukat.", - "account_edit.profile_tab.title": "Profil lap beállításai", "account_edit.save": "Mentés", "account_edit.upload_modal.back": "Vissza", "account_edit.upload_modal.done": "Kész", @@ -377,11 +382,9 @@ "collections.create.accounts_title": "Kit emelsz ki ebben a gyűjteményben?", "collections.create.basic_details_title": "Alapvető részletek", "collections.create.steps": "{step}. lépés/{total}", - "collections.create_a_collection_hint": "Gyűjtemény létrehozása a kedvenc fiókok másoknak való ajánlásához.", "collections.create_collection": "Gyűjtemény létrehozása", "collections.delete_collection": "Gyűjtemény törlése", "collections.description_length_hint": "100 karakteres korlát", - "collections.detail.accounts_heading": "Fiókok", "collections.detail.author_added_you_on_date": "{author} hozzáadott ekkor: {date}", "collections.detail.loading": "Gyűjtemény betöltése…", "collections.detail.revoke_inclusion": "Saját magam eltávolítása", @@ -390,17 +393,23 @@ "collections.detail.share": "Gyűjtemény megosztása", "collections.detail.you_are_in_this_collection": "Kiemeltek téged ebben a gyűjteményhez", "collections.edit_details": "Részletek szerkesztése", - "collections.error_loading_collections": "Hiba történt a gyűjtemények betöltése során.", "collections.hidden_accounts_description": "Blokkoltad vagy letiltottad {count, plural, one {ezt a felhasználót} other {ezeket a felhasználókat}}", "collections.hidden_accounts_link": "{count, plural, one {# rejtett fiók} other {# rejtett fiók}}", "collections.hints.accounts_counter": "{count}/{max} fiók", "collections.last_updated_at": "Utoljára frissítve: {date}", + "collections.list.collections_with_count": "{count, plural, one {# gyűjtemény} other {# gyűjtemény}}", + "collections.list.created_by_author": "Létrehozta: {name}", + "collections.list.created_by_you": "Te hoztad létre", + "collections.list.featuring_you": "Tartalmaz téged", "collections.manage_accounts": "Fiókok kezelése", "collections.mark_as_sensitive": "Megjelelölés érzénykenként", "collections.mark_as_sensitive_hint": "Tartalmi figyelmeztetés mögé rejti a gyűjtemény leírását és a fiókokat. A gyűjtemény neve továbbra is látható lesz.", + "collections.maximum_collection_count_description": "A kiszolgáló legfeljebb {count} gyűjtemény létrehozását engedélyezi.", + "collections.maximum_collection_count_reached": "Elérted a gyűjtemények maximális számát", "collections.name_length_hint": "40 karakteres korlát", "collections.new_collection": "Új gyűjtemény", - "collections.no_collections_yet": "Még nincsenek gyűjtemények.", + "collections.pending_accounts.message": "A fiókok függőben lévőként jelenhetnek meg, ha a felhasználó vagy a kiszolgálója válaszára várunk. Csak te láthatod a függőben lévő fiókokat.", + "collections.pending_accounts.title": "Miért látom a függőben lévő fiókokat?", "collections.remove_account": "Eltávolítás", "collections.report_collection": "Gyűjtemény jelentése", "collections.revoke_collection_inclusion": "Saját magam eltávolítása ebből a gyűjteményből", @@ -442,11 +451,11 @@ "column.list_members": "Listatagok kezelése", "column.lists": "Listák", "column.mutes": "Némított felhasználók", - "column.my_collections": "Saját gyűjtemények", "column.notifications": "Értesítések", "column.other_collections": "{name} gyűjteményei", "column.pins": "Kitűzött bejegyzések", "column.public": "Föderációs idővonal", + "column.your_collections": "Saját gyűjtemények", "column_back_button.label": "Vissza", "column_header.hide_settings": "Beállítások elrejtése", "column_header.moveLeft_settings": "Oszlop áthelyezése balra", @@ -1184,6 +1193,7 @@ "server_banner.active_users": "aktív felhasználó", "server_banner.administered_by": "Adminisztrátor:", "server_banner.is_one_of_many": "{domain} egy a jelentős, független Mastodon kiszolgálók közül, melyet a fediverzumban való részvételre használhatsz.", + "server_banner.more_about_this_server": "Több információ a kiszolgálóról", "server_banner.server_stats": "Kiszolgálóstatisztika:", "sign_in_banner.create_account": "Fiók létrehozása", "sign_in_banner.follow_anyone": "Kövess bárkit a fediverzumon keresztül, és láss mindent időrendi sorrendben. Algoritmusok, hirdetések, kattintásvadászat nélkül.", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 96e5e2bbd2..f4c473a688 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -21,12 +21,10 @@ "account.block_domain": "Blocar dominio {domain}", "account.block_short": "Blocar", "account.blocked": "Blocate", - "account.blocking": "Blocate", "account.cancel_follow_request": "Cancellar sequimento", "account.copy": "Copiar ligamine a profilo", "account.direct": "Mentionar privatemente @{name}", "account.disable_notifications": "Non plus notificar me quando @{name} publica", - "account.domain_blocking": "Dominio blocate", "account.edit_profile": "Modificar profilo", "account.edit_profile_short": "Modificar", "account.enable_notifications": "Notificar me quando @{name} publica", @@ -65,7 +63,6 @@ "account.mute_notifications_short": "Silentiar le notificationes", "account.mute_short": "Silentiar", "account.muted": "Silentiate", - "account.muting": "Silentiate", "account.mutual": "Sequimento mutue", "account.no_bio": "Nulle description fornite.", "account.open_original_page": "Aperir le pagina original", @@ -73,7 +70,6 @@ "account.remove_from_followers": "Remover {name} del sequitores", "account.report": "Reportar @{name}", "account.requested_follow": "{name} ha requestate de sequer te", - "account.requests_to_follow_you": "Requestas de sequer te", "account.share": "Compartir profilo de @{name}", "account.show_reblogs": "Monstrar impulsos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 203a2b5755..833ce29192 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -21,12 +21,10 @@ "account.block_domain": "Blokir domain {domain}", "account.block_short": "Blokir", "account.blocked": "Terblokir", - "account.blocking": "Memblokir", "account.cancel_follow_request": "Batalkan permintaan ikut", "account.copy": "Salin tautan ke profil", "account.direct": "Sebut secara pribadi @{name}", "account.disable_notifications": "Berhenti memberitahu saya ketika @{name} memposting", - "account.domain_blocking": "Memblokir domain", "account.edit_profile": "Ubah profil", "account.enable_notifications": "Beritahu saya saat @{name} memposting", "account.endorse": "Tampilkan di profil", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 49ebfea7dd..512717621f 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -28,12 +28,10 @@ "account.block_domain": "Blokusar {domain}", "account.block_short": "Blokusar", "account.blocked": "Blokusita", - "account.blocking": "Blokusas", "account.cancel_follow_request": "Desendez sequodemando", "account.copy": "Kopiez ligilo al profilo", "account.direct": "Private mencionez @{name}", "account.disable_notifications": "Cesez avizar me kande @{name} postas", - "account.domain_blocking": "Blokusas domeno", "account.edit_note": "Redaktez personala noto", "account.edit_profile": "Redaktar profilo", "account.edit_profile_short": "Redaktez", @@ -89,7 +87,6 @@ "account.mute_notifications_short": "Silencigez avizi", "account.mute_short": "Silencigez", "account.muted": "Silencigata", - "account.muting": "Silencigas", "account.name.help.header": "Nometo esas kam retpostadreso", "account.no_bio": "Deskriptajo ne provizesis.", "account.open_original_page": "Apertez originala pagino", @@ -129,8 +126,6 @@ "account_edit.profile_tab.show_media.title": "Montrez 'Audvidajo'-langeto", "account_edit.profile_tab.show_media_replies.description": "Kande aktivigita, audvidajlangeto montras ambe vua afishi e respondi ad afishi di altra personi.", "account_edit.profile_tab.show_media_replies.title": "Inkluzas respondi che 'Audvidajo'-langeto", - "account_edit.profile_tab.subtitle": "Kustumizas la langeti che vua profilo e quon li montras.", - "account_edit.profile_tab.title": "Profillangetpreferaji", "account_edit.verified_modal.invisible_link.details": "Adjuntez la ligilo ad vua kapimajo. Vu anke povas uzar ligiletiketo en la kapimajo di la pagino vice {tag}, ma la HTML mustas esar acesebla sen exekutar JavaScript.", "account_edit_tags.help_text": "Estalita gretvorti helpas uzanti deskovrar e interagar kun vua profilo.", "account_edit_tags.max_tags_reached": "Vu atingas la maxim quanto di estalita gretvorti.", @@ -212,7 +207,6 @@ "collection.share_template_own": "Videz mia nova kolektajo: {link}", "collections.content_warning": "Kontenajaverto", "collections.create.accounts_title": "Quan vu estalos en ca kolektajo?", - "collections.create_a_collection_hint": "Kreez kolektajo por rekomendar o kunhavigez vua favoriza konti kun altri.", "collections.detail.share": "Kunhavigez ca kolektajo", "collections.mark_as_sensitive_hint": "Celas deskripto di la kolektajo e konti dop kontenajaverto.", "column.about": "Pri co", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index cc2629bc57..c035e899dc 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -28,12 +28,10 @@ "account.block_domain": "Útiloka lénið {domain}", "account.block_short": "Útiloka", "account.blocked": "Útilokaður", - "account.blocking": "Útilokað", "account.cancel_follow_request": "Taka fylgjendabeiðni til baka", "account.copy": "Afrita tengil í notandasnið", "account.direct": "Einkaspjall við @{name}", "account.disable_notifications": "Hætta að láta mig vita þegar @{name} sendir inn", - "account.domain_blocking": "Útilokað lén", "account.edit_note": "Breyta persónulegum minnispunkti", "account.edit_profile": "Breyta notandasniði", "account.edit_profile_short": "Breyta", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Þagga í tilkynningum", "account.mute_short": "Þagga niður", "account.muted": "Þaggaður", - "account.muting": "Þöggun", "account.mutual": "Þið fylgið hvor öðrum", "account.name.copy": "Afrita kennislóð", "account.name.help.domain": "{domain} er netþjónninn sem hýsir upplýsingasnið um notandann og færslurnar hans.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Breyta", "account.note.title": "Einkaminnispunktur (einungis sýnilegur þér)", "account.open_original_page": "Opna upprunalega síðu", + "account.pending": "Í bið", "account.posts": "Færslur", "account.remove_from_followers": "Fjarlægja {name} úr fylgjendum", "account.report": "Kæra @{name}", "account.requested_follow": "{name} hefur beðið um að fylgjast með þér", - "account.requests_to_follow_you": "Bað um að fylgja þér", "account.share": "Deila notandasniði fyrir @{name}", "account.show_reblogs": "Sýna endurbirtingar frá @{name}", "account.statuses_counter": "{count, plural, one {{counter} færsla} other {{counter} færslur}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "Birta 'Myndefni' flipa", "account_edit.profile_tab.show_media_replies.description": "Þegar þetta er virkt, sýnir myndefnisflipinn bæði færslurnar þínar og svör þín við færslum annarra.", "account_edit.profile_tab.show_media_replies.title": "Hafa með svör á flipanum ‘Myndefni’", - "account_edit.profile_tab.subtitle": "Sérsníddu flipana á notandasniðinu þínu og hvað þeir birta.", - "account_edit.profile_tab.title": "Stillingar notandasniðsflipa", + "account_edit.profile_tab.show_relations.description": "Birtir öðrum notendum á notandasniðinu þínu þá aðganga sem þú fylgist með og sem fylgjast með þér. Fólk mun áfram geta séð hvort þú fylgist með þeim.", + "account_edit.profile_tab.show_relations.title": "Sýna 'Fylgjendur’ og 'Fylgist með'", + "account_edit.profile_tab.subtitle": "Sérsníddu hvernig notandasniðið þitt birtist.", + "account_edit.profile_tab.title": "Stillingar á birtingu notandasniðs", "account_edit.save": "Vista", "account_edit.upload_modal.back": "Til baka", "account_edit.upload_modal.done": "Lokið", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "Settu inn myllumerki…", "account_edit_tags.suggestions": "Tillögur:", "account_edit_tags.tag_status_count": "{count, plural, one {# færsla} other {# færslur}}", + "account_list.hidden_notice": "Þetta er aðeins sýnilegt þér. Til að sýna öðrum þennan lista, skaltu fara á {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# aðgangur} other {# aðgangar}}", "account_note.placeholder": "Smelltu til að bæta við minnispunkti", "admin.dashboard.daily_retention": "Hlutfall virkra notenda eftir nýskráningu eftir dögum", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "Hvern vilt þú gera áberandi í þessu safni?", "collections.create.basic_details_title": "Grunnupplýsingar", "collections.create.steps": "Skref {step}/{total}", - "collections.create_a_collection_hint": "Búðu til safn með eftirlætisnotendunum þínum til að deila eða mæla með við aðra.", "collections.create_collection": "Búa til safn", "collections.delete_collection": "Eyða safni", "collections.description_length_hint": "100 stafa takmörk", - "collections.detail.accounts_heading": "Aðgangar", "collections.detail.author_added_you_on_date": "{author} bætti þér við þann {date}", "collections.detail.loading": "Hleð inn safni…", "collections.detail.revoke_inclusion": "Fjarlægja mig", @@ -400,11 +398,15 @@ "collections.detail.share": "Deila þessu safni", "collections.detail.you_are_in_this_collection": "Þú kemur fyrir í þessu safni", "collections.edit_details": "Breyta ítarupplýsingum", - "collections.error_loading_collections": "Villa kom upp þegar reynt var að hlaða inn söfnunum þínum.", + "collections.error_loading_collections": "Villa kom upp þegar reynt var að hlaða inn þessum söfnum.", "collections.hidden_accounts_description": "Þú hefur lokað á eða þaggað niður í {count, plural, one {þessum notanda} other {þessum notendum}}", "collections.hidden_accounts_link": "{count, plural, one {# falinn aðgangur} other {# faldir aðgangar}}", "collections.hints.accounts_counter": "{count}/{max} aðgöngum", "collections.last_updated_at": "Síðast uppfært: {date}", + "collections.list.collections_with_count": "{count, plural, one {# safn} other {# söfn}}", + "collections.list.created_by_author": "Útbúið af {name}", + "collections.list.created_by_you": "Útbúið af þér", + "collections.list.featuring_you": "Innifelur þig", "collections.manage_accounts": "Sýsla með notandaaðganga", "collections.mark_as_sensitive": "Merkja sem viðkvæmt", "collections.mark_as_sensitive_hint": "Felur lýsingu safnsins og notendur á bakvið aðvörun vegna efnis. Nafn safnsins verður áfram sýnilegt.", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "Þú hefur útbúið leyfilegan hámarksfjölda safna", "collections.name_length_hint": "40 stafa takmörk", "collections.new_collection": "Nýtt safn", - "collections.no_collections_yet": "Engin söfn ennþá.", + "collections.pending_accounts.message": "Aðgangar geta litið út fyrir að vera í biðstöðu á meðan beðið er eftir svari frá þeim eða netþjóninum þar sem þeir eru hýstir. Einungis þú getur séð aðganga sem eru í bið.", + "collections.pending_accounts.title": "Af hverju er ég að sjá aðganga sem bíða?", "collections.remove_account": "Fjarlægja", "collections.report_collection": "Tilkynna þetta safn", "collections.revoke_collection_inclusion": "Fjarlægja mig úr þessu safni", @@ -454,11 +457,11 @@ "column.list_members": "Sýsla með meðlimi listans", "column.lists": "Listar", "column.mutes": "Þaggaðir notendur", - "column.my_collections": "Söfnin mín", "column.notifications": "Tilkynningar", "column.other_collections": "Söfn frá {name}", "column.pins": "Festar færslur", "column.public": "Sameiginleg tímalína", + "column.your_collections": "Söfnin þín", "column_back_button.label": "Til baka", "column_header.hide_settings": "Fela stillingar", "column_header.moveLeft_settings": "Færa dálk til vinstri", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "Notandasnið ekki tiltækt", "empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.", "empty_column.bookmarked_statuses": "Þú ert ekki ennþá með neinar bókamerktar færslur. Þegar þú bókamerkir færslu, mun það birtast hér.", + "empty_column.collections.featured_in": "Þér hefur enn ekki verið bætt við nein söfn.", "empty_column.community": "Staðværa tímalínan er tóm. Skrifaðu eitthvað opinberlega til að láta boltann fara að rúlla!", "empty_column.direct": "Þú ert ekki ennþá með neitt einkaspjall við neinn. Þegar þú sendir eða tekur við slíku, mun það birtast hér.", "empty_column.disabled_feed": "Þetta streymi hefur verið gert óvirkt af stjórnendum netþjónis þíns.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 0b9d4dfc3d..4da29542e1 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -28,12 +28,10 @@ "account.block_domain": "Blocca dominio {domain}", "account.block_short": "Blocca", "account.blocked": "Bloccato", - "account.blocking": "Account bloccato", "account.cancel_follow_request": "Annulla la richiesta di seguire", "account.copy": "Copia link del profilo", "account.direct": "Menziona privatamente @{name}", "account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post", - "account.domain_blocking": "Account di un dominio bloccato", "account.edit_note": "Modifica la nota personale", "account.edit_profile": "Modifica profilo", "account.edit_profile_short": "Modifica", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Silenzia notifiche", "account.mute_short": "Silenzia", "account.muted": "Mutato", - "account.muting": "Account silenziato", "account.mutual": "Vi seguite a vicenda", "account.name.copy": "Copia il nome univoco", "account.name.help.domain": "{domain} è il server che ospita il profilo e i post dell'utente.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Modifica", "account.note.title": "Nota personale (visibile solo per te)", "account.open_original_page": "Apri la pagina originale", + "account.pending": "In attesa", "account.posts": "Post", "account.remove_from_followers": "Rimuovi {name} dai follower", "account.report": "Segnala @{name}", "account.requested_follow": "{name} ha richiesto di seguirti", - "account.requests_to_follow_you": "Richieste di seguirti", "account.share": "Condividi il profilo di @{name}", "account.show_reblogs": "Mostra condivisioni da @{name}", "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} post}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "Mostra la scheda \"Media\"", "account_edit.profile_tab.show_media_replies.description": "Quando abilitata, la scheda Media mostra sia i tuoi post che le risposte ai post di altre persone.", "account_edit.profile_tab.show_media_replies.title": "Includi le risposte nella scheda \"Media\"", - "account_edit.profile_tab.subtitle": "Personalizza le schede del tuo profilo e ciò che mostrano.", - "account_edit.profile_tab.title": "Impostazioni della scheda del profilo", + "account_edit.profile_tab.show_relations.description": "Mostra gli account che segui e i follower ad altri utenti nel tuo profilo. Le persone saranno ancora in grado di vedere se li stai seguendo.", + "account_edit.profile_tab.show_relations.title": "Mostra \"Followers\" e \"Seguiti\"", + "account_edit.profile_tab.subtitle": "Personalizza come viene visualizzato il tuo profilo.", + "account_edit.profile_tab.title": "Impostazioni di visualizzazione del profilo", "account_edit.save": "Salva", "account_edit.upload_modal.back": "Indietro", "account_edit.upload_modal.done": "Fatto", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "Inserisci un hashtag…", "account_edit_tags.suggestions": "Suggerimenti:", "account_edit_tags.tag_status_count": "{count, plural, one {# post} other {# post}}", + "account_list.hidden_notice": "Questo è visibile solo a te. Per mostrare questa lista ad altri, vai su {page} > {modal} > {field}.", "account_list.total": "{total, plural, one {# account} other {# account}}", "account_note.placeholder": "Clicca per aggiungere una nota", "admin.dashboard.daily_retention": "Tasso di ritenzione dell'utente per giorno, dopo la registrazione", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "Chi includerai in questa collezione?", "collections.create.basic_details_title": "Dettagli di base", "collections.create.steps": "Step {step}/{total}", - "collections.create_a_collection_hint": "Crea una collezione per consigliare o condividere i tuoi account preferiti con altri.", "collections.create_collection": "Crea la collezione", "collections.delete_collection": "Cancella la collezione", "collections.description_length_hint": "Limite di 100 caratteri", - "collections.detail.accounts_heading": "Account", "collections.detail.author_added_you_on_date": "{author} ti ha aggiunto/a in data: {date}", "collections.detail.loading": "Caricamento della collezione…", "collections.detail.revoke_inclusion": "Rimuovimi", @@ -400,11 +398,15 @@ "collections.detail.share": "Condividi questa collezione", "collections.detail.you_are_in_this_collection": "Sei presente in questa collezione", "collections.edit_details": "Modifica i dettagli", - "collections.error_loading_collections": "Si è verificato un errore durante il tentativo di caricare le tue collezioni.", + "collections.error_loading_collections": "Si è verificato un errore durante il tentativo di caricare queste collezioni.", "collections.hidden_accounts_description": "Hai bloccato o silenziato {count, plural, one {questo utente} other {questi utenti}}", "collections.hidden_accounts_link": "{count, plural, one {# account nascosto} other {# account nascosti}}", "collections.hints.accounts_counter": "{count}/{max} account", "collections.last_updated_at": "Ultimo aggiornamento: {date}", + "collections.list.collections_with_count": "{count, plural, one {# collezione} other {# collezioni}}", + "collections.list.created_by_author": "Create da {name}", + "collections.list.created_by_you": "Create da te", + "collections.list.featuring_you": "Con te", "collections.manage_accounts": "Gestisci account", "collections.mark_as_sensitive": "Segna come sensibile", "collections.mark_as_sensitive_hint": "Nasconde la descrizione e gli account della collezione dietro un avviso di contenuto. Il nome della collezione rimarrà visibile.", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "Hai creato il numero massimo di collezioni", "collections.name_length_hint": "Limite di 40 caratteri", "collections.new_collection": "Nuova collezione", - "collections.no_collections_yet": "Nessuna collezione ancora.", + "collections.pending_accounts.message": "Gli account potrebbero apparire in attesa quando stiamo aspettando una risposta dall'utente o dal suo server. Solo tu puoi visualizzare gli account in attesa.", + "collections.pending_accounts.title": "Perché sto vedendo gli account in attesa?", "collections.remove_account": "Rimuovi", "collections.report_collection": "Segnala questa collezione", "collections.revoke_collection_inclusion": "Rimuovimi da questa collezione", @@ -454,11 +457,11 @@ "column.list_members": "Gestisci i membri della lista", "column.lists": "Liste", "column.mutes": "Utenti silenziati", - "column.my_collections": "Le mie collezioni", "column.notifications": "Notifiche", "column.other_collections": "Collezioni di {name}", "column.pins": "Post fissati", "column.public": "Timeline federata", + "column.your_collections": "Le tue collezioni", "column_back_button.label": "Indietro", "column_header.hide_settings": "Nascondi impostazioni", "column_header.moveLeft_settings": "Sposta colonna a sinistra", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "Profilo non disponibile", "empty_column.blocks": "Non hai ancora bloccato alcun utente.", "empty_column.bookmarked_statuses": "Non hai ancora salvato nei segnalibri alcun post. Quando lo farai, apparirà qui.", + "empty_column.collections.featured_in": "Non sei ancora stato/a aggiunto/a ad alcuna collezione.", "empty_column.community": "La cronologia locale è vuota. Scrivi qualcosa pubblicamente per dare inizio alla festa!", "empty_column.direct": "Non hai ancora alcuna menzione privata. Quando ne invierai o riceverai una, apparirà qui.", "empty_column.disabled_feed": "Questo feed è stato disabilitato dagli amministratori del tuo server.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 0d6c7fbf7c..2459d80f24 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -28,12 +28,10 @@ "account.block_domain": "{domain}全体をブロック", "account.block_short": "ブロック", "account.blocked": "ブロック済み", - "account.blocking": "ブロック中", "account.cancel_follow_request": "フォローリクエストの取り消し", "account.copy": "プロフィールへのリンクをコピー", "account.direct": "@{name}さんに非公開でメンション", "account.disable_notifications": "@{name}さんの投稿時の通知を停止", - "account.domain_blocking": "ブロックしているドメイン", "account.edit_note": "個人的なメモを編集する", "account.edit_profile": "プロフィール編集", "account.edit_profile_short": "編集", @@ -96,7 +94,6 @@ "account.mute_notifications_short": "通知をオフにする", "account.mute_short": "ミュート", "account.muted": "ミュート済み", - "account.muting": "ミュート中", "account.mutual": "相互フォロー中", "account.no_bio": "説明が提供されていません。", "account.node_modal.callout": "個人的なメモはあなただけが見られます。", @@ -106,7 +103,6 @@ "account.remove_from_followers": "{name}さんをフォロワーから削除", "account.report": "@{name}さんを通報", "account.requested_follow": "{name}さんがあなたにフォローリクエストしました", - "account.requests_to_follow_you": "フォローリクエスト", "account.share": "@{name}さんのプロフィールを共有する", "account.show_reblogs": "@{name}さんからのブーストを表示", "account.statuses_counter": "{count, plural, other {{counter} 投稿}}", @@ -203,11 +199,9 @@ "collections.create.accounts_title": "このコレクションで誰に注目しますか?", "collections.create.basic_details_title": "基本情報", "collections.create.steps": "ステップ {step}/{total}", - "collections.create_a_collection_hint": "お気に入りのアカウントを他の人に勧めたり共有するコレクションを作成しましょう。", "collections.create_collection": "コレクションを作成", "collections.delete_collection": "コレクションを削除", "collections.description_length_hint": "100 文字まで", - "collections.detail.accounts_heading": "アカウント", "collections.detail.author_added_you_on_date": "{author} があなたを {date} に追加しました", "collections.detail.loading": "コレクションを読み込み中…", "collections.detail.share": "コレクションを共有", @@ -216,7 +210,6 @@ "collections.mark_as_sensitive_hint": "コレクションの説明とアカウントを閲覧注意で隠します。コレクション名は表示されます。", "collections.name_length_hint": "40 文字まで", "collections.new_collection": "新規のコレクション", - "collections.no_collections_yet": "コレクションはまだありません。", "collections.report_collection": "このコレクションを通報する", "collections.topic_hint": "ハッシュタグを追加して、このコレクションの主なトピックを知ってもらいましょう。", "collections.visibility_public": "公開", @@ -242,7 +235,6 @@ "column.list_members": "リストのメンバーを管理", "column.lists": "リスト", "column.mutes": "ミュートしたユーザー", - "column.my_collections": "私のコレクション", "column.notifications": "通知", "column.other_collections": "{name} によるコレクション", "column.pins": "固定された投稿", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 5c102a4f3e..d777d26982 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -161,7 +161,6 @@ "account_edit.name_modal.add_title": "Rnu isem ara d-yettwaskanen", "account_edit.name_modal.edit_title": "Ẓreg isem ara d-yettwaskanen", "account_edit.profile_tab.button_label": "Sagen", - "account_edit.profile_tab.title": "Iɣewwaren n yiccer n umaɣnu", "account_edit.save": "Sekles", "account_edit.upload_modal.back": "Uɣal", "account_edit.upload_modal.done": "Dayen", @@ -255,7 +254,6 @@ "collections.create_collection": "Snulfu-d talkensit", "collections.delete_collection": "Kkes talkensit", "collections.description_length_hint": "talast n 100 n yisekkilen", - "collections.detail.accounts_heading": "Imiḍanen", "collections.detail.author_added_you_on_date": "{author} yerna-k·em ass n {date}", "collections.detail.loading": "Aɛebbi n telkensit…", "collections.detail.revoke_inclusion": "Kkes-iyi", @@ -267,7 +265,6 @@ "collections.manage_accounts": "Sefrek imiḍanen", "collections.name_length_hint": "talast n 40 n yisekkilen", "collections.new_collection": "Talkensit tamaynut", - "collections.no_collections_yet": "Ur ɛad llant tilkensa.", "collections.remove_account": "Kkes", "collections.report_collection": "Cetki ɣef telkensit-a", "collections.revoke_collection_inclusion": "Kkes-iyi seg telkensit-a", @@ -291,7 +288,6 @@ "column.list_members": "Sefrek iεeggalen n tebdart", "column.lists": "Tibdarin", "column.mutes": "Imiḍanen yettwasgugmen", - "column.my_collections": "Tilkensa-w", "column.notifications": "Ilɣa", "column.other_collections": "Tilkensa sɣur {name}", "column.pins": "Tisuffaɣ yettwasenṭḍen", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 7e1a7aadee..c7bad1cc56 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -20,11 +20,9 @@ "account.block_domain": "{domain} доменін бұғаттау", "account.block_short": "Бұғаттау", "account.blocked": "Бұғатталған", - "account.blocking": "Бұғаттау", "account.cancel_follow_request": "Withdraw follow request", "account.direct": "@{name} жеке айту", "account.disable_notifications": "@{name} постары туралы ескертпеу", - "account.domain_blocking": "Доменді бұғаттау", "account.edit_profile": "Профильді өңдеу", "account.edit_profile_short": "Түзеу", "account.enable_notifications": "@{name} постары туралы ескерту", @@ -57,7 +55,6 @@ "account.mute_notifications_short": "Хабарландыруларды өшіру", "account.mute_short": "Өшіру", "account.muted": "Еленбейді", - "account.muting": "Өшіру", "account.mutual": "Сіздер бір-біріңізге жазылғансыздар", "account.no_bio": "Сипаттама берілмеген.", "account.open_original_page": "Бастапқы бетті ашу", @@ -65,7 +62,6 @@ "account.remove_from_followers": "{name} жазылушылардан жою", "account.report": "Шағымдану @{name}", "account.requested_follow": "{name} сізге жазылуға сұраныс жіберді", - "account.requests_to_follow_you": "Сізге жазылу сұраныстары", "account.share": "@{name} профилін бөлісу\"", "account.show_reblogs": "@{name} бөліскендерін көрсету", "account.statuses_counter": "{count, plural, one {{counter} жазба} other {{counter} жазба}}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index e77e324fb2..c0daf196bc 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -28,12 +28,10 @@ "account.block_domain": "{domain} 도메인 차단", "account.block_short": "차단", "account.blocked": "차단함", - "account.blocking": "차단함", "account.cancel_follow_request": "팔로우 취소", "account.copy": "프로필 링크 복사", "account.direct": "@{name} 님에게 개인 멘션", "account.disable_notifications": "@{name} 의 게시물 알림 끄기", - "account.domain_blocking": "도메인 차단함", "account.edit_note": "개인 메모 편집", "account.edit_profile": "프로필 편집", "account.edit_profile_short": "수정", @@ -92,7 +90,6 @@ "account.mute_notifications_short": "알림 뮤트", "account.mute_short": "뮤트", "account.muted": "뮤트됨", - "account.muting": "뮤트함", "account.mutual": "서로 팔로우", "account.no_bio": "제공된 설명이 없습니다.", "account.node_modal.save": "저장", @@ -103,7 +100,6 @@ "account.remove_from_followers": "팔로워에서 {name} 제거", "account.report": "@{name} 신고", "account.requested_follow": "{name} 님이 팔로우 요청을 보냈습니다", - "account.requests_to_follow_you": "팔로우 요청", "account.share": "@{name}의 프로필 공유", "account.show_reblogs": "@{name}의 부스트 보기", "account.statuses_counter": "{count, plural, other {게시물 {counter}개}}", @@ -225,7 +221,6 @@ "collections.delete_collection": "컬렉션 지우기", "collections.manage_accounts": "계정 관리하기", "collections.new_collection": "새 컬렉션", - "collections.no_collections_yet": "아직 컬렉션이 없습니다.", "collections.view_collection": "컬렉션 보기", "collections.visibility_public": "공개", "column.about": "정보", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 5ffe118fef..68181f0331 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -22,7 +22,6 @@ "account.block_domain": "Navpera {domain} asteng bike", "account.block_short": "Asteng bike", "account.blocked": "Astengkirî", - "account.blocking": "Astengkirin", "account.cancel_follow_request": "Daxwaza şopandinê vekişîne", "account.copy": "Girêdanê bo profîlê jê bigire", "account.direct": "Bi taybetî qale @{name} bike", @@ -70,7 +69,6 @@ "account.mute_notifications_short": "Agahdariyan bêdeng bike", "account.mute_short": "Bêdeng bike", "account.muted": "Bêdengkirî", - "account.muting": "Bêdengkirin", "account.mutual": "Hûn hevdû dişopînin", "account.no_bio": "Ti danasîn nehatiye tevlîkirin.", "account.open_original_page": "Rûpela resen veke", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index 78d1cd359d..d6c88a68d1 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -21,12 +21,10 @@ "account.block_domain": "Imperire dominium {domain}", "account.block_short": "Imperire", "account.blocked": "Impeditum est", - "account.blocking": "Clausus", "account.cancel_follow_request": "Petitio sequī retrāhere", "account.copy": "Transcribo connexi ut catagraphum", "account.direct": "Callim loqui @{name}", "account.disable_notifications": "Desine me certiorem facere cum @{name} scribit", - "account.domain_blocking": "Domenium obstructum", "account.edit_profile": "Recolere notionem", "account.enable_notifications": "Desine me certiorem facere cum @{name} scribit", "account.endorse": "Notatio in profilo", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index ea3bfaeb23..313e2f62d4 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -21,12 +21,10 @@ "account.block_domain": "Bloka el domeno {domain}", "account.block_short": "Bloka", "account.blocked": "Blokado", - "account.blocking": "Blokando", "account.cancel_follow_request": "Anula solisitud de segir", "account.copy": "Kopia atadijo de profil", "account.direct": "Enmenta a @{name} en privado", "account.disable_notifications": "Desha de avizarme sovre publikasyones de @{name}", - "account.domain_blocking": "Blokando el domeno", "account.edit_profile": "Edita profil", "account.edit_profile_short": "Edita", "account.enable_notifications": "Avizame kuando @{name} publike", @@ -64,14 +62,12 @@ "account.mute_notifications_short": "Silensia avizos", "account.mute_short": "Silensia", "account.muted": "Silensiado", - "account.muting": "Silensyando", "account.mutual": "Vos sigesh mutualmente", "account.no_bio": "No ay deskripsion.", "account.open_original_page": "Avre pajina orijnala", "account.posts": "Publikasyones", "account.report": "Raporta @{name}", "account.requested_follow": "{name} tiene solisitado segirte", - "account.requests_to_follow_you": "Solisita segirte", "account.share": "Partaja el profil de @{name}", "account.show_reblogs": "Amostra repartajasyones de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index f0ff45f352..6cd6c55f1d 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -27,12 +27,10 @@ "account.block_domain": "Blokuoti serverį {domain}", "account.block_short": "Blokuoti", "account.blocked": "Užblokuota", - "account.blocking": "Blokavimas", "account.cancel_follow_request": "Atšaukti sekimą", "account.copy": "Kopijuoti nuorodą į profilį", "account.direct": "Privačiai paminėti @{name}", "account.disable_notifications": "Nustoti man pranešti, kai @{name} paskelbia", - "account.domain_blocking": "Blokuoti domeną", "account.edit_note": "Redaguoti asmeninę pastabą", "account.edit_profile": "Redaguoti profilį", "account.edit_profile_short": "Redaguoti", @@ -77,7 +75,6 @@ "account.mute_notifications_short": "Nutildyti pranešimus", "account.mute_short": "Nutildyti", "account.muted": "Nutildytas", - "account.muting": "Užtildymas", "account.mutual": "Sekate vienas kitą", "account.no_bio": "Nėra pateikto aprašymo.", "account.node_modal.callout": "Asmeninės pastabos matomos tik jums.", @@ -93,7 +90,6 @@ "account.remove_from_followers": "Šalinti {name} iš sekėjų", "account.report": "Pranešti apie @{name}", "account.requested_follow": "{name} paprašė tave sekti", - "account.requests_to_follow_you": "Prašymai sekti jus", "account.share": "Bendrinti @{name} profilį", "account.show_reblogs": "Rodyti pasidalinimus iš @{name}", "account.statuses_counter": "{count, plural, one {{counter} įrašas} few {{counter} įrašai} many {{counter} įrašo} other {{counter} įrašų}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 30fab0f1bf..da87d2d9f5 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -14,19 +14,23 @@ "about.powered_by": "Decentralizētu sabiedrisko tīklu darbina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Personīga piezīme", + "account.activity": "Darbības", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", + "account.badges.admin": "Pārvaldītājs", + "account.badges.blocked": "Liegts", "account.badges.bot": "Automatizēts", + "account.badges.domain_blocked": "Liegts domēns", "account.badges.group": "Grupa", + "account.badges.muted": "Apklusināts", + "account.badges.muted_until": "Apklusināts līdz {until}", "account.block": "Bloķēt @{name}", "account.block_domain": "Bloķēt domēnu {domain}", "account.block_short": "Bloķēt", "account.blocked": "Bloķēts", - "account.blocking": "Bloķēts", "account.cancel_follow_request": "Atsaukt sekošanas pieprasījumu", "account.copy": "Ievietot saiti uz profilu starpliktuvē", "account.direct": "Pieminēt @{name} privāti", "account.disable_notifications": "Pārtraukt man paziņot, kad @{name} izveido ierakstu", - "account.domain_blocking": "Liegts domēns", "account.edit_profile": "Labot profilu", "account.edit_profile_short": "Labot", "account.enable_notifications": "Paziņot man, kad @{name} izveido ierakstu", @@ -36,6 +40,12 @@ "account.familiar_followers_two": "Kam seko {name1} un {name2}", "account.featured": "Izcelts", "account.featured.accounts": "Profili", + "account.featured.collections": "Krājumi", + "account.featured.new_collection": "Jauns krājums", + "account.field_overflow": "Rādīt visu saturu", + "account.filters.all": "Visas darbības", + "account.filters.boosts_toggle": "Rādīt pastiprinātos ierakstus", + "account.filters.posts_boosts": "Ieraksti un pastiprinātie ieraksti", "account.filters.posts_only": "Ieraksti", "account.filters.posts_replies": "Ieraksti un atbildes", "account.filters.replies_toggle": "Rādīt atbildes", @@ -57,20 +67,33 @@ "account.go_to_profile": "Doties uz profilu", "account.hide_reblogs": "Paslēpt @{name} pastiprinātos ierakstus", "account.in_memoriam": "Piemiņai.", + "account.join_modal.day": "Diena", + "account.join_modal.me": "Tu pievienojies {server}", "account.joined_short": "Pievienojās", "account.languages": "Mainīt abonētās valodas", "account.link_verified_on": "Šīs saites piederība tika pārbaudīta {date}", "account.locked_info": "Šī konta privātuma statuss ir slēgts. Īpašnieks izskatīs, kurš viņam drīkst sekot.", "account.media": "Multivide", "account.mention": "Pieminēt @{name}", + "account.menu.add_to_list": "Pievienot sarakstam…", "account.menu.block": "Bloķēt kontu", + "account.menu.block_domain": "Liegt {domain}", "account.menu.copy": "Kopēt saiti", + "account.menu.mute": "Apklusināt kontu", + "account.menu.note.description": "Redzams tikai Tev", + "account.menu.open_original_page": "Apskatīt {domain}", + "account.menu.remove_follower": "Noņemt sekotāju", + "account.menu.report": "Ziņot par kontu", + "account.menu.share": "Kopīgot…", + "account.menu.show_reblogs": "Laika joslā rādīt pastiprinātos ierakstus", + "account.menu.unblock": "Atcelt konta liegumu", + "account.menu.unblock_domain": "Atcelt {domain} liegumu", + "account.menu.unmute": "Atcelt konta apklusināšanu", "account.moved_to": "{name} norādīja, ka viņu jaunais konts tagad ir:", "account.mute": "Apklusināt @{name}", "account.mute_notifications_short": "Apklusināt paziņojumus", "account.mute_short": "Apklusināt", "account.muted": "Apklusināts", - "account.muting": "Apklusināts", "account.mutual": "Jūs sekojat viens otram", "account.name_info": "Ko tas nozīmē?", "account.no_bio": "Apraksts nav sniegts.", @@ -81,7 +104,6 @@ "account.remove_from_followers": "Dzēst sekotāju {name}", "account.report": "Ziņot par @{name}", "account.requested_follow": "{name} nosūtīja Tev sekošanas pieprasījumu", - "account.requests_to_follow_you": "Sekošanas pieprasījumi", "account.share": "Dalīties ar @{name} profilu", "account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus", "account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", @@ -168,7 +190,7 @@ "bundle_column_error.copy_stacktrace": "Ievietot kļūdu ziņojumu starpliktuvē", "bundle_column_error.error.body": "Pieprasīto lapu nevarēja atveidot. Tas varētu būt saistīts ar kļūdu mūsu kodā, vai tā ir pārlūkprogrammas saderības problēma.", "bundle_column_error.error.title": "Ak vai!", - "bundle_column_error.network.body": "Kļūda lapas ielādēšanas laikā. Tas varētu būt īzlaicīgs sarežģījums ar interneta savienojumu vai šo serveri.", + "bundle_column_error.network.body": "Kļūda lapas ielādēšanas laikā. Tas varētu būt īslaicīgs sarežģījums ar interneta savienojumu vai šo serveri.", "bundle_column_error.network.title": "Tīkla kļūda", "bundle_column_error.retry": "Mēģināt vēlreiz", "bundle_column_error.return": "Atgriezties", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 352d52bf5c..d984de72cc 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -21,12 +21,10 @@ "account.block_domain": "Sekat domain {domain}", "account.block_short": "Sekat", "account.blocked": "Disekat", - "account.blocking": "Blocking", "account.cancel_follow_request": "Batalkan permintaan ikut", "account.copy": "Salin pautan ke profil", "account.direct": "Sebut secara persendirian @{name}", "account.disable_notifications": "Berhenti maklumkan saya apabila @{name} mengirim hantaran", - "account.domain_blocking": "Blocking domain", "account.edit_profile": "Sunting profil", "account.edit_profile_short": "Sunting", "account.enable_notifications": "Maklumi saya apabila @{name} mengirim hantaran", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index 843376ae28..a1036662c5 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -28,12 +28,10 @@ "account.block_domain": "封鎖域名 {domain}", "account.block_short": "封鎖", "account.blocked": "Hőng封鎖", - "account.blocking": "Teh封鎖", "account.cancel_follow_request": "取消跟tuè", "account.copy": "Khóo-pih個人資料ê連結", "account.direct": "私人提起 @{name}", "account.disable_notifications": "停止佇 {name} PO文ê時通知我", - "account.domain_blocking": "Teh封鎖ê域名", "account.edit_note": "編私人ê註解", "account.edit_profile": "編輯個人資料", "account.edit_profile_short": "編輯", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Kā通知消音", "account.mute_short": "消音", "account.muted": "消音ah", - "account.muting": "消音", "account.mutual": "Lín sio跟tuè", "account.name.copy": "Khóo-pih口座ê名", "account.name.help.domain": "", @@ -135,7 +132,6 @@ "account.remove_from_followers": "Kā {name} tuì跟tuè lí ê ê內底suá掉", "account.report": "檢舉 @{name}", "account.requested_follow": "{name} 請求跟tuè lí", - "account.requests_to_follow_you": "請求跟tuè lí", "account.share": "分享 @{name} ê個人資料", "account.show_reblogs": "顯示uì @{name} 來ê轉PO", "account.statuses_counter": "{count, plural, other {{count} ê PO文}}", @@ -227,8 +223,6 @@ "account_edit.profile_tab.show_media.title": "展示「媒體」分頁", "account_edit.profile_tab.show_media_replies.description": "若是啟用,媒體分頁展示lí ê PO文kap對別lâng ê PO文ê回應。", "account_edit.profile_tab.show_media_replies.title": "佇媒體分頁內包含回應", - "account_edit.profile_tab.subtitle": "自訂lí ê個人資料ê分頁kap顯示ê內容。", - "account_edit.profile_tab.title": "個人資料分頁設定", "account_edit.save": "儲存", "account_edit.upload_modal.back": "轉去", "account_edit.upload_modal.done": "做好ah", @@ -387,11 +381,9 @@ "collections.create.accounts_title": "Lí想beh佇收藏內底予siáng標做特色ê?", "collections.create.basic_details_title": "基本ê資料", "collections.create.steps": "第 {step} 步,總共 {total} 步", - "collections.create_a_collection_hint": "建立收藏來hām別lâng推薦á是分享lí上kah意ê口座。", "collections.create_collection": "建立收藏", "collections.delete_collection": "Thâi掉收藏", "collections.description_length_hint": "限制 100 字", - "collections.detail.accounts_heading": "口座", "collections.detail.author_added_you_on_date": "{author} 佇 {date} kā lí加入", "collections.detail.loading": "載入收藏……", "collections.detail.revoke_inclusion": "Kā我suá掉", @@ -400,7 +392,6 @@ "collections.detail.share": "分享tsit ê收藏", "collections.detail.you_are_in_this_collection": "Lí已經hőng加kàu tsit ê收藏", "collections.edit_details": "編輯詳細", - "collections.error_loading_collections": "佇載入lí ê收藏ê時陣出tshê。", "collections.hidden_accounts_description": "您有封鎖á是靜音{count, plural, one {tsit ê用者} other {tsiah ê用者}}", "collections.hidden_accounts_link": "{count, plural, other {# ê隱藏ê口座}}", "collections.hints.accounts_counter": "{count}/{max} ê口座", @@ -412,7 +403,6 @@ "collections.maximum_collection_count_reached": "Lí已經建立kàu收藏數ê盡磅ah", "collections.name_length_hint": "限制 40 字", "collections.new_collection": "新ê收藏", - "collections.no_collections_yet": "Iáu無收藏。", "collections.remove_account": "Suá掉", "collections.report_collection": "檢舉tsit ê收藏", "collections.revoke_collection_inclusion": "Kā我對收藏內底suá掉", @@ -454,7 +444,6 @@ "column.list_members": "管理列單ê成員", "column.lists": "列單", "column.mutes": "消音ê用者", - "column.my_collections": "我ê收藏", "column.notifications": "通知", "column.other_collections": "{name} ê收藏", "column.pins": "釘起來ê PO文", diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 2be766ef84..9ab7a53658 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -18,12 +18,10 @@ "account.block_domain": "{domain} डोमेनलाई ब्लक गर्नुहोस्", "account.block_short": "ब्लक", "account.blocked": "ब्लक गरिएको", - "account.blocking": "ब्लक गरिएको", "account.cancel_follow_request": "फलो अनुरोध रद्द गर्नुहोस", "account.copy": "प्रोफाइलको लिङ्क प्रतिलिपि गर्नुहोस्", "account.direct": "@{name} लाई निजी रूपमा उल्लेख गर्नुहोस्", "account.disable_notifications": "@{name} ले पोस्ट गर्दा मलाई सूचित नगर्नुहोस्", - "account.domain_blocking": "ब्लक गरिएको डोमेन", "account.edit_profile": "प्रोफाइल सम्पादन गर्नुहोस्", "account.enable_notifications": "@{name} ले पोस्ट गर्दा मलाई सूचित गर्नुहोस्", "account.endorse": "प्रोफाइलमा फिचर गर्नुहोस्", @@ -48,7 +46,6 @@ "account.mute_notifications_short": "सूचनाहरू म्यूट गर्नुहोस्", "account.mute_short": "म्युट", "account.muted": "म्युट गरिएको", - "account.muting": "म्यूट गरिएको", "account.mutual": "तपाईंहरु एकअर्कालाई फलो गर्नुहुन्छ", "account.no_bio": "कुनै विवरण प्रदान गरिएको छैन।", "account.posts": "पोस्टहरू", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 1017c975ed..67173f6eae 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -28,12 +28,10 @@ "account.block_domain": "Alles van {domain} blokkeren", "account.block_short": "Blokkeren", "account.blocked": "Geblokkeerd", - "account.blocking": "Geblokkeerd", "account.cancel_follow_request": "Ontvolgen", "account.copy": "Link naar profiel kopiëren", "account.direct": "@{name} een privébericht sturen", "account.disable_notifications": "Geen melding meer geven wanneer @{name} een bericht plaatst", - "account.domain_blocking": "Server geblokkeerd", "account.edit_note": "Persoonlijke opmerking bewerken", "account.edit_profile": "Profiel bewerken", "account.edit_profile_short": "Bewerken", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Meldingen negeren", "account.mute_short": "Negeren", "account.muted": "Genegeerd", - "account.muting": "Genegeerd", "account.mutual": "Jullie volgen elkaar", "account.name.copy": "Fediverse-adres kopiëren", "account.name.help.domain": "{domain} is de server waar zich het profiel en de berichten van de gebruiker bevinden.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Bewerken", "account.note.title": "Persoonlijke opmerking (alleen zichtbaar voor jou)", "account.open_original_page": "Originele pagina openen", + "account.pending": "In afwachting", "account.posts": "Berichten", "account.remove_from_followers": "{name} als volger verwijderen", "account.report": "@{name} rapporteren", "account.requested_follow": "{name} wil jou graag volgen", - "account.requests_to_follow_you": "Wil jou graag volgen", "account.share": "Account van @{name} delen", "account.show_reblogs": "Boosts van @{name} tonen", "account.statuses_counter": "{count, plural, one {{counter} bericht} other {{counter} berichten}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Tabblad 'Media' tonen", "account_edit.profile_tab.show_media_replies.description": "Wanneer dit is ingeschakeld, worden op het tabblad Media zowel jouw berichten en reacties op berichten van anderen weergegeven.", "account_edit.profile_tab.show_media_replies.title": "Jouw reacties aan het tabblad 'Media' toevoegen", - "account_edit.profile_tab.subtitle": "De tabbladen op je profiel aanpassen en wat er op wordt weergegeven.", - "account_edit.profile_tab.title": "Instellingen voor Profieltabblad", "account_edit.save": "Opslaan", "account_edit.upload_modal.back": "Terug", "account_edit.upload_modal.done": "Klaar", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Wie wil je aan deze verzameling toevoegen?", "collections.create.basic_details_title": "Basisgegevens", "collections.create.steps": "Stap {step}/{total}", - "collections.create_a_collection_hint": "Een verzameling aanmaken om je favoriete accounts aan te bevelen of te delen met anderen.", "collections.create_collection": "Verzameling aanmaken", "collections.delete_collection": "Verzameling verwijderen", "collections.description_length_hint": "Maximaal 100 karakters", - "collections.detail.accounts_heading": "Accounts", "collections.detail.author_added_you_on_date": "{author} heeft je op {date} toegevoegd", "collections.detail.loading": "Verzameling laden…", "collections.detail.revoke_inclusion": "Verwijder mij", @@ -400,11 +393,14 @@ "collections.detail.share": "Deze verzameling delen", "collections.detail.you_are_in_this_collection": "Je wordt in deze verzameling uitgelicht", "collections.edit_details": "Gegevens bewerken", - "collections.error_loading_collections": "Er is een fout opgetreden bij het laden van je verzamelingen.", "collections.hidden_accounts_description": "Je hebt {count, plural, one {deze gebruiker} other {deze gebruikers}} geblokkeerd", "collections.hidden_accounts_link": "{count, plural, one {# verborgen account} other {# verborgen accounts}}", "collections.hints.accounts_counter": "{count}/{max} accounts", "collections.last_updated_at": "Laatst bijgewerkt: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Verzameling} other {# Verzamelingen}}", + "collections.list.created_by_author": "Aangemaakt door {name}", + "collections.list.created_by_you": "Aangemaakt door jou", + "collections.list.featuring_you": "Uitgelicht door jou", "collections.manage_accounts": "Accounts beheren", "collections.mark_as_sensitive": "Als gevoelig markeren", "collections.mark_as_sensitive_hint": "Verbergt de omschrijving en de accounts van de verzameling achter een waarschuwing. De naam van de verzameling blijft zichtbaar.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Je hebt het maximum aantal lijsten aangemaakt", "collections.name_length_hint": "Limiet van 40 tekens", "collections.new_collection": "Nieuwe verzameling", - "collections.no_collections_yet": "Nog geen verzamelingen.", + "collections.pending_accounts.message": "Accounts tonen als in afwachting wanneer we wachten op een reactie van de gebruiker of hun server. Alleen jij kunt zien wanneer accounts in afwachting zijn.", + "collections.pending_accounts.title": "Waarom zie ik accounts die in afwachting zijn?", "collections.remove_account": "Verwijderen", "collections.report_collection": "Deze verzameling rapporteren", "collections.revoke_collection_inclusion": "Mezelf uit deze verzameling verwijderen", @@ -454,11 +451,11 @@ "column.list_members": "Lijstleden beheren", "column.lists": "Lijsten", "column.mutes": "Genegeerde gebruikers", - "column.my_collections": "Mijn verzamelingen", "column.notifications": "Meldingen", "column.other_collections": "Verzamelingen door {name}", "column.pins": "Vastgezette berichten", "column.public": "Globale tijdlijn", + "column.your_collections": "Jouw Verzamelingen", "column_back_button.label": "Terug", "column_header.hide_settings": "Instellingen verbergen", "column_header.moveLeft_settings": "Kolom naar links verplaatsen", @@ -963,7 +960,7 @@ "notification.reblog": "{name} boostte jouw bericht", "notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht geboost", "notification.relationships_severance_event": "Verloren verbindingen met {name}", - "notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.", + "notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van deze gebruiker kunt ontvangen of met deze gebruiker kunt communiceren.", "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt.", "notification.relationships_severance_event.learn_more": "Meer informatie", "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt, bent verloren.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index c3b76d6203..3fbc7621eb 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -28,12 +28,10 @@ "account.block_domain": "Skjul alt frå {domain}", "account.block_short": "Blokker", "account.blocked": "Blokkert", - "account.blocking": "Blokkerer", "account.cancel_follow_request": "Trekk attende fylgeførespurnad", "account.copy": "Kopier lenka til profilen", "account.direct": "Nemn @{name} privat", "account.disable_notifications": "Slutt å varsle meg når @{name} skriv innlegg", - "account.domain_blocking": "Blokkerer domenet", "account.edit_note": "Rediger det personlege notatet", "account.edit_profile": "Rediger profil", "account.edit_profile_short": "Rediger", @@ -100,7 +98,6 @@ "account.mute_notifications_short": "Demp varslingar", "account.mute_short": "Demp", "account.muted": "Målbunden", - "account.muting": "Dempa", "account.mutual": "De fylgjer kvarandre", "account.name.copy": "Kopier brukaradressa", "account.name.help.domain": "{domain} er tenaren som lagrar brukarprofilen og innlegga.", @@ -123,7 +120,6 @@ "account.remove_from_followers": "Fjern {name} frå fylgjarane dine", "account.report": "Rapporter @{name}", "account.requested_follow": "{name} har bedt om å få fylgja deg", - "account.requests_to_follow_you": "Folk som vil fylgja deg", "account.share": "Del @{name} sin profil", "account.show_reblogs": "Vis framhevingar frå @{name}", "account.statuses_counter": "{count, plural, one {{counter} innlegg} other {{counter} innlegg}}", @@ -215,8 +211,6 @@ "account_edit.profile_tab.show_media.title": "Vis «Medium»-fana", "account_edit.profile_tab.show_media_replies.description": "Når medium-fana er i bruk, syner ho både innlegga dine og svar på andre folk sine innlegg.", "account_edit.profile_tab.show_media_replies.title": "Ta med svar i «Medium»-fana", - "account_edit.profile_tab.subtitle": "Tilpass fanene på profilen din og kva dei syner.", - "account_edit.profile_tab.title": "Innstillingar for profilfane", "account_edit.save": "Lagre", "account_edit.upload_modal.back": "Tilbake", "account_edit.upload_modal.done": "Ferdig", @@ -369,11 +363,9 @@ "collections.create.accounts_title": "Kven vil du leggja vekt på denne samlinga?", "collections.create.basic_details_title": "Grunnleggjande opplysingar", "collections.create.steps": "Steg {step}/{total}", - "collections.create_a_collection_hint": "Lag ei samling for å tilrå eller dela favorittbrukarkontoane dine med andre.", "collections.create_collection": "Lag ei samling", "collections.delete_collection": "Slett samlinga", "collections.description_length_hint": "Maks 100 teikn", - "collections.detail.accounts_heading": "Kontoar", "collections.detail.author_added_you_on_date": "{author} la deg til {date}", "collections.detail.loading": "Lastar inn samling…", "collections.detail.revoke_inclusion": "Fjern meg", @@ -382,14 +374,12 @@ "collections.detail.share": "Del denne samlinga", "collections.detail.you_are_in_this_collection": "Du er framheva i denne samlinga", "collections.edit_details": "Rediger detaljar", - "collections.error_loading_collections": "Noko gjekk gale då me prøvde å henta samlingane dine.", "collections.last_updated_at": "Sist oppdatert: {date}", "collections.manage_accounts": "Handter kontoar", "collections.mark_as_sensitive": "Merk som ømtolig", "collections.mark_as_sensitive_hint": "Gøymer skildringa og kontoane i samlinga bak ei innhaldsåtvaring. Namnet på samlinga blir framleis synleg.", "collections.name_length_hint": "Maks 40 teikn", "collections.new_collection": "Ny samling", - "collections.no_collections_yet": "Du har ingen samlingar enno.", "collections.report_collection": "Rapporter denne samlinga", "collections.revoke_collection_inclusion": "Fjern meg frå denne samlinga", "collections.revoke_inclusion.confirmation": "Du er fjerna frå «{collection}»", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 37128f1d8c..47ffd1bd92 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -28,12 +28,10 @@ "account.block_domain": "Blokker domenet {domain}", "account.block_short": "Blokker", "account.blocked": "Blokkert", - "account.blocking": "Blokkerer", "account.cancel_follow_request": "Avbryt følgeforespørselen", "account.copy": "Kopier lenke til profil", "account.direct": "Nevn @{name} privat", "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", - "account.domain_blocking": "Blokkerer domene", "account.edit_note": "Rediger personlig notat", "account.edit_profile": "Rediger profil", "account.edit_profile_short": "Rediger", @@ -97,7 +95,6 @@ "account.mute_notifications_short": "Demp varsler", "account.mute_short": "Demp", "account.muted": "Dempet", - "account.muting": "Demper", "account.mutual": "Dere følger hverandre", "account.name.help.domain": "{domain} er serveren som inneholder profilen og innleggene for brukeren.", "account.name.help.domain_self": "{domain} er serveren som inneholder profilen og innleggene dine.", @@ -119,7 +116,6 @@ "account.remove_from_followers": "Fjern {name} fra følgere", "account.report": "Rapporter @{name}", "account.requested_follow": "{name} har bedt om å få følge deg", - "account.requests_to_follow_you": "Forespørsler om å følge deg", "account.share": "Del @{name} sin profil", "account.show_reblogs": "Vis fremhevinger fra @{name}", "account.statuses_counter": "{count, plural, one {{counter} innlegg} other {{counter} innlegg}}", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index aa3c46b94a..cf13737c7b 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -20,7 +20,6 @@ "account.block_domain": "Tot amagar del domeni {domain}", "account.block_short": "Blocar", "account.blocked": "Blocat", - "account.blocking": "Blocatge", "account.cancel_follow_request": "Retirar la demanda d’abonament", "account.copy": "Copiar lo ligam del perfil", "account.direct": "Mencionar @{name} en privat", @@ -72,7 +71,6 @@ "account.remove_from_followers": "Tirar {name} dels seguidors", "account.report": "Senhalar @{name}", "account.requested_follow": "{name} a demandat a vos sègre", - "account.requests_to_follow_you": "Demanda a vos sègre", "account.share": "Partejar lo perfil a @{name}", "account.show_reblogs": "Mostrar los partatges de @{name}", "account.timeline.pinned": "Penjat", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index b364e1bbef..b1a610cfa5 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -23,12 +23,10 @@ "account.block_domain": "{domain} ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", "account.block_short": "ਪਾਬੰਦੀ", "account.blocked": "ਪਾਬੰਦੀਸ਼ੁਦਾ", - "account.blocking": "ਪਾਬੰਦੀ ਲਾਉਣੀ", "account.cancel_follow_request": "ਫ਼ਾਲੋ ਕਰਨ ਨੂੰ ਰੱਦ ਕਰੋ", "account.copy": "ਪਰੋਫਾਇਲ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ", "account.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ @{name}", "account.disable_notifications": "ਜਦੋਂ {name} ਕੋਈ ਪੋਸਟ ਕਰੇ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਨਾ ਦਿਓ", - "account.domain_blocking": "ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ", "account.edit_note": "ਨਿੱਜੀ ਨੋਟ ਨੂੰ ਸੋਧੋ", "account.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ", "account.edit_profile_short": "ਸੋਧੋ", @@ -91,7 +89,6 @@ "account.remove_from_followers": "{name} ਨੂੰ ਫ਼ਾਲੋਅਰ ਵਿੱਚੋਂ ਹਟਾਓ", "account.report": "{name} ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ", "account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", - "account.requests_to_follow_you": "ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀਆਂ ਬੇਨਤੀਆਂ", "account.share": "{name} ਦਾ ਪਰੋਫ਼ਾਇਲ ਸਾਂਝਾ ਕਰੋ", "account.show_reblogs": "@{name} ਵਲੋਂ ਬੂਸਟ ਨੂੰ ਵੇਖਾਓ", "account.statuses_counter": "{count, plural, one {{counter} ਪੋਸਟ} other {{counter} ਪੋਸਟਾਂ}}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 57a2d98275..803cb5ecb3 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -28,12 +28,10 @@ "account.block_domain": "Blokuj wszystko z {domain}", "account.block_short": "Zablokuj", "account.blocked": "Zablokowano", - "account.blocking": "Blokowanie", "account.cancel_follow_request": "Nie obserwuj", "account.copy": "Skopiuj link do profilu", "account.direct": "Napisz bezpośrednio do @{name}", "account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}", - "account.domain_blocking": "Blokowanie domeny", "account.edit_note": "Edytuj osobistą notkę", "account.edit_profile": "Edytuj profil", "account.edit_profile_short": "Edytuj", @@ -99,7 +97,6 @@ "account.mute_notifications_short": "Wycisz powiadomienia", "account.mute_short": "Wycisz", "account.muted": "Wyciszony", - "account.muting": "Wyciszanie", "account.mutual": "Obserwujecie się wzajemnie", "account.name_info": "Co to oznacza?", "account.no_bio": "Brak opisu.", @@ -116,7 +113,6 @@ "account.remove_from_followers": "Usuń {name} z obserwujących", "account.report": "Zgłoś @{name}", "account.requested_follow": "{name} chce cię obserwować", - "account.requests_to_follow_you": "Prośby o obserwowanie", "account.share": "Udostępnij profil @{name}", "account.show_reblogs": "Pokazuj podbicia od @{name}", "account.statuses_counter": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 09826d89dc..99becf0916 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquear domínio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.blocking": "Bloqueando", "account.cancel_follow_request": "Cancelar solicitação para seguir", "account.copy": "Copiar link do perfil", "account.direct": "Mencione em privado @{name}", "account.disable_notifications": "Cancelar notificações de @{name}", - "account.domain_blocking": "Bloqueando domínio", "account.edit_note": "Editar a nota pessoal", "account.edit_profile": "Editar perfil", "account.edit_profile_short": "Editar", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Silenciar notificações", "account.mute_short": "Silenciar", "account.muted": "Silenciado", - "account.muting": "Silenciando", "account.mutual": "Vocês se seguem", "account.name.copy": "Copiar usuário", "account.name.help.domain": "{domain} é o servidor que hospeda o perfil e publicações do usuário.", @@ -135,7 +132,6 @@ "account.remove_from_followers": "Remover {name} dos seguidores", "account.report": "Denunciar @{name}", "account.requested_follow": "{name} quer te seguir", - "account.requests_to_follow_you": "Pediu para seguir você", "account.share": "Compartilhar perfil de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", @@ -227,8 +223,6 @@ "account_edit.profile_tab.show_media.title": "Mostrar aba \"Mídia\"", "account_edit.profile_tab.show_media_replies.description": "Quando ativa, a aba Mídia mostra seus posts e respostas nos posts de outras pessoas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respostas na aba \"Mídia\"", - "account_edit.profile_tab.subtitle": "Personalizar as abas em seu perfil e o que elas exibem.", - "account_edit.profile_tab.title": "Configurações da aba de perfil", "account_edit.save": "Salvar", "account_edit.upload_modal.back": "Voltar", "account_edit.upload_modal.done": "Concluído", @@ -387,11 +381,9 @@ "collections.create.accounts_title": "Quen você vai apresentar nesta coleção?", "collections.create.basic_details_title": "Detalhes básicos", "collections.create.steps": "Passo {step}/{total}", - "collections.create_a_collection_hint": "Criar uma coleção para recomendar ou compartilhar suas contas favoritas com outras pessoas.", "collections.create_collection": "Criar coleção", "collections.delete_collection": "Eliminar coleção", "collections.description_length_hint": "Limite de 100 caracteres", - "collections.detail.accounts_heading": "Contas", "collections.detail.author_added_you_on_date": "{author} te adicionou em {date}", "collections.detail.loading": "Carregando coleção…", "collections.detail.revoke_inclusion": "Remover-me", @@ -400,7 +392,6 @@ "collections.detail.share": "Compartilhar esta coleção", "collections.detail.you_are_in_this_collection": "Você aparece nesta coleção", "collections.edit_details": "Editar detalhes", - "collections.error_loading_collections": "Houve um erro ao tentar carregar suas coleções.", "collections.hidden_accounts_description": "Você bloqueou ou silencilou {count, plural, one{este usuário} other {estes usuários}}", "collections.hidden_accounts_link": "{count, plural, one {# conta oculta} other {# contas ocultas}}", "collections.hints.accounts_counter": "{count}/{max} contas", @@ -412,7 +403,6 @@ "collections.maximum_collection_count_reached": "Você criou a quantidade máxima de coleções", "collections.name_length_hint": "limite de 40 caracteres", "collections.new_collection": "Nova coleção", - "collections.no_collections_yet": "Ainda não há coleções.", "collections.remove_account": "Remover", "collections.report_collection": "Denunciar esta coleção", "collections.revoke_collection_inclusion": "Remover-me desta coleção", @@ -454,7 +444,6 @@ "column.list_members": "Gerenciar membros da lista", "column.lists": "Listas", "column.mutes": "Usuários silenciados", - "column.my_collections": "Minhas coleções", "column.notifications": "Notificações", "column.other_collections": "Coleções de {name}", "column.pins": "Publicações fixadas", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 9a275b9e78..b5e49b090e 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -28,12 +28,10 @@ "account.block_domain": "Bloquear domínio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.blocking": "A bloquear", "account.cancel_follow_request": "Retirar pedido para seguir", "account.copy": "Copiar hiperligação do perfil", "account.direct": "Mencionar @{name} em privado", "account.disable_notifications": "Parar de me notificar das publicações de @{name}", - "account.domain_blocking": "A bloquear domínio", "account.edit_note": "Editar nota pessoal", "account.edit_profile": "Editar perfil", "account.edit_profile_short": "Editar", @@ -101,7 +99,6 @@ "account.mute_notifications_short": "Ocultar notificações", "account.mute_short": "Ocultar", "account.muted": "Ocultada", - "account.muting": "A silenciar", "account.mutual": "Seguem-se mutuamente", "account.name.copy": "Copiar identificador", "account.name.help.domain": "{domain} é o servidor onde estão alojados o perfil e publicações do utilizador.", @@ -125,7 +122,6 @@ "account.remove_from_followers": "Remover {name} dos seguidores", "account.report": "Denunciar @{name}", "account.requested_follow": "{name} pediu para seguir-te", - "account.requests_to_follow_you": "Pediu para seguir-te", "account.share": "Partilhar o perfil @{name}", "account.show_reblogs": "Mostrar partilhas de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", @@ -217,8 +213,6 @@ "account_edit.profile_tab.show_media.title": "Mostrar separador 'Media'", "account_edit.profile_tab.show_media_replies.description": "Quando ativado, o separador 'Media' mostra tanto as suas publicações quanto as suas respostas às publicações de outras pessoas.", "account_edit.profile_tab.show_media_replies.title": "Incluir respostas no separador 'Media'", - "account_edit.profile_tab.subtitle": "Personalize os separadores do seu perfil e o que eles exibem.", - "account_edit.profile_tab.title": "Definições dos separadores de perfil", "account_edit.save": "Guardar", "account_edit.upload_modal.back": "Voltar", "account_edit.upload_modal.done": "Concluído", @@ -377,11 +371,9 @@ "collections.create.accounts_title": "Quem vai destacar nesta coleção?", "collections.create.basic_details_title": "Informações básicas", "collections.create.steps": "Passo {step}/{total}", - "collections.create_a_collection_hint": "Crie uma coleção para recomendar ou partilhar as suas contas favoritas com outras pessoas.", "collections.create_collection": "Criar coleção", "collections.delete_collection": "Eliminar coleção", "collections.description_length_hint": "Limite de 100 caracteres", - "collections.detail.accounts_heading": "Contas", "collections.detail.author_added_you_on_date": "{author} adicionou-o em {date}", "collections.detail.loading": "A carregar a coleção…", "collections.detail.revoke_inclusion": "Remover-me", @@ -390,7 +382,6 @@ "collections.detail.share": "Partilhar esta coleção", "collections.detail.you_are_in_this_collection": "Está em destaque nesta coleção", "collections.edit_details": "Editar detalhes", - "collections.error_loading_collections": "Ocorreu um erro ao tentar carregar as suas coleções.", "collections.hidden_accounts_description": "Bloqueou ou silenciou {count, plural, one {este utilizador} other {estes utilizadores}}", "collections.hidden_accounts_link": "{count, plural, one {# conta escondida} other {# contas escondidas}}", "collections.hints.accounts_counter": "{count}/{max} contas", @@ -400,7 +391,6 @@ "collections.mark_as_sensitive_hint": "Oculta a descrição e as contas da coleção por trás de um aviso de conteúdo. O nome da coleção ainda estará visível.", "collections.name_length_hint": "Limite de 40 carateres", "collections.new_collection": "Nova coleção", - "collections.no_collections_yet": "Ainda não existem coleções.", "collections.remove_account": "Remover", "collections.report_collection": "Denunciar esta coleção", "collections.revoke_collection_inclusion": "Remover-me desta coleção", @@ -442,7 +432,6 @@ "column.list_members": "Gerir membros da lista", "column.lists": "Listas", "column.mutes": "Utilizadores ocultados", - "column.my_collections": "As minhas coleções", "column.notifications": "Notificações", "column.other_collections": "Coleções de {name}", "column.pins": "Publicações afixadas", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index e60fd6f372..e4875ef365 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -28,7 +28,6 @@ "account.block_domain": "Blochează domeniul {domain}", "account.block_short": "Blochează", "account.blocked": "Blocat", - "account.blocking": "Blocarea", "account.cancel_follow_request": "Retrage cererea de urmărire", "account.copy": "Copiază link-ul profilului", "account.direct": "Menționează pe @{name} în privat", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index c78429d240..28cefe2e04 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -28,12 +28,10 @@ "account.block_domain": "Заблокировать {domain}", "account.block_short": "Заблокировать", "account.blocked": "Заблокирован(а)", - "account.blocking": "Заблокирован(а)", "account.cancel_follow_request": "Отозвать запрос на подписку", "account.copy": "Копировать ссылку на профиль", "account.direct": "Упомянуть @{name} лично", "account.disable_notifications": "Не уведомлять о постах пользователя @{name}", - "account.domain_blocking": "Домен заблокирован", "account.edit_note": "Редактировать заметку для себя", "account.edit_profile": "Редактировать", "account.edit_profile_short": "Редактировать", @@ -100,7 +98,6 @@ "account.mute_notifications_short": "Скрыть уведомления", "account.mute_short": "Игнорировать", "account.muted": "Игнорируется", - "account.muting": "Игнорируется", "account.mutual": "Вы подписаны друг на друга", "account.name.help.domain": "{domain} — это сервер, на котором размещены профиль и посты пользователя.", "account.name.help.domain_self": "{domain} — это ваш сервер, на котором размещены ваши профиль и посты.", @@ -122,7 +119,6 @@ "account.remove_from_followers": "Убрать {name} из подписчиков", "account.report": "Пожаловаться на @{name}", "account.requested_follow": "{name} отправил(а) вам запрос на подписку", - "account.requests_to_follow_you": "Отправил(а) вам запрос на подписку", "account.share": "Поделиться профилем @{name}", "account.show_reblogs": "Показывать продвижения от @{name}", "account.statuses_counter": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}", @@ -212,8 +208,6 @@ "account_edit.profile_tab.show_media.title": "Показывать вкладку «Медиа»", "account_edit.profile_tab.show_media_replies.description": "Когда эта опция включена, на вкладке «Медиа» будут показаны в том числе ваши ответы на посты других людей.", "account_edit.profile_tab.show_media_replies.title": "Показывать ответы на вкладке «Медиа»", - "account_edit.profile_tab.subtitle": "Настройте вкладки вашего профиля и их содержимое.", - "account_edit.profile_tab.title": "Настройки вкладок профиля", "account_edit.save": "Сохранить", "account_edit.upload_modal.back": "Назад", "account_edit.upload_modal.done": "Готово", @@ -346,7 +340,6 @@ "collections.create_collection": "Создать подборку", "collections.delete_collection": "Удалить подборку", "collections.description_length_hint": "Не более 100 символов", - "collections.detail.accounts_heading": "Аккаунты", "collections.detail.author_added_you_on_date": "{author} добавил(а) вас {date}", "collections.detail.sensitive_content": "Чувствительный контент", "collections.edit_details": "Изменить параметры", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 20e7a8bea4..5bbeef42c2 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -21,12 +21,10 @@ "account.block_domain": "Bloca su domìniu {domain}", "account.block_short": "Bloca", "account.blocked": "Blocadu", - "account.blocking": "Blocadu", "account.cancel_follow_request": "Annulla sa sighidura", "account.copy": "Còpia su ligòngiu a su profilu", "account.direct": "Mèntova a @{name} in privadu", "account.disable_notifications": "Non mi notìfiches prus cando @{name} pùblichet messàgios", - "account.domain_blocking": "Blocamus su domìniu", "account.edit_profile": "Modìfica profilu", "account.enable_notifications": "Notìfica·mi cando @{name} pùblicat messàgios", "account.endorse": "Cussìgia in su profilu tuo", @@ -59,14 +57,12 @@ "account.mute_notifications_short": "Pone is notìficas a sa muda", "account.mute_short": "A sa muda", "account.muted": "A sa muda", - "account.muting": "A sa muda", "account.no_bio": "Peruna descritzione frunida.", "account.open_original_page": "Aberi sa pàgina originale", "account.posts": "Publicatziones", "account.remove_from_followers": "Cantzella a {name} dae is sighiduras", "account.report": "Signala @{name}", "account.requested_follow": "{name} at dimandadu de ti sighire", - "account.requests_to_follow_you": "Rechestas de sighidura", "account.share": "Cumpartzi su profilu de @{name}", "account.show_reblogs": "Ammustra is cumpartziduras de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}}", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index a21fca3283..d0fd49ad7f 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -20,12 +20,10 @@ "account.block_domain": "{domain} වසම අවහිර කරන්න", "account.block_short": "අවහිර", "account.blocked": "අවහිර කර ඇත", - "account.blocking": "අවහිර කිරීම", "account.cancel_follow_request": "අනුගමනය කිරීම අවලංගු කරන්න", "account.copy": "පැතිකඩට සබැඳිය පිටපත් කරන්න", "account.direct": "පෞද්ගලිකව @{name}සඳහන් කරන්න", "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් නොදෙන්න", - "account.domain_blocking": "වසම අවහිර කිරීම", "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", @@ -57,7 +55,6 @@ "account.mute_notifications_short": "දැනුම්දීම් නිහඬ කරන්න", "account.mute_short": "නිහඬ", "account.muted": "නිහඬ කළා", - "account.muting": "නිහඬ කිරීම", "account.mutual": "ඔබ එකිනෙකා අනුගමනය කරන්න.", "account.no_bio": "විස්තරයක් සපයා නැත.", "account.open_original_page": "මුල් පිටුව අරින්න", @@ -65,7 +62,6 @@ "account.remove_from_followers": "අනුගාමිකයින්ගෙන් {name} ඉවත් කරන්න", "account.report": "@{name} වාර්තා කරන්න", "account.requested_follow": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත.", - "account.requests_to_follow_you": "ඔබව අනුගමනය කිරීමට ඉල්ලීම්", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", "account.show_reblogs": "@{name}වෙතින් බූස්ට් පෙන්වන්න", "account.statuses_counter": "{count, plural, one {{counter} සටහන} other {{counter} සටහන්}}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 5c699d382e..05ac8dbac6 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -22,12 +22,10 @@ "account.block_domain": "Blokovať doménu {domain}", "account.block_short": "Blokovať", "account.blocked": "Účet blokovaný", - "account.blocking": "Blokované", "account.cancel_follow_request": "Zrušiť žiadosť o sledovanie", "account.copy": "Skopírovať odkaz na profil", "account.direct": "Súkromne označiť @{name}", "account.disable_notifications": "Zrušiť upozornenia na príspevky od @{name}", - "account.domain_blocking": "Blokované domény", "account.edit_profile": "Upraviť profil", "account.edit_profile_short": "Upraviť", "account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}", @@ -68,7 +66,6 @@ "account.mute_notifications_short": "Stíšiť upozornenia", "account.mute_short": "Stíšiť", "account.muted": "Účet stíšený", - "account.muting": "Stíšenie", "account.mutual": "Sledujete sa navzájom", "account.no_bio": "Nie je uvedený žiadny popis.", "account.open_original_page": "Otvoriť pôvodnú stránku", @@ -76,7 +73,6 @@ "account.remove_from_followers": "Zrušiť sledovanie od {name}", "account.report": "Nahlásiť @{name}", "account.requested_follow": "{name} vás chce sledovať", - "account.requests_to_follow_you": "Žiadosti o sledovanie", "account.share": "Zdieľaj profil @{name}", "account.show_reblogs": "Zobrazovať zdieľania od @{name}", "account.statuses_counter": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 21dd1f5b02..3157b06a33 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -21,12 +21,10 @@ "account.block_domain": "Blokiraj domeno {domain}", "account.block_short": "Blokiraj", "account.blocked": "Blokirano", - "account.blocking": "Blokirano", "account.cancel_follow_request": "Umakni zahtevo za sledenje", "account.copy": "Kopiraj povezavo do profila", "account.direct": "Zasebno omeni @{name}", "account.disable_notifications": "Ne obveščaj me več, ko ima @{name} novo objavo", - "account.domain_blocking": "Blokirana domena", "account.edit_profile": "Uredi profil", "account.edit_profile_short": "Uredi", "account.enable_notifications": "Obvesti me, ko ima @{name} novo objavo", @@ -63,7 +61,6 @@ "account.mute_notifications_short": "Utišaj obvestila", "account.mute_short": "Utišaj", "account.muted": "Utišan", - "account.muting": "Izklop zvoka", "account.mutual": "Drug drugemu sledita", "account.no_bio": "Ni opisa.", "account.open_original_page": "Odpri izvirno stran", @@ -71,7 +68,6 @@ "account.remove_from_followers": "Odstrani {name} iz sledilcev", "account.report": "Prijavi @{name}", "account.requested_follow": "{name} vam želi slediti", - "account.requests_to_follow_you": "Vas prosi za sledenje", "account.share": "Deli profil osebe @{name}", "account.show_reblogs": "Pokaži izpostavitve osebe @{name}", "account.statuses_counter": "{count, plural, one {{counter} objava} two {{counter} objavi} few {{counter} objave} other {{counter} objav}}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index c6255c47dc..3e7f274aa5 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -28,12 +28,10 @@ "account.block_domain": "Blloko përkatësinë {domain}", "account.block_short": "Bllokoje", "account.blocked": "E bllokuar", - "account.blocking": "Bllokim", "account.cancel_follow_request": "Tërhiq mbrapsht kërkesë për ndjekje", "account.copy": "Kopjoje lidhjen te profili", "account.direct": "Përmendje private për @{name}", "account.disable_notifications": "Resht së njoftuari mua, kur poston @{name}", - "account.domain_blocking": "Bllokim përkatësie", "account.edit_note": "Përpunoni shënim personal", "account.edit_profile": "Përpunoni profilin", "account.edit_profile_short": "Përpunojeni", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Mos shfaq njoftime", "account.mute_short": "Mos i shfaq", "account.muted": "Heshtuar", - "account.muting": "Heshtim", "account.mutual": "Ndiqni njëri-tjetrin", "account.name.help.domain": "{domain} është shërbyesi që strehon profilin dhe postimet e përdoruesit.", "account.name.help.domain_self": "{domain} është shërbyesi juaj që strehon profilin dhe postimet tuaja.", @@ -130,11 +127,11 @@ "account.note.edit_button": "Përpunojeni", "account.note.title": "Shënim personal (i dukshëm vetëm për ju)", "account.open_original_page": "Hap faqen origjinale", + "account.pending": "Në pritje të shqyrtimit", "account.posts": "Mesazhe", "account.remove_from_followers": "Hiqe {name} nga ndjekësit", "account.report": "Raportojeni @{name}", "account.requested_follow": "{name} ka kërkuar t’ju ndjekë", - "account.requests_to_follow_you": "Kërkesa për t’ju ndjekur", "account.share": "Ndajeni profilin e @{name} me të tjerët", "account.show_reblogs": "Shfaq përforcime nga @{name}", "account.statuses_counter": "{count, plural, one {{counter} postim} other {{counter} postime}}", @@ -225,8 +222,6 @@ "account_edit.profile_tab.show_media.title": "Shfaq skedë “Media”", "account_edit.profile_tab.show_media_replies.description": "Kur aktivizohet, skeda Media shfaq si postimet tuaja, ashtu edhe përgjigje te postime nga persona të tjerë.", "account_edit.profile_tab.show_media_replies.title": "Përfshi te skeda “Media” përgjigje", - "account_edit.profile_tab.subtitle": "Përshtatni skedat në profilin tuaj dhe ato çka shfaqet në to.", - "account_edit.profile_tab.title": "Rregullime skede profili", "account_edit.save": "Ruaje", "account_edit.upload_modal.back": "Mbrapsht", "account_edit.upload_modal.done": "U bë", @@ -382,11 +377,9 @@ "collections.create.accounts_title": "Kë do të shfaqni në këtë koleksion?", "collections.create.basic_details_title": "Hollësi bazë", "collections.create.steps": "Hapi {step}/{total}", - "collections.create_a_collection_hint": "Krijoni një koleksion për ta rekomanduar, ose për të ndarë me të tjerët llogaritë tuaja të parapëlqyera.", "collections.create_collection": "Krijoni koleksion", "collections.delete_collection": "Fshije koleksionin", "collections.description_length_hint": "Kufi prej 100 shenjash", - "collections.detail.accounts_heading": "Llogari", "collections.detail.author_added_you_on_date": "{author} ju shtoi më {date}", "collections.detail.loading": "Po ngarkohet koleksion…", "collections.detail.revoke_inclusion": "Hiqmëni", @@ -395,11 +388,14 @@ "collections.detail.share": "Ndajeni këtë koleksion me të tjerë", "collections.detail.you_are_in_this_collection": "Shfaqeni te ky koleksion", "collections.edit_details": "Përpunoni hollësi", - "collections.error_loading_collections": "Pati një gabim teksa provohej të ngarkoheshin koleksionet tuaj.", "collections.hidden_accounts_description": "Bllokuat, ose heshtuat {count, plural, one {këtë përdorues} other {këta përdorues}}", "collections.hidden_accounts_link": "{count, plural, one {# llogari e fshehur} other {# llogari të fshehura}}", "collections.hints.accounts_counter": "{count}/{max} llogari", "collections.last_updated_at": "Përditësuar së fundi më: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Koleksion} other {# Koleksione}}", + "collections.list.created_by_author": "Krijuar nga {name}", + "collections.list.created_by_you": "Krijuar nga ju", + "collections.list.featuring_you": "Që ju përmban", "collections.manage_accounts": "Administroni llogari", "collections.mark_as_sensitive": "Vëri shenjë si rezervat", "collections.mark_as_sensitive_hint": "Bën fshehjen e përshkrimit të koleksionit dhe llogarive prapa një sinjalizimi lënde. Emri i koleksionit do të jetë ende i dukshëm.", @@ -407,7 +403,8 @@ "collections.maximum_collection_count_reached": "Keni krijuar një numër maksimum koleksionesh", "collections.name_length_hint": "Kufi 40 shenja", "collections.new_collection": "Koleksion i ri", - "collections.no_collections_yet": "Ende pa koleksione.", + "collections.pending_accounts.message": "Llogaritë mund të shfaqen si në pritje të shqyrtimit, kur pritet një përgjigje nga përdoruesi, ose shërbyesi i tij. Llogari në pritje të shqyrtimit mund të shihni vetëm ju.", + "collections.pending_accounts.title": "Pse shoh llogari në pritje të shqyrtimit?", "collections.remove_account": "Hiqe", "collections.report_collection": "Raportojeni këtë koleksion", "collections.revoke_collection_inclusion": "Hiqmëni nga ky koleksion", @@ -449,11 +446,11 @@ "column.list_members": "Administroni anëtarë liste", "column.lists": "Lista", "column.mutes": "Përdorues të heshtuar", - "column.my_collections": "Koleksionet e mia", "column.notifications": "Njoftime", "column.other_collections": "Koleksione nga {name}", "column.pins": "Mesazhe të fiksuar", "column.public": "Rrjedhë kohore e të federuarave", + "column.your_collections": "Koleksionet Tuaja", "column_back_button.label": "Mbrapsht", "column_header.hide_settings": "Fshihi rregullimet", "column_header.moveLeft_settings": "Shpjere shtyllën majtas", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index c75413b338..93b62f8af5 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -28,12 +28,10 @@ "account.block_domain": "Blockera domänen {domain}", "account.block_short": "Blockera", "account.blocked": "Blockerad", - "account.blocking": "Blockerar", "account.cancel_follow_request": "Återkalla din begäran om att få följa", "account.copy": "Kopiera länk till profil", "account.direct": "Nämn @{name} privat", "account.disable_notifications": "Sluta meddela mig när @{name} skriver ett inlägg", - "account.domain_blocking": "Blockerad domän", "account.edit_note": "Redigera personlig anteckning", "account.edit_profile": "Redigera profil", "account.edit_profile_short": "Redigera", @@ -71,6 +69,16 @@ "account.go_to_profile": "Gå till profilen", "account.hide_reblogs": "Dölj boostar från @{name}", "account.in_memoriam": "Till minne av.", + "account.join_modal.day": "Dag", + "account.join_modal.me": "Du gick med i {server} den", + "account.join_modal.me_anniversary": "Grattis på ditt fediversum-jubileum! Du anslöt till {server} på", + "account.join_modal.me_today": "Det är din första dag på {server}!", + "account.join_modal.other": "{name} gick med i {server} den", + "account.join_modal.other_today": "Det är {name}s första dag på {server}!", + "account.join_modal.share.celebrate": "Dela ett firande inlägg", + "account.join_modal.share.intro": "Dela ett introduktionsinlägg", + "account.join_modal.share.welcome": "Dela ett välkomstinlägg", + "account.join_modal.years": "{number, plural, one {# år} other {# år}}", "account.joined_short": "Gick med", "account.languages": "Ändra vilka språk du helst vill se i ditt flöde", "account.last_active": "Senast aktiv", @@ -101,7 +109,6 @@ "account.mute_notifications_short": "Stäng av aviseringsljud", "account.mute_short": "Tysta", "account.muted": "Tystad", - "account.muting": "Stänger av ljud", "account.mutual": "Ni följer varandra", "account.name.copy": "Kopiera handtag", "account.name.help.domain": "{domain} är servern som är värd för användarens profil och inlägg.", @@ -125,7 +132,6 @@ "account.remove_from_followers": "Ta bort {name} från följare", "account.report": "Rapportera @{name}", "account.requested_follow": "{name} har begärt att följa dig", - "account.requests_to_follow_you": "Fråga om att följa dig", "account.share": "Dela @{name}s profil", "account.show_reblogs": "Visa boostar från @{name}", "account.statuses_counter": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}", @@ -217,8 +223,6 @@ "account_edit.profile_tab.show_media.title": "Visa fliken ‘Media’", "account_edit.profile_tab.show_media_replies.description": "När den är aktiverad visar fliken Media både dina inlägg och svar på andras inlägg.", "account_edit.profile_tab.show_media_replies.title": "Inkludera svar på fliken Media", - "account_edit.profile_tab.subtitle": "Anpassa flikarna på din profil och vad de visar.", - "account_edit.profile_tab.title": "Inställningar för profil-fliken", "account_edit.save": "Spara", "account_edit.upload_modal.back": "Tillbaka", "account_edit.upload_modal.done": "Färdig", @@ -377,11 +381,9 @@ "collections.create.accounts_title": "Vem kommer du att visa i den här samlingen?", "collections.create.basic_details_title": "Grundläggande detaljer", "collections.create.steps": "Steg {step}/{total}", - "collections.create_a_collection_hint": "Skapa en samling för att rekommendera eller dela dina favoritkonton med andra.", "collections.create_collection": "Skapa samling", "collections.delete_collection": "Radera samling", "collections.description_length_hint": "Begränsat till 100 tecken", - "collections.detail.accounts_heading": "Konton", "collections.detail.author_added_you_on_date": "{author} lade till dig {date}", "collections.detail.loading": "Laddar samling…", "collections.detail.revoke_inclusion": "Ta bort mig", @@ -390,7 +392,6 @@ "collections.detail.share": "Dela denna samling", "collections.detail.you_are_in_this_collection": "Du är med i denna samling", "collections.edit_details": "Redigera detaljer", - "collections.error_loading_collections": "Det uppstod ett fel när dina samlingar skulle laddas.", "collections.hidden_accounts_description": "Du har blockerat eller tystat {count, plural, one {denna användare} other {dessa användare}}", "collections.hidden_accounts_link": "{count, plural, one {# gömt konto} other {# gömda konton}}", "collections.hints.accounts_counter": "{count}/{max} konton", @@ -398,9 +399,10 @@ "collections.manage_accounts": "Hantera konton", "collections.mark_as_sensitive": "Markera som känsligt innehåll", "collections.mark_as_sensitive_hint": "Döljer samlingens beskrivning och konton bakom en innehållsvarning. Samlingsnamnet kommer fortfarande att vara synligt.", + "collections.maximum_collection_count_description": "Din server gör det möjligt att skapa upp till {count} samlingar.", + "collections.maximum_collection_count_reached": "Du har skapat det maximala antalet samlingar", "collections.name_length_hint": "Begränsat till 40 tecken", "collections.new_collection": "Ny samling", - "collections.no_collections_yet": "Inga samlingar än.", "collections.remove_account": "Ta bort", "collections.report_collection": "Rapportera denna samling", "collections.revoke_collection_inclusion": "Ta bort mig själv från denna samling", @@ -442,7 +444,6 @@ "column.list_members": "Hantera listmedlemmar", "column.lists": "Listor", "column.mutes": "Tystade användare", - "column.my_collections": "Mina samlingar", "column.notifications": "Notifikationer", "column.other_collections": "Samlingar av {name}", "column.pins": "Fästa inlägg", @@ -1184,6 +1185,7 @@ "server_banner.active_users": "aktiva användare", "server_banner.administered_by": "Administrerad av:", "server_banner.is_one_of_many": "{domain} är en av de många oberoende Mastodon-servrar som du kan använda för att delta i Fediversen.", + "server_banner.more_about_this_server": "Mer om denna server", "server_banner.server_stats": "Serverstatistik:", "sign_in_banner.create_account": "Skapa konto", "sign_in_banner.follow_anyone": "Följ vem som helst över Fediversum och se allt i kronologisk ordning. Inga algoritmer, annonser eller klickbeten i sikte.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 0555f4eca2..fcfa54e5ef 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -27,12 +27,10 @@ "account.block_domain": "ปิดกั้นโดเมน {domain}", "account.block_short": "ปิดกั้น", "account.blocked": "ปิดกั้นอยู่", - "account.blocking": "กำลังปิดกั้น", "account.cancel_follow_request": "ยกเลิกการติดตาม", "account.copy": "คัดลอกลิงก์ไปยังโปรไฟล์", "account.direct": "กล่าวถึง @{name} แบบส่วนตัว", "account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์", - "account.domain_blocking": "กำลังปิดกั้นโดเมน", "account.edit_note": "แก้ไขโน้ตส่วนบุคคล", "account.edit_profile": "แก้ไขโปรไฟล์", "account.edit_profile_short": "แก้ไข", @@ -73,7 +71,6 @@ "account.mute_notifications_short": "ซ่อนการแจ้งเตือน", "account.mute_short": "ซ่อน", "account.muted": "ซ่อนอยู่", - "account.muting": "กำลังซ่อน", "account.mutual": "คุณติดตามกันและกัน", "account.no_bio": "ไม่ได้ให้คำอธิบาย", "account.open_original_page": "เปิดหน้าดั้งเดิม", @@ -81,7 +78,6 @@ "account.remove_from_followers": "เอา {name} ออกจากผู้ติดตาม", "account.report": "รายงาน @{name}", "account.requested_follow": "{name} ได้ขอติดตามคุณ", - "account.requests_to_follow_you": "ส่งคำขอติดตามคุณ", "account.share": "แชร์โปรไฟล์ของ @{name}", "account.show_reblogs": "แสดงการดันจาก @{name}", "account.statuses_counter": "{count, plural, other {{counter} โพสต์}}", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index b585791cfc..09edda7fac 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -21,12 +21,10 @@ "account.block_domain": "o len e ma {domain}", "account.block_short": "o len", "account.blocked": "jan li len", - "account.blocking": "mi len e jan ni", "account.cancel_follow_request": "o kute ala", "account.copy": "o pali same e linja pi lipu jan", "account.direct": "o mu len e @{name}", "account.disable_notifications": "@{name} li toki la o mu ala e mi", - "account.domain_blocking": "mi len e ma ni", "account.edit_profile": "o ante e lipu mi", "account.edit_profile_short": "o ante", "account.enable_notifications": "@{name} li toki la o mu e mi", @@ -64,7 +62,6 @@ "account.mute_notifications_short": "o kute ala e mu tan jan ni", "account.mute_short": "o kute ala", "account.muted": "sina kute ala e jan ni", - "account.muting": "lukin ala", "account.mutual": "ona li kute e sina. sina kute e ona.", "account.no_bio": "lipu li weka.", "account.open_original_page": "o open e lipu open", @@ -72,7 +69,6 @@ "account.remove_from_followers": "sijelo kute la o weka e sijelo \"{name}\".", "account.report": "@{name} la o toki e jaki tawa lawa", "account.requested_follow": "{name} li wile kute e sina", - "account.requests_to_follow_you": "jan ni li wile kute e sina", "account.share": "o pana e lipu tan @{name}", "account.show_reblogs": "o lukin e pana toki tan @{name}", "account.statuses_counter": "{count, plural, other {toki {counter}}}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index dfea97cf31..96d1e9a8cd 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -28,12 +28,10 @@ "account.block_domain": "{domain} alan adını engelle", "account.block_short": "Engelle", "account.blocked": "Engellendi", - "account.blocking": "Engelli", "account.cancel_follow_request": "Takibi bırak", "account.copy": "Profil bağlantısını kopyala", "account.direct": "@{name} kullanıcısından özel olarak bahset", "account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat", - "account.domain_blocking": "Alan adını engelle", "account.edit_note": "Kişisel notu düzenle", "account.edit_profile": "Profili düzenle", "account.edit_profile_short": "Düzenle", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Bildirimleri sessize al", "account.mute_short": "Sessize al", "account.muted": "Susturuldu", - "account.muting": "Sessize alınıyor", "account.mutual": "Birbirinizi takip ediyorsunuz", "account.name.copy": "İsmi Kopyala", "account.name.help.domain": "{domain} kullanıcının profilini ve gönderilerini barındıran sunucudur.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Düzenle", "account.note.title": "Kişisel not (sadece siz görüntüleyebilirsiniz)", "account.open_original_page": "Asıl sayfayı aç", + "account.pending": "Beklemede", "account.posts": "Gönderiler", "account.remove_from_followers": "{name} takipçilerinden kaldır", "account.report": "@{name} adlı kişiyi bildir", "account.requested_follow": "{name} size takip isteği gönderdi", - "account.requests_to_follow_you": "Size takip isteği gönderdi", "account.share": "@{name} adlı kişinin profilini paylaş", "account.show_reblogs": "@{name} kişisinin yeniden paylaşımlarını göster", "account.statuses_counter": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "\"Medya\" sekmesini göster", "account_edit.profile_tab.show_media_replies.description": "Etkinleştirildiğinde Medya sekmesi hem kendi gönderilerinizi hem de diğer kişilerin gönderilerine verdiğiniz yanıtları gösterir.", "account_edit.profile_tab.show_media_replies.title": "\"Medya\" sekmesinde yanıtları göster", - "account_edit.profile_tab.subtitle": "Profilinizdeki sekmeleri ve bunların görüntülediği bilgileri özelleştirin.", - "account_edit.profile_tab.title": "Profil sekme ayarları", "account_edit.save": "Kaydet", "account_edit.upload_modal.back": "Geri", "account_edit.upload_modal.done": "Tamamlandı", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Bu koleksiyonda kimleri öne çıkaracaksınız?", "collections.create.basic_details_title": "Temel bilgiler", "collections.create.steps": "Adım {step}/{total}", - "collections.create_a_collection_hint": "En sevdiğiniz hesapları başkalarına önermek veya paylaşmak için bir koleksiyon oluşturun.", "collections.create_collection": "Koleksiyon oluştur", "collections.delete_collection": "Koleksiyonu sil", "collections.description_length_hint": "100 karakterle sınırlı", - "collections.detail.accounts_heading": "Hesaplar", "collections.detail.author_added_you_on_date": "{author}, sizi {date} tarihinde ekledi", "collections.detail.loading": "Koleksiyon yükleniyor…", "collections.detail.revoke_inclusion": "Beni çıkar", @@ -400,11 +393,14 @@ "collections.detail.share": "Bu koleksiyonu paylaş", "collections.detail.you_are_in_this_collection": "Bu koleksiyonda öne çıkanlardasınız", "collections.edit_details": "Ayrıntıları düzenle", - "collections.error_loading_collections": "Koleksiyonlarınızı yüklemeye çalışırken bir hata oluştu.", "collections.hidden_accounts_description": "Bu {count, plural, one {kullanıcıyı} other {kullanıcıları}} engellediniz veya sessize aldınız", "collections.hidden_accounts_link": "{count, plural, one {# gizli hesap} other {# gizli hesap}}", "collections.hints.accounts_counter": "{count}/{max} hesap", "collections.last_updated_at": "Son güncelleme: {date}", + "collections.list.collections_with_count": "{count, plural, one {# Koleksiyon} other {# Koleksiyon}}", + "collections.list.created_by_author": "{name} tarafından oluşturuldu", + "collections.list.created_by_you": "Sizin tarafınızdan oluşturuldu", + "collections.list.featuring_you": "Sizi içeriyor", "collections.manage_accounts": "Hesapları yönet", "collections.mark_as_sensitive": "Hassas olarak işaretle", "collections.mark_as_sensitive_hint": "Koleksiyonun açıklamasını ve hesaplarını içerik uyarısının arkasında gizler. Koleksiyon adı hala görünür olacaktır.", @@ -412,7 +408,8 @@ "collections.maximum_collection_count_reached": "Maksimum koleksiyon sayısına ulaştınız", "collections.name_length_hint": "40 karakterle sınırlı", "collections.new_collection": "Yeni koleksiyon", - "collections.no_collections_yet": "Henüz hiçbir koleksiyon yok.", + "collections.pending_accounts.message": "Kullanıcıdan veya sunucusundan yanıt beklediğimizde hesaplar \"beklemede\" olarak görünebilir. Beklemede olan hesapları yalnızca siz görebilirsiniz.", + "collections.pending_accounts.title": "Neden beklemede olan hesapları görüyorum?", "collections.remove_account": "Kaldır", "collections.report_collection": "Bu koleksiyonu bildir", "collections.revoke_collection_inclusion": "Beni bu koleksiyondan çıkar", @@ -454,11 +451,11 @@ "column.list_members": "Liste üyelerini yönet", "column.lists": "Listeler", "column.mutes": "Sessize alınmış kullanıcılar", - "column.my_collections": "Koleksiyonlarım", "column.notifications": "Bildirimler", "column.other_collections": "{name} koleksiyonları", "column.pins": "Sabitlenmiş gönderiler", "column.public": "Federe ağ akışı", + "column.your_collections": "Koleksiyonlarınız", "column_back_button.label": "Geri", "column_header.hide_settings": "Ayarları gizle", "column_header.moveLeft_settings": "Sütunu sola taşı", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 2f7ab79d41..228dcc4004 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -28,12 +28,10 @@ "account.block_domain": "{domain} доменын блоклау", "account.block_short": "Блокла", "account.blocked": "Блокланган", - "account.blocking": "Блокланган", "account.cancel_follow_request": "Киләсе сорау", "account.copy": "Профиль сылтамасын күчереп ал", "account.direct": "{name}-ны шәхсән икә алу", "account.disable_notifications": "@{name} язулары өчен белдерүләр сүндерү", - "account.domain_blocking": "Блокланган домен", "account.edit_note": "Шәхси искәрмәне төзәтү", "account.edit_profile": "Профильне үзгәртү", "account.edit_profile_short": "Үзгәрт", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 2fb7241537..97edc4e8b2 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -11,7 +11,6 @@ "account.block_domain": "{domain} دائىرىنى توس", "account.block_short": "توس", "account.blocked": "توسۇلدى", - "account.blocking": "توسۇۋاتىدۇ", "account.cancel_follow_request": "ئەگىشىش ئىلتىماسىدىن ۋاز كەچ", "account.copy": "تەرجىمىھال ئۇلانمىسىنى كۆچۈر", "account.direct": "@{name} نى يوشۇرۇن ئاتا", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index f643718e5e..88f09f9b0e 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -98,7 +98,6 @@ "account.remove_from_followers": "Вилучити {name} із підписників", "account.report": "Поскаржитися на @{name}", "account.requested_follow": "{name} надсилає запит на стеження", - "account.requests_to_follow_you": "Просить дозвіл на вас підписатись", "account.share": "Поділитися профілем @{name}", "account.show_reblogs": "Показати поширення від @{name}", "account.statuses_counter": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}}", @@ -189,7 +188,6 @@ "closed_registrations_modal.find_another_server": "Знайти інший сервер", "closed_registrations_modal.preamble": "Mastodon децентралізований, тож незалежно від того, де ви створюєте свій обліковий запис, ви зможете слідкувати та взаємодіяти з будь-ким на цьому сервері. Ви навіть можете розмістити його самостійно!", "closed_registrations_modal.title": "Реєстрація на Mastodon", - "collections.detail.accounts_heading": "Облікові записи", "collections.edit_details": "Редагувати подробиці", "column.about": "Про застосунок", "column.blocks": "Заблоковані користувачі", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 6a80dcb03a..c88f1f4bfa 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -28,12 +28,10 @@ "account.block_domain": "Chặn mọi thứ từ {domain}", "account.block_short": "Chặn", "account.blocked": "Đã chặn", - "account.blocking": "Đang chặn", "account.cancel_follow_request": "Thu hồi yêu cầu theo dõi", "account.copy": "Sao chép địa chỉ", "account.direct": "Nhắn riêng @{name}", "account.disable_notifications": "Tắt thông báo khi @{name} đăng tút", - "account.domain_blocking": "Máy chủ đang chủ", "account.edit_note": "Sửa ghi chú", "account.edit_profile": "Sửa hồ sơ", "account.edit_profile_short": "Sửa", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "Phớt lờ thông báo", "account.mute_short": "Phớt lờ", "account.muted": "Đã phớt lờ", - "account.muting": "Đang ẩn", "account.mutual": "Theo dõi nhau", "account.name.copy": "Sao chép địa chỉ", "account.name.help.domain": "{domain} là máy chủ lưu trữ hồ sơ và tút của tài khoản.", @@ -131,11 +128,11 @@ "account.note.edit_button": "Sửa", "account.note.title": "Ghi chú (chỉ hiển thị với bạn)", "account.open_original_page": "Mở liên kết gốc", + "account.pending": "Đợi duyệt", "account.posts": "Tút", "account.remove_from_followers": "Xóa người theo dõi {name}", "account.report": "Báo cáo @{name}", "account.requested_follow": "{name} yêu cầu theo dõi bạn", - "account.requests_to_follow_you": "Yêu cầu theo dõi bạn", "account.share": "Chia sẻ @{name}", "account.show_reblogs": "Hiện tút do @{name} đăng lại", "account.statuses_counter": "{count, plural, other {{counter} Tút}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "Hiện tab ‘Phương tiện’", "account_edit.profile_tab.show_media_replies.description": "Nếu bật, tab Phương tiện sẽ hiện cả những tút của bạn lẫn những trả lời tới tút của người khác.", "account_edit.profile_tab.show_media_replies.title": "Bao gồm tút dạng trả lời trong tab ‘Phương tiện’", - "account_edit.profile_tab.subtitle": "Tùy chỉnh tab trên hồ sơ của bạn và những gì chúng hiển thị.", - "account_edit.profile_tab.title": "Thiết lập tab hồ sơ", "account_edit.save": "Lưu", "account_edit.upload_modal.back": "Quay lại", "account_edit.upload_modal.done": "Xong", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "Bạn sẽ chọn ai để giới thiệu trong gói khởi đầu này?", "collections.create.basic_details_title": "Thông tin cơ bản", "collections.create.steps": "Bước {step}/{total}", - "collections.create_a_collection_hint": "Tạo một gói khởi đầu để giới thiệu hoặc chia sẻ những tài khoản yêu thích của bạn với người khác.", "collections.create_collection": "Tạo gói khởi đầu", "collections.delete_collection": "Xóa gói khởi đầu", "collections.description_length_hint": "Giới hạn 100 ký tự", - "collections.detail.accounts_heading": "Tài khoản", "collections.detail.author_added_you_on_date": "{author} đã thêm bạn vào {date}", "collections.detail.loading": "Đang tải gói khởi đầu…", "collections.detail.revoke_inclusion": "Xóa tôi", @@ -400,11 +393,15 @@ "collections.detail.share": "Chia sẻ gói khởi đầu này", "collections.detail.you_are_in_this_collection": "Bạn đã được thêm vào gói khởi đầu này", "collections.edit_details": "Sửa chi tiết", - "collections.error_loading_collections": "Đã xảy ra lỗi khi tải những gói khởi đầu của bạn.", + "collections.error_loading_collections": "Đã xảy ra lỗi khi tải những gói khởi đầu này.", "collections.hidden_accounts_description": "Bạn vừa chặn hoặc phớt lờ {count, plural, other {tài khoản này}}", "collections.hidden_accounts_link": "{count, plural, other {# tài khoản đã ẩn}}", "collections.hints.accounts_counter": "{count}/{max} tài khoản", "collections.last_updated_at": "Lần cuối cập nhật: {date}", + "collections.list.collections_with_count": "{count, plural, other {# Gói khởi đầu}}", + "collections.list.created_by_author": "Tạo bởi {name}", + "collections.list.created_by_you": "Được tạo bởi bạn", + "collections.list.featuring_you": "Có mặt bạn", "collections.manage_accounts": "Quản lý tài khoản", "collections.mark_as_sensitive": "Đánh dấu nhạy cảm", "collections.mark_as_sensitive_hint": "Ẩn phần mô tả và các tài khoản của gói khởi đầu phía sau cảnh báo nội dung. Tên gói khởi đầu vẫn hiển thị.", @@ -412,7 +409,6 @@ "collections.maximum_collection_count_reached": "Bạn đã đạt đến số lượng gói khởi đầu tối đa", "collections.name_length_hint": "Giới hạn 40 ký tự", "collections.new_collection": "Gói khởi đầu mới", - "collections.no_collections_yet": "Chưa có gói khởi đầu.", "collections.remove_account": "Gỡ", "collections.report_collection": "Báo cáo gói khởi đầu này", "collections.revoke_collection_inclusion": "Xóa tôi khỏi gói khởi đầu này", @@ -454,11 +450,11 @@ "column.list_members": "Quản lý tài khoản trong danh sách", "column.lists": "Danh sách", "column.mutes": "Tài khoản đã phớt lờ", - "column.my_collections": "Những gói khởi đầu của tôi", "column.notifications": "Thông báo", "column.other_collections": "Gói khởi đầu bởi {name}", "column.pins": "Tút ghim", "column.public": "Liên hợp", + "column.your_collections": "Gói khởi đầu của bạn", "column_back_button.label": "Quay lại", "column_header.hide_settings": "Ẩn bộ lọc", "column_header.moveLeft_settings": "Dời cột sang bên trái", @@ -645,6 +641,7 @@ "empty_column.account_unavailable": "Tài khoản bị đình chỉ", "empty_column.blocks": "Bạn chưa chặn ai.", "empty_column.bookmarked_statuses": "Bạn chưa lưu tút nào. Nếu có, nó sẽ hiển thị ở đây.", + "empty_column.collections.featured_in": "Bạn chưa được thêm vào gói khởi đầu nào.", "empty_column.community": "Máy chủ của bạn chưa có tút nào công khai. Bạn hãy thử viết gì đó đi!", "empty_column.direct": "Bạn chưa có tin nhắn riêng nào. Khi bạn gửi hoặc nhận một tin nhắn riêng, nó sẽ xuất hiện ở đây.", "empty_column.disabled_feed": "Bảng tin này bị vô hiệu hóa bởi quản trị viên máy chủ của bạn.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 756258d989..a1b3b4eeda 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -28,12 +28,10 @@ "account.block_domain": "屏蔽 {domain} 实例", "account.block_short": "屏蔽", "account.blocked": "已屏蔽", - "account.blocking": "屏蔽中", "account.cancel_follow_request": "撤回关注请求", "account.copy": "复制个人资料链接", "account.direct": "私下提及 @{name}", "account.disable_notifications": "当 @{name} 发布嘟文时不要通知我", - "account.domain_blocking": "正在屏蔽中的域名", "account.edit_note": "编辑个人备注", "account.edit_profile": "修改个人资料", "account.edit_profile_short": "编辑", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "关闭通知", "account.mute_short": "隐藏", "account.muted": "已隐藏", - "account.muting": "正在静音", "account.mutual": "你们互相关注", "account.name.copy": "复制用户名", "account.name.help.domain": "{domain} 是托管该用户个人资料及嘟文的服务器。", @@ -131,11 +128,11 @@ "account.note.edit_button": "编辑", "account.note.title": "个人备注(仅对你可见)", "account.open_original_page": "打开原始页面", + "account.pending": "待定", "account.posts": "嘟文", "account.remove_from_followers": "从关注者中移除 {name}", "account.report": "举报 @{name}", "account.requested_follow": "{name} 向你发送了关注请求", - "account.requests_to_follow_you": "请求关注你", "account.share": "分享 @{name} 的个人资料", "account.show_reblogs": "显示来自 @{name} 的转嘟", "account.statuses_counter": "{count, plural, other {{counter} 条嘟文}}", @@ -227,8 +224,10 @@ "account_edit.profile_tab.show_media.title": "显示“媒体”选项卡", "account_edit.profile_tab.show_media_replies.description": "如果启用,媒体选项卡将同时显示你的嘟文及你对其他人嘟文的回复。", "account_edit.profile_tab.show_media_replies.title": "在“媒体”选项卡中包括回复", - "account_edit.profile_tab.subtitle": "自定义你个人资料的选项卡及其显示的内容。", - "account_edit.profile_tab.title": "个人资料选项卡设置", + "account_edit.profile_tab.show_relations.description": "在个人资料中向其他人显示你关注的账号及关注你的账号。无论设置为是否,其他用户总是可以看到你是否关注了他。", + "account_edit.profile_tab.show_relations.title": "公开“关注者”与“我关注的”", + "account_edit.profile_tab.subtitle": "自定义你个人资料的显示方式。", + "account_edit.profile_tab.title": "个人资料显示设置", "account_edit.save": "保存", "account_edit.upload_modal.back": "上一步", "account_edit.upload_modal.done": "完成", @@ -256,6 +255,7 @@ "account_edit_tags.search_placeholder": "输入话题标签…", "account_edit_tags.suggestions": "建议:", "account_edit_tags.tag_status_count": "{count, plural, other {# 条嘟文}}", + "account_list.hidden_notice": "此内容仅对你可见。要让此列表对其他人可见,请前往{page} > {modal} > {field}。", "account_list.total": "{total, plural, other {# 个账号}}", "account_note.placeholder": "点击添加备注", "admin.dashboard.daily_retention": "注册后用户留存率(按日计算)", @@ -387,11 +387,9 @@ "collections.create.accounts_title": "你想在收藏列表中添加哪些人?", "collections.create.basic_details_title": "基本信息", "collections.create.steps": "第 {step} 步(共 {total} 步)", - "collections.create_a_collection_hint": "创建用于向其他人推荐或分享你最喜欢账号的收藏列表。", "collections.create_collection": "创建收藏列表", "collections.delete_collection": "删除收藏列表", "collections.description_length_hint": "100字限制", - "collections.detail.accounts_heading": "账号", "collections.detail.author_added_you_on_date": "{author} 于 {date} 将你加入", "collections.detail.loading": "正在加载收藏列表…", "collections.detail.revoke_inclusion": "移除我", @@ -400,11 +398,15 @@ "collections.detail.share": "分享此收藏列表", "collections.detail.you_are_in_this_collection": "你被添加到了此收藏列表", "collections.edit_details": "编辑详情", - "collections.error_loading_collections": "加载你的收藏列表时发生错误。", + "collections.error_loading_collections": "加载收藏列表时发生错误。", "collections.hidden_accounts_description": "你已屏蔽或隐藏{count, plural, other {部分用户}}", "collections.hidden_accounts_link": "{count, plural, other {# 个隐藏账号}}", "collections.hints.accounts_counter": "{count}/{max} 个账号", "collections.last_updated_at": "最后更新:{date}", + "collections.list.collections_with_count": "{count, plural, other {# 个收藏列表}}", + "collections.list.created_by_author": "由 {name} 创建", + "collections.list.created_by_you": "由你创建", + "collections.list.featuring_you": "精选了你", "collections.manage_accounts": "管理账号", "collections.mark_as_sensitive": "标记为敏感内容", "collections.mark_as_sensitive_hint": "将此收藏列表的说明用内容警告隐藏。此收藏列表的名称仍将可见。", @@ -412,7 +414,8 @@ "collections.maximum_collection_count_reached": "你创建的收藏列表数量已达上限", "collections.name_length_hint": "40 字限制", "collections.new_collection": "新建收藏列表", - "collections.no_collections_yet": "尚无收藏列表。", + "collections.pending_accounts.message": "如果系统正在等待来自用户或其服务器的回应,则相应账号会显示为待定状态。只有你可以看见待定账号。", + "collections.pending_accounts.title": "为什么我会看到待定账号?", "collections.remove_account": "移除", "collections.report_collection": "举报此收藏列表", "collections.revoke_collection_inclusion": "将自己从此收藏列表中移除", @@ -454,11 +457,11 @@ "column.list_members": "管理列表成员", "column.lists": "列表", "column.mutes": "已隐藏的用户", - "column.my_collections": "我的收藏列表", "column.notifications": "通知", "column.other_collections": "{name} 的收藏列表", "column.pins": "置顶嘟文", "column.public": "跨站公共时间线", + "column.your_collections": "你的收藏列表", "column_back_button.label": "返回", "column_header.hide_settings": "隐藏设置", "column_header.moveLeft_settings": "将此栏左移", @@ -645,6 +648,7 @@ "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你还未屏蔽任何用户。", "empty_column.bookmarked_statuses": "你还没有给任何嘟文添加书签。添加书签后的嘟文会显示在这里。", + "empty_column.collections.featured_in": "你还没有被添加到收藏列表过。", "empty_column.community": "本站时间线还没有内容,写点什么并公开发布,让它活跃起来吧!", "empty_column.direct": "你还未使用过私下提及。当你发出或者收到私下提及时,它将显示在此。", "empty_column.disabled_feed": "此动态已被你的服务器管理员禁用。", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 875477dcd7..309a87546f 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -28,12 +28,10 @@ "account.block_domain": "封鎖網域 {domain}", "account.block_short": "封鎖", "account.blocked": "已封鎖", - "account.blocking": "封鎖", "account.cancel_follow_request": "撤回追蹤請求", "account.copy": "複製個人檔案連結", "account.direct": "私下提及 @{name}", "account.disable_notifications": "當 @{name} 發文時不要再通知我", - "account.domain_blocking": "封鎖網域", "account.edit_note": "編輯個人筆記", "account.edit_profile": "修改個人檔案", "account.edit_profile_short": "編輯", @@ -94,7 +92,6 @@ "account.mute_notifications_short": "靜音通知", "account.mute_short": "靜音", "account.muted": "靜音", - "account.muting": "靜音", "account.mutual": "你們已互相追蹤", "account.name.help.username": "{username} 係你喺呢個 Server 嘅 Account 嘅 Username,可能會有條友喺第二個 Server 用緊同一個 Username。", "account.name.help.username_self": "{username} 係你喺呢個 Server 嘅 Username,可能會有條友喺第二個 Server 用緊同一個 Username。", @@ -113,7 +110,6 @@ "account.remove_from_followers": "移除追蹤者{name}", "account.report": "檢舉 @{name}", "account.requested_follow": "{name} 要求追蹤你", - "account.requests_to_follow_you": "要求追蹤你", "account.share": "分享 @{name} 的個人檔案", "account.show_reblogs": "顯示 @{name} 的轉推", "account.timeline.pinned": "釘起咗", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 118d3d0036..92f685c4d4 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -28,12 +28,10 @@ "account.block_domain": "封鎖來自 {domain} 網域之所有內容", "account.block_short": "封鎖", "account.blocked": "已封鎖", - "account.blocking": "封鎖中", "account.cancel_follow_request": "收回跟隨請求", "account.copy": "複製個人檔案連結", "account.direct": "私訊 @{name}", "account.disable_notifications": "取消來自 @{name} 嘟文之通知", - "account.domain_blocking": "封鎖中網域", "account.edit_note": "編輯個人備註", "account.edit_profile": "編輯個人檔案", "account.edit_profile_short": "編輯", @@ -111,7 +109,6 @@ "account.mute_notifications_short": "靜音推播通知", "account.mute_short": "靜音", "account.muted": "已靜音", - "account.muting": "靜音", "account.mutual": "跟隨彼此", "account.name.copy": "複製帳號", "account.name.help.domain": "{domain} 為託管此使用者個人檔案與嘟文之伺服器。", @@ -131,11 +128,11 @@ "account.note.edit_button": "編輯", "account.note.title": "個人備註(僅有您可見)", "account.open_original_page": "檢視原始頁面", + "account.pending": "等待中", "account.posts": "嘟文", "account.remove_from_followers": "自跟隨者中移除 {name}", "account.report": "檢舉 @{name}", "account.requested_follow": "{name} 要求跟隨您", - "account.requests_to_follow_you": "要求跟隨您", "account.share": "分享 @{name} 的個人檔案", "account.show_reblogs": "顯示來自 @{name} 的轉嘟", "account.statuses_counter": "{count, plural, other {{counter} 則嘟文}}", @@ -227,8 +224,6 @@ "account_edit.profile_tab.show_media.title": "顯示「媒體」分頁", "account_edit.profile_tab.show_media_replies.description": "當啟用時,媒體分頁將顯示您的嘟文與對其他人嘟文之回嘟。", "account_edit.profile_tab.show_media_replies.title": "於「媒體」分頁中包含回嘟", - "account_edit.profile_tab.subtitle": "自訂您個人檔案之分頁與內容。", - "account_edit.profile_tab.title": "個人檔案分頁設定", "account_edit.save": "儲存", "account_edit.upload_modal.back": "上一步", "account_edit.upload_modal.done": "完成", @@ -387,11 +382,9 @@ "collections.create.accounts_title": "您想於此收藏名單推薦誰?", "collections.create.basic_details_title": "基本資料", "collections.create.steps": "步驟 {step}/{total}", - "collections.create_a_collection_hint": "建立用以向其他人推薦或分享您最喜愛帳號之收藏名單。", "collections.create_collection": "建立收藏名單", "collections.delete_collection": "刪除收藏名單", "collections.description_length_hint": "100 字限制", - "collections.detail.accounts_heading": "帳號", "collections.detail.author_added_you_on_date": "{author} 於 {date} 將您加入", "collections.detail.loading": "讀取收藏名單中...", "collections.detail.revoke_inclusion": "移除我", @@ -400,11 +393,13 @@ "collections.detail.share": "分享此收藏名單", "collections.detail.you_are_in_this_collection": "您已被加入至此收藏名單", "collections.edit_details": "編輯詳細資料", - "collections.error_loading_collections": "讀取您的收藏名單時發生錯誤。", "collections.hidden_accounts_description": "您已封鎖或靜音{count, plural, other {這些使用者}}", "collections.hidden_accounts_link": "{count, plural, other {# 個隱藏帳號}}", "collections.hints.accounts_counter": "{count}/{max} 個帳號", "collections.last_updated_at": "最後更新:{date}", + "collections.list.collections_with_count": "{count, plural, other {# 份收藏名單}}", + "collections.list.created_by_author": "由 {name} 建立", + "collections.list.created_by_you": "由您建立", "collections.manage_accounts": "管理帳號", "collections.mark_as_sensitive": "標記為敏感內容", "collections.mark_as_sensitive_hint": "將此收藏名單之說明隱藏於內容警告之後。此收藏名單名稱仍將可見。", @@ -412,7 +407,6 @@ "collections.maximum_collection_count_reached": "您所建立之收藏名單數量已達上限", "collections.name_length_hint": "40 字限制", "collections.new_collection": "新增收藏名單", - "collections.no_collections_yet": "您沒有任何收藏名單。", "collections.remove_account": "移除", "collections.report_collection": "檢舉此收藏名單", "collections.revoke_collection_inclusion": "將我自此收藏名單中移除", @@ -454,11 +448,11 @@ "column.list_members": "管理列表成員", "column.lists": "列表", "column.mutes": "已靜音使用者", - "column.my_collections": "我的收藏名單", "column.notifications": "推播通知", "column.other_collections": "{name} 的收藏名單", "column.pins": "釘選的嘟文", "column.public": "聯邦時間軸", + "column.your_collections": "您的收藏名單", "column_back_button.label": "上一頁", "column_header.hide_settings": "隱藏設定", "column_header.moveLeft_settings": "將欄位向左移動", diff --git a/app/javascript/mastodon/models/notification_group.ts b/app/javascript/mastodon/models/notification_group.ts index bfb89d894e..de2d879012 100644 --- a/app/javascript/mastodon/models/notification_group.ts +++ b/app/javascript/mastodon/models/notification_group.ts @@ -91,11 +91,11 @@ export interface NotificationGroupAdminReport extends BaseNotification<'admin.re type Collection = ApiCollectionJSON; export interface NotificationGroupAddedToCollection extends BaseNotification<'added_to_collection'> { - collection: Collection; + collection: Collection | null; } export interface NotificationGroupCollectionUpdate extends BaseNotification<'collection_update'> { - collection: Collection; + collection: Collection | null; } export type NotificationGroup = diff --git a/app/javascript/mastodon/reducers/custom_emojis.js b/app/javascript/mastodon/reducers/custom_emojis.js deleted file mode 100644 index 47aa3edbbb..0000000000 --- a/app/javascript/mastodon/reducers/custom_emojis.js +++ /dev/null @@ -1,17 +0,0 @@ -import { List as ImmutableList, fromJS as ConvertToImmutable } from 'immutable'; - -import { CUSTOM_EMOJIS_FETCH_SUCCESS } from '../actions/custom_emojis'; -import { buildCustomEmojis } from '../features/emoji/emoji'; -import { search as emojiSearch } from '../features/emoji/emoji_mart_search_light'; - -/** @type {ImmutableList} */ -const initialState = ImmutableList([]); - -export default function custom_emojis(state = initialState, action) { - if(action.type === CUSTOM_EMOJIS_FETCH_SUCCESS) { - state = ConvertToImmutable(action.custom_emojis); - emojiSearch('', { custom: buildCustomEmojis(state) }); - } - - return state; -} diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts index 7343f5e164..c3bc5792ac 100644 --- a/app/javascript/mastodon/reducers/index.ts +++ b/app/javascript/mastodon/reducers/index.ts @@ -11,7 +11,6 @@ import announcements from './announcements'; import { composeReducer } from './compose'; import { contextsReducer } from './contexts'; import conversations from './conversations'; -import custom_emojis from './custom_emojis'; import { dropdownMenuReducer } from './dropdown_menu'; import filters from './filters'; import height_cache from './height_cache'; @@ -67,7 +66,6 @@ const reducers = { notifications, notificationGroups: notificationGroupsReducer, height_cache, - custom_emojis, lists: listsReducer, followedTags: followedTagsReducer, filters, diff --git a/app/javascript/mastodon/reducers/slices/collections.ts b/app/javascript/mastodon/reducers/slices/collections.ts index 1a8133be58..c07a904cee 100644 --- a/app/javascript/mastodon/reducers/slices/collections.ts +++ b/app/javascript/mastodon/reducers/slices/collections.ts @@ -4,7 +4,8 @@ import { createSlice } from '@reduxjs/toolkit'; import { importFetchedAccounts } from '@/mastodon/actions/importer'; import { apiCreateCollection, - apiGetAccountCollections, + apiGetCollectionsCreatedByAccount, + apiGetCollectionsFeaturingAccount, apiUpdateCollection, apiGetCollection, apiDeleteCollection, @@ -16,6 +17,7 @@ import type { ApiCollectionJSON, ApiCreateCollectionPayload, ApiUpdateCollectionPayload, + CollectionAccountItem, } from '@/mastodon/api_types/collections'; import { me } from '@/mastodon/initial_state'; import { @@ -27,20 +29,35 @@ import { inputToHashtag } from '@/mastodon/utils/hashtags'; type QueryStatus = 'idle' | 'loading' | 'error'; +// Lists of collection ids and their loading status mapped by account id +type CollectionsByAccountId = Record< + string, + { + collectionIds: string[]; + status: QueryStatus; + } +>; + interface CollectionState { - // Collections mapped by collection id + // Full collections mapped by collection id collections: Record; - // Lists of collection ids mapped by account id - accountCollections: Record< - string, - { - collectionIds: string[]; - status: QueryStatus; - } - >; + // Collections created by an account, mapped by account id + createdBy: CollectionsByAccountId; + // Collections that feature an account, mapped by account id + featuring: CollectionsByAccountId; editor: EditorState; } +/** + * This is a subset of the `CollectionAccountItem` type + * for use in the editor. Here, `account_id` is always defined + * and `state` is more limited. + */ +export interface EditorCollectionItem { + account_id: string; + state: 'pending' | 'accepted'; +} + interface EditorState { id: string | null; name: string; @@ -49,7 +66,7 @@ interface EditorState { language: string | null; discoverable: boolean; sensitive: boolean; - accountIds: string[]; + items: EditorCollectionItem[]; } interface UpdateEditorFieldPayload { @@ -59,7 +76,8 @@ interface UpdateEditorFieldPayload { const initialState: CollectionState = { collections: {}, - accountCollections: {}, + createdBy: {}, + featuring: {}, editor: { id: null, name: '', @@ -68,7 +86,7 @@ const initialState: CollectionState = { language: null, discoverable: true, sensitive: false, - accountIds: [], + items: [], }, }; @@ -87,7 +105,7 @@ const collectionSlice = createSlice({ language: collection?.language ?? '', discoverable: collection?.discoverable ?? true, sensitive: collection?.sensitive ?? false, - accountIds: getCollectionItemIds(collection?.items ?? []), + items: getEditorCollectionItems(collection?.items ?? []), }; }, reset(state) { @@ -103,44 +121,101 @@ const collectionSlice = createSlice({ }, extraReducers(builder) { /** - * Fetching account collections + * Fetching collections created by account */ - builder.addCase(fetchAccountCollections.pending, (state, action) => { - const { accountId } = action.meta.arg; - state.accountCollections[accountId] ??= { - status: 'loading', - collectionIds: [], - }; - state.accountCollections[accountId].status = 'loading'; - }); + builder.addCase( + fetchCollectionsCreatedByAccount.pending, + (state, action) => { + const { accountId } = action.meta.arg; + state.createdBy[accountId] ??= { + status: 'loading', + collectionIds: [], + }; + state.createdBy[accountId].status = 'loading'; + }, + ); - builder.addCase(fetchAccountCollections.rejected, (state, action) => { - const { accountId } = action.meta.arg; - state.accountCollections[accountId] = { - status: 'error', - collectionIds: [], - }; - }); + builder.addCase( + fetchCollectionsCreatedByAccount.rejected, + (state, action) => { + const { accountId } = action.meta.arg; + state.createdBy[accountId] = { + status: 'error', + collectionIds: [], + }; + }, + ); - builder.addCase(fetchAccountCollections.fulfilled, (state, action) => { - const { collections } = action.payload; + builder.addCase( + fetchCollectionsCreatedByAccount.fulfilled, + (state, action) => { + const { collections } = action.payload; - const collectionsMap: Record = - state.collections; - const collectionIds: string[] = []; + const collectionsMap: Record = + state.collections; + const collectionIds: string[] = []; - collections.forEach((collection) => { - const { id } = collection; - collectionsMap[id] = collection; - collectionIds.push(id); - }); + collections.forEach((collection) => { + const { id } = collection; + collectionsMap[id] = collection; + collectionIds.push(id); + }); - state.collections = collectionsMap; - state.accountCollections[action.meta.arg.accountId] = { - collectionIds, - status: 'idle', - }; - }); + state.collections = collectionsMap; + state.createdBy[action.meta.arg.accountId] = { + collectionIds, + status: 'idle', + }; + }, + ); + /** + * Fetching collections featuring an account + */ + builder.addCase( + fetchCollectionsFeaturingAccount.pending, + (state, action) => { + const { accountId } = action.meta.arg; + state.featuring[accountId] ??= { + status: 'loading', + collectionIds: [], + }; + state.featuring[accountId].status = 'loading'; + }, + ); + + builder.addCase( + fetchCollectionsFeaturingAccount.rejected, + (state, action) => { + const { accountId } = action.meta.arg; + state.featuring[accountId] = { + status: 'error', + collectionIds: [], + }; + }, + ); + + builder.addCase( + fetchCollectionsFeaturingAccount.fulfilled, + (state, action) => { + const { collections } = action.payload; + + const collectionsMap: Record = + state.collections; + const collectionIds: string[] = []; + + collections.forEach((collection) => { + const { id } = collection; + collectionsMap[id] = collection; + collectionIds.push(id); + }); + + state.collections = collectionsMap; + state.featuring[action.meta.arg.accountId] = { + collectionIds, + status: 'idle', + }; + }, + ); /** * Fetching a single collection @@ -170,7 +245,7 @@ const collectionSlice = createSlice({ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete state.collections[collectionId]; if (me) { - let accountCollectionIds = state.accountCollections[me]?.collectionIds; + let accountCollectionIds = state.createdBy[me]?.collectionIds; if (accountCollectionIds) { accountCollectionIds = accountCollectionIds.filter( (id) => id !== collectionId, @@ -189,12 +264,12 @@ const collectionSlice = createSlice({ state.collections[collection.id] = collection; state.editor = initialState.editor; - if (state.accountCollections[collection.account_id]) { - state.accountCollections[collection.account_id]?.collectionIds.unshift( + if (state.createdBy[collection.account_id]) { + state.createdBy[collection.account_id]?.collectionIds.unshift( collection.id, ); } else { - state.accountCollections[collection.account_id] = { + state.createdBy[collection.account_id] = { collectionIds: [collection.id], status: 'idle', }; @@ -242,9 +317,16 @@ const collectionSlice = createSlice({ }, }); -export const fetchAccountCollections = createDataLoadingThunk( - `${collectionSlice.name}/fetchAccountCollections`, - ({ accountId }: { accountId: string }) => apiGetAccountCollections(accountId), +export const fetchCollectionsCreatedByAccount = createDataLoadingThunk( + `${collectionSlice.name}/fetchCollectionsCreatedByAccount`, + ({ accountId }: { accountId: string }) => + apiGetCollectionsCreatedByAccount(accountId), +); + +export const fetchCollectionsFeaturingAccount = createDataLoadingThunk( + `${collectionSlice.name}/fetchCollectionsFeaturingAccount`, + ({ accountId }: { accountId: string }) => + apiGetCollectionsFeaturingAccount(accountId), ); export const fetchCollection = createDataLoadingThunk( @@ -312,7 +394,7 @@ interface AccountCollectionQuery { export const selectAccountCollections = createAppSelector( [ (_, accountId?: string | null) => accountId, - (state) => state.collections.accountCollections, + (state, _, query: 'createdBy' | 'featuring') => state.collections[query], (state) => state.collections.collections, ], (accountId, collectionsByAccountId, collectionsMap) => { @@ -338,7 +420,12 @@ export const selectAccountCollections = createAppSelector( }, ); -const onlyExistingIds = (id?: string): id is string => !!id; +const isEditorItem = ( + item: Partial, +): item is EditorCollectionItem => + !!item.account_id && (item.state === 'accepted' || item.state === 'pending'); -export const getCollectionItemIds = (items?: ApiCollectionJSON['items']) => - items?.map((item) => item.account_id).filter(onlyExistingIds) ?? []; +export const getEditorCollectionItems = (items?: CollectionAccountItem[]) => + items + ?.map(({ account_id, state }) => ({ account_id, state })) + .filter(isEditorItem) ?? []; diff --git a/app/javascript/mastodon/utils/has_react_children.ts b/app/javascript/mastodon/utils/has_react_children.ts new file mode 100644 index 0000000000..f02762bace --- /dev/null +++ b/app/javascript/mastodon/utils/has_react_children.ts @@ -0,0 +1,12 @@ +import { Children } from 'react'; +import type { ReactNode } from 'react'; + +export function hasReactChildren(children: ReactNode): boolean { + if (!children) { + return false; + } + + const childrenCount = Children.toArray(children).filter(Boolean).length; + + return childrenCount > 0; +} diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 57fd41dcb3..60f723eeab 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -75,6 +75,10 @@ class ActivityPub::Activity ActivityPub::TagManager.instance.uri_to_resource(uri, Account) end + def collection_from_uri(uri) + ActivityPub::TagManager.instance.uri_to_resource(uri, Collection) + end + def object_uri @object_uri ||= uri_from_bearcap(value_or_id(@object)) end diff --git a/app/lib/activitypub/activity/flag.rb b/app/lib/activitypub/activity/flag.rb index b7a412485c..bc25e5c29f 100644 --- a/app/lib/activitypub/activity/flag.rb +++ b/app/lib/activitypub/activity/flag.rb @@ -8,9 +8,11 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity target_accounts = object_uris.filter_map { |uri| account_from_uri(uri) } target_statuses_by_account = object_uris.filter_map { |uri| status_from_uri(uri) }.group_by(&:account_id) + target_collections_by_account = object_uris.filter_map { |uri| collection_from_uri(uri) }.group_by(&:account_id) target_accounts.each do |target_account| target_statuses = target_statuses_by_account[target_account.id] + target_collections = target_collections_by_account.fetch(target_account.id, []) replied_to_accounts = target_statuses.nil? ? [] : Account.local.where(id: target_statuses.filter_map(&:in_reply_to_account_id)) next if target_account.suspended? || (!target_account.local? && replied_to_accounts.none?) @@ -19,6 +21,7 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity @account, target_account, status_ids: target_statuses.nil? ? [] : target_statuses.map(&:id), + collection_ids: target_collections.map(&:id), comment: report_comment, uri: report_uri ) diff --git a/app/lib/activitypub/activity/reject.rb b/app/lib/activitypub/activity/reject.rb index b6195cd199..e5684367a2 100644 --- a/app/lib/activitypub/activity/reject.rb +++ b/app/lib/activitypub/activity/reject.rb @@ -51,7 +51,7 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity collection_item = feature_request_from_object return unless collection_item.account == @account && collection_item.local? - collection_item.destroy! + collection_item.reject! end def relay diff --git a/app/lib/request.rb b/app/lib/request.rb index 376a37638c..d405fb5009 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -303,7 +303,7 @@ class Request addresses.each do |address| check_private_address(address, host) - sock = ::Socket.new(address.is_a?(Resolv::IPv6) ? ::Socket::AF_INET6 : ::Socket::AF_INET, ::Socket::SOCK_STREAM, 0) + sock = ::Socket.new(address.match?(Resolv::IPv6::Regex) ? ::Socket::AF_INET6 : ::Socket::AF_INET, ::Socket::SOCK_STREAM, 0) sockaddr = ::Socket.pack_sockaddr_in(port, address.to_s) sock.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1) diff --git a/app/lib/text_formatter.rb b/app/lib/text_formatter.rb index 10f007ff37..597135314b 100644 --- a/app/lib/text_formatter.rb +++ b/app/lib/text_formatter.rb @@ -76,6 +76,15 @@ class TextFormatter rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError h(url) end + + def link_to_mention(account, with_domain: false) + url = ActivityPub::TagManager.instance.url_for(account) + display_username = with_domain ? account.pretty_acct : account.username + + <<~HTML.squish + @#{h(display_username)} + HTML + end end private @@ -136,12 +145,7 @@ class TextFormatter return "@#{h(entity[:screen_name])}" if account.nil? - url = ActivityPub::TagManager.instance.url_for(account) - display_username = same_username_hits&.positive? || with_domains? ? account.pretty_acct : account.username - - <<~HTML.squish - @#{h(display_username)} - HTML + TextFormatter.link_to_mention(account, with_domain: same_username_hits&.positive? || with_domains?) end def entity_cache diff --git a/app/models/collection_item.rb b/app/models/collection_item.rb index cc77583674..bbb0343ebe 100644 --- a/app/models/collection_item.rb +++ b/app/models/collection_item.rb @@ -25,6 +25,9 @@ class CollectionItem < ApplicationRecord { pending: 0, accepted: 1, rejected: 2, revoked: 3 }, validate: true + alias reject! rejected! + alias revoke! revoked! + delegate :local?, :remote?, to: :collection validates :account_id, uniqueness: { scope: :collection_id } @@ -45,10 +48,6 @@ class CollectionItem < ApplicationRecord scope :accepted_partial, ->(account) { joins(:account).merge(Account.local).accepted.where(uri: nil, account_id: account.id) } scope :pending_or_accepted, -> { where(state: [:pending, :accepted]) } - def revoke! - update!(state: :revoked) - end - def with_local_account? account&.local? end diff --git a/app/models/notification.rb b/app/models/notification.rb index a54788dd2e..9a1a366869 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -37,54 +37,71 @@ class Notification < ApplicationRecord PROPERTIES = { mention: { filterable: true, + baseline: true, }.freeze, status: { filterable: false, + baseline: true, }.freeze, reblog: { filterable: true, + baseline: true, }.freeze, follow: { filterable: true, + baseline: true, }.freeze, follow_request: { filterable: true, + baseline: true, }.freeze, favourite: { filterable: true, + baseline: true, }.freeze, poll: { filterable: false, + baseline: true, }.freeze, update: { filterable: false, + baseline: true, }.freeze, severed_relationships: { filterable: false, + baseline: false, }.freeze, moderation_warning: { filterable: false, + baseline: false, }.freeze, annual_report: { filterable: false, + baseline: true, }.freeze, 'admin.sign_up': { filterable: false, + baseline: false, }.freeze, 'admin.report': { filterable: false, + baseline: false, }.freeze, quote: { filterable: true, + baseline: true, }.freeze, quoted_update: { filterable: false, + baseline: true, }.freeze, added_to_collection: { filterable: true, + baseline: false, }.freeze, collection_update: { filterable: false, + baseline: false, }.freeze, }.freeze diff --git a/app/serializers/activitypub/flag_serializer.rb b/app/serializers/activitypub/flag_serializer.rb index 2f2a707d36..fe6f26d23d 100644 --- a/app/serializers/activitypub/flag_serializer.rb +++ b/app/serializers/activitypub/flag_serializer.rb @@ -17,10 +17,24 @@ class ActivityPub::FlagSerializer < ActivityPub::Serializer end def virtual_object - [ActivityPub::TagManager.instance.uri_for(object.target_account)] + object.statuses.map { |s| ActivityPub::TagManager.instance.uri_for(s) } + target_account_uris + status_uris + collection_uris end def content object.comment end + + private + + def target_account_uris + [ActivityPub::TagManager.instance.uri_for(object.target_account)] + end + + def status_uris + object.statuses.map { |s| ActivityPub::TagManager.instance.uri_for(s) } + end + + def collection_uris + object.collections.map { |c| ActivityPub::TagManager.instance.uri_for(c) } + end end diff --git a/app/serializers/concerns/notification_fallback_concern.rb b/app/serializers/concerns/notification_fallback_concern.rb new file mode 100644 index 0000000000..a3fbf4f569 --- /dev/null +++ b/app/serializers/concerns/notification_fallback_concern.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: true + +module NotificationFallbackConcern + extend ActiveSupport::Concern + + def fallback + { + title: fallback_title, + summary: fallback_summary, + description: nil, + } + end + + def needs_fallback? + return false if instance_options[:supported_notification_types].nil? + return false if Notification::PROPERTIES.dig(object.type, :baseline) || instance_options[:supported_notification_types].include?(object.type.to_s) + + # In rare cases, a notification might be missing its activity, in which case we can't do much + case object.type + when :severed_relationships + object.account_relationship_severance_event.present? + when :'admin.report' + object.report.present? + when :added_to_collection, :collection_update + object.target_collection.present? + else + true + end + end + + def fallback_title + account = object.is_a?(NotificationGroup) ? object.sample_accounts.first : object.from_account + + case object.type + when :severed_relationships + I18n.t( + 'notification_fallbacks.severed_relationships.title', + name: object.account_relationship_severance_event.target_name + ) + when :moderation_warning + I18n.t('notification_fallbacks.moderation_warning.title') + when :'admin.sign_up' + count = object.is_a?(NotificationGroup) ? object.sample_accounts.count : 1 + if count > 1 + I18n.t( + 'notification_fallbacks.admin_sign_up.title_and_others_html', + name: TextFormatter.link_to_mention(account), + count: count - 1 + ) + else + I18n.t( + 'notification_fallbacks.admin_sign_up.title_html', + name: TextFormatter.link_to_mention(account) + ) + end + when :'admin.report' + I18n.t( + 'notification_fallbacks.admin_report.title_html', + name: account.remote? ? account.domain : TextFormatter.link_to_mention(account), + target: TextFormatter.link_to_mention(object.report.target_account) + ) + when :added_to_collection + I18n.t( + 'notification_fallbacks.added_to_collection.title_html', + name: TextFormatter.link_to_mention(account) + ) + when :collection_update + I18n.t( + 'notification_fallbacks.collection_update.title_html', + name: account + ) + end + end + + def fallback_summary + case object.type + when :severed_relationships + I18n.t( + 'notification_fallbacks.severed_relationships.summary_html', + from: Rails.configuration.x.local_domain, + target: object.account_relationship_severance_event.target_name, + link: link_to(I18n.t('notification_fallbacks.generic.sign_in'), severed_relationships_url) + ) + when :moderation_warning + I18n.t( + 'notification_fallbacks.moderation_warning.summary_html', + link: link_to(I18n.t('notification_fallbacks.generic.sign_in'), disputes_strike_url(object.account_warning.id)) + ) + when :'admin.sign_up', :'admin.report', :added_to_collection, :collection_update + I18n.t( + 'notification_fallbacks.generic.summary_html', + link: link_to(I18n.t('notification_fallbacks.generic.sign_in'), root_url) + ) + end + end +end diff --git a/app/serializers/rest/notification_group_serializer.rb b/app/serializers/rest/notification_group_serializer.rb index 3f95d78fc4..b47ff41cec 100644 --- a/app/serializers/rest/notification_group_serializer.rb +++ b/app/serializers/rest/notification_group_serializer.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true class REST::NotificationGroupSerializer < ActiveModel::Serializer + include RoutingHelper + include ActionView::Helpers::UrlHelper + include NotificationFallbackConcern + # Please update app/javascript/mastodon/api_types/notifications.ts when making changes to the attributes attributes :group_key, :notifications_count, :type, :most_recent_notification_id @@ -8,6 +12,8 @@ class REST::NotificationGroupSerializer < ActiveModel::Serializer attribute :page_max_id, if: :paginated? attribute :latest_page_notification_at, if: :paginated? + attribute :fallback, if: :needs_fallback? + attribute :sample_account_ids attribute :status_id, if: :status_type? belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer diff --git a/app/serializers/rest/notification_serializer.rb b/app/serializers/rest/notification_serializer.rb index f337aab943..0fb809fcb0 100644 --- a/app/serializers/rest/notification_serializer.rb +++ b/app/serializers/rest/notification_serializer.rb @@ -1,11 +1,17 @@ # frozen_string_literal: true class REST::NotificationSerializer < ActiveModel::Serializer + include RoutingHelper + include ActionView::Helpers::UrlHelper + include NotificationFallbackConcern + # Please update app/javascript/mastodon/api_types/notifications.ts when making changes to the attributes attributes :id, :type, :created_at, :group_key attribute :filtered, if: :filtered? + attribute :fallback, if: :needs_fallback? + belongs_to :from_account, key: :account, serializer: REST::AccountSerializer belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer diff --git a/app/services/block_service.rb b/app/services/block_service.rb index cbd0e8e75b..2efeceed0c 100644 --- a/app/services/block_service.rb +++ b/app/services/block_service.rb @@ -6,9 +6,11 @@ class BlockService < BaseService def call(account, target_account) return if account.id == target_account.id - UnfollowService.new.call(account, target_account) if account.following?(target_account) - UnfollowService.new.call(target_account, account) if target_account.following?(account) - RejectFollowService.new.call(target_account, account) if target_account.requested?(account) + @account = account + @target_account = target_account + + handle_following_relationships + handle_collections NotificationPermission.where(account: account, from_account: target_account).destroy_all @@ -21,6 +23,24 @@ class BlockService < BaseService private + def handle_following_relationships + UnfollowService.new.call(@account, @target_account) if @account.following?(@target_account) + UnfollowService.new.call(@target_account, @account) if @target_account.following?(@account) + RejectFollowService.new.call(@target_account, @account) if @target_account.requested?(@account) + end + + def handle_collections + # Remove account from target_account's collections + @target_account.curated_collection_items.where(account: @account).find_each do |collection_item| + RevokeCollectionItemService.new.call(collection_item) + end + + # Remove target_account from account's collections + @account.curated_collection_items.where(account: @target_account).find_each do |collection_item| + DeleteCollectionItemService.new.call(collection_item) + end + end + def create_notification(block) ActivityPub::DeliveryWorker.perform_async(build_json(block), block.account_id, block.target_account.inbox_url) end diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml index 130fe73d4f..570c03a6df 100644 --- a/app/views/settings/privacy/show.html.haml +++ b/app/views/settings/privacy/show.html.haml @@ -34,9 +34,6 @@ %p.lead= t('privacy.privacy_hint_html') - .fields-group - = f.input :show_collections, as: :boolean, wrapper: :with_label - = f.simple_fields_for :settings, current_user.settings do |ff| - unless Setting.hide_followers_count .fields-group diff --git a/app/workers/scheduler/collection_item_cleanup_scheduler.rb b/app/workers/scheduler/collection_item_cleanup_scheduler.rb new file mode 100644 index 0000000000..f70b3ee8f0 --- /dev/null +++ b/app/workers/scheduler/collection_item_cleanup_scheduler.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Scheduler::CollectionItemCleanupScheduler + include Sidekiq::Worker + + RETENTION_PERIOD = 24.hours + + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + + def perform + CollectionItem + .where(state: [:rejected, :revoked]) + .where(updated_at: ...(RETENTION_PERIOD.ago)) + .destroy_all + end +end diff --git a/config/locales/da.yml b/config/locales/da.yml index b26cce9c12..9cc6120ef8 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1731,6 +1731,27 @@ da: copy_account_note_text: 'Denne bruger er flyttet fra %{acct}, hvor dine tidligere noter om dem var:' navigation: toggle_menu: Åbn/luk menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} tilføjede dig til en samling" + admin_report: + title_html: "%{name} anmeldte %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} og en anden tilmeldte sig" + other: "%{name} og %{count} andre tilmeldte sig" + title_html: "%{name} tilmeldte sig" + collection_update: + title_html: "%{name} opdaterede en samling, du er med i" + generic: + sign_in: Log ind på Mastodon web-appen + summary_html: Du bruger på en app, der ikke understøtter den seneste version af Mastodon. %{link} for fuld funktionalitet. + moderation_warning: + summary_html: Du bruger en app, der ikke understøtter den seneste version af Mastodon. %{link}. + title: Du har modtaget en moderationsadvarsel. + severed_relationships: + summary_html: En administrator fra %{from} har suspenderet %{target}, hvilket betyder, at du ikke længere kan modtage opdateringer fra dem eller interagere med dem. %{link} for at hente en liste over de tabte forhold. + title: Mistede forbindelser med %{name} notification_mailer: admin: report: diff --git a/config/locales/de.yml b/config/locales/de.yml index 8873ea820c..6604c28fd5 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1731,6 +1731,27 @@ de: copy_account_note_text: 'Dieses Konto ist von %{acct} umgezogen. Hier deine damals verfassten Notizen zum Profil:' navigation: toggle_menu: Menü ein-/ausblenden + notification_fallbacks: + added_to_collection: + title_html: "%{name} fügte dich zu einer Sammlung hinzu" + admin_report: + title_html: "%{name} meldete %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} und noch jemand anderes registrierten sich" + other: "%{name} und %{count} weitere registrierten sich" + title_html: "%{name} registrierte sich" + collection_update: + title_html: "%{name} aktualisierte eine Sammlung, in der du vorgestellt wirst" + generic: + sign_in: Auf der Mastodon-Website anmelden + summary_html: Deine App unterstützt nicht die neueste Mastodon-Version. Rufe %{link} auf, um alle Funktionen nutzen zu können. + moderation_warning: + summary_html: Deine App unterstützt nicht die neueste Mastodon-Version. %{link}. + title: Die Moderator*innen haben dich verwarnt. + severed_relationships: + summary_html: Administrator*innen von %{from} haben den Zugriff auf den externen Server %{target} gesperrt. Das bedeutet, dass du keine Inhalte mehr von dort erhältst. Du kannst auch nicht mehr mit den Profilen dieses Servers interagieren. Rufe %{link} auf, um alle Profile, denen du folgtest und die dir folgten, einzusehen. + title: Verbindung zu %{name} verloren notification_mailer: admin: report: @@ -1946,7 +1967,7 @@ de: preferences: Einstellungen profile: Öffentliches Profil relationships: Follower und Folge ich - severed_relationships: Getrennte Beziehungen + severed_relationships: Getrennte Verbindungen statuses_cleanup: Automatisiertes Löschen strikes: Maßnahmen two_factor_authentication: Zwei-Faktor-Authentisierung @@ -1959,7 +1980,7 @@ de: user_domain_block: Du hast %{target_name} blockiert lost_followers: Verlorene Follower lost_follows: Konten entfolgt - preamble: Möglicherweise verlierst du Follower und entfolgst Konten, wenn du eine Domain blockierst oder Moderator*innen externe Server sperren. Sollte das der Fall sein, wirst du eine Liste mit den getrennten Beziehungen herunterladen können. Dadurch kannst du die Änderungen einsehen oder die Liste auf einen anderen Server importieren. + preamble: Möglicherweise verlierst du Follower und entfolgst Konten, wenn du eine Domain blockierst oder Moderator*innen externe Server sperren. Sollte das der Fall sein, wirst du eine Liste mit den getrennten Verbindungen einsehen und herunterladen können. Dadurch kannst du die Änderungen einsehen oder die Liste auf einen anderen Server importieren. purged: Informationen über diesen Server wurden von deinen Server-Administrator*innen entfernt. type: Ereignis statuses: diff --git a/config/locales/el.yml b/config/locales/el.yml index ab9434bc6b..7ddeb4601e 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1731,6 +1731,25 @@ el: copy_account_note_text: 'Ο χρήστης μετακόμισε από τον %{acct}, ορίστε οι προηγούμενες σημειώσεις σου για εκείνον:' navigation: toggle_menu: Εμφάνιση/Απόκρυψη μενού + notification_fallbacks: + added_to_collection: + title_html: "%{name} σας πρόσθεσε σε μια συλλογή" + admin_report: + title_html: Ο/Η %{name} ανέφερε τον/την %{target} + admin_sign_up: + title_and_others_html: + one: Ο/Η %{name} και ένας ακόμα έχουν εγγραφεί + other: Ο/Η %{name} και %{count} ακόμα έχουν εγγραφεί + title_html: Ο/Η %{name} έχει εγγραφεί + collection_update: + title_html: "%{name} ενημέρωσε μια συλλογή στην οποία περιλαμβάνεσαι" + generic: + sign_in: Συνδεθείτε στην εφαρμογή ιστού Mastodon + moderation_warning: + title: Έχετε λάβει μία προειδοποίηση συντονισμού. + severed_relationships: + summary_html: Ένας διαχειριστής από το %{from} έχει αναστείλει το %{target}, το οποίο σημαίνει ότι δεν μπορείς πλέον να λαμβάνεις ενημερώσεις από αυτούς ή να αλληλεπιδράς μαζί τους. %{link} για να λάβετε μια λίστα με τις χαμένες σχέσεις. + title: Χαμένες συνδέσεις με το %{name} notification_mailer: admin: report: @@ -1764,7 +1783,7 @@ el: subject: Ο/Η %{name} έκανε παράθεση της ανάρτησής σου title: Νέα παράθεση quoted_update: - subject: Ο/Η %{name} επεξεργάστηκε μία ανάρτηση που παρέθεσες + subject: "%{name} επεξεργάστηκε μία ανάρτηση που παρέθεσες" reblog: body: 'Η ανάρτησή σου ενισχύθηκε από %{name}:' subject: Ο/Η %{name} ενίσχυσε την ανάρτηση σου @@ -1955,7 +1974,7 @@ el: event_type: account_suspension: Αναστολή λογαριασμού (%{target_name}) domain_block: Αναστολή διακομιστή (%{target_name}) - user_domain_block: Απέκλεισες τον χρήστη %{target_name} + user_domain_block: Απέκλεισες το %{target_name} lost_followers: Χαμένοι ακόλουθοι lost_follows: Χαμένες ακολουθήσεις preamble: Μπορεί να χάσεις ακολουθήσεις και ακόλουθους όταν αποκλείεις έναν τομέα ή όταν οι συντονιστές σου αποφασίζουν να αναστείλουν έναν απομακρυσμένο διακομιστή. Όταν συμβεί αυτό, θα είσαι σε θέση να κατεβάσεις λίστες των αποκομμένων σχέσεων, για να επιθεωρηθούν και ενδεχομένως να εισαχθούν σε άλλον διακομιστή. diff --git a/config/locales/en.yml b/config/locales/en.yml index 2c92862102..176017f532 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1731,6 +1731,27 @@ en: copy_account_note_text: 'This user moved from %{acct}, here were your previous notes about them:' navigation: toggle_menu: Toggle menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} added you to a collection" + admin_report: + title_html: "%{name} reported %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} and one other signed up" + other: "%{name} and %{count} others signed up" + title_html: "%{name} signed up" + collection_update: + title_html: "%{name} updated a collection you are in" + generic: + sign_in: Sign in to the Mastodon web app + summary_html: You're on an app that does not support the most recent version of Mastodon. %{link} for full functionality. + moderation_warning: + summary_html: You're on an app that does not support the most recent version of Mastodon. %{link}. + title: You have received a moderation warning. + severed_relationships: + summary_html: An admin from %{from} has suspended %{target}, which means you can no longer receive updates from them or interact with them. %{link} to retrieve a list of the lost relationships. + title: Lost connections with %{name} notification_mailer: admin: report: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 2b4900848f..19b6ffcee4 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1731,6 +1731,27 @@ es-AR: copy_account_note_text: 'Este usuario se mudó desde %{acct}, acá están tus notas previas sobre él/ella:' navigation: toggle_menu: Cambiar menú + notification_fallbacks: + added_to_collection: + title_html: "%{name} te agregó a una colección" + admin_report: + title_html: "%{name} denunció a %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} y alguien más se registraron" + other: "%{name} y otras %{count} cuentas más se registraron" + title_html: Se registró %{name} + collection_update: + title_html: "%{name} editó una colección en la que estás" + generic: + sign_in: Iniciar sesión en la aplicación web de Mastodon + summary_html: Estás en una aplicación que no soporta la versión más reciente de Mastodon. %{link} para una funcionalidad completa. + moderation_warning: + summary_html: Estás en una aplicación que no soporta la versión más reciente de Mastodon. %{link}. + title: Recibiste una advertencia de moderación. + severed_relationships: + summary_html: Un administrador de %{from} suspendió %{target}, lo que significa que ya no podés recibir actualizaciones de ellos o interactuar con ellos. %{link} para recuperar una lista de las relaciones perdidas. + title: Conexiones perdidas con %{name} notification_mailer: admin: report: diff --git a/config/locales/et.yml b/config/locales/et.yml index 21e7de44ba..45fbe7629d 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1731,6 +1731,18 @@ et: copy_account_note_text: 'Kasutaja kolis kontolt %{acct}, kus olid eelnevad märkmed tema kohta:' navigation: toggle_menu: Menüü lülimine + notification_fallbacks: + added_to_collection: + title_html: "%{name} lisas sind kogumikku" + admin_report: + title_html: "%{name} rapor %{target} kohta" + admin_sign_up: + title_and_others_html: + one: "%{name} ja veel üks registreerus" + other: "%{name} ja veel %{count} registreerus" + title_html: "%{name} registreerus" + collection_update: + title_html: "%{name} uuendas kogumikku, kuhu kuulud" notification_mailer: admin: report: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 1ab60ce642..50e65f71d2 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1731,6 +1731,24 @@ fi: copy_account_note_text: 'Tämä käyttäjä siirtyi tililtä %{acct}. Nämä olivat muistiinpanosi hänestä:' navigation: toggle_menu: Avaa/sulje valikko + notification_fallbacks: + added_to_collection: + title_html: "%{name} lisäsi sinut kokoelmaan" + admin_report: + title_html: "%{name} raportoi käyttäjän %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} ja 1 muu rekisteröityivät" + other: "%{name} ja %{count} muuta rekisteröityivät" + title_html: "%{name} rekisteröityi" + collection_update: + title_html: "%{name} päivitti kokoelman, jossa olet" + generic: + sign_in: Rekisteröidy Mastodonin selainsovelluksessa + summary_html: Olet sovelluksessa, joka ei tue uusinta Mastodonin versiota. %{link} täyden toiminnallisuuden mahdollistamiseksi. + moderation_warning: + summary_html: Olet sovelluksessa, joka ei tue uusinta Mastodonin versiota. %{link}. + title: Olet saanut moderointivaroituksen. notification_mailer: admin: report: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index ca1742bc50..2ce37faa47 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1731,6 +1731,25 @@ fr-CA: copy_account_note_text: 'Cet·te utilisateur·rice est parti·e de %{acct}, voici vos notes précédentes à son sujet :' navigation: toggle_menu: Basculer l'affichage du menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} vous a ajouté·e à une collection" + admin_report: + title_html: "%{name} a signalé %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} et un·e autre se sont inscrit·e·s" + other: "%{name} et %{count} autres se sont inscrit·e·s" + title_html: "%{name} s'est inscrit·e" + collection_update: + title_html: "%{name} a mis à jour une collection dans laquelle vous figurez" + generic: + sign_in: Connectez-vous à l'application Web Mastodon + moderation_warning: + title: Vous avez reçu un avertissement de la modération. + severed_relationships: + summary_html: L'équipe d'administration de %{from} a suspendu %{target}, ce qui signifie que vous ne pouvez plus recevoir de notifications de leur part ou interagir avec. %{link} pour récupérer la liste des relations perdues. + title: Connexions perdues avec %{name} notification_mailer: admin: report: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index d9ccfed3fa..47bf7904b2 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1731,6 +1731,25 @@ fr: copy_account_note_text: 'Cet·te utilisateur·rice est parti·e de %{acct}, voici vos notes précédentes à son sujet :' navigation: toggle_menu: Basculer l'affichage du menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} vous a ajouté·e à une collection" + admin_report: + title_html: "%{name} a signalé %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} et un·e autre se sont inscrit·e·s" + other: "%{name} et %{count} autres se sont inscrit·e·s" + title_html: "%{name} s'est inscrit·e" + collection_update: + title_html: "%{name} a mis à jour une collection dans laquelle vous figurez" + generic: + sign_in: Connectez-vous à l'application Web Mastodon + moderation_warning: + title: Vous avez reçu un avertissement de la modération. + severed_relationships: + summary_html: L'équipe d'administration de %{from} a suspendu %{target}, ce qui signifie que vous ne pouvez plus recevoir de notifications de leur part ou interagir avec. %{link} pour récupérer la liste des relations perdues. + title: Connexions perdues avec %{name} notification_mailer: admin: report: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index f530105c4b..35738a449e 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1859,6 +1859,28 @@ ga: copy_account_note_text: 'Bhog an úsáideoir seo ó %{acct}, seo do nótaí roimhe seo fúthu:' navigation: toggle_menu: Scoránaigh roghchlár + notification_fallbacks: + added_to_collection: + title_html: Chuir %{name} le bailiúchán thú + admin_report: + title_html: Thuairiscigh %{name} %{target} + admin_sign_up: + title_and_others_html: + few: Chláraigh %{name} agus %{count} eile + many: Chláraigh %{name} agus %{count} eile + one: Chláraigh %{name} agus duine amháin eile + other: Chláraigh %{name} agus %{count} eile + two: Chláraigh %{name} agus %{count} eile + title_html: Chláraigh %{name} + collection_update: + title_html: Nuashonraigh %{name} bailiúchán ina bhfuil tú + generic: + sign_in: Sínigh isteach ar an app gréasáin Mastodon + moderation_warning: + title: Tá rabhadh modhnóireachta faighte agat. + severed_relationships: + summary_html: Chuir riarthóir ó %{from} %{target} ar fionraí, rud a chiallaíonn nach féidir leat nuashonruithe a fháil uathu nó idirghníomhú leo a thuilleadh. %{link} chun liosta de na gaolta caillte a fháil. + title: Caillte ceangail le %{name} notification_mailer: admin: report: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index ce50173b5c..e27b4b27cb 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1731,6 +1731,27 @@ gl: copy_account_note_text: 'Esta usuaria chegou desde %{acct}, aquí están as túas notas previas acerca dela:' navigation: toggle_menu: Activa o menú + notification_fallbacks: + added_to_collection: + title_html: "%{name} engadíute a unha colección" + admin_report: + title_html: "%{name} denunciou a %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} e outra persoa crearon a conta" + other: "%{name} e outras %{count} persoas crearon a conta" + title_html: "%{name} creou a conta" + collection_update: + title_html: "%{name} actualizou unha colección da que es parte" + generic: + sign_in: Accede na aplicación web de Mastodon + summary_html: Estás a usar unha app que non é compatible coa versión máis recente de Mastodon %{link} para obter todas as funcións. + moderation_warning: + summary_html: Estás a usar unha app que non é compatible coa versión máis recente de Mastodon. %{link}. + title: Recibiches unha advertencia da moderación. + severed_relationships: + summary_html: A administración de %{from} suspendeu a %{target}, o que significa que non vas recibir actualizacións dese servidor nin poder interactuar coas súas usuarias. %{link} para obter unha lista das relacións perdidas. + title: Relacións perdidas con %{name} notification_mailer: admin: report: diff --git a/config/locales/he.yml b/config/locales/he.yml index 974be319b7..b340e2d446 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1815,6 +1815,29 @@ he: copy_account_note_text: 'חשבון זה הועבר מ-%{acct}, הנה הערותיך הקודמות לגביהם:' navigation: toggle_menu: הצגת\הסתרת תפריט + notification_fallbacks: + added_to_collection: + title_html: "%{name} הוסיפו אותך לאוסף" + admin_report: + title_html: "%{name} דיווח.ה על %{target}" + admin_sign_up: + title_and_others_html: + many: "%{name} ועוד %{count} נרשמו" + one: "%{name} ועוד אחד נרשמו" + other: "%{name} ועוד %{count} נרשמו" + two: "%{name} ועוד שניים נרשמו" + title_html: "%{name} נרשמו" + collection_update: + title_html: "%{name} עדכנו אוסף הכולל אותך" + generic: + sign_in: התחברו ליישומון הווב של מסטודון + summary_html: אתם משתמשים ביישומון שאינו תומך בגרסא העדכנית של מסטודון. %{link} כדי לקבל את מלוא השמישות. + moderation_warning: + summary_html: אתם משתמשים ביישומון שאינו תומך בגרסא העדכנית של מסטודון. %{link}. + title: קיבלת אזהרת מנהל. + severed_relationships: + summary_html: מנהל מאתר %{from} הקפיא את %{target}, כלומר לא תוכלו לקבל יותר עדכונים מהם או להתכתב איתם. %{link} כדי לקבל רשימת מערכות יחסים שאבדו. + title: הקשר אבד עם %{name} notification_mailer: admin: report: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 0fbbbe90b8..fdf584155e 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1731,6 +1731,27 @@ hu: copy_account_note_text: 'Ez a fiók elköltözött innen: %{acct}, itt vannak az előző megjegyzéseid róla:' navigation: toggle_menu: Menü be/ki + notification_fallbacks: + added_to_collection: + title_html: "%{name} hozzáadott egy gyűjteményhez" + admin_report: + title_html: "%{name} jelentette: %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} és még egy felhasználó feliratkozott" + other: "%{name} és még %{count} felhasználó feliratkozott" + title_html: "%{name} feliratkozott" + collection_update: + title_html: "%{name} frissített egy gyűjteményt, amelyben szerepelsz" + generic: + sign_in: Jelentkezz be a Mastodon webalkalmazásba + summary_html: Olyan alkalmazást használsz, amely nem támogatja a Mastodon legfrissebb verzióját. %{link} a teljes funkcionalitáshoz. + moderation_warning: + summary_html: Olyan alkalmazást használsz, amely nem támogatja a Mastodon legfrissebb verzióját. %{link}. + title: Moderációs figyelmeztetést kaptál. + severed_relationships: + summary_html: 'A(z) %{from} egy rendszergazdája felfüggesztette ezt: %{target}, ez azt jelenti, hogy többé nem kapsz értesítést onnan, és nem tudsz interakcióba lépni velük. %{link} az elveszett kapcsolatok felsorolásáért.' + title: 'Elvesztek a kapcsolatok vele: %{name}' notification_mailer: admin: report: diff --git a/config/locales/is.yml b/config/locales/is.yml index ec09080cc3..8d82adf061 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1735,6 +1735,27 @@ is: copy_account_note_text: 'Þessi notandi fluttist frá %{acct}, hér eru fyrri minnispunktar þínir um hann:' navigation: toggle_menu: Víxla valmynd af/á + notification_fallbacks: + added_to_collection: + title_html: "%{name} bætti þér í safn" + admin_report: + title_html: "%{name} kærði %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} og einn í viðbót skráðu sig" + other: "%{name} og %{count} í viðbót skráðu sig" + title_html: "%{name} nýskráði sig" + collection_update: + title_html: "%{name} uppfærði safn sem þú ert í" + generic: + sign_in: Skráðu þig inn á Mastodon-vefforritið + summary_html: Þú ert að nota forrit sem styður ekki nýjustu útgáfuna af Mastodon. %{link} til að fá alla eiginleikana. + moderation_warning: + summary_html: Þú ert að nota forrit sem styður ekki nýjustu útgáfuna af Mastodon. %{link}. + title: Þú hefur fengið aðvörun frá umsjónarmanni. + severed_relationships: + summary_html: Stjórnandi á %{from} hefur sett %{target} í frysti, sem þýðir að þú getur ekki lengur fengið upplýsingar frá eða átt í samskiptum við viðkomandi. %{link} til að ná í lista yfir þau tengsl sem hafa rofnað. + title: Missti tengingar við %{name} notification_mailer: admin: report: diff --git a/config/locales/it.yml b/config/locales/it.yml index b9c26de4f5..92ed0fb6d0 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1731,6 +1731,27 @@ it: copy_account_note_text: 'Questo utente si è spostato da %{acct}, ecco le tue note precedenti su di loro:' navigation: toggle_menu: Cambia menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} ti ha aggiunto/a a una collezione" + admin_report: + title_html: "%{name} ha segnalato %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} e un altro si sono iscritti" + other: "%{name} e altri %{count} si sono iscritti" + title_html: "%{name} si è iscritto/a" + collection_update: + title_html: "%{name} ha aggiornato una collezione in cui sei presente" + generic: + sign_in: Accedi alla web app Mastodon + summary_html: Stai utilizzando un'app che non supporta la versione più recente di Mastodon. %{link} per la piena funzionalità. + moderation_warning: + summary_html: Stai utilizzando un'app che non supporta la versione più recente di Mastodon. %{link}. + title: Hai ricevuto un avviso di moderazione. + severed_relationships: + summary_html: Un amministratore/trice da %{from} ha sospeso %{target}, il che significa che non puoi più ricevere aggiornamenti o interagire con esso. Fai clic su %{link} per recuperare un elenco delle relazioni perse. + title: Connessioni perse con %{name} notification_mailer: admin: report: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 02bbc49a08..2baf36f4e5 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1731,6 +1731,25 @@ nl: copy_account_note_text: 'Deze gebruiker is verhuisd vanaf %{acct}. Je hebt de volgende opmerkingen over dat account gemaakt:' navigation: toggle_menu: Menu tonen/verbergen + notification_fallbacks: + added_to_collection: + title_html: "%{name} heeft jou aan een verzameling toegevoegd" + admin_report: + title_html: "%{name} rapporteerde %{target}" + admin_sign_up: + title_and_others_html: + one: "%{name} en één ander hebben zich geregistreerd" + other: "%{name} en %{count} anderen hebben zich geregistreerd" + title_html: "%{name} heeft zich geregistreerd" + collection_update: + title_html: "%{name} werkte een verzameling bij waar jij in zit" + generic: + sign_in: In de Mastodon web-app inloggen + moderation_warning: + title: Je hebt een moderatie-waarschuwing ontvangen. + severed_relationships: + summary_html: Een beheerder van %{from} heeft %{target} geschorst, wat betekent dat je geen updates meer van deze gebruiker kunt ontvangen of met deze gebruiker kunt communiceren. Ga naar %{link} voor een overzicht van verloren verbindingen. + title: Verloren verbindingen met %{name} notification_mailer: admin: report: diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 90f72963d8..60d98c40b6 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -61,9 +61,9 @@ de: setting_default_quote_policy_private: Beiträge, die nur für deine Follower bestimmt sind und auf Mastodon verfasst wurden, können nicht von anderen zitiert werden. setting_default_quote_policy_unlisted: Sollten dich andere zitieren, werden ihre zitierten Beiträge ebenfalls nicht in den Trends und öffentlichen Timelines angezeigt. setting_default_sensitive: Medien, die mit einer Inhaltswarnung versehen worden sind, werden – je nach Einstellung – erst nach einem zusätzlichen Klick angezeigt - setting_display_media_default: Bei der Anzeige von sensiblen Medien warnen - setting_display_media_hide_all: Bei der Anzeige von allen Medien warnen - setting_display_media_show_all: Alle Medien ohne Warnung anzeigen + setting_display_media_default: Vor der Anzeige von Medien, die eine Inhaltswarnung enthalten, hinweisen + setting_display_media_hide_all: Vor der Anzeige von allen Medien hinweisen + setting_display_media_show_all: Alle Medien anzeigen – auch Medien, die eine Inhaltswarnung enthalten setting_emoji_style: 'Wie Emojis dargestellt werden: „Automatisch“ verwendet native Emojis, für veraltete Browser wird jedoch Twemoji verwendet.' setting_quick_boosting_html: Dadurch wird der Beitrag beim Anklicken des %{boost_icon} Teilen-Symbols sofort geteilt, anstatt das Drop-down-Menü zu öffnen. Die Möglichkeit zum Zitieren wird dabei in %{options_icon} Mehr verschoben. setting_system_scrollbars_ui: Betrifft nur Desktop-Browser, die auf Chrome oder Safari basieren diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index c64aee9147..cfb33954e3 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -184,7 +184,7 @@ fr-CA: name: Étiquette value: Contenu indexable: Inclure mes messages publics dans les résultats de recherche - show_collections: Afficher les profils abonnés et suivis sur le profil + show_collections: Afficher les abonnements et les abonné·e·s sur le profil unlocked: Accepter automatiquement les nouveaux abonnés account_alias: acct: Identifiant de l’ancien compte diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 38b36df70e..f3bab12cc1 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -184,7 +184,7 @@ fr: name: Étiquette value: Contenu indexable: Inclure mes messages publics dans les résultats de recherche - show_collections: Afficher les profils abonnés et suivis sur le profil + show_collections: Afficher les abonnements et les abonné·e·s sur le profil unlocked: Accepter automatiquement les nouveaux abonnés account_alias: acct: Identifiant de l’ancien compte diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 292ece6a2f..ac4c27bb52 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -109,6 +109,7 @@ hu: status_page_url: Annak az oldalnak az URL-je, melyen ennek a kiszolgálónak az állapotát látják az emberek egy leállás során theme: A téma, melyet a kijelentkezett látogatók és az új felhasználók látnak. thumbnail: Egy durván 2:1 arányú kép, amely a kiszolgálóinformációk mellett jelenik meg. + thumbnail_description: A kép leírása a látássérültek számára, hogy jobban megértsék a tartalmát. trendable_by_default: Kézi felülvizsgálat kihagyása a felkapott tartalmaknál. Az egyes elemek utólag távolíthatók el a trendek közül. trends: A trendek azt mondják meg, hogy mely bejegyzések, hashtagek és hírbejegyzések felkapottak a kiszolgálódon. wrapstodon: Kínáld fel a lehetőséget a helyi felhasználóknak, hogy egy vidám összefoglalóban összesíthessék a Mastodon használatukat az év folyamán. Ez a lehetőség minden évben december 10. és 31. között érhető el, azoknak, aki létrehoztak legalább egy nyilvános vagy csendes nyilvános bejegyzést és használtak legalább egy hashtaget az év folyamán. @@ -160,6 +161,7 @@ hu: other: Ahhoz, hogy a(z) %{domain} weboldalt használd, meg kell győződnünk arról, hogy legalább %{count} éves vagy. Ezt nem tároljuk. role: A szerep szabályozza, hogy a felhasználó milyen jogosultságokkal rendelkezik. user_role: + collection_limit: Korlátozza az ilyen szerepkörű felhasználók által létrehozható gyűjtemények számát. Vedd figyelembe, hogy a szám csökkentésével a korlát feletti felhasználók nem vesztik el a gyűjteményeiket. De továbbiakat már nem fognak tudni létrehozni. color: A szerephez használandó szín mindenhol a felhasználói felületen, hexa RGB formátumban highlighted: Ez nyilvánosan láthatóvá teszi a szerepet name: A szerep nyilvános neve, ha a szerepet úgy állították be, hogy jelvényként látható legyen @@ -316,6 +318,7 @@ hu: status_page_url: Állapotoldal URL-je theme: Alapértelmezett téma thumbnail: Kiszolgáló bélyegképe + thumbnail_description: Bélyegkép helyettesítő szövege trendable_by_default: Trendek engedélyezése előzetes ellenőrzés nélkül trends: Trendek engedélyezése wrapstodon: Wrapstodon engedélyezése @@ -386,6 +389,7 @@ hu: role: Szerep time_zone: Időzóna user_role: + collection_limit: Gyűjtemények legnagyobb száma felhasználónként color: Jelvény színe highlighted: Szerep megjelenítése jelvényként a felhasználói profilokon name: Név diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 911622a82f..28aa09f441 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -109,6 +109,7 @@ sv: status_page_url: URL till en sida där personer kan se serverns status under ett driftavbrott theme: Tema som utloggade besökare och nya användare ser. thumbnail: En bild i cirka 2:1-proportioner som visas tillsammans med din serverinformation. + thumbnail_description: En beskrivning av bilden för att hjälpa personer med synnedsättning förstå dess innehåll. trendable_by_default: Hoppa över manuell granskning av trendande innehåll. Enskilda objekt kan ändå raderas från trender retroaktivt. trends: Trender visar vilka inlägg, hashtaggar och nyheter det pratas om på din server. wrapstodon: Erbjud lokala användare att generera en lekfull sammanfattning av deras Mastodon-användning under året. Denna funktion är tillgänglig mellan den 10 och 31 december varje år, och erbjuds till användare som gjort minst ett Offentligt eller Tyst Offentligt inlägg och använt minst en hashtag under året. @@ -160,6 +161,7 @@ sv: other: Vi måste se till att du är minst %{count} för att använda %{domain}. Vi lagrar inte denna information. role: Rollen styr vilka behörigheter användaren har. user_role: + collection_limit: Begränsar antalet samlingar som en enda användare med denna roll kan skapa. Observera att när du minskar detta antal kommer användare som redan är på denna gräns inte att förlora några samlingar. Men de kommer inte att kunna skapa ytterligare sådana. color: Färgen som ska användas för rollen i användargränssnittet, som RGB i hex-format highlighted: Detta gör rollen synlig offentligt name: Offentligt namn på rollen, om rollen är inställd på att visas som ett emblem @@ -316,6 +318,7 @@ sv: status_page_url: URL för statussida theme: Standardtema thumbnail: Serverns tumnagelbild + thumbnail_description: Miniatyrbilders alternativa text trendable_by_default: Tillåt trender utan föregående granskning trends: Aktivera trender wrapstodon: Aktivera Wrapstodon @@ -386,6 +389,7 @@ sv: role: Roll time_zone: Tidszon user_role: + collection_limit: Maximalt antal samlingar per användare color: Emblemsfärg highlighted: Visa roll som emblem på användarprofiler name: Namn diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 2a734d2875..6b2a166153 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1716,6 +1716,25 @@ sq: copy_account_note_text: 'Ky përdorues ka ikur prej %{acct}, ja ku janë shënimet tuaja të mëparshme mbi të:' navigation: toggle_menu: Shfaq/Fshih menunë + notification_fallbacks: + added_to_collection: + title_html: "%{name} ju shtoi te një koleksion" + admin_report: + title_html: "%{name} raportoi %{target}" + admin_sign_up: + title_and_others_html: + one: U regjistrua %{name} dhe një tjetër + other: U regjistruan %{name} dhe %{count} të tjerë + title_html: U regjistrua %{name} + collection_update: + title_html: "%{name} përditësoi një koleksion në të cilin gjendeni" + generic: + sign_in: Bëni hyrjen te aplikacioni web Mastodon + moderation_warning: + title: Keni marrë një sinjalizim moderimi. + severed_relationships: + summary_html: Një përgjegjës prej %{from} ka pezulluar %{target}, që do të thotë se s’mund të merrni më përditësime prej tij, apo të ndërveproni me të. %{link} që të merrni një listë të marrëdhënieve të humbura. + title: U humbën lidhje me %{name} notification_mailer: admin: report: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 554067c7fa..f4aee09dd8 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1689,6 +1689,26 @@ vi: copy_account_note_text: 'Tài khoản này chuyển từ %{acct}, đây là lịch sử kiểm duyệt của họ:' navigation: toggle_menu: Bật/tắt menu + notification_fallbacks: + added_to_collection: + title_html: "%{name} đã thêm bạn vào một gói khởi đầu" + admin_report: + title_html: "%{name} báo cáo %{target}" + admin_sign_up: + title_and_others_html: + other: "%{name} và %{count} người khác đã đăng ký" + title_html: "%{name} đã đăng ký" + collection_update: + title_html: "%{name} đã cập nhật gói khởi đầu có bạn" + generic: + sign_in: Đăng nhập Mastodon bản web + summary_html: Bạn đang sử dụng một ứng dụng không hỗ trợ phiên bản Mastodon mới nhất. %{link} để có đầy đủ tính năng. + moderation_warning: + summary_html: Bạn đang sử dụng một ứng dụng không hỗ trợ phiên bản Mastodon mới nhất. %{link}. + title: Bạn vừa nhận một cảnh cáo kiểm duyệt. + severed_relationships: + summary_html: Quản trị viên %{from} vừa vô hiệu hóa %{target}, điều này nghĩa là bạn không thể nhận được thông báo cập nhật từ họ hoặc tương tác với họ nữa. %{link} để khôi phục danh sách các mối quan hệ đã mất. + title: Mất kết nối với %{name} notification_mailer: admin: report: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 4690b07d39..96f026c317 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1689,6 +1689,26 @@ zh-CN: copy_account_note_text: 这个用户迁移自 %{acct},你曾为其添加备注: navigation: toggle_menu: 隐藏/显示菜单 + notification_fallbacks: + added_to_collection: + title_html: "%{name} 将你添加到了收藏列表" + admin_report: + title_html: "%{name} 举报了 %{target}" + admin_sign_up: + title_and_others_html: + other: "%{name} 及另外 %{count} 个人注册了" + title_html: "%{name} 注册了" + collection_update: + title_html: "%{name} 更新了你所在的收藏列表" + generic: + sign_in: 登录到 Mastodon 网页 App + summary_html: 你使用的应用程序不支持最新版本的 Mastodon。要使用完整功能,请%{link}。 + moderation_warning: + summary_html: 你使用的应用程序不支持最新版本的 Mastodon。%{link}。 + title: 你收到了一条管理警告。 + severed_relationships: + summary_html: "%{from} 的管理员封禁了 %{target},这意味着你将无法再收到对方的更新或与其互动。要获取失去的关系列表,%{link}。" + title: 与 %{name} 的联系已断开 notification_mailer: admin: report: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index daa3d4597b..50ded2f32b 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1691,6 +1691,11 @@ zh-TW: copy_account_note_text: 此使用者轉移自 %{acct},以下是您之前關於他們的備註: navigation: toggle_menu: 切換選單 + notification_fallbacks: + added_to_collection: + title_html: "%{name} 將您加入至收藏名單" + admin_report: + title_html: "%{name} 已檢舉 %{target}" notification_mailer: admin: report: diff --git a/config/routes.rb b/config/routes.rb index c3a73f12f4..772ca28f1c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -141,7 +141,7 @@ Rails.application.routes.draw do end end - resources :collections, only: [:show] + resources :collections, only: [:show], constraints: { id: /\d+/ } resource :inbox, only: [:create], module: :activitypub resources :contexts, only: [:show], module: :activitypub, constraints: { id: /[0-9]+-[0-9]+/ } do diff --git a/config/sidekiq.yml b/config/sidekiq.yml index fb85343d94..5beb95a3f8 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -72,3 +72,7 @@ interval: 1 day class: Scheduler::Fasp::FollowRecommendationCleanupScheduler queue: scheduler + collection_item_cleanup_scheduler: + interval: 1 hour + class: Scheduler::CollectionItemCleanupScheduler + queue: scheduler diff --git a/db/migrate/20260423141611_add_index_to_collection_item_state.rb b/db/migrate/20260423141611_add_index_to_collection_item_state.rb new file mode 100644 index 0000000000..498dbc7eb8 --- /dev/null +++ b/db/migrate/20260423141611_add_index_to_collection_item_state.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddIndexToCollectionItemState < ActiveRecord::Migration[8.1] + disable_ddl_transaction! + + def change + add_index :collection_items, :state, where: 'state IN (2, 3)', algorithm: :concurrently + end +end diff --git a/db/schema.rb b/db/schema.rb index 82f4e96b05..1c0c8011cb 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2026_04_20_124030) do +ActiveRecord::Schema[8.1].define(version: 2026_04_23_141611) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" @@ -373,6 +373,7 @@ ActiveRecord::Schema[8.1].define(version: 2026_04_20_124030) do t.index ["account_id", "collection_id"], name: "index_collection_items_on_account_id_and_collection_id", unique: true t.index ["approval_uri"], name: "index_collection_items_on_approval_uri", unique: true, where: "(approval_uri IS NOT NULL)" t.index ["collection_id"], name: "index_collection_items_on_collection_id" + t.index ["state"], name: "index_collection_items_on_state", where: "(state = ANY (ARRAY[2, 3]))" t.index ["uri"], name: "index_collection_items_on_uri", unique: true, where: "(uri IS NOT NULL)" end diff --git a/spec/lib/activitypub/activity/flag_spec.rb b/spec/lib/activitypub/activity/flag_spec.rb index be1bd42a14..54f76c9bad 100644 --- a/spec/lib/activitypub/activity/flag_spec.rb +++ b/spec/lib/activitypub/activity/flag_spec.rb @@ -143,7 +143,34 @@ RSpec.describe ActivityPub::Activity::Flag do end end - context 'when an account is passed but no status' do + context 'when the activity includes and account and a collection' do + let(:collection) { Fabricate(:collection, account: flagged) } + let(:json) do + { + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => flag_id, + 'type' => 'Flag', + 'content' => 'Boo!!', + 'actor' => ActivityPub::TagManager.instance.uri_for(sender), + 'object' => [ + ActivityPub::TagManager.instance.uri_for(flagged), + ActivityPub::TagManager.instance.uri_for(collection), + ], + } + end + + it 'creates a report with an attached collection' do + subject.perform + + report = Report.find_by(account: sender, target_account: flagged) + + expect(report).to_not be_nil + expect(report.comment).to eq 'Boo!!' + expect(report.collections).to contain_exactly(collection) + end + end + + context 'when an account is passed but no status or collection' do let(:mentioned) { Fabricate(:account) } let(:json) do diff --git a/spec/lib/activitypub/activity/reject_spec.rb b/spec/lib/activitypub/activity/reject_spec.rb index 8f58f02c71..d4ef898c25 100644 --- a/spec/lib/activitypub/activity/reject_spec.rb +++ b/spec/lib/activitypub/activity/reject_spec.rb @@ -161,8 +161,11 @@ RSpec.describe ActivityPub::Activity::Reject do } end - it 'deletes the collection item' do - expect { subject.perform }.to change(collection.collection_items, :count).by(-1) + it 'sets the collection item state to `rejected`' do + expect do + subject.perform + collection_item.reload + end.to change(collection_item, :state).to('rejected') end end end diff --git a/spec/lib/request/socket_spec.rb b/spec/lib/request/socket_spec.rb new file mode 100644 index 0000000000..2c6a12a304 --- /dev/null +++ b/spec/lib/request/socket_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Request::Socket do + describe '.open' do + context 'when an IPv6 only host lookup' do + let(:resolv_service) { instance_double(Resolv) } + let(:socket_service) { instance_double(Socket).as_null_object } + + before do + allow(Resolv).to receive(:new).and_return(resolv_service) + allow(Socket).to receive(:new).and_return(socket_service) + allow(resolv_service).to receive(:getaddresses).with('example.com').and_return(%w(2001:4860:4860::8844)) + end + + it 'returns a valid socket' do + described_class.open('example.com') + + expect(Socket) + .to have_received(:new) + .with(Socket::AF_INET6, Socket::SOCK_STREAM, 0) + end + end + end +end diff --git a/spec/serializers/activitypub/flag_serializer_spec.rb b/spec/serializers/activitypub/flag_serializer_spec.rb index 75f787a73a..a66a49bc87 100644 --- a/spec/serializers/activitypub/flag_serializer_spec.rb +++ b/spec/serializers/activitypub/flag_serializer_spec.rb @@ -22,4 +22,34 @@ RSpec.describe ActivityPub::FlagSerializer do expect(subject).to_not have_key('cc') expect(subject).to_not have_key('target') end + + context 'with status' do + let(:target_account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: target_account) } + let(:report) { Fabricate(:report, target_account:, status_ids: [status.id]) } + + it 'includes the status URI in `object`' do + expect(subject).to include({ + 'object' => [ + tag_manager.uri_for(target_account), + tag_manager.uri_for(status), + ], + }) + end + end + + context 'with collection', feature: :collections do + let(:target_account) { Fabricate(:account) } + let(:collection) { Fabricate(:collection, account: target_account) } + let(:report) { Fabricate(:report, target_account:, collections: [collection]) } + + it 'includes the collection URI in `object`' do + expect(subject).to include({ + 'object' => [ + tag_manager.uri_for(target_account), + tag_manager.uri_for(collection), + ], + }) + end + end end diff --git a/spec/serializers/rest/notification_group_serializer_spec.rb b/spec/serializers/rest/notification_group_serializer_spec.rb index 01fd8ce0a1..bd9bbe0fc7 100644 --- a/spec/serializers/rest/notification_group_serializer_spec.rb +++ b/spec/serializers/rest/notification_group_serializer_spec.rb @@ -6,10 +6,16 @@ RSpec.describe REST::NotificationGroupSerializer do subject do serialized_record_json( notification_group, - described_class + described_class, + options: { + scope: current_user, + scope_name: :current_user, + supported_notification_types: [], + } ) end + let(:current_user) { Fabricate(:user) } let(:notification_group) { NotificationGroup.new pagination_data: { latest_notification_at: 3.days.ago }, notification: Fabricate(:notification), sample_accounts: [] } context 'when latest_page_notification_at is populated' do @@ -20,4 +26,28 @@ RSpec.describe REST::NotificationGroupSerializer do ) end end + + shared_examples 'with fallback notifications' do |type, fabricators| + let(:activities) { fabricators.map { |fabricator| Fabricate(fabricator) } } + let(:notifications) { activities.map { |activity| Fabricate(:notification, type:, activity:, account: current_user.account) } } + let(:notification_group) { NotificationGroup.new(notification: notifications.last, sample_accounts: notifications.map(&:from_account)) } + + it 'renders correctly' do + expect(subject) + .to include( + 'type' => type, + 'fallback' => include( + 'title' => anything, + 'summary' => anything + ) + ) + end + end + + it_behaves_like 'with fallback notifications', 'severed_relationships', [:account_relationship_severance_event] + it_behaves_like 'with fallback notifications', 'moderation_warning', [:account_warning] + it_behaves_like 'with fallback notifications', 'admin.report', [:report] + it_behaves_like 'with fallback notifications', 'admin.report', [:report, :report] + it_behaves_like 'with fallback notifications', 'added_to_collection', [:collection_item] + it_behaves_like 'with fallback notifications', 'collection_update', [:collection] end diff --git a/spec/serializers/rest/notification_serializer_spec.rb b/spec/serializers/rest/notification_serializer_spec.rb index b833bcb6e1..377efdb93b 100644 --- a/spec/serializers/rest/notification_serializer_spec.rb +++ b/spec/serializers/rest/notification_serializer_spec.rb @@ -6,10 +6,16 @@ RSpec.describe REST::NotificationSerializer do subject do serialized_record_json( notification, - described_class + described_class, + options: { + scope: current_user, + scope_name: :current_user, + supported_notification_types: [], + } ) end + let(:current_user) { Fabricate(:user) } let(:notification) { Fabricate :notification } context 'when created_at is populated' do @@ -20,4 +26,25 @@ RSpec.describe REST::NotificationSerializer do ) end end + + shared_examples 'with fallback notifications' do |type, fabricator| + let(:notification) { Fabricate(:notification, type:, activity: Fabricate(fabricator), account: current_user.account) } + + it 'renders correctly' do + expect(subject) + .to include( + 'type' => type, + 'fallback' => include( + 'title' => anything, + 'summary' => anything + ) + ) + end + end + + it_behaves_like 'with fallback notifications', 'severed_relationships', :account_relationship_severance_event + it_behaves_like 'with fallback notifications', 'moderation_warning', :account_warning + it_behaves_like 'with fallback notifications', 'admin.report', :report + it_behaves_like 'with fallback notifications', 'added_to_collection', :collection_item + it_behaves_like 'with fallback notifications', 'collection_update', :collection end diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb index d9687a5404..f708c3bd39 100644 --- a/spec/services/block_service_spec.rb +++ b/spec/services/block_service_spec.rb @@ -19,6 +19,28 @@ RSpec.describe BlockService do .to change { sender.blocking?(bob) }.from(false).to(true) .and change { NotificationPermission.exists?(account: sender, from_account: bob) }.from(true).to(false) end + + context 'when the block affects collections' do + context 'when the sender features the target in a collection' do + let(:collection) { Fabricate(:collection, account: sender) } + let!(:collection_item) { Fabricate(:collection_item, collection:, account: bob) } + + it 'removes the affected item from the collection' do + expect { subject.call(sender, bob) }.to change(CollectionItem, :count).by(-1) + expect { collection_item.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + end + + context 'when the sender is featured by the target in a collection' do + let(:collection) { Fabricate(:collection, account: bob) } + let!(:collection_item) { Fabricate(:collection_item, collection:, account: sender) } + + it 'revokes the inclusion in the collection' do + subject.call(sender, bob) + expect(collection_item.reload).to be_revoked + end + end + end end describe 'remote ActivityPub' do diff --git a/spec/workers/scheduler/collection_item_cleanup_scheduler_spec.rb b/spec/workers/scheduler/collection_item_cleanup_scheduler_spec.rb new file mode 100644 index 0000000000..0a13053f81 --- /dev/null +++ b/spec/workers/scheduler/collection_item_cleanup_scheduler_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Scheduler::CollectionItemCleanupScheduler do + let(:worker) { described_class.new } + + describe '#perform' do + let!(:old_rejected_item) { Fabricate(:collection_item, state: :rejected, updated_at: 25.hours.ago) } + let!(:old_revoked_item) { Fabricate(:collection_item, state: :revoked, updated_at: 26.hours.ago) } + let!(:new_revoked_item) { Fabricate(:collection_item, state: :revoked, updated_at: 2.hours.ago) } + let!(:accepted_item) { Fabricate(:collection_item, state: :accepted, updated_at: 30.hours.ago) } + + it 'deletes the rejected and revoked items older than 24 hours' do + expect { subject.perform }.to change(CollectionItem, :count).by(-2) + + expect { old_rejected_item.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { old_revoked_item.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { new_revoked_item.reload }.to_not raise_error + expect { accepted_item.reload }.to_not raise_error + end + end +end diff --git a/yarn.lock b/yarn.lock index 1b1305b9c2..c231a221cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1924,22 +1924,22 @@ __metadata: languageName: node linkType: hard -"@emnapi/core@npm:1.9.2, @emnapi/core@npm:^1.4.3": - version: 1.9.2 - resolution: "@emnapi/core@npm:1.9.2" +"@emnapi/core@npm:1.10.0, @emnapi/core@npm:^1.4.3": + version: 1.10.0 + resolution: "@emnapi/core@npm:1.10.0" dependencies: "@emnapi/wasi-threads": "npm:1.2.1" tslib: "npm:^2.4.0" - checksum: 10c0/5500393f953951bad0768fafaa9191f2d938956b20c6d6a79e5ab696a613a25ce6ad23422bc18e86e6ce8deb147619d8d0d7d413a69f84adc01a6633cc353cd9 + checksum: 10c0/f51d08227857b60632de7714d708124f0e100a1462dde6df8221760939aa3204a73193830371830fac0716f3ccd2129f2cac1b17cd7d7958bc4da9018a296edb languageName: node linkType: hard -"@emnapi/runtime@npm:1.9.2, @emnapi/runtime@npm:^1.4.3": - version: 1.9.2 - resolution: "@emnapi/runtime@npm:1.9.2" +"@emnapi/runtime@npm:1.10.0, @emnapi/runtime@npm:^1.4.3": + version: 1.10.0 + resolution: "@emnapi/runtime@npm:1.10.0" dependencies: tslib: "npm:^2.4.0" - checksum: 10c0/61c3a59e0c36784558b8d58eb02bd04815aa5fb0dbfbaf84d1b3050a78aa0cc63ea129ae806bd1e48062bfeb7fc36eb0e5431740d62f64ea51bdf426404b8caa + checksum: 10c0/953f14991d1aefb92ee6f8eb27dea725e484791a53a0cb5f47d9e0087b9a2c929ff2e92adf95af15d6ad456db6300c6b761ebf72b50a875b874a83520b3ba093 languageName: node linkType: hard @@ -3077,15 +3077,15 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.1.2, @napi-rs/wasm-runtime@npm:^1.1.3": - version: 1.1.3 - resolution: "@napi-rs/wasm-runtime@npm:1.1.3" +"@napi-rs/wasm-runtime@npm:^1.1.2, @napi-rs/wasm-runtime@npm:^1.1.4": + version: 1.1.4 + resolution: "@napi-rs/wasm-runtime@npm:1.1.4" dependencies: "@tybys/wasm-util": "npm:^0.10.1" peerDependencies: "@emnapi/core": ^1.7.1 "@emnapi/runtime": ^1.7.1 - checksum: 10c0/745bb32a023b95095a18d93658bf4564403c2283ca0500a043afcf566ac6082bd0611792f14636276bab07dc2ce6d862591c8aabddae02ec697245b05bc6f144 + checksum: 10c0/2e88e1955258949ccf2d18c79975821ad38071b465ef126a5e14110977b97868867b016c1ad046e963cccc42c0bd9db6c8ff5fd1ebb61b87bb3487f339041658 languageName: node linkType: hard @@ -3333,7 +3333,14 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.124.0, @oxc-project/types@npm:^0.124.0": +"@oxc-project/types@npm:=0.127.0": + version: 0.127.0 + resolution: "@oxc-project/types@npm:0.127.0" + checksum: 10c0/52c0947ac64a9ca119fe971f947e784a35ecd14a072fa3f542a58a5f6c42010b53f2bf92731e39b9899b83c990a9517bbd29d1e5a5b7b489e52616685c6a9278 + languageName: node + linkType: hard + +"@oxc-project/types@npm:^0.124.0": version: 0.124.0 resolution: "@oxc-project/types@npm:0.124.0" checksum: 10c0/9564ee3ce41f4b87802ffd0d62a7602d27f4503fbd39c1bedab98d54fde06e2ac254a8f85d8f679af1281a26e8fc7aa053fadbb3e09e786b38178eb38a8e2fb3 @@ -3744,111 +3751,111 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-android-arm64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.15" +"@rolldown/binding-android-arm64@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.17" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.15" +"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.17" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-x64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.15" +"@rolldown/binding-darwin-x64@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.17" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.15" +"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.17" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.15" +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.17" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.15" +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.17" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.15" +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.17" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.15" +"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.17" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.15" +"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.17" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.15" +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.17" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.15" +"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.17" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.15" +"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.17" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.15" +"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.17" dependencies: - "@emnapi/core": "npm:1.9.2" - "@emnapi/runtime": "npm:1.9.2" - "@napi-rs/wasm-runtime": "npm:^1.1.3" + "@emnapi/core": "npm:1.10.0" + "@emnapi/runtime": "npm:1.10.0" + "@napi-rs/wasm-runtime": "npm:^1.1.4" conditions: cpu=wasm32 languageName: node linkType: hard -"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.15" +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.17" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.15" +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.17" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3875,10 +3882,10 @@ __metadata: languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/pluginutils@npm:1.0.0-rc.15" - checksum: 10c0/15eef6a65ee6b2d07405c16999c2333c40d8aeea60bbc35e04957992fe6477c7b278d3f02679688bb928ad2ef3fbd3a6149c116d7dc9928ebf8d1434a0591674 +"@rolldown/pluginutils@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "@rolldown/pluginutils@npm:1.0.0-rc.17" + checksum: 10c0/5e840b20cc531910c093c1ca36e550952cf4936465a50d89f0a98fc9d0dfd7d319d06a10a5f4376209d89e9bf4d60af6cc8363ebf0dcc5e60842f7fef438b2f0 languageName: node linkType: hard @@ -5823,13 +5830,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0": - version: 1.15.0 - resolution: "axios@npm:1.15.0" + version: 1.15.2 + resolution: "axios@npm:1.15.2" dependencies: follow-redirects: "npm:^1.15.11" form-data: "npm:^4.0.5" proxy-from-env: "npm:^2.1.0" - checksum: 10c0/47e0f860e98d4d7aa145e89ce0cae00e1fb0f1d2485f065c21fce955ddb1dba4103a46bd0e47acd18a27208a7f62c96249e620db575521b92a968619ab133409 + checksum: 10c0/4eeae0feeaa7fdc1ef24f81f8b378fdadedf4aebdd6bf224484675160f8744cf17b9b0d1c215279979940f7e8ce463beffa2f713099612e428eac238515c81d5 languageName: node linkType: hard @@ -5981,21 +5988,21 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" +"brace-expansion@npm:^2.0.1, brace-expansion@npm:^2.0.2": + version: 2.1.0 + resolution: "brace-expansion@npm:2.1.0" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + checksum: 10c0/439cedf3e23d7993b37919f1d6fdc653ec21a42437ec3e7460bea9ca8b17edf7a24a633273c31d61aa4335877cf29a443f1871814131c87997a1e6223e1f1502 languageName: node linkType: hard -"brace-expansion@npm:^5.0.2": - version: 5.0.4 - resolution: "brace-expansion@npm:5.0.4" +"brace-expansion@npm:^5.0.5": + version: 5.0.5 + resolution: "brace-expansion@npm:5.0.5" dependencies: balanced-match: "npm:^4.0.2" - checksum: 10c0/359cbcfa80b2eb914ca1f3440e92313fbfe7919ee6b274c35db55bec555aded69dac5ee78f102cec90c35f98c20fa43d10936d0cd9978158823c249257e1643a + checksum: 10c0/4d238e14ed4f5cc9c07285550a41cef23121ca08ba99fa9eb5b55b580dcb6bf868b8210aa10526bdc9f8dc97f33ca2a7259039c4cc131a93042beddb424c48e3 languageName: node linkType: hard @@ -10156,38 +10163,38 @@ __metadata: linkType: hard "minimatch@npm:^10.1.1, minimatch@npm:^10.2.2": - version: 10.2.4 - resolution: "minimatch@npm:10.2.4" + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" dependencies: - brace-expansion: "npm:^5.0.2" - checksum: 10c0/35f3dfb7b99b51efd46afd378486889f590e7efb10e0f6a10ba6800428cf65c9a8dedb74427d0570b318d749b543dc4e85f06d46d2858bc8cac7e1eb49a95945 + brace-expansion: "npm:^5.0.5" + checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd languageName: node linkType: hard "minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" dependencies: brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 languageName: node linkType: hard "minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" + version: 5.1.9 + resolution: "minimatch@npm:5.1.9" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + checksum: 10c0/4202718683815a7288b13e470160a4f9560cf392adef4f453927505817e01ef6b3476ecde13cfcaed17e7326dd3b69ad44eb2daeb19a217c5500f9277893f1d6 languageName: node linkType: hard "minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" + version: 9.0.9 + resolution: "minimatch@npm:9.0.9" dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + brace-expansion: "npm:^2.0.2" + checksum: 10c0/0b6a58530dbb00361745aa6c8cffaba4c90f551afe7c734830bd95fd88ebf469dd7355a027824ea1d09e37181cfeb0a797fb17df60c15ac174303ac110eb7e86 languageName: node linkType: hard @@ -11730,14 +11737,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.0.0, postcss@npm:^8.4.35, postcss@npm:^8.5.6, postcss@npm:^8.5.8": - version: 8.5.8 - resolution: "postcss@npm:8.5.8" +"postcss@npm:^8.0.0, postcss@npm:^8.4.35, postcss@npm:^8.5.10, postcss@npm:^8.5.6": + version: 8.5.12 + resolution: "postcss@npm:8.5.12" dependencies: nanoid: "npm:^3.3.11" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/dd918f7127ee7c60a0295bae2e72b3787892296e1d1c3c564d7a2a00c68d8df83cadc3178491259daa19ccc54804fb71ed8c937c6787e08d8bd4bedf8d17044c + checksum: 10c0/5baebaf574c567bc1b3d61197f38af4ce5920b8f611c887fb6bc3dcc14af00253c169dbf19897bc889cce0b0d9818ab5eb4ea0caedf02b0bab10da8a43ce8c12 languageName: node linkType: hard @@ -12642,27 +12649,27 @@ __metadata: languageName: node linkType: hard -"rolldown@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "rolldown@npm:1.0.0-rc.15" +"rolldown@npm:1.0.0-rc.17": + version: 1.0.0-rc.17 + resolution: "rolldown@npm:1.0.0-rc.17" dependencies: - "@oxc-project/types": "npm:=0.124.0" - "@rolldown/binding-android-arm64": "npm:1.0.0-rc.15" - "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.15" - "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.15" - "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.15" - "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.15" - "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.15" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.15" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.15" - "@rolldown/pluginutils": "npm:1.0.0-rc.15" + "@oxc-project/types": "npm:=0.127.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-rc.17" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.17" + "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.17" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.17" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.17" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.17" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.17" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.17" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.17" + "@rolldown/pluginutils": "npm:1.0.0-rc.17" dependenciesMeta: "@rolldown/binding-android-arm64": optional: true @@ -12696,7 +12703,7 @@ __metadata: optional: true bin: rolldown: bin/cli.mjs - checksum: 10c0/95df21125dafd2a0ce6ae9a89d926540e47900684023126c84632e18123371020da8f6b3235a188c45af0e4f9a5b963235de33bd9658ee5db9f3ff5862200eed + checksum: 10c0/bb99abc62ece4e34edd06d2b8eb9ffb7194dc2f0465a4329bb106cbde3006a10f1575e3580b198b793341109a2109581aed623c537c12b0c3a4ba0d72169b2fb languageName: node linkType: hard @@ -13979,13 +13986,13 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.10, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" +"tinyglobby@npm:^0.2.10, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15, tinyglobby@npm:^0.2.16": + version: 0.2.16 + resolution: "tinyglobby@npm:0.2.16" dependencies: fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 + picomatch: "npm:^4.0.4" + checksum: 10c0/f2e09fd93dd95c41e522113b686ff6f7c13020962f8698a864a257f3d7737599afc47722b7ab726e12f8a813f779906187911ff8ee6701ede65072671a7e934b languageName: node linkType: hard @@ -14735,15 +14742,15 @@ __metadata: linkType: hard "vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0-0, vite@npm:^8.0.0": - version: 8.0.8 - resolution: "vite@npm:8.0.8" + version: 8.0.10 + resolution: "vite@npm:8.0.10" dependencies: fsevents: "npm:~2.3.3" lightningcss: "npm:^1.32.0" picomatch: "npm:^4.0.4" - postcss: "npm:^8.5.8" - rolldown: "npm:1.0.0-rc.15" - tinyglobby: "npm:^0.2.15" + postcss: "npm:^8.5.10" + rolldown: "npm:1.0.0-rc.17" + tinyglobby: "npm:^0.2.16" peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 "@vitejs/devtools": ^0.1.0 @@ -14787,7 +14794,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/63474b399612ccf087d0aa025d7eb5c0d675012b6257b7f64332ff39579d4af4d5d7f0ac330906fc99b101abbf592c756adf143bb5748a02aec08f7d3639054d + checksum: 10c0/92188b82654f856dbe562a1b679de695bb6ca18c0f43c4c276f84a869fb78e22dedb7c2df83b5617d6afdca979c059d654b5f61a0936a45f49917f352b9325ca languageName: node linkType: hard
{description}
{message}