Merge remote-tracking branch 'upstream/main' into develop

This commit is contained in:
Jeremy Kescher 2024-08-31 12:53:19 +02:00
commit 9c355a240b
No known key found for this signature in database
GPG key ID: 80A419A7A613DFA4
135 changed files with 1718 additions and 1003 deletions

View file

@ -42,11 +42,24 @@ jobs:
with: with:
onlyProduction: 'true' onlyProduction: 'true'
- name: Cache assets from compilation
uses: actions/cache@v4
with:
path: |
public/assets
public/packs
public/packs-test
tmp/cache/webpacker
key: ${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
restore-keys: |
${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}
${{ matrix.mode }}-assets-main
${{ matrix.mode }}-assets
- name: Precompile assets - name: Precompile assets
# Previously had set this, but it's not supported
# export NODE_OPTIONS=--openssl-legacy-provider
run: |- run: |-
./bin/rails assets:precompile bin/rails assets:precompile
- name: Archive asset artifacts - name: Archive asset artifacts
run: | run: |
@ -137,6 +150,19 @@ jobs:
bin/rails db:setup bin/rails db:setup
bin/flatware fan bin/rails db:test:prepare bin/flatware fan bin/rails db:test:prepare
- name: Cache RSpec persistence file
uses: actions/cache@v4
with:
path: |
tmp/rspec/examples.txt
key: rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
restore-keys: |
rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}-${{ matrix.ruby-version }}
rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
rspec-persistence-${{ github.head_ref || github.ref_name }}
rspec-persistence-main
rspec-persistence
- run: bin/flatware rspec -r ./spec/flatware_helper.rb - run: bin/flatware rspec -r ./spec/flatware_helper.rb
- name: Upload coverage reports to Codecov - name: Upload coverage reports to Codecov

View file

@ -165,7 +165,7 @@ The following changelog entries focus on changes visible to users, administrator
- **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, and #31510 by @ClearlyClaire, @Gargron, @renchap, and @vmstan) - **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, and #31510 by @ClearlyClaire, @Gargron, @renchap, and @vmstan)
- **Change onboarding prompt to follow suggestions carousel in web UI** (#28878 and #29272 by @Gargron) - **Change onboarding prompt to follow suggestions carousel in web UI** (#28878 and #29272 by @Gargron)
- **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, and #29879 by @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\ - **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, and #29879 by @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\
All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to reand and keeping maximum compatibility across mail clients. All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to read and keeping maximum compatibility across mail clients.
- **Change follow recommendations algorithm** (#28314, #28433, #29017, #29108, #29306, #29550, #29619, and #31474 by @ClearlyClaire, @Gargron, @kernal053, @mjankowski, and @wheatear-dev)\ - **Change follow recommendations algorithm** (#28314, #28433, #29017, #29108, #29306, #29550, #29619, and #31474 by @ClearlyClaire, @Gargron, @kernal053, @mjankowski, and @wheatear-dev)\
This replaces the “past interactions” recommendation algorithm with a “friends of friends” algorithm that suggests accounts followed by people you follow, and a “similar profiles” algorithm that suggests accounts with a profile similar to your most recent follows.\ This replaces the “past interactions” recommendation algorithm with a “friends of friends” algorithm that suggests accounts followed by people you follow, and a “similar profiles” algorithm that suggests accounts with a profile similar to your most recent follows.\
In addition, the implementation has been significantly reworked, and all follow recommendations are now dismissable.\ In addition, the implementation has been significantly reworked, and all follow recommendations are now dismissable.\

View file

@ -137,14 +137,14 @@ GEM
blurhash (0.1.7) blurhash (0.1.7)
bootsnap (1.18.4) bootsnap (1.18.4)
msgpack (~> 1.2) msgpack (~> 1.2)
brakeman (6.1.2) brakeman (6.2.1)
racc racc
browser (5.3.1) browser (5.3.1)
brpoplpush-redis_script (0.1.3) brpoplpush-redis_script (0.1.3)
concurrent-ruby (~> 1.0, >= 1.0.5) concurrent-ruby (~> 1.0, >= 1.0.5)
redis (>= 1.0, < 6) redis (>= 1.0, < 6)
builder (3.3.0) builder (3.3.0)
bundler-audit (0.9.1) bundler-audit (0.9.2)
bundler (>= 1.2.0, < 3) bundler (>= 1.2.0, < 3)
thor (~> 1.0) thor (~> 1.0)
capybara (3.40.0) capybara (3.40.0)
@ -432,7 +432,7 @@ GEM
mime-types-data (3.2024.0702) mime-types-data (3.2024.0702)
mini_mime (1.1.5) mini_mime (1.1.5)
mini_portile2 (2.8.7) mini_portile2 (2.8.7)
minitest (5.24.1) minitest (5.25.1)
msgpack (1.7.2) msgpack (1.7.2)
multi_json (1.15.0) multi_json (1.15.0)
multipart-post (2.4.0) multipart-post (2.4.0)
@ -466,7 +466,7 @@ GEM
addressable (~> 2.8) addressable (~> 2.8)
nokogiri (~> 1.12) nokogiri (~> 1.12)
omniauth (~> 2.1) omniauth (~> 2.1)
omniauth-rails_csrf_protection (1.0.1) omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2) actionpack (>= 4.2)
omniauth (~> 2.0) omniauth (~> 2.0)
omniauth-saml (2.1.0) omniauth-saml (2.1.0)
@ -608,7 +608,7 @@ GEM
public_suffix (6.0.1) public_suffix (6.0.1)
puma (6.4.2) puma (6.4.2)
nio4r (~> 2.0) nio4r (~> 2.0)
pundit (2.3.2) pundit (2.4.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.4.0) raabro (1.4.0)
racc (1.8.1) racc (1.8.1)
@ -695,7 +695,7 @@ GEM
responders (3.1.1) responders (3.1.1)
actionpack (>= 5.2) actionpack (>= 5.2)
railties (>= 5.2) railties (>= 5.2)
rexml (3.3.4) rexml (3.3.6)
strscan strscan
rotp (6.3.0) rotp (6.3.0)
rouge (4.2.1) rouge (4.2.1)
@ -832,7 +832,7 @@ GEM
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
terrapin (1.0.1) terrapin (1.0.1)
climate_control climate_control
test-prof (1.4.0) test-prof (1.4.1)
thor (1.3.1) thor (1.3.1)
tilt (2.3.0) tilt (2.3.0)
timeout (0.4.1) timeout (0.4.1)

View file

@ -86,7 +86,7 @@ module ApplicationHelper
def html_title def html_title
safe_join( safe_join(
[content_for(:page_title).to_s.chomp, title] [content_for(:page_title).to_s.chomp, title]
.select(&:present?), .compact_blank,
' - ' ' - '
) )
end end

View file

@ -6,5 +6,4 @@ export const submitAccountNote = createDataLoadingThunk(
({ accountId, note }: { accountId: string; note: string }) => ({ accountId, note }: { accountId: string; note: string }) =>
apiSubmitAccountNote(accountId, note), apiSubmitAccountNote(accountId, note),
(relationship) => ({ relationship }), (relationship) => ({ relationship }),
{ skipLoading: true },
); );

View file

@ -2,6 +2,7 @@ import { debounce } from 'lodash';
import type { MarkerJSON } from 'flavours/glitch/api_types/markers'; import type { MarkerJSON } from 'flavours/glitch/api_types/markers';
import { getAccessToken } from 'flavours/glitch/initial_state'; import { getAccessToken } from 'flavours/glitch/initial_state';
import { selectUseGroupedNotifications } from 'flavours/glitch/selectors/settings';
import type { AppDispatch, RootState } from 'flavours/glitch/store'; import type { AppDispatch, RootState } from 'flavours/glitch/store';
import { createAppAsyncThunk } from 'flavours/glitch/store/typed_functions'; import { createAppAsyncThunk } from 'flavours/glitch/store/typed_functions';
@ -75,13 +76,8 @@ interface MarkerParam {
} }
function getLastNotificationId(state: RootState): string | undefined { function getLastNotificationId(state: RootState): string | undefined {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
const enableBeta = state.settings.getIn(
['notifications', 'groupingBeta'],
false,
) as boolean;
// eslint-disable-next-line @typescript-eslint/no-unsafe-return // eslint-disable-next-line @typescript-eslint/no-unsafe-return
return enableBeta return selectUseGroupedNotifications(state)
? state.notificationGroups.lastReadId ? state.notificationGroups.lastReadId
: // @ts-expect-error state.notifications is not yet typed : // @ts-expect-error state.notifications is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-call

View file

@ -1,3 +1,4 @@
import { selectUseGroupedNotifications } from 'flavours/glitch/selectors/settings';
import { createAppAsyncThunk } from 'flavours/glitch/store'; import { createAppAsyncThunk } from 'flavours/glitch/store';
import { fetchNotifications } from './notification_groups'; import { fetchNotifications } from './notification_groups';
@ -6,13 +7,8 @@ import { expandNotifications } from './notifications';
export const initializeNotifications = createAppAsyncThunk( export const initializeNotifications = createAppAsyncThunk(
'notifications/initialize', 'notifications/initialize',
(_, { dispatch, getState }) => { (_, { dispatch, getState }) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access if (selectUseGroupedNotifications(getState()))
const enableBeta = getState().settings.getIn( void dispatch(fetchNotifications());
['notifications', 'groupingBeta'],
false,
) as boolean;
if (enableBeta) void dispatch(fetchNotifications());
else void dispatch(expandNotifications({})); else void dispatch(expandNotifications({}));
}, },
); );

View file

@ -1,5 +1,7 @@
// @ts-check // @ts-check
import { selectUseGroupedNotifications } from 'flavours/glitch/selectors/settings';
import { getLocale } from '../locales'; import { getLocale } from '../locales';
import { connectStream } from '../stream'; import { connectStream } from '../stream';
@ -103,7 +105,7 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
const notificationJSON = JSON.parse(data.payload); const notificationJSON = JSON.parse(data.payload);
dispatch(updateNotifications(notificationJSON, messages, locale)); dispatch(updateNotifications(notificationJSON, messages, locale));
// TODO: remove this once the groups feature replaces the previous one // TODO: remove this once the groups feature replaces the previous one
if(getState().settings.getIn(['notifications', 'groupingBeta'], false)) { if(selectUseGroupedNotifications(getState())) {
dispatch(processNewNotificationForGroups(notificationJSON)); dispatch(processNewNotificationForGroups(notificationJSON));
} }
break; break;
@ -112,7 +114,7 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
const state = getState(); const state = getState();
if (state.notifications.top || !state.notifications.mounted) if (state.notifications.top || !state.notifications.mounted)
dispatch(expandNotifications({ forceLoad: true, maxId: undefined })); dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
if(state.settings.getIn(['notifications', 'groupingBeta'], false)) { if (selectUseGroupedNotifications(state)) {
dispatch(refreshStaleNotificationGroups()); dispatch(refreshStaleNotificationGroups());
} }
break; break;
@ -145,7 +147,7 @@ async function refreshHomeTimelineAndNotification(dispatch, getState) {
await dispatch(expandHomeTimeline({ maxId: undefined })); await dispatch(expandHomeTimeline({ maxId: undefined }));
// TODO: remove this once the groups feature replaces the previous one // TODO: remove this once the groups feature replaces the previous one
if(getState().settings.getIn(['notifications', 'groupingBeta'], false)) { if(selectUseGroupedNotifications(getState())) {
// TODO: polling for merged notifications // TODO: polling for merged notifications
try { try {
await dispatch(pollRecentGroupNotifications()); await dispatch(pollRecentGroupNotifications());

View file

@ -12,11 +12,12 @@ import { connect } from 'react-redux';
import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';
import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import MailIcon from '@/material-icons/400-24px/mail.svg?react'; import MailIcon from '@/material-icons/400-24px/mail.svg?react';
import ManufacturingIcon from '@/material-icons/400-24px/manufacturing.svg?react'; import AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';
import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; import MenuIcon from '@/material-icons/400-24px/menu.svg?react';
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react';
@ -29,9 +30,9 @@ import { openModal } from 'flavours/glitch/actions/modal';
import Column from 'flavours/glitch/features/ui/components/column'; import Column from 'flavours/glitch/features/ui/components/column';
import LinkFooter from 'flavours/glitch/features/ui/components/link_footer'; import LinkFooter from 'flavours/glitch/features/ui/components/link_footer';
import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context'; import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context';
import { canManageReports, canViewAdminDashboard } from 'flavours/glitch/permissions';
import { preferencesLink } from 'flavours/glitch/utils/backend_links'; import { preferencesLink } from 'flavours/glitch/utils/backend_links';
import { me, showTrends } from '../../initial_state'; import { me, showTrends } from '../../initial_state';
import { NavigationBar } from '../compose/components/navigation_bar'; import { NavigationBar } from '../compose/components/navigation_bar';
import ColumnLink from '../ui/components/column_link'; import ColumnLink from '../ui/components/column_link';
@ -51,6 +52,8 @@ const messages = defineMessages({
direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' }, direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' }, bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },
moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },
settings: { id: 'navigation_bar.app_settings', defaultMessage: 'App settings' }, settings: { id: 'navigation_bar.app_settings', defaultMessage: 'App settings' },
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
@ -131,7 +134,7 @@ class GettingStarted extends ImmutablePureComponent {
render () { render () {
const { intl, myAccount, columns, multiColumn, unreadFollowRequests, unreadNotifications, lists, openSettings } = this.props; const { intl, myAccount, columns, multiColumn, unreadFollowRequests, unreadNotifications, lists, openSettings } = this.props;
const { signedIn } = this.props.identity; const { signedIn, permissions } = this.props.identity;
const navItems = []; const navItems = [];
let listItems = []; let listItems = [];
@ -196,7 +199,9 @@ class GettingStarted extends ImmutablePureComponent {
{listItems} {listItems}
<ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} /> <ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} />
{ preferencesLink !== undefined && <ColumnLink icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} href={preferencesLink} /> } { preferencesLink !== undefined && <ColumnLink icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} href={preferencesLink} /> }
<ColumnLink icon='cogs' iconComponent={ManufacturingIcon} text={intl.formatMessage(messages.settings)} onClick={openSettings} /> <ColumnLink icon='cogs' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.settings)} onClick={openSettings} />
{canManageReports(permissions) && <ColumnLink key='moderation' href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />}
{canViewAdminDashboard(permissions) && <ColumnLink key='administration' href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />}
</> </>
)} )}
</div> </div>

View file

@ -6,6 +6,7 @@ import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context'; import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context';
import { forceGroupedNotifications } from 'flavours/glitch/initial_state';
import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'flavours/glitch/permissions'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'flavours/glitch/permissions';
import ClearColumnButton from './clear_column_button'; import ClearColumnButton from './clear_column_button';
@ -78,15 +79,17 @@ class ColumnSettings extends PureComponent {
</div> </div>
</section> </section>
<section role='group' aria-labelledby='notifications-beta'> {!forceGroupedNotifications && (
<h3 id='notifications-beta'> <section role='group' aria-labelledby='notifications-beta'>
<FormattedMessage id='notifications.column_settings.beta.category' defaultMessage='Experimental features' /> <h3 id='notifications-beta'>
</h3> <FormattedMessage id='notifications.column_settings.beta.category' defaultMessage='Experimental features' />
</h3>
<div className='column-settings__row'> <div className='column-settings__row'>
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['groupingBeta']} onChange={onChange} label={groupingShowStr} /> <SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['groupingBeta']} onChange={onChange} label={groupingShowStr} />
</div> </div>
</section> </section>
)}
<section role='group' aria-labelledby='notifications-unread-markers'> <section role='group' aria-labelledby='notifications-unread-markers'>
<h3 id='notifications-unread-markers'> <h3 id='notifications-unread-markers'>

View file

@ -410,7 +410,7 @@ class Notification extends ImmutablePureComponent {
<bdi> <bdi>
<Permalink <Permalink
className='notification__display-name' className='notification__display-name'
href={account.get('url')} href={targetAccount.get('url')}
title={targetAccount.get('acct')} title={targetAccount.get('acct')}
to={`/@${targetAccount.get('acct')}`} to={`/@${targetAccount.get('acct')}`}
dangerouslySetInnerHTML={targetDisplayNameHtml} dangerouslySetInnerHTML={targetDisplayNameHtml}

View file

@ -1,9 +1,10 @@
import Notifications from 'flavours/glitch/features/notifications'; import Notifications from 'flavours/glitch/features/notifications';
import Notifications_v2 from 'flavours/glitch/features/notifications_v2'; import Notifications_v2 from 'flavours/glitch/features/notifications_v2';
import { selectUseGroupedNotifications } from 'flavours/glitch/selectors/settings';
import { useAppSelector } from 'flavours/glitch/store'; import { useAppSelector } from 'flavours/glitch/store';
export const NotificationsWrapper = (props) => { export const NotificationsWrapper = (props) => {
const optedInGroupedNotifications = useAppSelector((state) => state.getIn(['settings', 'notifications', 'groupingBeta'], false)); const optedInGroupedNotifications = useAppSelector(selectUseGroupedNotifications);
return ( return (
optedInGroupedNotifications ? <Notifications_v2 {...props} /> : <Notifications {...props} /> optedInGroupedNotifications ? <Notifications_v2 {...props} /> : <Notifications {...props} />

View file

@ -1,28 +1,17 @@
import type { MouseEventHandler } from 'react';
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { useHistory } from 'react-router';
import type Immutable from 'immutable';
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
import AttachmentList from 'flavours/glitch/components/attachment_list'; import { Button } from 'flavours/glitch/components/button';
import { Icon } from 'flavours/glitch/components/icon'; import { Icon } from 'flavours/glitch/components/icon';
import { VisibilityIcon } from 'flavours/glitch/components/visibility_icon';
import PrivacyDropdown from 'flavours/glitch/features/compose/components/privacy_dropdown'; import PrivacyDropdown from 'flavours/glitch/features/compose/components/privacy_dropdown';
import type { Account } from 'flavours/glitch/models/account'; import { EmbeddedStatus } from 'flavours/glitch/features/notifications_v2/components/embedded_status';
import type { Status, StatusVisibility } from 'flavours/glitch/models/status'; import type { Status, StatusVisibility } from 'flavours/glitch/models/status';
import { useAppSelector } from 'flavours/glitch/store'; import { useAppSelector } from 'flavours/glitch/store';
import { Avatar } from '../../../components/avatar';
import { Button } from '../../../components/button';
import { DisplayName } from '../../../components/display_name';
import { RelativeTimestamp } from '../../../components/relative_timestamp';
import StatusContent from '../../../components/status_content';
const messages = defineMessages({ const messages = defineMessages({
cancel_reblog: { cancel_reblog: {
id: 'status.cancel_reblog_private', id: 'status.cancel_reblog_private',
@ -38,18 +27,17 @@ export const BoostModal: React.FC<{
missingMediaDescription?: boolean; missingMediaDescription?: boolean;
}> = ({ status, onReblog, onClose, missingMediaDescription }) => { }> = ({ status, onReblog, onClose, missingMediaDescription }) => {
const intl = useIntl(); const intl = useIntl();
const history = useHistory();
const default_privacy = useAppSelector( const defaultPrivacy = useAppSelector(
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('default_privacy') as StatusVisibility, (state) => state.compose.get('default_privacy') as StatusVisibility,
); );
const account = status.get('account') as Account; const statusId = status.get('id') as string;
const statusVisibility = status.get('visibility') as StatusVisibility; const statusVisibility = status.get('visibility') as StatusVisibility;
const [privacy, setPrivacy] = useState<StatusVisibility>( const [privacy, setPrivacy] = useState<StatusVisibility>(
statusVisibility === 'private' ? 'private' : default_privacy, statusVisibility === 'private' ? 'private' : defaultPrivacy,
); );
const onPrivacyChange = useCallback((value: StatusVisibility) => { const onPrivacyChange = useCallback((value: StatusVisibility) => {
@ -61,20 +49,9 @@ export const BoostModal: React.FC<{
onClose(); onClose();
}, [onClose, onReblog, status, privacy]); }, [onClose, onReblog, status, privacy]);
const handleAccountClick = useCallback<MouseEventHandler>( const handleCancel = useCallback(() => {
(e) => { onClose();
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { }, [onClose]);
e.preventDefault();
onClose();
history.push(`/@${account.acct}`);
}
},
[history, onClose, account],
);
const buttonText = status.get('reblogged')
? messages.cancel_reblog
: messages.reblog;
const findContainer = useCallback( const findContainer = useCallback(
() => document.getElementsByClassName('modal-root__container')[0], () => document.getElementsByClassName('modal-root__container')[0],
@ -82,88 +59,85 @@ export const BoostModal: React.FC<{
); );
return ( return (
<div className='modal-root__modal boost-modal'> <div className='modal-root__modal safety-action-modal'>
<div className='boost-modal__container'> <div className='safety-action-modal__top'>
<div <div className='safety-action-modal__header'>
className={classNames( <div className='safety-action-modal__header__icon'>
'status', <Icon icon={RepeatIcon} id='retweet' />
`status-${statusVisibility}`,
'light',
)}
>
<div className='status__info'>
<a
href={status.get('url') as string}
className='status__relative-time'
target='_blank'
rel='noopener noreferrer'
>
<span className='status__visibility-icon'>
<VisibilityIcon visibility={statusVisibility} />
</span>
<RelativeTimestamp
timestamp={status.get('created_at') as string}
/>
</a>
<a
onClick={handleAccountClick}
href={account.url}
className='status__display-name'
>
<div className='status__avatar'>
<Avatar account={account} size={48} />
</div>
<DisplayName account={account} />
</a>
</div> </div>
{/* @ts-expect-error Expected until StatusContent is typed */} <div>
<StatusContent status={status} /> <h1>
{status.get('reblogged') ? (
<FormattedMessage
id='boost_modal.undo_reblog'
defaultMessage='Unboost post?'
/>
) : (
<FormattedMessage
id='boost_modal.reblog'
defaultMessage='Boost post?'
/>
)}
</h1>
<div>
{missingMediaDescription ? (
<FormattedMessage
id='boost_modal.missing_description'
defaultMessage='This toot contains some media without description'
/>
) : (
<FormattedMessage
id='boost_modal.combo'
defaultMessage='You can press {combo} to skip this next time'
values={{
combo: (
<span className='hotkey-combination'>
<kbd>Shift</kbd>+<Icon id='retweet' icon={RepeatIcon} />
</span>
),
}}
/>
)}
</div>
</div>
</div>
{(status.get('media_attachments') as Immutable.List<unknown>).size > <div className='safety-action-modal__status'>
0 && ( <EmbeddedStatus statusId={statusId} />
<AttachmentList compact media={status.get('media_attachments')} />
)}
</div> </div>
</div> </div>
<div className='boost-modal__action-bar'> <div className={classNames('safety-action-modal__bottom')}>
<div> <div className='safety-action-modal__actions'>
{missingMediaDescription ? ( {!status.get('reblogged') && (
<FormattedMessage <PrivacyDropdown
id='boost_modal.missing_description' noDirect
defaultMessage='This toot contains some media without description' value={privacy}
/> container={findContainer}
) : ( onChange={onPrivacyChange}
<FormattedMessage disabled={statusVisibility === 'private'}
id='boost_modal.combo'
defaultMessage='You can press {combo} to skip this next time'
values={{
combo: (
<span>
Shift + <Icon id='retweet' icon={RepeatIcon} />
</span>
),
}}
/> />
)} )}
</div>
{statusVisibility !== 'private' && !status.get('reblogged') && ( <div className='spacer' />
<PrivacyDropdown
noDirect <button onClick={handleCancel} className='link-button'>
value={privacy} <FormattedMessage
container={findContainer} id='confirmation_modal.cancel'
onChange={onPrivacyChange} defaultMessage='Cancel'
/>
</button>
<Button
onClick={handleReblog}
text={intl.formatMessage(
status.get('reblogged')
? messages.cancel_reblog
: messages.reblog,
)}
/> />
)} </div>
<Button
text={intl.formatMessage(buttonText)}
onClick={handleReblog}
// eslint-disable-next-line jsx-a11y/no-autofocus
autoFocus
/>
</div> </div>
</div> </div>
); );

View file

@ -10,13 +10,14 @@ import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?re
import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react';
import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react'; import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react';
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';
import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react';
import HomeIcon from '@/material-icons/400-24px/home.svg?react'; import HomeIcon from '@/material-icons/400-24px/home.svg?react';
import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react'; import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import MailActiveIcon from '@/material-icons/400-24px/mail-fill.svg?react'; import MailActiveIcon from '@/material-icons/400-24px/mail-fill.svg?react';
import MailIcon from '@/material-icons/400-24px/mail.svg?react'; import MailIcon from '@/material-icons/400-24px/mail.svg?react';
import ManufacturingIcon from '@/material-icons/400-24px/manufacturing.svg?react'; import AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react';
import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react';
@ -33,7 +34,9 @@ import { NavigationPortal } from 'flavours/glitch/components/navigation_portal';
import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context'; import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context';
import { timelinePreview, trendsEnabled } from 'flavours/glitch/initial_state'; import { timelinePreview, trendsEnabled } from 'flavours/glitch/initial_state';
import { transientSingleColumn } from 'flavours/glitch/is_mobile'; import { transientSingleColumn } from 'flavours/glitch/is_mobile';
import { canManageReports, canViewAdminDashboard } from 'flavours/glitch/permissions';
import { selectUnreadNotificationGroupsCount } from 'flavours/glitch/selectors/notifications'; import { selectUnreadNotificationGroupsCount } from 'flavours/glitch/selectors/notifications';
import { selectUseGroupedNotifications } from 'flavours/glitch/selectors/settings';
import { preferencesLink } from 'flavours/glitch/utils/backend_links'; import { preferencesLink } from 'flavours/glitch/utils/backend_links';
import ColumnLink from './column_link'; import ColumnLink from './column_link';
@ -51,6 +54,8 @@ const messages = defineMessages({
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' }, bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },
moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },
followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' }, followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },
about: { id: 'navigation_bar.about', defaultMessage: 'About' }, about: { id: 'navigation_bar.about', defaultMessage: 'About' },
search: { id: 'navigation_bar.search', defaultMessage: 'Search' }, search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
@ -61,7 +66,7 @@ const messages = defineMessages({
}); });
const NotificationsLink = () => { const NotificationsLink = () => {
const optedInGroupedNotifications = useSelector((state) => state.getIn(['settings', 'notifications', 'groupingBeta'], false)); const optedInGroupedNotifications = useSelector(selectUseGroupedNotifications);
const count = useSelector(state => state.getIn(['local_settings', 'notifications', 'tab_badge']) ? state.getIn(['notifications', 'unread']) : 0); const count = useSelector(state => state.getIn(['local_settings', 'notifications', 'tab_badge']) ? state.getIn(['notifications', 'unread']) : 0);
const intl = useIntl(); const intl = useIntl();
@ -116,7 +121,7 @@ class NavigationPanel extends Component {
render () { render () {
const { intl, onOpenSettings } = this.props; const { intl, onOpenSettings } = this.props;
const { signedIn, disabledAccountId } = this.props.identity; const { signedIn, disabledAccountId, permissions } = this.props.identity;
let banner = undefined; let banner = undefined;
@ -174,7 +179,10 @@ class NavigationPanel extends Component {
<hr /> <hr />
{!!preferencesLink && <ColumnLink transparent href={preferencesLink} icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />} {!!preferencesLink && <ColumnLink transparent href={preferencesLink} icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />}
<ColumnLink transparent onClick={onOpenSettings} icon='cogs' iconComponent={ManufacturingIcon} text={intl.formatMessage(messages.app_settings)} /> <ColumnLink transparent onClick={onOpenSettings} icon='cogs' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.app_settings)} />
{canManageReports(permissions) && <ColumnLink transparent href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />}
{canViewAdminDashboard(permissions) && <ColumnLink transparent href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />}
</> </>
)} )}

View file

@ -48,6 +48,7 @@
* @property {string} version * @property {string} version
* @property {number} visible_reactions * @property {number} visible_reactions
* @property {string} sso_redirect * @property {string} sso_redirect
* @property {boolean} force_grouped_notifications
* @property {string} status_page_url * @property {string} status_page_url
* @property {boolean} system_emoji_font * @property {boolean} system_emoji_font
* @property {string} default_content_type * @property {string} default_content_type
@ -151,6 +152,7 @@ export const languages = initialState?.languages;
export const criticalUpdatesPending = initialState?.critical_updates_pending; export const criticalUpdatesPending = initialState?.critical_updates_pending;
export const statusPageUrl = getMeta('status_page_url'); export const statusPageUrl = getMeta('status_page_url');
export const sso_redirect = getMeta('sso_redirect'); export const sso_redirect = getMeta('sso_redirect');
export const forceGroupedNotifications = getMeta('force_grouped_notifications');
// Glitch-soc-specific settings // Glitch-soc-specific settings
export const maxFeedHashtags = (initialState && initialState.max_feed_hashtags) || 4; export const maxFeedHashtags = (initialState && initialState.max_feed_hashtags) || 4;

View file

@ -1,4 +1,23 @@
export const PERMISSION_INVITE_USERS = 0x0000000000010000; export const PERMISSION_INVITE_USERS = 0x0000000000010000;
export const PERMISSION_MANAGE_USERS = 0x0000000000000400; export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020; export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020;
export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010; export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010;
export const PERMISSION_VIEW_DASHBOARD = 0x0000000000000008;
// These helpers don't quite align with the names/categories in UserRole,
// but are likely "good enough" for the use cases at present.
//
// See: https://docs.joinmastodon.org/entities/Role/#permission-flags
export function canViewAdminDashboard(permissions: number) {
return (
(permissions & PERMISSION_VIEW_DASHBOARD) === PERMISSION_VIEW_DASHBOARD
);
}
export function canManageReports(permissions: number) {
return (
(permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS
);
}

View file

@ -1,3 +1,4 @@
import { forceGroupedNotifications } from 'flavours/glitch/initial_state';
import type { RootState } from 'flavours/glitch/store'; import type { RootState } from 'flavours/glitch/store';
/* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
@ -25,6 +26,10 @@ export const selectSettingsNotificationsQuickFilterAdvanced = (
) => ) =>
state.settings.getIn(['notifications', 'quickFilter', 'advanced']) as boolean; state.settings.getIn(['notifications', 'quickFilter', 'advanced']) as boolean;
export const selectUseGroupedNotifications = (state: RootState) =>
forceGroupedNotifications ||
(state.settings.getIn(['notifications', 'groupingBeta']) as boolean);
export const selectSettingsNotificationsShowUnread = (state: RootState) => export const selectSettingsNotificationsShowUnread = (state: RootState) =>
state.settings.getIn(['notifications', 'showUnread']) as boolean; state.settings.getIn(['notifications', 'showUnread']) as boolean;

View file

@ -48,8 +48,9 @@ export const loadingBarMiddleware = (
let isRejected = false; let isRejected = false;
if ( if (
isAsyncThunkAction(action) isAsyncThunkAction(action) &&
// TODO: once we get the first use-case for it, add a check for skipLoading 'useLoadingBar' in action.meta &&
action.meta.useLoadingBar
) { ) {
if (isThunkActionPending(action)) isPending = true; if (isThunkActionPending(action)) isPending = true;
else if (isThunkActionFulfilled(action)) isFulfilled = true; else if (isThunkActionFulfilled(action)) isFulfilled = true;

View file

@ -15,7 +15,7 @@ export interface AsyncThunkRejectValue {
} }
interface AppMeta { interface AppMeta {
skipLoading?: boolean; useLoadingBar?: boolean;
} }
export const createAppAsyncThunk = createAsyncThunk.withTypes<{ export const createAppAsyncThunk = createAsyncThunk.withTypes<{
@ -34,7 +34,7 @@ interface AppThunkConfig {
type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>; type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>;
interface AppThunkOptions { interface AppThunkOptions {
skipLoading?: boolean; useLoadingBar?: boolean;
} }
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>(); const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
@ -54,15 +54,20 @@ export function createThunk<Arg = void, Returned = void>(
const result = await creator(arg, { dispatch, getState }); const result = await creator(arg, { dispatch, getState });
return fulfillWithValue(result, { return fulfillWithValue(result, {
skipLoading: options.skipLoading, useLoadingBar: options.useLoadingBar,
}); });
} catch (error) { } catch (error) {
return rejectWithValue({ error }, { skipLoading: true }); return rejectWithValue(
{ error },
{
useLoadingBar: options.useLoadingBar,
},
);
} }
}, },
{ {
getPendingMeta() { getPendingMeta() {
if (options.skipLoading) return { skipLoading: true }; if (options.useLoadingBar) return { useLoadingBar: true };
return {}; return {};
}, },
}, },
@ -148,7 +153,7 @@ export function createDataLoadingThunk<
* You can also omit this parameter and pass `thunkOptions` directly * You can also omit this parameter and pass `thunkOptions` directly
* @param maybeThunkOptions * @param maybeThunkOptions
* Additional Mastodon specific options for the thunk. Currently supports: * Additional Mastodon specific options for the thunk. Currently supports:
* - `skipLoading` to avoid showing the loading bar when the request is in progress * - `useLoadingBar` to display a loading bar while this action is pending. Defaults to true.
* @returns The created thunk * @returns The created thunk
*/ */
export function createDataLoadingThunk< export function createDataLoadingThunk<
@ -198,6 +203,6 @@ export function createDataLoadingThunk<
return undefined as Returned; return undefined as Returned;
else return result; else return result;
}, },
thunkOptions, { useLoadingBar: thunkOptions?.useLoadingBar ?? true },
); );
} }

View file

@ -6607,6 +6607,48 @@ a.status-card {
} }
} }
&__status {
border: 1px solid var(--modal-border-color);
border-radius: 8px;
padding: 8px;
cursor: pointer;
&__account {
display: flex;
align-items: center;
gap: 4px;
margin-bottom: 8px;
color: $dark-text-color;
bdi {
color: inherit;
}
}
&__content {
display: -webkit-box;
font-size: 15px;
line-height: 22px;
color: $dark-text-color;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
max-height: 4 * 22px;
overflow: hidden;
p,
a {
color: inherit;
}
}
.reply-indicator__attachments {
margin-top: 0;
font-size: 15px;
line-height: 22px;
color: $dark-text-color;
}
}
&__bullet-points { &__bullet-points {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -6684,6 +6726,12 @@ a.status-card {
gap: 8px; gap: 8px;
justify-content: flex-end; justify-content: flex-end;
&__hint {
font-size: 14px;
line-height: 20px;
color: $dark-text-color;
}
.link-button { .link-button {
padding: 10px 12px; padding: 10px 12px;
font-weight: 600; font-weight: 600;
@ -6691,6 +6739,18 @@ a.status-card {
} }
} }
.hotkey-combination {
display: inline-flex;
align-items: center;
gap: 4px;
kbd {
padding: 3px 5px;
border: 1px solid var(--background-border-color);
border-radius: 4px;
}
}
.doodle-modal, .doodle-modal,
.boost-modal, .boost-modal,
.report-modal, .report-modal,

View file

@ -6,5 +6,4 @@ export const submitAccountNote = createDataLoadingThunk(
({ accountId, note }: { accountId: string; note: string }) => ({ accountId, note }: { accountId: string; note: string }) =>
apiSubmitAccountNote(accountId, note), apiSubmitAccountNote(accountId, note),
(relationship) => ({ relationship }), (relationship) => ({ relationship }),
{ skipLoading: true },
); );

View file

@ -2,6 +2,7 @@ import { debounce } from 'lodash';
import type { MarkerJSON } from 'mastodon/api_types/markers'; import type { MarkerJSON } from 'mastodon/api_types/markers';
import { getAccessToken } from 'mastodon/initial_state'; import { getAccessToken } from 'mastodon/initial_state';
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
import type { AppDispatch, RootState } from 'mastodon/store'; import type { AppDispatch, RootState } from 'mastodon/store';
import { createAppAsyncThunk } from 'mastodon/store/typed_functions'; import { createAppAsyncThunk } from 'mastodon/store/typed_functions';
@ -75,13 +76,8 @@ interface MarkerParam {
} }
function getLastNotificationId(state: RootState): string | undefined { function getLastNotificationId(state: RootState): string | undefined {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
const enableBeta = state.settings.getIn(
['notifications', 'groupingBeta'],
false,
) as boolean;
// eslint-disable-next-line @typescript-eslint/no-unsafe-return // eslint-disable-next-line @typescript-eslint/no-unsafe-return
return enableBeta return selectUseGroupedNotifications(state)
? state.notificationGroups.lastReadId ? state.notificationGroups.lastReadId
: // @ts-expect-error state.notifications is not yet typed : // @ts-expect-error state.notifications is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-call

View file

@ -1,3 +1,4 @@
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
import { createAppAsyncThunk } from 'mastodon/store'; import { createAppAsyncThunk } from 'mastodon/store';
import { fetchNotifications } from './notification_groups'; import { fetchNotifications } from './notification_groups';
@ -6,13 +7,8 @@ import { expandNotifications } from './notifications';
export const initializeNotifications = createAppAsyncThunk( export const initializeNotifications = createAppAsyncThunk(
'notifications/initialize', 'notifications/initialize',
(_, { dispatch, getState }) => { (_, { dispatch, getState }) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access if (selectUseGroupedNotifications(getState()))
const enableBeta = getState().settings.getIn( void dispatch(fetchNotifications());
['notifications', 'groupingBeta'],
false,
) as boolean;
if (enableBeta) void dispatch(fetchNotifications());
else void dispatch(expandNotifications({})); else void dispatch(expandNotifications({}));
}, },
); );

View file

@ -1,5 +1,7 @@
// @ts-check // @ts-check
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
import { getLocale } from '../locales'; import { getLocale } from '../locales';
import { connectStream } from '../stream'; import { connectStream } from '../stream';
@ -103,7 +105,7 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
const notificationJSON = JSON.parse(data.payload); const notificationJSON = JSON.parse(data.payload);
dispatch(updateNotifications(notificationJSON, messages, locale)); dispatch(updateNotifications(notificationJSON, messages, locale));
// TODO: remove this once the groups feature replaces the previous one // TODO: remove this once the groups feature replaces the previous one
if(getState().settings.getIn(['notifications', 'groupingBeta'], false)) { if(selectUseGroupedNotifications(getState())) {
dispatch(processNewNotificationForGroups(notificationJSON)); dispatch(processNewNotificationForGroups(notificationJSON));
} }
break; break;
@ -112,7 +114,7 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
const state = getState(); const state = getState();
if (state.notifications.top || !state.notifications.mounted) if (state.notifications.top || !state.notifications.mounted)
dispatch(expandNotifications({ forceLoad: true, maxId: undefined })); dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
if(state.settings.getIn(['notifications', 'groupingBeta'], false)) { if (selectUseGroupedNotifications(state)) {
dispatch(refreshStaleNotificationGroups()); dispatch(refreshStaleNotificationGroups());
} }
break; break;
@ -145,7 +147,7 @@ async function refreshHomeTimelineAndNotification(dispatch, getState) {
await dispatch(expandHomeTimeline({ maxId: undefined })); await dispatch(expandHomeTimeline({ maxId: undefined }));
// TODO: remove this once the groups feature replaces the previous one // TODO: remove this once the groups feature replaces the previous one
if(getState().settings.getIn(['notifications', 'groupingBeta'], false)) { if(selectUseGroupedNotifications(getState())) {
// TODO: polling for merged notifications // TODO: polling for merged notifications
try { try {
await dispatch(pollRecentGroupNotifications()); await dispatch(pollRecentGroupNotifications());

View file

@ -12,9 +12,11 @@ import { connect } from 'react-redux';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';
import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';
import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; import MenuIcon from '@/material-icons/400-24px/menu.svg?react';
import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react';
import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import PublicIcon from '@/material-icons/400-24px/public.svg?react';
@ -25,6 +27,7 @@ import Column from 'mastodon/components/column';
import ColumnHeader from 'mastodon/components/column_header'; import ColumnHeader from 'mastodon/components/column_header';
import LinkFooter from 'mastodon/features/ui/components/link_footer'; import LinkFooter from 'mastodon/features/ui/components/link_footer';
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions';
import { me, showTrends } from '../../initial_state'; import { me, showTrends } from '../../initial_state';
import { NavigationBar } from '../compose/components/navigation_bar'; import { NavigationBar } from '../compose/components/navigation_bar';
@ -43,6 +46,8 @@ const messages = defineMessages({
direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' }, direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' }, bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },
moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' }, favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' },
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' }, blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
@ -99,7 +104,7 @@ class GettingStarted extends ImmutablePureComponent {
render () { render () {
const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props; const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props;
const { signedIn } = this.props.identity; const { signedIn, permissions } = this.props.identity;
const navItems = []; const navItems = [];
@ -136,6 +141,13 @@ class GettingStarted extends ImmutablePureComponent {
<ColumnSubheading key='header-settings' text={intl.formatMessage(messages.settings_subheading)} />, <ColumnSubheading key='header-settings' text={intl.formatMessage(messages.settings_subheading)} />,
<ColumnLink key='preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />, <ColumnLink key='preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />,
); );
if (canManageReports(permissions)) {
navItems.push(<ColumnLink key='moderation' href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />);
}
if (canViewAdminDashboard(permissions)) {
navItems.push(<ColumnLink key='administration' href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />);
}
} }
return ( return (

View file

@ -6,6 +6,7 @@ import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
import { forceGroupedNotifications } from 'mastodon/initial_state';
import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions';
import ClearColumnButton from './clear_column_button'; import ClearColumnButton from './clear_column_button';
@ -67,15 +68,17 @@ class ColumnSettings extends PureComponent {
<PolicyControls /> <PolicyControls />
<section role='group' aria-labelledby='notifications-beta'> {!forceGroupedNotifications && (
<h3 id='notifications-beta'> <section role='group' aria-labelledby='notifications-beta'>
<FormattedMessage id='notifications.column_settings.beta.category' defaultMessage='Experimental features' /> <h3 id='notifications-beta'>
</h3> <FormattedMessage id='notifications.column_settings.beta.category' defaultMessage='Experimental features' />
</h3>
<div className='column-settings__row'> <div className='column-settings__row'>
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['groupingBeta']} onChange={onChange} label={groupingShowStr} /> <SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['groupingBeta']} onChange={onChange} label={groupingShowStr} />
</div> </div>
</section> </section>
)}
<section role='group' aria-labelledby='notifications-unread-markers'> <section role='group' aria-labelledby='notifications-unread-markers'>
<h3 id='notifications-unread-markers'> <h3 id='notifications-unread-markers'>

View file

@ -1,9 +1,10 @@
import Notifications from 'mastodon/features/notifications'; import Notifications from 'mastodon/features/notifications';
import Notifications_v2 from 'mastodon/features/notifications_v2'; import Notifications_v2 from 'mastodon/features/notifications_v2';
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
import { useAppSelector } from 'mastodon/store'; import { useAppSelector } from 'mastodon/store';
export const NotificationsWrapper = (props) => { export const NotificationsWrapper = (props) => {
const optedInGroupedNotifications = useAppSelector((state) => state.getIn(['settings', 'notifications', 'groupingBeta'], false)); const optedInGroupedNotifications = useAppSelector(selectUseGroupedNotifications);
return ( return (
optedInGroupedNotifications ? <Notifications_v2 {...props} /> : <Notifications {...props} /> optedInGroupedNotifications ? <Notifications_v2 {...props} /> : <Notifications {...props} />

View file

@ -1,28 +1,17 @@
import type { MouseEventHandler } from 'react';
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { useHistory } from 'react-router';
import type Immutable from 'immutable';
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
import AttachmentList from 'mastodon/components/attachment_list'; import { Button } from 'mastodon/components/button';
import { Icon } from 'mastodon/components/icon'; import { Icon } from 'mastodon/components/icon';
import { VisibilityIcon } from 'mastodon/components/visibility_icon';
import PrivacyDropdown from 'mastodon/features/compose/components/privacy_dropdown'; import PrivacyDropdown from 'mastodon/features/compose/components/privacy_dropdown';
import type { Account } from 'mastodon/models/account'; import { EmbeddedStatus } from 'mastodon/features/notifications_v2/components/embedded_status';
import type { Status, StatusVisibility } from 'mastodon/models/status'; import type { Status, StatusVisibility } from 'mastodon/models/status';
import { useAppSelector } from 'mastodon/store'; import { useAppSelector } from 'mastodon/store';
import { Avatar } from '../../../components/avatar';
import { Button } from '../../../components/button';
import { DisplayName } from '../../../components/display_name';
import { RelativeTimestamp } from '../../../components/relative_timestamp';
import StatusContent from '../../../components/status_content';
const messages = defineMessages({ const messages = defineMessages({
cancel_reblog: { cancel_reblog: {
id: 'status.cancel_reblog_private', id: 'status.cancel_reblog_private',
@ -37,18 +26,17 @@ export const BoostModal: React.FC<{
onReblog: (status: Status, privacy: StatusVisibility) => void; onReblog: (status: Status, privacy: StatusVisibility) => void;
}> = ({ status, onReblog, onClose }) => { }> = ({ status, onReblog, onClose }) => {
const intl = useIntl(); const intl = useIntl();
const history = useHistory();
const default_privacy = useAppSelector( const defaultPrivacy = useAppSelector(
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('default_privacy') as StatusVisibility, (state) => state.compose.get('default_privacy') as StatusVisibility,
); );
const account = status.get('account') as Account; const statusId = status.get('id') as string;
const statusVisibility = status.get('visibility') as StatusVisibility; const statusVisibility = status.get('visibility') as StatusVisibility;
const [privacy, setPrivacy] = useState<StatusVisibility>( const [privacy, setPrivacy] = useState<StatusVisibility>(
statusVisibility === 'private' ? 'private' : default_privacy, statusVisibility === 'private' ? 'private' : defaultPrivacy,
); );
const onPrivacyChange = useCallback((value: StatusVisibility) => { const onPrivacyChange = useCallback((value: StatusVisibility) => {
@ -60,20 +48,9 @@ export const BoostModal: React.FC<{
onClose(); onClose();
}, [onClose, onReblog, status, privacy]); }, [onClose, onReblog, status, privacy]);
const handleAccountClick = useCallback<MouseEventHandler>( const handleCancel = useCallback(() => {
(e) => { onClose();
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { }, [onClose]);
e.preventDefault();
onClose();
history.push(`/@${account.acct}`);
}
},
[history, onClose, account],
);
const buttonText = status.get('reblogged')
? messages.cancel_reblog
: messages.reblog;
const findContainer = useCallback( const findContainer = useCallback(
() => document.getElementsByClassName('modal-root__container')[0], () => document.getElementsByClassName('modal-root__container')[0],
@ -81,81 +58,78 @@ export const BoostModal: React.FC<{
); );
return ( return (
<div className='modal-root__modal boost-modal'> <div className='modal-root__modal safety-action-modal'>
<div className='boost-modal__container'> <div className='safety-action-modal__top'>
<div <div className='safety-action-modal__header'>
className={classNames( <div className='safety-action-modal__header__icon'>
'status', <Icon icon={RepeatIcon} id='retweet' />
`status-${statusVisibility}`,
'light',
)}
>
<div className='status__info'>
<a
href={`/@${account.acct}/${status.get('id') as string}`}
className='status__relative-time'
target='_blank'
rel='noopener noreferrer'
>
<span className='status__visibility-icon'>
<VisibilityIcon visibility={statusVisibility} />
</span>
<RelativeTimestamp
timestamp={status.get('created_at') as string}
/>
</a>
<a
onClick={handleAccountClick}
href={`/@${account.acct}`}
className='status__display-name'
>
<div className='status__avatar'>
<Avatar account={account} size={48} />
</div>
<DisplayName account={account} />
</a>
</div> </div>
{/* @ts-expect-error Expected until StatusContent is typed */} <div>
<StatusContent status={status} /> <h1>
{status.get('reblogged') ? (
<FormattedMessage
id='boost_modal.undo_reblog'
defaultMessage='Unboost post?'
/>
) : (
<FormattedMessage
id='boost_modal.reblog'
defaultMessage='Boost post?'
/>
)}
</h1>
<div>
<FormattedMessage
id='boost_modal.combo'
defaultMessage='You can press {combo} to skip this next time'
values={{
combo: (
<span className='hotkey-combination'>
<kbd>Shift</kbd>+<Icon id='retweet' icon={RepeatIcon} />
</span>
),
}}
/>
</div>
</div>
</div>
{(status.get('media_attachments') as Immutable.List<unknown>).size > <div className='safety-action-modal__status'>
0 && ( <EmbeddedStatus statusId={statusId} />
<AttachmentList compact media={status.get('media_attachments')} />
)}
</div> </div>
</div> </div>
<div className='boost-modal__action-bar'> <div className={classNames('safety-action-modal__bottom')}>
<div> <div className='safety-action-modal__actions'>
<FormattedMessage {!status.get('reblogged') && (
id='boost_modal.combo' <PrivacyDropdown
defaultMessage='You can press {combo} to skip this next time' noDirect
values={{ value={privacy}
combo: ( container={findContainer}
<span> onChange={onPrivacyChange}
Shift + <Icon id='retweet' icon={RepeatIcon} /> disabled={statusVisibility === 'private'}
</span> />
), )}
}}
<div className='spacer' />
<button onClick={handleCancel} className='link-button'>
<FormattedMessage
id='confirmation_modal.cancel'
defaultMessage='Cancel'
/>
</button>
<Button
onClick={handleReblog}
text={intl.formatMessage(
status.get('reblogged')
? messages.cancel_reblog
: messages.reblog,
)}
/> />
</div> </div>
{statusVisibility !== 'private' && !status.get('reblogged') && (
<PrivacyDropdown
noDirect
value={privacy}
container={findContainer}
onChange={onPrivacyChange}
/>
)}
<Button
text={intl.formatMessage(buttonText)}
onClick={handleReblog}
// eslint-disable-next-line jsx-a11y/no-autofocus
autoFocus
/>
</div> </div>
</div> </div>
); );

View file

@ -7,16 +7,17 @@ import { Link } from 'react-router-dom';
import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react';
import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react'; import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react';
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';
import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react';
import HomeIcon from '@/material-icons/400-24px/home.svg?react'; import HomeIcon from '@/material-icons/400-24px/home.svg?react';
import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react'; import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react';
import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react';
@ -34,7 +35,9 @@ import { NavigationPortal } from 'mastodon/components/navigation_portal';
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
import { timelinePreview, trendsEnabled } from 'mastodon/initial_state'; import { timelinePreview, trendsEnabled } from 'mastodon/initial_state';
import { transientSingleColumn } from 'mastodon/is_mobile'; import { transientSingleColumn } from 'mastodon/is_mobile';
import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions';
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications'; import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
import ColumnLink from './column_link'; import ColumnLink from './column_link';
import DisabledAccountBanner from './disabled_account_banner'; import DisabledAccountBanner from './disabled_account_banner';
@ -51,6 +54,8 @@ const messages = defineMessages({
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' }, bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },
moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },
followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' }, followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },
about: { id: 'navigation_bar.about', defaultMessage: 'About' }, about: { id: 'navigation_bar.about', defaultMessage: 'About' },
search: { id: 'navigation_bar.search', defaultMessage: 'Search' }, search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
@ -60,7 +65,7 @@ const messages = defineMessages({
}); });
const NotificationsLink = () => { const NotificationsLink = () => {
const optedInGroupedNotifications = useSelector((state) => state.getIn(['settings', 'notifications', 'groupingBeta'], false)); const optedInGroupedNotifications = useSelector(selectUseGroupedNotifications);
const count = useSelector(state => state.getIn(['notifications', 'unread'])); const count = useSelector(state => state.getIn(['notifications', 'unread']));
const intl = useIntl(); const intl = useIntl();
@ -114,7 +119,7 @@ class NavigationPanel extends Component {
render () { render () {
const { intl } = this.props; const { intl } = this.props;
const { signedIn, disabledAccountId } = this.props.identity; const { signedIn, disabledAccountId, permissions } = this.props.identity;
let banner = undefined; let banner = undefined;
@ -176,6 +181,9 @@ class NavigationPanel extends Component {
<hr /> <hr />
<ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} /> <ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />
{canManageReports(permissions) && <ColumnLink transparent href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />}
{canViewAdminDashboard(permissions) && <ColumnLink transparent href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />}
</> </>
)} )}

View file

@ -43,6 +43,7 @@
* @property {boolean=} use_pending_items * @property {boolean=} use_pending_items
* @property {string} version * @property {string} version
* @property {string} sso_redirect * @property {string} sso_redirect
* @property {boolean} force_grouped_notifications
*/ */
/** /**
@ -128,6 +129,7 @@ export const criticalUpdatesPending = initialState?.critical_updates_pending;
// @ts-expect-error // @ts-expect-error
export const statusPageUrl = getMeta('status_page_url'); export const statusPageUrl = getMeta('status_page_url');
export const sso_redirect = getMeta('sso_redirect'); export const sso_redirect = getMeta('sso_redirect');
export const forceGroupedNotifications = getMeta('force_grouped_notifications');
// Glitch-soc-specific settings // Glitch-soc-specific settings
export const pollLimits = (initialState && initialState.poll_limits); export const pollLimits = (initialState && initialState.poll_limits);

View file

@ -190,6 +190,8 @@
"confirmations.unfollow.confirm": "إلغاء المتابعة", "confirmations.unfollow.confirm": "إلغاء المتابعة",
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟", "confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
"confirmations.unfollow.title": "إلغاء متابعة المستخدم؟", "confirmations.unfollow.title": "إلغاء متابعة المستخدم؟",
"content_warning.hide": "إخفاء المنشور",
"content_warning.show": "إظهار على أي حال",
"conversation.delete": "احذف المحادثة", "conversation.delete": "احذف المحادثة",
"conversation.mark_as_read": "اعتبرها كمقروءة", "conversation.mark_as_read": "اعتبرها كمقروءة",
"conversation.open": "اعرض المحادثة", "conversation.open": "اعرض المحادثة",
@ -297,6 +299,7 @@
"filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة", "filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة",
"filter_modal.select_filter.title": "تصفية هذا المنشور", "filter_modal.select_filter.title": "تصفية هذا المنشور",
"filter_modal.title.status": "تصفية منشور", "filter_modal.title.status": "تصفية منشور",
"filter_warning.matches_filter": "يطابق عامل التصفية \"{title}\"",
"filtered_notifications_banner.title": "الإشعارات المصفاة", "filtered_notifications_banner.title": "الإشعارات المصفاة",
"firehose.all": "الكل", "firehose.all": "الكل",
"firehose.local": "هذا الخادم", "firehose.local": "هذا الخادم",
@ -500,11 +503,14 @@
"notification.update": "عدّلَ {name} منشورًا", "notification.update": "عدّلَ {name} منشورًا",
"notification_requests.accept": "موافقة", "notification_requests.accept": "موافقة",
"notification_requests.dismiss": "تخطي", "notification_requests.dismiss": "تخطي",
"notification_requests.edit_selection": "تعديل",
"notification_requests.exit_selection": "تمّ",
"notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.", "notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.",
"notification_requests.notifications_from": "إشعارات من {name}", "notification_requests.notifications_from": "إشعارات من {name}",
"notification_requests.title": "الإشعارات المصفاة", "notification_requests.title": "الإشعارات المصفاة",
"notifications.clear": "مسح الإشعارات", "notifications.clear": "مسح الإشعارات",
"notifications.clear_confirmation": "متأكد من أنك تود مسح جميع الإشعارات الخاصة بك و المتلقاة إلى حد الآن ؟", "notifications.clear_confirmation": "متأكد من أنك تود مسح جميع الإشعارات الخاصة بك و المتلقاة إلى حد الآن ؟",
"notifications.clear_title": "أترغب في مسح الإشعارات؟",
"notifications.column_settings.admin.report": "التبليغات الجديدة:", "notifications.column_settings.admin.report": "التبليغات الجديدة:",
"notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:",
"notifications.column_settings.alert": "إشعارات سطح المكتب", "notifications.column_settings.alert": "إشعارات سطح المكتب",
@ -713,6 +719,7 @@
"server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)", "server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)",
"server_banner.active_users": "مستخدم نشط", "server_banner.active_users": "مستخدم نشط",
"server_banner.administered_by": "يُديره:", "server_banner.administered_by": "يُديره:",
"server_banner.is_one_of_many": "{domain} هو واحد من بين العديد من خوادم ماستدون المستقلة التي يمكنك استخدامها للمشاركة في الفديفرس.",
"server_banner.server_stats": "إحصائيات الخادم:", "server_banner.server_stats": "إحصائيات الخادم:",
"sign_in_banner.create_account": "أنشئ حسابًا", "sign_in_banner.create_account": "أنشئ حسابًا",
"sign_in_banner.sign_in": "تسجيل الدخول", "sign_in_banner.sign_in": "تسجيل الدخول",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Адпісацца", "confirmations.unfollow.confirm": "Адпісацца",
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?", "confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?", "confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
"content_warning.hide": "Схаваць допіс",
"content_warning.show": "Усё адно паказаць",
"conversation.delete": "Выдаліць размову", "conversation.delete": "Выдаліць размову",
"conversation.mark_as_read": "Адзначыць прачытаным", "conversation.mark_as_read": "Адзначыць прачытаным",
"conversation.open": "Прагледзець размову", "conversation.open": "Прагледзець размову",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую", "filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую",
"filter_modal.select_filter.title": "Фільтраваць гэты допіс", "filter_modal.select_filter.title": "Фільтраваць гэты допіс",
"filter_modal.title.status": "Фільтраваць допіс", "filter_modal.title.status": "Фільтраваць допіс",
"filter_warning.matches_filter": "Адпавядае фільтру \"{title}\"",
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце", "filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце",
"filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні", "filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні",
"firehose.all": "Усе", "firehose.all": "Усе",
@ -355,6 +358,7 @@
"home.pending_critical_update.link": "Прагледзець абнаўленні", "home.pending_critical_update.link": "Прагледзець абнаўленні",
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!", "home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
"home.show_announcements": "Паказаць аб'явы", "home.show_announcements": "Паказаць аб'явы",
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
"interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.", "interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.",
"interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.", "interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.",
"interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.", "interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.",
@ -504,7 +508,11 @@
"notification.status": "Новы допіс ад {name}", "notification.status": "Новы допіс ад {name}",
"notification.update": "Допіс {name} адрэдагаваны", "notification.update": "Допіс {name} адрэдагаваны",
"notification_requests.accept": "Прыняць", "notification_requests.accept": "Прыняць",
"notification_requests.confirm_accept_multiple.title": "Прыняць запыты на апавяшчэнні?",
"notification_requests.confirm_dismiss_multiple.title": "Адхіліць запыты на апавяшчэнні?",
"notification_requests.dismiss": "Адхіліць", "notification_requests.dismiss": "Адхіліць",
"notification_requests.edit_selection": "Рэдагаваць",
"notification_requests.exit_selection": "Гатова",
"notification_requests.maximize": "Разгарнуць", "notification_requests.maximize": "Разгарнуць",
"notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў", "notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў",
"notification_requests.notifications_from": "Апавяшчэнні ад {name}", "notification_requests.notifications_from": "Апавяшчэнні ад {name}",

View file

@ -192,6 +192,7 @@
"confirmations.unfollow.confirm": "Без следване", "confirmations.unfollow.confirm": "Без следване",
"confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?", "confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?",
"confirmations.unfollow.title": "Спирате ли да следвате потребителя?", "confirmations.unfollow.title": "Спирате ли да следвате потребителя?",
"content_warning.hide": "Скриване на публ.",
"conversation.delete": "Изтриване на разговора", "conversation.delete": "Изтриване на разговора",
"conversation.mark_as_read": "Маркиране като прочетено", "conversation.mark_as_read": "Маркиране като прочетено",
"conversation.open": "Преглед на разговора", "conversation.open": "Преглед на разговора",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Bloquem l'usuari?", "block_modal.title": "Bloquem l'usuari?",
"block_modal.you_wont_see_mentions": "No veureu publicacions que l'esmentin.", "block_modal.you_wont_see_mentions": "No veureu publicacions que l'esmentin.",
"boost_modal.combo": "Pots prémer {combo} per a evitar-ho el pròxim cop", "boost_modal.combo": "Pots prémer {combo} per a evitar-ho el pròxim cop",
"boost_modal.reblog": "Voleu impulsar la publicació?",
"boost_modal.undo_reblog": "Voleu retirar l'impuls a la publicació?",
"bundle_column_error.copy_stacktrace": "Copia l'informe d'error", "bundle_column_error.copy_stacktrace": "Copia l'informe d'error",
"bundle_column_error.error.body": "No s'ha pogut renderitzar la pàgina sol·licitada. Podria ser per un error en el nostre codi o per un problema de compatibilitat del navegador.", "bundle_column_error.error.body": "No s'ha pogut renderitzar la pàgina sol·licitada. Podria ser per un error en el nostre codi o per un problema de compatibilitat del navegador.",
"bundle_column_error.error.title": "Oh, no!", "bundle_column_error.error.title": "Oh, no!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "No veureu publicacions que els esmentin.", "mute_modal.you_wont_see_mentions": "No veureu publicacions que els esmentin.",
"mute_modal.you_wont_see_posts": "Encara poden veure les vostres publicacions, però no veureu les seves.", "mute_modal.you_wont_see_posts": "Encara poden veure les vostres publicacions, però no veureu les seves.",
"navigation_bar.about": "Quant a", "navigation_bar.about": "Quant a",
"navigation_bar.administration": "Administració",
"navigation_bar.advanced_interface": "Obre en la interfície web avançada", "navigation_bar.advanced_interface": "Obre en la interfície web avançada",
"navigation_bar.blocks": "Usuaris blocats", "navigation_bar.blocks": "Usuaris blocats",
"navigation_bar.bookmarks": "Marcadors", "navigation_bar.bookmarks": "Marcadors",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Seguint i seguidors", "navigation_bar.follows_and_followers": "Seguint i seguidors",
"navigation_bar.lists": "Llistes", "navigation_bar.lists": "Llistes",
"navigation_bar.logout": "Tanca la sessió", "navigation_bar.logout": "Tanca la sessió",
"navigation_bar.moderation": "Moderació",
"navigation_bar.mutes": "Usuaris silenciats", "navigation_bar.mutes": "Usuaris silenciats",
"navigation_bar.opened_in_classic_interface": "Els tuts, comptes i altres pàgines especifiques s'obren per defecte en la interfície web clàssica.", "navigation_bar.opened_in_classic_interface": "Els tuts, comptes i altres pàgines especifiques s'obren per defecte en la interfície web clàssica.",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personal",

View file

@ -1,5 +1,5 @@
{ {
"about.blocks": "Gweinyddion sy'n cael eu cymedroli", "about.blocks": "Gweinyddion gyda chymedrolwyr",
"about.contact": "Cysylltwch â:", "about.contact": "Cysylltwch â:",
"about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.", "about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael", "about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael",
@ -103,7 +103,7 @@
"bundle_column_error.network.body": "Bu gwall wrth geisio llwytho'r dudalen hon. Gall hyn fod oherwydd anhawster dros-dro gyda'ch cysylltiad gwe neu'r gweinydd hwn.", "bundle_column_error.network.body": "Bu gwall wrth geisio llwytho'r dudalen hon. Gall hyn fod oherwydd anhawster dros-dro gyda'ch cysylltiad gwe neu'r gweinydd hwn.",
"bundle_column_error.network.title": "Gwall rhwydwaith", "bundle_column_error.network.title": "Gwall rhwydwaith",
"bundle_column_error.retry": "Ceisiwch eto", "bundle_column_error.retry": "Ceisiwch eto",
"bundle_column_error.return": "Mynd nôl adref", "bundle_column_error.return": "Mynd i'r ffrwd gartref",
"bundle_column_error.routing.body": "Nid oedd modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?", "bundle_column_error.routing.body": "Nid oedd modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?",
"bundle_column_error.routing.title": "404", "bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Cau", "bundle_modal_error.close": "Cau",
@ -124,7 +124,7 @@
"column.favourites": "Ffefrynnau", "column.favourites": "Ffefrynnau",
"column.firehose": "Ffrydiau byw", "column.firehose": "Ffrydiau byw",
"column.follow_requests": "Ceisiadau dilyn", "column.follow_requests": "Ceisiadau dilyn",
"column.home": "Hafan", "column.home": "Cartref",
"column.lists": "Rhestrau", "column.lists": "Rhestrau",
"column.mutes": "Defnyddwyr wedi'u tewi", "column.mutes": "Defnyddwyr wedi'u tewi",
"column.notifications": "Hysbysiadau", "column.notifications": "Hysbysiadau",
@ -184,7 +184,7 @@
"confirmations.logout.title": "Allgofnodi?", "confirmations.logout.title": "Allgofnodi?",
"confirmations.mute.confirm": "Tewi", "confirmations.mute.confirm": "Tewi",
"confirmations.redraft.confirm": "Dileu ac ailddrafftio", "confirmations.redraft.confirm": "Dileu ac ailddrafftio",
"confirmations.redraft.message": "Ydych chi'n siŵr eich bod am ddileu'r postiad hwn a'i ailddrafftio? Bydd ffefrynnau a hybiau'n cael eu colli, a bydd atebion i'r post gwreiddiol yn mynd yn amddifad.", "confirmations.redraft.message": "Ydych chi wir eisiau'r dileu'r postiad hwn a'i ailddrafftio? Bydd ffefrynnau a hybiau'n cael eu colli, a bydd atebion i'r post gwreiddiol yn mynd yn amddifad.",
"confirmations.redraft.title": "Dileu & ailddraftio post?", "confirmations.redraft.title": "Dileu & ailddraftio post?",
"confirmations.reply.confirm": "Ateb", "confirmations.reply.confirm": "Ateb",
"confirmations.reply.message": "Bydd ateb nawr yn cymryd lle y neges yr ydych yn cyfansoddi ar hyn o bryd. Ydych chi'n siŵr eich bod am barhau?", "confirmations.reply.message": "Bydd ateb nawr yn cymryd lle y neges yr ydych yn cyfansoddi ar hyn o bryd. Ydych chi'n siŵr eich bod am barhau?",
@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Dad-ddilyn", "confirmations.unfollow.confirm": "Dad-ddilyn",
"confirmations.unfollow.message": "Ydych chi'n siŵr eich bod am ddad-ddilyn {name}?", "confirmations.unfollow.message": "Ydych chi'n siŵr eich bod am ddad-ddilyn {name}?",
"confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?", "confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?",
"content_warning.hide": "Cuddio'r post",
"content_warning.show": "Dangos beth bynnag",
"conversation.delete": "Dileu sgwrs", "conversation.delete": "Dileu sgwrs",
"conversation.mark_as_read": "Nodi fel wedi'i ddarllen", "conversation.mark_as_read": "Nodi fel wedi'i ddarllen",
"conversation.open": "Gweld sgwrs", "conversation.open": "Gweld sgwrs",
@ -208,7 +210,7 @@
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.", "dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
"dismissable_banner.dismiss": "Cau", "dismissable_banner.dismiss": "Cau",
"dismissable_banner.explore_links": "Dyma straeon newyddion syn cael eu rhannu fwyaf ar y we gymdeithasol heddiw. Mae'r straeon newyddion diweddaraf sy'n cael eu postio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.", "dismissable_banner.explore_links": "Dyma straeon newyddion syn cael eu rhannu fwyaf ar y we gymdeithasol heddiw. Mae'r straeon newyddion diweddaraf sy'n cael eu postio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
"dismissable_banner.explore_statuses": "Mae'r rhain yn bostiadau o bob rhan o'r we gymdeithasol sydd ar gynnydd heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynu'n cael eu graddio'n uwch.", "dismissable_banner.explore_statuses": "Dyma postiadau o bob gwr o'r we gymdeithasol sy'n derbyn sylw heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynnau'n cael eu graddio'n uwch.",
"dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.", "dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
"dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.", "dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
"domain_block_modal.block": "Blocio gweinydd", "domain_block_modal.block": "Blocio gweinydd",
@ -258,13 +260,13 @@
"empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!", "empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
"empty_column.direct": "Nid oes gennych unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.", "empty_column.direct": "Nid oes gennych unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.",
"empty_column.domain_blocks": "Nid oes unrhyw barthau wedi'u blocio eto.", "empty_column.domain_blocks": "Nid oes unrhyw barthau wedi'u blocio eto.",
"empty_column.explore_statuses": "Does dim yn trendio ar hyn o bryd. Dewch nôl nes ymlaen!", "empty_column.explore_statuses": "Does dim pynciau llosg ar hyn o bryd. Dewch nôl nes ymlaen!",
"empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff bostiadau eto. Pan byddwch yn hoffi un, bydd yn ymddangos yma.", "empty_column.favourited_statuses": "Rydych chi heb ffafrio unrhyw bostiadau eto. Pan byddwch chi'n ffafrio un, bydd yn ymddangos yma.",
"empty_column.favourites": "Nid oes unrhyw un wedi hoffi'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, byddan nhw'n ymddangos yma.", "empty_column.favourites": "Nid oes unrhyw un wedi ffafrio'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, byddan nhw'n ymddangos yma.",
"empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan fyddwch yn derbyn un, byddan nhw'n ymddangos yma.", "empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan fyddwch yn derbyn un, byddan nhw'n ymddangos yma.",
"empty_column.followed_tags": "Nid ydych wedi dilyn unrhyw hashnodau eto. Pan fyddwch chi'n gwneud hynny, byddan nhw'n ymddangos yma.", "empty_column.followed_tags": "Nid ydych wedi dilyn unrhyw hashnodau eto. Pan fyddwch chi'n gwneud hynny, byddan nhw'n ymddangos yma.",
"empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.", "empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.",
"empty_column.home": "Mae eich ffrwd gartref yn wag! Ymwelwch â {public} neu defnyddiwch y chwilotwr i ddechrau arni ac i gwrdd â defnyddwyr eraill.", "empty_column.home": "Mae eich ffrwd gartref yn wag! Dilynwch fwy o bobl i'w llenwi.",
"empty_column.list": "Does dim yn y rhestr yma eto. Pan fydd aelodau'r rhestr yn cyhoeddi postiad newydd, mi fydd yn ymddangos yma.", "empty_column.list": "Does dim yn y rhestr yma eto. Pan fydd aelodau'r rhestr yn cyhoeddi postiad newydd, mi fydd yn ymddangos yma.",
"empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan fyddwch yn creu un, mi fydd yn ymddangos yma.", "empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan fyddwch yn creu un, mi fydd yn ymddangos yma.",
"empty_column.mutes": "Nid ydych wedi tewi unrhyw ddefnyddwyr eto.", "empty_column.mutes": "Nid ydych wedi tewi unrhyw ddefnyddwyr eto.",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd", "filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd",
"filter_modal.select_filter.title": "Hidlo'r postiad hwn", "filter_modal.select_filter.title": "Hidlo'r postiad hwn",
"filter_modal.title.status": "Hidlo postiad", "filter_modal.title.status": "Hidlo postiad",
"filter_warning.matches_filter": "Yn cydweddu'r hidlydd “{title}”",
"filtered_notifications_banner.pending_requests": "Gan {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod", "filtered_notifications_banner.pending_requests": "Gan {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod",
"filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo", "filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo",
"firehose.all": "Popeth", "firehose.all": "Popeth",
@ -348,11 +351,15 @@
"hashtag.follow": "Dilyn hashnod", "hashtag.follow": "Dilyn hashnod",
"hashtag.unfollow": "Dad-ddilyn hashnod", "hashtag.unfollow": "Dad-ddilyn hashnod",
"hashtags.and_other": "…a {count, plural, other {# more}}", "hashtags.and_other": "…a {count, plural, other {# more}}",
"hints.profiles.see_more_followers": "Gweld mwy o ddilynwyr ar {domain}",
"hints.profiles.see_more_follows": "Gweld mwy o 'yn dilyn' ar {domain}",
"hints.profiles.see_more_posts": "Gweld mwy o bostiadau ar {domain}",
"hints.threads.see_more": "Gweld mwy o atebion ar {domain}",
"home.column_settings.show_reblogs": "Dangos hybiau", "home.column_settings.show_reblogs": "Dangos hybiau",
"home.column_settings.show_replies": "Dangos atebion", "home.column_settings.show_replies": "Dangos atebion",
"home.hide_announcements": "Cuddio cyhoeddiadau", "home.hide_announcements": "Cuddio cyhoeddiadau",
"home.pending_critical_update.body": "Diweddarwch eich gweinydd Mastodon cyn gynted â phosibl!", "home.pending_critical_update.body": "Diweddarwch eich gweinydd Mastodon cyn gynted â phosibl!",
"home.pending_critical_update.link": "Gweld y diweddariadau", "home.pending_critical_update.link": "Gweld diweddariadau",
"home.pending_critical_update.title": "Mae diweddariad diogelwch hanfodol ar gael!", "home.pending_critical_update.title": "Mae diweddariad diogelwch hanfodol ar gael!",
"home.show_announcements": "Dangos cyhoeddiadau", "home.show_announcements": "Dangos cyhoeddiadau",
"ignore_notifications_modal.disclaimer": "Ni all Mastodon hysbysu defnyddwyr eich bod wedi anwybyddu eu hysbysiadau. Ni fydd anwybyddu hysbysiadau yn atal y negeseuon eu hunain rhag cael eu hanfon.", "ignore_notifications_modal.disclaimer": "Ni all Mastodon hysbysu defnyddwyr eich bod wedi anwybyddu eu hysbysiadau. Ni fydd anwybyddu hysbysiadau yn atal y negeseuon eu hunain rhag cael eu hanfon.",
@ -366,18 +373,18 @@
"ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?", "ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?",
"ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?", "ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?",
"ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?", "ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?",
"interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi hoffi'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.", "interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi ffafrio'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.",
"interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich llif cartref.", "interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich ffrwd gartref.",
"interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.", "interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.",
"interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.", "interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.",
"interaction_modal.login.action": "Ewch â fi adref", "interaction_modal.login.action": "Mynd i'm ffrwd gartref",
"interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social", "interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social",
"interaction_modal.no_account_yet": "Dim ar Mastodon?", "interaction_modal.no_account_yet": "Dim ar Mastodon?",
"interaction_modal.on_another_server": "Ar weinydd gwahanol", "interaction_modal.on_another_server": "Ar weinydd gwahanol",
"interaction_modal.on_this_server": "Ar y gweinydd hwn", "interaction_modal.on_this_server": "Ar y gweinydd hwn",
"interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?", "interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?",
"interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)", "interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Hoffi postiad {name}", "interaction_modal.title.favourite": "Ffafrio postiad {name}",
"interaction_modal.title.follow": "Dilyn {name}", "interaction_modal.title.follow": "Dilyn {name}",
"interaction_modal.title.reblog": "Hybu postiad {name}", "interaction_modal.title.reblog": "Hybu postiad {name}",
"interaction_modal.title.reply": "Ymateb i bostiad {name}", "interaction_modal.title.reply": "Ymateb i bostiad {name}",
@ -393,11 +400,11 @@
"keyboard_shortcuts.direct": "i agor colofn crybwylliadau preifat", "keyboard_shortcuts.direct": "i agor colofn crybwylliadau preifat",
"keyboard_shortcuts.down": "Symud lawr yn y rhestr", "keyboard_shortcuts.down": "Symud lawr yn y rhestr",
"keyboard_shortcuts.enter": "Agor post", "keyboard_shortcuts.enter": "Agor post",
"keyboard_shortcuts.favourite": "Hoffi postiad", "keyboard_shortcuts.favourite": "Ffafrio postiad",
"keyboard_shortcuts.favourites": "Agor rhestr ffefrynnau", "keyboard_shortcuts.favourites": "Agor rhestr ffefrynnau",
"keyboard_shortcuts.federated": "Agor ffrwd y ffederasiwn", "keyboard_shortcuts.federated": "Agor ffrwd y ffederasiwn",
"keyboard_shortcuts.heading": "Bysellau brys", "keyboard_shortcuts.heading": "Bysellau brys",
"keyboard_shortcuts.home": "Agor ffrwd cartref", "keyboard_shortcuts.home": "Agor ffrwd gartref",
"keyboard_shortcuts.hotkey": "Bysell boeth", "keyboard_shortcuts.hotkey": "Bysell boeth",
"keyboard_shortcuts.legend": "Dangos y rhestr hon", "keyboard_shortcuts.legend": "Dangos y rhestr hon",
"keyboard_shortcuts.local": "Agor ffrwd lleol", "keyboard_shortcuts.local": "Agor ffrwd lleol",
@ -433,7 +440,7 @@
"lists.delete": "Dileu rhestr", "lists.delete": "Dileu rhestr",
"lists.edit": "Golygu rhestr", "lists.edit": "Golygu rhestr",
"lists.edit.submit": "Newid teitl", "lists.edit.submit": "Newid teitl",
"lists.exclusive": "Cuddiwch y postiadau hyn rhag cartref", "lists.exclusive": "Cuddio'r postiadau hyn o'r ffrwd gartref",
"lists.new.create": "Ychwanegu rhestr", "lists.new.create": "Ychwanegu rhestr",
"lists.new.title_placeholder": "Teitl rhestr newydd", "lists.new.title_placeholder": "Teitl rhestr newydd",
"lists.replies_policy.followed": "Unrhyw ddefnyddiwr sy'n cael ei ddilyn", "lists.replies_policy.followed": "Unrhyw ddefnyddiwr sy'n cael ei ddilyn",
@ -487,7 +494,9 @@
"notification.admin.report_statuses": "Adroddodd {name} {target} ar gyfer {category}", "notification.admin.report_statuses": "Adroddodd {name} {target} ar gyfer {category}",
"notification.admin.report_statuses_other": "Adroddodd {name} {target}", "notification.admin.report_statuses_other": "Adroddodd {name} {target}",
"notification.admin.sign_up": "Cofrestrodd {name}", "notification.admin.sign_up": "Cofrestrodd {name}",
"notification.favourite": "Hoffodd {name} eich postiad", "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # eraill}}",
"notification.favourite": "Ffafriodd {name} eich postiad",
"notification.favourite.name_and_others_with_link": "Ffafriodd {name} a <a>{count, plural, one {# arall} other {# eraill}}</a> eich postiad",
"notification.follow": "Dilynodd {name} chi", "notification.follow": "Dilynodd {name} chi",
"notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn",
"notification.label.mention": "Crybwyll", "notification.label.mention": "Crybwyll",
@ -515,7 +524,13 @@
"notification.status": "{name} newydd ei bostio", "notification.status": "{name} newydd ei bostio",
"notification.update": "Golygodd {name} bostiad", "notification.update": "Golygodd {name} bostiad",
"notification_requests.accept": "Derbyn", "notification_requests.accept": "Derbyn",
"notification_requests.confirm_accept_multiple.title": "Derbyn ceisiadau hysbysu?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Diystyru cais} other {Diystyru ceisiadau}}",
"notification_requests.confirm_dismiss_multiple.title": "Diystyru ceisiadau hysbysu?",
"notification_requests.dismiss": "Cau", "notification_requests.dismiss": "Cau",
"notification_requests.dismiss_multiple": "{count, plural, one {Diystyru # cais…} two {Diystyru # gais…} few {Diystyru # chais…} other {Diystyru # cais…}}",
"notification_requests.edit_selection": "Golygu",
"notification_requests.exit_selection": "Iawn",
"notification_requests.explainer_for_limited_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif wedi'i gyfyngu gan gymedrolwr.", "notification_requests.explainer_for_limited_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif wedi'i gyfyngu gan gymedrolwr.",
"notification_requests.explainer_for_limited_remote_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif neu ei weinydd wedi'i gyfyngu gan gymedrolwr.", "notification_requests.explainer_for_limited_remote_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif neu ei weinydd wedi'i gyfyngu gan gymedrolwr.",
"notification_requests.maximize": "Mwyhau", "notification_requests.maximize": "Mwyhau",
@ -581,12 +596,12 @@
"notifications_permission_banner.title": "Peidiwch â cholli dim", "notifications_permission_banner.title": "Peidiwch â cholli dim",
"onboarding.action.back": "Ewch â fi nôl", "onboarding.action.back": "Ewch â fi nôl",
"onboarding.actions.back": "Ewch â fi nôl", "onboarding.actions.back": "Ewch â fi nôl",
"onboarding.actions.go_to_explore": "Gweld beth sy'n trendio", "onboarding.actions.go_to_explore": "Gweld y pynciau llosg",
"onboarding.actions.go_to_home": "Ewch i'ch ffrwd gartref", "onboarding.actions.go_to_home": "Ewch i'm ffrwd gartref",
"onboarding.compose.template": "Helo, #Mastodon!", "onboarding.compose.template": "Helo, #Mastodon!",
"onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.", "onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.",
"onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen:", "onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen:",
"onboarding.follows.title": "Yn boblogaidd ar Mastodon", "onboarding.follows.title": "Personolwch eich ffrwd gartref",
"onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod", "onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod",
"onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a threndiau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.", "onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a threndiau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.",
"onboarding.profile.display_name": "Enw dangos", "onboarding.profile.display_name": "Enw dangos",
@ -606,7 +621,7 @@
"onboarding.start.skip": "Eisiau mynd syth yn eich blaen?", "onboarding.start.skip": "Eisiau mynd syth yn eich blaen?",
"onboarding.start.title": "Rydych chi wedi cyrraedd!", "onboarding.start.title": "Rydych chi wedi cyrraedd!",
"onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.", "onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.",
"onboarding.steps.follow_people.title": "Dilynwch {count, plural, one {one person} other {# people}}", "onboarding.steps.follow_people.title": "Personolwch eich ffrwd gartref",
"onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn {emoji}", "onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn {emoji}",
"onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf", "onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf",
"onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.", "onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.",
@ -645,7 +660,7 @@
"recommended": "Argymhellwyd", "recommended": "Argymhellwyd",
"refresh": "Adnewyddu", "refresh": "Adnewyddu",
"regeneration_indicator.label": "Yn llwytho…", "regeneration_indicator.label": "Yn llwytho…",
"regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!", "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei pharatoi!",
"relative_time.days": "{number}d", "relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl", "relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl",
"relative_time.full.hours": "{number, plural, one {# awr} other {# awr}} yn ôl", "relative_time.full.hours": "{number, plural, one {# awr} other {# awr}} yn ôl",
@ -699,7 +714,7 @@
"report.thanks.title": "Ddim eisiau gweld hwn?", "report.thanks.title": "Ddim eisiau gweld hwn?",
"report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.", "report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.",
"report.unfollow": "Dad-ddilyn @{name}", "report.unfollow": "Dad-ddilyn @{name}",
"report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich porthiant cartref mwyach, dad-ddilynwch nhw.", "report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich ffrwd gartref mwyach, dad-ddilynwch nhw.",
"report_notification.attached_statuses": "{count, plural, one {{count} postiad} arall {{count} postiad}} atodwyd", "report_notification.attached_statuses": "{count, plural, one {{count} postiad} arall {{count} postiad}} atodwyd",
"report_notification.categories.legal": "Cyfreithiol", "report_notification.categories.legal": "Cyfreithiol",
"report_notification.categories.legal_sentence": "cynnwys anghyfreithlon", "report_notification.categories.legal_sentence": "cynnwys anghyfreithlon",
@ -759,7 +774,7 @@
"status.edited": "Golygwyd ddiwethaf {date}", "status.edited": "Golygwyd ddiwethaf {date}",
"status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}", "status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}",
"status.embed": "Mewnblannu", "status.embed": "Mewnblannu",
"status.favourite": "Hoffi", "status.favourite": "Ffafrio",
"status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}", "status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}",
"status.filter": "Hidlo'r postiad hwn", "status.filter": "Hidlo'r postiad hwn",
"status.history.created": "Crëwyd gan {name} {date}", "status.history.created": "Crëwyd gan {name} {date}",
@ -798,7 +813,7 @@
"status.uncached_media_warning": "Dim rhagolwg ar gael", "status.uncached_media_warning": "Dim rhagolwg ar gael",
"status.unmute_conversation": "Dad-dewi sgwrs", "status.unmute_conversation": "Dad-dewi sgwrs",
"status.unpin": "Dadbinio o'r proffil", "status.unpin": "Dadbinio o'r proffil",
"subscribed_languages.lead": "Dim ond postiadau mewn ieithoedd penodol fydd yn ymddangos yn eich ffrydiau ar ôl y newid. Dewiswch ddim byd i dderbyn postiadau ym mhob iaith.", "subscribed_languages.lead": "Dim ond postiadau mewn ieithoedd penodol fydd yn ymddangos yn eich ffrydiau cartref a rhestr ar ôl y newid. Dewiswch ddim byd i dderbyn postiadau ym mhob iaith.",
"subscribed_languages.save": "Cadw'r newidiadau", "subscribed_languages.save": "Cadw'r newidiadau",
"subscribed_languages.target": "Newid ieithoedd tanysgrifio {target}", "subscribed_languages.target": "Newid ieithoedd tanysgrifio {target}",
"tabs_bar.home": "Cartref", "tabs_bar.home": "Cartref",
@ -809,7 +824,7 @@
"time_remaining.moments": "Munudau yn weddill", "time_remaining.moments": "Munudau yn weddill",
"time_remaining.seconds": "{number, plural, one {# eiliad} other {# eiliad}} ar ôl", "time_remaining.seconds": "{number, plural, one {# eiliad} other {# eiliad}} ar ôl",
"trends.counter_by_accounts": "{count, plural, zero {neb} one {{counter} person} two {{counter} berson} few {{counter} pherson} other {{counter} o bobl}} yn y {days, plural, one {diwrnod diwethaf} two {ddeuddydd diwethaf} other {{days} diwrnod diwethaf}}", "trends.counter_by_accounts": "{count, plural, zero {neb} one {{counter} person} two {{counter} berson} few {{counter} pherson} other {{counter} o bobl}} yn y {days, plural, one {diwrnod diwethaf} two {ddeuddydd diwethaf} other {{days} diwrnod diwethaf}}",
"trends.trending_now": "Yn trendio nawr", "trends.trending_now": "Pynciau llosg",
"ui.beforeunload": "Byddwch yn colli eich drafft os byddwch yn gadael Mastodon.", "ui.beforeunload": "Byddwch yn colli eich drafft os byddwch yn gadael Mastodon.",
"units.short.billion": "{count}biliwn", "units.short.billion": "{count}biliwn",
"units.short.million": "{count}miliwn", "units.short.million": "{count}miliwn",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Profil blockieren?", "block_modal.title": "Profil blockieren?",
"block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.", "block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.",
"boost_modal.combo": "Mit {combo} erscheint dieses Fenster beim nächsten Mal nicht mehr", "boost_modal.combo": "Mit {combo} erscheint dieses Fenster beim nächsten Mal nicht mehr",
"boost_modal.reblog": "Beitrag teilen?",
"boost_modal.undo_reblog": "Beitrag nicht mehr teilen?",
"bundle_column_error.copy_stacktrace": "Fehlerbericht kopieren", "bundle_column_error.copy_stacktrace": "Fehlerbericht kopieren",
"bundle_column_error.error.body": "Die angeforderte Seite konnte nicht dargestellt werden. Dies könnte auf einen Fehler in unserem Code oder auf ein Browser-Kompatibilitätsproblem zurückzuführen sein.", "bundle_column_error.error.body": "Die angeforderte Seite konnte nicht dargestellt werden. Dies könnte auf einen Fehler in unserem Code oder auf ein Browser-Kompatibilitätsproblem zurückzuführen sein.",
"bundle_column_error.error.title": "Oh nein!", "bundle_column_error.error.title": "Oh nein!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.", "mute_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.",
"mute_modal.you_wont_see_posts": "Deine Beiträge können weiterhin angesehen werden, aber du wirst deren Beiträge nicht mehr sehen.", "mute_modal.you_wont_see_posts": "Deine Beiträge können weiterhin angesehen werden, aber du wirst deren Beiträge nicht mehr sehen.",
"navigation_bar.about": "Über", "navigation_bar.about": "Über",
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Im erweiterten Webinterface öffnen", "navigation_bar.advanced_interface": "Im erweiterten Webinterface öffnen",
"navigation_bar.blocks": "Blockierte Profile", "navigation_bar.blocks": "Blockierte Profile",
"navigation_bar.bookmarks": "Lesezeichen", "navigation_bar.bookmarks": "Lesezeichen",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Follower und Folge ich", "navigation_bar.follows_and_followers": "Follower und Folge ich",
"navigation_bar.lists": "Listen", "navigation_bar.lists": "Listen",
"navigation_bar.logout": "Abmelden", "navigation_bar.logout": "Abmelden",
"navigation_bar.moderation": "Moderation",
"navigation_bar.mutes": "Stummgeschaltete Profile", "navigation_bar.mutes": "Stummgeschaltete Profile",
"navigation_bar.opened_in_classic_interface": "Beiträge, Konten und andere bestimmte Seiten werden standardmäßig im klassischen Webinterface geöffnet.", "navigation_bar.opened_in_classic_interface": "Beiträge, Konten und andere bestimmte Seiten werden standardmäßig im klassischen Webinterface geöffnet.",
"navigation_bar.personal": "Persönlich", "navigation_bar.personal": "Persönlich",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Block user?", "block_modal.title": "Block user?",
"block_modal.you_wont_see_mentions": "You won't see posts that mention them.", "block_modal.you_wont_see_mentions": "You won't see posts that mention them.",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"boost_modal.reblog": "Boost post?",
"boost_modal.undo_reblog": "Unboost post?",
"bundle_column_error.copy_stacktrace": "Copy error report", "bundle_column_error.copy_stacktrace": "Copy error report",
"bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.", "bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
"bundle_column_error.error.title": "Oh, no!", "bundle_column_error.error.title": "Oh, no!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.", "mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.", "mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
"navigation_bar.about": "About", "navigation_bar.about": "About",
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Open in advanced web interface", "navigation_bar.advanced_interface": "Open in advanced web interface",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "Bookmarks", "navigation_bar.bookmarks": "Bookmarks",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Follows and followers", "navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.lists": "Lists", "navigation_bar.lists": "Lists",
"navigation_bar.logout": "Logout", "navigation_bar.logout": "Logout",
"navigation_bar.moderation": "Moderation",
"navigation_bar.mutes": "Muted users", "navigation_bar.mutes": "Muted users",
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.", "navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personal",

View file

@ -97,6 +97,8 @@
"block_modal.title": "¿Bloquear usuario?", "block_modal.title": "¿Bloquear usuario?",
"block_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.", "block_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
"boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez",
"boost_modal.reblog": "¿Adherir al mensaje?",
"boost_modal.undo_reblog": "¿Dejar de adherir al mensaje?",
"bundle_column_error.copy_stacktrace": "Copiar informe de error", "bundle_column_error.copy_stacktrace": "Copiar informe de error",
"bundle_column_error.error.body": "La página solicitada no pudo ser cargada. Podría deberse a un error de programación en nuestro código o a un problema de compatibilidad con el navegador web.", "bundle_column_error.error.body": "La página solicitada no pudo ser cargada. Podría deberse a un error de programación en nuestro código o a un problema de compatibilidad con el navegador web.",
"bundle_column_error.error.title": "¡Epa!", "bundle_column_error.error.title": "¡Epa!",
@ -192,6 +194,8 @@
"confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?", "confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?",
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
"content_warning.hide": "Ocultar mensaje",
"content_warning.show": "Mostrar de todos modos",
"conversation.delete": "Eliminar conversación", "conversation.delete": "Eliminar conversación",
"conversation.mark_as_read": "Marcar como leída", "conversation.mark_as_read": "Marcar como leída",
"conversation.open": "Ver conversación", "conversation.open": "Ver conversación",
@ -299,6 +303,7 @@
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
"filter_modal.select_filter.title": "Filtrar este mensaje", "filter_modal.select_filter.title": "Filtrar este mensaje",
"filter_modal.title.status": "Filtrar un mensaje", "filter_modal.title.status": "Filtrar un mensaje",
"filter_warning.matches_filter": "Coincide con el filtro “{title}”",
"filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
"filtered_notifications_banner.title": "Notificaciones filtradas", "filtered_notifications_banner.title": "Notificaciones filtradas",
"firehose.all": "Todos", "firehose.all": "Todos",
@ -464,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.", "mute_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus mensajes, pero vos no verás los suyos.", "mute_modal.you_wont_see_posts": "Todavía pueden ver tus mensajes, pero vos no verás los suyos.",
"navigation_bar.about": "Información", "navigation_bar.about": "Información",
"navigation_bar.administration": "Administración",
"navigation_bar.advanced_interface": "Abrir en interface web avanzada", "navigation_bar.advanced_interface": "Abrir en interface web avanzada",
"navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.bookmarks": "Marcadores", "navigation_bar.bookmarks": "Marcadores",
@ -480,6 +486,7 @@
"navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores", "navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores",
"navigation_bar.lists": "Listas", "navigation_bar.lists": "Listas",
"navigation_bar.logout": "Cerrar sesión", "navigation_bar.logout": "Cerrar sesión",
"navigation_bar.moderation": "Moderación",
"navigation_bar.mutes": "Usuarios silenciados", "navigation_bar.mutes": "Usuarios silenciados",
"navigation_bar.opened_in_classic_interface": "Los mensajes, las cuentas y otras páginas específicas se abren predeterminadamente en la interface web clásica.", "navigation_bar.opened_in_classic_interface": "Los mensajes, las cuentas y otras páginas específicas se abren predeterminadamente en la interface web clásica.",
"navigation_bar.personal": "Personal", "navigation_bar.personal": "Personal",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
"content_warning.hide": "Ocultar publicación",
"content_warning.show": "Mostrar de todos modos",
"conversation.delete": "Borrar conversación", "conversation.delete": "Borrar conversación",
"conversation.mark_as_read": "Marcar como leído", "conversation.mark_as_read": "Marcar como leído",
"conversation.open": "Ver conversación", "conversation.open": "Ver conversación",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
"filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.select_filter.title": "Filtrar esta publicación",
"filter_modal.title.status": "Filtrar una publicación", "filter_modal.title.status": "Filtrar una publicación",
"filter_warning.matches_filter": "Coincide con el filtro “{title}”",
"filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas",
"filtered_notifications_banner.title": "Notificaciones filtradas", "filtered_notifications_banner.title": "Notificaciones filtradas",
"firehose.all": "Todas", "firehose.all": "Todas",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Seguro que quieres dejar de seguir a {name}?", "confirmations.unfollow.message": "¿Seguro que quieres dejar de seguir a {name}?",
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
"content_warning.hide": "Ocultar publicación",
"content_warning.show": "Mostrar de todos modos",
"conversation.delete": "Borrar conversación", "conversation.delete": "Borrar conversación",
"conversation.mark_as_read": "Marcar como leído", "conversation.mark_as_read": "Marcar como leído",
"conversation.open": "Ver conversación", "conversation.open": "Ver conversación",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
"filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.select_filter.title": "Filtrar esta publicación",
"filter_modal.title.status": "Filtrar una publicación", "filter_modal.title.status": "Filtrar una publicación",
"filter_warning.matches_filter": "Coincide con el filtro “{title}”",
"filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas",
"filtered_notifications_banner.title": "Notificaciones filtradas", "filtered_notifications_banner.title": "Notificaciones filtradas",
"firehose.all": "Todas", "firehose.all": "Todas",

View file

@ -33,7 +33,9 @@
"account.follow_back": "Jälgi vastu", "account.follow_back": "Jälgi vastu",
"account.followers": "Jälgijad", "account.followers": "Jälgijad",
"account.followers.empty": "Keegi ei jälgi veel seda kasutajat.", "account.followers.empty": "Keegi ei jälgi veel seda kasutajat.",
"account.followers_counter": "{count, plural, one {{counter} jälgija} other {{counter} jälgijat}}",
"account.following": "Jälgib", "account.following": "Jälgib",
"account.following_counter": "{count, plural, one {{counter} jälgib} other {{counter} jälgib}}",
"account.follows.empty": "See kasutaja ei jälgi veel kedagi.", "account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
"account.go_to_profile": "Mine profiilile", "account.go_to_profile": "Mine profiilile",
"account.hide_reblogs": "Peida @{name} jagamised", "account.hide_reblogs": "Peida @{name} jagamised",
@ -59,6 +61,7 @@
"account.requested_follow": "{name} on taodelnud sinu jälgimist", "account.requested_follow": "{name} on taodelnud sinu jälgimist",
"account.share": "Jaga @{name} profiili", "account.share": "Jaga @{name} profiili",
"account.show_reblogs": "Näita @{name} jagamisi", "account.show_reblogs": "Näita @{name} jagamisi",
"account.statuses_counter": "{count, plural, one {{counter} postitus} other {{counter} postitust}}",
"account.unblock": "Eemalda blokeering @{name}", "account.unblock": "Eemalda blokeering @{name}",
"account.unblock_domain": "Tee {domain} nähtavaks", "account.unblock_domain": "Tee {domain} nähtavaks",
"account.unblock_short": "Eemalda blokeering", "account.unblock_short": "Eemalda blokeering",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Estetäänkö käyttäjä?", "block_modal.title": "Estetäänkö käyttäjä?",
"block_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.", "block_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.",
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
"boost_modal.reblog": "Tehostetaanko julkaisua?",
"boost_modal.undo_reblog": "Perutaanko julkaisun tehostus?",
"bundle_column_error.copy_stacktrace": "Kopioi virheraportti", "bundle_column_error.copy_stacktrace": "Kopioi virheraportti",
"bundle_column_error.error.body": "Pyydettyä sivua ei voitu hahmontaa. Se voi johtua virheestä koodissamme tai selaimen yhteensopivuudessa.", "bundle_column_error.error.body": "Pyydettyä sivua ei voitu hahmontaa. Se voi johtua virheestä koodissamme tai selaimen yhteensopivuudessa.",
"bundle_column_error.error.title": "Voi ei!", "bundle_column_error.error.title": "Voi ei!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.", "mute_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.",
"mute_modal.you_wont_see_posts": "Hän voi yhä nähdä julkaisusi, mutta sinä et näe hänen.", "mute_modal.you_wont_see_posts": "Hän voi yhä nähdä julkaisusi, mutta sinä et näe hänen.",
"navigation_bar.about": "Tietoja", "navigation_bar.about": "Tietoja",
"navigation_bar.administration": "Ylläpito",
"navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä", "navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä",
"navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.blocks": "Estetyt käyttäjät",
"navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.bookmarks": "Kirjanmerkit",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Seuratut ja seuraajat", "navigation_bar.follows_and_followers": "Seuratut ja seuraajat",
"navigation_bar.lists": "Listat", "navigation_bar.lists": "Listat",
"navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.logout": "Kirjaudu ulos",
"navigation_bar.moderation": "Moderointi",
"navigation_bar.mutes": "Mykistetyt käyttäjät", "navigation_bar.mutes": "Mykistetyt käyttäjät",
"navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen selainkäyttöliittymään.", "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen selainkäyttöliittymään.",
"navigation_bar.personal": "Henkilökohtaiset", "navigation_bar.personal": "Henkilökohtaiset",

View file

@ -191,6 +191,8 @@
"confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?", "confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?",
"confirmations.unfollow.title": "Se désabonner de l'utilisateur ?", "confirmations.unfollow.title": "Se désabonner de l'utilisateur ?",
"content_warning.hide": "Masquer le message",
"content_warning.show": "Afficher quand même",
"conversation.delete": "Supprimer cette conversation", "conversation.delete": "Supprimer cette conversation",
"conversation.mark_as_read": "Marquer comme lu", "conversation.mark_as_read": "Marquer comme lu",
"conversation.open": "Afficher cette conversation", "conversation.open": "Afficher cette conversation",
@ -298,6 +300,7 @@
"filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle", "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle",
"filter_modal.select_filter.title": "Filtrer cette publication", "filter_modal.select_filter.title": "Filtrer cette publication",
"filter_modal.title.status": "Filtrer une publication", "filter_modal.title.status": "Filtrer une publication",
"filter_warning.matches_filter": "Correspond au filtre « {title} »",
"filtered_notifications_banner.title": "Notifications filtrées", "filtered_notifications_banner.title": "Notifications filtrées",
"firehose.all": "Tout", "firehose.all": "Tout",
"firehose.local": "Ce serveur", "firehose.local": "Ce serveur",
@ -307,6 +310,7 @@
"follow_requests.unlocked_explanation": "Même si votre compte nest pas privé, léquipe de {domain} a pensé que vous pourriez vouloir peut-être consulter manuellement les demandes d'abonnement de ces comptes.", "follow_requests.unlocked_explanation": "Même si votre compte nest pas privé, léquipe de {domain} a pensé que vous pourriez vouloir peut-être consulter manuellement les demandes d'abonnement de ces comptes.",
"follow_suggestions.curated_suggestion": "Choix du staff", "follow_suggestions.curated_suggestion": "Choix du staff",
"follow_suggestions.dismiss": "Ne plus afficher", "follow_suggestions.dismiss": "Ne plus afficher",
"follow_suggestions.friends_of_friends_longer": "Populaire dans le cercle des personnes que vous suivez",
"follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.", "follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.", "follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.",
"follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.", "follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.",
@ -315,6 +319,7 @@
"follow_suggestions.personalized_suggestion": "Suggestion personnalisée", "follow_suggestions.personalized_suggestion": "Suggestion personnalisée",
"follow_suggestions.popular_suggestion": "Suggestion populaire", "follow_suggestions.popular_suggestion": "Suggestion populaire",
"follow_suggestions.popular_suggestion_longer": "Populaire sur {domain}", "follow_suggestions.popular_suggestion_longer": "Populaire sur {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similaire aux profils que vous avez dernièrement suivis",
"follow_suggestions.view_all": "Tout afficher", "follow_suggestions.view_all": "Tout afficher",
"follow_suggestions.who_to_follow": "Qui suivre", "follow_suggestions.who_to_follow": "Qui suivre",
"followed_tags": "Hashtags suivis", "followed_tags": "Hashtags suivis",
@ -343,8 +348,9 @@
"hashtag.follow": "Suivre ce hashtag", "hashtag.follow": "Suivre ce hashtag",
"hashtag.unfollow": "Ne plus suivre ce hashtag", "hashtag.unfollow": "Ne plus suivre ce hashtag",
"hashtags.and_other": "…et {count, plural, other {# de plus}}", "hashtags.and_other": "…et {count, plural, other {# de plus}}",
"hints.profiles.see_more_followers": "Afficher plus d'abonné·e·s sur {domain}",
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}", "hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
"hints.threads.see_more": "Voir plus de réponses sur {domain}", "hints.threads.see_more": "Afficher plus de réponses sur {domain}",
"home.column_settings.show_reblogs": "Afficher boosts", "home.column_settings.show_reblogs": "Afficher boosts",
"home.column_settings.show_replies": "Afficher réponses", "home.column_settings.show_replies": "Afficher réponses",
"home.hide_announcements": "Masquer les annonces", "home.hide_announcements": "Masquer les annonces",
@ -412,6 +418,7 @@
"limited_account_hint.action": "Afficher le profil quand même", "limited_account_hint.action": "Afficher le profil quand même",
"limited_account_hint.title": "Ce profil a été masqué par la modération de {domain}.", "limited_account_hint.title": "Ce profil a été masqué par la modération de {domain}.",
"link_preview.author": "Par {name}", "link_preview.author": "Par {name}",
"link_preview.more_from_author": "Plus via {name}",
"link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}", "link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}",
"lists.account.add": "Ajouter à une liste", "lists.account.add": "Ajouter à une liste",
"lists.account.remove": "Retirer d'une liste", "lists.account.remove": "Retirer d'une liste",
@ -506,6 +513,8 @@
"notifications.column_settings.admin.report": "Nouveaux signalements:", "notifications.column_settings.admin.report": "Nouveaux signalements:",
"notifications.column_settings.admin.sign_up": "Nouvelles inscriptions:", "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions:",
"notifications.column_settings.alert": "Notifications navigateur", "notifications.column_settings.alert": "Notifications navigateur",
"notifications.column_settings.beta.category": "Fonctionnalités expérimentales",
"notifications.column_settings.beta.grouping": "Grouper les notifications",
"notifications.column_settings.favourite": "Favoris:", "notifications.column_settings.favourite": "Favoris:",
"notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories",
"notifications.column_settings.filter_bar.category": "Barre de filtre rapide", "notifications.column_settings.filter_bar.category": "Barre de filtre rapide",
@ -534,7 +543,10 @@
"notifications.permission_denied": "Les notifications de bureau ne sont pas disponibles en raison d'une demande de permission de navigateur précédemment refusée", "notifications.permission_denied": "Les notifications de bureau ne sont pas disponibles en raison d'une demande de permission de navigateur précédemment refusée",
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a précedemment été refusée", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a précedemment été refusée",
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.", "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.",
"notifications.policy.accept": "Accepter",
"notifications.policy.accept_hint": "Afficher dans les notifications",
"notifications.policy.drop": "Ignorer", "notifications.policy.drop": "Ignorer",
"notifications.policy.drop_hint": "Expulser vers le vide, pour ne plus jamais les revoir",
"notifications.policy.filter": "Filtrer", "notifications.policy.filter": "Filtrer",
"notifications.policy.filter_limited_accounts_hint": "Limité par les modérateur·rice·s du serveur", "notifications.policy.filter_limited_accounts_hint": "Limité par les modérateur·rice·s du serveur",
"notifications.policy.filter_limited_accounts_title": "Comptes modérés", "notifications.policy.filter_limited_accounts_title": "Comptes modérés",

View file

@ -191,6 +191,8 @@
"confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name}?", "confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name}?",
"confirmations.unfollow.title": "Se désabonner de l'utilisateur ?", "confirmations.unfollow.title": "Se désabonner de l'utilisateur ?",
"content_warning.hide": "Masquer le message",
"content_warning.show": "Afficher quand même",
"conversation.delete": "Supprimer la conversation", "conversation.delete": "Supprimer la conversation",
"conversation.mark_as_read": "Marquer comme lu", "conversation.mark_as_read": "Marquer comme lu",
"conversation.open": "Afficher la conversation", "conversation.open": "Afficher la conversation",
@ -209,7 +211,7 @@
"dismissable_banner.explore_links": "On parle actuellement de ces nouvelles sur ce serveur, ainsi que sur d'autres serveurs du réseau décentralisé.", "dismissable_banner.explore_links": "On parle actuellement de ces nouvelles sur ce serveur, ainsi que sur d'autres serveurs du réseau décentralisé.",
"dismissable_banner.explore_statuses": "Ces messages venant de tout le web social gagnent en popularité aujourdhui. Les nouveaux messages avec plus de boosts et de favoris sont classés plus haut.", "dismissable_banner.explore_statuses": "Ces messages venant de tout le web social gagnent en popularité aujourdhui. Les nouveaux messages avec plus de boosts et de favoris sont classés plus haut.",
"dismissable_banner.explore_tags": "Ces hashtags sont actuellement en train de gagner de l'ampleur parmi les personnes sur les serveurs du réseau décentralisé dont celui-ci.", "dismissable_banner.explore_tags": "Ces hashtags sont actuellement en train de gagner de l'ampleur parmi les personnes sur les serveurs du réseau décentralisé dont celui-ci.",
"dismissable_banner.public_timeline": "Ce sont les posts publics les plus récents de personnes sur le web social que les gens sur {domain} suivent.", "dismissable_banner.public_timeline": "Il s'agit des messages publics les plus récents publiés par des gens sur le web social et que les utilisateurs de {domain} suivent.",
"domain_block_modal.block": "Bloquer le serveur", "domain_block_modal.block": "Bloquer le serveur",
"domain_block_modal.block_account_instead": "Bloquer @{name} à la place", "domain_block_modal.block_account_instead": "Bloquer @{name} à la place",
"domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.",
@ -298,6 +300,7 @@
"filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle", "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle",
"filter_modal.select_filter.title": "Filtrer ce message", "filter_modal.select_filter.title": "Filtrer ce message",
"filter_modal.title.status": "Filtrer un message", "filter_modal.title.status": "Filtrer un message",
"filter_warning.matches_filter": "Correspond au filtre « {title} »",
"filtered_notifications_banner.title": "Notifications filtrées", "filtered_notifications_banner.title": "Notifications filtrées",
"firehose.all": "Tout", "firehose.all": "Tout",
"firehose.local": "Ce serveur", "firehose.local": "Ce serveur",
@ -307,6 +310,7 @@
"follow_requests.unlocked_explanation": "Même si votre compte nest pas privé, léquipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.", "follow_requests.unlocked_explanation": "Même si votre compte nest pas privé, léquipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.",
"follow_suggestions.curated_suggestion": "Choix du staff", "follow_suggestions.curated_suggestion": "Choix du staff",
"follow_suggestions.dismiss": "Ne plus afficher", "follow_suggestions.dismiss": "Ne plus afficher",
"follow_suggestions.friends_of_friends_longer": "Populaire dans le cercle des personnes que vous suivez",
"follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.", "follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.", "follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.",
"follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.", "follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.",
@ -315,6 +319,7 @@
"follow_suggestions.personalized_suggestion": "Suggestion personnalisée", "follow_suggestions.personalized_suggestion": "Suggestion personnalisée",
"follow_suggestions.popular_suggestion": "Suggestion populaire", "follow_suggestions.popular_suggestion": "Suggestion populaire",
"follow_suggestions.popular_suggestion_longer": "Populaire sur {domain}", "follow_suggestions.popular_suggestion_longer": "Populaire sur {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similaire aux profils que vous avez dernièrement suivis",
"follow_suggestions.view_all": "Tout afficher", "follow_suggestions.view_all": "Tout afficher",
"follow_suggestions.who_to_follow": "Qui suivre", "follow_suggestions.who_to_follow": "Qui suivre",
"followed_tags": "Hashtags suivis", "followed_tags": "Hashtags suivis",
@ -343,8 +348,9 @@
"hashtag.follow": "Suivre le hashtag", "hashtag.follow": "Suivre le hashtag",
"hashtag.unfollow": "Ne plus suivre le hashtag", "hashtag.unfollow": "Ne plus suivre le hashtag",
"hashtags.and_other": "…et {count, plural, other {# de plus}}", "hashtags.and_other": "…et {count, plural, other {# de plus}}",
"hints.profiles.see_more_followers": "Afficher plus d'abonné·e·s sur {domain}",
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}", "hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
"hints.threads.see_more": "Voir plus de réponses sur {domain}", "hints.threads.see_more": "Afficher plus de réponses sur {domain}",
"home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_reblogs": "Afficher les partages",
"home.column_settings.show_replies": "Afficher les réponses", "home.column_settings.show_replies": "Afficher les réponses",
"home.hide_announcements": "Masquer les annonces", "home.hide_announcements": "Masquer les annonces",
@ -412,6 +418,7 @@
"limited_account_hint.action": "Afficher le profil quand même", "limited_account_hint.action": "Afficher le profil quand même",
"limited_account_hint.title": "Ce profil a été masqué par la modération de {domain}.", "limited_account_hint.title": "Ce profil a été masqué par la modération de {domain}.",
"link_preview.author": "Par {name}", "link_preview.author": "Par {name}",
"link_preview.more_from_author": "Plus via {name}",
"link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}", "link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}",
"lists.account.add": "Ajouter à la liste", "lists.account.add": "Ajouter à la liste",
"lists.account.remove": "Supprimer de la liste", "lists.account.remove": "Supprimer de la liste",
@ -506,6 +513,8 @@
"notifications.column_settings.admin.report": "Nouveaux signalements :", "notifications.column_settings.admin.report": "Nouveaux signalements :",
"notifications.column_settings.admin.sign_up": "Nouvelles inscriptions :", "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions :",
"notifications.column_settings.alert": "Notifications du navigateur", "notifications.column_settings.alert": "Notifications du navigateur",
"notifications.column_settings.beta.category": "Fonctionnalités expérimentales",
"notifications.column_settings.beta.grouping": "Grouper les notifications",
"notifications.column_settings.favourite": "Favoris :", "notifications.column_settings.favourite": "Favoris :",
"notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories",
"notifications.column_settings.filter_bar.category": "Barre de filtre rapide", "notifications.column_settings.filter_bar.category": "Barre de filtre rapide",
@ -534,7 +543,10 @@
"notifications.permission_denied": "Impossible dactiver les notifications de bureau car lautorisation a été refusée.", "notifications.permission_denied": "Impossible dactiver les notifications de bureau car lautorisation a été refusée.",
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a été refusée avant", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a été refusée avant",
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.", "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.",
"notifications.policy.accept": "Accepter",
"notifications.policy.accept_hint": "Afficher dans les notifications",
"notifications.policy.drop": "Ignorer", "notifications.policy.drop": "Ignorer",
"notifications.policy.drop_hint": "Expulser vers le vide, pour ne plus jamais les revoir",
"notifications.policy.filter": "Filtrer", "notifications.policy.filter": "Filtrer",
"notifications.policy.filter_limited_accounts_hint": "Limité par les modérateur·rice·s du serveur", "notifications.policy.filter_limited_accounts_hint": "Limité par les modérateur·rice·s du serveur",
"notifications.policy.filter_limited_accounts_title": "Comptes modérés", "notifications.policy.filter_limited_accounts_title": "Comptes modérés",
@ -669,7 +681,7 @@
"report.thanks.title": "Vous ne voulez pas voir cela ?", "report.thanks.title": "Vous ne voulez pas voir cela ?",
"report.thanks.title_actionable": "Merci pour votre signalement, nous allons investiguer.", "report.thanks.title_actionable": "Merci pour votre signalement, nous allons investiguer.",
"report.unfollow": "Ne plus suivre @{name}", "report.unfollow": "Ne plus suivre @{name}",
"report.unfollow_explanation": "Vous suivez ce compte. Désabonnez-vous pour ne plus en voir les messages sur votre fil principal.", "report.unfollow_explanation": "Vous êtes abonné à ce compte. Pour ne plus voir ses publications dans votre flux principal, retirez-le de votre liste d'abonnements.",
"report_notification.attached_statuses": "{count, plural, one {{count} message lié} other {{count} messages liés}}", "report_notification.attached_statuses": "{count, plural, one {{count} message lié} other {{count} messages liés}}",
"report_notification.categories.legal": "Légal", "report_notification.categories.legal": "Légal",
"report_notification.categories.legal_sentence": "contenu illégal", "report_notification.categories.legal_sentence": "contenu illégal",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Ná lean", "confirmations.unfollow.confirm": "Ná lean",
"confirmations.unfollow.message": "An bhfuil tú cinnte gur mhaith leat {name} a dhíleanúint?", "confirmations.unfollow.message": "An bhfuil tú cinnte gur mhaith leat {name} a dhíleanúint?",
"confirmations.unfollow.title": "Dílean an t-úsáideoir?", "confirmations.unfollow.title": "Dílean an t-úsáideoir?",
"content_warning.hide": "Folaigh postáil",
"content_warning.show": "Taispeáin ar aon nós",
"conversation.delete": "Scrios comhrá", "conversation.delete": "Scrios comhrá",
"conversation.mark_as_read": "Marcáil mar léite", "conversation.mark_as_read": "Marcáil mar léite",
"conversation.open": "Féach ar comhrá", "conversation.open": "Féach ar comhrá",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Bain úsáid as catagóir reatha nó cruthaigh ceann nua", "filter_modal.select_filter.subtitle": "Bain úsáid as catagóir reatha nó cruthaigh ceann nua",
"filter_modal.select_filter.title": "Déan scagadh ar an bpostáil seo", "filter_modal.select_filter.title": "Déan scagadh ar an bpostáil seo",
"filter_modal.title.status": "Déan scagadh ar phostáil", "filter_modal.title.status": "Déan scagadh ar phostáil",
"filter_warning.matches_filter": "Meaitseálann an scagaire “{title}”",
"filtered_notifications_banner.pending_requests": "Ó {count, plural, =0 {duine ar bith} one {duine amháin} two {# daoine} few {# daoine} many {# daoine} other {# daoine}} bfhéidir go bhfuil aithne agat orthu", "filtered_notifications_banner.pending_requests": "Ó {count, plural, =0 {duine ar bith} one {duine amháin} two {# daoine} few {# daoine} many {# daoine} other {# daoine}} bfhéidir go bhfuil aithne agat orthu",
"filtered_notifications_banner.title": "Fógraí scagtha", "filtered_notifications_banner.title": "Fógraí scagtha",
"firehose.all": "Gach", "firehose.all": "Gach",
@ -348,6 +351,14 @@
"hashtag.follow": "Lean haischlib", "hashtag.follow": "Lean haischlib",
"hashtag.unfollow": "Ná lean haischlib", "hashtag.unfollow": "Ná lean haischlib",
"hashtags.and_other": "agus {count, plural, one {} two {# níos} few {# níos} many {# níos} other {# níos}}", "hashtags.and_other": "agus {count, plural, one {} two {# níos} few {# níos} many {# níos} other {# níos}}",
"hints.profiles.followers_may_be_missing": "Seans go bhfuil leantóirí don phróifíl seo in easnamh.",
"hints.profiles.follows_may_be_missing": "Seans go bhfuil na nithe seo a leanas in easnamh ar an bpróifíl seo.",
"hints.profiles.posts_may_be_missing": "Seans go bhfuil roinnt postálacha ón bpróifíl seo in easnamh.",
"hints.profiles.see_more_followers": "Féach ar a thuilleadh leantóirí ar {domain}",
"hints.profiles.see_more_follows": "Féach tuilleadh seo a leanas ar {domain}",
"hints.profiles.see_more_posts": "Féach ar a thuilleadh postálacha ar {domain}",
"hints.threads.replies_may_be_missing": "Seans go bhfuil freagraí ó fhreastalaithe eile in easnamh.",
"hints.threads.see_more": "Féach ar a thuilleadh freagraí ar {domain}",
"home.column_settings.show_reblogs": "Taispeáin moltaí", "home.column_settings.show_reblogs": "Taispeáin moltaí",
"home.column_settings.show_replies": "Taispeán freagraí", "home.column_settings.show_replies": "Taispeán freagraí",
"home.hide_announcements": "Cuir fógraí i bhfolach", "home.hide_announcements": "Cuir fógraí i bhfolach",
@ -487,9 +498,13 @@
"notification.admin.report_statuses": "Thuairiscigh {name} {target} le haghaidh {category}", "notification.admin.report_statuses": "Thuairiscigh {name} {target} le haghaidh {category}",
"notification.admin.report_statuses_other": "{name} tuairiscithe {target}", "notification.admin.report_statuses_other": "{name} tuairiscithe {target}",
"notification.admin.sign_up": "Chláraigh {name}", "notification.admin.sign_up": "Chláraigh {name}",
"notification.admin.sign_up.name_and_others": "{name} agus {count, plural, one {# duine eile} two {# daoine eile} few {# daoine eile} many {# daoine eile} other {# daoine eile}} a chláraigh",
"notification.favourite": "Is fearr le {name} do phostáil", "notification.favourite": "Is fearr le {name} do phostáil",
"notification.favourite.name_and_others_with_link": "{name} agus <a>{count, plural, one {# duine eile} other {# daoine eile}}</a> thaitin le do phost",
"notification.follow": "Lean {name} thú", "notification.follow": "Lean {name} thú",
"notification.follow.name_and_others": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} a lean tú",
"notification.follow_request": "D'iarr {name} ort do chuntas a leanúint", "notification.follow_request": "D'iarr {name} ort do chuntas a leanúint",
"notification.follow_request.name_and_others": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} iarratas a dhéanamh chun tú a leanúint",
"notification.label.mention": "Luaigh", "notification.label.mention": "Luaigh",
"notification.label.private_mention": "Lua príobháideach", "notification.label.private_mention": "Lua príobháideach",
"notification.label.private_reply": "Freagra príobháideach", "notification.label.private_reply": "Freagra príobháideach",
@ -507,6 +522,7 @@
"notification.own_poll": "Tá do suirbhé críochnaithe", "notification.own_poll": "Tá do suirbhé críochnaithe",
"notification.poll": "Tá deireadh le vótaíocht inar vótáil tú", "notification.poll": "Tá deireadh le vótaíocht inar vótáil tú",
"notification.reblog": "Mhol {name} do phostáil", "notification.reblog": "Mhol {name} do phostáil",
"notification.reblog.name_and_others_with_link": "{name} agus <a>{count, plural, one {# duine eile} other {# daoine eile}}</a> a chuir borradh faoi do phost",
"notification.relationships_severance_event": "Cailleadh naisc le {name}", "notification.relationships_severance_event": "Cailleadh naisc le {name}",
"notification.relationships_severance_event.account_suspension": "Chuir riarthóir ó {from} {target} ar fionraí, rud a chiallaíonn nach féidir leat nuashonruithe a fháil uathu a thuilleadh ná idirghníomhú leo.", "notification.relationships_severance_event.account_suspension": "Chuir riarthóir ó {from} {target} ar fionraí, rud a chiallaíonn nach féidir leat nuashonruithe a fháil uathu a thuilleadh ná idirghníomhú leo.",
"notification.relationships_severance_event.domain_block": "Chuir riarthóir ó {from} bac ar {target}, lena n-áirítear {followersCount} de do leantóirí agus {followingCount, plural, one {#cuntas} other {#cuntas}} leanann tú.", "notification.relationships_severance_event.domain_block": "Chuir riarthóir ó {from} bac ar {target}, lena n-áirítear {followersCount} de do leantóirí agus {followingCount, plural, one {#cuntas} other {#cuntas}} leanann tú.",
@ -515,7 +531,17 @@
"notification.status": "Phostáil {name} díreach", "notification.status": "Phostáil {name} díreach",
"notification.update": "Chuir {name} postáil in eagar", "notification.update": "Chuir {name} postáil in eagar",
"notification_requests.accept": "Glac", "notification_requests.accept": "Glac",
"notification_requests.accept_multiple": "{count, plural, one {Glac le # iarratas…} other {Glac le # iarratais…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Glac le hIarratas} other {Glac le hIarratais}}",
"notification_requests.confirm_accept_multiple.message": "Tá tú ar tí glacadh le {count, plural, one {iarratas fógra amháin} other {# iarratas fógra}}. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?",
"notification_requests.confirm_accept_multiple.title": "Glac le hiarratais ar fhógra?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Dún iarratas} other {Dún iarratais}}",
"notification_requests.confirm_dismiss_multiple.message": "Tá tú ar tí iarratas fógra {count, plural, one {a hAon} other {#}} a dhúnadh. Ní bheidh tú in ann {count, plural, one {é} other {iad}} a fháil go héasca arís. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?",
"notification_requests.confirm_dismiss_multiple.title": "An bhfuil fonn ort iarratais ar fhógra a dhíbhe?",
"notification_requests.dismiss": "Díbhe", "notification_requests.dismiss": "Díbhe",
"notification_requests.dismiss_multiple": "{count, plural, one {Dún # iarratas…} other {Dún # iarratais…}}",
"notification_requests.edit_selection": "Cuir in eagar",
"notification_requests.exit_selection": "Déanta",
"notification_requests.explainer_for_limited_account": "Scagadh fógraí ón gcuntas seo toisc go bhfuil an cuntas teoranta ag modhnóir.", "notification_requests.explainer_for_limited_account": "Scagadh fógraí ón gcuntas seo toisc go bhfuil an cuntas teoranta ag modhnóir.",
"notification_requests.explainer_for_limited_remote_account": "Scagadh fógraí ón gcuntas seo toisc go bhfuil an cuntas nó a fhreastalaí teoranta ag modhnóir.", "notification_requests.explainer_for_limited_remote_account": "Scagadh fógraí ón gcuntas seo toisc go bhfuil an cuntas nó a fhreastalaí teoranta ag modhnóir.",
"notification_requests.maximize": "Uasmhéadaigh", "notification_requests.maximize": "Uasmhéadaigh",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Na lean tuilleadh", "confirmations.unfollow.confirm": "Na lean tuilleadh",
"confirmations.unfollow.message": "A bheil thu cinnteach nach eil thu airson {name} a leantainn tuilleadh?", "confirmations.unfollow.message": "A bheil thu cinnteach nach eil thu airson {name} a leantainn tuilleadh?",
"confirmations.unfollow.title": "A bheil thu airson sgur de leantainn a chleachdaiche?", "confirmations.unfollow.title": "A bheil thu airson sgur de leantainn a chleachdaiche?",
"content_warning.hide": "Falaich am post",
"content_warning.show": "Seall e co-dhiù",
"conversation.delete": "Sguab às an còmhradh", "conversation.delete": "Sguab às an còmhradh",
"conversation.mark_as_read": "Cuir comharra gun deach a leughadh", "conversation.mark_as_read": "Cuir comharra gun deach a leughadh",
"conversation.open": "Seall an còmhradh", "conversation.open": "Seall an còmhradh",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Cleachd roinn-seòrsa a tha ann no cruthaich tè ùr", "filter_modal.select_filter.subtitle": "Cleachd roinn-seòrsa a tha ann no cruthaich tè ùr",
"filter_modal.select_filter.title": "Criathraich am post seo", "filter_modal.select_filter.title": "Criathraich am post seo",
"filter_modal.title.status": "Criathraich post", "filter_modal.title.status": "Criathraich post",
"filter_warning.matches_filter": "A maidseadh na criathraige “{title}”",
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil gin ann} one {O # neach} two {O # neach} few {O # daoine} other {O # duine}} air a bheil thu eòlach s dòcha", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil gin ann} one {O # neach} two {O # neach} few {O # daoine} other {O # duine}} air a bheil thu eòlach s dòcha",
"filtered_notifications_banner.title": "Brathan criathraichte", "filtered_notifications_banner.title": "Brathan criathraichte",
"firehose.all": "Na h-uile", "firehose.all": "Na h-uile",
@ -348,6 +351,14 @@
"hashtag.follow": "Lean an taga hais", "hashtag.follow": "Lean an taga hais",
"hashtag.unfollow": "Na lean an taga hais tuilleadh", "hashtag.unfollow": "Na lean an taga hais tuilleadh",
"hashtags.and_other": "…agus {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}", "hashtags.and_other": "…agus {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}",
"hints.profiles.followers_may_be_missing": "Dhfhaoidte gu bheil cuid dhen luchd-leantainn na pròifil seo a dhìth.",
"hints.profiles.follows_may_be_missing": "Dhfhaoidte gu bheil cuid a tha a phròifil seo a leantainn a dhìth.",
"hints.profiles.posts_may_be_missing": "Dhfhaoide gu bheil cuid dhe na postaichean aig a phròifil seo a dhìth.",
"hints.profiles.see_more_followers": "Faic barrachd luchd-leantainn air {domain}",
"hints.profiles.see_more_follows": "Faic barrachd a tha 'gan leantainn air {domain}",
"hints.profiles.see_more_posts": "Faic barrachd phostaichean air {domain}",
"hints.threads.replies_may_be_missing": "Dhfhaoidte gu bheil freagairtean o fhrithealaichean eile a dhìth.",
"hints.threads.see_more": "Faic barrachd fhreagairtean air {domain}",
"home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_reblogs": "Seall na brosnachaidhean",
"home.column_settings.show_replies": "Seall na freagairtean", "home.column_settings.show_replies": "Seall na freagairtean",
"home.hide_announcements": "Falaich na brathan-fios", "home.hide_announcements": "Falaich na brathan-fios",
@ -487,9 +498,13 @@
"notification.admin.report_statuses": "Rinn {name} gearan mu {target} air adhbhar {category}", "notification.admin.report_statuses": "Rinn {name} gearan mu {target} air adhbhar {category}",
"notification.admin.report_statuses_other": "Rinn {name} gearan mu {target}", "notification.admin.report_statuses_other": "Rinn {name} gearan mu {target}",
"notification.admin.sign_up": "Chlàraich {name}", "notification.admin.sign_up": "Chlàraich {name}",
"notification.admin.sign_up.name_and_others": "Chlàraich {name} s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}",
"notification.favourite": "Is annsa le {name} am post agad", "notification.favourite": "Is annsa le {name} am post agad",
"notification.favourite.name_and_others_with_link": "Is annsa le {name} s <a>{count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}</a> am post agad",
"notification.follow": "Tha {name} gad leantainn a-nis", "notification.follow": "Tha {name} gad leantainn a-nis",
"notification.follow.name_and_others": "Lean {name} s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} thu",
"notification.follow_request": "Dhiarr {name} gad leantainn", "notification.follow_request": "Dhiarr {name} gad leantainn",
"notification.follow_request.name_and_others": "Dhiarr {name} s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} gad leantainn",
"notification.label.mention": "Iomradh", "notification.label.mention": "Iomradh",
"notification.label.private_mention": "Iomradh prìobhaideach", "notification.label.private_mention": "Iomradh prìobhaideach",
"notification.label.private_reply": "Freagairt phrìobhaideach", "notification.label.private_reply": "Freagairt phrìobhaideach",
@ -507,6 +522,7 @@
"notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch", "notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch",
"notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch", "notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch",
"notification.reblog": "Bhrosnaich {name} am post agad", "notification.reblog": "Bhrosnaich {name} am post agad",
"notification.reblog.name_and_others_with_link": "Bhrosnaich {name} s <a>{count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}</a> am post agad",
"notification.relationships_severance_event": "Chaill thu dàimhean le {name}", "notification.relationships_severance_event": "Chaill thu dàimhean le {name}",
"notification.relationships_severance_event.account_suspension": "Chuir rianaire aig {from} {target} à rèim agus is ciall dha sin nach fhaigh thu naidheachdan uapa s nach urrainn dhut conaltradh leotha.", "notification.relationships_severance_event.account_suspension": "Chuir rianaire aig {from} {target} à rèim agus is ciall dha sin nach fhaigh thu naidheachdan uapa s nach urrainn dhut conaltradh leotha.",
"notification.relationships_severance_event.domain_block": "Bhac rianaire aig {from} {target}, a gabhail a-staigh {followersCount} dhen luchd-leantainn agad agus {followingCount, plural, one {# chunntas} two {# chunntas} few {# cunntasan} other {# cunntas}} a tha thu fhèin a leantainn.", "notification.relationships_severance_event.domain_block": "Bhac rianaire aig {from} {target}, a gabhail a-staigh {followersCount} dhen luchd-leantainn agad agus {followingCount, plural, one {# chunntas} two {# chunntas} few {# cunntasan} other {# cunntas}} a tha thu fhèin a leantainn.",
@ -515,7 +531,17 @@
"notification.status": "Phostaich {name} rud", "notification.status": "Phostaich {name} rud",
"notification.update": "Dheasaich {name} post", "notification.update": "Dheasaich {name} post",
"notification_requests.accept": "Gabh ris", "notification_requests.accept": "Gabh ris",
"notification_requests.accept_multiple": "{count, plural, one {Gabh ri # iarrtas…} two {Gabh ri # iarrtas…} few {Gabh ri # iarrtasan…} other {Gabh ri # iarrtas…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Gabh ris an t-iarrtas} two {Gabh ris na h-iarrtasan} few {Gabh ris na h-iarrtasan} other {Gabh ris na h-iarrtasan}}",
"notification_requests.confirm_accept_multiple.message": "Tha thu gu bhith gabhail ri {count, plural, one {# iarrtas bratha} two {# iarrtas bratha} few {# iarrtasan bratha} other {# iarrtas bratha}} a leigeil seachad. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?",
"notification_requests.confirm_accept_multiple.title": "A bheil thu airson gabhail ri iarrtasan bratha?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Leig seachad an t-iarrtas} two {Leig seachad na h-iarrtasan} few {Leig seachad na h-iarrtasan} other {Leig seachad na h-iarrtasan}}",
"notification_requests.confirm_dismiss_multiple.message": "Tha thu gu bhith {count, plural, one {# iarrtas bratha} two {# iarrtas bratha} few {# iarrtasan bratha} other {# iarrtas bratha}} a leigeil seachad. Chan fhaigh thu grèim {count, plural, one {air} two {orra} few {orra} other {orra}} a-rithist gun duilgheadas. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?",
"notification_requests.confirm_dismiss_multiple.title": "A bheil thu airson iarrtasan bratha a leigeil seachad?",
"notification_requests.dismiss": "Leig seachad", "notification_requests.dismiss": "Leig seachad",
"notification_requests.dismiss_multiple": "{count, plural, one {Leig seachad # iarrtas…} two {Leig seachad # iarrtas…} few {Leig seachad # iarrtasan…} other {Leig seachad # iarrtas…}}",
"notification_requests.edit_selection": "Deasaich",
"notification_requests.exit_selection": "Deiseil",
"notification_requests.explainer_for_limited_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas a chuingeachadh le maor.", "notification_requests.explainer_for_limited_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas a chuingeachadh le maor.",
"notification_requests.explainer_for_limited_remote_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas no am frithealaiche aige a chuingeachadh le maor.", "notification_requests.explainer_for_limited_remote_account": "Chaidh na brathan on chunntas seo a chriathradh on a chaidh an cunntas no am frithealaiche aige a chuingeachadh le maor.",
"notification_requests.maximize": "Làn-mheudaich", "notification_requests.maximize": "Làn-mheudaich",
@ -569,7 +595,7 @@
"notifications.policy.filter_limited_accounts_title": "Cunntasan fo mhaorsainneachd", "notifications.policy.filter_limited_accounts_title": "Cunntasan fo mhaorsainneachd",
"notifications.policy.filter_new_accounts.hint": "A chaidh a chruthachadh o chionn {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}", "notifications.policy.filter_new_accounts.hint": "A chaidh a chruthachadh o chionn {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}",
"notifications.policy.filter_new_accounts_title": "Cunntasan ùra", "notifications.policy.filter_new_accounts_title": "Cunntasan ùra",
"notifications.policy.filter_not_followers_hint": "A gabhail a-staigh an fheadhainn a lean ort nas lugha na {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh", "notifications.policy.filter_not_followers_hint": "A gabhail a-staigh an fheadhainn a lean thu nas lugha na {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh",
"notifications.policy.filter_not_followers_title": "Daoine nach eil gad leantainn", "notifications.policy.filter_not_followers_title": "Daoine nach eil gad leantainn",
"notifications.policy.filter_not_following_hint": "Gus an aontaich thu riutha a làimh", "notifications.policy.filter_not_following_hint": "Gus an aontaich thu riutha a làimh",
"notifications.policy.filter_not_following_title": "Daoine nach eil thu a leantainn", "notifications.policy.filter_not_following_title": "Daoine nach eil thu a leantainn",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Bloquear usuaria?", "block_modal.title": "Bloquear usuaria?",
"block_modal.you_wont_see_mentions": "Non verás publicacións que a mencionen.", "block_modal.you_wont_see_mentions": "Non verás publicacións que a mencionen.",
"boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez", "boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez",
"boost_modal.reblog": "Promover publicación?",
"boost_modal.undo_reblog": "Retirar promoción?",
"bundle_column_error.copy_stacktrace": "Copiar informe do erro", "bundle_column_error.copy_stacktrace": "Copiar informe do erro",
"bundle_column_error.error.body": "Non se puido mostrar a páxina solicitada. Podería deberse a un problema no código, ou incompatiblidade co navegador.", "bundle_column_error.error.body": "Non se puido mostrar a páxina solicitada. Podería deberse a un problema no código, ou incompatiblidade co navegador.",
"bundle_column_error.error.title": "Vaites!", "bundle_column_error.error.title": "Vaites!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Non verás as publicacións que a mencionen.", "mute_modal.you_wont_see_mentions": "Non verás as publicacións que a mencionen.",
"mute_modal.you_wont_see_posts": "Seguirá podendo ler as túas publicacións, pero non verás as súas.", "mute_modal.you_wont_see_posts": "Seguirá podendo ler as túas publicacións, pero non verás as súas.",
"navigation_bar.about": "Sobre", "navigation_bar.about": "Sobre",
"navigation_bar.administration": "Administración",
"navigation_bar.advanced_interface": "Abrir coa interface web avanzada", "navigation_bar.advanced_interface": "Abrir coa interface web avanzada",
"navigation_bar.blocks": "Usuarias bloqueadas", "navigation_bar.blocks": "Usuarias bloqueadas",
"navigation_bar.bookmarks": "Marcadores", "navigation_bar.bookmarks": "Marcadores",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Seguindo e seguidoras", "navigation_bar.follows_and_followers": "Seguindo e seguidoras",
"navigation_bar.lists": "Listaxes", "navigation_bar.lists": "Listaxes",
"navigation_bar.logout": "Pechar sesión", "navigation_bar.logout": "Pechar sesión",
"navigation_bar.moderation": "Moderación",
"navigation_bar.mutes": "Usuarias silenciadas", "navigation_bar.mutes": "Usuarias silenciadas",
"navigation_bar.opened_in_classic_interface": "Publicacións, contas e outras páxinas dedicadas ábrense por defecto na interface web clásica.", "navigation_bar.opened_in_classic_interface": "Publicacións, contas e outras páxinas dedicadas ábrense por defecto na interface web clásica.",
"navigation_bar.personal": "Persoal", "navigation_bar.personal": "Persoal",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "הפסקת מעקב", "confirmations.unfollow.confirm": "הפסקת מעקב",
"confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?", "confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?",
"confirmations.unfollow.title": "לבטל מעקב אחר המשתמש.ת?", "confirmations.unfollow.title": "לבטל מעקב אחר המשתמש.ת?",
"content_warning.hide": "הסתרת חיצרוץ",
"content_warning.show": "להציג בכל זאת",
"conversation.delete": "מחיקת שיחה", "conversation.delete": "מחיקת שיחה",
"conversation.mark_as_read": "סמן כנקרא", "conversation.mark_as_read": "סמן כנקרא",
"conversation.open": "צפו בשיחה", "conversation.open": "צפו בשיחה",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה", "filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה",
"filter_modal.select_filter.title": "סינון ההודעה הזו", "filter_modal.select_filter.title": "סינון ההודעה הזו",
"filter_modal.title.status": "סנן הודעה", "filter_modal.title.status": "סנן הודעה",
"filter_warning.matches_filter": "תואם לסנן “{title}”",
"filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין בקשות ממשתמשים }one {בקשה אחת ממישהו/מישהי }two {יש בקשותיים ממשתמשים }other {יש # בקשות ממשתמשים }}שאולי מוכרים לך", "filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין בקשות ממשתמשים }one {בקשה אחת ממישהו/מישהי }two {יש בקשותיים ממשתמשים }other {יש # בקשות ממשתמשים }}שאולי מוכרים לך",
"filtered_notifications_banner.title": "התראות מסוננות", "filtered_notifications_banner.title": "התראות מסוננות",
"firehose.all": "הכל", "firehose.all": "הכל",

View file

@ -1,7 +1,7 @@
{ {
"about.blocks": "Server yang dimoderasi", "about.blocks": "Server yang dimoderasi",
"about.contact": "Hubungi:", "about.contact": "Kontak:",
"about.disclaimer": "Mastodon adalah perangkat lunak bebas dan sumber terbuka, dan adalah merek dagang dari Mastodon gGmbH.", "about.disclaimer": "perangkat lunak sumber terbuperangkat lunak sumber terbukaka184124.",
"about.domain_blocks.no_reason_available": "Alasan tidak tersedia", "about.domain_blocks.no_reason_available": "Alasan tidak tersedia",
"about.domain_blocks.preamble": "Mastodon umumnya mengizinkan Anda untuk melihat konten dan berinteraksi dengan pengguna dari server lain di fediverse. Ini adalah pengecualian yang dibuat untuk beberapa server.", "about.domain_blocks.preamble": "Mastodon umumnya mengizinkan Anda untuk melihat konten dan berinteraksi dengan pengguna dari server lain di fediverse. Ini adalah pengecualian yang dibuat untuk beberapa server.",
"about.domain_blocks.silenced.explanation": "Anda secara umum tidak melihat profil dan konten dari server ini, kecuali jika Anda mencarinya atau memilihnya dengan mengikuti secara eksplisit.", "about.domain_blocks.silenced.explanation": "Anda secara umum tidak melihat profil dan konten dari server ini, kecuali jika Anda mencarinya atau memilihnya dengan mengikuti secara eksplisit.",
@ -11,6 +11,7 @@
"about.not_available": "Informasi ini belum tersedia di server ini.", "about.not_available": "Informasi ini belum tersedia di server ini.",
"about.powered_by": "Media sosial terdesentralisasi diberdayakan oleh {mastodon}", "about.powered_by": "Media sosial terdesentralisasi diberdayakan oleh {mastodon}",
"about.rules": "Aturan server", "about.rules": "Aturan server",
"account.account_note_header": "Personal note",
"account.add_or_remove_from_list": "Tambah atau Hapus dari daftar", "account.add_or_remove_from_list": "Tambah atau Hapus dari daftar",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Grup", "account.badges.group": "Grup",
@ -33,7 +34,9 @@
"account.follow_back": "Ikuti balik", "account.follow_back": "Ikuti balik",
"account.followers": "Pengikut", "account.followers": "Pengikut",
"account.followers.empty": "Pengguna ini belum ada pengikut.", "account.followers.empty": "Pengguna ini belum ada pengikut.",
"account.followers_counter": "{count, plural, other {{counter} followers}}",
"account.following": "Mengikuti", "account.following": "Mengikuti",
"account.following_counter": "{count, plural, other {{counter} following}}",
"account.follows.empty": "Pengguna ini belum mengikuti siapa pun.", "account.follows.empty": "Pengguna ini belum mengikuti siapa pun.",
"account.go_to_profile": "Buka profil", "account.go_to_profile": "Buka profil",
"account.hide_reblogs": "Sembunyikan boosts dari @{name}", "account.hide_reblogs": "Sembunyikan boosts dari @{name}",
@ -59,6 +62,7 @@
"account.requested_follow": "{name} ingin mengikuti Anda", "account.requested_follow": "{name} ingin mengikuti Anda",
"account.share": "Bagikan profil @{name}", "account.share": "Bagikan profil @{name}",
"account.show_reblogs": "Tampilkan boost dari @{name}", "account.show_reblogs": "Tampilkan boost dari @{name}",
"account.statuses_counter": "{count, plural, other {{counter} posts}}",
"account.unblock": "Buka blokir @{name}", "account.unblock": "Buka blokir @{name}",
"account.unblock_domain": "Buka blokir domain {domain}", "account.unblock_domain": "Buka blokir domain {domain}",
"account.unblock_short": "Buka blokir", "account.unblock_short": "Buka blokir",
@ -166,21 +170,30 @@
"confirmations.block.confirm": "Blokir", "confirmations.block.confirm": "Blokir",
"confirmations.delete.confirm": "Hapus", "confirmations.delete.confirm": "Hapus",
"confirmations.delete.message": "Apakah Anda yakin untuk menghapus kiriman ini?", "confirmations.delete.message": "Apakah Anda yakin untuk menghapus kiriman ini?",
"confirmations.delete.title": "Delete post?",
"confirmations.delete_list.confirm": "Hapus", "confirmations.delete_list.confirm": "Hapus",
"confirmations.delete_list.message": "Apakah Anda yakin untuk menghapus daftar ini secara permanen?", "confirmations.delete_list.message": "Apakah Anda yakin untuk menghapus daftar ini secara permanen?",
"confirmations.delete_list.title": "Delete list?",
"confirmations.discard_edit_media.confirm": "Buang", "confirmations.discard_edit_media.confirm": "Buang",
"confirmations.discard_edit_media.message": "Anda belum menyimpan perubahan deskripsi atau pratinjau media, buang saja?", "confirmations.discard_edit_media.message": "Anda belum menyimpan perubahan deskripsi atau pratinjau media, buang saja?",
"confirmations.edit.confirm": "Ubah", "confirmations.edit.confirm": "Ubah",
"confirmations.edit.message": "Mengubah akan menimpa pesan yang sedang anda tulis. Apakah anda yakin ingin melanjutkan?", "confirmations.edit.message": "Mengubah akan menimpa pesan yang sedang anda tulis. Apakah anda yakin ingin melanjutkan?",
"confirmations.edit.title": "Overwrite post?",
"confirmations.logout.confirm": "Keluar", "confirmations.logout.confirm": "Keluar",
"confirmations.logout.message": "Apakah Anda yakin ingin keluar?", "confirmations.logout.message": "Apakah Anda yakin ingin keluar?",
"confirmations.logout.title": "Log out?",
"confirmations.mute.confirm": "Bisukan", "confirmations.mute.confirm": "Bisukan",
"confirmations.redraft.confirm": "Hapus dan susun ulang", "confirmations.redraft.confirm": "Hapus dan susun ulang",
"confirmations.redraft.message": "Apakah anda yakin ingin menghapus postingan ini dan menyusun ulang postingan ini? Favorit dan peningkatan akan hilang, dan balasan ke postingan asli tidak akan terhubung ke postingan manapun.", "confirmations.redraft.message": "Apakah anda yakin ingin menghapus postingan ini dan menyusun ulang postingan ini? Favorit dan peningkatan akan hilang, dan balasan ke postingan asli tidak akan terhubung ke postingan manapun.",
"confirmations.redraft.title": "Delete & redraft post?",
"confirmations.reply.confirm": "Balas", "confirmations.reply.confirm": "Balas",
"confirmations.reply.message": "Membalas sekarang akan menimpa pesan yang sedang Anda buat. Anda yakin ingin melanjutkan?", "confirmations.reply.message": "Membalas sekarang akan menimpa pesan yang sedang Anda buat. Anda yakin ingin melanjutkan?",
"confirmations.reply.title": "Delete & redraft post?",
"confirmations.unfollow.confirm": "Berhenti mengikuti", "confirmations.unfollow.confirm": "Berhenti mengikuti",
"confirmations.unfollow.message": "Apakah Anda ingin berhenti mengikuti {name}?", "confirmations.unfollow.message": "Apakah Anda ingin berhenti mengikuti {name}?",
"confirmations.unfollow.title": "Unfollow user?",
"content_warning.hide": "Hide post",
"content_warning.show": "Show anyway",
"conversation.delete": "Hapus percakapan", "conversation.delete": "Hapus percakapan",
"conversation.mark_as_read": "Tandai sudah dibaca", "conversation.mark_as_read": "Tandai sudah dibaca",
"conversation.open": "Lihat percakapan", "conversation.open": "Lihat percakapan",
@ -217,7 +230,9 @@
"domain_pill.username": "Nama pengguna", "domain_pill.username": "Nama pengguna",
"domain_pill.whats_in_a_handle": "Apa itu nama pengguna?", "domain_pill.whats_in_a_handle": "Apa itu nama pengguna?",
"domain_pill.who_they_are": "Karena nama pengguna menunjukkan siapa seseorang dan di mana server mereka berada, anda dapat berinteraksi dengan orang-orang di seluruh web sosial <button>ActivityPub-powered platforms</button>.", "domain_pill.who_they_are": "Karena nama pengguna menunjukkan siapa seseorang dan di mana server mereka berada, anda dapat berinteraksi dengan orang-orang di seluruh web sosial <button>ActivityPub-powered platforms</button>.",
"domain_pill.who_you_are": "<button>ActivityPub-powered platforms</button>.",
"domain_pill.your_handle": "Nama pengguna anda:", "domain_pill.your_handle": "Nama pengguna anda:",
"domain_pill.your_server": "Your digital home, where all of your posts live. Dont like this one? Transfer servers at any time and bring your followers, too.",
"embed.instructions": "Sematkan kiriman ini di situs web Anda dengan menyalin kode di bawah ini.", "embed.instructions": "Sematkan kiriman ini di situs web Anda dengan menyalin kode di bawah ini.",
"embed.preview": "Tampilan akan seperti ini nantinya:", "embed.preview": "Tampilan akan seperti ini nantinya:",
"emoji_button.activity": "Aktivitas", "emoji_button.activity": "Aktivitas",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Útiloka notanda?", "block_modal.title": "Útiloka notanda?",
"block_modal.you_wont_see_mentions": "Þú munt ekki sjá færslur sem minnast á viðkomandi aðila.", "block_modal.you_wont_see_mentions": "Þú munt ekki sjá færslur sem minnast á viðkomandi aðila.",
"boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst", "boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst",
"boost_modal.reblog": "Endurbirta færslu?",
"boost_modal.undo_reblog": "Taka færslu úr endurbirtingu?",
"bundle_column_error.copy_stacktrace": "Afrita villuskýrslu", "bundle_column_error.copy_stacktrace": "Afrita villuskýrslu",
"bundle_column_error.error.body": "Umbeðna síðau var ekki hægt að myndgera. Það gæti verið vegna villu í kóðanum okkar eða vandamáls með samhæfni vafra.", "bundle_column_error.error.body": "Umbeðna síðau var ekki hægt að myndgera. Það gæti verið vegna villu í kóðanum okkar eða vandamáls með samhæfni vafra.",
"bundle_column_error.error.title": "Ó-nei!", "bundle_column_error.error.title": "Ó-nei!",
@ -436,7 +438,7 @@
"lightbox.previous": "Fyrra", "lightbox.previous": "Fyrra",
"limited_account_hint.action": "Birta notandasniðið samt", "limited_account_hint.action": "Birta notandasniðið samt",
"limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.", "limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.",
"link_preview.author": "Eftir {name}", "link_preview.author": "Frá {name}",
"link_preview.more_from_author": "Meira frá {name}", "link_preview.more_from_author": "Meira frá {name}",
"link_preview.shares": "{count, plural, one {{counter} færsla} other {{counter} færslur}}", "link_preview.shares": "{count, plural, one {{counter} færsla} other {{counter} færslur}}",
"lists.account.add": "Bæta á lista", "lists.account.add": "Bæta á lista",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Þú munt ekki sjá færslur sem minnast á viðkomandi aðila.", "mute_modal.you_wont_see_mentions": "Þú munt ekki sjá færslur sem minnast á viðkomandi aðila.",
"mute_modal.you_wont_see_posts": "Viðkomandi geta áfram séð færslurnar þínar en þú munt ekki sjá færslurnar þeirra.", "mute_modal.you_wont_see_posts": "Viðkomandi geta áfram séð færslurnar þínar en þú munt ekki sjá færslurnar þeirra.",
"navigation_bar.about": "Um hugbúnaðinn", "navigation_bar.about": "Um hugbúnaðinn",
"navigation_bar.administration": "Stjórnun",
"navigation_bar.advanced_interface": "Opna í ítarlegu vefviðmóti", "navigation_bar.advanced_interface": "Opna í ítarlegu vefviðmóti",
"navigation_bar.blocks": "Útilokaðir notendur", "navigation_bar.blocks": "Útilokaðir notendur",
"navigation_bar.bookmarks": "Bókamerki", "navigation_bar.bookmarks": "Bókamerki",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Fylgist með og fylgjendur", "navigation_bar.follows_and_followers": "Fylgist með og fylgjendur",
"navigation_bar.lists": "Listar", "navigation_bar.lists": "Listar",
"navigation_bar.logout": "Útskráning", "navigation_bar.logout": "Útskráning",
"navigation_bar.moderation": "Umsjón",
"navigation_bar.mutes": "Þaggaðir notendur", "navigation_bar.mutes": "Þaggaðir notendur",
"navigation_bar.opened_in_classic_interface": "Færslur, notendaaðgangar og aðrar sérhæfðar síður eru sjálfgefið opnaðar í klassíska vefviðmótinu.", "navigation_bar.opened_in_classic_interface": "Færslur, notendaaðgangar og aðrar sérhæfðar síður eru sjálfgefið opnaðar í klassíska vefviðmótinu.",
"navigation_bar.personal": "Einka", "navigation_bar.personal": "Einka",

View file

@ -170,21 +170,30 @@
"confirmations.block.confirm": "ブロック", "confirmations.block.confirm": "ブロック",
"confirmations.delete.confirm": "削除", "confirmations.delete.confirm": "削除",
"confirmations.delete.message": "本当に削除しますか?", "confirmations.delete.message": "本当に削除しますか?",
"confirmations.delete.title": "投稿を削除しようとしています",
"confirmations.delete_list.confirm": "削除", "confirmations.delete_list.confirm": "削除",
"confirmations.delete_list.message": "本当にこのリストを完全に削除しますか?", "confirmations.delete_list.message": "本当にこのリストを完全に削除しますか?",
"confirmations.delete_list.title": "リストを削除しようとしています",
"confirmations.discard_edit_media.confirm": "破棄", "confirmations.discard_edit_media.confirm": "破棄",
"confirmations.discard_edit_media.message": "メディアの説明またはプレビューに保存されていない変更があります。それでも破棄しますか?", "confirmations.discard_edit_media.message": "メディアの説明またはプレビューに保存されていない変更があります。それでも破棄しますか?",
"confirmations.edit.confirm": "編集", "confirmations.edit.confirm": "編集",
"confirmations.edit.message": "今編集すると現在作成中のメッセージが上書きされます。本当に実行しますか?", "confirmations.edit.message": "今編集すると現在作成中のメッセージが上書きされます。本当に実行しますか?",
"confirmations.edit.title": "作成中の内容を上書きしようとしています",
"confirmations.logout.confirm": "ログアウト", "confirmations.logout.confirm": "ログアウト",
"confirmations.logout.message": "本当にログアウトしますか?", "confirmations.logout.message": "本当にログアウトしますか?",
"confirmations.logout.title": "ログアウトしようとしています",
"confirmations.mute.confirm": "ミュート", "confirmations.mute.confirm": "ミュート",
"confirmations.redraft.confirm": "削除して下書きに戻す", "confirmations.redraft.confirm": "削除して下書きに戻す",
"confirmations.redraft.message": "投稿を削除して下書きに戻します。この投稿へのお気に入り登録やブーストは失われ、返信は孤立することになります。よろしいですか?", "confirmations.redraft.message": "投稿を削除して下書きに戻します。この投稿へのお気に入り登録やブーストは失われ、返信は孤立することになります。よろしいですか?",
"confirmations.redraft.title": "投稿の削除と下書きの再作成",
"confirmations.reply.confirm": "返信", "confirmations.reply.confirm": "返信",
"confirmations.reply.message": "今返信すると現在作成中のメッセージが上書きされます。本当に実行しますか?", "confirmations.reply.message": "今返信すると現在作成中のメッセージが上書きされます。本当に実行しますか?",
"confirmations.reply.title": "作成中の内容を上書きしようとしています",
"confirmations.unfollow.confirm": "フォロー解除", "confirmations.unfollow.confirm": "フォロー解除",
"confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?", "confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?",
"confirmations.unfollow.title": "フォローを解除しようとしています",
"content_warning.hide": "投稿を隠す",
"content_warning.show": "承知の上で表示",
"conversation.delete": "会話を削除", "conversation.delete": "会話を削除",
"conversation.mark_as_read": "既読にする", "conversation.mark_as_read": "既読にする",
"conversation.open": "会話を表示", "conversation.open": "会話を表示",
@ -292,6 +301,7 @@
"filter_modal.select_filter.subtitle": "既存のカテゴリーを使用するか新規作成します", "filter_modal.select_filter.subtitle": "既存のカテゴリーを使用するか新規作成します",
"filter_modal.select_filter.title": "この投稿をフィルターする", "filter_modal.select_filter.title": "この投稿をフィルターする",
"filter_modal.title.status": "投稿をフィルターする", "filter_modal.title.status": "投稿をフィルターする",
"filter_warning.matches_filter": "フィルター「{title}」に一致する投稿です",
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {すべて完了しました} other {#人の通知がブロックされています}}", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {すべて完了しました} other {#人の通知がブロックされています}}",
"filtered_notifications_banner.title": "保留中の通知", "filtered_notifications_banner.title": "保留中の通知",
"firehose.all": "すべて", "firehose.all": "すべて",
@ -492,12 +502,25 @@
"notification.status": "{name}さんが投稿しました", "notification.status": "{name}さんが投稿しました",
"notification.update": "{name}さんが投稿を編集しました", "notification.update": "{name}さんが投稿を編集しました",
"notification_requests.accept": "受け入れる", "notification_requests.accept": "受け入れる",
"notification_requests.accept_multiple": "{count, plural, other {選択中の#件を受け入れる}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, other {#件のアカウントを受け入れる}}",
"notification_requests.confirm_accept_multiple.message": "{count, plural, other {#件のアカウント}}に対して今後通知を受け入れるようにします。よろしいですか?",
"notification_requests.confirm_accept_multiple.title": "保留中のアカウントの受け入れ",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, other {#件のアカウントを無視する}}",
"notification_requests.confirm_dismiss_multiple.message": "{count, plural, other {#件のアカウント}}からの通知を今後無視するようにします。一度この操作を行った{count, plural, other {アカウント}}とふたたび出会うことは容易ではありません。よろしいですか?",
"notification_requests.confirm_dismiss_multiple.title": "保留中のアカウントを無視しようとしています",
"notification_requests.dismiss": "無視", "notification_requests.dismiss": "無視",
"notification_requests.dismiss_multiple": "{count, plural, other {選択中の#件を無視する}}",
"notification_requests.edit_selection": "選択",
"notification_requests.exit_selection": "選択の終了",
"notification_requests.explainer_for_limited_account": "このアカウントはモデレーターにより制限が課されているため、このアカウントによる通知は保留されています",
"notification_requests.explainer_for_limited_remote_account": "このアカウントが所属するサーバーはモデレーターにより制限が課されているため、このアカウントによる通知は保留されています",
"notification_requests.minimize_banner": "「保留中の通知」のバナーを最小化する", "notification_requests.minimize_banner": "「保留中の通知」のバナーを最小化する",
"notification_requests.notifications_from": "{name}からの通知", "notification_requests.notifications_from": "{name}からの通知",
"notification_requests.title": "保留中の通知", "notification_requests.title": "保留中の通知",
"notifications.clear": "通知を消去", "notifications.clear": "通知を消去",
"notifications.clear_confirmation": "本当に通知を消去しますか?", "notifications.clear_confirmation": "本当に通知を消去しますか?",
"notifications.clear_title": "通知を消去しようとしています",
"notifications.column_settings.admin.report": "新しい通報:", "notifications.column_settings.admin.report": "新しい通報:",
"notifications.column_settings.admin.sign_up": "新規登録:", "notifications.column_settings.admin.sign_up": "新規登録:",
"notifications.column_settings.alert": "デスクトップ通知", "notifications.column_settings.alert": "デスクトップ通知",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "팔로우 해제", "confirmations.unfollow.confirm": "팔로우 해제",
"confirmations.unfollow.message": "정말로 {name} 님을 팔로우 해제하시겠습니까?", "confirmations.unfollow.message": "정말로 {name} 님을 팔로우 해제하시겠습니까?",
"confirmations.unfollow.title": "사용자를 언팔로우 할까요?", "confirmations.unfollow.title": "사용자를 언팔로우 할까요?",
"content_warning.hide": "게시물 숨기기",
"content_warning.show": "무시하고 보기",
"conversation.delete": "대화 삭제", "conversation.delete": "대화 삭제",
"conversation.mark_as_read": "읽은 상태로 표시", "conversation.mark_as_read": "읽은 상태로 표시",
"conversation.open": "대화 보기", "conversation.open": "대화 보기",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다", "filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다",
"filter_modal.select_filter.title": "이 게시물을 필터", "filter_modal.select_filter.title": "이 게시물을 필터",
"filter_modal.title.status": "게시물 필터", "filter_modal.title.status": "게시물 필터",
"filter_warning.matches_filter": "\"{title}\" 필터에 걸림",
"filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터", "filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터",
"filtered_notifications_banner.title": "걸러진 알림", "filtered_notifications_banner.title": "걸러진 알림",
"firehose.all": "모두", "firehose.all": "모두",
@ -495,9 +498,13 @@
"notification.admin.report_statuses": "{name} 님이 {target}을 {category}로 신고했습니다", "notification.admin.report_statuses": "{name} 님이 {target}을 {category}로 신고했습니다",
"notification.admin.report_statuses_other": "{name} 님이 {target}을 신고했습니다", "notification.admin.report_statuses_other": "{name} 님이 {target}을 신고했습니다",
"notification.admin.sign_up": "{name} 님이 가입했습니다", "notification.admin.sign_up": "{name} 님이 가입했습니다",
"notification.admin.sign_up.name_and_others": "{name} 외 {count, plural, other {# 명}}이 가입했습니다",
"notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.favourite": "{name} 님이 내 게시물을 좋아합니다",
"notification.favourite.name_and_others_with_link": "{name} 외 <a>{count, plural, other {# 명}}</a>이 내 게시물을 좋아합니다",
"notification.follow": "{name} 님이 나를 팔로우했습니다", "notification.follow": "{name} 님이 나를 팔로우했습니다",
"notification.follow.name_and_others": "{name} 외 {count, plural, other {# 명}}이 날 팔로우 했습니다",
"notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다",
"notification.follow_request.name_and_others": "{name} 외 {count, plural, other {# 명}}이 나에게 팔로우 요청을 보냈습니다",
"notification.label.mention": "멘션", "notification.label.mention": "멘션",
"notification.label.private_mention": "개인 멘션", "notification.label.private_mention": "개인 멘션",
"notification.label.private_reply": "개인 답글", "notification.label.private_reply": "개인 답글",
@ -515,6 +522,7 @@
"notification.own_poll": "설문을 마침", "notification.own_poll": "설문을 마침",
"notification.poll": "참여한 투표가 끝났습니다", "notification.poll": "참여한 투표가 끝났습니다",
"notification.reblog": "{name} 님이 부스트했습니다", "notification.reblog": "{name} 님이 부스트했습니다",
"notification.reblog.name_and_others_with_link": "{name} 외 <a>{count, plural, other {# 명}}</a>이 내 게시물을 부스트했습니다",
"notification.relationships_severance_event": "{name} 님과의 연결이 끊어졌습니다", "notification.relationships_severance_event": "{name} 님과의 연결이 끊어졌습니다",
"notification.relationships_severance_event.account_suspension": "{from}의 관리자가 {target}를 정지시켰기 때문에 그들과 더이상 상호작용 할 수 없고 정보를 받아볼 수 없습니다.", "notification.relationships_severance_event.account_suspension": "{from}의 관리자가 {target}를 정지시켰기 때문에 그들과 더이상 상호작용 할 수 없고 정보를 받아볼 수 없습니다.",
"notification.relationships_severance_event.domain_block": "{from}의 관리자가 {target}를 차단하였고 여기에는 나의 {followersCount} 명의 팔로워와 {followingCount, plural, other {#}} 명의 팔로우가 포함되었습니다.", "notification.relationships_severance_event.domain_block": "{from}의 관리자가 {target}를 차단하였고 여기에는 나의 {followersCount} 명의 팔로워와 {followingCount, plural, other {#}} 명의 팔로우가 포함되었습니다.",
@ -848,7 +856,7 @@
"upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파", "upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파",
"upload_modal.detect_text": "사진에서 문자 탐색", "upload_modal.detect_text": "사진에서 문자 탐색",
"upload_modal.edit_media": "미디어 수정", "upload_modal.edit_media": "미디어 수정",
"upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.", "upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 초점을 맞추세요. 이 점은 썸네일에서 항상 보여질 부분을 나타냅니다.",
"upload_modal.preparing_ocr": "OCR 준비 중…", "upload_modal.preparing_ocr": "OCR 준비 중…",
"upload_modal.preview_label": "미리보기 ({ratio})", "upload_modal.preview_label": "미리보기 ({ratio})",
"upload_progress.label": "업로드 중...", "upload_progress.label": "업로드 중...",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Blokuoti naudotoją?", "block_modal.title": "Blokuoti naudotoją?",
"block_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.", "block_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.",
"boost_modal.combo": "Galima paspausti {combo}, kad praleisti tai kitą kartą", "boost_modal.combo": "Galima paspausti {combo}, kad praleisti tai kitą kartą",
"boost_modal.reblog": "Pasidalinti įrašą?",
"boost_modal.undo_reblog": "Panaikinti pasidalintą įrašą?",
"bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą", "bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą",
"bundle_column_error.error.body": "Paprašytos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.", "bundle_column_error.error.body": "Paprašytos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.",
"bundle_column_error.error.title": "O, ne!", "bundle_column_error.error.title": "O, ne!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.", "mute_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.",
"mute_modal.you_wont_see_posts": "Jie vis tiek gali matyti tavo įrašus, bet tu nematysi jų.", "mute_modal.you_wont_see_posts": "Jie vis tiek gali matyti tavo įrašus, bet tu nematysi jų.",
"navigation_bar.about": "Apie", "navigation_bar.about": "Apie",
"navigation_bar.administration": "Administravimas",
"navigation_bar.advanced_interface": "Atidaryti išplėstinę žiniatinklio sąsają", "navigation_bar.advanced_interface": "Atidaryti išplėstinę žiniatinklio sąsają",
"navigation_bar.blocks": "Užblokuoti naudotojai", "navigation_bar.blocks": "Užblokuoti naudotojai",
"navigation_bar.bookmarks": "Žymės", "navigation_bar.bookmarks": "Žymės",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Sekimai ir sekėjai", "navigation_bar.follows_and_followers": "Sekimai ir sekėjai",
"navigation_bar.lists": "Sąrašai", "navigation_bar.lists": "Sąrašai",
"navigation_bar.logout": "Atsijungti", "navigation_bar.logout": "Atsijungti",
"navigation_bar.moderation": "Prižiūrėjimas",
"navigation_bar.mutes": "Nutildyti naudotojai", "navigation_bar.mutes": "Nutildyti naudotojai",
"navigation_bar.opened_in_classic_interface": "Įrašai, paskyros ir kiti konkretūs puslapiai pagal numatytuosius nustatymus atidaromi klasikinėje žiniatinklio sąsajoje.", "navigation_bar.opened_in_classic_interface": "Įrašai, paskyros ir kiti konkretūs puslapiai pagal numatytuosius nustatymus atidaromi klasikinėje žiniatinklio sąsajoje.",
"navigation_bar.personal": "Asmeninis", "navigation_bar.personal": "Asmeninis",

View file

@ -97,6 +97,7 @@
"block_modal.title": "Gebruiker blokkeren?", "block_modal.title": "Gebruiker blokkeren?",
"block_modal.you_wont_see_mentions": "Je ziet geen berichten meer die dit account vermelden.", "block_modal.you_wont_see_mentions": "Je ziet geen berichten meer die dit account vermelden.",
"boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan",
"boost_modal.reblog": "Bericht boosten?",
"bundle_column_error.copy_stacktrace": "Foutrapportage kopiëren", "bundle_column_error.copy_stacktrace": "Foutrapportage kopiëren",
"bundle_column_error.error.body": "De opgevraagde pagina kon niet worden weergegeven. Dit kan het gevolg zijn van een fout in onze broncode, of van een compatibiliteitsprobleem met je webbrowser.", "bundle_column_error.error.body": "De opgevraagde pagina kon niet worden weergegeven. Dit kan het gevolg zijn van een fout in onze broncode, of van een compatibiliteitsprobleem met je webbrowser.",
"bundle_column_error.error.title": "O nee!", "bundle_column_error.error.title": "O nee!",
@ -467,6 +468,7 @@
"mute_modal.you_wont_see_mentions": "Je ziet geen berichten meer die dit account vermelden.", "mute_modal.you_wont_see_mentions": "Je ziet geen berichten meer die dit account vermelden.",
"mute_modal.you_wont_see_posts": "De persoon kan nog steeds jouw berichten zien, maar diens berichten zie je niet meer.", "mute_modal.you_wont_see_posts": "De persoon kan nog steeds jouw berichten zien, maar diens berichten zie je niet meer.",
"navigation_bar.about": "Over", "navigation_bar.about": "Over",
"navigation_bar.administration": "Beheer",
"navigation_bar.advanced_interface": "In geavanceerde webinterface openen", "navigation_bar.advanced_interface": "In geavanceerde webinterface openen",
"navigation_bar.blocks": "Geblokkeerde gebruikers", "navigation_bar.blocks": "Geblokkeerde gebruikers",
"navigation_bar.bookmarks": "Bladwijzers", "navigation_bar.bookmarks": "Bladwijzers",
@ -483,6 +485,7 @@
"navigation_bar.follows_and_followers": "Volgers en gevolgde accounts", "navigation_bar.follows_and_followers": "Volgers en gevolgde accounts",
"navigation_bar.lists": "Lijsten", "navigation_bar.lists": "Lijsten",
"navigation_bar.logout": "Uitloggen", "navigation_bar.logout": "Uitloggen",
"navigation_bar.moderation": "Moderatie",
"navigation_bar.mutes": "Genegeerde gebruikers", "navigation_bar.mutes": "Genegeerde gebruikers",
"navigation_bar.opened_in_classic_interface": "Berichten, accounts en andere specifieke paginas, worden standaard geopend in de klassieke webinterface.", "navigation_bar.opened_in_classic_interface": "Berichten, accounts en andere specifieke paginas, worden standaard geopend in de klassieke webinterface.",
"navigation_bar.personal": "Persoonlijk", "navigation_bar.personal": "Persoonlijk",

View file

@ -193,6 +193,7 @@
"confirmations.unfollow.message": "Er du sikker på at du vil slutta å fylgja {name}?", "confirmations.unfollow.message": "Er du sikker på at du vil slutta å fylgja {name}?",
"confirmations.unfollow.title": "Slutt å fylgja brukaren?", "confirmations.unfollow.title": "Slutt å fylgja brukaren?",
"content_warning.hide": "Gøym innlegg", "content_warning.hide": "Gøym innlegg",
"content_warning.show": "Vis likevel",
"conversation.delete": "Slett samtale", "conversation.delete": "Slett samtale",
"conversation.mark_as_read": "Marker som lesen", "conversation.mark_as_read": "Marker som lesen",
"conversation.open": "Sjå samtale", "conversation.open": "Sjå samtale",
@ -300,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny", "filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny",
"filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.select_filter.title": "Filtrer dette innlegget",
"filter_modal.title.status": "Filtrer eit innlegg", "filter_modal.title.status": "Filtrer eit innlegg",
"filter_warning.matches_filter": "Passar med filteret «{title}»",
"filtered_notifications_banner.pending_requests": "Frå {count, plural, =0 {ingen} one {éin person} other {# personar}} du kanskje kjenner", "filtered_notifications_banner.pending_requests": "Frå {count, plural, =0 {ingen} one {éin person} other {# personar}} du kanskje kjenner",
"filtered_notifications_banner.title": "Filtrerte varslingar", "filtered_notifications_banner.title": "Filtrerte varslingar",
"firehose.all": "Alle", "firehose.all": "Alle",
@ -349,6 +351,14 @@
"hashtag.follow": "Fylg emneknagg", "hashtag.follow": "Fylg emneknagg",
"hashtag.unfollow": "Slutt å fylgje emneknaggen", "hashtag.unfollow": "Slutt å fylgje emneknaggen",
"hashtags.and_other": "…og {count, plural, one {}other {# fleire}}", "hashtags.and_other": "…og {count, plural, one {}other {# fleire}}",
"hints.profiles.followers_may_be_missing": "Kven som fylgjer denne profilen manglar kanskje.",
"hints.profiles.follows_may_be_missing": "Kven denne profilen fylgjer manglar kanskje.",
"hints.profiles.posts_may_be_missing": "Nokre innlegg frå denne profilen manglar kanskje.",
"hints.profiles.see_more_followers": "Sjå fleire fylgjarar på {domain}",
"hints.profiles.see_more_follows": "Sjå fleire fylgjer på {domain}",
"hints.profiles.see_more_posts": "Sjå fleire innlegg på {domain}",
"hints.threads.replies_may_be_missing": "Svar frå andre tenarar manglar kanskje.",
"hints.threads.see_more": "Sjå fleire svar på {domain}",
"home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_reblogs": "Vis framhevingar",
"home.column_settings.show_replies": "Vis svar", "home.column_settings.show_replies": "Vis svar",
"home.hide_announcements": "Skjul kunngjeringar", "home.hide_announcements": "Skjul kunngjeringar",
@ -488,9 +498,13 @@
"notification.admin.report_statuses": "{name} rapporterte {target} for {category}", "notification.admin.report_statuses": "{name} rapporterte {target} for {category}",
"notification.admin.report_statuses_other": "{name} rapporterte {target}", "notification.admin.report_statuses_other": "{name} rapporterte {target}",
"notification.admin.sign_up": "{name} er registrert", "notification.admin.sign_up": "{name} er registrert",
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} vart med",
"notification.favourite": "{name} markerte innlegget ditt som favoritt", "notification.favourite": "{name} markerte innlegget ditt som favoritt",
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# annan} other {# andre}}</a> favorittmerka innlegget ditt",
"notification.follow": "{name} fylgde deg", "notification.follow": "{name} fylgde deg",
"notification.follow.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} fylgde deg",
"notification.follow_request": "{name} har bedt om å fylgja deg", "notification.follow_request": "{name} har bedt om å fylgja deg",
"notification.follow_request.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} har spurt om å fylgja deg",
"notification.label.mention": "Omtale", "notification.label.mention": "Omtale",
"notification.label.private_mention": "Privat omtale", "notification.label.private_mention": "Privat omtale",
"notification.label.private_reply": "Privat svar", "notification.label.private_reply": "Privat svar",
@ -508,6 +522,7 @@
"notification.own_poll": "Rundspørjinga di er ferdig", "notification.own_poll": "Rundspørjinga di er ferdig",
"notification.poll": "Ei rundspørjing du røysta i er ferdig", "notification.poll": "Ei rundspørjing du røysta i er ferdig",
"notification.reblog": "{name} framheva innlegget ditt", "notification.reblog": "{name} framheva innlegget ditt",
"notification.reblog.name_and_others_with_link": "{name} og <a>{count, plural, one {# annan} other {# andre}}</a> framheva innlegget ditt",
"notification.relationships_severance_event": "Tapte samband med {name}", "notification.relationships_severance_event": "Tapte samband med {name}",
"notification.relationships_severance_event.account_suspension": "Ein administrator på {from} har utvist {target}, som tyder at du ikkje lenger får oppdateringar frå dei eller kan samhandla med dei.", "notification.relationships_severance_event.account_suspension": "Ein administrator på {from} har utvist {target}, som tyder at du ikkje lenger får oppdateringar frå dei eller kan samhandla med dei.",
"notification.relationships_severance_event.domain_block": "Ein administrator på {from} har blokkert {target}, inkludert {followersCount} av fylgjarane dine og {followingCount, plural, one {# konto} other {# kontoar}} du fylgjer.", "notification.relationships_severance_event.domain_block": "Ein administrator på {from} har blokkert {target}, inkludert {followersCount} av fylgjarane dine og {followingCount, plural, one {# konto} other {# kontoar}} du fylgjer.",
@ -516,7 +531,17 @@
"notification.status": "{name} la nettopp ut", "notification.status": "{name} la nettopp ut",
"notification.update": "{name} redigerte eit innlegg", "notification.update": "{name} redigerte eit innlegg",
"notification_requests.accept": "Godkjenn", "notification_requests.accept": "Godkjenn",
"notification_requests.accept_multiple": "{count, plural, one {Godta # førespurnad…} other {Godta # førespurnader…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Godta førespurnad} other {Godta førespurnader}}",
"notification_requests.confirm_accept_multiple.message": "Du er i ferd med å godta {count, plural, one {ein førespurnad om varsling} other {# førespurnader om varsling}}. Er du sikker på at du vil halda fram?",
"notification_requests.confirm_accept_multiple.title": "Godta førespurnader om varsling?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Avvis førespurnad} other {Avvis førespurnader}}",
"notification_requests.confirm_dismiss_multiple.message": "Du er i ferd med å avvisa {count, plural, one {ein førespurnad om varsel} other {# førespurnader om varsel}}. Det blir ikkje lett å få tilgang til {count, plural, one {han} other {dei}} att. Er du sikker på at du vil halda fram?",
"notification_requests.confirm_dismiss_multiple.title": "Avvis førespurnader om varsel?",
"notification_requests.dismiss": "Avvis", "notification_requests.dismiss": "Avvis",
"notification_requests.dismiss_multiple": "{count, plural, one {Avvis # førespurnad…} other {Avvis # førespurnader…}}",
"notification_requests.edit_selection": "Rediger",
"notification_requests.exit_selection": "Ferdig",
"notification_requests.explainer_for_limited_account": "Varsla frå denne kontoen er filtrerte ut fordi ein moderator har avgrensa kontoen.", "notification_requests.explainer_for_limited_account": "Varsla frå denne kontoen er filtrerte ut fordi ein moderator har avgrensa kontoen.",
"notification_requests.explainer_for_limited_remote_account": "Varla frå denne kontoen er filtrerte ut fordi ein moderator har avgrensa kontoen eller tenaren.", "notification_requests.explainer_for_limited_remote_account": "Varla frå denne kontoen er filtrerte ut fordi ein moderator har avgrensa kontoen eller tenaren.",
"notification_requests.maximize": "Maksimer", "notification_requests.maximize": "Maksimer",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Zablokować użytkownika?", "block_modal.title": "Zablokować użytkownika?",
"block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.", "block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.",
"boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem",
"boost_modal.reblog": "Podbić wpis?",
"boost_modal.undo_reblog": "Cofnąć podbicie?",
"bundle_column_error.copy_stacktrace": "Skopiuj raport o błędzie", "bundle_column_error.copy_stacktrace": "Skopiuj raport o błędzie",
"bundle_column_error.error.body": "Nie można zrenderować żądanej strony. Może to być spowodowane błędem w naszym kodzie lub problemami z kompatybilnością przeglądarki.", "bundle_column_error.error.body": "Nie można zrenderować żądanej strony. Może to być spowodowane błędem w naszym kodzie lub problemami z kompatybilnością przeglądarki.",
"bundle_column_error.error.title": "O nie!", "bundle_column_error.error.title": "O nie!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.", "mute_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.",
"mute_modal.you_wont_see_posts": "Użytkownik dalej będzie widzieć Twoje posty, ale Ty nie będziesz widzieć jego.", "mute_modal.you_wont_see_posts": "Użytkownik dalej będzie widzieć Twoje posty, ale Ty nie będziesz widzieć jego.",
"navigation_bar.about": "O serwerze", "navigation_bar.about": "O serwerze",
"navigation_bar.administration": "Administracja",
"navigation_bar.advanced_interface": "Otwórz w zaawansowanym interfejsie użytkownika", "navigation_bar.advanced_interface": "Otwórz w zaawansowanym interfejsie użytkownika",
"navigation_bar.blocks": "Zablokowani użytkownicy", "navigation_bar.blocks": "Zablokowani użytkownicy",
"navigation_bar.bookmarks": "Zakładki", "navigation_bar.bookmarks": "Zakładki",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "Obserwowani i obserwujący", "navigation_bar.follows_and_followers": "Obserwowani i obserwujący",
"navigation_bar.lists": "Listy", "navigation_bar.lists": "Listy",
"navigation_bar.logout": "Wyloguj", "navigation_bar.logout": "Wyloguj",
"navigation_bar.moderation": "Moderacja",
"navigation_bar.mutes": "Wyciszeni użytkownicy", "navigation_bar.mutes": "Wyciszeni użytkownicy",
"navigation_bar.opened_in_classic_interface": "Posty, konta i inne konkretne strony są otwierane domyślnie w klasycznym interfejsie sieciowym.", "navigation_bar.opened_in_classic_interface": "Posty, konta i inne konkretne strony są otwierane domyślnie w klasycznym interfejsie sieciowym.",
"navigation_bar.personal": "Osobiste", "navigation_bar.personal": "Osobiste",

View file

@ -97,6 +97,8 @@
"block_modal.title": "Të bllokohet përdoruesi?", "block_modal.title": "Të bllokohet përdoruesi?",
"block_modal.you_wont_see_mentions": "Sdo të shihni postimet ku përmenden.", "block_modal.you_wont_see_mentions": "Sdo të shihni postimet ku përmenden.",
"boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}",
"boost_modal.reblog": "Përforcim postimi?",
"boost_modal.undo_reblog": "Të hiqet përforcim për postimin?",
"bundle_column_error.copy_stacktrace": "Kopjo raportim gabimi", "bundle_column_error.copy_stacktrace": "Kopjo raportim gabimi",
"bundle_column_error.error.body": "Faqja e kërkuar su vizatua dot. Kjo mund të vijë nga një e metë në kodin tonë, ose nga një problem përputhshmërie i shfletuesit.", "bundle_column_error.error.body": "Faqja e kërkuar su vizatua dot. Kjo mund të vijë nga një e metë në kodin tonë, ose nga një problem përputhshmërie i shfletuesit.",
"bundle_column_error.error.title": "Oh, mos!", "bundle_column_error.error.title": "Oh, mos!",
@ -192,6 +194,8 @@
"confirmations.unfollow.confirm": "Resht së ndjekuri", "confirmations.unfollow.confirm": "Resht së ndjekuri",
"confirmations.unfollow.message": "Jeni i sigurt se doni të mos ndiqet më {name}?", "confirmations.unfollow.message": "Jeni i sigurt se doni të mos ndiqet më {name}?",
"confirmations.unfollow.title": "Të ndalet ndjekja e përdoruesit?", "confirmations.unfollow.title": "Të ndalet ndjekja e përdoruesit?",
"content_warning.hide": "Fshihe postimin",
"content_warning.show": "Shfaqe, sido qoftë",
"conversation.delete": "Fshije bisedën", "conversation.delete": "Fshije bisedën",
"conversation.mark_as_read": "Vëri shenjë si të lexuar", "conversation.mark_as_read": "Vëri shenjë si të lexuar",
"conversation.open": "Shfaq bisedën", "conversation.open": "Shfaq bisedën",
@ -299,6 +303,7 @@
"filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re",
"filter_modal.select_filter.title": "Filtroje këtë postim", "filter_modal.select_filter.title": "Filtroje këtë postim",
"filter_modal.title.status": "Filtroni një postim", "filter_modal.title.status": "Filtroni një postim",
"filter_warning.matches_filter": "Ka përkim me filtrin “{title}”",
"filtered_notifications_banner.pending_requests": "Nga {count, plural, =0 {askush} one {një person} other {# vetë}} që mund të njihni", "filtered_notifications_banner.pending_requests": "Nga {count, plural, =0 {askush} one {një person} other {# vetë}} që mund të njihni",
"filtered_notifications_banner.title": "Njoftime të filtruar", "filtered_notifications_banner.title": "Njoftime të filtruar",
"firehose.all": "Krejt", "firehose.all": "Krejt",
@ -464,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Sdo të shihni postime ku përmenden.", "mute_modal.you_wont_see_mentions": "Sdo të shihni postime ku përmenden.",
"mute_modal.you_wont_see_posts": "Ata munden ende të shohin postimet tuaja, por ju sdo të shihni të tyret.", "mute_modal.you_wont_see_posts": "Ata munden ende të shohin postimet tuaja, por ju sdo të shihni të tyret.",
"navigation_bar.about": "Mbi", "navigation_bar.about": "Mbi",
"navigation_bar.administration": "Administrim",
"navigation_bar.advanced_interface": "Hape në ndërfaqe web të thelluar", "navigation_bar.advanced_interface": "Hape në ndërfaqe web të thelluar",
"navigation_bar.blocks": "Përdorues të bllokuar", "navigation_bar.blocks": "Përdorues të bllokuar",
"navigation_bar.bookmarks": "Faqerojtës", "navigation_bar.bookmarks": "Faqerojtës",
@ -480,6 +486,7 @@
"navigation_bar.follows_and_followers": "Ndjekje dhe ndjekës", "navigation_bar.follows_and_followers": "Ndjekje dhe ndjekës",
"navigation_bar.lists": "Lista", "navigation_bar.lists": "Lista",
"navigation_bar.logout": "Dalje", "navigation_bar.logout": "Dalje",
"navigation_bar.moderation": "Moderim",
"navigation_bar.mutes": "Përdorues të heshtuar", "navigation_bar.mutes": "Përdorues të heshtuar",
"navigation_bar.opened_in_classic_interface": "Postime, llogari dhe të tjera faqe specifike, si parazgjedhje, hapen në ndërfaqe klasike web.", "navigation_bar.opened_in_classic_interface": "Postime, llogari dhe të tjera faqe specifike, si parazgjedhje, hapen në ndërfaqe klasike web.",
"navigation_bar.personal": "Personale", "navigation_bar.personal": "Personale",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Avfölj", "confirmations.unfollow.confirm": "Avfölj",
"confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?", "confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?",
"confirmations.unfollow.title": "Avfölj %s?", "confirmations.unfollow.title": "Avfölj %s?",
"content_warning.hide": "Dölj inlägg",
"content_warning.show": "Visa ändå",
"conversation.delete": "Radera konversation", "conversation.delete": "Radera konversation",
"conversation.mark_as_read": "Markera som läst", "conversation.mark_as_read": "Markera som läst",
"conversation.open": "Visa konversation", "conversation.open": "Visa konversation",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "เลิกติดตาม", "confirmations.unfollow.confirm": "เลิกติดตาม",
"confirmations.unfollow.message": "คุณแน่ใจหรือไม่ว่าต้องการเลิกติดตาม {name}?", "confirmations.unfollow.message": "คุณแน่ใจหรือไม่ว่าต้องการเลิกติดตาม {name}?",
"confirmations.unfollow.title": "เลิกติดตามผู้ใช้?", "confirmations.unfollow.title": "เลิกติดตามผู้ใช้?",
"content_warning.hide": "ซ่อนโพสต์",
"content_warning.show": "แสดงต่อไป",
"conversation.delete": "ลบการสนทนา", "conversation.delete": "ลบการสนทนา",
"conversation.mark_as_read": "ทำเครื่องหมายว่าอ่านแล้ว", "conversation.mark_as_read": "ทำเครื่องหมายว่าอ่านแล้ว",
"conversation.open": "ดูการสนทนา", "conversation.open": "ดูการสนทนา",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่", "filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่",
"filter_modal.select_filter.title": "กรองโพสต์นี้", "filter_modal.select_filter.title": "กรองโพสต์นี้",
"filter_modal.title.status": "กรองโพสต์", "filter_modal.title.status": "กรองโพสต์",
"filter_warning.matches_filter": "ตรงกับตัวกรอง “{title}”",
"filtered_notifications_banner.pending_requests": "จาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก", "filtered_notifications_banner.pending_requests": "จาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก",
"filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่", "filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่",
"firehose.all": "ทั้งหมด", "firehose.all": "ทั้งหมด",
@ -348,6 +351,14 @@
"hashtag.follow": "ติดตามแฮชแท็ก", "hashtag.follow": "ติดตามแฮชแท็ก",
"hashtag.unfollow": "เลิกติดตามแฮชแท็ก", "hashtag.unfollow": "เลิกติดตามแฮชแท็ก",
"hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}", "hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}",
"hints.profiles.followers_may_be_missing": "ผู้ติดตามสำหรับโปรไฟล์นี้อาจขาดหายไป",
"hints.profiles.follows_may_be_missing": "การติดตามสำหรับโปรไฟล์นี้อาจขาดหายไป",
"hints.profiles.posts_may_be_missing": "โพสต์บางส่วนจากโปรไฟล์นี้อาจขาดหายไป",
"hints.profiles.see_more_followers": "ดูผู้ติดตามเพิ่มเติมใน {domain}",
"hints.profiles.see_more_follows": "ดูการติดตามเพิ่มเติมใน {domain}",
"hints.profiles.see_more_posts": "ดูโพสต์เพิ่มเติมใน {domain}",
"hints.threads.replies_may_be_missing": "การตอบกลับจากเซิร์ฟเวอร์อื่น ๆ อาจขาดหายไป",
"hints.threads.see_more": "ดูการตอบกลับเพิ่มเติมใน {domain}",
"home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_reblogs": "แสดงการดัน",
"home.column_settings.show_replies": "แสดงการตอบกลับ", "home.column_settings.show_replies": "แสดงการตอบกลับ",
"home.hide_announcements": "ซ่อนประกาศ", "home.hide_announcements": "ซ่อนประกาศ",
@ -355,8 +366,11 @@
"home.pending_critical_update.link": "ดูการอัปเดต", "home.pending_critical_update.link": "ดูการอัปเดต",
"home.pending_critical_update.title": "มีการอัปเดตความปลอดภัยสำคัญพร้อมใช้งาน!", "home.pending_critical_update.title": "มีการอัปเดตความปลอดภัยสำคัญพร้อมใช้งาน!",
"home.show_announcements": "แสดงประกาศ", "home.show_announcements": "แสดงประกาศ",
"ignore_notifications_modal.disclaimer": "Mastodon ไม่สามารถแจ้งผู้ใช้ว่าคุณได้เพิกเฉยการแจ้งเตือนของเขา การเพิกเฉยการแจ้งเตือนจะไม่หยุดการส่งข้อความนั้นเอง",
"ignore_notifications_modal.filter_instead": "กรองแทน", "ignore_notifications_modal.filter_instead": "กรองแทน",
"ignore_notifications_modal.filter_to_act_users": "คุณจะยังสามารถยอมรับ ปฏิเสธ หรือรายงานผู้ใช้", "ignore_notifications_modal.filter_to_act_users": "คุณจะยังสามารถยอมรับ ปฏิเสธ หรือรายงานผู้ใช้",
"ignore_notifications_modal.filter_to_avoid_confusion": "การกรองช่วยหลีกเลี่ยงความสับสนที่อาจเกิดขึ้น",
"ignore_notifications_modal.filter_to_review_separately": "คุณสามารถตรวจทานการแจ้งเตือนที่กรองอยู่แยกต่างหาก",
"ignore_notifications_modal.ignore": "เพิกเฉยการแจ้งเตือน", "ignore_notifications_modal.ignore": "เพิกเฉยการแจ้งเตือน",
"ignore_notifications_modal.limited_accounts_title": "เพิกเฉยการแจ้งเตือนจากบัญชีที่ได้รับการกลั่นกรอง?", "ignore_notifications_modal.limited_accounts_title": "เพิกเฉยการแจ้งเตือนจากบัญชีที่ได้รับการกลั่นกรอง?",
"ignore_notifications_modal.new_accounts_title": "เพิกเฉยการแจ้งเตือนจากบัญชีใหม่?", "ignore_notifications_modal.new_accounts_title": "เพิกเฉยการแจ้งเตือนจากบัญชีใหม่?",
@ -484,9 +498,13 @@
"notification.admin.report_statuses": "{name} ได้รายงาน {target} สำหรับ {category}", "notification.admin.report_statuses": "{name} ได้รายงาน {target} สำหรับ {category}",
"notification.admin.report_statuses_other": "{name} ได้รายงาน {target}", "notification.admin.report_statuses_other": "{name} ได้รายงาน {target}",
"notification.admin.sign_up": "{name} ได้ลงทะเบียน", "notification.admin.sign_up": "{name} ได้ลงทะเบียน",
"notification.admin.sign_up.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ลงทะเบียน",
"notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ",
"notification.favourite.name_and_others_with_link": "{name} และ <a>{count, plural, other {# อื่น ๆ}}</a> ได้ชื่นชอบโพสต์ของคุณ",
"notification.follow": "{name} ได้ติดตามคุณ", "notification.follow": "{name} ได้ติดตามคุณ",
"notification.follow.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ติดตามคุณ",
"notification.follow_request": "{name} ได้ขอติดตามคุณ", "notification.follow_request": "{name} ได้ขอติดตามคุณ",
"notification.follow_request.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ขอติดตามคุณ",
"notification.label.mention": "การกล่าวถึง", "notification.label.mention": "การกล่าวถึง",
"notification.label.private_mention": "การกล่าวถึงแบบส่วนตัว", "notification.label.private_mention": "การกล่าวถึงแบบส่วนตัว",
"notification.label.private_reply": "การตอบกลับแบบส่วนตัว", "notification.label.private_reply": "การตอบกลับแบบส่วนตัว",
@ -504,6 +522,7 @@
"notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว", "notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว",
"notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว", "notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว",
"notification.reblog": "{name} ได้ดันโพสต์ของคุณ", "notification.reblog": "{name} ได้ดันโพสต์ของคุณ",
"notification.reblog.name_and_others_with_link": "{name} และ <a>{count, plural, other {# อื่น ๆ}}</a> ได้ดันโพสต์ของคุณ",
"notification.relationships_severance_event": "สูญเสียการเชื่อมต่อกับ {name}", "notification.relationships_severance_event": "สูญเสียการเชื่อมต่อกับ {name}",
"notification.relationships_severance_event.account_suspension": "ผู้ดูแลจาก {from} ได้ระงับ {target} ซึ่งหมายความว่าคุณจะไม่สามารถรับการอัปเดตจากเขาหรือโต้ตอบกับเขาได้อีกต่อไป", "notification.relationships_severance_event.account_suspension": "ผู้ดูแลจาก {from} ได้ระงับ {target} ซึ่งหมายความว่าคุณจะไม่สามารถรับการอัปเดตจากเขาหรือโต้ตอบกับเขาได้อีกต่อไป",
"notification.relationships_severance_event.domain_block": "ผู้ดูแลจาก {from} ได้ปิดกั้น {target} รวมถึง {followersCount} ผู้ติดตามของคุณและ {followingCount, plural, other {# บัญชี}}ที่คุณติดตาม", "notification.relationships_severance_event.domain_block": "ผู้ดูแลจาก {from} ได้ปิดกั้น {target} รวมถึง {followersCount} ผู้ติดตามของคุณและ {followingCount, plural, other {# บัญชี}}ที่คุณติดตาม",
@ -512,7 +531,21 @@
"notification.status": "{name} เพิ่งโพสต์", "notification.status": "{name} เพิ่งโพสต์",
"notification.update": "{name} ได้แก้ไขโพสต์", "notification.update": "{name} ได้แก้ไขโพสต์",
"notification_requests.accept": "ยอมรับ", "notification_requests.accept": "ยอมรับ",
"notification_requests.accept_multiple": "{count, plural, other {ยอมรับ # คำขอ…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, other {ยอมรับคำขอ}}",
"notification_requests.confirm_accept_multiple.message": "คุณกำลังจะยอมรับ {count, plural, other {# คำขอการแจ้งเตือน}} คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
"notification_requests.confirm_accept_multiple.title": "ยอมรับคำขอการแจ้งเตือน?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, other {ปิดคำขอ}}",
"notification_requests.confirm_dismiss_multiple.message": "คุณกำลังจะปิด {count, plural, other {# คำขอการแจ้งเตือน}} คุณจะไม่สามารถเข้าถึง{count, plural, other {การแจ้งเตือน}}ได้อย่างง่ายดายอีกครั้ง คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
"notification_requests.confirm_dismiss_multiple.title": "ปิดคำขอการแจ้งเตือน?",
"notification_requests.dismiss": "ปิด", "notification_requests.dismiss": "ปิด",
"notification_requests.dismiss_multiple": "{count, plural, other {ปิด # คำขอ…}}",
"notification_requests.edit_selection": "แก้ไข",
"notification_requests.exit_selection": "เสร็จสิ้น",
"notification_requests.explainer_for_limited_account": "มีการกรองการแจ้งเตือนจากบัญชีนี้เนื่องจากมีการจำกัดบัญชีโดยผู้กลั่นกรอง",
"notification_requests.explainer_for_limited_remote_account": "มีการกรองการแจ้งเตือนจากบัญชีนี้เนื่องจากมีการจำกัดบัญชีหรือเซิร์ฟเวอร์ของบัญชีโดยผู้กลั่นกรอง",
"notification_requests.maximize": "ขยายใหญ่สุด",
"notification_requests.minimize_banner": "ย่อแบนเนอร์การแจ้งเตือนที่กรองอยู่ให้เล็กสุด",
"notification_requests.notifications_from": "การแจ้งเตือนจาก {name}", "notification_requests.notifications_from": "การแจ้งเตือนจาก {name}",
"notification_requests.title": "การแจ้งเตือนที่กรองอยู่", "notification_requests.title": "การแจ้งเตือนที่กรองอยู่",
"notification_requests.view": "ดูการแจ้งเตือน", "notification_requests.view": "ดูการแจ้งเตือน",
@ -555,8 +588,10 @@
"notifications.policy.accept": "ยอมรับ", "notifications.policy.accept": "ยอมรับ",
"notifications.policy.accept_hint": "แสดงในการแจ้งเตือน", "notifications.policy.accept_hint": "แสดงในการแจ้งเตือน",
"notifications.policy.drop": "เพิกเฉย", "notifications.policy.drop": "เพิกเฉย",
"notifications.policy.drop_hint": "ละทิ้งอย่างถาวร ไม่ให้เห็นอีกเลย",
"notifications.policy.filter": "กรอง", "notifications.policy.filter": "กรอง",
"notifications.policy.filter_hint": "ส่งไปยังกล่องขาเข้าการแจ้งเตือนที่กรองอยู่", "notifications.policy.filter_hint": "ส่งไปยังกล่องขาเข้าการแจ้งเตือนที่กรองอยู่",
"notifications.policy.filter_limited_accounts_hint": "จำกัดโดยผู้กลั่นกรองเซิร์ฟเวอร์",
"notifications.policy.filter_limited_accounts_title": "บัญชีที่ได้รับการกลั่นกรอง", "notifications.policy.filter_limited_accounts_title": "บัญชีที่ได้รับการกลั่นกรอง",
"notifications.policy.filter_new_accounts.hint": "สร้างขึ้นภายใน {days, plural, other {# วัน}}ที่ผ่านมา", "notifications.policy.filter_new_accounts.hint": "สร้างขึ้นภายใน {days, plural, other {# วัน}}ที่ผ่านมา",
"notifications.policy.filter_new_accounts_title": "บัญชีใหม่", "notifications.policy.filter_new_accounts_title": "บัญชีใหม่",
@ -606,7 +641,7 @@
"onboarding.steps.share_profile.title": "แชร์โปรไฟล์ Mastodon ของคุณ", "onboarding.steps.share_profile.title": "แชร์โปรไฟล์ Mastodon ของคุณ",
"onboarding.tips.2fa": "<strong>คุณทราบหรือไม่?</strong> คุณสามารถรักษาความปลอดภัยบัญชีของคุณได้โดยตั้งค่าการรับรองความถูกต้องด้วยสองปัจจัยในการตั้งค่าบัญชีของคุณ การรับรองความถูกต้องด้วยสองปัจจัยทำงานร่วมกับแอป TOTP ใด ๆ ที่คุณเลือก ไม่จำเป็นต้องมีหมายเลขโทรศัพท์!", "onboarding.tips.2fa": "<strong>คุณทราบหรือไม่?</strong> คุณสามารถรักษาความปลอดภัยบัญชีของคุณได้โดยตั้งค่าการรับรองความถูกต้องด้วยสองปัจจัยในการตั้งค่าบัญชีของคุณ การรับรองความถูกต้องด้วยสองปัจจัยทำงานร่วมกับแอป TOTP ใด ๆ ที่คุณเลือก ไม่จำเป็นต้องมีหมายเลขโทรศัพท์!",
"onboarding.tips.accounts_from_other_servers": "<strong>คุณทราบหรือไม่?</strong> เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ โปรไฟล์บางส่วนที่คุณเจอจะได้รับการโฮสต์ในเซิร์ฟเวอร์อื่น ๆ ที่ไม่ใช่ของคุณ และคุณยังสามารถโต้ตอบกับเขาได้อย่างไร้รอยต่อ! เซิร์ฟเวอร์ของเขาอยู่ในครึ่งหลังของชื่อผู้ใช้ของเขา!", "onboarding.tips.accounts_from_other_servers": "<strong>คุณทราบหรือไม่?</strong> เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ โปรไฟล์บางส่วนที่คุณเจอจะได้รับการโฮสต์ในเซิร์ฟเวอร์อื่น ๆ ที่ไม่ใช่ของคุณ และคุณยังสามารถโต้ตอบกับเขาได้อย่างไร้รอยต่อ! เซิร์ฟเวอร์ของเขาอยู่ในครึ่งหลังของชื่อผู้ใช้ของเขา!",
"onboarding.tips.migration": "<strong>คุณทราบหรือไม่?</strong> หากคุณรู้สึกว่า {domain} ไม่ใช่ตัวเลือกเซิร์ฟเวอร์ที่ยอดเยี่ยมสำหรับคุณในอนาคต คุณสามารถย้ายไปยังเซิร์ฟเวอร์ Mastodon อื่นได้โดยไม่สูญเสียผู้ติดตามของคุณ คุณยังสามารถโฮสต์เซิร์ฟเวอร์ของคุณเอง!", "onboarding.tips.migration": "<strong>คุณทราบหรือไม่?</strong> หากคุณรู้สึกว่า {domain} ไม่ใช่ตัวเลือกเซิร์ฟเวอร์ที่ยอดเยี่ยมสำหรับคุณในอนาคต คุณสามารถย้ายไปยังเซิร์ฟเวอร์ Mastodon อื่นได้โดยไม่สูญเสียผู้ติดตามของคุณ คุณยังสามารถโฮสต์เซิร์ฟเวอร์ของคุณเองได้อีกด้วย!",
"onboarding.tips.verification": "<strong>คุณทราบหรือไม่?</strong> คุณสามารถยืนยันบัญชีของคุณได้โดยใส่ลิงก์ไปยังโปรไฟล์ Mastodon ของคุณในเว็บไซต์ของคุณเองและเพิ่มเว็บไซต์ไปยังโปรไฟล์ของคุณ ไม่จำเป็นต้องมีค่าธรรมเนียมหรือเอกสาร!", "onboarding.tips.verification": "<strong>คุณทราบหรือไม่?</strong> คุณสามารถยืนยันบัญชีของคุณได้โดยใส่ลิงก์ไปยังโปรไฟล์ Mastodon ของคุณในเว็บไซต์ของคุณเองและเพิ่มเว็บไซต์ไปยังโปรไฟล์ของคุณ ไม่จำเป็นต้องมีค่าธรรมเนียมหรือเอกสาร!",
"password_confirmation.exceeds_maxlength": "การยืนยันรหัสผ่านเกินความยาวรหัสผ่านสูงสุดแล้ว", "password_confirmation.exceeds_maxlength": "การยืนยันรหัสผ่านเกินความยาวรหัสผ่านสูงสุดแล้ว",
"password_confirmation.mismatching": "การยืนยันรหัสผ่านไม่ตรงกัน", "password_confirmation.mismatching": "การยืนยันรหัสผ่านไม่ตรงกัน",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Takibi bırak", "confirmations.unfollow.confirm": "Takibi bırak",
"confirmations.unfollow.message": "{name} adlı kullanıcıyı takibi bırakmak istediğinden emin misin?", "confirmations.unfollow.message": "{name} adlı kullanıcıyı takibi bırakmak istediğinden emin misin?",
"confirmations.unfollow.title": "Kullanıcıyı takipten çık?", "confirmations.unfollow.title": "Kullanıcıyı takipten çık?",
"content_warning.hide": "Gönderiyi gizle",
"content_warning.show": "Yine de göster",
"conversation.delete": "Sohbeti sil", "conversation.delete": "Sohbeti sil",
"conversation.mark_as_read": "Okundu olarak işaretle", "conversation.mark_as_read": "Okundu olarak işaretle",
"conversation.open": "Sohbeti görüntüle", "conversation.open": "Sohbeti görüntüle",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur", "filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur",
"filter_modal.select_filter.title": "Bu gönderiyi süzgeçle", "filter_modal.select_filter.title": "Bu gönderiyi süzgeçle",
"filter_modal.title.status": "Bir gönderi süzgeçle", "filter_modal.title.status": "Bir gönderi süzgeçle",
"filter_warning.matches_filter": "“{title}” filtresiyle eşleşiyor",
"filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}}", "filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}}",
"filtered_notifications_banner.title": "Filtrelenmiş bildirimler", "filtered_notifications_banner.title": "Filtrelenmiş bildirimler",
"firehose.all": "Tümü", "firehose.all": "Tümü",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Відписатися", "confirmations.unfollow.confirm": "Відписатися",
"confirmations.unfollow.message": "Ви впевнені, що хочете відписатися від {name}?", "confirmations.unfollow.message": "Ви впевнені, що хочете відписатися від {name}?",
"confirmations.unfollow.title": "Відписатися від користувача?", "confirmations.unfollow.title": "Відписатися від користувача?",
"content_warning.hide": "Сховати допис",
"content_warning.show": "Усе одно показати",
"conversation.delete": "Видалити бесіду", "conversation.delete": "Видалити бесіду",
"conversation.mark_as_read": "Позначити як прочитане", "conversation.mark_as_read": "Позначити як прочитане",
"conversation.open": "Переглянути бесіду", "conversation.open": "Переглянути бесіду",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Використати наявну категорію або створити нову", "filter_modal.select_filter.subtitle": "Використати наявну категорію або створити нову",
"filter_modal.select_filter.title": "Фільтрувати цей допис", "filter_modal.select_filter.title": "Фільтрувати цей допис",
"filter_modal.title.status": "Фільтрувати допис", "filter_modal.title.status": "Фільтрувати допис",
"filter_warning.matches_filter": "Збігається з фільтром “{title}”",
"filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати", "filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати",
"filtered_notifications_banner.title": "Відфільтровані сповіщення", "filtered_notifications_banner.title": "Відфільтровані сповіщення",
"firehose.all": "Всі", "firehose.all": "Всі",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "Bỏ theo dõi", "confirmations.unfollow.confirm": "Bỏ theo dõi",
"confirmations.unfollow.message": "Bạn thật sự muốn bỏ theo dõi {name}?", "confirmations.unfollow.message": "Bạn thật sự muốn bỏ theo dõi {name}?",
"confirmations.unfollow.title": "Bỏ theo dõi?", "confirmations.unfollow.title": "Bỏ theo dõi?",
"content_warning.hide": "Ẩn tút",
"content_warning.show": "Nhấn để xem",
"conversation.delete": "Xóa tin nhắn này", "conversation.delete": "Xóa tin nhắn này",
"conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.mark_as_read": "Đánh dấu là đã đọc",
"conversation.open": "Xem toàn bộ tin nhắn", "conversation.open": "Xem toàn bộ tin nhắn",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới", "filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới",
"filter_modal.select_filter.title": "Lọc tút này", "filter_modal.select_filter.title": "Lọc tút này",
"filter_modal.title.status": "Lọc một tút", "filter_modal.title.status": "Lọc một tút",
"filter_warning.matches_filter": "Khớp bộ lọc “{title}”",
"filtered_notifications_banner.pending_requests": "Từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết", "filtered_notifications_banner.pending_requests": "Từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết",
"filtered_notifications_banner.title": "Thông báo đã lọc", "filtered_notifications_banner.title": "Thông báo đã lọc",
"firehose.all": "Toàn bộ", "firehose.all": "Toàn bộ",

View file

@ -192,6 +192,8 @@
"confirmations.unfollow.confirm": "取消关注", "confirmations.unfollow.confirm": "取消关注",
"confirmations.unfollow.message": "你确定要取消关注 {name} 吗?", "confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
"confirmations.unfollow.title": "是否取消关注用户?", "confirmations.unfollow.title": "是否取消关注用户?",
"content_warning.hide": "隐藏嘟文",
"content_warning.show": "仍然显示",
"conversation.delete": "删除对话", "conversation.delete": "删除对话",
"conversation.mark_as_read": "标记为已读", "conversation.mark_as_read": "标记为已读",
"conversation.open": "查看对话", "conversation.open": "查看对话",
@ -299,6 +301,7 @@
"filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别", "filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别",
"filter_modal.select_filter.title": "过滤此嘟文", "filter_modal.select_filter.title": "过滤此嘟文",
"filter_modal.title.status": "过滤一条嘟文", "filter_modal.title.status": "过滤一条嘟文",
"filter_warning.matches_filter": "命中过滤规则 “{title}”",
"filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}", "filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}",
"filtered_notifications_banner.title": "通知(已过滤)", "filtered_notifications_banner.title": "通知(已过滤)",
"firehose.all": "全部", "firehose.all": "全部",

View file

@ -97,6 +97,8 @@
"block_modal.title": "是否封鎖該使用者?", "block_modal.title": "是否封鎖該使用者?",
"block_modal.you_wont_see_mentions": "您不會見到提及他們的嘟文。", "block_modal.you_wont_see_mentions": "您不會見到提及他們的嘟文。",
"boost_modal.combo": "下次您可以按 {combo} 跳過", "boost_modal.combo": "下次您可以按 {combo} 跳過",
"boost_modal.reblog": "是否要轉嘟?",
"boost_modal.undo_reblog": "是否要取消轉嘟?",
"bundle_column_error.copy_stacktrace": "複製錯誤報告", "bundle_column_error.copy_stacktrace": "複製錯誤報告",
"bundle_column_error.error.body": "無法繪製請求的頁面。這可能是因為我們程式碼中的臭蟲或是瀏覽器的相容問題。", "bundle_column_error.error.body": "無法繪製請求的頁面。這可能是因為我們程式碼中的臭蟲或是瀏覽器的相容問題。",
"bundle_column_error.error.title": "糟糕!", "bundle_column_error.error.title": "糟糕!",
@ -467,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "您不會見到提及他們的嘟文。", "mute_modal.you_wont_see_mentions": "您不會見到提及他們的嘟文。",
"mute_modal.you_wont_see_posts": "他們仍可讀取您的嘟文,但您不會見到他們的。", "mute_modal.you_wont_see_posts": "他們仍可讀取您的嘟文,但您不會見到他們的。",
"navigation_bar.about": "關於", "navigation_bar.about": "關於",
"navigation_bar.administration": "管理介面",
"navigation_bar.advanced_interface": "以進階網頁介面開啟", "navigation_bar.advanced_interface": "以進階網頁介面開啟",
"navigation_bar.blocks": "已封鎖的使用者", "navigation_bar.blocks": "已封鎖的使用者",
"navigation_bar.bookmarks": "書籤", "navigation_bar.bookmarks": "書籤",
@ -483,6 +486,7 @@
"navigation_bar.follows_and_followers": "跟隨中與跟隨者", "navigation_bar.follows_and_followers": "跟隨中與跟隨者",
"navigation_bar.lists": "列表", "navigation_bar.lists": "列表",
"navigation_bar.logout": "登出", "navigation_bar.logout": "登出",
"navigation_bar.moderation": "站務",
"navigation_bar.mutes": "已靜音的使用者", "navigation_bar.mutes": "已靜音的使用者",
"navigation_bar.opened_in_classic_interface": "預設於經典網頁介面中開啟嘟文、帳號與其他特定頁面。", "navigation_bar.opened_in_classic_interface": "預設於經典網頁介面中開啟嘟文、帳號與其他特定頁面。",
"navigation_bar.personal": "個人", "navigation_bar.personal": "個人",

View file

@ -1,4 +1,23 @@
export const PERMISSION_INVITE_USERS = 0x0000000000010000; export const PERMISSION_INVITE_USERS = 0x0000000000010000;
export const PERMISSION_MANAGE_USERS = 0x0000000000000400; export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020; export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020;
export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010; export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010;
export const PERMISSION_VIEW_DASHBOARD = 0x0000000000000008;
// These helpers don't quite align with the names/categories in UserRole,
// but are likely "good enough" for the use cases at present.
//
// See: https://docs.joinmastodon.org/entities/Role/#permission-flags
export function canViewAdminDashboard(permissions: number) {
return (
(permissions & PERMISSION_VIEW_DASHBOARD) === PERMISSION_VIEW_DASHBOARD
);
}
export function canManageReports(permissions: number) {
return (
(permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS
);
}

View file

@ -1,3 +1,4 @@
import { forceGroupedNotifications } from 'mastodon/initial_state';
import type { RootState } from 'mastodon/store'; import type { RootState } from 'mastodon/store';
/* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
@ -25,6 +26,10 @@ export const selectSettingsNotificationsQuickFilterAdvanced = (
) => ) =>
state.settings.getIn(['notifications', 'quickFilter', 'advanced']) as boolean; state.settings.getIn(['notifications', 'quickFilter', 'advanced']) as boolean;
export const selectUseGroupedNotifications = (state: RootState) =>
forceGroupedNotifications ||
(state.settings.getIn(['notifications', 'groupingBeta']) as boolean);
export const selectSettingsNotificationsShowUnread = (state: RootState) => export const selectSettingsNotificationsShowUnread = (state: RootState) =>
state.settings.getIn(['notifications', 'showUnread']) as boolean; state.settings.getIn(['notifications', 'showUnread']) as boolean;

View file

@ -48,8 +48,9 @@ export const loadingBarMiddleware = (
let isRejected = false; let isRejected = false;
if ( if (
isAsyncThunkAction(action) isAsyncThunkAction(action) &&
// TODO: once we get the first use-case for it, add a check for skipLoading 'useLoadingBar' in action.meta &&
action.meta.useLoadingBar
) { ) {
if (isThunkActionPending(action)) isPending = true; if (isThunkActionPending(action)) isPending = true;
else if (isThunkActionFulfilled(action)) isFulfilled = true; else if (isThunkActionFulfilled(action)) isFulfilled = true;

View file

@ -15,7 +15,7 @@ export interface AsyncThunkRejectValue {
} }
interface AppMeta { interface AppMeta {
skipLoading?: boolean; useLoadingBar?: boolean;
} }
export const createAppAsyncThunk = createAsyncThunk.withTypes<{ export const createAppAsyncThunk = createAsyncThunk.withTypes<{
@ -34,7 +34,7 @@ interface AppThunkConfig {
type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>; type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>;
interface AppThunkOptions { interface AppThunkOptions {
skipLoading?: boolean; useLoadingBar?: boolean;
} }
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>(); const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
@ -54,15 +54,20 @@ export function createThunk<Arg = void, Returned = void>(
const result = await creator(arg, { dispatch, getState }); const result = await creator(arg, { dispatch, getState });
return fulfillWithValue(result, { return fulfillWithValue(result, {
skipLoading: options.skipLoading, useLoadingBar: options.useLoadingBar,
}); });
} catch (error) { } catch (error) {
return rejectWithValue({ error }, { skipLoading: true }); return rejectWithValue(
{ error },
{
useLoadingBar: options.useLoadingBar,
},
);
} }
}, },
{ {
getPendingMeta() { getPendingMeta() {
if (options.skipLoading) return { skipLoading: true }; if (options.useLoadingBar) return { useLoadingBar: true };
return {}; return {};
}, },
}, },
@ -148,7 +153,7 @@ export function createDataLoadingThunk<
* You can also omit this parameter and pass `thunkOptions` directly * You can also omit this parameter and pass `thunkOptions` directly
* @param maybeThunkOptions * @param maybeThunkOptions
* Additional Mastodon specific options for the thunk. Currently supports: * Additional Mastodon specific options for the thunk. Currently supports:
* - `skipLoading` to avoid showing the loading bar when the request is in progress * - `useLoadingBar` to display a loading bar while this action is pending. Defaults to true.
* @returns The created thunk * @returns The created thunk
*/ */
export function createDataLoadingThunk< export function createDataLoadingThunk<
@ -198,6 +203,6 @@ export function createDataLoadingThunk<
return undefined as Returned; return undefined as Returned;
else return result; else return result;
}, },
thunkOptions, { useLoadingBar: thunkOptions?.useLoadingBar ?? true },
); );
} }

View file

@ -6142,6 +6142,48 @@ a.status-card {
} }
} }
&__status {
border: 1px solid var(--modal-border-color);
border-radius: 8px;
padding: 8px;
cursor: pointer;
&__account {
display: flex;
align-items: center;
gap: 4px;
margin-bottom: 8px;
color: $dark-text-color;
bdi {
color: inherit;
}
}
&__content {
display: -webkit-box;
font-size: 15px;
line-height: 22px;
color: $dark-text-color;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
max-height: 4 * 22px;
overflow: hidden;
p,
a {
color: inherit;
}
}
.reply-indicator__attachments {
margin-top: 0;
font-size: 15px;
line-height: 22px;
color: $dark-text-color;
}
}
&__bullet-points { &__bullet-points {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -6219,6 +6261,12 @@ a.status-card {
gap: 8px; gap: 8px;
justify-content: flex-end; justify-content: flex-end;
&__hint {
font-size: 14px;
line-height: 20px;
color: $dark-text-color;
}
.link-button { .link-button {
padding: 10px 12px; padding: 10px 12px;
font-weight: 600; font-weight: 600;
@ -6226,6 +6274,18 @@ a.status-card {
} }
} }
.hotkey-combination {
display: inline-flex;
align-items: center;
gap: 4px;
kbd {
padding: 3px 5px;
border: 1px solid var(--background-border-color);
border-radius: 4px;
}
}
.boost-modal, .boost-modal,
.report-modal, .report-modal,
.actions-modal, .actions-modal,
@ -10579,6 +10639,7 @@ noscript {
} }
.reply-indicator__attachments { .reply-indicator__attachments {
margin-top: 0;
font-size: 15px; font-size: 15px;
line-height: 22px; line-height: 22px;
color: $dark-text-color; color: $dark-text-color;

View file

@ -132,6 +132,7 @@ class InitialStateSerializer < ActiveModel::Serializer
trends_as_landing_page: Setting.trends_as_landing_page, trends_as_landing_page: Setting.trends_as_landing_page,
trends_enabled: Setting.trends, trends_enabled: Setting.trends,
version: instance_presenter.version, version: instance_presenter.version,
force_grouped_notifications: ENV['FORCE_GROUPED_NOTIFICATIONS'] == 'true',
} }
end end

View file

@ -286,6 +286,7 @@ ar:
filter_by_action: تصفية بحسب الإجراء filter_by_action: تصفية بحسب الإجراء
filter_by_user: تصفية حسب المستخدم filter_by_user: تصفية حسب المستخدم
title: سِجلّ التفتيش و المعاينة title: سِجلّ التفتيش و المعاينة
unavailable_instance: "(اسم النطاق غير متوفر)"
announcements: announcements:
destroyed_msg: تم حذف الإعلان بنجاح! destroyed_msg: تم حذف الإعلان بنجاح!
edit: edit:
@ -990,6 +991,7 @@ ar:
delete: حذف delete: حذف
edit_preset: تعديل نموذج التحذير edit_preset: تعديل نموذج التحذير
empty: لم تحدد أي إعدادات تحذير مسبقة بعد. empty: لم تحدد أي إعدادات تحذير مسبقة بعد.
title: نماذج التحذير
webhooks: webhooks:
add_new: إضافة نقطة نهاية add_new: إضافة نقطة نهاية
delete: حذف delete: حذف

View file

@ -954,6 +954,7 @@ cy:
name: Enw name: Enw
newest: Mwyaf newydd newest: Mwyaf newydd
oldest: Hynaf oldest: Hynaf
open: Gweld yn gyhoeddus
reset: Ailosod reset: Ailosod
review: Adolygu statws review: Adolygu statws
search: Chwilio search: Chwilio

View file

@ -9,9 +9,10 @@ ro:
already_authenticated: Ești deja conectat. already_authenticated: Ești deja conectat.
inactive: Contul tău nu este încă activat. inactive: Contul tău nu este încă activat.
invalid: "%{authentication_keys} sau parolă greșită." invalid: "%{authentication_keys} sau parolă greșită."
last_attempt: Mai ai încă o încercare înainte de a bloca contul. last_attempt: Mai ai încă o încercare înainte ca contul tău să fie blocat.
locked: Contul tău este blocat. locked: Contul tău este blocat.
not_found_in_database: "%{authentication_keys} sau parolă greșită." not_found_in_database: "%{authentication_keys} sau parolă greșită."
omniauth_user_creation_failure: Eroare la crearea unui cont pentru această identitate.
pending: Contul tău este încă în curs de revizuire. pending: Contul tău este încă în curs de revizuire.
timeout: Sesiunea ta a expirat. Te rugăm să te conectezi din nou pentru a continua. timeout: Sesiunea ta a expirat. Te rugăm să te conectezi din nou pentru a continua.
unauthenticated: Trebuie să te conectezi sau să te înregistrezi înainte de a continua. unauthenticated: Trebuie să te conectezi sau să te înregistrezi înainte de a continua.
@ -20,7 +21,7 @@ ro:
confirmation_instructions: confirmation_instructions:
action: Verifică adresa de e-mail action: Verifică adresa de e-mail
action_with_app: Confirmați și reveniți la %{app} action_with_app: Confirmați și reveniți la %{app}
explanation: Ai creat un cont pe %{host} cu această adresă de e-mail. Ești la un click distanță de a o activa. Dacă nu ai fost tu, ignoră acest e-mail. explanation: Ai creat un cont pe %{host} cu această adresă de e-mail. Ești la un clic distanță de a-l activa. Dacă nu ai fost tu, ignoră acest e-mail.
explanation_when_pending: Ai solicitat o invitație către %{host} cu această adresă de e-mail. Odată ce îți confirmi adresa de e-mail, îți vom revizui cererea. Te poți autentifica pentru a-ți schimba detaliile sau pentru a-ți șterge contul, dar nu poți accesa majoritatea funcțiilor până când contul tău nu este aprobat. Dacă cererea ta este respinsă, datele tale vor fi șterse, astfel încât nu va fi necesară nicio altă acțiune din partea ta. Dacă nu ai fost tu, ignoră acest e-mail. explanation_when_pending: Ai solicitat o invitație către %{host} cu această adresă de e-mail. Odată ce îți confirmi adresa de e-mail, îți vom revizui cererea. Te poți autentifica pentru a-ți schimba detaliile sau pentru a-ți șterge contul, dar nu poți accesa majoritatea funcțiilor până când contul tău nu este aprobat. Dacă cererea ta este respinsă, datele tale vor fi șterse, astfel încât nu va fi necesară nicio altă acțiune din partea ta. Dacă nu ai fost tu, ignoră acest e-mail.
extra_html: Te rugăm să verifici și <a href="%{terms_path}">regulile serverului</a> și <a href="%{policy_path}">termenii noștri de serviciu</a>. extra_html: Te rugăm să verifici și <a href="%{terms_path}">regulile serverului</a> și <a href="%{policy_path}">termenii noștri de serviciu</a>.
subject: 'Mastodon: Instrucțiuni de confirmare pentru %{instance}' subject: 'Mastodon: Instrucțiuni de confirmare pentru %{instance}'
@ -28,12 +29,12 @@ ro:
email_changed: email_changed:
explanation: 'Adresa de e-mail pentru contul tău este schimbată la:' explanation: 'Adresa de e-mail pentru contul tău este schimbată la:'
extra: Dacă nu v-ați schimbat adresa de e-mail, probabil că cineva a obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău. extra: Dacă nu v-ați schimbat adresa de e-mail, probabil că cineva a obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău.
subject: E-mail schimbat subject: 'Mastodon: E-mail schimbat'
title: Noua adresa de e-mail title: Noua adresa de e-mail
password_change: password_change:
explanation: Parola contului tău a fost schimbată. explanation: Parola contului tău a fost schimbată.
extra: Dacă nu v-ați schimbat parola, este posibil ca cineva să fi obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău. extra: Dacă nu v-ați schimbat parola, este posibil ca cineva să fi obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău.
subject: Parolă schimbată subject: 'Mastodon: Parolă schimbată'
title: Parolă schimbată title: Parolă schimbată
reconfirmation_instructions: reconfirmation_instructions:
explanation: Confirmă noua adresă pentru a schimba adresa de e-mail. explanation: Confirmă noua adresă pentru a schimba adresa de e-mail.
@ -44,25 +45,25 @@ ro:
action: Schimbă parola action: Schimbă parola
explanation: Ați solicitat o nouă parolă pentru contul dvs. explanation: Ați solicitat o nouă parolă pentru contul dvs.
extra: Dacă nu ați solicitat acest lucru, ignorați acest e-mail. Parola dvs. nu se va schimba până când nu veți accesa link-ul de mai sus și nu veți crea unul nou. extra: Dacă nu ați solicitat acest lucru, ignorați acest e-mail. Parola dvs. nu se va schimba până când nu veți accesa link-ul de mai sus și nu veți crea unul nou.
subject: Instrucțiuni pentru resetarea parolei subject: 'Mastodon: Instrucțiuni pentru resetarea parolei'
title: Resetare parolă title: Resetare parolă
two_factor_disabled: two_factor_disabled:
explanation: Conectarea este acum posibilă folosind doar adresa de e-mail și parola. explanation: Conectarea este acum posibilă folosind doar adresa de e-mail și parola.
subject: Autentificare cu doi factori dezactivată subject: 'Mastodon: Autentificare cu doi factori dezactivată'
subtitle: Autentificarea cu doi factori pentru contul dvs. a fost dezactivată. subtitle: Autentificarea cu doi factori pentru contul dvs. a fost dezactivată.
title: 2FA dezactivat title: A2F dezactivată
two_factor_enabled: two_factor_enabled:
explanation: Pentru autentificare va fi necesar un token generat de aplicația TOTP asociată. explanation: Pentru autentificare va fi necesar un token generat de aplicația TOTP asociată.
subject: Autentificare în doi pași activată subject: 'Mastodon: Autentificare în doi pași activată'
subtitle: Autentificarea cu doi factori a fost activată pentru contul dvs. subtitle: Autentificarea cu doi factori a fost activată pentru contul dvs.
title: 2FA activat title: A2F activată
two_factor_recovery_codes_changed: two_factor_recovery_codes_changed:
explanation: Codurile anterioare de recuperare au fost invalidate și unele noi generate. explanation: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi.
subject: Recuperare în doi factori subject: 'Mastodon: Coduri de recuperare în doi pași regenerate'
subtitle: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi. subtitle: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi.
title: Coduri de recuperare 2FA modificate title: Codurile de recuperare în doi pași au fost modificate
unlock_instructions: unlock_instructions:
subject: Instrucțiuni de deblocare subject: 'Mastodon: Instrucțiuni de deblocare'
webauthn_credential: webauthn_credential:
added: added:
explanation: Următoarea cheie de securitate a fost adăugată în contul tău explanation: Următoarea cheie de securitate a fost adăugată în contul tău
@ -80,7 +81,7 @@ ro:
webauthn_enabled: webauthn_enabled:
explanation: Autentificarea cu cheie de securitate a fost activată pentru contul dvs. explanation: Autentificarea cu cheie de securitate a fost activată pentru contul dvs.
extra: Cheia ta de securitate poate fi acum folosită pentru conectare. extra: Cheia ta de securitate poate fi acum folosită pentru conectare.
subject: 'Mastodon: Autentificarea cheii de securitate activată' subject: 'Mastodon: Autentificarea prin chei de securitate activată'
title: Chei de securitate activate title: Chei de securitate activate
omniauth_callbacks: omniauth_callbacks:
failure: Nu te-am putut autentifica de la %{kind} deoarece "%{reason}". failure: Nu te-am putut autentifica de la %{kind} deoarece "%{reason}".
@ -97,7 +98,7 @@ ro:
signed_up_but_inactive: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. nu este încă activat. signed_up_but_inactive: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. nu este încă activat.
signed_up_but_locked: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. este blocat. signed_up_but_locked: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. este blocat.
signed_up_but_pending: Un mesaj cu un link de confirmare a fost trimis la adresa ta de e-mail. După ce faceți clic pe link, vă vom revizui cererea. Veți fi notificat dacă este aprobat. signed_up_but_pending: Un mesaj cu un link de confirmare a fost trimis la adresa ta de e-mail. După ce faceți clic pe link, vă vom revizui cererea. Veți fi notificat dacă este aprobat.
signed_up_but_unconfirmed: Un mesaj cu un link de confirmare a fost trimis la adresa ta de e-mail. Vă rugăm să urmaţi link-ul pentru a vă activa contul. Vă rugăm să verificaţi folderul spam dacă nu aţi primit acest e-mail. signed_up_but_unconfirmed: Un mesaj cu un link de confirmare a fost trimis la adresa ta de e-mail. Vă rugăm să urmați link-ul pentru a vă activa contul. Vă rugăm să verificați folderul spam dacă nu ați primit acest e-mail.
update_needs_confirmation: Ți-ai actualizat contul cu succes, dar trebuie să verificăm noua ta adresă de e-mail. Vă rugăm să verificați adresa de e-mail și să urmați link-ul de confirmare pentru a confirma noua dvs. adresă de e-mail. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. update_needs_confirmation: Ți-ai actualizat contul cu succes, dar trebuie să verificăm noua ta adresă de e-mail. Vă rugăm să verificați adresa de e-mail și să urmați link-ul de confirmare pentru a confirma noua dvs. adresă de e-mail. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail.
updated: Contul dvs. a fost actualizat cu succes. updated: Contul dvs. a fost actualizat cu succes.
sessions: sessions:
@ -105,7 +106,7 @@ ro:
signed_in: Conectat cu succes. signed_in: Conectat cu succes.
signed_out: Deconectat cu succes. signed_out: Deconectat cu succes.
unlocks: unlocks:
send_instructions: Veţi primi un e-mail cu instrucţiuni despre cum să vă deblocaţi contul în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. send_instructions: Veți primi un e-mail cu instrucțiuni despre cum să vă deblocați contul în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail.
send_paranoid_instructions: Dacă contul tău există, vei primi un e-mail cu instrucțiuni pentru cum să-l deblochezi în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. send_paranoid_instructions: Dacă contul tău există, vei primi un e-mail cu instrucțiuni pentru cum să-l deblochezi în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail.
unlocked: Contul tău a fost deblocat cu succes. Te rugăm să te autentifici pentru a continua. unlocked: Contul tău a fost deblocat cu succes. Te rugăm să te autentifici pentru a continua.
errors: errors:
@ -118,4 +119,4 @@ ro:
not_saved: not_saved:
few: "%{count} erori au împiedicat salvarea acestui %{resource}:" few: "%{count} erori au împiedicat salvarea acestui %{resource}:"
one: 'O eroare a împiedicat salvarea acestui %{resource}:' one: 'O eroare a împiedicat salvarea acestui %{resource}:'
other: "%{count} de erori au împiedicat salvarea acestui %{resource}:" other: "%{count} erori au împiedicat salvarea acestui %{resource}:"

View file

@ -35,24 +35,24 @@ lt:
redirect_uri: Naudok po vieną eilutę kiekvienam URI. redirect_uri: Naudok po vieną eilutę kiekvienam URI.
scopes: Atskirk aprėptis tarpais. Palik tuščią, jei nori naudoti numatytąsias aprėtis. scopes: Atskirk aprėptis tarpais. Palik tuščią, jei nori naudoti numatytąsias aprėtis.
index: index:
application: Programėlė application: Programa
callback_url: Atgalinis URL callback_url: Atgalinis URL
delete: Ištrinti delete: Ištrinti
empty: Neturi jokių programėlių. empty: Neturi jokių programų.
name: Pavadinimas name: Pavadinimas
new: Nauja programėlė new: Nauja programa
scopes: Aprėptys scopes: Aprėptys
show: Rodyti show: Rodyti
title: Tavo programėlės title: Tavo programos
new: new:
title: Nauja programėlė title: Nauja programa
show: show:
actions: Veiksmai actions: Veiksmai
application_id: Kliento raktas application_id: Kliento programos raktas
callback_urls: Atgalinių URL adresų callback_urls: Atgalinių URL
scopes: Aprėptys scopes: Aprėptys
secret: Kliento paslaptis secret: Kliento programos paslaptis
title: 'Programėlė: %{name}' title: 'Programa: %{name}'
authorizations: authorizations:
buttons: buttons:
authorize: Leisti authorize: Leisti
@ -60,48 +60,48 @@ lt:
error: error:
title: Įvyko klaida. title: Įvyko klaida.
new: new:
prompt_html: "%{client_name} norėtų gauti leidimą prieigos prie tavo paskyros. Tai trečiosios šalies programėlė. <strong>Jei ja nepasitiki, neturėtum leisti.</strong>" prompt_html: "%{client_name} norėtų gauti leidimą pasiekti tavo paskyrą. Tai trečiosios šalies programa. <strong>Jei ja nepasitiki, tada neturėtum leisti.</strong>"
review_permissions: Peržiūrėti leidimus review_permissions: Peržiūrėti leidimus
title: Reikalingas leidimas title: Privalomas leidimas
show: show:
title: Nukopijuok šį tapatybės patvirtinimo kodą ir įklijuok jį į programėlę. title: Nukopijuok šį leidimo kodą ir įklijuok jį į programą.
authorized_applications: authorized_applications:
buttons: buttons:
revoke: Naikinti revoke: Naikinti
confirmations: confirmations:
revoke: Ar esi įsitikinęs (-usi)? revoke: Ar esi įsitikinęs (-usi)?
index: index:
authorized_at: Įgaliota %{date} authorized_at: Leidžiama %{date}
description_html: Tai programėlės, kurios gali pasiekti tavo paskyrą naudojant API. Jei čia yra programėlių, kurių neatpažįsti, arba jei programėlė elgiasi netinkamai, gali panaikinti jos prieigą. description_html: Tai programos, kurios gali pasiekti tavo paskyrą naudojant API. Jei čia yra programų, kurių neatpažįsti, arba jei programa elgiasi netinkamai, gali panaikinti jos prieigą.
last_used_at: Paskutinį kartą naudota %{date} last_used_at: Paskutinį kartą naudota %{date}
never_used: Niekada nenaudotas never_used: Niekada nenaudota
scopes: Leidimai scopes: Leidimai
superapp: Vidinis superapp: Vidinis
title: Tavo leidžiamos programėlės title: Tavo leidžiamos programos
errors: errors:
messages: messages:
access_denied: Išteklių savininkas (-ė) arba įgaliojimų serveris atmetė užklausą. access_denied: Išteklių savininkas (-ė) arba leidžiamų serveris atmetė užklausą.
credential_flow_not_configured: Išteklių savininko slaptažodžio kredencialų srautas nepavyko, nes Doorkeeper.configure.resource_owner_from_credentials nėra nesukonfigūruotas. credential_flow_not_configured: Išteklių savininko slaptažodžio kredencialų srautas nepavyko, nes Doorkeeper.configure.resource_owner_from_credentials nėra nesukonfigūruotas.
invalid_client: Kliento tapatybės nustatymas nepavyko dėl nežinomo kliento, neįtraukto kliento tapatybės nustatymo arba nepalaikomo tapatybės nustatymo metodo. invalid_client: Kliento programos tapatybės nustatymas nepavyko dėl nežinomo kliento programos, neįtraukto kliento programos tapatybės nustatymo arba nepalaikomo tapatybės nustatymo metodo.
invalid_code_challenge_method: Kodo iššūkio das turi būti S256. Paprastas nepalaikomas. invalid_code_challenge_method: Kodo iššūkio metodas turi būti S256. Paprastas nepalaikomas.
invalid_grant: Pateiktas įgaliojimas yra netinkamas, pasibaigęs, panaikintas, neatitinka įgaliojimo užklausoje naudoto nukreipimo URI arba buvo išduotas kitam klientui. invalid_grant: Pateiktas leidimo suteikimas yra netinkamas, nebegaliojantis, panaikintas, neatitinka leidimo užklausoje naudoto nukreipimo URI arba buvo išduotas kitam kliento programui.
invalid_redirect_uri: Nukreipimo uri įtrauktas yra netinkamas. invalid_redirect_uri: Įtrauktas nukreipimo URI netinkamas.
invalid_request: invalid_request:
missing_param: 'Trūksta privalomo parametro: %{value}.' missing_param: 'Trūksta privalomo parametro: %{value}.'
request_not_authorized: Užklausą reikia įgalioti. Reikalingo parametro užklausai įgalioti trūksta arba jis netinkamas. request_not_authorized: Užklausą reikia leisti. Trūksta privalomo parametro užklausai leisti arba jis netinkamas.
unknown: Užklausoje trūksta privalomo parametro, turi nepalaikomą parametro reikšmę arba yra kitaip netinkamai suformuota. unknown: Užklausai trūksta privalomo parametro, įtraukta nepalaikoma parametro reikšmė arba ji yra kitaip netaisyklingas.
invalid_resource_owner: Pateikti išteklių savininko įgaliojimai yra netinkami arba išteklių savininko negalima surasti. invalid_resource_owner: Pateikti išteklių savininko kredencialai yra netinkami arba išteklių savininko negalima surasti.
invalid_scope: Užklausos aprėptis yra netinkama, nežinoma arba netaisyklingas. invalid_scope: Užklausos aprėptis yra netinkama, nežinoma arba netaisyklingas.
invalid_token: invalid_token:
expired: Baigėsi prieigos rakto galiojimas. expired: Prieigos raktas nebegalioja.
revoked: Prieigos raktas buvo panaikintas. revoked: Prieigos raktas buvo panaikintas.
unknown: Prieigos raktas yra netinkamas. unknown: Prieigos raktas netinkamas.
resource_owner_authenticator_not_configured: Išteklių savininko suradimas nepavyko dėl to, kad Doorkeeper.configure.resource_owner_authenticator nėra sukonfigūruotas. resource_owner_authenticator_not_configured: Išteklių savininko suradimas nepavyko, nes Doorkeeper.configure.resource_owner_authenticator nėra sukonfigūruotas.
server_error: Įgaliojimų serveris susidūrė su netikėta sąlyga, dėl kurios negalėjo užpildyti užklausos. server_error: Leidimo serveris susidūrė su netikėta sąlyga, dėl kurios negalėjo užpildyti užklausos.
temporarily_unavailable: Įgaliojimų serveris šiuo metu negali apdoroti užklausos dėl laikinos serverio perkrovos arba techninės priežiūros. temporarily_unavailable: Įgaliojimų serveris šiuo metu negali apdoroti užklausos dėl laikinos serverio perkrovos arba techninės priežiūros.
unauthorized_client: Klientas nėra įgaliotas atlikti šią užklausą šiuo metodu. unauthorized_client: Klientas nėra leidžiamas atlikti šią užklausą šiuo metodu.
unsupported_grant_type: Įgaliojimų suteikimo tipas nepalaikomas įgaliojimų serveryje. unsupported_grant_type: Leidimo suteikimo tipas nepalaikomas leidimo serveryje.
unsupported_response_type: Įgaliojimų serveris nepalaiko šio atsako tipo. unsupported_response_type: Leidimo serveris nepalaiko šio atsakymo tipo.
flash: flash:
applications: applications:
create: create:
@ -123,7 +123,7 @@ lt:
admin/accounts: Paskyrų administravimas admin/accounts: Paskyrų administravimas
admin/all: Visi administraciniai funkcijos admin/all: Visi administraciniai funkcijos
admin/reports: Ataskaitų administravimas admin/reports: Ataskaitų administravimas
all: Pilna prieiga prie tavo Mastodon paskyros all: Pilna prieiga prie tavo Mastodon paskyros
blocks: Blokavimai blocks: Blokavimai
bookmarks: Žymės bookmarks: Žymės
conversations: Pokalbiai conversations: Pokalbiai
@ -136,7 +136,7 @@ lt:
media: Medijos priedai media: Medijos priedai
mutes: Nutildymai mutes: Nutildymai
notifications: Pranešimai notifications: Pranešimai
profile: Tavo Mastodon profilis profile: Tavo Mastodon profilis
push: Tiesioginiai pranešimai push: Tiesioginiai pranešimai
reports: Ataskaitos reports: Ataskaitos
search: Paieška search: Paieška
@ -151,25 +151,25 @@ lt:
scopes: scopes:
admin:read: skaityti visus duomenis serveryje admin:read: skaityti visus duomenis serveryje
admin:read:accounts: skaityti slaptą visų paskyrų informaciją admin:read:accounts: skaityti slaptą visų paskyrų informaciją
admin:read:canonical_email_blocks: skaityti slaptą visų kanoninių el. laiško blokavimų informaciją admin:read:canonical_email_blocks: skaityti slaptą visų kanoninių el. laiškų blokavimų informaciją
admin:read:domain_allows: skaityti slaptą visų domeno leidimus informaciją admin:read:domain_allows: skaityti slaptą visų serverių leidžiamų informaciją
admin:read:domain_blocks: skaityti slaptą visų domeno blokavimų informaciją admin:read:domain_blocks: skaityti slaptą visų serverių blokavimų informaciją
admin:read:email_domain_blocks: skaityti slaptą visų el. laiško domeno blokavimų informaciją admin:read:email_domain_blocks: skaityti slaptą visų el. laiškų serverių blokavimų informaciją
admin:read:ip_blocks: skaityti slaptą visų IP blokavimų informaciją admin:read:ip_blocks: skaityti slaptą visų IP blokavimų informaciją
admin:read:reports: skaityti slaptą visų ataskaitų ir praneštų paskyrų informaciją admin:read:reports: skaityti slaptą visų ataskaitų ir praneštų paskyrų informaciją
admin:write: modifikuoti visus duomenis serveryje admin:write: modifikuoti visus duomenis serveryje
admin:write:accounts: atlikti paskyrų prižiūrėjimo veiksmus admin:write:accounts: atlikti paskyrų prižiūrėjimo veiksmus
admin:write:canonical_email_blocks: atlikti kanoninių el. laiško blokavimų prižiūrėjimo veiksmus admin:write:canonical_email_blocks: atlikti kanoninių el. laiškų blokavimų prižiūrėjimo veiksmus
admin:write:domain_allows: atlikti domeno leidimų prižiūrėjimo veiksmus admin:write:domain_allows: atlikti serverio leidžiamų prižiūrėjimo veiksmus
admin:write:domain_blocks: atlikti domeno blokavimų prižiūrėjimo veiksmus admin:write:domain_blocks: atlikti serverio blokavimų prižiūrėjimo veiksmus
admin:write:email_domain_blocks: atlikti el. laiško domenų blokavimų prižiūrėjimo veiksmus admin:write:email_domain_blocks: atlikti el. laiškų serverių blokavimų prižiūrėjimo veiksmus
admin:write:ip_blocks: atlikti IP blokavimų prižiūrėjimo veiksmus admin:write:ip_blocks: atlikti IP blokavimų prižiūrėjimo veiksmus
admin:write:reports: atlikti ataskaitų prižiūrėjimo veiksmus admin:write:reports: atlikti ataskaitų prižiūrėjimo veiksmus
crypto: naudoti visapusį šifravimą crypto: naudoti visapusį šifravimą
follow: modifikuoti paskyros sąryšius follow: modifikuoti paskyros sąryšius
profile: skaityti tik tavo paskyros profilio informaciją profile: skaityti tik tavo paskyros profilio informaciją
push: gauti tiesioginius pranešimus push: gauti tiesioginius pranešimus
read: skaityti visus paskyros duomenis read: skaityti visus tavo paskyros duomenis
read:accounts: matyti paskyrų informaciją read:accounts: matyti paskyrų informaciją
read:blocks: matyti tavo blokavimus read:blocks: matyti tavo blokavimus
read:bookmarks: matyti tavo žymes read:bookmarks: matyti tavo žymes

View file

@ -898,6 +898,7 @@ es-AR:
name: Nombre name: Nombre
newest: Lo más reciente newest: Lo más reciente
oldest: Lo más antiguo oldest: Lo más antiguo
open: Ver públicamente
reset: Restablecer reset: Restablecer
review: Estado de revisión review: Estado de revisión
search: Buscar search: Buscar

View file

@ -898,6 +898,7 @@ es-MX:
name: Nombre name: Nombre
newest: Más reciente newest: Más reciente
oldest: Menos reciente oldest: Menos reciente
open: Ver públicamente
reset: Reiniciar reset: Reiniciar
review: Estado de revisión review: Estado de revisión
search: Buscar search: Buscar

View file

@ -898,6 +898,7 @@ es:
name: Nombre name: Nombre
newest: Más reciente newest: Más reciente
oldest: Menos reciente oldest: Menos reciente
open: Ver públicamente
reset: Reiniciar reset: Reiniciar
review: Estado de revisión review: Estado de revisión
search: Buscar search: Buscar

View file

@ -1203,7 +1203,7 @@ fr:
add_new: Ajouter un nouveau hashtag add_new: Ajouter un nouveau hashtag
errors: errors:
limit: Vous avez déjà mis en avant le nombre maximum de hashtags limit: Vous avez déjà mis en avant le nombre maximum de hashtags
hint_html: "<strong>Que sont les hashtags mis en avant ?</strong> Ils sont affichés en évidence sur votre profil public et permettent aux gens de parcourir vos messages publics qui utilisent ces hashtags. Ils sont un excellent outil pour garder la trace dactivités créatrices ou de projets de long terme." hint_html: "<strong>Mettez en évidence vos hashtags les plus importants sur votre profil.</strong> Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres publications."
filters: filters:
contexts: contexts:
account: Profils account: Profils

View file

@ -940,6 +940,7 @@ ga:
name: Ainm name: Ainm
newest: Is nuaí newest: Is nuaí
oldest: Is sine oldest: Is sine
open: Amharc go Poiblí
reset: Athshocraigh reset: Athshocraigh
review: Stádas athbhreithnithe review: Stádas athbhreithnithe
search: Cuardach search: Cuardach

View file

@ -926,6 +926,7 @@ gd:
name: Ainm name: Ainm
newest: As ùire newest: As ùire
oldest: As sine oldest: As sine
open: Seall gu poblach
reset: Ath-shuidhich reset: Ath-shuidhich
review: Dèan lèirmheas air an staid review: Dèan lèirmheas air an staid
search: Lorg search: Lorg

View file

@ -886,6 +886,7 @@ ko:
name: 이름 name: 이름
newest: 최신 newest: 최신
oldest: 오래된 순 oldest: 오래된 순
open: 공개시점으로 보기
reset: 초기화 reset: 초기화
review: 심사 상태 review: 심사 상태
search: 검색 search: 검색

View file

@ -898,6 +898,7 @@ nn:
name: Namn name: Namn
newest: Nyaste newest: Nyaste
oldest: Eldste oldest: Eldste
open: Vis offentleg
reset: Nullstill reset: Nullstill
review: Sjå gjennom status review: Sjå gjennom status
search: Søk search: Søk

View file

@ -211,6 +211,7 @@ et:
setting_default_privacy: Postituse nähtavus setting_default_privacy: Postituse nähtavus
setting_default_sensitive: Alati märgista meedia tundlikuks setting_default_sensitive: Alati märgista meedia tundlikuks
setting_delete_modal: Näita kinnitusdialoogi enne postituse kustutamist setting_delete_modal: Näita kinnitusdialoogi enne postituse kustutamist
setting_disable_hover_cards: Keela profiili eelvaade kui hõljutada
setting_disable_swiping: Keela pühkimisliigutused setting_disable_swiping: Keela pühkimisliigutused
setting_display_media: Meedia kuvarežiim setting_display_media: Meedia kuvarežiim
setting_display_media_default: Vaikimisi setting_display_media_default: Vaikimisi
@ -242,11 +243,13 @@ et:
warn: Peida hoiatusega warn: Peida hoiatusega
form_admin_settings: form_admin_settings:
activity_api_enabled: Avalda agregeeritud statistika kasutajaaktiivsuse kohta API-s activity_api_enabled: Avalda agregeeritud statistika kasutajaaktiivsuse kohta API-s
app_icon: Äpi ikoon
backups_retention_period: Kasutajate arhiivi talletusperiood backups_retention_period: Kasutajate arhiivi talletusperiood
bootstrap_timeline_accounts: Alati soovita neid kontosid uutele kasutajatele bootstrap_timeline_accounts: Alati soovita neid kontosid uutele kasutajatele
closed_registrations_message: Kohandatud teade, kui liitumine pole võimalik closed_registrations_message: Kohandatud teade, kui liitumine pole võimalik
content_cache_retention_period: Kaugsisu säilitamise aeg content_cache_retention_period: Kaugsisu säilitamise aeg
custom_css: Kohandatud CSS custom_css: Kohandatud CSS
favicon: Favicon
mascot: Kohandatud maskott (kunagine) mascot: Kohandatud maskott (kunagine)
media_cache_retention_period: Meediapuhvri talletusperiood media_cache_retention_period: Meediapuhvri talletusperiood
peers_api_enabled: Avalda avastatud serverite loetelu API kaudu peers_api_enabled: Avalda avastatud serverite loetelu API kaudu

View file

@ -872,16 +872,19 @@ th:
message_html: "<strong>ที่เก็บข้อมูลวัตถุของคุณกำหนดค่าไม่ถูกต้อง ความเป็นส่วนตัวของผู้ใช้ของคุณตกอยู่ในความเสี่ยง</strong>" message_html: "<strong>ที่เก็บข้อมูลวัตถุของคุณกำหนดค่าไม่ถูกต้อง ความเป็นส่วนตัวของผู้ใช้ของคุณตกอยู่ในความเสี่ยง</strong>"
tags: tags:
moderation: moderation:
not_trendable: ไม่สามารถขึ้นแนวโน้มได้
not_usable: ไม่สามารถใช้งานได้ not_usable: ไม่สามารถใช้งานได้
pending_review: การตรวจทานที่รอดำเนินการ pending_review: การตรวจทานที่รอดำเนินการ
review_requested: ต้องการการตรวจทาน review_requested: ต้องการการตรวจทาน
reviewed: ตรวจทานแล้ว reviewed: ตรวจทานแล้ว
title: สถานะ title: สถานะ
trendable: ขึ้นแนวโน้มได้
unreviewed: ไม่ได้รับการตรวจทาน unreviewed: ไม่ได้รับการตรวจทาน
usable: ใช้งานได้ usable: ใช้งานได้
name: ชื่อ name: ชื่อ
newest: ใหม่ที่สุด newest: ใหม่ที่สุด
oldest: เก่าที่สุด oldest: เก่าที่สุด
open: ดูแบบสาธารณะ
reset: รีเซ็ต reset: รีเซ็ต
review: สถานะการตรวจทาน review: สถานะการตรวจทาน
search: ค้นหา search: ค้นหา
@ -1904,7 +1907,7 @@ th:
seamless_external_login: คุณได้เข้าสู่ระบบผ่านบริการภายนอก ดังนั้นการตั้งค่ารหัสผ่านและอีเมลจึงไม่พร้อมใช้งาน seamless_external_login: คุณได้เข้าสู่ระบบผ่านบริการภายนอก ดังนั้นการตั้งค่ารหัสผ่านและอีเมลจึงไม่พร้อมใช้งาน
signed_in_as: 'ลงชื่อเข้าเป็น:' signed_in_as: 'ลงชื่อเข้าเป็น:'
verification: verification:
extra_instructions_html: <strong>เคล็ดลับ:</strong> ลิงก์ในเว็บไซต์ของคุณสามารถเป็นแบบมองไม่เห็น ส่วนที่สำคัญคือ <code>rel="me"</code> ซึ่งป้องกันการแอบอ้างในเว็บไซต์ที่มีเนื้อหาที่ผู้ใช้สร้างขึ้น คุณยังสามารถใช้แท็ก <code>link</code> ในส่วนหัวของหน้าแทนที่จะเป็น <code>a</code> แต่ HTML ต้องเข้าถึงได้โดยไม่มีการประมวลผล JavaScript extra_instructions_html: <strong>เคล็ดลับ:</strong> ลิงก์ในเว็บไซต์ของคุณสามารถเป็นแบบมองไม่เห็น ส่วนที่สำคัญคือ <code>rel="me"</code> ซึ่งป้องกันการแอบอ้างในเว็บไซต์ที่มีเนื้อหาที่ผู้ใช้สร้างขึ้น คุณยังสามารถใช้แท็ก <code>link</code> ในส่วนหัวของหน้าแทนที่จะเป็น <code>a</code> ได้อีกด้วย แต่ HTML ต้องเข้าถึงได้โดยไม่มีการประมวลผล JavaScript
here_is_how: นี่คือวิธี here_is_how: นี่คือวิธี
hint_html: "<strong>การยืนยันตัวตนของคุณใน Mastodon มีไว้สำหรับทุกคน</strong> โดยอิงตามมาตรฐานเว็บแบบเปิด ฟรีตอนนี้และตลอดไป ทั้งหมดที่คุณจำเป็นต้องมีคือเว็บไซต์ส่วนบุคคลที่ผู้คนรู้จักคุณ เมื่อคุณเชื่อมโยงไปยังเว็บไซต์นี้จากโปรไฟล์ของคุณ เราจะตรวจสอบว่าเว็บไซต์เชื่อมโยงกลับไปยังโปรไฟล์ของคุณและแสดงตัวบ่งชี้ที่มองเห็นได้ในโปรไฟล์" hint_html: "<strong>การยืนยันตัวตนของคุณใน Mastodon มีไว้สำหรับทุกคน</strong> โดยอิงตามมาตรฐานเว็บแบบเปิด ฟรีตอนนี้และตลอดไป ทั้งหมดที่คุณจำเป็นต้องมีคือเว็บไซต์ส่วนบุคคลที่ผู้คนรู้จักคุณ เมื่อคุณเชื่อมโยงไปยังเว็บไซต์นี้จากโปรไฟล์ของคุณ เราจะตรวจสอบว่าเว็บไซต์เชื่อมโยงกลับไปยังโปรไฟล์ของคุณและแสดงตัวบ่งชี้ที่มองเห็นได้ในโปรไฟล์"
instructions_html: คัดลอกแล้ววางโค้ดด้านล่างลงใน HTML ของเว็บไซต์ของคุณ จากนั้นเพิ่มที่อยู่ของเว็บไซต์ของคุณลงในหนึ่งในช่องพิเศษในโปรไฟล์ของคุณจากแท็บ "แก้ไขโปรไฟล์" และบันทึกการเปลี่ยนแปลง instructions_html: คัดลอกแล้ววางโค้ดด้านล่างลงใน HTML ของเว็บไซต์ของคุณ จากนั้นเพิ่มที่อยู่ของเว็บไซต์ของคุณลงในหนึ่งในช่องพิเศษในโปรไฟล์ของคุณจากแท็บ "แก้ไขโปรไฟล์" และบันทึกการเปลี่ยนแปลง

View file

@ -884,6 +884,7 @@ vi:
name: Tên name: Tên
newest: Mới nhất newest: Mới nhất
oldest: Cũ nhất oldest: Cũ nhất
open: Xem công khai
reset: Đặt lại reset: Đặt lại
review: Phê duyệt review: Phê duyệt
search: Tìm kiếm search: Tìm kiếm

View file

@ -884,6 +884,7 @@ zh-CN:
name: 名称 name: 名称
newest: 最新 newest: 最新
oldest: 最早 oldest: 最早
open: 以公开身份查看
reset: 重置 reset: 重置
review: 审核状态 review: 审核状态
search: 搜索 search: 搜索

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
Chewy.strategy(:mastodon) do Chewy.strategy(:mastodon) do
Dir[Rails.root.join('db', 'seeds', '*.rb')].each do |seed| Rails.root.glob('db/seeds/*.rb').each do |seed|
load seed load seed
end end
end end

View file

@ -57,7 +57,8 @@ services:
# - '127.0.0.1:9200:9200' # - '127.0.0.1:9200:9200'
web: web:
build: . # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# build: .
image: ghcr.io/mastodon/mastodon:v4.3.0-beta.1 image: ghcr.io/mastodon/mastodon:v4.3.0-beta.1
restart: always restart: always
env_file: .env.production env_file: .env.production
@ -78,7 +79,10 @@ services:
- ./public/system:/mastodon/public/system - ./public/system:/mastodon/public/system
streaming: streaming:
build: . # You can uncomment the following lines if you want to not use the prebuilt image, for example if you have local code changes
# build:
# dockerfile: ./streaming/Dockerfile
# context: .
image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-beta.1 image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-beta.1
restart: always restart: always
env_file: .env.production env_file: .env.production
@ -88,7 +92,7 @@ services:
- internal_network - internal_network
healthcheck: healthcheck:
# prettier-ignore # prettier-ignore
test: ['CMD-SHELL', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1'"] test: ['CMD-SHELL', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1"]
ports: ports:
- '127.0.0.1:4000:4000' - '127.0.0.1:4000:4000'
depends_on: depends_on:

View file

@ -15,7 +15,7 @@ namespace :branding do
output_dest = Rails.root.join('app', 'javascript', 'images', 'mailer') output_dest = Rails.root.join('app', 'javascript', 'images', 'mailer')
# Displayed size is 64px, at 3x it's 192px # Displayed size is 64px, at 3x it's 192px
Dir[Rails.root.join('app', 'javascript', 'images', 'icons', '*.svg')].each do |path| Rails.root.glob('app/javascript/images/icons/*.svg').each do |path|
rsvg_convert.run(input: path, size: 192, output: output_dest.join("#{File.basename(path, '.svg')}.png")) rsvg_convert.run(input: path, size: 192, output: output_dest.join("#{File.basename(path, '.svg')}.png"))
end end

View file

@ -20,7 +20,7 @@ end
def find_used_icons def find_used_icons
icons_by_weight_and_size = {} icons_by_weight_and_size = {}
Dir[Rails.root.join('app', 'javascript', '**', '*.*s*')].map do |path| Rails.root.glob('app/javascript/**/*.*s*').map do |path|
File.open(path, 'r') do |file| File.open(path, 'r') do |file|
pattern = %r{\Aimport .* from '@/material-icons/(?<weight>[0-9]+)-(?<size>[0-9]+)px/(?<icon>[^-]*)(?<fill>-fill)?.svg\?react';} pattern = %r{\Aimport .* from '@/material-icons/(?<weight>[0-9]+)-(?<size>[0-9]+)px/(?<icon>[^-]*)(?<fill>-fill)?.svg\?react';}
file.each_line do |line| file.each_line do |line|

View file

@ -98,7 +98,7 @@ namespace :repo do
missing_yaml_files = I18n.available_locales.reject { |locale| Rails.root.join('config', 'locales', "#{locale}.yml").exist? } missing_yaml_files = I18n.available_locales.reject { |locale| Rails.root.join('config', 'locales', "#{locale}.yml").exist? }
missing_json_files = I18n.available_locales.reject { |locale| Rails.root.join('app', 'javascript', 'mastodon', 'locales', "#{locale}.json").exist? } missing_json_files = I18n.available_locales.reject { |locale| Rails.root.join('app', 'javascript', 'mastodon', 'locales', "#{locale}.json").exist? }
locales_in_files = Dir[Rails.root.join('config', 'locales', '*.yml')].map do |path| locales_in_files = Rails.root.glob('config/locales/*.yml').map do |path|
file_name = File.basename(path, '.yml') file_name = File.basename(path, '.yml')
file_name.gsub(/\A(doorkeeper|devise|activerecord|simple_form)\./, '').to_sym file_name.gsub(/\A(doorkeeper|devise|activerecord|simple_form)\./, '').to_sym
end.uniq.compact end.uniq.compact

View file

@ -1,7 +1,7 @@
{ {
"name": "@mastodon/mastodon", "name": "@mastodon/mastodon",
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"packageManager": "yarn@4.4.0", "packageManager": "yarn@4.4.1",
"engines": { "engines": {
"node": ">=18" "node": ">=18"
}, },

View file

@ -1,17 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe AboutController do
render_views
describe 'GET #show' do
before do
get :show
end
it 'returns http success' do
expect(response).to have_http_status(200)
end
end
end

View file

@ -6,19 +6,30 @@ describe Admin::DashboardController do
render_views render_views
describe 'GET #index' do describe 'GET #index' do
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Owner')) }
before do before do
allow(Admin::SystemCheck).to receive(:perform).and_return([ stub_system_checks
Admin::SystemCheck::Message.new(:database_schema_check), Fabricate :software_update
Admin::SystemCheck::Message.new(:rules_check, nil, admin_rules_path), sign_in(user)
Admin::SystemCheck::Message.new(:sidekiq_process_check, 'foo, bar'),
])
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin'))
end end
it 'returns 200' do it 'returns http success and body with system check messages' do
get :index get :index
expect(response).to have_http_status(200) expect(response)
.to have_http_status(200)
.and have_attributes(
body: include(I18n.t('admin.system_checks.software_version_patch_check.message_html'))
)
end
private
def stub_system_checks
stub_const 'Admin::SystemCheck::ACTIVE_CHECKS', [
Admin::SystemCheck::SoftwareVersionCheck,
]
end end
end end
end end

View file

@ -1,22 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Api::OEmbedController do
render_views
let(:alice) { Fabricate(:account, username: 'alice') }
let(:status) { Fabricate(:status, text: 'Hello world', account: alice) }
describe 'GET #show' do
before do
request.host = Rails.configuration.x.local_domain
get :show, params: { url: short_account_status_url(alice, status) }, format: :json
end
it 'returns private cache control headers', :aggregate_failures do
expect(response).to have_http_status(200)
expect(response.headers['Cache-Control']).to include('private, no-store')
end
end
end

View file

@ -1,24 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
describe Api::Web::SettingsController do
render_views
let!(:user) { Fabricate(:user) }
describe 'PATCH #update' do
it 'redirects to about page' do
sign_in(user)
patch :update, format: :json, params: { data: { 'onboarded' => true } }
user.reload
expect(response).to have_http_status(200)
expect(user_web_setting.data['onboarded']).to eq('true')
end
def user_web_setting
Web::Setting.where(user: user).first
end
end
end

View file

@ -1,19 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
describe CustomCssController do
render_views
describe 'GET #show' do
before do
get :show
end
it 'returns http success' do
expect(response).to have_http_status(200)
end
it_behaves_like 'cacheable response'
end
end

View file

@ -1,18 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
describe EmojisController do
render_views
let(:emoji) { Fabricate(:custom_emoji, shortcode: 'coolcat') }
describe 'GET #show' do
let(:response) { get :show, params: { id: emoji.id, format: :json } }
it 'returns the right response' do
expect(response).to have_http_status 200
expect(body_as_json[:name]).to eq ':coolcat:'
end
end
end

View file

@ -1,14 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
describe HealthController do
render_views
describe 'GET #show' do
it 'returns http success' do
get :show
expect(response).to have_http_status(200)
end
end
end

View file

@ -1,30 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe HomeController do
render_views
describe 'GET #index' do
subject { get :index }
context 'when not signed in' do
it 'returns http success' do
request.path = '/'
expect(subject).to have_http_status(:success)
end
end
context 'when signed in' do
let(:user) { Fabricate(:user) }
before do
sign_in(user)
end
it 'returns http success' do
expect(subject).to have_http_status(:success)
end
end
end
end

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