diff options
Diffstat (limited to 'app/javascript')
192 files changed, 8948 insertions, 3296 deletions
diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js index cb2c682a4..58b636602 100644 --- a/app/javascript/mastodon/actions/accounts.js +++ b/app/javascript/mastodon/actions/accounts.js @@ -1,6 +1,5 @@ import api, { getLinks } from '../api'; -import openDB from '../storage/db'; -import { importAccount, importFetchedAccount, importFetchedAccounts } from './importer'; +import { importFetchedAccount, importFetchedAccounts } from './importer'; export const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST'; export const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS'; @@ -74,45 +73,13 @@ export const FOLLOW_REQUEST_REJECT_REQUEST = 'FOLLOW_REQUEST_REJECT_REQUEST'; export const FOLLOW_REQUEST_REJECT_SUCCESS = 'FOLLOW_REQUEST_REJECT_SUCCESS'; export const FOLLOW_REQUEST_REJECT_FAIL = 'FOLLOW_REQUEST_REJECT_FAIL'; -function getFromDB(dispatch, getState, index, id) { - return new Promise((resolve, reject) => { - const request = index.get(id); - - request.onerror = reject; - - request.onsuccess = () => { - if (!request.result) { - reject(); - return; - } - - dispatch(importAccount(request.result)); - resolve(request.result.moved && getFromDB(dispatch, getState, index, request.result.moved)); - }; - }); -} - export function fetchAccount(id) { return (dispatch, getState) => { dispatch(fetchRelationships([id])); - - if (getState().getIn(['accounts', id], null) !== null) { - return; - } - dispatch(fetchAccountRequest(id)); - openDB().then(db => getFromDB( - dispatch, - getState, - db.transaction('accounts', 'read').objectStore('accounts').index('id'), - id, - ).then(() => db.close(), error => { - db.close(); - throw error; - })).catch(() => api(getState).get(`/api/v1/accounts/${id}`).then(response => { + api(getState).get(`/api/v1/accounts/${id}`).then(response => { dispatch(importFetchedAccount(response.data)); - })).then(() => { dispatch(fetchAccountSuccess()); }).catch(error => { dispatch(fetchAccountFail(id, error)); @@ -142,14 +109,14 @@ export function fetchAccountFail(id, error) { }; }; -export function followAccount(id, reblogs = true) { +export function followAccount(id, options = { reblogs: true }) { return (dispatch, getState) => { const alreadyFollowing = getState().getIn(['relationships', id, 'following']); const locked = getState().getIn(['accounts', id, 'locked'], false); dispatch(followAccountRequest(id, locked)); - api(getState).post(`/api/v1/accounts/${id}/follow`, { reblogs }).then(response => { + api(getState).post(`/api/v1/accounts/${id}/follow`, options).then(response => { dispatch(followAccountSuccess(response.data, alreadyFollowing)); }).catch(error => { dispatch(followAccountFail(error, locked)); @@ -290,11 +257,11 @@ export function unblockAccountFail(error) { }; -export function muteAccount(id, notifications) { +export function muteAccount(id, notifications, duration=0) { return (dispatch, getState) => { dispatch(muteAccountRequest(id)); - api(getState).post(`/api/v1/accounts/${id}/mute`, { notifications }).then(response => { + api(getState).post(`/api/v1/accounts/${id}/mute`, { notifications, duration }).then(response => { // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers dispatch(muteAccountSuccess(response.data, getState().get('statuses'))); }).catch(error => { diff --git a/app/javascript/mastodon/actions/app.js b/app/javascript/mastodon/actions/app.js index 414968f7d..c817c8708 100644 --- a/app/javascript/mastodon/actions/app.js +++ b/app/javascript/mastodon/actions/app.js @@ -8,3 +8,10 @@ export const focusApp = () => ({ export const unfocusApp = () => ({ type: APP_UNFOCUS, }); + +export const APP_LAYOUT_CHANGE = 'APP_LAYOUT_CHANGE'; + +export const changeLayout = layout => ({ + type: APP_LAYOUT_CHANGE, + layout, +}); diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 030922520..891403969 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -152,9 +152,7 @@ export function submitCompose(routerHistory) { 'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']), }, }).then(function (response) { - if (response.data.visibility === 'direct' && getState().getIn(['conversations', 'mounted']) <= 0 && routerHistory) { - routerHistory.push('/timelines/direct'); - } else if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) { + if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) { routerHistory.goBack(); } diff --git a/app/javascript/mastodon/actions/lists.js b/app/javascript/mastodon/actions/lists.js index d736bacef..5ab922436 100644 --- a/app/javascript/mastodon/actions/lists.js +++ b/app/javascript/mastodon/actions/lists.js @@ -150,10 +150,10 @@ export const createListFail = error => ({ error, }); -export const updateList = (id, title, shouldReset) => (dispatch, getState) => { +export const updateList = (id, title, shouldReset, replies_policy) => (dispatch, getState) => { dispatch(updateListRequest(id)); - api(getState).put(`/api/v1/lists/${id}`, { title }).then(({ data }) => { + api(getState).put(`/api/v1/lists/${id}`, { title, replies_policy }).then(({ data }) => { dispatch(updateListSuccess(data)); if (shouldReset) { diff --git a/app/javascript/mastodon/actions/markers.js b/app/javascript/mastodon/actions/markers.js index 37d1ddccf..16a3df8f6 100644 --- a/app/javascript/mastodon/actions/markers.js +++ b/app/javascript/mastodon/actions/markers.js @@ -1,8 +1,10 @@ import api from '../api'; import { debounce } from 'lodash'; import compareId from '../compare_id'; -import { showAlertForError } from './alerts'; +export const MARKERS_FETCH_REQUEST = 'MARKERS_FETCH_REQUEST'; +export const MARKERS_FETCH_SUCCESS = 'MARKERS_FETCH_SUCCESS'; +export const MARKERS_FETCH_FAIL = 'MARKERS_FETCH_FAIL'; export const MARKERS_SUBMIT_SUCCESS = 'MARKERS_SUBMIT_SUCCESS'; export const synchronouslySubmitMarkers = () => (dispatch, getState) => { @@ -26,15 +28,19 @@ export const synchronouslySubmitMarkers = () => (dispatch, getState) => { }, body: JSON.stringify(params), }); + return; } else if (navigator && navigator.sendBeacon) { // Failing that, we can use sendBeacon, but we have to encode the data as // FormData for DoorKeeper to recognize the token. const formData = new FormData(); + formData.append('bearer_token', accessToken); + for (const [id, value] of Object.entries(params)) { formData.append(`${id}[last_read_id]`, value.last_read_id); } + if (navigator.sendBeacon('/api/v1/markers', formData)) { return; } @@ -57,8 +63,8 @@ export const synchronouslySubmitMarkers = () => (dispatch, getState) => { const _buildParams = (state) => { const params = {}; - const lastHomeId = state.getIn(['timelines', 'home', 'items', 0]); - const lastNotificationId = state.getIn(['notifications', 'items', 0, 'id']); + const lastHomeId = state.getIn(['timelines', 'home', 'items']).find(item => item !== null); + const lastNotificationId = state.getIn(['notifications', 'lastReadId']); if (lastHomeId && compareId(lastHomeId, state.getIn(['markers', 'home'])) > 0) { params.home = { @@ -82,11 +88,9 @@ const debouncedSubmitMarkers = debounce((dispatch, getState) => { return; } - api().post('/api/v1/markers', params).then(() => { + api(getState).post('/api/v1/markers', params).then(() => { dispatch(submitMarkersSuccess(params)); - }).catch(error => { - dispatch(showAlertForError(error)); - }); + }).catch(() => {}); }, 300000, { leading: true, trailing: true }); export function submitMarkersSuccess({ home, notifications }) { @@ -97,6 +101,48 @@ export function submitMarkersSuccess({ home, notifications }) { }; }; -export function submitMarkers() { - return (dispatch, getState) => debouncedSubmitMarkers(dispatch, getState); +export function submitMarkers(params = {}) { + const result = (dispatch, getState) => debouncedSubmitMarkers(dispatch, getState); + + if (params.immediate === true) { + debouncedSubmitMarkers.flush(); + } + + return result; +}; + +export const fetchMarkers = () => (dispatch, getState) => { + const params = { timeline: ['notifications'] }; + + dispatch(fetchMarkersRequest()); + + api(getState).get('/api/v1/markers', { params }).then(response => { + dispatch(fetchMarkersSuccess(response.data)); + }).catch(error => { + dispatch(fetchMarkersFail(error)); + }); +}; + +export function fetchMarkersRequest() { + return { + type: MARKERS_FETCH_REQUEST, + skipLoading: true, + }; +}; + +export function fetchMarkersSuccess(markers) { + return { + type: MARKERS_FETCH_SUCCESS, + markers, + skipLoading: true, + }; +}; + +export function fetchMarkersFail(error) { + return { + type: MARKERS_FETCH_FAIL, + error, + skipLoading: true, + skipAlert: true, + }; }; diff --git a/app/javascript/mastodon/actions/mutes.js b/app/javascript/mastodon/actions/mutes.js index 9f645faee..d8874f353 100644 --- a/app/javascript/mastodon/actions/mutes.js +++ b/app/javascript/mastodon/actions/mutes.js @@ -13,6 +13,7 @@ export const MUTES_EXPAND_FAIL = 'MUTES_EXPAND_FAIL'; export const MUTES_INIT_MODAL = 'MUTES_INIT_MODAL'; export const MUTES_TOGGLE_HIDE_NOTIFICATIONS = 'MUTES_TOGGLE_HIDE_NOTIFICATIONS'; +export const MUTES_CHANGE_DURATION = 'MUTES_CHANGE_DURATION'; export function fetchMutes() { return (dispatch, getState) => { @@ -104,3 +105,12 @@ export function toggleHideNotifications() { dispatch({ type: MUTES_TOGGLE_HIDE_NOTIFICATIONS }); }; } + +export function changeMuteDuration(duration) { + return dispatch => { + dispatch({ + type: MUTES_CHANGE_DURATION, + duration, + }); + }; +} diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index a26844f84..3464ac995 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -16,6 +16,7 @@ import { getFiltersRegex } from '../selectors'; import { usePendingItems as preferPendingItems } from 'mastodon/initial_state'; import compareId from 'mastodon/compare_id'; import { searchTextFromRawStatus } from 'mastodon/actions/importer/normalizer'; +import { requestNotificationPermission } from '../utils/notifications'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP'; @@ -33,6 +34,12 @@ export const NOTIFICATIONS_LOAD_PENDING = 'NOTIFICATIONS_LOAD_PENDING'; export const NOTIFICATIONS_MOUNT = 'NOTIFICATIONS_MOUNT'; export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT'; + +export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; + +export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; +export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; + defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -59,7 +66,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) { let filtered = false; - if (notification.type === 'mention') { + if (['mention', 'status'].includes(notification.type)) { const dropRegex = filters[0]; const regex = filters[1]; const searchIndex = searchTextFromRawStatus(notification.status); @@ -232,3 +239,47 @@ export const mountNotifications = () => ({ export const unmountNotifications = () => ({ type: NOTIFICATIONS_UNMOUNT, }); + + +export const markNotificationsAsRead = () => ({ + type: NOTIFICATIONS_MARK_AS_READ, +}); + +// Browser support +export function setupBrowserNotifications() { + return dispatch => { + dispatch(setBrowserSupport('Notification' in window)); + if ('Notification' in window) { + dispatch(setBrowserPermission(Notification.permission)); + } + + if ('Notification' in window && 'permissions' in navigator) { + navigator.permissions.query({ name: 'notifications' }).then((status) => { + status.onchange = () => dispatch(setBrowserPermission(Notification.permission)); + }).catch(console.warn); + } + }; +} + +export function requestBrowserPermission(callback = noOp) { + return dispatch => { + requestNotificationPermission((permission) => { + dispatch(setBrowserPermission(permission)); + callback(permission); + }); + }; +}; + +export function setBrowserSupport (value) { + return { + type: NOTIFICATIONS_SET_BROWSER_SUPPORT, + value, + }; +} + +export function setBrowserPermission (value) { + return { + type: NOTIFICATIONS_SET_BROWSER_PERMISSION, + value, + }; +} diff --git a/app/javascript/mastodon/actions/onboarding.js b/app/javascript/mastodon/actions/onboarding.js index a1dd3a731..42d8ea33f 100644 --- a/app/javascript/mastodon/actions/onboarding.js +++ b/app/javascript/mastodon/actions/onboarding.js @@ -1,8 +1,21 @@ import { changeSetting, saveSettings } from './settings'; +import { requestBrowserPermission } from './notifications'; export const INTRODUCTION_VERSION = 20181216044202; export const closeOnboarding = () => dispatch => { dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION)); dispatch(saveSettings()); + + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'status'], true)); + dispatch(saveSettings()); + } + })); }; diff --git a/app/javascript/mastodon/actions/picture_in_picture.js b/app/javascript/mastodon/actions/picture_in_picture.js new file mode 100644 index 000000000..4085cb59e --- /dev/null +++ b/app/javascript/mastodon/actions/picture_in_picture.js @@ -0,0 +1,38 @@ +// @ts-check + +export const PICTURE_IN_PICTURE_DEPLOY = 'PICTURE_IN_PICTURE_DEPLOY'; +export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; + +/** + * @typedef MediaProps + * @property {string} src + * @property {boolean} muted + * @property {number} volume + * @property {number} currentTime + * @property {string} poster + * @property {string} backgroundColor + * @property {string} foregroundColor + * @property {string} accentColor + */ + +/** + * @param {string} statusId + * @param {string} accountId + * @param {string} playerType + * @param {MediaProps} props + * @return {object} + */ +export const deployPictureInPicture = (statusId, accountId, playerType, props) => ({ + type: PICTURE_IN_PICTURE_DEPLOY, + statusId, + accountId, + playerType, + props, +}); + +/* + * @return {object} + */ +export const removePictureInPicture = () => ({ + type: PICTURE_IN_PICTURE_REMOVE, +}); diff --git a/app/javascript/mastodon/actions/statuses.js b/app/javascript/mastodon/actions/statuses.js index e565e0b0a..3fc7c0702 100644 --- a/app/javascript/mastodon/actions/statuses.js +++ b/app/javascript/mastodon/actions/statuses.js @@ -1,9 +1,7 @@ import api from '../api'; -import openDB from '../storage/db'; -import { evictStatus } from '../storage/modifier'; import { deleteFromTimelines } from './timelines'; -import { importFetchedStatus, importFetchedStatuses, importAccount, importStatus, importFetchedAccount } from './importer'; +import { importFetchedStatus, importFetchedStatuses, importFetchedAccount } from './importer'; import { ensureComposeIsVisible } from './compose'; export const STATUS_FETCH_REQUEST = 'STATUS_FETCH_REQUEST'; @@ -40,48 +38,6 @@ export function fetchStatusRequest(id, skipLoading) { }; }; -function getFromDB(dispatch, getState, accountIndex, index, id) { - return new Promise((resolve, reject) => { - const request = index.get(id); - - request.onerror = reject; - - request.onsuccess = () => { - const promises = []; - - if (!request.result) { - reject(); - return; - } - - dispatch(importStatus(request.result)); - - if (getState().getIn(['accounts', request.result.account], null) === null) { - promises.push(new Promise((accountResolve, accountReject) => { - const accountRequest = accountIndex.get(request.result.account); - - accountRequest.onerror = accountReject; - accountRequest.onsuccess = () => { - if (!request.result) { - accountReject(); - return; - } - - dispatch(importAccount(accountRequest.result)); - accountResolve(); - }; - })); - } - - if (request.result.reblog && getState().getIn(['statuses', request.result.reblog], null) === null) { - promises.push(getFromDB(dispatch, getState, accountIndex, index, request.result.reblog)); - } - - resolve(Promise.all(promises)); - }; - }); -} - export function fetchStatus(id) { return (dispatch, getState) => { const skipLoading = getState().getIn(['statuses', id], null) !== null; @@ -94,23 +50,10 @@ export function fetchStatus(id) { dispatch(fetchStatusRequest(id, skipLoading)); - openDB().then(db => { - const transaction = db.transaction(['accounts', 'statuses'], 'read'); - const accountIndex = transaction.objectStore('accounts').index('id'); - const index = transaction.objectStore('statuses').index('id'); - - return getFromDB(dispatch, getState, accountIndex, index, id).then(() => { - db.close(); - }, error => { - db.close(); - throw error; - }); - }).then(() => { - dispatch(fetchStatusSuccess(skipLoading)); - }, () => api(getState).get(`/api/v1/statuses/${id}`).then(response => { + api(getState).get(`/api/v1/statuses/${id}`).then(response => { dispatch(importFetchedStatus(response.data)); dispatch(fetchStatusSuccess(skipLoading)); - })).catch(error => { + }).catch(error => { dispatch(fetchStatusFail(id, error, skipLoading)); }); }; @@ -152,7 +95,6 @@ export function deleteStatus(id, routerHistory, withRedraft = false) { dispatch(deleteStatusRequest(id)); api(getState).delete(`/api/v1/statuses/${id}`).then(response => { - evictStatus(id); dispatch(deleteStatusSuccess(id)); dispatch(deleteFromTimelines(id)); dispatch(importFetchedAccount(response.data.account)); diff --git a/app/javascript/mastodon/blurhash.js b/app/javascript/mastodon/blurhash.js new file mode 100644 index 000000000..5adcc3e77 --- /dev/null +++ b/app/javascript/mastodon/blurhash.js @@ -0,0 +1,112 @@ +const DIGIT_CHARACTERS = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + '#', + '$', + '%', + '*', + '+', + ',', + '-', + '.', + ':', + ';', + '=', + '?', + '@', + '[', + ']', + '^', + '_', + '{', + '|', + '}', + '~', +]; + +export const decode83 = (str) => { + let value = 0; + let c, digit; + + for (let i = 0; i < str.length; i++) { + c = str[i]; + digit = DIGIT_CHARACTERS.indexOf(c); + value = value * 83 + digit; + } + + return value; +}; + +export const intToRGB = int => ({ + r: Math.max(0, (int >> 16)), + g: Math.max(0, (int >> 8) & 255), + b: Math.max(0, (int & 255)), +}); + +export const getAverageFromBlurhash = blurhash => { + if (!blurhash) { + return null; + } + + return intToRGB(decode83(blurhash.slice(2, 6))); +}; diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/button-test.js.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/button-test.js.snap index 5c04e0979..86fbba917 100644 --- a/app/javascript/mastodon/components/__tests__/__snapshots__/button-test.js.snap +++ b/app/javascript/mastodon/components/__tests__/__snapshots__/button-test.js.snap @@ -4,13 +4,6 @@ exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] = <button className="button button-secondary" onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } /> `; @@ -18,13 +11,6 @@ exports[`<Button /> renders a button element 1`] = ` <button className="button" onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } /> `; @@ -33,13 +19,6 @@ exports[`<Button /> renders a disabled attribute if props.disabled given 1`] = ` className="button" disabled={true} onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } /> `; @@ -47,13 +26,6 @@ exports[`<Button /> renders class="button--block" if props.block given 1`] = ` <button className="button button--block" onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } /> `; @@ -61,13 +33,6 @@ exports[`<Button /> renders the children 1`] = ` <button className="button" onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } > <p> children @@ -79,13 +44,6 @@ exports[`<Button /> renders the given text 1`] = ` <button className="button" onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } > foo </button> @@ -95,13 +53,6 @@ exports[`<Button /> renders the props.text instead of children 1`] = ` <button className="button" onClick={[Function]} - style={ - Object { - "height": "36px", - "lineHeight": "36px", - "padding": "0 16px", - } - } > foo </button> diff --git a/app/javascript/mastodon/components/account.js b/app/javascript/mastodon/components/account.js index 2705a6001..0e40ee1d6 100644 --- a/app/javascript/mastodon/components/account.js +++ b/app/javascript/mastodon/components/account.js @@ -8,6 +8,7 @@ import IconButton from './icon_button'; import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { me } from '../initial_state'; +import RelativeTimestamp from './relative_timestamp'; const messages = defineMessages({ follow: { id: 'account.follow', defaultMessage: 'Follow' }, @@ -107,11 +108,17 @@ class Account extends ImmutablePureComponent { } } + let mute_expires_at; + if (account.get('mute_expires_at')) { + mute_expires_at = <div><RelativeTimestamp timestamp={account.get('mute_expires_at')} futureDate /></div>; + } + return ( <div className='account'> <div className='account__wrapper'> <Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}> <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> + {mute_expires_at} <DisplayName account={account} /> </Permalink> diff --git a/app/javascript/mastodon/components/animated_number.js b/app/javascript/mastodon/components/animated_number.js index f3127c88e..fbe948c5b 100644 --- a/app/javascript/mastodon/components/animated_number.js +++ b/app/javascript/mastodon/components/animated_number.js @@ -5,10 +5,21 @@ import TransitionMotion from 'react-motion/lib/TransitionMotion'; import spring from 'react-motion/lib/spring'; import { reduceMotion } from 'mastodon/initial_state'; +const obfuscatedCount = count => { + if (count < 0) { + return 0; + } else if (count <= 1) { + return count; + } else { + return '1+'; + } +}; + export default class AnimatedNumber extends React.PureComponent { static propTypes = { value: PropTypes.number.isRequired, + obfuscate: PropTypes.bool, }; state = { @@ -36,11 +47,11 @@ export default class AnimatedNumber extends React.PureComponent { } render () { - const { value } = this.props; + const { value, obfuscate } = this.props; const { direction } = this.state; if (reduceMotion) { - return <FormattedNumber value={value} />; + return obfuscate ? obfuscatedCount(value) : <FormattedNumber value={value} />; } const styles = [{ @@ -54,7 +65,7 @@ export default class AnimatedNumber extends React.PureComponent { {items => ( <span className='animated-number'> {items.map(({ key, data, style }) => ( - <span key={key} style={{ position: (direction * style.y) > 0 ? 'absolute' : 'static', transform: `translateY(${style.y * 100}%)` }}><FormattedNumber value={data} /></span> + <span key={key} style={{ position: (direction * style.y) > 0 ? 'absolute' : 'static', transform: `translateY(${style.y * 100}%)` }}>{obfuscate ? obfuscatedCount(data) : <FormattedNumber value={data} />}</span> ))} </span> )} diff --git a/app/javascript/mastodon/components/autosuggest_emoji.js b/app/javascript/mastodon/components/autosuggest_emoji.js index ce4383a60..4937e4d98 100644 --- a/app/javascript/mastodon/components/autosuggest_emoji.js +++ b/app/javascript/mastodon/components/autosuggest_emoji.js @@ -1,8 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import unicodeMapping from '../features/emoji/emoji_unicode_mapping_light'; - -const assetHost = process.env.CDN_HOST || ''; +import { assetHost } from 'mastodon/utils/config'; export default class AutosuggestEmoji extends React.PureComponent { diff --git a/app/javascript/mastodon/components/autosuggest_input.js b/app/javascript/mastodon/components/autosuggest_input.js index 6d2035add..5187f95c8 100644 --- a/app/javascript/mastodon/components/autosuggest_input.js +++ b/app/javascript/mastodon/components/autosuggest_input.js @@ -4,7 +4,6 @@ import AutosuggestEmoji from './autosuggest_emoji'; import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import classNames from 'classnames'; import { List as ImmutableList } from 'immutable'; @@ -189,11 +188,6 @@ export default class AutosuggestInput extends ImmutablePureComponent { render () { const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength } = this.props; const { suggestionsHidden } = this.state; - const style = { direction: 'ltr' }; - - if (isRtl(value)) { - style.direction = 'rtl'; - } return ( <div className='autosuggest-input'> @@ -212,7 +206,7 @@ export default class AutosuggestInput extends ImmutablePureComponent { onKeyUp={onKeyUp} onFocus={this.onFocus} onBlur={this.onBlur} - style={style} + dir='auto' aria-autocomplete='list' id={id} className={className} diff --git a/app/javascript/mastodon/components/autosuggest_textarea.js b/app/javascript/mastodon/components/autosuggest_textarea.js index 58ec4f6eb..08b9cd80b 100644 --- a/app/javascript/mastodon/components/autosuggest_textarea.js +++ b/app/javascript/mastodon/components/autosuggest_textarea.js @@ -4,7 +4,6 @@ import AutosuggestEmoji from './autosuggest_emoji'; import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Textarea from 'react-textarea-autosize'; import classNames from 'classnames'; @@ -195,11 +194,6 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { render () { const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, children } = this.props; const { suggestionsHidden } = this.state; - const style = { direction: 'ltr' }; - - if (isRtl(value)) { - style.direction = 'rtl'; - } return [ <div className='compose-form__autosuggest-wrapper' key='autosuggest-wrapper'> @@ -220,7 +214,7 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { onFocus={this.onFocus} onBlur={this.onBlur} onPaste={this.onPaste} - style={style} + dir='auto' aria-autocomplete='list' /> </label> diff --git a/app/javascript/mastodon/components/button.js b/app/javascript/mastodon/components/button.js index eb8dd7dc8..85b2d78ca 100644 --- a/app/javascript/mastodon/components/button.js +++ b/app/javascript/mastodon/components/button.js @@ -10,17 +10,11 @@ export default class Button extends React.PureComponent { disabled: PropTypes.bool, block: PropTypes.bool, secondary: PropTypes.bool, - size: PropTypes.number, className: PropTypes.string, title: PropTypes.string, - style: PropTypes.object, children: PropTypes.node, }; - static defaultProps = { - size: 36, - }; - handleClick = (e) => { if (!this.props.disabled) { this.props.onClick(e); @@ -36,13 +30,6 @@ export default class Button extends React.PureComponent { } render () { - const style = { - padding: `0 ${this.props.size / 2.25}px`, - height: `${this.props.size}px`, - lineHeight: `${this.props.size}px`, - ...this.props.style, - }; - const className = classNames('button', this.props.className, { 'button-secondary': this.props.secondary, 'button--block': this.props.block, @@ -54,7 +41,6 @@ export default class Button extends React.PureComponent { disabled={this.props.disabled} onClick={this.handleClick} ref={this.setRef} - style={style} title={this.props.title} > {this.props.text || this.props.children} diff --git a/app/javascript/mastodon/components/column.js b/app/javascript/mastodon/components/column.js index 55e3bfd5e..239824a4f 100644 --- a/app/javascript/mastodon/components/column.js +++ b/app/javascript/mastodon/components/column.js @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import { scrollTop } from '../scroll'; export default class Column extends React.PureComponent { @@ -35,9 +35,9 @@ export default class Column extends React.PureComponent { componentDidMount () { if (this.props.bindToDocument) { - document.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + document.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } else { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } } diff --git a/app/javascript/mastodon/components/column_header.js b/app/javascript/mastodon/components/column_header.js index 1bb583583..236e92296 100644 --- a/app/javascript/mastodon/components/column_header.js +++ b/app/javascript/mastodon/components/column_header.js @@ -34,6 +34,7 @@ class ColumnHeader extends React.PureComponent { onMove: PropTypes.func, onClick: PropTypes.func, appendContent: PropTypes.node, + collapseIssues: PropTypes.bool, }; state = { @@ -83,7 +84,7 @@ class ColumnHeader extends React.PureComponent { } render () { - const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent } = this.props; + const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent, collapseIssues } = this.props; const { collapsed, animating } = this.state; const wrapperClassName = classNames('column-header__wrapper', { @@ -145,7 +146,20 @@ class ColumnHeader extends React.PureComponent { } if (children || (multiColumn && this.props.onPin)) { - collapseButton = <button className={collapsibleButtonClassName} title={formatMessage(collapsed ? messages.show : messages.hide)} aria-label={formatMessage(collapsed ? messages.show : messages.hide)} aria-pressed={collapsed ? 'false' : 'true'} onClick={this.handleToggleClick}><Icon id='sliders' /></button>; + collapseButton = ( + <button + className={collapsibleButtonClassName} + title={formatMessage(collapsed ? messages.show : messages.hide)} + aria-label={formatMessage(collapsed ? messages.show : messages.hide)} + aria-pressed={collapsed ? 'false' : 'true'} + onClick={this.handleToggleClick} + > + <i className='icon-with-badge'> + <Icon id='sliders' /> + {collapseIssues && <i className='icon-with-badge__issue-badge' />} + </i> + </button> + ); } const hasTitle = icon && title; diff --git a/app/javascript/mastodon/components/dropdown_menu.js b/app/javascript/mastodon/components/dropdown_menu.js index 09e3c9df8..c6b4b1187 100644 --- a/app/javascript/mastodon/components/dropdown_menu.js +++ b/app/javascript/mastodon/components/dropdown_menu.js @@ -5,9 +5,9 @@ import IconButton from './icon_button'; import Overlay from 'react-overlays/lib/Overlay'; import Motion from '../features/ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; -const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +const listenerOptions = supportsPassiveEvents ? { passive: true } : false; let id = 0; class DropdownMenu extends React.PureComponent { diff --git a/app/javascript/mastodon/components/error_boundary.js b/app/javascript/mastodon/components/error_boundary.js index ca3012276..ca4a2cfe1 100644 --- a/app/javascript/mastodon/components/error_boundary.js +++ b/app/javascript/mastodon/components/error_boundary.js @@ -66,17 +66,31 @@ export default class ErrorBoundary extends React.PureComponent { } render() { - const { hasError, copied } = this.state; + const { hasError, copied, errorMessage } = this.state; if (!hasError) { return this.props.children; } + const likelyBrowserAddonIssue = errorMessage && errorMessage.includes('NotFoundError'); + return ( <div className='error-boundary'> <div> - <p className='error-boundary__error'><FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' /></p> - <p><FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /></p> + <p className='error-boundary__error'> + { likelyBrowserAddonIssue ? ( + <FormattedMessage id='error.unexpected_crash.explanation_addons' defaultMessage='This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.' /> + ) : ( + <FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' /> + )} + </p> + <p> + { likelyBrowserAddonIssue ? ( + <FormattedMessage id='error.unexpected_crash.next_steps_addons' defaultMessage='Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /> + ) : ( + <FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /> + )} + </p> <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied ? 'copied' : ''}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p> </div> </div> diff --git a/app/javascript/mastodon/components/icon_button.js b/app/javascript/mastodon/components/icon_button.js index fd715bc3c..7ec39198a 100644 --- a/app/javascript/mastodon/components/icon_button.js +++ b/app/javascript/mastodon/components/icon_button.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; +import AnimatedNumber from 'mastodon/components/animated_number'; export default class IconButton extends React.PureComponent { @@ -24,6 +25,8 @@ export default class IconButton extends React.PureComponent { animate: PropTypes.bool, overlay: PropTypes.bool, tabIndex: PropTypes.string, + counter: PropTypes.number, + obfuscateCount: PropTypes.bool, }; static defaultProps = { @@ -97,6 +100,8 @@ export default class IconButton extends React.PureComponent { pressed, tabIndex, title, + counter, + obfuscateCount, } = this.props; const { @@ -111,8 +116,13 @@ export default class IconButton extends React.PureComponent { activate, deactivate, overlayed: overlay, + 'icon-button--with-counter': typeof counter !== 'undefined', }); + if (typeof counter !== 'undefined') { + style.width = 'auto'; + } + return ( <button aria-label={title} @@ -128,7 +138,7 @@ export default class IconButton extends React.PureComponent { tabIndex={tabIndex} disabled={disabled} > - <Icon id={icon} fixedWidth aria-hidden='true' /> + <Icon id={icon} fixedWidth aria-hidden='true' /> {typeof counter !== 'undefined' && <span className='icon-button__counter'><AnimatedNumber value={counter} obfuscate={obfuscateCount} /></span>} </button> ); } diff --git a/app/javascript/mastodon/components/icon_with_badge.js b/app/javascript/mastodon/components/icon_with_badge.js index 7851eb4be..4214eccfd 100644 --- a/app/javascript/mastodon/components/icon_with_badge.js +++ b/app/javascript/mastodon/components/icon_with_badge.js @@ -4,16 +4,18 @@ import Icon from 'mastodon/components/icon'; const formatNumber = num => num > 40 ? '40+' : num; -const IconWithBadge = ({ id, count, className }) => ( +const IconWithBadge = ({ id, count, issueBadge, className }) => ( <i className='icon-with-badge'> <Icon id={id} fixedWidth className={className} /> {count > 0 && <i className='icon-with-badge__badge'>{formatNumber(count)}</i>} + {issueBadge && <i className='icon-with-badge__issue-badge' />} </i> ); IconWithBadge.propTypes = { id: PropTypes.string.isRequired, count: PropTypes.number.isRequired, + issueBadge: PropTypes.bool, className: PropTypes.string, }; diff --git a/app/javascript/mastodon/components/intersection_observer_article.js b/app/javascript/mastodon/components/intersection_observer_article.js index 124b34b02..2d87f19b5 100644 --- a/app/javascript/mastodon/components/intersection_observer_article.js +++ b/app/javascript/mastodon/components/intersection_observer_article.js @@ -2,10 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import scheduleIdleTask from '../features/ui/util/schedule_idle_task'; import getRectFromEntry from '../features/ui/util/get_rect_from_entry'; -import { is } from 'immutable'; -// Diff these props in the "rendered" state -const updateOnPropsForRendered = ['id', 'index', 'listLength']; // Diff these props in the "unrendered" state const updateOnPropsForUnrendered = ['id', 'index', 'listLength', 'cachedHeight']; @@ -33,9 +30,12 @@ export default class IntersectionObserverArticle extends React.Component { // If we're going from rendered to unrendered (or vice versa) then update return true; } - // Otherwise, diff based on props - const propsToDiff = isUnrendered ? updateOnPropsForUnrendered : updateOnPropsForRendered; - return !propsToDiff.every(prop => is(nextProps[prop], this.props[prop])); + // If we are and remain hidden, diff based on props + if (isUnrendered) { + return !updateOnPropsForUnrendered.every(prop => nextProps[prop] === this.props[prop]); + } + // Else, assume the children have changed + return true; } componentDidMount () { diff --git a/app/javascript/mastodon/components/modal_root.js b/app/javascript/mastodon/components/modal_root.js index 6297b5e29..26344528e 100644 --- a/app/javascript/mastodon/components/modal_root.js +++ b/app/javascript/mastodon/components/modal_root.js @@ -1,19 +1,21 @@ import React from 'react'; import PropTypes from 'prop-types'; import 'wicg-inert'; +import { multiply } from 'color-blend'; export default class ModalRoot extends React.PureComponent { static propTypes = { children: PropTypes.node, onClose: PropTypes.func.isRequired, + backgroundColor: PropTypes.shape({ + r: PropTypes.number, + g: PropTypes.number, + b: PropTypes.number, + }), }; - state = { - revealed: !!this.props.children, - }; - - activeElement = this.state.revealed ? document.activeElement : null; + activeElement = this.props.children ? document.activeElement : null; handleKeyUp = (e) => { if ((e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27) @@ -53,8 +55,6 @@ export default class ModalRoot extends React.PureComponent { this.activeElement = document.activeElement; this.getSiblings().forEach(sibling => sibling.setAttribute('inert', true)); - } else if (!nextProps.children) { - this.setState({ revealed: false }); } } @@ -68,14 +68,7 @@ export default class ModalRoot extends React.PureComponent { Promise.resolve().then(() => { this.activeElement.focus({ preventScroll: true }); this.activeElement = null; - }).catch((error) => { - console.error(error); - }); - } - if (this.props.children) { - requestAnimationFrame(() => { - this.setState({ revealed: true }); - }); + }).catch(console.error); } } @@ -94,7 +87,6 @@ export default class ModalRoot extends React.PureComponent { render () { const { children, onClose } = this.props; - const { revealed } = this.state; const visible = !!children; if (!visible) { @@ -103,10 +95,16 @@ export default class ModalRoot extends React.PureComponent { ); } + let backgroundColor = null; + + if (this.props.backgroundColor) { + backgroundColor = multiply({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.7 }); + } + return ( - <div className='modal-root' ref={this.setRef} style={{ opacity: revealed ? 1 : 0 }}> + <div className='modal-root' ref={this.setRef}> <div style={{ pointerEvents: visible ? 'auto' : 'none' }}> - <div role='presentation' className='modal-root__overlay' onClick={onClose} /> + <div role='presentation' className='modal-root__overlay' onClick={onClose} style={{ backgroundColor: backgroundColor ? `rgba(${backgroundColor.r}, ${backgroundColor.g}, ${backgroundColor.b}, 0.7)` : null }} /> <div role='dialog' className='modal-root__container'>{children}</div> </div> </div> diff --git a/app/javascript/mastodon/components/picture_in_picture_placeholder.js b/app/javascript/mastodon/components/picture_in_picture_placeholder.js new file mode 100644 index 000000000..19d15c18b --- /dev/null +++ b/app/javascript/mastodon/components/picture_in_picture_placeholder.js @@ -0,0 +1,69 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import Icon from 'mastodon/components/icon'; +import { removePictureInPicture } from 'mastodon/actions/picture_in_picture'; +import { connect } from 'react-redux'; +import { debounce } from 'lodash'; +import { FormattedMessage } from 'react-intl'; + +export default @connect() +class PictureInPicturePlaceholder extends React.PureComponent { + + static propTypes = { + width: PropTypes.number, + dispatch: PropTypes.func.isRequired, + }; + + state = { + width: this.props.width, + height: this.props.width && (this.props.width / (16/9)), + }; + + handleClick = () => { + const { dispatch } = this.props; + dispatch(removePictureInPicture()); + } + + setRef = c => { + this.node = c; + + if (this.node) { + this._setDimensions(); + } + } + + _setDimensions () { + const width = this.node.offsetWidth; + const height = width / (16/9); + + this.setState({ width, height }); + } + + componentDidMount () { + window.addEventListener('resize', this.handleResize, { passive: true }); + } + + componentWillUnmount () { + window.removeEventListener('resize', this.handleResize); + } + + handleResize = debounce(() => { + if (this.node) { + this._setDimensions(); + } + }, 250, { + trailing: true, + }); + + render () { + const { height } = this.state; + + return ( + <div ref={this.setRef} className='picture-in-picture-placeholder' style={{ height }} role='button' tabIndex='0' onClick={this.handleClick}> + <Icon id='window-restore' /> + <FormattedMessage id='picture_in_picture.restore' defaultMessage='Put it back' /> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 174e401b7..295e83f58 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -17,6 +17,7 @@ import { HotKeys } from 'react-hotkeys'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; import { displayMedia } from '../initial_state'; +import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; // We use the component (and not the container) since we do not want // to use the progress bar to show download progress @@ -95,6 +96,11 @@ class Status extends ImmutablePureComponent { cacheMediaWidth: PropTypes.func, cachedMediaWidth: PropTypes.number, scrollKey: PropTypes.string, + deployPictureInPicture: PropTypes.func, + pictureInPicture: ImmutablePropTypes.contains({ + inUse: PropTypes.bool, + available: PropTypes.bool, + }), }; // Avoid checking props that are functions (and whose equality will always @@ -104,6 +110,8 @@ class Status extends ImmutablePureComponent { 'account', 'muted', 'hidden', + 'unread', + 'pictureInPicture', ]; state = { @@ -184,8 +192,13 @@ class Status extends ImmutablePureComponent { return <div className='audio-player' style={{ height: '110px' }} />; } - handleOpenVideo = (media, options) => { - this.props.onOpenVideo(media, options); + handleOpenVideo = (options) => { + const status = this._properStatus(); + this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), options); + } + + handleOpenMedia = (media, index) => { + this.props.onOpenMedia(this._properStatus().get('id'), media, index); } handleHotkeyOpenMedia = e => { @@ -195,16 +208,21 @@ class Status extends ImmutablePureComponent { e.preventDefault(); if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { - // TODO: toggle play/paused? - } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 }); + if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), { startTime: 0 }); } else { - onOpenMedia(status.get('media_attachments'), 0); + onOpenMedia(status.get('id'), status.get('media_attachments'), 0); } } } + handleDeployPictureInPicture = (type, mediaProps) => { + const { deployPictureInPicture } = this.props; + const status = this._properStatus(); + + deployPictureInPicture(status, type, mediaProps); + } + handleHotkeyReply = e => { e.preventDefault(); this.props.onReply(this._properStatus(), this.context.router.history); @@ -265,7 +283,7 @@ class Status extends ImmutablePureComponent { let media = null; let statusAvatar, prepend, rebloggedByText; - const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey } = this.props; + const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, pictureInPicture } = this.props; let { status, account, ...other } = this.props; @@ -336,7 +354,9 @@ class Status extends ImmutablePureComponent { status = status.get('reblog'); } - if (status.get('media_attachments').size > 0) { + if (pictureInPicture.get('inUse')) { + media = <PictureInPicturePlaceholder width={this.props.cachedMediaWidth} />; + } else if (status.get('media_attachments').size > 0) { if (this.props.muted) { media = ( <AttachmentList @@ -361,6 +381,7 @@ class Status extends ImmutablePureComponent { width={this.props.cachedMediaWidth} height={110} cacheWidth={this.props.cacheMediaWidth} + deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined} /> )} </Bundle> @@ -373,6 +394,7 @@ class Status extends ImmutablePureComponent { {Component => ( <Component preview={attachment.get('preview_url')} + frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])} blurhash={attachment.get('blurhash')} src={attachment.get('url')} alt={attachment.get('description')} @@ -382,6 +404,7 @@ class Status extends ImmutablePureComponent { sensitive={status.get('sensitive')} onOpenVideo={this.handleOpenVideo} cacheWidth={this.props.cacheMediaWidth} + deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined} visible={this.state.showMedia} onToggleVisibility={this.handleToggleMediaVisibility} /> @@ -396,7 +419,7 @@ class Status extends ImmutablePureComponent { media={status.get('media_attachments')} sensitive={status.get('sensitive')} height={110} - onOpenMedia={this.props.onOpenMedia} + onOpenMedia={this.handleOpenMedia} cacheWidth={this.props.cacheMediaWidth} defaultWidth={this.props.cachedMediaWidth} visible={this.state.showMedia} @@ -409,7 +432,7 @@ class Status extends ImmutablePureComponent { } else if (status.get('spoiler_text').length === 0 && status.get('card')) { media = ( <Card - onOpenMedia={this.props.onOpenMedia} + onOpenMedia={this.handleOpenMedia} card={status.get('card')} compact cacheWidth={this.props.cacheMediaWidth} @@ -438,14 +461,16 @@ class Status extends ImmutablePureComponent { return ( <HotKeys handlers={handlers}> - <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}> + <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), unread, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}> {prepend} - <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}> + <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}> <div className='status__expand' onClick={this.handleExpandClick} role='presentation' /> <div className='status__info'> - <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a> - <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> + <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'> + <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> + <RelativeTimestamp timestamp={status.get('created_at')} /> + </a> <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'> <div className='status__avatar'> diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js index b7babd4ad..66b5a17ac 100644 --- a/app/javascript/mastodon/components/status_action_bar.js +++ b/app/javascript/mastodon/components/status_action_bar.js @@ -43,16 +43,6 @@ const messages = defineMessages({ unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, }); -const obfuscatedCount = count => { - if (count < 0) { - return 0; - } else if (count <= 1) { - return count; - } else { - return '1+'; - } -}; - const mapStateToProps = (state, { status }) => ({ relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]), }); @@ -329,9 +319,10 @@ class StatusActionBar extends ImmutablePureComponent { return ( <div className='status__action-bar'> - <div className='status__action-bar__counter'><IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} /><span className='status__action-bar__counter__label' >{obfuscatedCount(status.get('replies_count'))}</span></div> + <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount /> <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} /> <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /> + {shareButton} <div className='status__action-bar-dropdown'> diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 3200f2d82..185a2a663 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -1,7 +1,6 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; import { FormattedMessage } from 'react-intl'; import Permalink from './permalink'; import classnames from 'classnames'; @@ -186,17 +185,12 @@ export default class StatusContent extends React.PureComponent { const content = { __html: status.get('contentHtml') }; const spoilerContent = { __html: status.get('spoilerHtml') }; - const directionStyle = { direction: 'ltr' }; const classNames = classnames('status__content', { 'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-spoiler': status.get('spoiler_text').length > 0, 'status__content--collapsed': renderReadMore, }); - if (isRtl(status.get('search_index'))) { - directionStyle.direction = 'rtl'; - } - const showThreadButton = ( <button className='status__content__read-more-button' onClick={this.props.onClick}> <FormattedMessage id='status.show_thread' defaultMessage='Show thread' /> @@ -225,7 +219,7 @@ export default class StatusContent extends React.PureComponent { } return ( - <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}> + <div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}> <p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}> <span dangerouslySetInnerHTML={spoilerContent} /> {' '} @@ -234,7 +228,7 @@ export default class StatusContent extends React.PureComponent { {mentionsPlaceholder} - <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} /> + <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} dangerouslySetInnerHTML={content} /> {!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />} @@ -243,8 +237,8 @@ export default class StatusContent extends React.PureComponent { ); } else if (this.props.onClick) { const output = [ - <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'> - <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} /> + <div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'> + <div className='status__content__text status__content__text--visible' dangerouslySetInnerHTML={content} /> {!!status.get('poll') && <PollContainer pollId={status.get('poll')} />} @@ -259,8 +253,8 @@ export default class StatusContent extends React.PureComponent { return output; } else { return ( - <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle}> - <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} /> + <div className={classNames} ref={this.setRef} tabIndex='0'> + <div className='status__content__text status__content__text--visible' dangerouslySetInnerHTML={content} /> {!!status.get('poll') && <PollContainer pollId={status.get('poll')} />} diff --git a/app/javascript/mastodon/containers/media_container.js b/app/javascript/mastodon/containers/media_container.js index ba55ecbc7..52fdc9294 100644 --- a/app/javascript/mastodon/containers/media_container.js +++ b/app/javascript/mastodon/containers/media_container.js @@ -2,7 +2,7 @@ import React, { PureComponent, Fragment } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { IntlProvider, addLocaleData } from 'react-intl'; -import { List as ImmutableList, fromJS } from 'immutable'; +import { fromJS } from 'immutable'; import { getLocale } from 'mastodon/locales'; import { getScrollbarWidth } from 'mastodon/utils/scrollbar'; import MediaGallery from 'mastodon/components/media_gallery'; @@ -30,6 +30,8 @@ export default class MediaContainer extends PureComponent { media: null, index: null, time: null, + backgroundColor: null, + options: null, }; handleOpenMedia = (media, index) => { @@ -39,20 +41,32 @@ export default class MediaContainer extends PureComponent { this.setState({ media, index }); } - handleOpenVideo = (video, time) => { - const media = ImmutableList([video]); + handleOpenVideo = (options) => { + const { components } = this.props; + const { media } = JSON.parse(components[options.componetIndex].getAttribute('data-props')); + const mediaList = fromJS(media); document.body.classList.add('with-modals--active'); document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; - this.setState({ media, time }); + this.setState({ media: mediaList, options }); } handleCloseMedia = () => { document.body.classList.remove('with-modals--active'); document.documentElement.style.marginRight = 0; - this.setState({ media: null, index: null, time: null }); + this.setState({ + media: null, + index: null, + time: null, + backgroundColor: null, + options: null, + }); + } + + setBackgroundColor = color => { + this.setState({ backgroundColor: color }); } render () { @@ -73,6 +87,7 @@ export default class MediaContainer extends PureComponent { ...(hashtag ? { hashtag: fromJS(hashtag) } : {}), ...(componentName === 'Video' ? { + componetIndex: i, onOpenVideo: this.handleOpenVideo, } : { onOpenMedia: this.handleOpenMedia, @@ -85,13 +100,16 @@ export default class MediaContainer extends PureComponent { ); })} - <ModalRoot onClose={this.handleCloseMedia}> + <ModalRoot backgroundColor={this.state.backgroundColor} onClose={this.handleCloseMedia}> {this.state.media && ( <MediaModal media={this.state.media} index={this.state.index || 0} - time={this.state.time} + currentTime={this.state.options?.startTime} + autoPlay={this.state.options?.autoPlay} + volume={this.state.options?.defaultVolume} onClose={this.handleCloseMedia} + onChangeBackgroundColor={this.setBackgroundColor} /> )} </ModalRoot> diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index decf7279f..d6bcb8973 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'react-redux'; import Status from '../components/status'; -import { makeGetStatus } from '../selectors'; +import { makeGetStatus, makeGetPictureInPicture } from '../selectors'; import { replyCompose, mentionCompose, @@ -37,6 +37,7 @@ import { initMuteModal } from '../actions/mutes'; import { initBlockModal } from '../actions/blocks'; import { initReport } from '../actions/reports'; import { openModal } from '../actions/modal'; +import { deployPictureInPicture } from '../actions/picture_in_picture'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { boostModal, deleteModal } from '../initial_state'; import { showAlertForError } from '../actions/alerts'; @@ -53,9 +54,11 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); const mapStateToProps = (state, props) => ({ status: getStatus(state, props), + pictureInPicture: getPictureInPicture(state, props), }); return mapStateToProps; @@ -146,12 +149,12 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(mentionCompose(account, router)); }, - onOpenMedia (media, index) { - dispatch(openModal('MEDIA', { media, index })); + onOpenMedia (statusId, media, index) { + dispatch(openModal('MEDIA', { statusId, media, index })); }, - onOpenVideo (media, options) { - dispatch(openModal('VIDEO', { media, options })); + onOpenVideo (statusId, media, options) { + dispatch(openModal('VIDEO', { statusId, media, options })); }, onBlock (status) { @@ -207,6 +210,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(unblockDomain(domain)); }, + deployPictureInPicture (status, type, mediaProps) { + dispatch(deployPictureInPicture(status.get('id'), status.getIn(['account', 'id']), type, mediaProps)); + }, + }); export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status)); diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 61ecf045d..b47ebed62 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -7,6 +7,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { autoPlayGif, me, isStaff } from 'mastodon/initial_state'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; +import IconButton from 'mastodon/components/icon_button'; import Avatar from 'mastodon/components/avatar'; import { counterRenderer } from 'mastodon/components/common_counter'; import ShortNumber from 'mastodon/components/short_number'; @@ -35,6 +36,8 @@ const messages = defineMessages({ unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' }, hideReblogs: { id: 'account.hide_reblogs', defaultMessage: 'Hide boosts from @{name}' }, showReblogs: { id: 'account.show_reblogs', defaultMessage: 'Show boosts from @{name}' }, + enableNotifications: { id: 'account.enable_notifications', defaultMessage: 'Notify me when @{name} posts' }, + disableNotifications: { id: 'account.disable_notifications', defaultMessage: 'Stop notifying me when @{name} posts' }, pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, @@ -68,8 +71,9 @@ class Header extends ImmutablePureComponent { onBlock: PropTypes.func.isRequired, onMention: PropTypes.func.isRequired, onDirect: PropTypes.func.isRequired, - onReport: PropTypes.func.isRequired, onReblogToggle: PropTypes.func.isRequired, + onNotifyToggle: PropTypes.func.isRequired, + onReport: PropTypes.func.isRequired, onMute: PropTypes.func.isRequired, onBlockDomain: PropTypes.func.isRequired, onUnblockDomain: PropTypes.func.isRequired, @@ -140,8 +144,11 @@ class Header extends ImmutablePureComponent { return null; } + const suspended = account.get('suspended'); + let info = []; let actionBtn = ''; + let bellBtn = ''; let lockedIcon = ''; let menu = []; @@ -157,13 +164,17 @@ class Header extends ImmutablePureComponent { info.push(<span key='domain_blocked' className='relationship-tag'><FormattedMessage id='account.domain_blocked' defaultMessage='Domain blocked' /></span>); } + if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) { + bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />; + } + if (me !== account.get('id')) { if (!account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { - actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; + actionBtn = <Button className={classNames('logo-button', { 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; } else if (!account.getIn(['relationship', 'blocking'])) { - actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />; + actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']), 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />; } else if (account.getIn(['relationship', 'blocking'])) { actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />; } @@ -268,7 +279,7 @@ class Header extends ImmutablePureComponent { <div className={classNames('account__header', { inactive: !!account.get('moved') })} ref={this.setRef}> <div className='account__header__image'> <div className='account__header__info'> - {info} + {!suspended && info} </div> <img src={autoPlayGif ? account.get('header') : account.get('header_static')} alt='' className='parallax' /> @@ -282,11 +293,14 @@ class Header extends ImmutablePureComponent { <div className='spacer' /> - <div className='account__header__tabs__buttons'> - {actionBtn} + {!suspended && ( + <div className='account__header__tabs__buttons'> + {actionBtn} + {bellBtn} - <DropdownMenuContainer items={menu} icon='ellipsis-v' size={24} direction='right' /> - </div> + <DropdownMenuContainer items={menu} icon='ellipsis-v' size={24} direction='right' /> + </div> + )} </div> <div className='account__header__tabs__name'> @@ -298,7 +312,7 @@ class Header extends ImmutablePureComponent { <div className='account__header__extra'> <div className='account__header__bio'> - { (fields.size > 0 || identity_proofs.size > 0) && ( + {(fields.size > 0 || identity_proofs.size > 0) && ( <div className='account__header__fields'> {identity_proofs.map((proof, i) => ( <dl key={i}> @@ -324,33 +338,35 @@ class Header extends ImmutablePureComponent { </div> )} - {account.get('id') !== me && <AccountNoteContainer account={account} />} + {account.get('id') !== me && !suspended && <AccountNoteContainer account={account} />} {account.get('note').length > 0 && account.get('note') !== '<p></p>' && <div className='account__header__content' dangerouslySetInnerHTML={content} />} </div> - <div className='account__header__extra__links'> - <NavLink isActive={this.isStatusesPageActive} activeClassName='active' to={`/accounts/${account.get('id')}`} title={intl.formatNumber(account.get('statuses_count'))}> - <ShortNumber - value={account.get('statuses_count')} - renderer={counterRenderer('statuses')} - /> - </NavLink> + {!suspended && ( + <div className='account__header__extra__links'> + <NavLink isActive={this.isStatusesPageActive} activeClassName='active' to={`/accounts/${account.get('id')}`} title={intl.formatNumber(account.get('statuses_count'))}> + <ShortNumber + value={account.get('statuses_count')} + renderer={counterRenderer('statuses')} + /> + </NavLink> - <NavLink exact activeClassName='active' to={`/accounts/${account.get('id')}/following`} title={intl.formatNumber(account.get('following_count'))}> - <ShortNumber - value={account.get('following_count')} - renderer={counterRenderer('following')} - /> - </NavLink> + <NavLink exact activeClassName='active' to={`/accounts/${account.get('id')}/following`} title={intl.formatNumber(account.get('following_count'))}> + <ShortNumber + value={account.get('following_count')} + renderer={counterRenderer('following')} + /> + </NavLink> - <NavLink exact activeClassName='active' to={`/accounts/${account.get('id')}/followers`} title={intl.formatNumber(account.get('followers_count'))}> - <ShortNumber - value={account.get('followers_count')} - renderer={counterRenderer('followers')} - /> - </NavLink> - </div> + <NavLink exact activeClassName='active' to={`/accounts/${account.get('id')}/followers`} title={intl.formatNumber(account.get('followers_count'))}> + <ShortNumber + value={account.get('followers_count')} + renderer={counterRenderer('followers')} + /> + </NavLink> + </div> + )} </div> </div> </div> diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.js b/app/javascript/mastodon/features/account_gallery/components/media_item.js index c9a7af7f7..ba7ec46a3 100644 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.js +++ b/app/javascript/mastodon/features/account_gallery/components/media_item.js @@ -122,7 +122,7 @@ export default class MediaItem extends ImmutablePureComponent { <div className='media-gallery__gifv'> {content} - <span className='media-gallery__gifv__label'>{label}</span> + {label && <span className='media-gallery__gifv__label'>{label}</span>} </div> ); } diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js index fc5aead48..015a6a6d7 100644 --- a/app/javascript/mastodon/features/account_gallery/index.js +++ b/app/javascript/mastodon/features/account_gallery/index.js @@ -15,12 +15,15 @@ import { ScrollContainer } from 'react-router-scroll-4'; import LoadMore from 'mastodon/components/load_more'; import MissingIndicator from 'mastodon/components/missing_indicator'; import { openModal } from 'mastodon/actions/modal'; +import { FormattedMessage } from 'react-intl'; const mapStateToProps = (state, props) => ({ isAccount: !!state.getIn(['accounts', props.params.accountId]), attachments: getAccountGallery(state, props.params.accountId), isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']), hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']), + suspended: state.getIn(['accounts', props.params.accountId, 'suspended'], false), + blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), }); class LoadMoreMedia extends ImmutablePureComponent { @@ -56,6 +59,8 @@ class AccountGallery extends ImmutablePureComponent { isLoading: PropTypes.bool, hasMore: PropTypes.bool, isAccount: PropTypes.bool, + blockedBy: PropTypes.bool, + suspended: PropTypes.bool, multiColumn: PropTypes.bool, }; @@ -100,15 +105,18 @@ class AccountGallery extends ImmutablePureComponent { } handleOpenMedia = attachment => { + const { dispatch } = this.props; + const statusId = attachment.getIn(['status', 'id']); + if (attachment.get('type') === 'video') { - this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } })); + dispatch(openModal('VIDEO', { media: attachment, statusId, options: { autoPlay: true } })); } else if (attachment.get('type') === 'audio') { - this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } })); + dispatch(openModal('AUDIO', { media: attachment, statusId, options: { autoPlay: true } })); } else { const media = attachment.getIn(['status', 'media_attachments']); const index = media.findIndex(x => x.get('id') === attachment.get('id')); - this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') })); + dispatch(openModal('MEDIA', { media, index, statusId })); } } @@ -119,7 +127,7 @@ class AccountGallery extends ImmutablePureComponent { } render () { - const { attachments, shouldUpdateScroll, isLoading, hasMore, isAccount, multiColumn } = this.props; + const { attachments, shouldUpdateScroll, isLoading, hasMore, isAccount, multiColumn, blockedBy, suspended } = this.props; const { width } = this.state; if (!isAccount) { @@ -144,6 +152,14 @@ class AccountGallery extends ImmutablePureComponent { loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />; } + let emptyMessage; + + if (suspended) { + emptyMessage = <FormattedMessage id='empty_column.account_suspended' defaultMessage='Account suspended' />; + } else if (blockedBy) { + emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />; + } + return ( <Column> <ColumnBackButton multiColumn={multiColumn} /> @@ -152,15 +168,21 @@ class AccountGallery extends ImmutablePureComponent { <div className='scrollable scrollable--flex' onScroll={this.handleScroll}> <HeaderContainer accountId={this.props.params.accountId} /> - <div role='feed' className='account-gallery__container' ref={this.handleRef}> - {attachments.map((attachment, index) => attachment === null ? ( - <LoadMoreMedia key={'more:' + attachments.getIn(index + 1, 'id')} maxId={index > 0 ? attachments.getIn(index - 1, 'id') : null} onLoadMore={this.handleLoadMore} /> - ) : ( - <MediaItem key={attachment.get('id')} attachment={attachment} displayWidth={width} onOpenMedia={this.handleOpenMedia} /> - ))} + {(suspended || blockedBy) ? ( + <div className='empty-column-indicator'> + {emptyMessage} + </div> + ) : ( + <div role='feed' className='account-gallery__container' ref={this.handleRef}> + {attachments.map((attachment, index) => attachment === null ? ( + <LoadMoreMedia key={'more:' + attachments.getIn(index + 1, 'id')} maxId={index > 0 ? attachments.getIn(index - 1, 'id') : null} onLoadMore={this.handleLoadMore} /> + ) : ( + <MediaItem key={attachment.get('id')} attachment={attachment} displayWidth={width} onOpenMedia={this.handleOpenMedia} /> + ))} - {loadOlder} - </div> + {loadOlder} + </div> + )} {isLoading && attachments.size === 0 && ( <div className='scrollable__append'> diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js index abb15edcc..6b52defe4 100644 --- a/app/javascript/mastodon/features/account_timeline/components/header.js +++ b/app/javascript/mastodon/features/account_timeline/components/header.js @@ -55,6 +55,10 @@ export default class Header extends ImmutablePureComponent { this.props.onReblogToggle(this.props.account); } + handleNotifyToggle = () => { + this.props.onNotifyToggle(this.props.account); + } + handleMute = () => { this.props.onMute(this.props.account); } @@ -106,6 +110,7 @@ export default class Header extends ImmutablePureComponent { onMention={this.handleMention} onDirect={this.handleDirect} onReblogToggle={this.handleReblogToggle} + onNotifyToggle={this.handleNotifyToggle} onReport={this.handleReport} onMute={this.handleMute} onBlockDomain={this.handleBlockDomain} diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.js b/app/javascript/mastodon/features/account_timeline/containers/header_container.js index 8728b4806..e12019547 100644 --- a/app/javascript/mastodon/features/account_timeline/containers/header_container.js +++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.js @@ -76,9 +76,9 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onReblogToggle (account) { if (account.getIn(['relationship', 'showing_reblogs'])) { - dispatch(followAccount(account.get('id'), false)); + dispatch(followAccount(account.get('id'), { reblogs: false })); } else { - dispatch(followAccount(account.get('id'), true)); + dispatch(followAccount(account.get('id'), { reblogs: true })); } }, @@ -90,6 +90,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ } }, + onNotifyToggle (account) { + if (account.getIn(['relationship', 'notifying'])) { + dispatch(followAccount(account.get('id'), { notify: false })); + } else { + dispatch(followAccount(account.get('id'), { notify: true })); + } + }, + onReport (account) { dispatch(initReport(account)); }, diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index b9a616266..fa4239d6f 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -31,6 +31,7 @@ const mapStateToProps = (state, { params: { accountId }, withReplies = false }) featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], emptyList), isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']), hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']), + suspended: state.getIn(['accounts', accountId, 'suspended'], false), blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), }; }; @@ -57,6 +58,7 @@ class AccountTimeline extends ImmutablePureComponent { withReplies: PropTypes.bool, blockedBy: PropTypes.bool, isAccount: PropTypes.bool, + suspended: PropTypes.bool, remote: PropTypes.bool, remoteUrl: PropTypes.string, multiColumn: PropTypes.bool, @@ -113,7 +115,7 @@ class AccountTimeline extends ImmutablePureComponent { } render () { - const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount, multiColumn, remote, remoteUrl } = this.props; + const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, suspended, isAccount, multiColumn, remote, remoteUrl } = this.props; if (!isAccount) { return ( @@ -134,7 +136,9 @@ class AccountTimeline extends ImmutablePureComponent { let emptyMessage; - if (blockedBy) { + if (suspended) { + emptyMessage = <FormattedMessage id='empty_column.account_suspended' defaultMessage='Account suspended' />; + } else if (blockedBy) { emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />; } else if (remote && statusIds.isEmpty()) { emptyMessage = <RemoteHint url={remoteUrl} />; @@ -153,7 +157,7 @@ class AccountTimeline extends ImmutablePureComponent { alwaysPrepend append={remoteMessage} scrollKey='account_timeline' - statusIds={blockedBy ? emptyList : statusIds} + statusIds={(suspended || blockedBy) ? emptyList : statusIds} featuredStatusIds={featuredStatusIds} isLoading={isLoading} hasMore={hasMore} diff --git a/app/javascript/mastodon/features/audio/index.js b/app/javascript/mastodon/features/audio/index.js index 5b8172694..c47f55dd1 100644 --- a/app/javascript/mastodon/features/audio/index.js +++ b/app/javascript/mastodon/features/audio/index.js @@ -37,7 +37,11 @@ class Audio extends React.PureComponent { backgroundColor: PropTypes.string, foregroundColor: PropTypes.string, accentColor: PropTypes.string, + currentTime: PropTypes.number, autoPlay: PropTypes.bool, + volume: PropTypes.number, + muted: PropTypes.bool, + deployPictureInPicture: PropTypes.func, }; state = { @@ -64,6 +68,19 @@ class Audio extends React.PureComponent { } } + _pack() { + return { + src: this.props.src, + volume: this.audio.volume, + muted: this.audio.muted, + currentTime: this.audio.currentTime, + poster: this.props.poster, + backgroundColor: this.props.backgroundColor, + foregroundColor: this.props.foregroundColor, + accentColor: this.props.accentColor, + }; + } + _setDimensions () { const width = this.player.offsetWidth; const height = this.props.fullscreen ? this.player.offsetHeight : (width / (16/9)); @@ -112,6 +129,10 @@ class Audio extends React.PureComponent { componentWillUnmount () { window.removeEventListener('scroll', this.handleScroll); window.removeEventListener('resize', this.handleResize); + + if (!this.state.paused && this.audio && this.props.deployPictureInPicture) { + this.props.deployPictureInPicture('audio', this._pack()); + } } togglePlay = () => { @@ -225,7 +246,7 @@ class Audio extends React.PureComponent { handleTimeUpdate = () => { this.setState({ currentTime: this.audio.currentTime, - duration: Math.floor(this.audio.duration), + duration: this.audio.duration, }); } @@ -248,7 +269,13 @@ class Audio extends React.PureComponent { const inView = (top <= (window.innerHeight || document.documentElement.clientHeight)) && (top + height >= 0); if (!this.state.paused && !inView) { - this.setState({ paused: true }, () => this.audio.pause()); + this.audio.pause(); + + if (this.props.deployPictureInPicture) { + this.props.deployPictureInPicture('audio', this._pack()); + } + + this.setState({ paused: true }); } }, 150, { trailing: true }); @@ -261,10 +288,22 @@ class Audio extends React.PureComponent { } handleLoadedData = () => { - const { autoPlay } = this.props; + const { autoPlay, currentTime, volume, muted } = this.props; + + if (currentTime) { + this.audio.currentTime = currentTime; + } + + if (volume !== undefined) { + this.audio.volume = volume; + } + + if (muted !== undefined) { + this.audio.muted = muted; + } if (autoPlay) { - this.audio.play(); + this.togglePlay(); } } @@ -347,13 +386,59 @@ class Audio extends React.PureComponent { return this.props.foregroundColor || '#ffffff'; } + seekBy (time) { + const currentTime = this.audio.currentTime + time; + + if (!isNaN(currentTime)) { + this.setState({ currentTime }, () => { + this.audio.currentTime = currentTime; + }); + } + } + + handleAudioKeyDown = e => { + // On the audio element or the seek bar, we can safely use the space bar + // for playback control because there are no buttons to press + + if (e.key === ' ') { + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + } + } + + handleKeyDown = e => { + switch(e.key) { + case 'k': + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + break; + case 'm': + e.preventDefault(); + e.stopPropagation(); + this.toggleMute(); + break; + case 'j': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(-10); + break; + case 'l': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(10); + break; + } + } + render () { const { src, intl, alt, editable, autoPlay } = this.props; const { paused, muted, volume, currentTime, duration, buffer, dragging } = this.state; - const progress = (currentTime / duration) * 100; + const progress = Math.min((currentTime / duration) * 100, 100); return ( - <div className={classNames('audio-player', { editable })} ref={this.setPlayerRef} style={{ backgroundColor: this._getBackgroundColor(), color: this._getForegroundColor(), width: '100%', height: this.props.fullscreen ? '100%' : (this.state.height || this.props.height) }} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> + <div className={classNames('audio-player', { editable })} ref={this.setPlayerRef} style={{ backgroundColor: this._getBackgroundColor(), color: this._getForegroundColor(), width: '100%', height: this.props.fullscreen ? '100%' : (this.state.height || this.props.height) }} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} tabIndex='0' onKeyDown={this.handleKeyDown}> <audio src={src} ref={this.setAudioRef} @@ -367,12 +452,14 @@ class Audio extends React.PureComponent { <canvas role='button' + tabIndex='0' className='audio-player__canvas' width={this.state.width} height={this.state.height} style={{ width: '100%', position: 'absolute', top: 0, left: 0 }} ref={this.setCanvasRef} onClick={this.togglePlay} + onKeyDown={this.handleAudioKeyDown} title={alt} aria-label={alt} /> @@ -393,20 +480,21 @@ class Audio extends React.PureComponent { className={classNames('video-player__seek__handle', { active: dragging })} tabIndex='0' style={{ left: `${progress}%`, backgroundColor: this._getAccentColor() }} + onKeyDown={this.handleAudioKeyDown} /> </div> <div className='video-player__controls active'> <div className='video-player__buttons-bar'> <div className='video-player__buttons left'> - <button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> - <button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> + <button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> + <button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> <div className={classNames('video-player__volume', { active: this.state.hovered })} ref={this.setVolumeRef} onMouseDown={this.handleVolumeMouseDown}> <div className='video-player__volume__current' style={{ width: `${volume * 100}%`, backgroundColor: this._getAccentColor() }} /> <span - className={classNames('video-player__volume__handle')} + className='video-player__volume__handle' tabIndex='0' style={{ left: `${volume * 100}%`, backgroundColor: this._getAccentColor() }} /> @@ -415,12 +503,14 @@ class Audio extends React.PureComponent { <span className='video-player__time'> <span className='video-player__time-current'>{formatTime(Math.floor(currentTime))}</span> <span className='video-player__time-sep'>/</span> - <span className='video-player__time-total'>{formatTime(this.state.duration || Math.floor(this.props.duration))}</span> + <span className='video-player__time-total'>{formatTime(Math.floor(this.state.duration || this.props.duration))}</span> </span> </div> <div className='video-player__buttons right'> - <button type='button' title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} onClick={this.handleDownload}><Icon id='download' fixedWidth /></button> + <a title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} className='video-player__download__icon player-button' href={this.props.src} download> + <Icon id={'download'} fixedWidth /> + </a> </div> </div> </div> diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js index 47e189251..8af806ec4 100644 --- a/app/javascript/mastodon/features/compose/components/compose_form.js +++ b/app/javascript/mastodon/features/compose/components/compose_form.js @@ -77,6 +77,18 @@ class ComposeForm extends ImmutablePureComponent { } } + getFulltextForCharacterCounting = () => { + return [this.props.spoiler? this.props.spoilerText: '', countableText(this.props.text)].join(''); + } + + canSubmit = () => { + const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props; + const fulltext = this.getFulltextForCharacterCounting(); + const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0; + + return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (isOnlyWhitespace && !anyMedia)); + } + handleSubmit = () => { if (this.props.text !== this.autosuggestTextarea.textarea.value) { // Something changed the text inside the textarea (e.g. browser extensions like Grammarly) @@ -84,11 +96,7 @@ class ComposeForm extends ImmutablePureComponent { this.props.onChange(this.autosuggestTextarea.textarea.value); } - // Submit disabled: - const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props; - const fulltext = [this.props.spoilerText, countableText(this.props.text)].join(''); - - if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) { + if (!this.canSubmit()) { return; } @@ -178,10 +186,8 @@ class ComposeForm extends ImmutablePureComponent { } render () { - const { intl, onPaste, showSearch, anyMedia } = this.props; + const { intl, onPaste, showSearch } = this.props; const disabled = this.props.isSubmitting; - const text = [this.props.spoilerText, countableText(this.props.text)].join(''); - const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > 500 || (text.length !== 0 && text.trim().length === 0 && !anyMedia); let publishText = ''; if (this.props.privacy === 'private' || this.props.privacy === 'direct') { @@ -243,11 +249,11 @@ class ComposeForm extends ImmutablePureComponent { <PrivacyDropdownContainer /> <SpoilerButtonContainer /> </div> - <div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div> + <div className='character-counter__wrapper'><CharacterCounter max={500} text={this.getFulltextForCharacterCounting()} /></div> </div> <div className='compose-form__publish'> - <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div> + <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={!this.canSubmit()} block /></div> </div> </div> ); diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js index e8a36a923..dc4f48060 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js @@ -5,8 +5,9 @@ import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components' import Overlay from 'react-overlays/lib/Overlay'; import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji'; +import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' }, @@ -25,11 +26,10 @@ const messages = defineMessages({ flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' }, }); -const assetHost = process.env.CDN_HOST || ''; let EmojiPicker, Emoji; // load asynchronously const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`; -const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +const listenerOptions = supportsPassiveEvents ? { passive: true } : false; class ModifierPickerMenu extends React.PureComponent { diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js index 5223025fb..309f46290 100644 --- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js @@ -5,7 +5,7 @@ import IconButton from '../../../components/icon_button'; import Overlay from 'react-overlays/lib/Overlay'; import Motion from '../../ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; @@ -21,7 +21,7 @@ const messages = defineMessages({ change_privacy: { id: 'privacy.change', defaultMessage: 'Adjust status privacy' }, }); -const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +const listenerOptions = supportsPassiveEvents ? { passive: true } : false; class PrivacyDropdownMenu extends React.PureComponent { diff --git a/app/javascript/mastodon/features/compose/components/reply_indicator.js b/app/javascript/mastodon/features/compose/components/reply_indicator.js index 66dc85742..856383893 100644 --- a/app/javascript/mastodon/features/compose/components/reply_indicator.js +++ b/app/javascript/mastodon/features/compose/components/reply_indicator.js @@ -6,7 +6,6 @@ import IconButton from '../../../components/icon_button'; import DisplayName from '../../../components/display_name'; import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { isRtl } from '../../../rtl'; import AttachmentList from 'mastodon/components/attachment_list'; const messages = defineMessages({ @@ -45,9 +44,6 @@ class ReplyIndicator extends ImmutablePureComponent { } const content = { __html: status.get('contentHtml') }; - const style = { - direction: isRtl(status.get('search_index')) ? 'rtl' : 'ltr', - }; return ( <div className='reply-indicator'> @@ -60,7 +56,7 @@ class ReplyIndicator extends ImmutablePureComponent { </a> </div> - <div className='reply-indicator__content' style={style} dangerouslySetInnerHTML={content} /> + <div className='reply-indicator__content' dangerouslySetInnerHTML={content} /> {status.get('media_attachments').size > 0 && ( <AttachmentList diff --git a/app/javascript/mastodon/features/compose/containers/sensitive_button_container.js b/app/javascript/mastodon/features/compose/containers/sensitive_button_container.js index 7073f76c2..1bcce5731 100644 --- a/app/javascript/mastodon/features/compose/containers/sensitive_button_container.js +++ b/app/javascript/mastodon/features/compose/containers/sensitive_button_container.js @@ -6,13 +6,20 @@ import { changeComposeSensitivity } from 'mastodon/actions/compose'; import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; const messages = defineMessages({ - marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' }, - unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' }, + marked: { + id: 'compose_form.sensitive.marked', + defaultMessage: '{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}', + }, + unmarked: { + id: 'compose_form.sensitive.unmarked', + defaultMessage: '{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}', + }, }); const mapStateToProps = state => ({ active: state.getIn(['compose', 'sensitive']), disabled: state.getIn(['compose', 'spoiler']), + mediaCount: state.getIn(['compose', 'media_attachments']).size, }); const mapDispatchToProps = dispatch => ({ @@ -28,16 +35,17 @@ class SensitiveButton extends React.PureComponent { static propTypes = { active: PropTypes.bool, disabled: PropTypes.bool, + mediaCount: PropTypes.number, onClick: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, }; render () { - const { active, disabled, onClick, intl } = this.props; + const { active, disabled, mediaCount, onClick, intl } = this.props; return ( <div className='compose-form__sensitive-button'> - <label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}> + <label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked, { count: mediaCount })}> <input name='mark-sensitive' type='checkbox' @@ -48,7 +56,11 @@ class SensitiveButton extends React.PureComponent { <span className={classNames('checkbox', { active })} /> - <FormattedMessage id='compose_form.sensitive.hide' defaultMessage='Mark media as sensitive' /> + <FormattedMessage + id='compose_form.sensitive.hide' + defaultMessage='{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}' + values={{ count: mediaCount }} + /> </label> </div> ); diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index f7d3cfd08..4e37f3a80 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -1,18 +1,17 @@ import { autoPlayGif } from '../../initial_state'; import unicodeMapping from './emoji_unicode_mapping_light'; +import { assetHost } from 'mastodon/utils/config'; import Trie from 'substring-trie'; const trie = new Trie(Object.keys(unicodeMapping)); -const assetHost = process.env.CDN_HOST || ''; - // Convert to file names from emojis. (For different variation selector emojis) const emojiFilenames = (emojis) => { return emojis.map(v => unicodeMapping[v].filename); }; // Emoji requiring extra borders depending on theme -const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴']); +const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺']); const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️']); const emojiFilename = (filename) => { diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.js b/app/javascript/mastodon/features/getting_started/components/announcements.js index 1896994da..5bc3abac6 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.js +++ b/app/javascript/mastodon/features/getting_started/components/announcements.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types'; import IconButton from 'mastodon/components/icon_button'; import Icon from 'mastodon/components/icon'; import { defineMessages, injectIntl, FormattedMessage, FormattedDate } from 'react-intl'; -import { autoPlayGif, reduceMotion } from 'mastodon/initial_state'; +import { autoPlayGif, reduceMotion, disableSwiping } from 'mastodon/initial_state'; import elephantUIPlane from 'mastodon/../images/elephant_ui_plane.svg'; import { mascot } from 'mastodon/initial_state'; import unicodeMapping from 'mastodon/features/emoji/emoji_unicode_mapping_light'; @@ -15,6 +15,7 @@ import EmojiPickerDropdown from 'mastodon/features/compose/containers/emoji_pick import AnimatedNumber from 'mastodon/components/animated_number'; import TransitionMotion from 'react-motion/lib/TransitionMotion'; import spring from 'react-motion/lib/spring'; +import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -153,8 +154,6 @@ class Content extends ImmutablePureComponent { } -const assetHost = process.env.CDN_HOST || ''; - class Emoji extends React.PureComponent { static propTypes = { @@ -397,7 +396,7 @@ class Announcements extends ImmutablePureComponent { _markAnnouncementAsRead () { const { dismissAnnouncement, announcements } = this.props; const { index } = this.state; - const announcement = announcements.get(index); + const announcement = announcements.get(announcements.size - 1 - index); if (!announcement.get('read')) dismissAnnouncement(announcement.get('id')); } @@ -436,8 +435,9 @@ class Announcements extends ImmutablePureComponent { removeReaction={this.props.removeReaction} intl={intl} selected={index === idx} + disabled={disableSwiping} /> - ))} + )).reverse()} </ReactSwipeableViews> {announcements.size > 1 && ( diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js index d9838e1c7..1b9994612 100644 --- a/app/javascript/mastodon/features/getting_started/index.js +++ b/app/javascript/mastodon/features/getting_started/index.js @@ -10,7 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { me, profile_directory, showTrends } from '../../initial_state'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { List as ImmutableList } from 'immutable'; -import NavigationBar from '../compose/components/navigation_bar'; +import NavigationContainer from '../compose/containers/navigation_container'; import Icon from 'mastodon/components/icon'; import LinkFooter from 'mastodon/features/ui/components/link_footer'; import TrendsContainer from './containers/trends_container'; @@ -40,6 +40,7 @@ const messages = defineMessages({ const mapStateToProps = state => ({ myAccount: state.getIn(['accounts', me]), + columns: state.getIn(['settings', 'columns']), unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size, }); @@ -89,60 +90,66 @@ class GettingStarted extends ImmutablePureComponent { } render () { - const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props; + const { intl, myAccount, columns, multiColumn, unreadFollowRequests } = this.props; const navItems = []; - let i = 1; let height = (multiColumn) ? 0 : 60; if (multiColumn) { navItems.push( - <ColumnSubheading key={i++} text={intl.formatMessage(messages.discover)} />, - <ColumnLink key={i++} icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />, - <ColumnLink key={i++} icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />, + <ColumnSubheading key='header-discover' text={intl.formatMessage(messages.discover)} />, + <ColumnLink key='community_timeline' icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />, + <ColumnLink key='public_timeline' icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />, ); height += 34 + 48*2; if (profile_directory) { navItems.push( - <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />, + <ColumnLink key='directory' icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />, ); height += 48; } navItems.push( - <ColumnSubheading key={i++} text={intl.formatMessage(messages.personal)} />, + <ColumnSubheading key='header-personal' text={intl.formatMessage(messages.personal)} />, ); height += 34; } else if (profile_directory) { navItems.push( - <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />, + <ColumnLink key='directory' icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />, ); height += 48; } + if (multiColumn && !columns.find(item => item.get('id') === 'HOME')) { + navItems.push( + <ColumnLink key='home' icon='home' text={intl.formatMessage(messages.home_timeline)} to='/timelines/home' />, + ); + height += 48; + } + navItems.push( - <ColumnLink key={i++} icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />, - <ColumnLink key={i++} icon='bookmark' text={intl.formatMessage(messages.bookmarks)} to='/bookmarks' />, - <ColumnLink key={i++} icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />, - <ColumnLink key={i++} icon='list-ul' text={intl.formatMessage(messages.lists)} to='/lists' />, + <ColumnLink key='direct' icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />, + <ColumnLink key='bookmark' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} to='/bookmarks' />, + <ColumnLink key='favourites' icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />, + <ColumnLink key='lists' icon='list-ul' text={intl.formatMessage(messages.lists)} to='/lists' />, ); height += 48*4; if (myAccount.get('locked') || unreadFollowRequests > 0) { - navItems.push(<ColumnLink key={i++} icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />); + navItems.push(<ColumnLink key='follow_requests' icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />); height += 48; } if (!multiColumn) { navItems.push( - <ColumnSubheading key={i++} text={intl.formatMessage(messages.settings_subheading)} />, - <ColumnLink key={i++} icon='gears' text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />, + <ColumnSubheading key='header-settings' text={intl.formatMessage(messages.settings_subheading)} />, + <ColumnLink key='preferences' icon='gears' text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />, ); height += 34 + 48; @@ -161,7 +168,7 @@ class GettingStarted extends ImmutablePureComponent { <div className='getting-started'> <div className='getting-started__wrapper' style={{ height }}> - {!multiColumn && <NavigationBar account={myAccount} />} + {!multiColumn && <NavigationContainer />} {navItems} </div> diff --git a/app/javascript/mastodon/features/introduction/index.js b/app/javascript/mastodon/features/introduction/index.js index 754477bb9..5820750a4 100644 --- a/app/javascript/mastodon/features/introduction/index.js +++ b/app/javascript/mastodon/features/introduction/index.js @@ -9,6 +9,7 @@ import screenHello from '../../../images/screen_hello.svg'; import screenFederation from '../../../images/screen_federation.svg'; import screenInteractions from '../../../images/screen_interactions.svg'; import logoTransparent from '../../../images/logo_transparent.svg'; +import { disableSwiping } from 'mastodon/initial_state'; const FrameWelcome = ({ domain, onNext }) => ( <div className='introduction__frame'> @@ -171,7 +172,7 @@ class Introduction extends React.PureComponent { return ( <div className='introduction'> - <ReactSwipeableViews index={currentIndex} onChangeIndex={this.handleSwipe} className='introduction__pager'> + <ReactSwipeableViews index={currentIndex} onChangeIndex={this.handleSwipe} disabled={disableSwiping} className='introduction__pager'> {pages.map((page, i) => ( <div key={i} className={classNames('introduction__frame-wrapper', { 'active': i === currentIndex })}>{page}</div> ))} diff --git a/app/javascript/mastodon/features/list_timeline/index.js b/app/javascript/mastodon/features/list_timeline/index.js index f3205b2bf..8eb645630 100644 --- a/app/javascript/mastodon/features/list_timeline/index.js +++ b/app/javascript/mastodon/features/list_timeline/index.js @@ -10,15 +10,19 @@ import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import { connectListStream } from '../../actions/streaming'; import { expandListTimeline } from '../../actions/timelines'; -import { fetchList, deleteList } from '../../actions/lists'; +import { fetchList, deleteList, updateList } from '../../actions/lists'; import { openModal } from '../../actions/modal'; import MissingIndicator from '../../components/missing_indicator'; import LoadingIndicator from '../../components/loading_indicator'; import Icon from 'mastodon/components/icon'; +import RadioButton from 'mastodon/components/radio_button'; const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' }, deleteConfirm: { id: 'confirmations.delete_list.confirm', defaultMessage: 'Delete' }, + followed: { id: 'lists.replies_policy.followed', defaultMessage: 'Any followed user' }, + none: { id: 'lists.replies_policy.none', defaultMessage: 'No one' }, + list: { id: 'lists.replies_policy.list', defaultMessage: 'Members of the list' }, }); const mapStateToProps = (state, props) => ({ @@ -131,11 +135,18 @@ class ListTimeline extends React.PureComponent { })); } + handleRepliesPolicyChange = ({ target }) => { + const { dispatch } = this.props; + const { id } = this.props.params; + dispatch(updateList(id, undefined, false, target.value)); + } + render () { - const { shouldUpdateScroll, hasUnread, columnId, multiColumn, list } = this.props; + const { shouldUpdateScroll, hasUnread, columnId, multiColumn, list, intl } = this.props; const { id } = this.props.params; const pinned = !!columnId; const title = list ? list.get('title') : id; + const replies_policy = list ? list.get('replies_policy') : undefined; if (typeof list === 'undefined') { return ( @@ -166,7 +177,7 @@ class ListTimeline extends React.PureComponent { pinned={pinned} multiColumn={multiColumn} > - <div className='column-header__links'> + <div className='column-settings__row column-header__links'> <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleEditClick}> <Icon id='pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' /> </button> @@ -175,6 +186,19 @@ class ListTimeline extends React.PureComponent { <Icon id='trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' /> </button> </div> + + { replies_policy !== undefined && ( + <div role='group' aria-labelledby={`list-${id}-replies-policy`}> + <span id={`list-${id}-replies-policy`} className='column-settings__section'> + <FormattedMessage id='lists.replies_policy.title' defaultMessage='Show replies to:' /> + </span> + <div className='column-settings__row'> + { ['none', 'list', 'followed'].map(policy => ( + <RadioButton name='order' key={policy} value={policy} label={intl.formatMessage(messages[policy])} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} /> + ))} + </div> + </div> + )} </ColumnHeader> <StatusListContainer diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.js b/app/javascript/mastodon/features/notifications/components/column_settings.js index 8bd03fbda..8339a367e 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.js +++ b/app/javascript/mastodon/features/notifications/components/column_settings.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { FormattedMessage } from 'react-intl'; import ClearColumnButton from './clear_column_button'; +import GrantPermissionButton from './grant_permission_button'; import SettingToggle from './setting_toggle'; export default class ColumnSettings extends React.PureComponent { @@ -12,6 +13,10 @@ export default class ColumnSettings extends React.PureComponent { pushSettings: ImmutablePropTypes.map.isRequired, onChange: PropTypes.func.isRequired, onClear: PropTypes.func.isRequired, + onRequestNotificationPermission: PropTypes.func, + alertsEnabled: PropTypes.bool, + browserSupport: PropTypes.bool, + browserPermission: PropTypes.bool, }; onPushChange = (path, checked) => { @@ -19,7 +24,7 @@ export default class ColumnSettings extends React.PureComponent { } render () { - const { settings, pushSettings, onChange, onClear } = this.props; + const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props; const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />; const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />; @@ -32,6 +37,20 @@ export default class ColumnSettings extends React.PureComponent { return ( <div> + {alertsEnabled && browserSupport && browserPermission === 'denied' && ( + <div className='column-settings__row column-settings__row--with-margin'> + <span className='warning-hint'><FormattedMessage id='notifications.permission_denied' defaultMessage='Desktop notifications are unavailable due to previously denied browser permissions request' /></span> + </div> + )} + + {alertsEnabled && browserSupport && browserPermission === 'default' && ( + <div className='column-settings__row column-settings__row--with-margin'> + <span className='warning-hint'> + <FormattedMessage id='notifications.permission_required' defaultMessage='Desktop notifications are unavailable because the required permission has not been granted.' /> <GrantPermissionButton onClick={onRequestNotificationPermission} /> + </span> + </div> + )} + <div className='column-settings__row'> <ClearColumnButton onClick={onClear} /> </div> @@ -40,6 +59,7 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-filter-bar' className='column-settings__section'> <FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' /> </span> + <div className='column-settings__row'> <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} /> <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} /> @@ -50,7 +70,7 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span> <div className='column-settings__row'> - <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} /> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} /> {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} onChange={this.onPushChange} label={pushStr} />} <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} /> @@ -61,7 +81,7 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-follow-request' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow_request' defaultMessage='New follow requests:' /></span> <div className='column-settings__row'> - <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} /> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} /> {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow_request']} onChange={this.onPushChange} label={pushStr} />} <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow_request']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow_request']} onChange={onChange} label={soundStr} /> @@ -72,7 +92,7 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span> <div className='column-settings__row'> - <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} /> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} /> {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} onChange={this.onPushChange} label={pushStr} />} <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} /> @@ -83,7 +103,7 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span> <div className='column-settings__row'> - <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} /> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} /> {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} onChange={this.onPushChange} label={pushStr} />} <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} /> @@ -94,7 +114,7 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span> <div className='column-settings__row'> - <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} /> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} /> {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} onChange={this.onPushChange} label={pushStr} />} <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} /> @@ -105,12 +125,23 @@ export default class ColumnSettings extends React.PureComponent { <span id='notifications-poll' className='column-settings__section'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></span> <div className='column-settings__row'> - <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} /> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} /> {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'poll']} onChange={this.onPushChange} label={pushStr} />} <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'poll']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'poll']} onChange={onChange} label={soundStr} /> </div> </div> + + <div role='group' aria-labelledby='notifications-status'> + <span id='notifications-status' className='column-settings__section'><FormattedMessage id='notifications.column_settings.status' defaultMessage='New toots:' /></span> + + <div className='column-settings__row'> + <SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'status']} onChange={onChange} label={alertStr} /> + {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'status']} onChange={this.onPushChange} label={pushStr} />} + <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'status']} onChange={onChange} label={showStr} /> + <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'status']} onChange={onChange} label={soundStr} /> + </div> + </div> </div> ); } diff --git a/app/javascript/mastodon/features/notifications/components/filter_bar.js b/app/javascript/mastodon/features/notifications/components/filter_bar.js index 2fd28d832..368eb0b7e 100644 --- a/app/javascript/mastodon/features/notifications/components/filter_bar.js +++ b/app/javascript/mastodon/features/notifications/components/filter_bar.js @@ -9,6 +9,7 @@ const tooltips = defineMessages({ boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' }, polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' }, follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' }, + statuses: { id: 'notifications.filter.statuses', defaultMessage: 'Updates from people you follow' }, }); export default @injectIntl @@ -88,6 +89,13 @@ class FilterBar extends React.PureComponent { <Icon id='tasks' fixedWidth /> </button> <button + className={selectedFilter === 'status' ? 'active' : ''} + onClick={this.onClick('status')} + title={intl.formatMessage(tooltips.statuses)} + > + <Icon id='home' fixedWidth /> + </button> + <button className={selectedFilter === 'follow' ? 'active' : ''} onClick={this.onClick('follow')} title={intl.formatMessage(tooltips.follows)} diff --git a/app/javascript/mastodon/features/notifications/components/grant_permission_button.js b/app/javascript/mastodon/features/notifications/components/grant_permission_button.js new file mode 100644 index 000000000..798e4c787 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/grant_permission_button.js @@ -0,0 +1,19 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { FormattedMessage } from 'react-intl'; + +export default class GrantPermissionButton extends React.PureComponent { + + static propTypes = { + onClick: PropTypes.func.isRequired, + }; + + render () { + return ( + <button className='text-btn column-header__permission-btn' tabIndex='0' onClick={this.props.onClick}> + <FormattedMessage id='notifications.grant_permission' defaultMessage='Grant permission.' /> + </button> + ); + } + +} diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js index 74065e5e2..94fdbd6f4 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.js +++ b/app/javascript/mastodon/features/notifications/components/notification.js @@ -10,6 +10,7 @@ import AccountContainer from 'mastodon/containers/account_container'; import FollowRequestContainer from '../containers/follow_request_container'; import Icon from 'mastodon/components/icon'; import Permalink from 'mastodon/components/permalink'; +import classNames from 'classnames'; const messages = defineMessages({ favourite: { id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, @@ -17,6 +18,7 @@ const messages = defineMessages({ ownPoll: { id: 'notification.own_poll', defaultMessage: 'Your poll has ended' }, poll: { id: 'notification.poll', defaultMessage: 'A poll you have voted in has ended' }, reblog: { id: 'notification.reblog', defaultMessage: '{name} boosted your status' }, + status: { id: 'notification.status', defaultMessage: '{name} just posted' }, }); const notificationForScreenReader = (intl, message, timestamp) => { @@ -49,6 +51,7 @@ class Notification extends ImmutablePureComponent { updateScrollBottom: PropTypes.func, cacheMediaWidth: PropTypes.func, cachedMediaWidth: PropTypes.number, + unread: PropTypes.bool, }; handleMoveUp = () => { @@ -113,11 +116,11 @@ class Notification extends ImmutablePureComponent { } renderFollow (notification, account, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-follow focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.follow, { name: account.get('acct') }), notification.get('created_at'))}> + <div className={classNames('notification notification-follow focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.follow, { name: account.get('acct') }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='user-plus' fixedWidth /> @@ -135,11 +138,11 @@ class Notification extends ImmutablePureComponent { } renderFollowRequest (notification, account, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-follow-request focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow_request', defaultMessage: '{name} has requested to follow you' }, { name: account.get('acct') }), notification.get('created_at'))}> + <div className={classNames('notification notification-follow-request focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow_request', defaultMessage: '{name} has requested to follow you' }, { name: account.get('acct') }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='user' fixedWidth /> @@ -169,16 +172,17 @@ class Notification extends ImmutablePureComponent { updateScrollBottom={this.props.updateScrollBottom} cachedMediaWidth={this.props.cachedMediaWidth} cacheMediaWidth={this.props.cacheMediaWidth} + unread={this.props.unread} /> ); } renderFavourite (notification, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-favourite focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> + <div className={classNames('notification notification-favourite focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='star' className='star-icon' fixedWidth /> @@ -206,11 +210,11 @@ class Notification extends ImmutablePureComponent { } renderReblog (notification, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-reblog focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.reblog, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> + <div className={classNames('notification notification-reblog focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.reblog, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='retweet' fixedWidth /> @@ -237,14 +241,46 @@ class Notification extends ImmutablePureComponent { ); } + renderStatus (notification, link) { + const { intl, unread } = this.props; + + return ( + <HotKeys handlers={this.getHandlers()}> + <div className={classNames('notification notification-status focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.status, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> + <div className='notification__message'> + <div className='notification__favourite-icon-wrapper'> + <Icon id='home' fixedWidth /> + </div> + + <span title={notification.get('created_at')}> + <FormattedMessage id='notification.status' defaultMessage='{name} just posted' values={{ name: link }} /> + </span> + </div> + + <StatusContainer + id={notification.get('status')} + account={notification.get('account')} + muted + withDismiss + hidden={this.props.hidden} + getScrollPosition={this.props.getScrollPosition} + updateScrollBottom={this.props.updateScrollBottom} + cachedMediaWidth={this.props.cachedMediaWidth} + cacheMediaWidth={this.props.cacheMediaWidth} + /> + </div> + </HotKeys> + ); + } + renderPoll (notification, account) { - const { intl } = this.props; + const { intl, unread } = this.props; const ownPoll = me === account.get('id'); const message = ownPoll ? intl.formatMessage(messages.ownPoll) : intl.formatMessage(messages.poll); return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-poll focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, message, notification.get('created_at'))}> + <div className={classNames('notification notification-poll focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, message, notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='tasks' fixedWidth /> @@ -292,6 +328,8 @@ class Notification extends ImmutablePureComponent { return this.renderFavourite(notification, link); case 'reblog': return this.renderReblog(notification, link); + case 'status': + return this.renderStatus(notification, link); case 'poll': return this.renderPoll(notification, account); } diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js new file mode 100644 index 000000000..df9b7fb1b --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js @@ -0,0 +1,48 @@ +import React from 'react'; +import Icon from 'mastodon/components/icon'; +import Button from 'mastodon/components/button'; +import IconButton from 'mastodon/components/icon_button'; +import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import { changeSetting } from 'mastodon/actions/settings'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +export default @connect() +@injectIntl +class NotificationsPermissionBanner extends React.PureComponent { + + static propTypes = { + dispatch: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + handleClick = () => { + this.props.dispatch(requestBrowserPermission()); + } + + handleClose = () => { + this.props.dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true)); + } + + render () { + const { intl } = this.props; + + return ( + <div className='notifications-permission-banner'> + <div className='notifications-permission-banner__close'> + <IconButton icon='times' onClick={this.handleClose} title={intl.formatMessage(messages.close)} /> + </div> + + <h2><FormattedMessage id='notifications_permission_banner.title' defaultMessage='Never miss a thing' /></h2> + <p><FormattedMessage id='notifications_permission_banner.how_to_control' defaultMessage="To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled." values={{ icon: <Icon id='sliders' /> }} /></p> + <Button onClick={this.handleClick}><FormattedMessage id='notifications_permission_banner.enable' defaultMessage='Enable desktop notifications' /></Button> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/notifications/components/setting_toggle.js b/app/javascript/mastodon/features/notifications/components/setting_toggle.js index e6f593ef8..c4c8bffbe 100644 --- a/app/javascript/mastodon/features/notifications/components/setting_toggle.js +++ b/app/javascript/mastodon/features/notifications/components/setting_toggle.js @@ -12,6 +12,7 @@ export default class SettingToggle extends React.PureComponent { label: PropTypes.node.isRequired, onChange: PropTypes.func.isRequired, defaultValue: PropTypes.bool, + disabled: PropTypes.bool, } onChange = ({ target }) => { @@ -19,12 +20,12 @@ export default class SettingToggle extends React.PureComponent { } render () { - const { prefix, settings, settingPath, label, defaultValue } = this.props; + const { prefix, settings, settingPath, label, defaultValue, disabled } = this.props; const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-'); return ( <div className='setting-toggle'> - <Toggle id={id} checked={settings.getIn(settingPath, defaultValue)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> + <Toggle disabled={disabled} id={id} checked={settings.getIn(settingPath, defaultValue)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> <label htmlFor={id} className='setting-toggle__label'>{label}</label> </div> ); diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index a67f26295..9a70bd4f3 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -3,28 +3,55 @@ import { defineMessages, injectIntl } from 'react-intl'; import ColumnSettings from '../components/column_settings'; import { changeSetting } from '../../../actions/settings'; import { setFilter } from '../../../actions/notifications'; -import { clearNotifications } from '../../../actions/notifications'; +import { clearNotifications, requestBrowserPermission } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { openModal } from '../../../actions/modal'; +import { showAlert } from '../../../actions/alerts'; const messages = defineMessages({ clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' }, clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' }, + permissionDenied: { id: 'notifications.permission_denied_alert', defaultMessage: 'Desktop notifications can\'t be enabled, as browser permission has been denied before' }, }); const mapStateToProps = state => ({ settings: state.getIn(['settings', 'notifications']), pushSettings: state.get('push_notifications'), + alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true), + browserSupport: state.getIn(['notifications', 'browserSupport']), + browserPermission: state.getIn(['notifications', 'browserPermission']), }); const mapDispatchToProps = (dispatch, { intl }) => ({ onChange (path, checked) { if (path[0] === 'push') { - dispatch(changePushNotifications(path.slice(1), checked)); + if (checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changePushNotifications(path.slice(1), checked)); + } else { + dispatch(showAlert(undefined, messages.permissionDenied)); + } + })); + } else { + dispatch(changePushNotifications(path.slice(1), checked)); + } } else if (path[0] === 'quickFilter') { dispatch(changeSetting(['notifications', ...path], checked)); dispatch(setFilter('all')); + } else if (path[0] === 'alerts' && checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { + if (checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changeSetting(['notifications', ...path], checked)); + } else { + dispatch(showAlert(undefined, messages.permissionDenied)); + } + })); + } else { + dispatch(changeSetting(['notifications', ...path], checked)); + } } else { dispatch(changeSetting(['notifications', ...path], checked)); } @@ -38,6 +65,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ })); }, + onRequestNotificationPermission () { + dispatch(requestBrowserPermission()); + }, + }); export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings)); diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index d16a0f33a..108470c9a 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -4,7 +4,15 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Column from '../../components/column'; import ColumnHeader from '../../components/column_header'; -import { expandNotifications, scrollTopNotifications, loadPending, mountNotifications, unmountNotifications } from '../../actions/notifications'; +import { + expandNotifications, + scrollTopNotifications, + loadPending, + mountNotifications, + unmountNotifications, + markNotificationsAsRead, +} from '../../actions/notifications'; +import { submitMarkers } from '../../actions/markers'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import NotificationContainer from './containers/notification_container'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; @@ -15,15 +23,25 @@ import { List as ImmutableList } from 'immutable'; import { debounce } from 'lodash'; import ScrollableList from '../../components/scrollable_list'; import LoadGap from '../../components/load_gap'; +import Icon from 'mastodon/components/icon'; +import compareId from 'mastodon/compare_id'; +import NotificationsPermissionBanner from './components/notifications_permission_banner'; const messages = defineMessages({ title: { id: 'column.notifications', defaultMessage: 'Notifications' }, + markAsRead : { id: 'notifications.mark_as_read', defaultMessage: 'Mark every notification as read' }, +}); + +const getExcludedTypes = createSelector([ + state => state.getIn(['settings', 'notifications', 'shows']), +], (shows) => { + return ImmutableList(shows.filter(item => !item).keys()); }); const getNotifications = createSelector([ state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']), state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']), - state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()), + getExcludedTypes, state => state.getIn(['notifications', 'items']), ], (showFilterBar, allowedType, excludedTypes, notifications) => { if (!showFilterBar || allowedType === 'all') { @@ -32,7 +50,7 @@ const getNotifications = createSelector([ // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type'))); } - return notifications.filter(item => item !== null && allowedType === item.get('type')); + return notifications.filter(item => item === null || allowedType === item.get('type')); }); const mapStateToProps = state => ({ @@ -42,6 +60,9 @@ const mapStateToProps = state => ({ isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0, hasMore: state.getIn(['notifications', 'hasMore']), numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, + lastReadId: state.getIn(['notifications', 'readMarkerId']), + canMarkAsRead: state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0), + needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default' && !state.getIn(['settings', 'notifications', 'dismissPermissionBanner']), }); export default @connect(mapStateToProps) @@ -60,6 +81,9 @@ class Notifications extends React.PureComponent { multiColumn: PropTypes.bool, hasMore: PropTypes.bool, numPending: PropTypes.number, + lastReadId: PropTypes.string, + canMarkAsRead: PropTypes.bool, + needsNotificationPermission: PropTypes.bool, }; static defaultProps = { @@ -146,8 +170,13 @@ class Notifications extends React.PureComponent { } } + handleMarkAsRead = () => { + this.props.dispatch(markNotificationsAsRead()); + this.props.dispatch(submitMarkers({ immediate: true })); + }; + render () { - const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props; + const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; const pinned = !!columnId; const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />; @@ -174,6 +203,7 @@ class Notifications extends React.PureComponent { accountId={item.get('account')} onMoveUp={this.handleMoveUp} onMoveDown={this.handleMoveDown} + unread={lastReadId !== '0' && compareId(item.get('id'), lastReadId) > 0} /> )); } else { @@ -190,6 +220,8 @@ class Notifications extends React.PureComponent { showLoading={isLoading && notifications.size === 0} hasMore={hasMore} numPending={numPending} + prepend={needsNotificationPermission && <NotificationsPermissionBanner />} + alwaysPrepend emptyMessage={emptyMessage} onLoadMore={this.handleLoadOlder} onLoadPending={this.handleLoadPending} @@ -202,6 +234,21 @@ class Notifications extends React.PureComponent { </ScrollableList> ); + let extraButton = null; + + if (canMarkAsRead) { + extraButton = ( + <button + aria-label={intl.formatMessage(messages.markAsRead)} + title={intl.formatMessage(messages.markAsRead)} + onClick={this.handleMarkAsRead} + className='column-header__button' + > + <Icon id='check' /> + </button> + ); + } + return ( <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.title)}> <ColumnHeader @@ -213,6 +260,7 @@ class Notifications extends React.PureComponent { onClick={this.handleHeaderClick} pinned={pinned} multiColumn={multiColumn} + extraButton={extraButton} > <ColumnSettingsContainer /> </ColumnHeader> diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.js b/app/javascript/mastodon/features/picture_in_picture/components/footer.js new file mode 100644 index 000000000..1b1ec6d54 --- /dev/null +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.js @@ -0,0 +1,159 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import IconButton from 'mastodon/components/icon_button'; +import classNames from 'classnames'; +import { me, boostModal } from 'mastodon/initial_state'; +import { defineMessages, injectIntl } from 'react-intl'; +import { replyCompose } from 'mastodon/actions/compose'; +import { reblog, favourite, unreblog, unfavourite } from 'mastodon/actions/interactions'; +import { makeGetStatus } from 'mastodon/selectors'; +import { openModal } from 'mastodon/actions/modal'; + +const messages = defineMessages({ + reply: { id: 'status.reply', defaultMessage: 'Reply' }, + replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' }, + reblog: { id: 'status.reblog', defaultMessage: 'Boost' }, + reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost with original visibility' }, + cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' }, + cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' }, + favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, + replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, + replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, + open: { id: 'status.open', defaultMessage: 'Expand this status' }, +}); + +const makeMapStateToProps = () => { + const getStatus = makeGetStatus(); + + const mapStateToProps = (state, { statusId }) => ({ + status: getStatus(state, { id: statusId }), + askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0, + }); + + return mapStateToProps; +}; + +export default @connect(makeMapStateToProps) +@injectIntl +class Footer extends ImmutablePureComponent { + + static contextTypes = { + router: PropTypes.object, + }; + + static propTypes = { + statusId: PropTypes.string.isRequired, + status: ImmutablePropTypes.map.isRequired, + intl: PropTypes.object.isRequired, + dispatch: PropTypes.func.isRequired, + askReplyConfirmation: PropTypes.bool, + withOpenButton: PropTypes.bool, + onClose: PropTypes.func, + }; + + _performReply = () => { + const { dispatch, status, onClose } = this.props; + const { router } = this.context; + + if (onClose) { + onClose(); + } + + dispatch(replyCompose(status, router.history)); + }; + + handleReplyClick = () => { + const { dispatch, askReplyConfirmation, intl } = this.props; + + if (askReplyConfirmation) { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.replyMessage), + confirm: intl.formatMessage(messages.replyConfirm), + onConfirm: this._performReply, + })); + } else { + this._performReply(); + } + }; + + handleFavouriteClick = () => { + const { dispatch, status } = this.props; + + if (status.get('favourited')) { + dispatch(unfavourite(status)); + } else { + dispatch(favourite(status)); + } + }; + + _performReblog = () => { + const { dispatch, status } = this.props; + dispatch(reblog(status)); + } + + handleReblogClick = e => { + const { dispatch, status } = this.props; + + if (status.get('reblogged')) { + dispatch(unreblog(status)); + } else if ((e && e.shiftKey) || !boostModal) { + this._performReblog(); + } else { + dispatch(openModal('BOOST', { status, onReblog: this._performReblog })); + } + }; + + handleOpenClick = e => { + const { router } = this.context; + + if (e.button !== 0 || !router) { + return; + } + + const { status } = this.props; + + router.history.push(`/statuses/${status.get('id')}`); + } + + render () { + const { status, intl, withOpenButton } = this.props; + + const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); + const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; + + let replyIcon, replyTitle; + + if (status.get('in_reply_to_id', null) === null) { + replyIcon = 'reply'; + replyTitle = intl.formatMessage(messages.reply); + } else { + replyIcon = 'reply-all'; + replyTitle = intl.formatMessage(messages.replyAll); + } + + let reblogTitle = ''; + + if (status.get('reblogged')) { + reblogTitle = intl.formatMessage(messages.cancel_reblog_private); + } else if (publicStatus) { + reblogTitle = intl.formatMessage(messages.reblog); + } else if (reblogPrivate) { + reblogTitle = intl.formatMessage(messages.reblog_private); + } else { + reblogTitle = intl.formatMessage(messages.cannot_reblog); + } + + return ( + <div className='picture-in-picture__footer'> + <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount /> + <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} /> + <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} /> + {withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} />} + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/picture_in_picture/components/header.js b/app/javascript/mastodon/features/picture_in_picture/components/header.js new file mode 100644 index 000000000..7dd199b75 --- /dev/null +++ b/app/javascript/mastodon/features/picture_in_picture/components/header.js @@ -0,0 +1,47 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import IconButton from 'mastodon/components/icon_button'; +import { Link } from 'react-router-dom'; +import Avatar from 'mastodon/components/avatar'; +import DisplayName from 'mastodon/components/display_name'; +import { defineMessages, injectIntl } from 'react-intl'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +const mapStateToProps = (state, { accountId }) => ({ + account: state.getIn(['accounts', accountId]), +}); + +export default @connect(mapStateToProps) +@injectIntl +class Header extends ImmutablePureComponent { + + static propTypes = { + accountId: PropTypes.string.isRequired, + statusId: PropTypes.string.isRequired, + account: ImmutablePropTypes.map.isRequired, + onClose: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + render () { + const { account, statusId, onClose, intl } = this.props; + + return ( + <div className='picture-in-picture__header'> + <Link to={`/statuses/${statusId}`} className='picture-in-picture__header__account'> + <Avatar account={account} size={36} /> + <DisplayName account={account} /> + </Link> + + <IconButton icon='times' onClick={onClose} title={intl.formatMessage(messages.close)} /> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/picture_in_picture/index.js b/app/javascript/mastodon/features/picture_in_picture/index.js new file mode 100644 index 000000000..1e59fbcd3 --- /dev/null +++ b/app/javascript/mastodon/features/picture_in_picture/index.js @@ -0,0 +1,85 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import Video from 'mastodon/features/video'; +import Audio from 'mastodon/features/audio'; +import { removePictureInPicture } from 'mastodon/actions/picture_in_picture'; +import Header from './components/header'; +import Footer from './components/footer'; + +const mapStateToProps = state => ({ + ...state.get('picture_in_picture'), +}); + +export default @connect(mapStateToProps) +class PictureInPicture extends React.Component { + + static propTypes = { + statusId: PropTypes.string, + accountId: PropTypes.string, + type: PropTypes.string, + src: PropTypes.string, + muted: PropTypes.bool, + volume: PropTypes.number, + currentTime: PropTypes.number, + poster: PropTypes.string, + backgroundColor: PropTypes.string, + foregroundColor: PropTypes.string, + accentColor: PropTypes.string, + dispatch: PropTypes.func.isRequired, + }; + + handleClose = () => { + const { dispatch } = this.props; + dispatch(removePictureInPicture()); + } + + render () { + const { type, src, currentTime, accountId, statusId } = this.props; + + if (!currentTime) { + return null; + } + + let player; + + if (type === 'video') { + player = ( + <Video + src={src} + currentTime={this.props.currentTime} + volume={this.props.volume} + muted={this.props.muted} + autoPlay + inline + alwaysVisible + /> + ); + } else if (type === 'audio') { + player = ( + <Audio + src={src} + currentTime={this.props.currentTime} + volume={this.props.volume} + muted={this.props.muted} + poster={this.props.poster} + backgroundColor={this.props.backgroundColor} + foregroundColor={this.props.foregroundColor} + accentColor={this.props.accentColor} + autoPlay + /> + ); + } + + return ( + <div className='picture-in-picture'> + <Header accountId={accountId} statusId={statusId} onClose={this.handleClose} /> + + {player} + + <Footer statusId={statusId} /> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index b1ae0b2cc..043a749ed 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -15,6 +15,7 @@ import scheduleIdleTask from '../../ui/util/schedule_idle_task'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; import AnimatedNumber from 'mastodon/components/animated_number'; +import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; const messages = defineMessages({ public_short: { id: 'privacy.public.short', defaultMessage: 'Public' }, @@ -40,6 +41,10 @@ class DetailedStatus extends ImmutablePureComponent { domain: PropTypes.string.isRequired, compact: PropTypes.bool, showMedia: PropTypes.bool, + pictureInPicture: ImmutablePropTypes.contains({ + inUse: PropTypes.bool, + available: PropTypes.bool, + }), onToggleMediaVisibility: PropTypes.func, }; @@ -56,8 +61,8 @@ class DetailedStatus extends ImmutablePureComponent { e.stopPropagation(); } - handleOpenVideo = (media, options) => { - this.props.onOpenVideo(media, options); + handleOpenVideo = (options) => { + this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options); } handleExpandedToggle = () => { @@ -100,7 +105,7 @@ class DetailedStatus extends ImmutablePureComponent { render () { const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status; const outerStyle = { boxSizing: 'border-box' }; - const { intl, compact } = this.props; + const { intl, compact, pictureInPicture } = this.props; if (!status) { return null; @@ -116,7 +121,9 @@ class DetailedStatus extends ImmutablePureComponent { outerStyle.height = `${this.state.height}px`; } - if (status.get('media_attachments').size > 0) { + if (pictureInPicture.get('inUse')) { + media = <PictureInPicturePlaceholder />; + } else if (status.get('media_attachments').size > 0) { if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { const attachment = status.getIn(['media_attachments', 0]); @@ -138,6 +145,7 @@ class DetailedStatus extends ImmutablePureComponent { media = ( <Video preview={attachment.get('preview_url')} + frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])} blurhash={attachment.get('blurhash')} src={attachment.get('url')} alt={attachment.get('description')} diff --git a/app/javascript/mastodon/features/status/containers/detailed_status_container.js b/app/javascript/mastodon/features/status/containers/detailed_status_container.js index 6d5c33240..0ac4519c8 100644 --- a/app/javascript/mastodon/features/status/containers/detailed_status_container.js +++ b/app/javascript/mastodon/features/status/containers/detailed_status_container.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; import DetailedStatus from '../components/detailed_status'; -import { makeGetStatus } from '../../../selectors'; +import { makeGetStatus, makeGetPictureInPicture } from '../../../selectors'; import { replyCompose, mentionCompose, @@ -40,10 +40,12 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); const mapStateToProps = (state, props) => ({ status: getStatus(state, props), domain: state.getIn(['meta', 'domain']), + pictureInPicture: getPictureInPicture(state, props), }); return mapStateToProps; diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index 179df53a1..09822f372 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -43,7 +43,7 @@ import { import { initMuteModal } from '../../actions/mutes'; import { initBlockModal } from '../../actions/blocks'; import { initReport } from '../../actions/reports'; -import { makeGetStatus } from '../../selectors'; +import { makeGetStatus, makeGetPictureInPicture } from '../../selectors'; import { ScrollContainer } from 'react-router-scroll-4'; import ColumnBackButton from '../../components/column_back_button'; import ColumnHeader from '../../components/column_header'; @@ -72,6 +72,7 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); const getAncestorsIds = createSelector([ (_, { id }) => id, @@ -129,11 +130,12 @@ const makeMapStateToProps = () => { const mapStateToProps = (state, props) => { const status = getStatus(state, { id: props.params.statusId }); - let ancestorsIds = Immutable.List(); + + let ancestorsIds = Immutable.List(); let descendantsIds = Immutable.List(); if (status) { - ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); + ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); descendantsIds = getDescendantsIds(state, { id: status.get('id') }); } @@ -143,6 +145,7 @@ const makeMapStateToProps = () => { descendantsIds, askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0, domain: state.getIn(['meta', 'domain']), + pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }), }; }; @@ -167,6 +170,10 @@ class Status extends ImmutablePureComponent { askReplyConfirmation: PropTypes.bool, multiColumn: PropTypes.bool, domain: PropTypes.string.isRequired, + pictureInPicture: ImmutablePropTypes.contains({ + inUse: PropTypes.bool, + available: PropTypes.bool, + }), }; state = { @@ -274,22 +281,20 @@ class Status extends ImmutablePureComponent { } handleOpenMedia = (media, index) => { - this.props.dispatch(openModal('MEDIA', { media, index })); + this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.get('id'), media, index })); } handleOpenVideo = (media, options) => { - this.props.dispatch(openModal('VIDEO', { media, options })); + this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options })); } handleHotkeyOpenMedia = e => { - const status = this._properStatus(); + const { status } = this.props; e.preventDefault(); if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { - // TODO: toggle play/paused? - } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + if (status.getIn(['media_attachments', 0, 'type']) === 'video') { this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 }); } else { this.handleOpenMedia(status.get('media_attachments'), 0); @@ -492,7 +497,7 @@ class Status extends ImmutablePureComponent { render () { let ancestors, descendants; - const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props; + const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props; const { fullscreen } = this.state; if (status === null) { @@ -550,6 +555,7 @@ class Status extends ImmutablePureComponent { domain={domain} showMedia={this.state.showMedia} onToggleMediaVisibility={this.handleToggleMediaVisibility} + pictureInPicture={pictureInPicture} /> <ActionBar diff --git a/app/javascript/mastodon/features/ui/components/audio_modal.js b/app/javascript/mastodon/features/ui/components/audio_modal.js index a80776b22..0676bd9cf 100644 --- a/app/javascript/mastodon/features/ui/components/audio_modal.js +++ b/app/javascript/mastodon/features/ui/components/audio_modal.js @@ -4,13 +4,11 @@ import PropTypes from 'prop-types'; import Audio from 'mastodon/features/audio'; import { connect } from 'react-redux'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { FormattedMessage } from 'react-intl'; import { previewState } from './video_modal'; -import classNames from 'classnames'; -import Icon from 'mastodon/components/icon'; +import Footer from 'mastodon/features/picture_in_picture/components/footer'; -const mapStateToProps = (state, { status }) => ({ - account: state.getIn(['accounts', status.get('account')]), +const mapStateToProps = (state, { statusId }) => ({ + accountStaticAvatar: state.getIn(['accounts', state.getIn(['statuses', statusId, 'account']), 'avatar_static']), }); export default @connect(mapStateToProps) @@ -18,12 +16,13 @@ class AudioModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, - status: ImmutablePropTypes.map, + statusId: PropTypes.string.isRequired, + accountStaticAvatar: PropTypes.string.isRequired, options: PropTypes.shape({ autoPlay: PropTypes.bool, }), - account: ImmutablePropTypes.map, onClose: PropTypes.func.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, }; static contextTypes = { @@ -52,15 +51,8 @@ class AudioModal extends ImmutablePureComponent { } } - handleStatusClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); - } - } - render () { - const { media, status, account } = this.props; + const { media, accountStaticAvatar, statusId, onClose } = this.props; const options = this.props.options || {}; return ( @@ -71,7 +63,7 @@ class AudioModal extends ImmutablePureComponent { alt={media.get('description')} duration={media.getIn(['meta', 'original', 'duration'], 0)} height={150} - poster={media.get('preview_url') || account.get('avatar_static')} + poster={media.get('preview_url') || accountStaticAvatar} backgroundColor={media.getIn(['meta', 'colors', 'background'])} foregroundColor={media.getIn(['meta', 'colors', 'foreground'])} accentColor={media.getIn(['meta', 'colors', 'accent'])} @@ -79,11 +71,9 @@ class AudioModal extends ImmutablePureComponent { /> </div> - {status && ( - <div className={classNames('media-modal__meta')}> - <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> - </div> - )} + <div className='media-modal__overlay'> + {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />} + </div> </div> ); } diff --git a/app/javascript/mastodon/features/ui/components/boost_modal.js b/app/javascript/mastodon/features/ui/components/boost_modal.js index 00c0481f3..963bb5dc4 100644 --- a/app/javascript/mastodon/features/ui/components/boost_modal.js +++ b/app/javascript/mastodon/features/ui/components/boost_modal.js @@ -75,9 +75,10 @@ class BoostModal extends ImmutablePureComponent { <div className={classNames('status', `status-${status.get('visibility')}`, 'light')}> <div className='boost-modal__status-header'> <div className='boost-modal__status-time'> - <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a> + <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'> + <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> + <RelativeTimestamp timestamp={status.get('created_at')} /></a> </div> - <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> <a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} className='status__display-name'> <div className='status__avatar'> diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index 9b03cf26d..6837450eb 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -8,6 +8,8 @@ import ReactSwipeableViews from 'react-swipeable-views'; import TabsBar, { links, getIndex, getLink } from './tabs_bar'; import { Link } from 'react-router-dom'; +import { disableSwiping } from 'mastodon/initial_state'; + import BundleContainer from '../containers/bundle_container'; import ColumnLoading from './column_loading'; import DrawerLoading from './drawer_loading'; @@ -29,7 +31,7 @@ import Icon from 'mastodon/components/icon'; import ComposePanel from './compose_panel'; import NavigationPanel from './navigation_panel'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import { scrollRight } from '../../../scroll'; const componentMap = { @@ -73,12 +75,14 @@ class ColumnsArea extends ImmutablePureComponent { } componentWillReceiveProps() { - this.setState({ shouldAnimate: false }); + if (typeof this.pendingIndex !== 'number' && this.lastIndex !== getIndex(this.context.router.history.location.pathname)) { + this.setState({ shouldAnimate: false }); + } } componentDidMount() { if (!this.props.singleColumn) { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } this.lastIndex = getIndex(this.context.router.history.location.pathname); @@ -95,10 +99,15 @@ class ColumnsArea extends ImmutablePureComponent { componentDidUpdate(prevProps) { if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); + } + + const newIndex = getIndex(this.context.router.history.location.pathname); + + if (this.lastIndex !== newIndex) { + this.lastIndex = newIndex; + this.setState({ shouldAnimate: true }); } - this.lastIndex = getIndex(this.context.router.history.location.pathname); - this.setState({ shouldAnimate: true }); } componentWillUnmount () { @@ -185,7 +194,7 @@ class ColumnsArea extends ImmutablePureComponent { const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button' aria-label={intl.formatMessage(messages.publish)}><Icon id='pencil' /></Link>; const content = columnIndex !== -1 ? ( - <ReactSwipeableViews key='content' hysteresis={0.2} threshold={15} index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }}> + <ReactSwipeableViews key='content' hysteresis={0.2} threshold={15} index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }} disabled={disableSwiping}> {links.map(this.renderView)} </ReactSwipeableViews> ) : ( diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js index 7348d9599..ffa783e3b 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js @@ -18,6 +18,11 @@ import { length } from 'stringz'; import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components'; import GIFV from 'mastodon/components/gifv'; import { me } from 'mastodon/initial_state'; +// eslint-disable-next-line import/no-extraneous-dependencies +import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js'; +// eslint-disable-next-line import/extensions +import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js'; +import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -48,8 +53,6 @@ const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******') .replace(/\n/g, ' ') .replace(/\*\*\*\*\*\*/g, '\n\n'); -const assetHost = process.env.CDN_HOST || ''; - class ImageLoader extends React.PureComponent { static propTypes = { @@ -104,6 +107,7 @@ class FocalPointModal extends ImmutablePureComponent { dirty: false, progress: 0, loading: true, + ocrStatus: '', }; componentWillMount () { @@ -219,11 +223,18 @@ class FocalPointModal extends ImmutablePureComponent { this.setState({ detecting: true }); - fetchTesseract().then(({ TesseractWorker }) => { - const worker = new TesseractWorker({ - workerPath: `${assetHost}/packs/ocr/worker.min.js`, - corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`, - langPath: `${assetHost}/ocr/lang-data`, + fetchTesseract().then(({ createWorker }) => { + const worker = createWorker({ + workerPath: tesseractWorkerPath, + corePath: tesseractCorePath, + langPath: `${assetHost}/ocr/lang-data/`, + logger: ({ status, progress }) => { + if (status === 'recognizing text') { + this.setState({ ocrStatus: 'detecting', progress }); + } else { + this.setState({ ocrStatus: 'preparing', progress }); + } + }, }); let media_url = media.get('url'); @@ -236,12 +247,18 @@ class FocalPointModal extends ImmutablePureComponent { } } - worker.recognize(media_url) - .progress(({ progress }) => this.setState({ progress })) - .finally(() => worker.terminate()) - .then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false })) - .catch(() => this.setState({ detecting: false })); - }).catch(() => this.setState({ detecting: false })); + (async () => { + await worker.load(); + await worker.loadLanguage('eng'); + await worker.initialize('eng'); + const { data: { text } } = await worker.recognize(media_url); + this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }); + await worker.terminate(); + })(); + }).catch((e) => { + console.error(e); + this.setState({ detecting: false }); + }); } handleThumbnailChange = e => { @@ -261,7 +278,7 @@ class FocalPointModal extends ImmutablePureComponent { render () { const { media, intl, account, onClose, isUploadingThumbnail } = this.props; - const { x, y, dragging, description, dirty, detecting, progress } = this.state; + const { x, y, dragging, description, dirty, detecting, progress, ocrStatus } = this.state; const width = media.getIn(['meta', 'original', 'width']) || null; const height = media.getIn(['meta', 'original', 'height']) || null; @@ -282,6 +299,13 @@ class FocalPointModal extends ImmutablePureComponent { descriptionLabel = <FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' />; } + let ocrMessage = ''; + if (ocrStatus === 'detecting') { + ocrMessage = <FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />; + } else { + ocrMessage = <FormattedMessage id='upload_modal.preparing_ocr' defaultMessage='Preparing OCR…' />; + } + return ( <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}> <div className='report-modal__target'> @@ -333,7 +357,7 @@ class FocalPointModal extends ImmutablePureComponent { /> <div className='setting-text__modifiers'> - <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} /> + <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={ocrMessage} /> </div> </div> @@ -364,6 +388,7 @@ class FocalPointModal extends ImmutablePureComponent { {media.get('type') === 'video' && ( <Video preview={media.get('preview_url')} + frameRate={media.getIn(['meta', 'original', 'frame_rate'])} blurhash={media.get('blurhash')} src={media.get('url')} detailed diff --git a/app/javascript/mastodon/features/ui/components/image_loader.js b/app/javascript/mastodon/features/ui/components/image_loader.js index 5e1cf75af..c6f16a792 100644 --- a/app/javascript/mastodon/features/ui/components/image_loader.js +++ b/app/javascript/mastodon/features/ui/components/image_loader.js @@ -13,6 +13,7 @@ export default class ImageLoader extends React.PureComponent { width: PropTypes.number, height: PropTypes.number, onClick: PropTypes.func, + zoomButtonHidden: PropTypes.bool, } static defaultProps = { @@ -151,6 +152,9 @@ export default class ImageLoader extends React.PureComponent { alt={alt} src={src} onClick={onClick} + width={width} + height={height} + zoomButtonHidden={this.props.zoomButtonHidden} /> )} </div> diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js index d7f97f210..08da10330 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.js +++ b/app/javascript/mastodon/features/ui/components/media_modal.js @@ -4,12 +4,15 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'mastodon/features/video'; import classNames from 'classnames'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import IconButton from 'mastodon/components/icon_button'; import ImmutablePureComponent from 'react-immutable-pure-component'; import ImageLoader from './image_loader'; import Icon from 'mastodon/components/icon'; import GIFV from 'mastodon/components/gifv'; +import { disableSwiping } from 'mastodon/initial_state'; +import Footer from 'mastodon/features/picture_in_picture/components/footer'; +import { getAverageFromBlurhash } from 'mastodon/blurhash'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -24,10 +27,14 @@ class MediaModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.list.isRequired, - status: ImmutablePropTypes.map, + statusId: PropTypes.string, index: PropTypes.number.isRequired, onClose: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, + currentTime: PropTypes.number, + autoPlay: PropTypes.bool, + volume: PropTypes.number, }; static contextTypes = { @@ -37,23 +44,40 @@ class MediaModal extends ImmutablePureComponent { state = { index: null, navigationHidden: false, + zoomButtonHidden: false, }; handleSwipe = (index) => { this.setState({ index: index % this.props.media.size }); } + handleTransitionEnd = () => { + this.setState({ + zoomButtonHidden: false, + }); + } + handleNextClick = () => { - this.setState({ index: (this.getIndex() + 1) % this.props.media.size }); + this.setState({ + index: (this.getIndex() + 1) % this.props.media.size, + zoomButtonHidden: true, + }); } handlePrevClick = () => { - this.setState({ index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size }); + this.setState({ + index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size, + zoomButtonHidden: true, + }); } handleChangeIndex = (e) => { const index = Number(e.currentTarget.getAttribute('data-index')); - this.setState({ index: index % this.props.media.size }); + + this.setState({ + index: index % this.props.media.size, + zoomButtonHidden: true, + }); } handleKeyDown = (e) => { @@ -83,6 +107,25 @@ class MediaModal extends ImmutablePureComponent { this.props.onClose(); }); } + + this._sendBackgroundColor(); + } + + componentDidUpdate (prevProps, prevState) { + if (prevState.index !== this.state.index) { + this._sendBackgroundColor(); + } + } + + _sendBackgroundColor () { + const { media, onChangeBackgroundColor } = this.props; + const index = this.getIndex(); + const blurhash = media.getIn([index, 'blurhash']); + + if (blurhash) { + const backgroundColor = getAverageFromBlurhash(blurhash); + onChangeBackgroundColor(backgroundColor); + } } componentWillUnmount () { @@ -95,6 +138,8 @@ class MediaModal extends ImmutablePureComponent { this.context.router.history.goBack(); } } + + this.props.onChangeBackgroundColor(null); } getIndex () { @@ -110,30 +155,19 @@ class MediaModal extends ImmutablePureComponent { handleStatusClick = e => { if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); + this.context.router.history.push(`/statuses/${this.props.statusId}`); } } render () { - const { media, status, intl, onClose } = this.props; + const { media, statusId, intl, onClose } = this.props; const { navigationHidden } = this.state; const index = this.getIndex(); - let pagination = []; const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>; const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>; - if (media.size > 1) { - pagination = media.map((item, i) => { - const classes = ['media-modal__button']; - if (i === index) { - classes.push('media-modal__button--active'); - } - return (<li className='media-modal__page-dot' key={i}><button tabIndex='0' className={classes.join(' ')} onClick={this.handleChangeIndex} data-index={i}>{i + 1}</button></li>); - }); - } - const content = media.map((image) => { const width = image.getIn(['meta', 'original', 'width']) || null; const height = image.getIn(['meta', 'original', 'height']) || null; @@ -148,10 +182,11 @@ class MediaModal extends ImmutablePureComponent { alt={image.get('description')} key={image.get('url')} onClick={this.toggleNavigation} + zoomButtonHidden={this.state.zoomButtonHidden} /> ); } else if (image.get('type') === 'video') { - const { time } = this.props; + const { currentTime, autoPlay, volume } = this.props; return ( <Video @@ -160,7 +195,10 @@ class MediaModal extends ImmutablePureComponent { src={image.get('url')} width={image.get('width')} height={image.get('height')} - startTime={time || 0} + frameRate={image.getIn(['meta', 'original', 'frame_rate'])} + currentTime={currentTime || 0} + autoPlay={autoPlay || false} + volume={volume || 1} onCloseVideo={onClose} detailed alt={image.get('description')} @@ -200,18 +238,26 @@ class MediaModal extends ImmutablePureComponent { 'media-modal__navigation--hidden': navigationHidden, }); + let pagination; + + if (media.size > 1) { + pagination = media.map((item, i) => ( + <button key={i} className={classNames('media-modal__page-dot', { active: i === index })} data-index={i} onClick={this.handleChangeIndex}> + {i + 1} + </button> + )); + } + return ( <div className='modal-root__modal media-modal'> - <div - className='media-modal__closer' - role='presentation' - onClick={onClose} - > + <div className='media-modal__closer' role='presentation' onClick={onClose} > <ReactSwipeableViews style={swipeableViewsStyle} containerStyle={containerStyle} onChangeIndex={this.handleSwipe} + onTransitionEnd={this.handleTransitionEnd} index={index} + disabled={disableSwiping} > {content} </ReactSwipeableViews> @@ -223,15 +269,10 @@ class MediaModal extends ImmutablePureComponent { {leftNav} {rightNav} - {status && ( - <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}> - <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> - </div> - )} - - <ul className='media-modal__pagination'> - {pagination} - </ul> + <div className='media-modal__overlay'> + {pagination && <ul className='media-modal__pagination'>{pagination}</ul>} + {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />} + </div> </div> </div> ); diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js index 5cf70a0cc..3403830e4 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.js +++ b/app/javascript/mastodon/features/ui/components/modal_root.js @@ -45,6 +45,10 @@ export default class ModalRoot extends React.PureComponent { onClose: PropTypes.func.isRequired, }; + state = { + backgroundColor: null, + }; + getSnapshotBeforeUpdate () { return { visible: !!this.props.type }; } @@ -59,6 +63,10 @@ export default class ModalRoot extends React.PureComponent { } } + setBackgroundColor = color => { + this.setState({ backgroundColor: color }); + } + renderLoading = modalId => () => { return ['MEDIA', 'VIDEO', 'BOOST', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null; } @@ -71,13 +79,14 @@ export default class ModalRoot extends React.PureComponent { render () { const { type, props, onClose } = this.props; + const { backgroundColor } = this.state; const visible = !!type; return ( - <Base onClose={onClose}> + <Base backgroundColor={backgroundColor} onClose={onClose}> {visible && ( <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}> - {(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />} + {(SpecificComponent) => <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={onClose} />} </BundleContainer> )} </Base> diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.js b/app/javascript/mastodon/features/ui/components/mute_modal.js index 852830c3c..d8d8e68c3 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.js +++ b/app/javascript/mastodon/features/ui/components/mute_modal.js @@ -1,25 +1,32 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; -import { injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import Toggle from 'react-toggle'; import Button from '../../../components/button'; import { closeModal } from '../../../actions/modal'; import { muteAccount } from '../../../actions/accounts'; -import { toggleHideNotifications } from '../../../actions/mutes'; +import { toggleHideNotifications, changeMuteDuration } from '../../../actions/mutes'; +const messages = defineMessages({ + minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' }, + hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' }, + days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' }, + indefinite: { id: 'mute_modal.indefinite', defaultMessage: 'Indefinite' }, +}); const mapStateToProps = state => { return { account: state.getIn(['mutes', 'new', 'account']), notifications: state.getIn(['mutes', 'new', 'notifications']), + muteDuration: state.getIn(['mutes', 'new', 'duration']), }; }; const mapDispatchToProps = dispatch => { return { - onConfirm(account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)); + onConfirm(account, notifications, muteDuration) { + dispatch(muteAccount(account.get('id'), notifications, muteDuration)); }, onClose() { @@ -29,6 +36,10 @@ const mapDispatchToProps = dispatch => { onToggleNotifications() { dispatch(toggleHideNotifications()); }, + + onChangeMuteDuration(e) { + dispatch(changeMuteDuration(e.target.value)); + }, }; }; @@ -43,6 +54,8 @@ class MuteModal extends React.PureComponent { onConfirm: PropTypes.func.isRequired, onToggleNotifications: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, + muteDuration: PropTypes.number.isRequired, + onChangeMuteDuration: PropTypes.func.isRequired, }; componentDidMount() { @@ -51,7 +64,7 @@ class MuteModal extends React.PureComponent { handleClick = () => { this.props.onClose(); - this.props.onConfirm(this.props.account, this.props.notifications); + this.props.onConfirm(this.props.account, this.props.notifications, this.props.muteDuration); } handleCancel = () => { @@ -66,8 +79,12 @@ class MuteModal extends React.PureComponent { this.props.onToggleNotifications(); } + changeMuteDuration = (e) => { + this.props.onChangeMuteDuration(e); + } + render () { - const { account, notifications } = this.props; + const { account, notifications, muteDuration, intl } = this.props; return ( <div className='modal-root__modal mute-modal'> @@ -91,6 +108,21 @@ class MuteModal extends React.PureComponent { <FormattedMessage id='mute_modal.hide_notifications' defaultMessage='Hide notifications from this user?' /> </label> </div> + <div> + <span><FormattedMessage id='mute_modal.duration' defaultMessage='Duration' />: </span> + + {/* eslint-disable-next-line jsx-a11y/no-onchange */} + <select value={muteDuration} onChange={this.changeMuteDuration}> + <option value={0}>{intl.formatMessage(messages.indefinite)}</option> + <option value={300}>{intl.formatMessage(messages.minutes, { number: 5 })}</option> + <option value={1800}>{intl.formatMessage(messages.minutes, { number: 30 })}</option> + <option value={3600}>{intl.formatMessage(messages.hours, { number: 1 })}</option> + <option value={21600}>{intl.formatMessage(messages.hours, { number: 6 })}</option> + <option value={86400}>{intl.formatMessage(messages.days, { number: 1 })}</option> + <option value={259200}>{intl.formatMessage(messages.days, { number: 3 })}</option> + <option value={604800}>{intl.formatMessage(messages.days, { number: 7 })}</option> + </select> + </div> </div> <div className='mute-modal__action-bar'> diff --git a/app/javascript/mastodon/features/ui/components/video_modal.js b/app/javascript/mastodon/features/ui/components/video_modal.js index e28bd5b49..2f13a175a 100644 --- a/app/javascript/mastodon/features/ui/components/video_modal.js +++ b/app/javascript/mastodon/features/ui/components/video_modal.js @@ -3,9 +3,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'mastodon/features/video'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { FormattedMessage } from 'react-intl'; -import classNames from 'classnames'; -import Icon from 'mastodon/components/icon'; +import Footer from 'mastodon/features/picture_in_picture/components/footer'; +import { getAverageFromBlurhash } from 'mastodon/blurhash'; export const previewState = 'previewVideoModal'; @@ -13,13 +12,14 @@ export default class VideoModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, - status: ImmutablePropTypes.map, + statusId: PropTypes.string, options: PropTypes.shape({ startTime: PropTypes.number, autoPlay: PropTypes.bool, defaultVolume: PropTypes.number, }), onClose: PropTypes.func.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, }; static contextTypes = { @@ -27,36 +27,35 @@ export default class VideoModal extends ImmutablePureComponent { }; componentDidMount () { - if (this.context.router) { - const history = this.context.router.history; + const { router } = this.context; + const { media, onChangeBackgroundColor, onClose } = this.props; - history.push(history.location.pathname, previewState); + if (router) { + router.history.push(router.history.location.pathname, previewState); + this.unlistenHistory = router.history.listen(() => onClose()); + } + + const backgroundColor = getAverageFromBlurhash(media.get('blurhash')); - this.unlistenHistory = history.listen(() => { - this.props.onClose(); - }); + if (backgroundColor) { + onChangeBackgroundColor(backgroundColor); } } componentWillUnmount () { - if (this.context.router) { + const { router } = this.context; + + if (router) { this.unlistenHistory(); - if (this.context.router.history.location.state === previewState) { - this.context.router.history.goBack(); + if (router.history.location.state === previewState) { + router.history.goBack(); } } } - handleStatusClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); - } - } - render () { - const { media, status, onClose } = this.props; + const { media, statusId, onClose } = this.props; const options = this.props.options || {}; return ( @@ -64,22 +63,21 @@ export default class VideoModal extends ImmutablePureComponent { <div className='video-modal__container'> <Video preview={media.get('preview_url')} + frameRate={media.getIn(['meta', 'original', 'frame_rate'])} blurhash={media.get('blurhash')} src={media.get('url')} - startTime={options.startTime} + currentTime={options.startTime} autoPlay={options.autoPlay} - defaultVolume={options.defaultVolume} + volume={options.defaultVolume} onCloseVideo={onClose} detailed alt={media.get('description')} /> </div> - {status && ( - <div className={classNames('media-modal__meta')}> - <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> - </div> - )} + <div className='media-modal__overlay'> + {statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />} + </div> </div> ); } diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.js b/app/javascript/mastodon/features/ui/components/zoomable_image.js index 3f6562bc9..1cf263cb9 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.js +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.js @@ -1,8 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; +import IconButton from 'mastodon/components/icon_button'; +import { defineMessages, injectIntl } from 'react-intl'; + +const messages = defineMessages({ + compress: { id: 'lightbox.compress', defaultMessage: 'Compress image view box' }, + expand: { id: 'lightbox.expand', defaultMessage: 'Expand image view box' }, +}); const MIN_SCALE = 1; const MAX_SCALE = 4; +const NAV_BAR_HEIGHT = 66; const getMidpoint = (p1, p2) => ({ x: (p1.clientX + p2.clientX) / 2, @@ -14,7 +22,77 @@ const getDistance = (p1, p2) => const clamp = (min, max, value) => Math.min(max, Math.max(min, value)); -export default class ZoomableImage extends React.PureComponent { +// Normalizing mousewheel speed across browsers +// copy from: https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js +const normalizeWheel = event => { + // Reasonable defaults + const PIXEL_STEP = 10; + const LINE_HEIGHT = 40; + const PAGE_HEIGHT = 800; + + let sX = 0, + sY = 0, // spinX, spinY + pX = 0, + pY = 0; // pixelX, pixelY + + // Legacy + if ('detail' in event) { + sY = event.detail; + } + if ('wheelDelta' in event) { + sY = -event.wheelDelta / 120; + } + if ('wheelDeltaY' in event) { + sY = -event.wheelDeltaY / 120; + } + if ('wheelDeltaX' in event) { + sX = -event.wheelDeltaX / 120; + } + + // side scrolling on FF with DOMMouseScroll + if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) { + sX = sY; + sY = 0; + } + + pX = sX * PIXEL_STEP; + pY = sY * PIXEL_STEP; + + if ('deltaY' in event) { + pY = event.deltaY; + } + if ('deltaX' in event) { + pX = event.deltaX; + } + + if ((pX || pY) && event.deltaMode) { + if (event.deltaMode === 1) { // delta in LINE units + pX *= LINE_HEIGHT; + pY *= LINE_HEIGHT; + } else { // delta in PAGE units + pX *= PAGE_HEIGHT; + pY *= PAGE_HEIGHT; + } + } + + // Fall-back if spin cannot be determined + if (pX && !sX) { + sX = (pX < 1) ? -1 : 1; + } + if (pY && !sY) { + sY = (pY < 1) ? -1 : 1; + } + + return { + spinX: sX, + spinY: sY, + pixelX: pX, + pixelY: pY, + }; +}; + +export default @injectIntl +class ZoomableImage extends React.PureComponent { static propTypes = { alt: PropTypes.string, @@ -22,6 +100,8 @@ export default class ZoomableImage extends React.PureComponent { width: PropTypes.number, height: PropTypes.number, onClick: PropTypes.func, + zoomButtonHidden: PropTypes.bool, + intl: PropTypes.object.isRequired, } static defaultProps = { @@ -32,6 +112,26 @@ export default class ZoomableImage extends React.PureComponent { state = { scale: MIN_SCALE, + zoomMatrix: { + type: null, // 'width' 'height' + fullScreen: null, // bool + rate: null, // full screen scale rate + clientWidth: null, + clientHeight: null, + offsetWidth: null, + offsetHeight: null, + clientHeightFixed: null, + scrollTop: null, + scrollLeft: null, + translateX: null, + translateY: null, + }, + zoomState: 'expand', // 'expand' 'compress' + navigationHidden: false, + dragPosition: { top: 0, left: 0, x: 0, y: 0 }, + dragged: false, + lockScroll: { x: 0, y: 0 }, + lockTranslate: { x: 0, y: 0 }, } removers = []; @@ -49,17 +149,105 @@ export default class ZoomableImage extends React.PureComponent { // https://www.chromestatus.com/features/5093566007214080 this.container.addEventListener('touchmove', handler, { passive: false }); this.removers.push(() => this.container.removeEventListener('touchend', handler)); + + handler = this.mouseDownHandler; + this.container.addEventListener('mousedown', handler); + this.removers.push(() => this.container.removeEventListener('mousedown', handler)); + + handler = this.mouseWheelHandler; + this.container.addEventListener('wheel', handler); + this.removers.push(() => this.container.removeEventListener('wheel', handler)); + // Old Chrome + this.container.addEventListener('mousewheel', handler); + this.removers.push(() => this.container.removeEventListener('mousewheel', handler)); + // Old Firefox + this.container.addEventListener('DOMMouseScroll', handler); + this.removers.push(() => this.container.removeEventListener('DOMMouseScroll', handler)); + + this.initZoomMatrix(); } componentWillUnmount () { this.removeEventListeners(); } + componentDidUpdate () { + this.setState({ zoomState: this.state.scale >= this.state.zoomMatrix.rate ? 'compress' : 'expand' }); + + if (this.state.scale === MIN_SCALE) { + this.container.style.removeProperty('cursor'); + } + } + + UNSAFE_componentWillReceiveProps () { + // reset when slide to next image + if (this.props.zoomButtonHidden) { + this.setState({ + scale: MIN_SCALE, + lockTranslate: { x: 0, y: 0 }, + }, () => { + this.container.scrollLeft = 0; + this.container.scrollTop = 0; + }); + } + } + removeEventListeners () { this.removers.forEach(listeners => listeners()); this.removers = []; } + mouseWheelHandler = e => { + e.preventDefault(); + + const event = normalizeWheel(e); + + if (this.state.zoomMatrix.type === 'width') { + // full width, scroll vertical + this.container.scrollTop = Math.max(this.container.scrollTop + event.pixelY, this.state.lockScroll.y); + } else { + // full height, scroll horizontal + this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelY, this.state.lockScroll.x); + } + + // lock horizontal scroll + this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelX, this.state.lockScroll.x); + } + + mouseDownHandler = e => { + this.container.style.cursor = 'grabbing'; + this.container.style.userSelect = 'none'; + + this.setState({ dragPosition: { + left: this.container.scrollLeft, + top: this.container.scrollTop, + // Get the current mouse position + x: e.clientX, + y: e.clientY, + } }); + + this.image.addEventListener('mousemove', this.mouseMoveHandler); + this.image.addEventListener('mouseup', this.mouseUpHandler); + } + + mouseMoveHandler = e => { + const dx = e.clientX - this.state.dragPosition.x; + const dy = e.clientY - this.state.dragPosition.y; + + this.container.scrollLeft = Math.max(this.state.dragPosition.left - dx, this.state.lockScroll.x); + this.container.scrollTop = Math.max(this.state.dragPosition.top - dy, this.state.lockScroll.y); + + this.setState({ dragged: true }); + } + + mouseUpHandler = () => { + this.container.style.cursor = 'grab'; + this.container.style.removeProperty('user-select'); + + this.image.removeEventListener('mousemove', this.mouseMoveHandler); + this.image.removeEventListener('mouseup', this.mouseUpHandler); + } + handleTouchStart = e => { if (e.touches.length !== 2) return; @@ -80,7 +268,8 @@ export default class ZoomableImage extends React.PureComponent { const distance = getDistance(...e.touches); const midpoint = getMidpoint(...e.touches); - const scale = clamp(MIN_SCALE, MAX_SCALE, this.state.scale * distance / this.lastDistance); + const _MAX_SCALE = Math.max(MAX_SCALE, this.state.zoomMatrix.rate); + const scale = clamp(MIN_SCALE, _MAX_SCALE, this.state.scale * distance / this.lastDistance); this.zoom(scale, midpoint); @@ -89,7 +278,7 @@ export default class ZoomableImage extends React.PureComponent { } zoom(nextScale, midpoint) { - const { scale } = this.state; + const { scale, zoomMatrix } = this.state; const { scrollLeft, scrollTop } = this.container; // math memo: @@ -104,14 +293,105 @@ export default class ZoomableImage extends React.PureComponent { this.setState({ scale: nextScale }, () => { this.container.scrollLeft = nextScrollLeft; this.container.scrollTop = nextScrollTop; + // reset the translateX/Y constantly + if (nextScale < zoomMatrix.rate) { + this.setState({ + lockTranslate: { + x: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateX * ((nextScale - MIN_SCALE) / (zoomMatrix.rate - MIN_SCALE)), + y: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateY * ((nextScale - MIN_SCALE) / (zoomMatrix.rate - MIN_SCALE)), + }, + }); + } }); } handleClick = e => { // don't propagate event to MediaModal e.stopPropagation(); + const dragged = this.state.dragged; + this.setState({ dragged: false }); + if (dragged) return; const handler = this.props.onClick; if (handler) handler(); + this.setState({ navigationHidden: !this.state.navigationHidden }); + } + + handleMouseDown = e => { + e.preventDefault(); + } + + initZoomMatrix = () => { + const { width, height } = this.props; + const { clientWidth, clientHeight } = this.container; + const { offsetWidth, offsetHeight } = this.image; + const clientHeightFixed = clientHeight - NAV_BAR_HEIGHT; + + const type = width / height < clientWidth / clientHeightFixed ? 'width' : 'height'; + const fullScreen = type === 'width' ? width > clientWidth : height > clientHeightFixed; + const rate = type === 'width' ? Math.min(clientWidth, width) / offsetWidth : Math.min(clientHeightFixed, height) / offsetHeight; + const scrollTop = type === 'width' ? (clientHeight - offsetHeight) / 2 - NAV_BAR_HEIGHT : (clientHeightFixed - offsetHeight) / 2; + const scrollLeft = (clientWidth - offsetWidth) / 2; + const translateX = type === 'width' ? (width - offsetWidth) / (2 * rate) : 0; + const translateY = type === 'height' ? (height - offsetHeight) / (2 * rate) : 0; + + this.setState({ + zoomMatrix: { + type: type, + fullScreen: fullScreen, + rate: rate, + clientWidth: clientWidth, + clientHeight: clientHeight, + offsetWidth: offsetWidth, + offsetHeight: offsetHeight, + clientHeightFixed: clientHeightFixed, + scrollTop: scrollTop, + scrollLeft: scrollLeft, + translateX: translateX, + translateY: translateY, + }, + }); + } + + handleZoomClick = e => { + e.preventDefault(); + e.stopPropagation(); + + const { scale, zoomMatrix } = this.state; + + if ( scale >= zoomMatrix.rate ) { + this.setState({ + scale: MIN_SCALE, + lockScroll: { + x: 0, + y: 0, + }, + lockTranslate: { + x: 0, + y: 0, + }, + }, () => { + this.container.scrollLeft = 0; + this.container.scrollTop = 0; + }); + } else { + this.setState({ + scale: zoomMatrix.rate, + lockScroll: { + x: zoomMatrix.scrollLeft, + y: zoomMatrix.scrollTop, + }, + lockTranslate: { + x: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateX, + y: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateY, + }, + }, () => { + this.container.scrollLeft = zoomMatrix.scrollLeft; + this.container.scrollTop = zoomMatrix.scrollTop; + }); + } + + this.container.style.cursor = 'grab'; + this.container.style.removeProperty('user-select'); } setContainerRef = c => { @@ -123,29 +403,47 @@ export default class ZoomableImage extends React.PureComponent { } render () { - const { alt, src } = this.props; - const { scale } = this.state; - const overflow = scale === 1 ? 'hidden' : 'scroll'; + const { alt, src, width, height, intl } = this.props; + const { scale, lockTranslate } = this.state; + const overflow = scale === MIN_SCALE ? 'hidden' : 'scroll'; + const zoomButtonShouldHide = this.state.navigationHidden || this.props.zoomButtonHidden || this.state.zoomMatrix.rate <= MIN_SCALE ? 'media-modal__zoom-button--hidden' : ''; + const zoomButtonTitle = this.state.zoomState === 'compress' ? intl.formatMessage(messages.compress) : intl.formatMessage(messages.expand); return ( - <div - className='zoomable-image' - ref={this.setContainerRef} - style={{ overflow }} - > - <img - role='presentation' - ref={this.setImageRef} - alt={alt} - title={alt} - src={src} + <React.Fragment> + <IconButton + className={`media-modal__zoom-button ${zoomButtonShouldHide}`} + title={zoomButtonTitle} + icon={this.state.zoomState} + onClick={this.handleZoomClick} + size={40} style={{ - transform: `scale(${scale})`, - transformOrigin: '0 0', + fontSize: '30px', /* Fontawesome's fa-compress fa-expand is larger than fa-close */ }} - onClick={this.handleClick} /> - </div> + <div + className='zoomable-image' + ref={this.setContainerRef} + style={{ overflow }} + > + <img + role='presentation' + ref={this.setImageRef} + alt={alt} + title={alt} + src={src} + width={width} + height={height} + style={{ + transform: `scale(${scale}) translate(-${lockTranslate.x}px, -${lockTranslate.y}px)`, + transformOrigin: '0 0', + }} + draggable={false} + onClick={this.handleClick} + onMouseDown={this.handleMouseDown} + /> + </div> + </React.Fragment> ); } diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index 553cb3365..507ac1df1 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -8,19 +8,20 @@ import PropTypes from 'prop-types'; import NotificationsContainer from './containers/notifications_container'; import LoadingBarContainer from './containers/loading_bar_container'; import ModalContainer from './containers/modal_container'; -import { isMobile } from '../../is_mobile'; +import { layoutFromWindow } from 'mastodon/is_mobile'; import { debounce } from 'lodash'; import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose'; import { expandHomeTimeline } from '../../actions/timelines'; import { expandNotifications } from '../../actions/notifications'; import { fetchFilters } from '../../actions/filters'; import { clearHeight } from '../../actions/height_cache'; -import { focusApp, unfocusApp } from 'mastodon/actions/app'; -import { synchronouslySubmitMarkers } from 'mastodon/actions/markers'; +import { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app'; +import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; import UploadArea from './components/upload_area'; import ColumnsAreaContainer from './containers/columns_area_container'; import DocumentTitle from './components/document_title'; +import PictureInPicture from 'mastodon/features/picture_in_picture'; import { Compose, Status, @@ -51,7 +52,7 @@ import { Search, Directory, } from './util/async-components'; -import { me, forceSingleColumn } from '../../initial_state'; +import { me } from '../../initial_state'; import { previewState as previewMediaState } from './components/media_modal'; import { previewState as previewVideoState } from './components/video_modal'; @@ -64,6 +65,7 @@ const messages = defineMessages({ }); const mapStateToProps = state => ({ + layout: state.getIn(['meta', 'layout']), isComposing: state.getIn(['compose', 'is_composing']), hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0, hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, @@ -109,17 +111,11 @@ class SwitchingColumnsArea extends React.PureComponent { static propTypes = { children: PropTypes.node, location: PropTypes.object, - onLayoutChange: PropTypes.func.isRequired, - }; - - state = { - mobile: isMobile(window.innerWidth), + mobile: PropTypes.bool, }; componentWillMount () { - window.addEventListener('resize', this.handleResize, { passive: true }); - - if (this.state.mobile || forceSingleColumn) { + if (this.props.mobile) { document.body.classList.toggle('layout-single-column', true); document.body.classList.toggle('layout-multiple-columns', false); } else { @@ -128,44 +124,21 @@ class SwitchingColumnsArea extends React.PureComponent { } } - componentDidUpdate (prevProps, prevState) { + componentDidUpdate (prevProps) { if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) { this.node.handleChildrenContentChange(); } - if (prevState.mobile !== this.state.mobile && !forceSingleColumn) { - document.body.classList.toggle('layout-single-column', this.state.mobile); - document.body.classList.toggle('layout-multiple-columns', !this.state.mobile); + if (prevProps.mobile !== this.props.mobile) { + document.body.classList.toggle('layout-single-column', this.props.mobile); + document.body.classList.toggle('layout-multiple-columns', !this.props.mobile); } } - componentWillUnmount () { - window.removeEventListener('resize', this.handleResize); - } - shouldUpdateScroll (_, { location }) { return location.state !== previewMediaState && location.state !== previewVideoState; } - handleLayoutChange = debounce(() => { - // The cached heights are no longer accurate, invalidate - this.props.onLayoutChange(); - }, 500, { - trailing: true, - }) - - handleResize = () => { - const mobile = isMobile(window.innerWidth); - - if (mobile !== this.state.mobile) { - this.handleLayoutChange.cancel(); - this.props.onLayoutChange(); - this.setState({ mobile }); - } else { - this.handleLayoutChange(); - } - } - setRef = c => { if (c) { this.node = c.getWrappedInstance(); @@ -173,13 +146,11 @@ class SwitchingColumnsArea extends React.PureComponent { } render () { - const { children } = this.props; - const { mobile } = this.state; - const singleColumn = forceSingleColumn || mobile; - const redirect = singleColumn ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />; + const { children, mobile } = this.props; + const redirect = mobile ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />; return ( - <ColumnsAreaContainer ref={this.setRef} singleColumn={singleColumn}> + <ColumnsAreaContainer ref={this.setRef} singleColumn={mobile}> <WrappedSwitch> {redirect} <WrappedRoute path='/getting-started' component={GettingStarted} content={children} /> @@ -243,6 +214,7 @@ class UI extends React.PureComponent { location: PropTypes.object, intl: PropTypes.object.isRequired, dropdownMenuIsOpen: PropTypes.bool, + layout: PropTypes.string.isRequired, }; state = { @@ -265,17 +237,13 @@ class UI extends React.PureComponent { handleWindowFocus = () => { this.props.dispatch(focusApp()); + this.props.dispatch(submitMarkers({ immediate: true })); } handleWindowBlur = () => { this.props.dispatch(unfocusApp()); } - handleLayoutChange = () => { - // The cached heights are no longer accurate, invalidate - this.props.dispatch(clearHeight()); - } - handleDragEnter = (e) => { e.preventDefault(); @@ -349,10 +317,28 @@ class UI extends React.PureComponent { } } - componentWillMount () { + handleLayoutChange = debounce(() => { + this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate + }, 500, { + trailing: true, + }); + + handleResize = () => { + const layout = layoutFromWindow(); + + if (layout !== this.props.layout) { + this.handleLayoutChange.cancel(); + this.props.dispatch(changeLayout(layout)); + } else { + this.handleLayoutChange(); + } + } + + componentDidMount () { window.addEventListener('focus', this.handleWindowFocus, false); window.addEventListener('blur', this.handleWindowBlur, false); window.addEventListener('beforeunload', this.handleBeforeUnload, false); + window.addEventListener('resize', this.handleResize, { passive: true }); document.addEventListener('dragenter', this.handleDragEnter, false); document.addEventListener('dragover', this.handleDragOver, false); @@ -364,19 +350,14 @@ class UI extends React.PureComponent { navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage); } - if (typeof window.Notification !== 'undefined' && Notification.permission === 'default') { - window.setTimeout(() => Notification.requestPermission(), 120 * 1000); - } - + this.props.dispatch(fetchMarkers()); this.props.dispatch(expandHomeTimeline()); this.props.dispatch(expandNotifications()); setTimeout(() => this.props.dispatch(fetchFilters()), 500); - } - componentDidMount () { this.hotkeys.__mousetrap__.stopCallback = (e, element) => { - return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName) && !e.altKey; + return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName); }; } @@ -384,6 +365,7 @@ class UI extends React.PureComponent { window.removeEventListener('focus', this.handleWindowFocus); window.removeEventListener('blur', this.handleWindowBlur); window.removeEventListener('beforeunload', this.handleBeforeUnload); + window.removeEventListener('resize', this.handleResize); document.removeEventListener('dragenter', this.handleDragEnter); document.removeEventListener('dragover', this.handleDragOver); @@ -514,7 +496,7 @@ class UI extends React.PureComponent { render () { const { draggingOver } = this.state; - const { children, isComposing, location, dropdownMenuIsOpen } = this.props; + const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props; const handlers = { help: this.handleHotkeyToggleHelp, @@ -541,10 +523,11 @@ class UI extends React.PureComponent { return ( <HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused> <div className={classNames('ui', { 'is-composing': isComposing })} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}> - <SwitchingColumnsArea location={location} onLayoutChange={this.handleLayoutChange}> + <SwitchingColumnsArea location={location} mobile={layout === 'mobile' || layout === 'single-column'}> {children} </SwitchingColumnsArea> + {layout !== 'mobile' && <PictureInPicture />} <NotificationsContainer /> <LoadingBarContainer className='loading-bar' /> <ModalContainer /> diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index 99dcdca22..70e3cd6e8 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import { fromJS, is } from 'immutable'; +import { is } from 'immutable'; import { throttle, debounce } from 'lodash'; import classNames from 'classnames'; import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen'; @@ -99,25 +99,33 @@ class Video extends React.PureComponent { static propTypes = { preview: PropTypes.string, + frameRate: PropTypes.string, src: PropTypes.string.isRequired, alt: PropTypes.string, width: PropTypes.number, height: PropTypes.number, sensitive: PropTypes.bool, - startTime: PropTypes.number, + currentTime: PropTypes.number, onOpenVideo: PropTypes.func, onCloseVideo: PropTypes.func, detailed: PropTypes.bool, inline: PropTypes.bool, editable: PropTypes.bool, + alwaysVisible: PropTypes.bool, cacheWidth: PropTypes.func, visible: PropTypes.bool, onToggleVisibility: PropTypes.func, + deployPictureInPicture: PropTypes.func, intl: PropTypes.object.isRequired, blurhash: PropTypes.string, - link: PropTypes.node, autoPlay: PropTypes.bool, - defaultVolume: PropTypes.number, + volume: PropTypes.number, + muted: PropTypes.bool, + componetIndex: PropTypes.number, + }; + + static defaultProps = { + frameRate: '25', }; state = { @@ -195,7 +203,7 @@ class Video extends React.PureComponent { handleTimeUpdate = () => { this.setState({ currentTime: this.video.currentTime, - duration: Math.floor(this.video.duration), + duration:this.video.duration, }); } @@ -263,6 +271,81 @@ class Video extends React.PureComponent { } }, 15); + seekBy (time) { + const currentTime = this.video.currentTime + time; + + if (!isNaN(currentTime)) { + this.setState({ currentTime }, () => { + this.video.currentTime = currentTime; + }); + } + } + + handleVideoKeyDown = e => { + // On the video element or the seek bar, we can safely use the space bar + // for playback control because there are no buttons to press + + if (e.key === ' ') { + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + } + } + + handleKeyDown = e => { + const frameTime = 1 / this.getFrameRate(); + + switch(e.key) { + case 'k': + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + break; + case 'm': + e.preventDefault(); + e.stopPropagation(); + this.toggleMute(); + break; + case 'f': + e.preventDefault(); + e.stopPropagation(); + this.toggleFullscreen(); + break; + case 'j': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(-10); + break; + case 'l': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(10); + break; + case ',': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(-frameTime); + break; + case '.': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(frameTime); + break; + } + + // If we are in fullscreen mode, we don't want any hotkeys + // interacting with the UI that's not visible + + if (this.state.fullscreen) { + e.preventDefault(); + e.stopPropagation(); + + if (e.key === 'Escape') { + exitFullscreen(); + } + } + } + togglePlay = () => { if (this.state.paused) { this.setState({ paused: false }, () => this.video.play()); @@ -297,6 +380,15 @@ class Video extends React.PureComponent { document.removeEventListener('webkitfullscreenchange', this.handleFullscreenChange, true); document.removeEventListener('mozfullscreenchange', this.handleFullscreenChange, true); document.removeEventListener('MSFullscreenChange', this.handleFullscreenChange, true); + + if (!this.state.paused && this.video && this.props.deployPictureInPicture) { + this.props.deployPictureInPicture('video', { + src: this.props.src, + currentTime: this.video.currentTime, + muted: this.video.muted, + volume: this.video.volume, + }); + } } componentWillReceiveProps (nextProps) { @@ -328,7 +420,18 @@ class Video extends React.PureComponent { const inView = (top <= (window.innerHeight || document.documentElement.clientHeight)) && (top + height >= 0); if (!this.state.paused && !inView) { - this.setState({ paused: true }, () => this.video.pause()); + this.video.pause(); + + if (this.props.deployPictureInPicture) { + this.props.deployPictureInPicture('video', { + src: this.props.src, + currentTime: this.video.currentTime, + muted: this.video.muted, + volume: this.video.volume, + }); + } + + this.setState({ paused: true }); } }, 150, { trailing: true }) @@ -361,15 +464,21 @@ class Video extends React.PureComponent { } handleLoadedData = () => { - if (this.props.startTime) { - this.video.currentTime = this.props.startTime; + const { currentTime, volume, muted, autoPlay } = this.props; + + if (currentTime) { + this.video.currentTime = currentTime; + } + + if (volume !== undefined) { + this.video.volume = volume; } - if (this.props.defaultVolume !== undefined) { - this.video.volume = this.props.defaultVolume; + if (muted !== undefined) { + this.video.muted = muted; } - if (this.props.autoPlay) { + if (autoPlay) { this.video.play(); } } @@ -387,25 +496,14 @@ class Video extends React.PureComponent { } handleOpenVideo = () => { - const { src, preview, width, height, alt } = this.props; - - const media = fromJS({ - type: 'video', - url: src, - preview_url: preview, - description: alt, - width, - height, - }); + this.video.pause(); - const options = { + this.props.onOpenVideo({ startTime: this.video.currentTime, autoPlay: !this.state.paused, defaultVolume: this.state.volume, - }; - - this.video.pause(); - this.props.onOpenVideo(media, options); + componetIndex: this.props.componetIndex, + }); } handleCloseVideo = () => { @@ -413,10 +511,21 @@ class Video extends React.PureComponent { this.props.onCloseVideo(); } + getFrameRate () { + if (this.props.frameRate && isNaN(this.props.frameRate)) { + // The frame rate is returned as a fraction string so we + // need to convert it to a number + + return this.props.frameRate.split('/').reduce((p, c) => p / c); + } + + return this.props.frameRate; + } + render () { - const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link, editable, blurhash } = this.props; + const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, editable, blurhash } = this.props; const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; - const progress = (currentTime / duration) * 100; + const progress = Math.min((currentTime / duration) * 100, 100); const playerStyle = {}; let { width, height } = this.props; @@ -430,7 +539,7 @@ class Video extends React.PureComponent { let preload; - if (startTime || fullscreen || dragging) { + if (this.props.currentTime || fullscreen || dragging) { preload = 'auto'; } else if (detailed) { preload = 'metadata'; @@ -455,6 +564,7 @@ class Video extends React.PureComponent { onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClickRoot} + onKeyDown={this.handleKeyDown} tabIndex={0} > <Blurhash @@ -478,6 +588,7 @@ class Video extends React.PureComponent { height={height} volume={volume} onClick={this.togglePlay} + onKeyDown={this.handleVideoKeyDown} onPlay={this.handlePlay} onPause={this.handlePause} onLoadedData={this.handleLoadedData} @@ -500,13 +611,14 @@ class Video extends React.PureComponent { className={classNames('video-player__seek__handle', { active: dragging })} tabIndex='0' style={{ left: `${progress}%` }} + onKeyDown={this.handleVideoKeyDown} /> </div> <div className='video-player__buttons-bar'> <div className='video-player__buttons left'> - <button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay} autoFocus={detailed}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> - <button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> + <button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay} autoFocus={detailed}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> + <button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> <div className={classNames('video-player__volume', { active: this.state.hovered })} onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> <div className='video-player__volume__current' style={{ width: `${volume * 100}%` }} /> @@ -522,18 +634,16 @@ class Video extends React.PureComponent { <span className='video-player__time'> <span className='video-player__time-current'>{formatTime(Math.floor(currentTime))}</span> <span className='video-player__time-sep'>/</span> - <span className='video-player__time-total'>{formatTime(duration)}</span> + <span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span> </span> )} - - {link && <span className='video-player__link'>{link}</span>} </div> <div className='video-player__buttons right'> - {(!onCloseVideo && !editable && !fullscreen) && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} - {(!fullscreen && onOpenVideo) && <button type='button' title={intl.formatMessage(messages.expand)} aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} - {onCloseVideo && <button type='button' title={intl.formatMessage(messages.close)} aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} - <button type='button' title={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> + {(!onCloseVideo && !editable && !fullscreen && !this.props.alwaysVisible) && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} + {(!fullscreen && onOpenVideo) && <button type='button' title={intl.formatMessage(messages.expand)} aria-label={intl.formatMessage(messages.expand)} className='player-button' onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} + {onCloseVideo && <button type='button' title={intl.formatMessage(messages.close)} aria-label={intl.formatMessage(messages.close)} className='player-button' onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} + <button type='button' title={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} className='player-button' onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> </div> </div> </div> diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 1134c55db..80d43907d 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -25,5 +25,6 @@ export const usePendingItems = getMeta('use_pending_items'); export const showTrends = getMeta('trends'); export const title = getMeta('title'); export const cropImages = getMeta('crop_images'); +export const disableSwiping = getMeta('disable_swiping'); export default initialState; diff --git a/app/javascript/mastodon/is_mobile.js b/app/javascript/mastodon/is_mobile.js index f96df1ebb..2926eb4b1 100644 --- a/app/javascript/mastodon/is_mobile.js +++ b/app/javascript/mastodon/is_mobile.js @@ -1,27 +1,32 @@ -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; +import { forceSingleColumn } from 'mastodon/initial_state'; const LAYOUT_BREAKPOINT = 630; -export function isMobile(width) { - return width <= LAYOUT_BREAKPOINT; +export const isMobile = width => width <= LAYOUT_BREAKPOINT; + +export const layoutFromWindow = () => { + if (isMobile(window.innerWidth)) { + return 'mobile'; + } else if (forceSingleColumn) { + return 'single-column'; + } else { + return 'multi-column'; + } }; const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; let userTouching = false; -let listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +let listenerOptions = supportsPassiveEvents ? { passive: true } : false; -function touchListener() { +const touchListener = () => { userTouching = true; window.removeEventListener('touchstart', touchListener, listenerOptions); -} +}; window.addEventListener('touchstart', touchListener, listenerOptions); -export function isUserTouching() { - return userTouching; -} +export const isUserTouching = () => userTouching; -export function isIOS() { - return iOS; -}; +export const isIOS = () => iOS; diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 548471edf..4d43a2720 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "تصفح المزيد على الملف التعريفي الأصلي", "account.cancel_follow_request": "إلغاء طلب المتابَعة", "account.direct": "رسالة خاصة إلى @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "النطاق مخفي", "account.edit_profile": "تعديل الملف الشخصي", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "أوصِ به على صفحتك", "account.follow": "تابِع", "account.followers": "مُتابِعون", @@ -147,6 +149,7 @@ "emoji_button.search_results": "نتائج البحث", "emoji_button.symbols": "رموز", "emoji_button.travel": "الأماكن والسفر", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "ليس هناك تبويقات!", "empty_column.account_unavailable": "الملف التعريفي غير متوفر", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", @@ -166,7 +169,9 @@ "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.", "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات", "error.unexpected_crash.explanation": "نظرا لوجود خطأ في التعليمات البرمجية أو مشكلة توافق مع المتصفّح، تعذر عرض هذه الصفحة بشكل صحيح.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "حاول إعادة إنعاش الصفحة. إن لم تُحلّ المشكلة ، يمكنك دائمًا استخدام ماستدون عبر متصفّح آخر أو تطبيق أصلي.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", "follow_request.authorize": "ترخيص", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث", "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة", "lightbox.close": "إغلاق", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "التالي", "lightbox.previous": "العودة", - "lightbox.view_context": "اعرض السياق", "lists.account.add": "أضف إلى القائمة", "lists.account.remove": "احذف من القائمة", "lists.delete": "احذف القائمة", @@ -260,6 +266,10 @@ "lists.edit.submit": "تعديل العنوان", "lists.new.create": "إنشاء قائمة", "lists.new.title_placeholder": "عنوان القائمة الجديدة", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها", "lists.subheading": "قوائمك", "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "عرض / إخفاء", "missing_indicator.label": "غير موجود", "missing_indicator.sublabel": "تعذر العثور على هذا المورد", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "تطبيقات الأجهزة المحمولة", "navigation_bar.blocks": "الحسابات المحجوبة", "navigation_bar.bookmarks": "الفواصل المرجعية", @@ -298,6 +310,7 @@ "notification.own_poll": "انتهى استطلاعك للرأي", "notification.poll": "لقد إنتها تصويت شاركت فيه", "notification.reblog": "{name} قام بترقية تبويقك", + "notification.status": "{name} just posted", "notifications.clear": "امسح الإخطارات", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", "notifications.column_settings.alert": "إشعارات سطح المكتب", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.show": "اعرِضها في عمود", "notifications.column_settings.sound": "أصدر صوتا", + "notifications.column_settings.status": "تبويقات جديدة:", "notifications.filter.all": "الكل", "notifications.filter.boosts": "الترقيات", "notifications.filter.favourites": "المفضلة", "notifications.filter.follows": "يتابِع", "notifications.filter.mentions": "الإشارات", "notifications.filter.polls": "نتائج استطلاع الرأي", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} إشعارات", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "انتهى", "poll.refresh": "تحديث", "poll.total_people": "{count, plural, one {# شخص} two {# شخصين} few {# أشخاص} many {# أشخاص} other {# أشخاص}}", @@ -430,7 +454,7 @@ "units.short.million": "{count} مليون", "units.short.thousand": "{count} ألف", "upload_area.title": "اسحب ثم أفلت للرفع", - "upload_button.label": "إضافة وسائط ({formats})", + "upload_button.label": "إضافة وسائط", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.", "upload_form.audio_description": "وصف للأشخاص ذي قِصر السمع", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "اكتشف النص مِن الصورة", "upload_modal.edit_media": "تعديل الوسائط", "upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "معاينة ({ratio})", "upload_progress.label": "يرفع...", "video.close": "إغلاق الفيديو", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 6c6232262..4f5fec8b1 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Encaboxar la solicitú de siguimientu", "account.direct": "Unviar un mensaxe direutu a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Dominiu anubríu", "account.edit_profile": "Editar el perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Destacar nel perfil", "account.follow": "Siguir", "account.followers": "Siguidores", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Barritar", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "El testu nun va anubrise darrera d'una alvertencia", "compose_form.spoiler.unmarked": "El testu nun va anubrise", "compose_form.spoiler_placeholder": "Escribi equí l'alvertencia", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes y llugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "¡Equí nun hai barritos!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Entá nun bloquiesti a nunengún usuariu.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Entá nun tienes nunengún avisu. Interactúa con otros p'aniciar la conversación.", "empty_column.public": "¡Equí nun hai nada! Escribi daqué público o sigui a usuarios d'otros sirvidores pa rellenar esto", "error.unexpected_crash.explanation": "Pola mor d'un fallu nel códigu o un problema de compatibilidá del restolador, esta páxina nun pudo amosase correutamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizar", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "pa desenfocar l'área de composición/gueta", "keyboard_shortcuts.up": "pa xubir na llista", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Siguiente", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Amestar a la llista", "lists.account.remove": "Desaniciar de la llista", "lists.delete": "Desaniciar la llista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "Títulu nuevu de la llista", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Guetar ente la xente que sigues", "lists.subheading": "Les tos llistes", "load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Alternar la visibilidá", "missing_indicator.label": "Nun s'alcontró", "missing_indicator.sublabel": "Esti recursu nun pudo alcontrase", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "¿Anubrir los avisos d'esti usuariu?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicaciones pa móviles", "navigation_bar.blocks": "Usuarios bloquiaos", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "Finó una encuesta na que votesti", "notification.reblog": "{name} compartió'l to estáu", + "notification.status": "{name} just posted", "notifications.clear": "Llimpiar avisos", "notifications.clear_confirmation": "¿De xuru que quies llimpiar dafechu tolos avisos?", "notifications.column_settings.alert": "Avisos d'escritoriu", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Barritos compartíos:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir un soníu", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Too", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} avisos", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Acabó", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# persona} other {# persones}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Deteutar el testu de la semeya", "upload_modal.edit_media": "Edición", "upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que va amosase siempres en toles miniatures.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previsualización ({ratio})", "upload_progress.label": "Xubiendo…", "video.close": "Zarrar el videu", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 42c8997b7..4778d6618 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Откажи искането за следване", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Скрит домейн", "account.edit_profile": "Редактирай профила си", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Характеристика на профила", "account.follow": "Последвай", "account.followers": "Последователи", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Раздумай", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Content warning", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Затвори", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} сподели твоята публикация", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Десктоп известия", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Споделяния:", "notifications.column_settings.show": "Покажи в колона", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 7de1a1022..9b73c3597 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "নোট", "account.add_or_remove_from_list": "তালিকাতে যুক্ত বা অপসারণ করুন", "account.badges.bot": "বট", - "account.badges.group": "Group", + "account.badges.group": "গ্রুপ", "account.block": "@{name} কে ব্লক করুন", "account.block_domain": "{domain} থেকে সব আড়াল করুন", "account.blocked": "অবরুদ্ধ", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "মূল প্রোফাইলটিতে আরও ব্রাউজ করুন", "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন", "account.direct": "@{name} কে সরাসরি বার্তা", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "ডোমেন গোপন করুন", "account.edit_profile": "প্রোফাইল পরিবর্তন করুন", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "নিজের পাতায় দেখান", "account.follow": "অনুসরণ করুন", "account.followers": "অনুসরণকারী", "account.followers.empty": "এই সদস্যকে এখনো কেউ অনুসরণ করে না।.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural,one {{counter} জন অনুসরণকারী } other {{counter} জন অনুসরণকারী}}", + "account.following_counter": "{count, plural,one {{counter} জনকে অনুসরণ} other {{counter} জনকে অনুসরণ}}", "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.", "account.follows_you": "আপনাকে অনুসরণ করে", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", @@ -36,19 +38,19 @@ "account.requested": "অনুমতির অপেক্ষা। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন", "account.share": "@{name} র প্রোফাইল অন্যদের দেখান", "account.show_reblogs": "@{name} র সমর্থনগুলো দেখান", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} টুট} other {{counter} টুট}}", "account.unblock": "@{name} র কার্যকলাপ দেখুন", "account.unblock_domain": "{domain} কে আবার দেখুন", "account.unendorse": "আপনার নিজের পাতায় এটা দেখবেন না", "account.unfollow": "অনুসরণ না করতে", "account.unmute": "@{name} র কার্যকলাপ আবার দেখুন", "account.unmute_notifications": "@{name} র প্রজ্ঞাপন দেখুন", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "নোট যোগ করতে ক্লিক করুন", "alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।", "alert.rate_limited.title": "হার সীমিত", "alert.unexpected.message": "সমস্যা অপ্রত্যাশিত.", "alert.unexpected.title": "ওহো!", - "announcement.announcement": "Announcement", + "announcement.announcement": "ঘোষণা", "autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}", "boost_modal.combo": "পরেরবার আপনি {combo} টিপলে এটি আর আসবে না", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।.", @@ -58,7 +60,7 @@ "bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।.", "bundle_modal_error.retry": "আবার চেষ্টা করুন", "column.blocks": "যাদের ব্লক করা হয়েছে", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "বুকমার্ক", "column.community": "স্থানীয় সময়সারি", "column.direct": "সরাসরি লেখা", "column.directory": "প্রোফাইল ব্রাউজ করুন", @@ -79,9 +81,9 @@ "column_header.show_settings": "সেটিং দেখান", "column_header.unpin": "পিন খুলুন", "column_subheading.settings": "সেটিং", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "শুধুমাত্র স্থানীয়", "community.column_settings.media_only": "শুধুমাত্র ছবি বা ভিডিও", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "শুধুমাত্র দূরবর্তী", "compose_form.direct_message_warning": "শুধুমাত্র যাদেরকে উল্লেখ করা হয়েছে তাদেরকেই এই টুটটি পাঠানো হবে ।", "compose_form.direct_message_warning_learn_more": "আরো জানুন", "compose_form.hashtag_warning": "কোনো হ্যাশট্যাগের ভেতরে এই টুটটি থাকবেনা কারণ এটি তালিকাবহির্ভূত। শুধুমাত্র প্রকাশ্য ঠোটগুলো হ্যাশট্যাগের ভেতরে খুঁজে পাওয়া যাবে।", @@ -92,8 +94,8 @@ "compose_form.poll.duration": "ভোটগ্রহনের সময়", "compose_form.poll.option_placeholder": "বিকল্প {number}", "compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "একাধিক পছন্দ অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন", + "compose_form.poll.switch_to_single": "একটি একক পছন্দের অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন", "compose_form.publish": "টুট", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে", @@ -147,10 +149,11 @@ "emoji_button.search_results": "খোঁজার ফলাফল", "emoji_button.symbols": "প্রতীক", "emoji_button.travel": "ভ্রমণ এবং স্থান", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "এখানে কোনো টুট নেই!", "empty_column.account_unavailable": "নিজস্ব পাতা নেই", "empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "আপনার কাছে এখনও কোনও বুকমার্কড টুট নেই। আপনি যখন একটি বুকমার্ক করেন, এটি এখানে প্রদর্শিত হবে।", "empty_column.community": "স্থানীয় সময়রেখাতে কিছু নেই। প্রকাশ্যভাবে কিছু লিখে লেখালেখির উদ্বোধন করে ফেলুন!", "empty_column.direct": "আপনার কাছে সরাসরি পাঠানো কোনো লেখা নেই। যদি কেও পাঠায়, সেটা এখানে দেখা যাবে।", "empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।", @@ -166,13 +169,15 @@ "empty_column.notifications": "আপনার এখনো কোনো প্রজ্ঞাপন নেই। কথোপকথন শুরু করতে, অন্যদের সাথে মেলামেশা করতে পারেন।", "empty_column.public": "এখানে এখনো কিছু নেই! প্রকাশ্য ভাবে কিছু লিখুন বা অন্য সার্ভার থেকে কাওকে অনুসরণ করে এই জায়গা ভরে ফেলুন", "error.unexpected_crash.explanation": "আমাদের কোড বা ব্রাউজারের সামঞ্জস্য ইস্যুতে একটি বাগের কারণে এই পৃষ্ঠাটি সঠিকভাবে প্রদর্শিত করা যায় নি।", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "পাতাটি রিফ্রেশ করে চেষ্টা করুন। তবুও যদি না হয়, তবে আপনি অন্য একটি ব্রাউজার অথবা আপনার ডিভাইসের জন্যে এপের মাধ্যমে মাস্টডন ব্যাবহার করতে পারবেন।.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", "follow_request.authorize": "অনুমতি দিন", "follow_request.reject": "প্রত্যাখ্যান করুন", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "আপনার অ্যাকাউন্টটি লক না থাকলেও, {domain} কর্মীরা ভেবেছিলেন যে আপনি এই অ্যাকাউন্টগুলি থেকে ম্যানুয়ালি অনুসরণের অনুরোধগুলি পর্যালোচনা করতে চাইতে পারেন।", + "generic.saved": "সংরক্ষণ হয়েছে", "getting_started.developers": "তৈরিকারকদের জন্য", "getting_started.directory": "নিজস্ব-পাতাগুলির তালিকা", "getting_started.documentation": "নথিপত্র", @@ -193,8 +198,8 @@ "home.column_settings.basic": "সাধারণ", "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান", "home.column_settings.show_replies": "মতামত দেখান", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", + "home.hide_announcements": "ঘোষণা লুকান", + "home.show_announcements": "ঘোষণা দেখান", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}", "intervals.full.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}}", @@ -236,13 +241,13 @@ "keyboard_shortcuts.muted": "বন্ধ করা ব্যবহারকারীদের তালিকা খুলতে", "keyboard_shortcuts.my_profile": "আপনার নিজের পাতা দেখতে", "keyboard_shortcuts.notifications": "প্রজ্ঞাপনের কলাম খুলতে", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "মিডিয়া খলার জন্য", "keyboard_shortcuts.pinned": "পিন দেওয়া টুটের তালিকা খুলতে", "keyboard_shortcuts.profile": "লেখকের পাতা দেখতে", "keyboard_shortcuts.reply": "মতামত দিতে", "keyboard_shortcuts.requests": "অনুসরণ অনুরোধের তালিকা দেখতে", "keyboard_shortcuts.search": "খোঁজার অংশে ফোকাস করতে", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "CW ক্ষেত্র দেখাবার/লুকবার জন্য", "keyboard_shortcuts.start": "\"প্রথম শুরুর\" কলাম বের করতে", "keyboard_shortcuts.toggle_hidden": "CW লেখা দেখতে বা লুকাতে", "keyboard_shortcuts.toggle_sensitivity": "ভিডিও/ছবি দেখতে বা বন্ধ করতে", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "লেখা বা খোঁজার জায়গায় ফোকাস না করতে", "keyboard_shortcuts.up": "তালিকার উপরের দিকে যেতে", "lightbox.close": "বন্ধ", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "পরবর্তী", "lightbox.previous": "পূর্ববর্তী", - "lightbox.view_context": "প্রসঙ্গটি দেখতে", "lists.account.add": "তালিকাতে যুক্ত করতে", "lists.account.remove": "তালিকা থেকে বাদ দিতে", "lists.delete": "তালিকা মুছে ফেলতে", @@ -260,6 +266,10 @@ "lists.edit.submit": "শিরোনাম সম্পাদনা করতে", "lists.new.create": "তালিকাতে যুক্ত করতে", "lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন", "lists.subheading": "আপনার তালিকা", "load_pending": "{count, plural, one {# নতুন জিনিস} other {# নতুন জিনিস}}", @@ -267,10 +277,12 @@ "media_gallery.toggle_visible": "দৃশ্যতার অবস্থা বদলান", "missing_indicator.label": "খুঁজে পাওয়া যায়নি", "missing_indicator.sublabel": "জিনিসটা খুঁজে পাওয়া যায়নি", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "মোবাইলের আপ্প", "navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "বুকমার্ক", "navigation_bar.community_timeline": "স্থানীয় সময়রেখা", "navigation_bar.compose": "নতুন টুট লিখুন", "navigation_bar.direct": "সরাসরি লেখাগুলি", @@ -293,11 +305,12 @@ "navigation_bar.security": "নিরাপত্তা", "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন", "notification.follow": "{name} আপনাকে অনুসরণ করেছেন", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow_request": "{name} আপনাকে অনুসরণ করার জন্য অনুরধ করেছে", "notification.mention": "{name} আপনাকে উল্লেখ করেছেন", "notification.own_poll": "আপনার পোল শেষ হয়েছে", "notification.poll": "আপনি ভোট দিয়েছিলেন এমন এক নির্বাচনের ভোটের সময় শেষ হয়েছে", "notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন", + "notification.status": "{name} just posted", "notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে", "notifications.clear_confirmation": "আপনি কি নির্চিত প্রজ্ঞাপনগুলো মুছে ফেলতে চান ?", "notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপনগুলি", @@ -306,20 +319,31 @@ "notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ", "notifications.column_settings.filter_bar.show": "দেখানো", "notifications.column_settings.follow": "নতুন অনুসরণকারীরা:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "অনুসরণের অনুরোধগুলি:", "notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:", "notifications.column_settings.poll": "নির্বাচনের ফলাফল:", "notifications.column_settings.push": "পুশ প্রজ্ঞাপনগুলি", "notifications.column_settings.reblog": "সমর্থনগুলো:", "notifications.column_settings.show": "কলামে দেখানো", "notifications.column_settings.sound": "শব্দ বাজানো", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "সব", "notifications.filter.boosts": "সমর্থনগুলো", "notifications.filter.favourites": "পছন্দের গুলো", "notifications.filter.follows": "অনুসরণের", "notifications.filter.mentions": "উল্লেখিত", "notifications.filter.polls": "নির্বাচনের ফলাফল", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} প্রজ্ঞাপন", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "বন্ধ", "poll.refresh": "বদলেছে কিনা দেখতে", "poll.total_people": "{count, plural, one {# ব্যক্তি} other {# ব্যক্তি}}", @@ -345,7 +369,7 @@ "relative_time.just_now": "এখন", "relative_time.minutes": "{number}মিঃ", "relative_time.seconds": "{number} সেকেন্ড", - "relative_time.today": "today", + "relative_time.today": "আজ", "reply_indicator.cancel": "বাতিল করতে", "report.forward": "এটা আরো পাঠান {target} তে", "report.forward_hint": "এই নিবন্ধনটি অন্য একটি সার্ভারে। অপ্রকাশিতনামাভাবে রিপোর্টের কপি সেখানেও কি পাঠাতে চান ?", @@ -368,7 +392,7 @@ "status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন", "status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন", "status.block": "@{name} কে ব্লক করুন", - "status.bookmark": "Bookmark", + "status.bookmark": "বুকমার্ক", "status.cancel_reblog_private": "সমর্থন বাতিল করতে", "status.cannot_reblog": "এটিতে সমর্থন দেওয়া যাবেনা", "status.copy": "লেখাটির লিংক কপি করতে", @@ -393,7 +417,7 @@ "status.reblogged_by": "{name} সমর্থন দিয়েছে", "status.reblogs.empty": "এখনো কেও এটাতে সমর্থন দেয়নি। যখন কেও দেয়, সেটা তখন এখানে দেখা যাবে।", "status.redraft": "মুছে আবার নতুন করে লিখতে", - "status.remove_bookmark": "Remove bookmark", + "status.remove_bookmark": "বুকমার্ক সরান", "status.reply": "মতামত জানাতে", "status.replyAll": "লেখাযুক্ত সবার কাছে মতামত জানাতে", "status.report": "@{name} কে রিপোর্ট করতে", @@ -419,33 +443,34 @@ "time_remaining.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}} বাকি আছে", "time_remaining.moments": "সময় বাকি আছে", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "অন্য সার্ভারগুলি থেকে {resource} দেখাচ্ছে না। ", + "timeline_hint.resources.followers": "অনুসরকারীরা", + "timeline_hint.resources.follows": "অনুসরণ করে", + "timeline_hint.resources.statuses": "পুরনো টুটগুলি", + "trends.counter_by_accounts": "{count, plural,one {{counter} জন ব্যক্তি} other {{counter} জন লোক}} কথা বলছে", "trends.trending_now": "বর্তমানে জনপ্রিয়", "ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}বিলিয়ন", + "units.short.million": "{count}মিলিওন", + "units.short.thousand": "{count}হাজার", "upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে", "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।", "upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।", - "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.audio_description": "শ্রবণশক্তি লোকদের জন্য বর্ণনা করুন", "upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে", "upload_form.edit": "সম্পাদন", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "থাম্বনেল পরিবর্তন করুন", "upload_form.undo": "মুছে ফেলতে", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "শ্রবণশক্তি হ্রাস বা চাক্ষুষ প্রতিবন্ধী ব্যক্তিদের জন্য বর্ণনা করুন", "upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…", "upload_modal.apply": "প্রয়োগ করুন", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "ছবি নির্বাচন করুন", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন", "upload_modal.edit_media": "মিডিয়া সম্পাদনা করুন", "upload_modal.hint": "একটি দৃশ্যমান পয়েন্ট নির্বাচন করুন ক্লিক অথবা টানার মাধ্যমে যেটি সবময় সব থাম্বনেলে দেখা যাবে।", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "পূর্বরূপ({ratio})", "upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...", "video.close": "ভিডিওটি বন্ধ করতে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 72a6d0a0a..84c5f4523 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Nullañ ar bedadenn heuliañ", "account.direct": "Kas ur gemennadenn da @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domani berzet", "account.edit_profile": "Aozañ ar profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Lakaat war-wel war ar profil", "account.follow": "Heuliañ", "account.followers": "Heulier·ezed·ien", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Disoc'hoù an enklask", "emoji_button.symbols": "Arouezioù", "emoji_button.travel": "Lec'hioù ha Beajoù", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Toud ebet amañ!", "empty_column.account_unavailable": "Profil dihegerz", "empty_column.blocks": "N'eus ket bet berzet implijer·ez ganeoc'h c'hoazh.", @@ -166,7 +169,9 @@ "empty_column.notifications": "N'ho peus kemenn ebet c'hoazh. Grit gant implijer·ezed·ien all evit loc'hañ ar gomz.", "empty_column.public": "N'eus netra amañ! Skrivit un dra bennak foran pe heuilhit implijer·ien·ezed eus dafariadoù all evit leuniañ", "error.unexpected_crash.explanation": "Abalamour d'ur beug en hor c'hod pe d'ur gudenn geverlec'hded n'hallomp ket skrammañ ar bajenn-mañ en un doare dereat.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Klaskit azbevaat ar bajenn. Ma n'a ket en-dro e c'hallit klask ober gant Mastodon dre ur merdeer disheñvel pe dre an arload genidik.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", "follow_request.authorize": "Aotren", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Serriñ", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", - "lightbox.view_context": "Diskouez ar c'hemperzh", "lists.account.add": "Ouzhpennañ d'al listenn", "lists.account.remove": "Lemel kuit eus al listenn", "lists.delete": "Dilemel al listenn", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cheñch an titl", "lists.new.create": "Ouzhpennañ ul listenn", "lists.new.title_placeholder": "Titl nevez al listenn", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Ho listennoù", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Digavet", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Arloadoù pellgomz", "navigation_bar.blocks": "Implijer·ezed·ien berzet", "navigation_bar.bookmarks": "Sinedoù", @@ -292,12 +304,13 @@ "navigation_bar.public_timeline": "Red-amzer kevreet", "navigation_bar.security": "Diogelroez", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", + "notification.follow": "heuliañ a ra {name} ac'hanoc'h", "notification.follow_request": "{name} has requested to follow you", "notification.mention": "{name} mentioned you", "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Skarzhañ ar c'hemennoù", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Kemennoù war ar burev", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Skignadennoù:", "notifications.column_settings.show": "Diskouez er bann", "notifications.column_settings.sound": "Seniñ", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Pep tra", "notifications.filter.boosts": "Skignadennoù", "notifications.filter.favourites": "Muiañ-karet", "notifications.filter.follows": "Heuliañ", "notifications.filter.mentions": "Menegoù", "notifications.filter.polls": "Disoc'hoù ar sontadegoù", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} a gemennoù", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Serret", "poll.refresh": "Azbevaat", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Ouzhpennañ ur media ({formats})", + "upload_button.label": "Ouzhpennañ ur media", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people with hearing loss", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Dinoiñ testenn diouzh ar skeudenn", "upload_modal.edit_media": "Embann ar media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Rakwel ({ratio})", "upload_progress.label": "O pellgargañ...", "video.close": "Serriñ ar video", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 7c149787f..13e9e885b 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "La teva nota per a @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Afegir o Treure de les llistes", "account.badges.bot": "Bot", "account.badges.group": "Grup", @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Navega més en el perfil original", "account.cancel_follow_request": "Anul·la la sol·licitud de seguiment", "account.direct": "Missatge directe @{name}", + "account.disable_notifications": "Deixa de notificar-me els tuts de @{name}", "account.domain_blocked": "Domini ocult", "account.edit_profile": "Edita el perfil", + "account.enable_notifications": "Notifica’m els tuts de @{name}", "account.endorse": "Recomana en el teu perfil", "account.follow": "Segueix", "account.followers": "Seguidors", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Resultats de la cerca", "emoji_button.symbols": "Símbols", "emoji_button.travel": "Viatges i Llocs", + "empty_column.account_suspended": "Compte suspès", "empty_column.account_timeline": "No hi ha tuts aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Encara no has bloquejat cap usuari.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.", "empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per omplir-ho", "error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina podria no ser mostrada correctament.", - "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una app nativa.", + "error.unexpected_crash.explanation_addons": "Aquesta pàgina podria no mostrar-se correctament. Aquest error és possiblement causat per una extensió del navegador o per eienes automàtiques de traducció.", + "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una aplicació nativa.", + "error.unexpected_crash.next_steps_addons": "Prova de desactivar-les i refrescant la pàgina. Si això no ajuda, encara pots ser capaç d’utilitzar Mastodon amb un altre navegador o aplicació nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", "follow_request.authorize": "Autoritzar", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "descentrar l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "moure amunt en la llista", "lightbox.close": "Tancar", + "lightbox.compress": "Quadre de visualització d’imatge comprimida", + "lightbox.expand": "Amplia el quadre de visualització de l’imatge", "lightbox.next": "Següent", "lightbox.previous": "Anterior", - "lightbox.view_context": "Veure el context", "lists.account.add": "Afegir a la llista", "lists.account.remove": "Treure de la llista", "lists.delete": "Esborrar llista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Canvi de títol", "lists.new.create": "Afegir llista", "lists.new.title_placeholder": "Nova llista", + "lists.replies_policy.followed": "Qualsevol usuari seguit", + "lists.replies_policy.list": "Membres de la llista", + "lists.replies_policy.none": "Ningú", + "lists.replies_policy.title": "Mostra respostes a:", "lists.search": "Cercar entre les persones que segueixes", "lists.subheading": "Les teves llistes", "load_pending": "{count, plural, one {# element nou} other {# elements nous}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Alternar visibilitat", "missing_indicator.label": "No trobat", "missing_indicator.sublabel": "Aquest recurs no pot ser trobat", + "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?", + "mute_modal.indefinite": "Indefinit", "navigation_bar.apps": "Apps mòbils", "navigation_bar.blocks": "Usuaris bloquejats", "navigation_bar.bookmarks": "Marcadors", @@ -298,6 +310,7 @@ "notification.own_poll": "La teva enquesta ha finalitzat", "notification.poll": "Ha finalitzat una enquesta en la que has votat", "notification.reblog": "{name} ha impulsat el teu estat", + "notification.status": "ha publicat {name}", "notifications.clear": "Netejar notificacions", "notifications.clear_confirmation": "Estàs segur que vols esborrar permanentment totes les teves notificacions?", "notifications.column_settings.alert": "Notificacions d'escriptori", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostra en la columna", "notifications.column_settings.sound": "Reproduir so", + "notifications.column_settings.status": "Nous tuts:", "notifications.filter.all": "Tots", "notifications.filter.boosts": "Impulsos", "notifications.filter.favourites": "Favorits", "notifications.filter.follows": "Seguiments", "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats de l'enquesta", + "notifications.filter.statuses": "Actualitzacions de gent que segueixes", + "notifications.grant_permission": "Concedir permís.", "notifications.group": "{count} notificacions", + "notifications.mark_as_read": "Marca cada notificació com a llegida", + "notifications.permission_denied": "No s’ha pogut activar les notificacions d’escriptori perquè s’ha denegat el permís.", + "notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans", + "notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.", + "notifications_permission_banner.enable": "Activar les notificacions d’escriptori", + "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", + "notifications_permission_banner.title": "Mai et perdis res", + "picture_in_picture.restore": "Retorna’l", "poll.closed": "Finalitzada", "poll.refresh": "Actualitza", "poll.total_people": "{count, plural, one {# persona} other {# persones}}", @@ -442,10 +466,11 @@ "upload_modal.analyzing_picture": "Analitzant imatge…", "upload_modal.apply": "Aplica", "upload_modal.choose_image": "Tria imatge", - "upload_modal.description_placeholder": "Uns salts ràpids de guineu marró sobre el gos gandul", + "upload_modal.description_placeholder": "Jove xef, porti whisky amb quinze glaçons d’hidrogen, coi!", "upload_modal.detect_text": "Detecta el text de l'imatge", "upload_modal.edit_media": "Editar multimèdia", "upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.", + "upload_modal.preparing_ocr": "Preparant OCR…", "upload_modal.preview_label": "Previsualitza ({ratio})", "upload_progress.label": "Pujant...", "video.close": "Tancar el vídeo", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 1bd9cda0b..43e1f6c10 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "A vostra nota per @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Aghjunghje o toglie da e liste", "account.badges.bot": "Bot", "account.badges.group": "Gruppu", @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Vede di più nant'à u prufile uriginale", "account.cancel_follow_request": "Annullà a dumanda d'abbunamentu", "account.direct": "Missaghju direttu @{name}", + "account.disable_notifications": "Ùn mi nutificate più quandu @{name} pubblica qualcosa", "account.domain_blocked": "Duminiu piattatu", "account.edit_profile": "Mudificà u prufile", + "account.enable_notifications": "Nutificate mi quandu @{name} pubblica qualcosa", "account.endorse": "Fà figurà nant'à u prufilu", "account.follow": "Siguità", "account.followers": "Abbunati", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Cambià u scandagliu per ùn accittà ch'una scelta", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Indicà u media cum'è sensibile", - "compose_form.sensitive.marked": "Media indicatu cum'è sensibile", - "compose_form.sensitive.unmarked": "Media micca indicatu cum'è sensibile", + "compose_form.sensitive.hide": "{count, plural, one {Indicà u media cum'è sensibile} other {Indicà i media cum'è sensibili}}", + "compose_form.sensitive.marked": "{count, plural, one {Media indicatu cum'è sensibile} other {Media indicati cum'è sensibili}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media micca indicatu cum'è sensibile} other {Media micca indicati cum'è sensibili}}", "compose_form.spoiler.marked": "Testu piattatu daret'à un'avertimentu", "compose_form.spoiler.unmarked": "Testu micca piattatu", "compose_form.spoiler_placeholder": "Scrive u vostr'avertimentu quì", @@ -132,7 +134,7 @@ "directory.new_arrivals": "Ultimi arrivi", "directory.recently_active": "Attività ricente", "embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.", - "embed.preview": "Assumiglierà à qualcosa cusì:", + "embed.preview": "Hà da parè à quessa:", "emoji_button.activity": "Attività", "emoji_button.custom": "Persunalizati", "emoji_button.flags": "Bandere", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Risultati di a cerca", "emoji_button.symbols": "Simbuli", "emoji_button.travel": "Lochi è Viaghju", + "empty_column.account_suspended": "Contu suspesu", "empty_column.account_timeline": "Nisun statutu quì!", "empty_column.account_unavailable": "Prufile micca dispunibule", "empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.", "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altri servori per empie a linea pubblica", "error.unexpected_crash.explanation": "In ragione d'un bug indè u nostru codice o un prublemu di cumpatibilità cù quessu navigatore, sta pagina ùn hè micca pussuta esse affissata currettamente.", + "error.unexpected_crash.explanation_addons": "Sta pagina ùn hè micca pussuta esse affissata currettamente, prubabilmente per via d'un'estenzione di navigatore o d'un lugiziale di traduzione.", "error.unexpected_crash.next_steps": "Pruvate d'attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", + "error.unexpected_crash.next_steps_addons": "Pruvate di disattivà quelli è poi attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", "errors.unexpected_crash.report_issue": "Palisà prublemu", "follow_request.authorize": "Auturizà", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu", "keyboard_shortcuts.up": "cullà indè a lista", "lightbox.close": "Chjudà", + "lightbox.compress": "Cumprime a finestra d'affissera di i ritratti", + "lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti", "lightbox.next": "Siguente", "lightbox.previous": "Pricidente", - "lightbox.view_context": "Vede u cuntestu", "lists.account.add": "Aghjunghje à a lista", "lists.account.remove": "Toglie di a lista", "lists.delete": "Toglie a lista", @@ -260,14 +266,20 @@ "lists.edit.submit": "Cambià u titulu", "lists.new.create": "Aghjunghje", "lists.new.title_placeholder": "Titulu di a lista", + "lists.replies_policy.followed": "Tutti i vostri abbunamenti", + "lists.replies_policy.list": "Membri di a lista", + "lists.replies_policy.none": "Nimu", + "lists.replies_policy.title": "Vede e risposte à:", "lists.search": "Circà indè i vostr'abbunamenti", "lists.subheading": "E vo liste", "load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}", "loading_indicator.label": "Caricamentu...", - "media_gallery.toggle_visible": "Cambià a visibilità", + "media_gallery.toggle_visible": "Piattà {number, plural, one {ritrattu} other {ritratti}}", "missing_indicator.label": "Micca trovu", "missing_indicator.sublabel": "Ùn era micca pussivule di truvà sta risorsa", + "mute_modal.duration": "Durata", "mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?", + "mute_modal.indefinite": "Indifinita", "navigation_bar.apps": "Applicazione per u telefuninu", "navigation_bar.blocks": "Utilizatori bluccati", "navigation_bar.bookmarks": "Segnalibri", @@ -298,6 +310,7 @@ "notification.own_poll": "U vostru scandagliu hè compiu", "notification.poll": "Un scandagliu induve avete vutatu hè finitu", "notification.reblog": "{name} hà spartutu u vostru statutu", + "notification.status": "{name} hà appena pubblicatu", "notifications.clear": "Purgà e nutificazione", "notifications.clear_confirmation": "Site sicuru·a che vulete toglie tutte ste nutificazione?", "notifications.column_settings.alert": "Nutificazione nant'à l'urdinatore", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Spartere:", "notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.sound": "Sunà", + "notifications.column_settings.status": "Statuti novi:", "notifications.filter.all": "Tuttu", "notifications.filter.boosts": "Spartere", "notifications.filter.favourites": "Favuriti", "notifications.filter.follows": "Abbunamenti", "notifications.filter.mentions": "Minzione", "notifications.filter.polls": "Risultati di u scandagliu", + "notifications.filter.statuses": "Messe à ghjornu di e persone chì siguitate", + "notifications.grant_permission": "Auturizà.", "notifications.group": "{count} nutificazione", + "notifications.mark_as_read": "Marcà tutte e nutificazione cum'è lette", + "notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè l'auturizazione hè stata ricusata", + "notifications.permission_denied_alert": "Ùn pudete micca attivà e nutificazione nant'à l'urdinatore, perchè avete digià ricusatu a dumanda d'auturizazione di u navigatore", + "notifications.permission_required": "Ùn si po micca attivà e nutificazione desktop perchè a l'auturizazione richiesta ùn hè micca stata data.", + "notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore", + "notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.", + "notifications_permission_banner.title": "Ùn mancate mai nunda", + "picture_in_picture.restore": "Rimette in piazza", "poll.closed": "Chjosu", "poll.refresh": "Attualizà", "poll.total_people": "{count, plural, one {# persona} other {# persone}}", @@ -352,7 +376,7 @@ "report.hint": "U signalamentu sarà mandatu à i muderatori di u servore. Pudete spiegà perchè avete palisatu stu contu quì sottu:", "report.placeholder": "Altri cummenti", "report.submit": "Mandà", - "report.target": "Signalamentu", + "report.target": "Signalamentu di {target}", "search.placeholder": "Circà", "search_popout.search_format": "Ricerca avanzata", "search_popout.tips.full_text": "I testi simplici rimandanu i statuti ch'avete scritti, aghjunti à i vostri favuriti, spartuti o induve quelli site mintuvatu·a, è ancu i cugnomi, nomi pubblichi è hashtag chì currispondenu.", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & drop per caricà un fugliale", - "upload_button.label": "Aghjunghje un media ({formats})", + "upload_button.label": "Aghjunghje un media", "upload_error.limit": "Limita di caricamentu di fugliali trapassata.", "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.", "upload_form.audio_description": "Discrizzione per i ciochi", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Ditettà testu da u ritrattu", "upload_modal.edit_media": "Cambià media", "upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.", + "upload_modal.preparing_ocr": "Priparazione di l'OCR…", "upload_modal.preview_label": "Vista ({ratio})", "upload_progress.label": "Caricamentu...", "video.close": "Chjudà a video", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 0ddd18de8..76df857d8 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Poznámka", "account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů", "account.badges.bot": "Robot", "account.badges.group": "Skupina", @@ -9,13 +9,15 @@ "account.browse_more_on_origin_server": "Více na původním profilu", "account.cancel_follow_request": "Zrušit žádost o sledování", "account.direct": "Poslat uživateli @{name} přímou zprávu", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", + "account.enable_notifications": "Oznámit mě na příspěvky @{name}", "account.endorse": "Zvýraznit na profilu", "account.follow": "Sledovat", "account.followers": "Sledující", "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.followers_counter": "{count, plural, one {{counter} sledující} few {{counter} sledující} many {{counter} sledujících} other {{counter} sledujících}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Výsledky hledání", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestování a místa", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nejsou tu žádné tooty!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte s někým konverzaci.", "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo", "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Zkuste stránku načíst znovu. Pokud to nepomůže, zkuste Mastodon používat pomocí jiného prohlížeče nebo nativní aplikace.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásit problém", "follow_request.authorize": "Autorizovat", "follow_request.reject": "Odmítnout", "follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, {domain} si myslí, že budete chtít následující požadavky na sledování zkontrolovat ručně.", - "generic.saved": "Saved", + "generic.saved": "Uloženo", "getting_started.developers": "Vývojáři", "getting_started.directory": "Adresář profilů", "getting_started.documentation": "Dokumentace", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "zrušení zaměření na psací prostor/hledání", "keyboard_shortcuts.up": "posunutí nahoru v seznamu", "lightbox.close": "Zavřít", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Další", "lightbox.previous": "Předchozí", - "lightbox.view_context": "Zobrazit kontext", "lists.account.add": "Přidat do seznamu", "lists.account.remove": "Odebrat ze seznamu", "lists.delete": "Smazat seznam", @@ -260,6 +266,10 @@ "lists.edit.submit": "Změnit název", "lists.new.create": "Přidat seznam", "lists.new.title_placeholder": "Název nového seznamu", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Hledejte mezi lidmi, které sledujete", "lists.subheading": "Vaše seznamy", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Přepnout viditelnost", "missing_indicator.label": "Nenalezeno", "missing_indicator.sublabel": "Tento zdroj se nepodařilo najít", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilní aplikace", "navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.bookmarks": "Záložky", @@ -298,6 +310,7 @@ "notification.own_poll": "Vaše anketa skončila", "notification.poll": "Anketa, ve které jste hlasovali, skončila", "notification.reblog": "Uživatel {name} boostnul váš toot", + "notification.status": "{name} just posted", "notifications.clear": "Smazat oznámení", "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?", "notifications.column_settings.alert": "Oznámení na počítači", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.show": "Zobrazit ve sloupci", "notifications.column_settings.sound": "Přehrát zvuk", + "notifications.column_settings.status": "Nové tooty:", "notifications.filter.all": "Vše", "notifications.filter.boosts": "Boosty", "notifications.filter.favourites": "Oblíbení", "notifications.filter.follows": "Sledování", "notifications.filter.mentions": "Zmínky", "notifications.filter.polls": "Výsledky anket", + "notifications.filter.statuses": "Aktuality od lidí, které sledujete", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} oznámení", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Uzavřeno", "poll.refresh": "Obnovit", "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}", @@ -430,13 +454,13 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Nahrajte přetažením", - "upload_button.label": "Přidat média ({formats})", + "upload_button.label": "Přidat média", "upload_error.limit": "Byl překročen limit nahraných souborů.", "upload_error.poll": "U anket není nahrávání souborů povoleno.", "upload_form.audio_description": "Popis pro sluchově postižené", "upload_form.description": "Popis pro zrakově postižené", "upload_form.edit": "Upravit", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Změnit miniaturu", "upload_form.undo": "Smazat", "upload_form.video_description": "Popis pro sluchově či zrakově postižené", "upload_modal.analyzing_picture": "Analyzuji obrázek…", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detekovat text z obrázku", "upload_modal.edit_media": "Upravit média", "upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Náhled ({ratio})", "upload_progress.label": "Nahrávání…", "video.close": "Zavřít video", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 312a0f97a..b3c1947b4 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Nodyn", "account.add_or_remove_from_list": "Ychwanegu neu Dileu o'r rhestrau", "account.badges.bot": "Bot", "account.badges.group": "Grŵp", "account.block": "Blocio @{name}", "account.block_domain": "Cuddio popeth rhag {domain}", "account.blocked": "Blociwyd", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Pori mwy ar y proffil gwreiddiol", "account.cancel_follow_request": "Canslo cais dilyn", "account.direct": "Neges breifat @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Parth wedi ei guddio", "account.edit_profile": "Golygu proffil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Arddangos ar fy mhroffil", "account.follow": "Dilyn", "account.followers": "Dilynwyr", "account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Ddilynwr} other {{counter} o Ddilynwyr}}", + "account.following_counter": "{count, plural, one {{counter} yn Dilyn} other {{counter} yn Dilyn}}", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", @@ -36,14 +38,14 @@ "account.requested": "Aros am gymeradwyaeth. Cliciwch er mwyn canslo cais dilyn", "account.share": "Rhannwch broffil @{name}", "account.show_reblogs": "Dangos bwstiau o @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Dŵt} other {{counter} o Dŵtiau}}", "account.unblock": "Dadflocio @{name}", "account.unblock_domain": "Dadguddio {domain}", "account.unendorse": "Peidio a'i arddangos ar fy mhroffil", "account.unfollow": "Dad-ddilyn", "account.unmute": "Dad-dawelu @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Clicio i ychwanegu nodyn", "alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.", "alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Canlyniadau chwilio", "emoji_button.symbols": "Symbolau", "emoji_button.travel": "Teithio & Llefydd", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Dim tŵtiau fama!", "empty_column.account_unavailable": "Proffil ddim ar gael", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ac eraill i ddechrau'r sgwrs.", "empty_column.public": "Does dim byd yma! Ysgrifennwch rhywbeth yn gyhoeddus, neu dilynwch ddefnyddwyr o achosion eraill i'w lenwi", "error.unexpected_crash.explanation": "Oherwydd gwall yn ein cod neu oherwydd problem cysondeb porwr, nid oedd y dudalen hon gallu cael ei dangos yn gywir.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Ceisiwch ail-lwytho y dudalen. Os nad yw hyn yn eich helpu, efallai gallech defnyddio Mastodon trwy borwr neu ap brodorol gwahanol.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", "follow_request.authorize": "Caniatau", "follow_request.reject": "Gwrthod", "follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, oedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.", - "generic.saved": "Saved", + "generic.saved": "Wedi'i Gadw", "getting_started.developers": "Datblygwyr", "getting_started.directory": "Cyfeiriadur proffil", "getting_started.documentation": "Dogfennaeth", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "i ateb", "keyboard_shortcuts.requests": "i agor rhestr ceisiadau dilyn", "keyboard_shortcuts.search": "i ffocysu chwilio", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "i ddangos/cuddio'r maes CW", "keyboard_shortcuts.start": "i agor colofn \"dechrau arni\"", "keyboard_shortcuts.toggle_hidden": "i ddangos/cuddio testun tu ôl i CW", "keyboard_shortcuts.toggle_sensitivity": "i ddangos/gyddio cyfryngau", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "i ddad-ffocysu ardal cyfansoddi testun/chwilio", "keyboard_shortcuts.up": "i symud yn uwch yn y rhestr", "lightbox.close": "Cau", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", - "lightbox.view_context": "Gweld cyd-destyn", "lists.account.add": "Ychwanegwch at restr", "lists.account.remove": "Dileu o'r rhestr", "lists.delete": "Dileu rhestr", @@ -260,6 +266,10 @@ "lists.edit.submit": "Newid teitl", "lists.new.create": "Ychwanegu rhestr", "lists.new.title_placeholder": "Teitl rhestr newydd", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn", "lists.subheading": "Eich rhestrau", "load_pending": "{count, plural, one {# eitem newydd} other {# eitemau newydd}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Toglo gwelededd", "missing_indicator.label": "Heb ei ganfod", "missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Cuddio hysbysiadau rhag y defnyddiwr hwn?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Apiau symudol", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio", "navigation_bar.bookmarks": "Tudalnodau", @@ -298,6 +310,7 @@ "notification.own_poll": "Mae eich pôl wedi diweddu", "notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben", "notification.reblog": "Hysbysebodd {name} eich tŵt", + "notification.status": "{name} just posted", "notifications.clear": "Clirio hysbysiadau", "notifications.clear_confirmation": "Ydych chi'n sicr eich bod am glirio'ch holl hysbysiadau am byth?", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Hybiadau:", "notifications.column_settings.show": "Dangos yn y golofn", "notifications.column_settings.sound": "Chwarae sain", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Pob", "notifications.filter.boosts": "Hybiadau", "notifications.filter.favourites": "Ffefrynnau", "notifications.filter.follows": "Yn dilyn", "notifications.filter.mentions": "Crybwylliadau", "notifications.filter.polls": "Canlyniadau pleidlais", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} o hysbysiadau", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Ar gau", "poll.refresh": "Adnewyddu", "poll.total_people": "{count, plural, one {# berson} other {# o bobl}}", @@ -419,16 +443,16 @@ "time_remaining.minutes": "{number, plural, one {# funud} other {# o funudau}} ar ôl", "time_remaining.moments": "Munudau ar ôl", "time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "ni chaiff {resource} o gweinyddion eraill ei ddangos.", + "timeline_hint.resources.followers": "Dilynwyr", + "timeline_hint.resources.follows": "Yn dilyn", + "timeline_hint.resources.statuses": "Tŵtiau henach", + "trends.counter_by_accounts": "{count, plural, one {{counter} berson} other {{counter} o bobl}}", "trends.trending_now": "Yn tueddu nawr", "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}biliwn", + "units.short.million": "{count}miliwn", + "units.short.thousand": "{count}mil", "upload_area.title": "Llusgwch & gollwing i uwchlwytho", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.", @@ -436,16 +460,17 @@ "upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", "upload_form.edit": "Golygu", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Newid mân-lun", "upload_form.undo": "Dileu", "upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg", "upload_modal.analyzing_picture": "Dadansoddi llun…", "upload_modal.apply": "Gweithredu", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Dewis delwedd", "upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau", "upload_modal.detect_text": "Canfod testun o'r llun", "upload_modal.edit_media": "Golygu cyfryngau", "upload_modal.hint": "Cliciwch neu llusgwch y cylch ar y rhagolwg i ddewis y canolbwynt a fydd bob amser i'w weld ar bob mân-lunau.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Rhagolwg ({ratio})", "upload_progress.label": "Uwchlwytho...", "video.close": "Cau fideo", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index a0fb354e6..7c4b3e4ef 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -6,16 +6,18 @@ "account.block": "Bloker @{name}", "account.block_domain": "Skjul alt fra {domain}", "account.blocked": "Blokeret", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Gennemse mere på den oprindelige profil", "account.cancel_follow_request": "Annullér følgeranmodning", "account.direct": "Send en direkte besked til @{name}", + "account.disable_notifications": "Stop med at give mig besked når @{name} lægger noget op", "account.domain_blocked": "Domænet er blevet skjult", "account.edit_profile": "Rediger profil", + "account.enable_notifications": "Giv mig besked når @{name} lægger noget op", "account.endorse": "Fremhæv på profil", "account.follow": "Følg", "account.followers": "Følgere", "account.followers.empty": "Der er endnu ingen der følger denne bruger.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "Denne bruger følger endnu ikke nogen.", "account.follows_you": "Følger dig", @@ -48,7 +50,7 @@ "alert.rate_limited.title": "Gradsbegrænset", "alert.unexpected.message": "Der opstod en uventet fejl.", "alert.unexpected.title": "Ups!", - "announcement.announcement": "Announcement", + "announcement.announcement": "Bekendtgørelse", "autosuggest_hashtag.per_week": "{count} per uge", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", "bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.", @@ -79,9 +81,9 @@ "column_header.show_settings": "Vis indstillinger", "column_header.unpin": "Fastgør ikke længere", "column_subheading.settings": "Indstillinger", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Kun lokalt", "community.column_settings.media_only": "Kun medie", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Kun fjernt", "compose_form.direct_message_warning": "Dette trut vil kun blive sendt til de nævnte brugere.", "compose_form.direct_message_warning_learn_more": "Lær mere", "compose_form.hashtag_warning": "Dette trut vil ikke blive vist under noget hashtag da det ikke er listet. Kun offentlige trut kan blive vist under søgninger med hashtags.", @@ -92,8 +94,8 @@ "compose_form.poll.duration": "Afstemningens varighed", "compose_form.poll.option_placeholder": "Valgmulighed {number}", "compose_form.poll.remove_option": "Fjern denne valgmulighed", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "Ændre afstemning for at tillade flere valg", + "compose_form.poll.switch_to_single": "Ændre afstemning for at tillade et enkelt valg", "compose_form.publish": "Trut", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "Markér medie som følsomt", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser & steder", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ingen bidrag her!", "empty_column.account_unavailable": "Profil utilgængelig", "empty_column.blocks": "Du har ikke blokeret nogen endnu.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.", "empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet", "error.unexpected_crash.explanation": "På grund af en fejl i vores kode, eller en browser kompatibilitetsfejl, så kunne siden ikke vises korrekt.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prøv at genindlæs siden. Hvis dette ikke hjælper, så forsøg venligst, at tilgå Mastodon via en anden browser eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopiér stack trace til udklipsholderen", "errors.unexpected_crash.report_issue": "Rapportér problem", "follow_request.authorize": "Godkend", "follow_request.reject": "Afvis", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, troede {domain} -personalet, at du måske vil gennemgå dine anmodninger manuelt.", + "generic.saved": "Gemt", "getting_started.developers": "Udviklere", "getting_started.directory": "Profilliste", "getting_started.documentation": "Dokumentation", @@ -193,8 +198,8 @@ "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", + "home.hide_announcements": "Skjul bekendtgørelser", + "home.show_announcements": "Vis bekendtgørelser", "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}", @@ -236,13 +241,13 @@ "keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere", "keyboard_shortcuts.my_profile": "for at åbne din profil", "keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "for at åbne medier", "keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut", "keyboard_shortcuts.profile": "til profil af åben forfatter", "keyboard_shortcuts.reply": "for at svare", "keyboard_shortcuts.requests": "for at åbne listen over følgeranmodninger", "keyboard_shortcuts.search": "for at fokusere søgningen", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "for at vise/skjule CW-felt", "keyboard_shortcuts.start": "for at åbne \"kom igen\" kolonnen", "keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW", "keyboard_shortcuts.toggle_sensitivity": "for at vise/skjule medier", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "for at fjerne fokus fra skriveområde/søgning", "keyboard_shortcuts.up": "for at bevæge dig op ad listen", "lightbox.close": "Luk", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Næste", "lightbox.previous": "Forrige", - "lightbox.view_context": "Vis kontekst", "lists.account.add": "Tilføj til liste", "lists.account.remove": "Fjern fra liste", "lists.delete": "Slet liste", @@ -260,6 +266,10 @@ "lists.edit.submit": "Skift titel", "lists.new.create": "Tilføj liste", "lists.new.title_placeholder": "Ny liste titel", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Vis svar til:", "lists.search": "Søg iblandt folk du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ændre synlighed", "missing_indicator.label": "Ikke fundet", "missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet", + "mute_modal.duration": "Varighed", "mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?", + "mute_modal.indefinite": "Uendeligt", "navigation_bar.apps": "Mobil apps", "navigation_bar.blocks": "Blokerede brugere", "navigation_bar.bookmarks": "Bogmærker", @@ -293,11 +305,12 @@ "navigation_bar.security": "Sikkerhed", "notification.favourite": "{name} favoriserede din status", "notification.follow": "{name} fulgte dig", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow_request": "{name} har anmodet om at følge dig", "notification.mention": "{name} nævnte dig", "notification.own_poll": "Din afstemning er afsluttet", "notification.poll": "En afstemning, du stemte i, er slut", "notification.reblog": "{name} boostede din status", + "notification.status": "{name} har lige lagt noget op", "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?", "notifications.column_settings.alert": "Skrivebordsnotifikationer", @@ -306,20 +319,31 @@ "notifications.column_settings.filter_bar.category": "Hurtigfilter", "notifications.column_settings.filter_bar.show": "Vis", "notifications.column_settings.follow": "Nye følgere:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "Nye følgeranmodninger:", "notifications.column_settings.mention": "Statusser der nævner dig:", "notifications.column_settings.poll": "Afstemningsresultat:", "notifications.column_settings.push": "Pushnotifikationer", "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Afspil lyd", + "notifications.column_settings.status": "Nye toots:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følger", "notifications.filter.mentions": "Statusser der nævner dig", "notifications.filter.polls": "Afstemningsresultat", + "notifications.filter.statuses": "Opdateringer fra personer, du følger", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifikationer", + "notifications.mark_as_read": "Markér alle notifikationer som læst", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Gå aldrig glip af noget", + "picture_in_picture.restore": "Sæt den tilbage", "poll.closed": "Lukket", "poll.refresh": "Opdatér", "poll.total_people": "{count, plural, one {# person} other {# personer}}", @@ -419,10 +443,10 @@ "time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage", "time_remaining.moments": "Få øjeblikke tilbage", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} tilbage", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.", + "timeline_hint.resources.followers": "Følgere", + "timeline_hint.resources.follows": "Følger", + "timeline_hint.resources.statuses": "Ældre toots", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "Hot lige nu", "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.", @@ -433,19 +457,20 @@ "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Uploadgrænse overskredet.", "upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.", - "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.audio_description": "Beskriv for personer med høretab", "upload_form.description": "Beskriv for svagtseende", "upload_form.edit": "Redigér", "upload_form.thumbnail": "Change thumbnail", "upload_form.undo": "Slet", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "Beskriv for personer med høretab eller nedsat syn", "upload_modal.analyzing_picture": "Analyserer billede…", "upload_modal.apply": "Anvend", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Vælg billede", "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund", "upload_modal.detect_text": "Find tekst i billede på automatisk vis", "upload_modal.edit_media": "Redigér medie", "upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.", + "upload_modal.preparing_ocr": "Forbereder OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Uploader...", "video.close": "Luk video", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index d0274b077..1c1773029 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -1,16 +1,18 @@ { - "account.account_note_header": "Deine Notiz für @{name}", + "account.account_note_header": "Notiz", "account.add_or_remove_from_list": "Hinzufügen oder Entfernen von Listen", "account.badges.bot": "Bot", "account.badges.group": "Gruppe", "account.block": "@{name} blockieren", - "account.block_domain": "Alles von {domain} blockieren", + "account.block_domain": "Alles von {domain} verstecken", "account.blocked": "Blockiert", "account.browse_more_on_origin_server": "Mehr auf dem Originalprofil durchsuchen", "account.cancel_follow_request": "Folgeanfrage abbrechen", "account.direct": "Direktnachricht an @{name}", + "account.disable_notifications": "Höre auf mich zu benachrichtigen wenn @{name} etwas postet", "account.domain_blocked": "Domain versteckt", "account.edit_profile": "Profil bearbeiten", + "account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet", "account.endorse": "Auf Profil hervorheben", "account.follow": "Folgen", "account.followers": "Folgende", @@ -38,12 +40,12 @@ "account.show_reblogs": "Von @{name} geteilte Beiträge anzeigen", "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", "account.unblock": "@{name} entblocken", - "account.unblock_domain": "Blockieren von {domain} beenden", + "account.unblock_domain": "{domain} wieder anzeigen", "account.unendorse": "Nicht auf Profil hervorheben", "account.unfollow": "Entfolgen", "account.unmute": "@{name} nicht mehr stummschalten", "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten", - "account_note.placeholder": "Kein Kommentar angegeben", + "account_note.placeholder": "Notiz durch Klicken hinzufügen", "alert.rate_limited.message": "Bitte versuche es nach {retry_time, time, medium}.", "alert.rate_limited.title": "Anfragelimit überschritten", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", @@ -62,7 +64,7 @@ "column.community": "Lokale Zeitleiste", "column.direct": "Direktnachrichten", "column.directory": "Profile durchsuchen", - "column.domain_blocks": "Versteckte Domains", + "column.domain_blocks": "Blockierte Domains", "column.favourites": "Favoriten", "column.follow_requests": "Folgeanfragen", "column.home": "Startseite", @@ -94,11 +96,11 @@ "compose_form.poll.remove_option": "Wahl entfernen", "compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben", "compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu erlauben", - "compose_form.publish": "Beitrag", + "compose_form.publish": "Tröt", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Medien als heikel markieren", - "compose_form.sensitive.marked": "Medien sind als heikel markiert", - "compose_form.sensitive.unmarked": "Medien sind nicht als heikel markiert", + "compose_form.sensitive.hide": "Medien als NSFW markieren", + "compose_form.sensitive.marked": "Medien sind als NSFW markiert", + "compose_form.sensitive.unmarked": "Medien sind nicht als NSFW markiert", "compose_form.spoiler.marked": "Text ist hinter einer Warnung versteckt", "compose_form.spoiler.unmarked": "Text ist nicht versteckt", "compose_form.spoiler_placeholder": "Inhaltswarnung", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Suchergebnisse", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Reisen und Orte", + "empty_column.account_suspended": "Konto gesperrt", "empty_column.account_timeline": "Keine Beiträge!", "empty_column.account_unavailable": "Konto nicht verfügbar", "empty_column.blocks": "Du hast keine Profile blockiert.", @@ -165,8 +168,10 @@ "empty_column.mutes": "Du hast keine Profile stummgeschaltet.", "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen", - "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browser-Inkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", + "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browsereinkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", + "error.unexpected_crash.explanation_addons": "Diese Seite konnte nicht korrekt angezeigt werden. Dieser Fehler wird wahrscheinlich durch ein Browser-Add-on oder automatische Übersetzungswerkzeuge verursacht.", "error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.", + "error.unexpected_crash.next_steps_addons": "Versuche sie zu deaktivieren und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.", "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Problem melden", "follow_request.authorize": "Erlauben", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "Textfeld/die Suche nicht mehr fokussieren", "keyboard_shortcuts.up": "sich in der Liste hinauf bewegen", "lightbox.close": "Schließen", + "lightbox.compress": "Bildansicht komprimieren", + "lightbox.expand": "Bildansicht erweitern", "lightbox.next": "Weiter", "lightbox.previous": "Zurück", - "lightbox.view_context": "Beitrag sehen", "lists.account.add": "Zur Liste hinzufügen", "lists.account.remove": "Von der Liste entfernen", "lists.delete": "Liste löschen", @@ -260,6 +266,10 @@ "lists.edit.submit": "Titel ändern", "lists.new.create": "Liste hinzufügen", "lists.new.title_placeholder": "Neuer Titel der Liste", + "lists.replies_policy.followed": "Jeder gefolgte Benutzer", + "lists.replies_policy.list": "Mitglieder der Liste", + "lists.replies_policy.none": "Niemand", + "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten denen du folgst", "lists.subheading": "Deine Listen", "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Sichtbarkeit umschalten", "missing_indicator.label": "Nicht gefunden", "missing_indicator.sublabel": "Die Ressource konnte nicht gefunden werden", + "mute_modal.duration": "Dauer", "mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?", + "mute_modal.indefinite": "Unbestimmt", "navigation_bar.apps": "Mobile Apps", "navigation_bar.blocks": "Blockierte Profile", "navigation_bar.bookmarks": "Lesezeichen", @@ -298,6 +310,7 @@ "notification.own_poll": "Deine Umfrage ist beendet", "notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei", "notification.reblog": "{name} hat deinen Beitrag geteilt", + "notification.status": "{name} hat gerade etwas gepostet", "notifications.clear": "Mitteilungen löschen", "notifications.clear_confirmation": "Bist du dir sicher, dass du alle Mitteilungen löschen möchtest?", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Geteilte Beiträge:", "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", + "notifications.column_settings.status": "Neue Beiträge:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Geteilte Beiträge", "notifications.filter.favourites": "Favorisierungen", "notifications.filter.follows": "Folgt", "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", + "notifications.filter.statuses": "Updates von Personen, denen du folgst", + "notifications.grant_permission": "Zugriff gewährt.", "notifications.group": "{count} Benachrichtigungen", + "notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren", + "notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.", + "notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde", + "notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.", + "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", + "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", + "notifications_permission_banner.title": "Verpasse nie etwas", + "picture_in_picture.restore": "Zurücksetzen", "poll.closed": "Geschlossen", "poll.refresh": "Aktualisieren", "poll.total_people": "{count, plural, one {# Person} other {# Personen}}", @@ -357,7 +381,7 @@ "search_popout.search_format": "Fortgeschrittenes Suchformat", "search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.", "search_popout.tips.hashtag": "Hashtag", - "search_popout.tips.status": "Beitrag", + "search_popout.tips.status": "Tröt", "search_popout.tips.text": "Einfache Texteingabe gibt Anzeigenamen, Benutzernamen und Hashtags zurück", "search_popout.tips.user": "Nutzer", "search_results.accounts": "Personen", @@ -397,7 +421,7 @@ "status.reply": "Antworten", "status.replyAll": "Allen antworten", "status.report": "@{name} melden", - "status.sensitive_warning": "Heikle Inhalte", + "status.sensitive_warning": "NSFW", "status.share": "Teilen", "status.show_less": "Weniger anzeigen", "status.show_less_all": "Alle Inhaltswarnungen zuklappen", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Zum Hochladen hereinziehen", - "upload_button.label": "Mediendatei hinzufügen ({formats})", + "upload_button.label": "Mediendatei hinzufügen", "upload_error.limit": "Dateiupload-Limit erreicht.", "upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.", "upload_form.audio_description": "Beschreibe die Audiodatei für Menschen mit Hörschädigungen", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Text aus Bild erkennen", "upload_modal.edit_media": "Medien bearbeiten", "upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.", + "upload_modal.preparing_ocr": "Vorbereitung von OCR…", "upload_modal.preview_label": "Vorschau ({ratio})", "upload_progress.label": "Wird hochgeladen …", "video.close": "Video schließen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 9d6988cc7..d9ebf0a4c 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -168,10 +168,18 @@ { "descriptors": [ { + "defaultMessage": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "id": "error.unexpected_crash.explanation_addons" + }, + { "defaultMessage": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "id": "error.unexpected_crash.explanation" }, { + "defaultMessage": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "id": "error.unexpected_crash.next_steps_addons" + }, + { "defaultMessage": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "id": "error.unexpected_crash.next_steps" }, @@ -268,6 +276,15 @@ { "descriptors": [ { + "defaultMessage": "Put it back", + "id": "picture_in_picture.restore" + } + ], + "path": "app/javascript/mastodon/components/picture_in_picture_placeholder.json" + }, + { + "descriptors": [ + { "defaultMessage": "Closed", "id": "poll.closed" }, @@ -636,6 +653,19 @@ { "descriptors": [ { + "defaultMessage": "Account suspended", + "id": "empty_column.account_suspended" + }, + { + "defaultMessage": "Profile unavailable", + "id": "empty_column.account_unavailable" + } + ], + "path": "app/javascript/mastodon/features/account_gallery/index.json" + }, + { + "descriptors": [ + { "defaultMessage": "Toots", "id": "account.posts" }, @@ -687,6 +717,10 @@ "id": "timeline_hint.resources.statuses" }, { + "defaultMessage": "Account suspended", + "id": "empty_column.account_suspended" + }, + { "defaultMessage": "Profile unavailable", "id": "empty_column.account_unavailable" }, @@ -797,6 +831,14 @@ "id": "account.show_reblogs" }, { + "defaultMessage": "Notify me when @{name} posts", + "id": "account.enable_notifications" + }, + { + "defaultMessage": "Stop notifying me when @{name} posts", + "id": "account.disable_notifications" + }, + { "defaultMessage": "Pinned toots", "id": "navigation_bar.pins" }, @@ -1305,15 +1347,15 @@ { "descriptors": [ { - "defaultMessage": "Media is marked as sensitive", + "defaultMessage": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", "id": "compose_form.sensitive.marked" }, { - "defaultMessage": "Media is not marked as sensitive", + "defaultMessage": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "id": "compose_form.sensitive.unmarked" }, { - "defaultMessage": "Mark media as sensitive", + "defaultMessage": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "id": "compose_form.sensitive.hide" } ], @@ -2126,6 +2168,18 @@ "id": "confirmations.delete_list.confirm" }, { + "defaultMessage": "Any followed user", + "id": "lists.replies_policy.followed" + }, + { + "defaultMessage": "No one", + "id": "lists.replies_policy.none" + }, + { + "defaultMessage": "Members of the list", + "id": "lists.replies_policy.list" + }, + { "defaultMessage": "Edit list", "id": "lists.edit" }, @@ -2134,6 +2188,10 @@ "id": "lists.delete" }, { + "defaultMessage": "Show replies to:", + "id": "lists.replies_policy.title" + }, + { "defaultMessage": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "id": "empty_column.list" } @@ -2219,6 +2277,14 @@ "id": "notifications.column_settings.push" }, { + "defaultMessage": "Desktop notifications are unavailable due to previously denied browser permissions request", + "id": "notifications.permission_denied" + }, + { + "defaultMessage": "Desktop notifications are unavailable because the required permission has not been granted.", + "id": "notifications.permission_required" + }, + { "defaultMessage": "Quick filter bar", "id": "notifications.column_settings.filter_bar.category" }, @@ -2245,6 +2311,10 @@ { "defaultMessage": "Poll results:", "id": "notifications.column_settings.poll" + }, + { + "defaultMessage": "New toots:", + "id": "notifications.column_settings.status" } ], "path": "app/javascript/mastodon/features/notifications/components/column_settings.json" @@ -2272,6 +2342,10 @@ "id": "notifications.filter.follows" }, { + "defaultMessage": "Updates from people you follow", + "id": "notifications.filter.statuses" + }, + { "defaultMessage": "All", "id": "notifications.filter.all" } @@ -2294,6 +2368,15 @@ { "descriptors": [ { + "defaultMessage": "Grant permission.", + "id": "notifications.grant_permission" + } + ], + "path": "app/javascript/mastodon/features/notifications/components/grant_permission_button.json" + }, + { + "descriptors": [ + { "defaultMessage": "{name} favourited your status", "id": "notification.favourite" }, @@ -2314,6 +2397,10 @@ "id": "notification.reblog" }, { + "defaultMessage": "{name} just posted", + "id": "notification.status" + }, + { "defaultMessage": "{name} has requested to follow you", "id": "notification.follow_request" } @@ -2323,12 +2410,37 @@ { "descriptors": [ { + "defaultMessage": "Close", + "id": "lightbox.close" + }, + { + "defaultMessage": "Never miss a thing", + "id": "notifications_permission_banner.title" + }, + { + "defaultMessage": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "id": "notifications_permission_banner.how_to_control" + }, + { + "defaultMessage": "Enable desktop notifications", + "id": "notifications_permission_banner.enable" + } + ], + "path": "app/javascript/mastodon/features/notifications/components/notifications_permission_banner.json" + }, + { + "descriptors": [ + { "defaultMessage": "Are you sure you want to permanently clear all your notifications?", "id": "notifications.clear_confirmation" }, { "defaultMessage": "Clear notifications", "id": "notifications.clear" + }, + { + "defaultMessage": "Desktop notifications can't be enabled, as browser permission has been denied before", + "id": "notifications.permission_denied_alert" } ], "path": "app/javascript/mastodon/features/notifications/containers/column_settings_container.json" @@ -2340,6 +2452,10 @@ "id": "column.notifications" }, { + "defaultMessage": "Mark every notification as read", + "id": "notifications.mark_as_read" + }, + { "defaultMessage": "You don't have any notifications yet. Interact with others to start the conversation.", "id": "empty_column.notifications" } @@ -2349,6 +2465,60 @@ { "descriptors": [ { + "defaultMessage": "Reply", + "id": "status.reply" + }, + { + "defaultMessage": "Reply to thread", + "id": "status.replyAll" + }, + { + "defaultMessage": "Boost", + "id": "status.reblog" + }, + { + "defaultMessage": "Boost with original visibility", + "id": "status.reblog_private" + }, + { + "defaultMessage": "Unboost", + "id": "status.cancel_reblog_private" + }, + { + "defaultMessage": "This post cannot be boosted", + "id": "status.cannot_reblog" + }, + { + "defaultMessage": "Favourite", + "id": "status.favourite" + }, + { + "defaultMessage": "Reply", + "id": "confirmations.reply.confirm" + }, + { + "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "id": "confirmations.reply.message" + }, + { + "defaultMessage": "Expand this status", + "id": "status.open" + } + ], + "path": "app/javascript/mastodon/features/picture_in_picture/components/footer.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Close", + "id": "lightbox.close" + } + ], + "path": "app/javascript/mastodon/features/picture_in_picture/components/header.json" + }, + { + "descriptors": [ + { "defaultMessage": "Pinned toot", "id": "column.pins" } @@ -2622,15 +2792,6 @@ { "descriptors": [ { - "defaultMessage": "View context", - "id": "lightbox.view_context" - } - ], - "path": "app/javascript/mastodon/features/ui/components/audio_modal.json" - }, - { - "descriptors": [ - { "defaultMessage": "Are you sure you want to block {name}?", "id": "confirmations.block.message" }, @@ -2786,6 +2947,14 @@ "id": "upload_form.description" }, { + "defaultMessage": "Analyzing picture…", + "id": "upload_modal.analyzing_picture" + }, + { + "defaultMessage": "Preparing OCR…", + "id": "upload_modal.preparing_ocr" + }, + { "defaultMessage": "Edit media", "id": "upload_modal.edit_media" }, @@ -2798,10 +2967,6 @@ "id": "upload_form.thumbnail" }, { - "defaultMessage": "Analyzing picture…", - "id": "upload_modal.analyzing_picture" - }, - { "defaultMessage": "Detect text from picture", "id": "upload_modal.detect_text" }, @@ -2887,10 +3052,6 @@ { "defaultMessage": "Next", "id": "lightbox.next" - }, - { - "defaultMessage": "View context", - "id": "lightbox.view_context" } ], "path": "app/javascript/mastodon/features/ui/components/media_modal.json" @@ -2898,6 +3059,22 @@ { "descriptors": [ { + "defaultMessage": "{number, plural, one {# minute} other {# minutes}}", + "id": "intervals.full.minutes" + }, + { + "defaultMessage": "{number, plural, one {# hour} other {# hours}}", + "id": "intervals.full.hours" + }, + { + "defaultMessage": "{number, plural, one {# day} other {# days}}", + "id": "intervals.full.days" + }, + { + "defaultMessage": "Indefinite", + "id": "mute_modal.indefinite" + }, + { "defaultMessage": "Are you sure you want to mute {name}?", "id": "confirmations.mute.message" }, @@ -2910,6 +3087,10 @@ "id": "mute_modal.hide_notifications" }, { + "defaultMessage": "Duration", + "id": "mute_modal.duration" + }, + { "defaultMessage": "Cancel", "id": "confirmation_modal.cancel" }, @@ -3039,11 +3220,15 @@ { "descriptors": [ { - "defaultMessage": "View context", - "id": "lightbox.view_context" + "defaultMessage": "Compress image view box", + "id": "lightbox.compress" + }, + { + "defaultMessage": "Expand image view box", + "id": "lightbox.expand" } ], - "path": "app/javascript/mastodon/features/ui/components/video_modal.json" + "path": "app/javascript/mastodon/features/ui/components/zoomable_image.json" }, { "descriptors": [ diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 2108c4ab6..7b7373165 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ", "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", "account.direct": "Προσωπικό μήνυμα προς @{name}", + "account.disable_notifications": "Διακοπή ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", "account.domain_blocked": "Κρυμμένος τομέας", "account.edit_profile": "Επεξεργασία προφίλ", + "account.enable_notifications": "Έναρξη ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", "account.endorse": "Προβολή στο προφίλ", "account.follow": "Ακολούθησε", "account.followers": "Ακόλουθοι", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Αποτελέσματα αναζήτησης", "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", + "empty_column.account_suspended": "Λογαριασμός σε αναστολή", "empty_column.account_timeline": "Δεν έχει τουτ εδώ!", "empty_column.account_unavailable": "Μη διαθέσιμο προφίλ", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.", "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις", "error.unexpected_crash.explanation": "Είτε λόγω λάθους στον κώδικά μας ή λόγω ασυμβατότητας με τον browser, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.", + "error.unexpected_crash.explanation_addons": "Η σελίδα δεν μπόρεσε να εμφανιστεί σωστά. Το πρόβλημα οφείλεται πιθανόν σε κάποια επέκταση του φυλλομετρητή (browser extension) ή σε κάποιο αυτόματο εργαλείο μετάφρασης.", "error.unexpected_crash.next_steps": "Δοκίμασε να ανανεώσεις τη σελίδα. Αν αυτό δε βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού browser ή κάποιας εφαρμογής.", + "error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.", "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", "follow_request.authorize": "Ενέκρινε", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "απο-εστίαση του πεδίου σύνθεσης/αναζήτησης", "keyboard_shortcuts.up": "κίνηση προς την κορυφή της λίστας", "lightbox.close": "Κλείσιμο", + "lightbox.compress": "Συμπίεση πλαισίου εμφάνισης εικόνας", + "lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", - "lightbox.view_context": "Εμφάνιση πλαισίου", "lists.account.add": "Πρόσθεσε στη λίστα", "lists.account.remove": "Βγάλε από τη λίστα", "lists.delete": "Διαγραφή λίστας", @@ -260,6 +266,10 @@ "lists.edit.submit": "Αλλαγή τίτλου", "lists.new.create": "Προσθήκη λίστας", "lists.new.title_placeholder": "Τίτλος νέας λίστα", + "lists.replies_policy.followed": "Οποιοσδήποτε χρήστης που ακολουθείς", + "lists.replies_policy.list": "Μέλη της λίστας", + "lists.replies_policy.none": "Κανένας", + "lists.replies_policy.title": "Εμφάνιση απαντήσεων σε:", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.subheading": "Οι λίστες σου", "load_pending": "{count, plural, one {# νέο} other {# νέα}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Εναλλαγή ορατότητας", "missing_indicator.label": "Δε βρέθηκε", "missing_indicator.sublabel": "Αδύνατη η εύρεση αυτού του πόρου", + "mute_modal.duration": "Διάρκεια", "mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;", + "mute_modal.indefinite": "Αόριστη", "navigation_bar.apps": "Εφαρμογές φορητών συσκευών", "navigation_bar.blocks": "Αποκλεισμένοι χρήστες", "navigation_bar.bookmarks": "Σελιδοδείκτες", @@ -298,6 +310,7 @@ "notification.own_poll": "Η ψηφοφορία σου έληξε", "notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες", "notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου", + "notification.status": "Ο/Η {name} μόλις έγραψε κάτι", "notifications.clear": "Καθαρισμός ειδοποιήσεων", "notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις όλες τις ειδοποιήσεις σου;", "notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Προωθήσεις:", "notifications.column_settings.show": "Εμφάνισε σε στήλη", "notifications.column_settings.sound": "Ηχητική ειδοποίηση", + "notifications.column_settings.status": "Νέα τουτ:", "notifications.filter.all": "Όλες", "notifications.filter.boosts": "Προωθήσεις", "notifications.filter.favourites": "Αγαπημένα", "notifications.filter.follows": "Ακόλουθοι", "notifications.filter.mentions": "Αναφορές", "notifications.filter.polls": "Αποτελέσματα ψηφοφορίας", + "notifications.filter.statuses": "Ενημερώσεις από όσους ακολουθείς", + "notifications.grant_permission": "Χορήγηση άδειας.", "notifications.group": "{count} ειδοποιήσεις", + "notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.", + "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Μη χάσετε τίποτα", + "picture_in_picture.restore": "Επαναφορά", "poll.closed": "Κλειστή", "poll.refresh": "Ανανέωση", "poll.total_people": "{count, plural, one {# άτομο} other {# άτομα}}", @@ -388,7 +412,7 @@ "status.pin": "Καρφίτσωσε στο προφίλ", "status.pinned": "Καρφιτσωμένο τουτ", "status.read_more": "Περισσότερα", - "status.reblog": "Προώθησε", + "status.reblog": "Προώθηση", "status.reblog_private": "Προώθησε στους αρχικούς παραλήπτες", "status.reblogged_by": "{name} προώθησε", "status.reblogs.empty": "Κανείς δεν προώθησε αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.", @@ -430,7 +454,7 @@ "units.short.million": "{count}Ε", "units.short.thousand": "{count}Χ", "upload_area.title": "Drag & drop για να ανεβάσεις", - "upload_button.label": "Πρόσθεσε πολυμέσα ({formats})", + "upload_button.label": "Πρόσθεσε πολυμέσα", "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.", "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα", "upload_modal.edit_media": "Επεξεργασία Πολυμέσων", "upload_modal.hint": "Κάνε κλικ ή σείρε τον κύκλο στην προεπισκόπηση για να επιλέξεις το σημείο εστίασης που θα είναι πάντα εμφανές σε όλες τις μικρογραφίες.", + "upload_modal.preparing_ocr": "Προετοιμασία αναγνώρισης κειμένου…", "upload_modal.preview_label": "Προεπισκόπηση ({ratio})", "upload_progress.label": "Ανεβαίνει...", "video.close": "Κλείσε το βίντεο", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 8fb7d0449..3f8d37249 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your toot", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 886083392..5cff6c5af 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -4,19 +4,21 @@ "account.badges.bot": "Roboto", "account.badges.group": "Grupo", "account.block": "Bloki @{name}", - "account.block_domain": "Kaŝi ĉion de {domain}", + "account.block_domain": "Bloki {domain}", "account.blocked": "Blokita", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Rigardi pli al la originala profilo", "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", - "account.domain_blocked": "Domajno kaŝita", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti profilon", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Montri en profilo", "account.follow": "Sekvi", "account.followers": "Sekvantoj", "account.followers.empty": "Ankoraŭ neniu sekvas tiun uzanton.", "account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}", - "account.following_counter": "{count, plural, other{{counter} Sekvi}}", + "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", @@ -36,14 +38,14 @@ "account.requested": "Atendo de aprobo. Alklaku por nuligi peton de sekvado", "account.share": "Diskonigi la profilon de @{name}", "account.show_reblogs": "Montri diskonigojn de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Tooto} other {{counter} Tootoj}}", + "account.statuses_counter": "{count, plural, one {{counter} Mesaĝo} other {{counter} Mesaĝoj}}", "account.unblock": "Malbloki @{name}", - "account.unblock_domain": "Malkaŝi {domain}", + "account.unblock_domain": "Malbloki {domain}", "account.unendorse": "Ne montri en profilo", "account.unfollow": "Ne plu sekvi", "account.unmute": "Malsilentigi @{name}", "account.unmute_notifications": "Malsilentigi sciigojn de @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Alklaku por aldoni noton", "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", @@ -62,7 +64,7 @@ "column.community": "Loka tempolinio", "column.direct": "Rektaj mesaĝoj", "column.directory": "Trarigardi profilojn", - "column.domain_blocks": "Kaŝitaj domajnoj", + "column.domain_blocks": "Blokitaj domajnoj", "column.favourites": "Stelumoj", "column.follow_requests": "Petoj de sekvado", "column.home": "Hejmo", @@ -110,7 +112,7 @@ "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun mesaĝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", - "confirmations.domain_block.confirm": "Kaŝi la tutan domajnon", + "confirmations.domain_block.confirm": "Bloki la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika tempolinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", "confirmations.logout.confirm": "Elsaluti", "confirmations.logout.message": "Ĉu vi certas ke vi volas elsaluti?", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!", "empty_column.account_unavailable": "Profilo ne disponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", @@ -166,12 +169,14 @@ "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", "error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Provu refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo", "errors.unexpected_crash.report_issue": "Raporti problemon", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", - "follow_requests.unlocked_explanation": "137/5000\nKvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.", + "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.", "generic.saved": "Konservita", "getting_started.developers": "Programistoj", "getting_started.directory": "Profilujo", @@ -232,7 +237,7 @@ "keyboard_shortcuts.hotkey": "Rapidklavo", "keyboard_shortcuts.legend": "montri ĉi tiun noton", "keyboard_shortcuts.local": "malfermi la lokan tempolinion", - "keyboard_shortcuts.mention": "por mencii la aŭtoron", + "keyboard_shortcuts.mention": "mencii la aŭtoron", "keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj", "keyboard_shortcuts.my_profile": "malfermi vian profilon", "keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "respondi", "keyboard_shortcuts.requests": "malfermi la liston de petoj de sekvado", "keyboard_shortcuts.search": "enfokusigi la serĉilon", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "montri/kaŝi la kampon de enhava averto", "keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»", "keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto", "keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Sekva", "lightbox.previous": "Antaŭa", - "lightbox.view_context": "Vidi kuntekston", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", "lists.delete": "Forigi la liston", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ŝanĝi titolon", "lists.new.create": "Aldoni liston", "lists.new.title_placeholder": "Titolo de la nova listo", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Montri respondon al:", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Baskuligi videblecon", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita", + "mute_modal.duration": "Daŭro", "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?", + "mute_modal.indefinite": "Nedifinita", "navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", @@ -275,7 +287,7 @@ "navigation_bar.compose": "Skribi novan mesaĝon", "navigation_bar.direct": "Rektaj mesaĝoj", "navigation_bar.discover": "Esplori", - "navigation_bar.domain_blocks": "Kaŝitaj domajnoj", + "navigation_bar.domain_blocks": "Blokitaj domajnoj", "navigation_bar.edit_profile": "Redakti profilon", "navigation_bar.favourites": "Stelumoj", "navigation_bar.filters": "Silentigitaj vortoj", @@ -298,6 +310,7 @@ "notification.own_poll": "Via balotenketo finiĝitis", "notification.poll": "Partoprenita balotenketo finiĝis", "notification.reblog": "{name} diskonigis vian mesaĝon", + "notification.status": "{name} ĵus afiŝita", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", "notifications.column_settings.alert": "Retumilaj sciigoj", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", + "notifications.column_settings.status": "Novaj mesaĝoj:", "notifications.filter.all": "Ĉiuj", "notifications.filter.boosts": "Diskonigoj", "notifications.filter.favourites": "Stelumoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} sciigoj", + "notifications.mark_as_read": "Marki ĉiujn sciigojn legita", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Ebligi retumilajn sciigojn", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Neniam preterlasas iun ajn", + "picture_in_picture.restore": "Put it back", "poll.closed": "Finita", "poll.refresh": "Aktualigi", "poll.total_people": "{count, plural, one {# homo} other {# homoj}}", @@ -329,13 +353,13 @@ "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", "privacy.change": "Agordi mesaĝan privatecon", - "privacy.direct.long": "Afiŝi nur al menciitaj uzantoj", + "privacy.direct.long": "Videbla nur al menciitaj uzantoj", "privacy.direct.short": "Rekta", - "privacy.private.long": "Afiŝi nur al sekvantoj", - "privacy.private.short": "Nur por sekvantoj", - "privacy.public.long": "Afiŝi en publikaj tempolinioj", + "privacy.private.long": "Videbla nur al viaj sekvantoj", + "privacy.private.short": "Nur al sekvantoj", + "privacy.public.long": "Videbla al ĉiuj, afiŝita en publikaj tempolinioj", "privacy.public.short": "Publika", - "privacy.unlisted.long": "Ne afiŝi en publikaj tempolinioj", + "privacy.unlisted.long": "Videbla al ĉiuj, sed ne en publikaj tempolinioj", "privacy.unlisted.short": "Nelistigita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", @@ -422,11 +446,11 @@ "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", "timeline_hint.resources.followers": "Sekvantoj", "timeline_hint.resources.follows": "Sekvatoj", - "timeline_hint.resources.statuses": "Pli malnovaj tootoj", + "timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj", "trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} parolante", "trends.trending_now": "Nunaj furoraĵoj", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}Md", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Altreni kaj lasi por alŝuti", @@ -441,11 +465,12 @@ "upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi", "upload_modal.analyzing_picture": "Bilda analizado…", "upload_modal.apply": "Apliki", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Elekti bildon", "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", "upload_modal.detect_text": "Detekti tekston de la bildo", "upload_modal.edit_media": "Redakti aŭdovidaĵon", "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Antaŭvido ({ratio})", "upload_progress.label": "Alŝutado…", "video.close": "Fermi la videon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index fda386455..434382e20 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -1,16 +1,18 @@ { - "account.account_note_header": "Tu nota para @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Agregar o quitar de las listas", "account.badges.bot": "Bot", "account.badges.group": "Grupo", "account.block": "Bloquear a @{name}", - "account.block_domain": "Ocultar todo de {domain}", + "account.block_domain": "Bloquear dominio {domain}", "account.blocked": "Bloqueado", "account.browse_more_on_origin_server": "Explorar más en el perfil original", "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", - "account.domain_blocked": "Dominio oculto", + "account.disable_notifications": "Dejar de notificarme cuando @{name} tootee", + "account.domain_blocked": "Dominio bloqueado", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notificarme cuando @{name} tootee", "account.endorse": "Destacar en el perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -25,27 +27,27 @@ "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. El propietario manualmente revisa quién puede seguirle.", "account.media": "Medios", "account.mention": "Mencionar a @{name}", - "account.moved_to": "{name} se ha muó a:", + "account.moved_to": "{name} se ha mudó a:", "account.mute": "Silenciar a @{name}", "account.mute_notifications": "Silenciar notificaciones de @{name}", "account.muted": "Silenciado", "account.never_active": "Nunca", "account.posts": "Toots", - "account.posts_with_replies": "Toots con respuestas", + "account.posts_with_replies": "Toots y respuestas", "account.report": "Denunciar a @{name}", - "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento.", + "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar retoots de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "Desbloquear a @{name}", - "account.unblock_domain": "Mostrar {domain}", + "account.unblock_domain": "Desbloquear dominio {domain}", "account.unendorse": "No destacar en el perfil", "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", - "account_note.placeholder": "No se ofreció ningún comentario", + "account_note.placeholder": "Hacé clic par agregar una nota", "alert.rate_limited.message": "Por favor, reintentá después de las {retry_time, time, medium}.", - "alert.rate_limited.title": "Tarifa limitada", + "alert.rate_limited.title": "Acción limitada", "alert.unexpected.message": "Ocurrió un error.", "alert.unexpected.title": "¡Epa!", "announcement.announcement": "Anuncio", @@ -62,7 +64,7 @@ "column.community": "Línea temporal local", "column.direct": "Mensajes directos", "column.directory": "Explorar perfiles", - "column.domain_blocks": "Dominios ocultos", + "column.domain_blocks": "Dominios bloqueados", "column.favourites": "Favoritos", "column.follow_requests": "Solicitudes de seguimiento", "column.home": "Principal", @@ -85,19 +87,19 @@ "compose_form.direct_message_warning": "Este toot sólo será enviado a los usuarios mencionados.", "compose_form.direct_message_warning_learn_more": "Aprendé más", "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", - "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"sólo para seguidores\".", + "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"Sólo para seguidores\".", "compose_form.lock_disclaimer.lock": "bloqueada", "compose_form.placeholder": "¿Qué onda?", "compose_form.poll.add_option": "Agregá una opción", "compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.remove_option": "Quitá esta opción", + "compose_form.poll.remove_option": "Quitar esta opción", "compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples", "compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción", "compose_form.publish": "Tootear", "compose_form.publish_loud": "¡{publish}!", "compose_form.sensitive.hide": "Marcar medio como sensible", - "compose_form.sensitive.marked": "El medio se marcó como sensible", + "compose_form.sensitive.marked": "{count, plural, one {El medio está marcado como sensible} other {Los medios están marcados como sensibles}}", "compose_form.sensitive.unmarked": "El medio no está marcado como sensible", "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia", "compose_form.spoiler.unmarked": "El texto no está oculto", @@ -107,10 +109,10 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "¿Estás seguro que querés bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás seguro que querés eliminar este estado?", + "confirmations.delete.message": "¿Estás seguro que querés eliminar este toot?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?", - "confirmations.domain_block.confirm": "Ocultar dominio entero", + "confirmations.domain_block.confirm": "Bloquear dominio entero", "confirmations.domain_block.message": "¿Estás completamente seguro que querés bloquear el {domain} entero? En la mayoría de los casos, unos cuantos bloqueos y silenciados puntuales son suficientes y preferibles. No vas a ver contenido de ese dominio en ninguna de tus líneas temporales o en tus notificaciones. Tus seguidores de ese dominio serán quitados.", "confirmations.logout.confirm": "Cerrar sesión", "confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?", @@ -118,19 +120,19 @@ "confirmations.mute.explanation": "Se ocultarán los mensajes de esta cuenta y los mensajes de otras cuentas que mencionen a ésta, pero todavía esta cuenta podrá ver tus mensajes o seguirte.", "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?", "confirmations.redraft.confirm": "Eliminar toot original y editarlo", - "confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.", + "confirmations.redraft.message": "¿Estás seguro que querés eliminar este toot y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?", "confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?", "conversation.delete": "Eliminar conversación", - "conversation.mark_as_read": "Marcar como leído", + "conversation.mark_as_read": "Marcar como leída", "conversation.open": "Ver conversación", "conversation.with": "Con {names}", "directory.federated": "Desde fediverso conocido", "directory.local": "Sólo de {domain}", "directory.new_arrivals": "Recién llegados", - "directory.recently_active": "Recientemente activo", + "directory.recently_active": "Recientemente activos", "embed.instructions": "Insertá este toot a tu sitio web copiando el código de abajo.", "embed.preview": "Así es cómo se verá:", "emoji_button.activity": "Actividad", @@ -143,17 +145,18 @@ "emoji_button.objects": "Objetos", "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", - "emoji_button.search": "Buscar…", + "emoji_button.search": "Buscar...", "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", - "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_suspended": "Cuenta suspendida", + "empty_column.account_timeline": "¡No hay toots acá!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", - "empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en marcadores. Cuando guardés uno en marcadores, se mostrará acá.", + "empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.", "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!", "empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.", - "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", + "empty_column.domain_blocks": "Todavía no hay dominios bloqueados.", "empty_column.favourited_statuses": "Todavía no tenés toots favoritos. Cuando marqués uno como favorito, se mostrará acá.", "empty_column.favourites": "Todavía nadie marcó este toot como favorito. Cuando alguien lo haga, se mostrará acá.", "empty_column.follow_requests": "Todavía no tenés ninguna solicitud de seguimiento. Cuando recibás una, se mostrará acá.", @@ -161,12 +164,14 @@ "empty_column.home": "¡Tu línea temporal principal está vacía! Visitá {public} o usá la búsqueda para comenzar y encontrar a otros usuarios.", "empty_column.home.public_timeline": "la línea temporal pública", "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos toots, se mostrarán acá.", - "empty_column.lists": "Todavía no tienes ninguna lista. Cuando creés una, se mostrará acá.", + "empty_column.lists": "Todavía no tenés ninguna lista. Cuando creés una, se mostrará acá.", "empty_column.mutes": "Todavía no silenciaste a ningún usuario.", "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.", - "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal.", + "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.", + "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente es causado por un complemento del navegador web o por herramientas de traducción automática.", "error.unexpected_crash.next_steps": "Intentá recargar la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "follow_request.authorize": "Autorizar", @@ -177,9 +182,9 @@ "getting_started.directory": "Directorio de perfiles", "getting_started.documentation": "Documentación", "getting_started.heading": "Introducción", - "getting_started.invite": "Invitar usuarios", + "getting_started.invite": "Invitar gente", "getting_started.open_source_notice": "Mastodon es software libre. Podés contribuir o informar errores en {github}.", - "getting_started.security": "Seguridad", + "getting_started.security": "Configuración de la cuenta", "getting_started.terms": "Términos del servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", @@ -199,31 +204,31 @@ "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "introduction.federation.action": "Siguiente", - "introduction.federation.federated.headline": "Federado", + "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.", "introduction.federation.home.headline": "Principal", - "introduction.federation.home.text": "Los toots de las personas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", + "introduction.federation.home.text": "Los toots de las cuentas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los toots públicos de las personas en el mismo servidor aparecerán en la línea temporal local.", + "introduction.federation.local.text": "Los toots públicos de las cuentas en el mismo servidor aparecerán en la línea temporal local.", "introduction.interactions.action": "¡Terminar tutorial!", - "introduction.interactions.favourite.headline": "Favorito", + "introduction.interactions.favourite.headline": "Favoritos", "introduction.interactions.favourite.text": "Podés guardar un toot para más tarde, y hacerle saber al autor que te gustó, marcándolo como favorito.", "introduction.interactions.reblog.headline": "Retootear", - "introduction.interactions.reblog.text": "Podés compartir los toots de otras personas con tus seguidores retooteando los mismos.", + "introduction.interactions.reblog.text": "Podés compartir los toots de otras cuentas con tus seguidores retooteando los mismos.", "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.", + "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras cuentas, que se encadenarán juntos en una conversación.", "introduction.welcome.action": "¡Dale!", "introduction.welcome.headline": "Primeros pasos", "introduction.welcome.text": "¡Bienvenido al fediverso! En unos pocos minutos, vas a poder transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial: aloja tu perfil, así que acordate de su nombre.", "keyboard_shortcuts.back": "para volver", "keyboard_shortcuts.blocked": "para abrir la lista de usuarios bloqueados", "keyboard_shortcuts.boost": "para retootear", - "keyboard_shortcuts.column": "para enfocar un estado en una de las columnas", + "keyboard_shortcuts.column": "para enfocar un toot en una de las columnas", "keyboard_shortcuts.compose": "para enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "para abrir columna de mensajes directos", "keyboard_shortcuts.down": "para bajar en la lista", - "keyboard_shortcuts.enter": "para abrir el estado", + "keyboard_shortcuts.enter": "para abrir el toot", "keyboard_shortcuts.favourite": "para marcar como favorito", "keyboard_shortcuts.favourites": "para abrir la lista de favoritos", "keyboard_shortcuts.federated": "para abrir la línea temporal federada", @@ -233,11 +238,11 @@ "keyboard_shortcuts.legend": "para mostrar este texto", "keyboard_shortcuts.local": "para abrir la línea temporal local", "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", + "keyboard_shortcuts.muted": "para abrir la lista de usuarios silenciados", "keyboard_shortcuts.my_profile": "para abrir tu perfil", "keyboard_shortcuts.notifications": "para abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir archivos de medios", - "keyboard_shortcuts.pinned": "para abrir lista de toots fijados", + "keyboard_shortcuts.open_media": "para abrir los archivos de medios", + "keyboard_shortcuts.pinned": "para abrir la lista de toots fijados", "keyboard_shortcuts.profile": "para abrir el perfil del autor", "keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.requests": "para abrir la lista de solicitudes de seguimiento", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "para subir en la lista", "lightbox.close": "Cerrar", + "lightbox.compress": "Comprimir cuadro de vista de imagen", + "lightbox.expand": "Expandir cuadro de vista de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Agregar a lista", "lists.account.remove": "Quitar de lista", "lists.delete": "Eliminar lista", @@ -260,14 +266,20 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Agregar lista", "lists.new.title_placeholder": "Nuevo título de lista", + "lists.replies_policy.followed": "Cualquier cuenta seguida", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Nadie", + "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente que seguís", "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", - "loading_indicator.label": "Cargando…", - "media_gallery.toggle_visible": "Cambiar visibilidad", + "loading_indicator.label": "Cargando...", + "media_gallery.toggle_visible": "Ocultar {number, plural, one {imagen} other {imágenes}}", "missing_indicator.label": "No se encontró", "missing_indicator.sublabel": "No se encontró este recurso", + "mute_modal.duration": "Duración", "mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", @@ -275,12 +287,12 @@ "navigation_bar.compose": "Redactar un nuevo toot", "navigation_bar.direct": "Mensajes directos", "navigation_bar.discover": "Descubrir", - "navigation_bar.domain_blocks": "Dominios ocultos", + "navigation_bar.domain_blocks": "Dominios bloqueados", "navigation_bar.edit_profile": "Editar perfil", "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes de seguimiento", - "navigation_bar.follows_and_followers": "Personas seguidas y seguidores", + "navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores", "navigation_bar.info": "Acerca de este servidor", "navigation_bar.keyboard_shortcuts": "Atajos", "navigation_bar.lists": "Listas", @@ -291,13 +303,14 @@ "navigation_bar.preferences": "Configuración", "navigation_bar.public_timeline": "Línea temporal federada", "navigation_bar.security": "Seguridad", - "notification.favourite": "{name} marcó tu estado como favorito", + "notification.favourite": "{name} marcó tu toot como favorito", "notification.follow": "{name} te empezó a seguir", "notification.follow_request": "{name} solicitó seguirte", "notification.mention": "{name} te mencionó", "notification.own_poll": "Tu encuesta finalizó", "notification.poll": "Finalizó una encuesta en la que votaste", "notification.reblog": "{name} retooteó tu estado", + "notification.status": "{name} acaba de tootear", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", + "notifications.column_settings.status": "Nuevos toots:", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", - "notifications.filter.polls": "Resultados de la encuesta", + "notifications.filter.polls": "Resultados de encuesta", + "notifications.filter.statuses": "Actualizaciones de cuentas que seguís", + "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", + "notifications.mark_as_read": "Marcar cada notificación como leída", + "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada", + "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes", + "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se concedió el permiso requerido.", + "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", + "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.", + "notifications_permission_banner.title": "No te pierdas nada", + "picture_in_picture.restore": "Restaurar", "poll.closed": "Cerrada", "poll.refresh": "Refrescar", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", @@ -328,14 +352,14 @@ "poll.voted": "Votaste esta opción", "poll_button.add_poll": "Agregar una encuesta", "poll_button.remove_poll": "Quitar encuesta", - "privacy.change": "Configurar privacidad de estado", - "privacy.direct.long": "Enviar toot sólo a los usuarios mencionados", + "privacy.change": "Configurar privacidad de toot", + "privacy.direct.long": "Visible sólo a los usuarios mencionados", "privacy.direct.short": "Directo", - "privacy.private.long": "Enviar toot sólo a los seguidores", + "privacy.private.long": "Visible sólo a los seguidores", "privacy.private.short": "Sólo a seguidores", - "privacy.public.long": "Enviar toot a las líneas temporales públicas", + "privacy.public.long": "Visible para todos, mostrado en las líneas temporales públicas", "privacy.public.short": "Público", - "privacy.unlisted.long": "No enviar toot a las líneas temporales públicas", + "privacy.unlisted.long": "Visible para todos, pero no en las líneas temporales públicas", "privacy.unlisted.short": "No listado", "refresh": "Refrescar", "regeneration_indicator.label": "Cargando…", @@ -355,28 +379,28 @@ "report.target": "Denunciando a {target}", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", - "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los estados que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres usuarios, nombres mostrados y etiquetas.", + "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los toots que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "estado", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan", "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "No se puede buscar toots por contenido en este servidor de Mastodon.", + "search_results.statuses_fts_disabled": "No se pueden buscar toots por contenido en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interface de moderación para @{name}", - "status.admin_status": "Abrir este estado en la interface de moderación", + "status.admin_status": "Abrir este toot en la interface de moderación", "status.block": "Bloquear a @{name}", - "status.bookmark": "Marcador", + "status.bookmark": "Marcar", "status.cancel_reblog_private": "Quitar retoot", "status.cannot_reblog": "No se puede retootear este toot", - "status.copy": "Copiar enlace al estado", + "status.copy": "Copiar enlace al toot", "status.delete": "Eliminar", "status.detailed_status": "Vista de conversación detallada", "status.direct": "Mensaje directo a @{name}", "status.embed": "Insertar", - "status.favourite": "Favorito", + "status.favourite": "Marcar como favorito", "status.filtered": "Filtrado", "status.load_more": "Cargar más", "status.media_hidden": "Medios ocultos", @@ -384,10 +408,10 @@ "status.more": "Más", "status.mute": "Silenciar a @{name}", "status.mute_conversation": "Silenciar conversación", - "status.open": "Expandir este estado", + "status.open": "Expandir este toot", "status.pin": "Fijar en el perfil", "status.pinned": "Toot fijado", - "status.read_more": "Leer más", + "status.read_more": "Leé más", "status.reblog": "Retootear", "status.reblog_private": "Retootear a la audiencia original", "status.reblogged_by": "{name} retooteó", @@ -409,7 +433,7 @@ "status.unpin": "Dejar de fijar", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", - "tabs_bar.federated_timeline": "Federado", + "tabs_bar.federated_timeline": "Federada", "tabs_bar.home": "Principal", "tabs_bar.local_timeline": "Local", "tabs_bar.notifications": "Notificaciones", @@ -430,15 +454,15 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}mil", "upload_area.title": "Para subir, arrastrá y soltá", - "upload_button.label": "Agregar medios ({formats})", + "upload_button.label": "Agregá imágenes o un archivo de audio o video", "upload_error.limit": "Se excedió el límite de subida de archivos.", "upload_error.poll": "No se permite la subida de archivos en encuestas.", - "upload_form.audio_description": "Describir para personas con problemas auditivos", - "upload_form.description": "Agregar descripción para los usuarios con dificultades visuales", + "upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas", + "upload_form.description": "Agregá una descripción para personas con dificultades visuales", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.undo": "Eliminar", - "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", + "upload_form.video_description": "Agregá una descripción para personas con dificultades auditivas o visuales", "upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.apply": "Aplicar", "upload_modal.choose_image": "Elegir imagen", @@ -446,12 +470,13 @@ "upload_modal.detect_text": "Detectar texto de la imagen", "upload_modal.edit_media": "Editar medio", "upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Previsualización ({ratio})", - "upload_progress.label": "Subiendo…", + "upload_progress.label": "Subiendo...", "video.close": "Cerrar video", "video.download": "Descargar archivo", "video.exit_fullscreen": "Salir de pantalla completa", - "video.expand": "Expandir vídeo", + "video.expand": "Expandir video", "video.fullscreen": "Pantalla completa", "video.hide": "Ocultar video", "video.mute": "Silenciar sonido", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 62238a748..dfad44c6d 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Ver más en el perfil original", "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", + "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", "account.domain_blocked": "Dominio oculto", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notificarme cuando @{name} publique algo", "account.endorse": "Mostrar en perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -118,7 +120,7 @@ "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.", "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", "confirmations.redraft.confirm": "Borrar y volver a borrador", - "confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.", + "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", "confirmations.unfollow.confirm": "Dejar de seguir", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", + "empty_column.account_suspended": "Cuenta suspendida", "empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", @@ -166,7 +169,9 @@ "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", + "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.", "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", "follow_request.authorize": "Autorizar", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", + "lightbox.compress": "Comprimir cuadro de visualización de imagen", + "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Añadir a lista", "lists.account.remove": "Quitar de lista", "lists.delete": "Borrar lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", + "lists.replies_policy.followed": "Cualquier usuario seguido", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Nadie", + "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente a la que sigues", "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Cambiar visibilidad", "missing_indicator.label": "No encontrado", "missing_indicator.sublabel": "No se encontró este recurso", + "mute_modal.duration": "Duración", "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "Tu encuesta ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado", "notification.reblog": "{name} ha retooteado tu estado", + "notification.status": "{name} acaba de publicar", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", + "notifications.column_settings.status": "Nuevos toots:", "notifications.filter.all": "Todos", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", + "notifications.filter.statuses": "Actualizaciones de gente a la que sigues", + "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", + "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", + "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", + "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", + "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", + "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", + "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", + "notifications_permission_banner.title": "Nunca te pierdas nada", + "picture_in_picture.restore": "Restaurar", "poll.closed": "Cerrada", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -357,7 +381,7 @@ "search_popout.search_format": "Formato de búsqueda avanzada", "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "estado", + "search_popout.tips.status": "toot", "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", @@ -368,8 +392,8 @@ "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", - "status.bookmark": "Marcador", - "status.cancel_reblog_private": "Des-impulsar", + "status.bookmark": "Añadir marcador", + "status.cancel_reblog_private": "Eliminar retoot", "status.cannot_reblog": "Este toot no puede retootearse", "status.copy": "Copiar enlace al estado", "status.delete": "Borrar", @@ -391,11 +415,11 @@ "status.reblog": "Retootear", "status.reblog_private": "Implusar a la audiencia original", "status.reblogged_by": "Retooteado por {name}", - "status.reblogs.empty": "Nadie impulsó este toot todavía. Cuando alguien lo haga, aparecerá aqui.", + "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.", "status.redraft": "Borrar y volver a borrador", "status.remove_bookmark": "Eliminar marcador", "status.reply": "Responder", - "status.replyAll": "Responder al hilván", + "status.replyAll": "Responder al hilo", "status.report": "Reportar", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", @@ -403,7 +427,7 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", - "status.show_thread": "Mostrar hilván", + "status.show_thread": "Mostrar hilo", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", @@ -426,9 +450,9 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", - "units.short.billion": "{count}MM", + "units.short.billion": "{count}B", "units.short.million": "{count}M", - "units.short.thousand": "{count}mil", + "units.short.thousand": "{count}K", "upload_area.title": "Arrastra y suelta para subir", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Límite de subida de archivos excedido.", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detectar texto de la imagen", "upload_modal.edit_media": "Editar multimedia", "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Subiendo…", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 558fe38de..54f4159fe 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Tühista jälgimistaotlus", "account.direct": "Otsesõnum @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domeen peidetud", "account.edit_profile": "Muuda profiili", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Too profiilil esile", "account.follow": "Jälgi", "account.followers": "Jälgijad", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Otsitulemused", "emoji_button.symbols": "Sümbolid", "emoji_button.travel": "Reisimine & Kohad", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Siin tuute ei ole!", "empty_column.account_unavailable": "Profiil pole saadaval", "empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Teil ei ole veel teateid. Suhelge teistega alustamaks vestlust.", "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi", "error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me Teile seda lehekülge korrektselt näidata.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Proovige lehekülge uuesti avada. Kui see ei aita, võite proovida kasutada Mastodoni mõne muu veebilehitseja või äppi kaudu.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", "errors.unexpected_crash.report_issue": "Teavita veast", "follow_request.authorize": "Autoriseeri", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "tekstiala/otsingu koostamise mittefokuseerimiseks", "keyboard_shortcuts.up": "liikumaks nimistus üles", "lightbox.close": "Sulge", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", - "lightbox.view_context": "Vaata konteksti", "lists.account.add": "Lisa nimistusse", "lists.account.remove": "Eemalda nimistust", "lists.delete": "Kustuta nimistu", @@ -260,6 +266,10 @@ "lists.edit.submit": "Muuda pealkiri", "lists.new.create": "Lisa nimistu", "lists.new.title_placeholder": "Uus nimistu pealkiri", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Otsi Teie poolt jälgitavate inimese hulgast", "lists.subheading": "Teie nimistud", "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Lülita nähtavus", "missing_indicator.label": "Ei leitud", "missing_indicator.sublabel": "Seda ressurssi ei leitud", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobiilrakendused", "navigation_bar.blocks": "Blokeeritud kasutajad", "navigation_bar.bookmarks": "Järjehoidjad", @@ -298,6 +310,7 @@ "notification.own_poll": "Teie küsitlus on lõppenud", "notification.poll": "Küsitlus, milles osalesite, on lõppenud", "notification.reblog": "{name} upitas Teie staatust", + "notification.status": "{name} just posted", "notifications.clear": "Puhasta teated", "notifications.clear_confirmation": "Olete kindel, et soovite püsivalt kõik oma teated eemaldada?", "notifications.column_settings.alert": "Töölauateated", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Upitused:", "notifications.column_settings.show": "Kuva tulbas", "notifications.column_settings.sound": "Mängi heli", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Kõik", "notifications.filter.boosts": "Upitused", "notifications.filter.favourites": "Lemmikud", "notifications.filter.follows": "Jälgib", "notifications.filter.mentions": "Mainimised", "notifications.filter.polls": "Küsitluse tulemused", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} teated", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Suletud", "poll.refresh": "Värskenda", "poll.total_people": "{count, plural,one {# inimene} other {# inimest}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Tuvasta teksti pildilt", "upload_modal.edit_media": "Muuda meediat", "upload_modal.hint": "Vajuta või tõmba ringi eelvaatel, et valida fookuspunkti, mis on alati nähtaval kõikidel eelvaadetel.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Eelvaade ({ratio})", "upload_progress.label": "Laeb üles....", "video.close": "Sulge video", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 09471ff2a..80119dc00 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria", "account.direct": "Mezu zuzena @{name}(r)i", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Ezkutatutako domeinua", "account.edit_profile": "Aldatu profila", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Nabarmendu profilean", "account.follow": "Jarraitu", "account.followers": "Jarraitzaileak", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Bilaketaren emaitzak", "emoji_button.symbols": "Sinboloak", "emoji_button.travel": "Bidaiak eta tokiak", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ez dago tootik hemen!", "empty_column.account_unavailable": "Profila ez dago eskuragarri", "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.", "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko", "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", "errors.unexpected_crash.report_issue": "Eman arazoaren berri", "follow_request.authorize": "Baimendu", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea", "keyboard_shortcuts.up": "zerrendan gora mugitzea", "lightbox.close": "Itxi", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Hurrengoa", "lightbox.previous": "Aurrekoa", - "lightbox.view_context": "Ikusi testuingurua", "lists.account.add": "Gehitu zerrendara", "lists.account.remove": "Kendu zerrendatik", "lists.delete": "Ezabatu zerrenda", @@ -260,6 +266,10 @@ "lists.edit.submit": "Aldatu izenburua", "lists.new.create": "Gehitu zerrenda", "lists.new.title_placeholder": "Zerrenda berriaren izena", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Bilatu jarraitzen dituzun pertsonen artean", "lists.subheading": "Zure zerrendak", "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna", "missing_indicator.label": "Ez aurkitua", "missing_indicator.sublabel": "Baliabide hau ezin izan da aurkitu", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mugikorrerako aplikazioak", "navigation_bar.blocks": "Blokeatutako erabiltzaileak", "navigation_bar.bookmarks": "Laster-markak", @@ -298,6 +310,7 @@ "notification.own_poll": "Zure inkesta amaitu da", "notification.poll": "Zuk erantzun duzun inkesta bat bukatu da", "notification.reblog": "{name}(e)k bultzada eman dio zure mezuari", + "notification.status": "{name} just posted", "notifications.clear": "Garbitu jakinarazpenak", "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?", "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Bultzadak:", "notifications.column_settings.show": "Erakutsi zutabean", "notifications.column_settings.sound": "Jo soinua", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Denak", "notifications.filter.boosts": "Bultzadak", "notifications.filter.favourites": "Gogokoak", "notifications.filter.follows": "Jarraipenak", "notifications.filter.mentions": "Aipamenak", "notifications.filter.polls": "Inkestaren emaitza", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} jakinarazpen", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Itxita", "poll.refresh": "Berritu", "poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Antzeman testua iruditik", "upload_modal.edit_media": "Editatu media", "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Aurreikusi ({ratio})", "upload_progress.label": "Igotzen...", "video.close": "Itxi bideoa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 6685b2ccb..b062ec18b 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -4,13 +4,15 @@ "account.badges.bot": "ربات", "account.badges.group": "گروه", "account.block": "مسدودسازی @{name}", - "account.block_domain": "نهفتن همه چیز از {domain}", + "account.block_domain": "بستن دامنه {domain}", "account.blocked": "مسدود", "account.browse_more_on_origin_server": "مرور بیشتر روی نمایهٔ اصلی", "account.cancel_follow_request": "لغو درخواست پیگیری", "account.direct": "پیام خصوصی به @{name}", - "account.domain_blocked": "دامنهٔ نهفته", + "account.disable_notifications": "آگاهی به من هنگام فرستادنهای @{name} پایان یابد", + "account.domain_blocked": "دامنه بسته شد", "account.edit_profile": "ویرایش نمایه", + "account.enable_notifications": "آگاهی هنگام ارسالهای @{name}", "account.endorse": "معرّفی در نمایه", "account.follow": "پی بگیرید", "account.followers": "پیگیران", @@ -38,7 +40,7 @@ "account.show_reblogs": "نمایش بازبوقهای @{name}", "account.statuses_counter": "{count, plural, one {{counter} بوق} other {{counter} بوق}}", "account.unblock": "رفع انسداد @{name}", - "account.unblock_domain": "رفع نهفتن {domain}", + "account.unblock_domain": "گشودن دامنه {domain}", "account.unendorse": "معرّفی نکردن در نمایه", "account.unfollow": "پایان پیگیری", "account.unmute": "رفع خموشی @{name}", @@ -62,7 +64,7 @@ "column.community": "نوشتههای محلی", "column.direct": "پیامهای خصوصی", "column.directory": "مرور نمایهها", - "column.domain_blocks": "دامنههای نهفته", + "column.domain_blocks": "دامنههای بسته", "column.favourites": "پسندیدهها", "column.follow_requests": "درخواستهای پیگیری", "column.home": "خانه", @@ -78,8 +80,8 @@ "column_header.pin": "ثابتکردن", "column_header.show_settings": "نمایش تنظیمات", "column_header.unpin": "رهاکردن", - "column_subheading.settings": "تنظیمات", - "community.column_settings.local_only": "تنها بومی", + "column_subheading.settings": "ساماندهی", + "community.column_settings.local_only": "فقط محلّی", "community.column_settings.media_only": "فقط رسانه", "community.column_settings.remote_only": "تنها دوردست", "compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آنها نام برده شده فرستاده خواهد شد.", @@ -96,7 +98,7 @@ "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تکگزینهای", "compose_form.publish": "بوق", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "علامتگذاری به عنوان حساس", + "compose_form.sensitive.hide": "علامتگذاری رسانه به عنوان حساس", "compose_form.sensitive.marked": "رسانه به عنوان حساس علامتگذاری شده", "compose_form.sensitive.unmarked": "رسانه به عنوان حساس علامتگذاری نشده", "compose_form.spoiler.marked": "نوشته پشت هشدار پنهان است", @@ -147,6 +149,7 @@ "emoji_button.search_results": "نتایج جستجو", "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", + "empty_column.account_suspended": "حساب معلق شد", "empty_column.account_timeline": "هیچ بوقی اینجا نیست!", "empty_column.account_unavailable": "نمایهٔ موجود نیست", "empty_column.blocks": "هنوز کسی را مسدود نکردهاید.", @@ -166,7 +169,9 @@ "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به دیگران واکنش نشان دهید تا گفتگو آغاز شود.", "empty_column.public": "اینجا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی بگیرید تا اینجا پر شود", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", + "error.unexpected_crash.explanation_addons": "این صفحه نمیتواند درست نشان داده شود. احتمالاً این خطا ناشی از یک افزونهٔ مرورگر یا ابزار ترجمهٔ خودکار است.", "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر کمکی نکرد، شاید همچنان بتوانید با ماستودون از راه یک مرورگر دیگر یا با یکی از اپهای آن کار کنید.", + "error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کارهای بومی از ماستودون استفاده کنید.", "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", "follow_request.authorize": "اجازه دهید", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو", "keyboard_shortcuts.up": "برای بالا رفتن در فهرست", "lightbox.close": "بستن", + "lightbox.compress": "فشردهسازی جعبه نمایش تصویر", + "lightbox.expand": "گسترش جعبه نمایش تصویر", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", - "lightbox.view_context": "نمایش گفتگو", "lists.account.add": "افزودن به فهرست", "lists.account.remove": "برداشتن از فهرست", "lists.delete": "حذف فهرست", @@ -260,6 +266,10 @@ "lists.edit.submit": "تغییر عنوان", "lists.new.create": "افزودن فهرست", "lists.new.title_placeholder": "عنوان فهرست تازه", + "lists.replies_policy.followed": "هر کاربر پیگرفته", + "lists.replies_policy.list": "اعضای فهرست", + "lists.replies_policy.none": "هیچ کدام", + "lists.replies_policy.title": "نمایش پاسخها به:", "lists.search": "بین کسانی که پی میگیرید بگردید", "lists.subheading": "فهرستهای شما", "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "تغییر وضعیت نمایانی", "missing_indicator.label": "پیدا نشد", "missing_indicator.sublabel": "این منبع پیدا نشد", + "mute_modal.duration": "مدت زمان", "mute_modal.hide_notifications": "اعلانهای این کاربر پنهان شود؟", + "mute_modal.indefinite": "نامعلوم", "navigation_bar.apps": "اپهای موبایل", "navigation_bar.blocks": "کاربران مسدودشده", "navigation_bar.bookmarks": "نشانکها", @@ -275,7 +287,7 @@ "navigation_bar.compose": "نوشتن بوق تازه", "navigation_bar.direct": "پیامهای مستقیم", "navigation_bar.discover": "گشت و گذار", - "navigation_bar.domain_blocks": "دامنههای نهفته", + "navigation_bar.domain_blocks": "دامنههای بسته", "navigation_bar.edit_profile": "ویرایش نمایه", "navigation_bar.favourites": "پسندیدهها", "navigation_bar.filters": "واژگان خموش", @@ -298,6 +310,7 @@ "notification.own_poll": "نظرسنجی شما به پایان رسید", "notification.poll": "نظرسنجیای که در آن رأی دادید به پایان رسیده است", "notification.reblog": "{name} وضعیتتان را تقویت کرد", + "notification.status": "{name} چیزی فرستاد", "notifications.clear": "پاککردن اعلانها", "notifications.clear_confirmation": "مطمئنید میخواهید همهٔ اعلانهایتان را برای همیشه پاک کنید؟", "notifications.column_settings.alert": "اعلانهای میزکار", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "بازبوقها:", "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", + "notifications.column_settings.status": "بوقهای جدید:", "notifications.filter.all": "همه", "notifications.filter.boosts": "بازبوقها", "notifications.filter.favourites": "پسندها", "notifications.filter.follows": "پیگیریها", "notifications.filter.mentions": "نامبردنها", "notifications.filter.polls": "نتایج نظرسنجی", + "notifications.filter.statuses": "بهروز رسانیها از کسانی که پیگیرشانید", + "notifications.grant_permission": "اعطای مجوز.", "notifications.group": "{count} اعلان", + "notifications.mark_as_read": "نشانهگذاری همهٔ آگاهیها به عنوان خواندهشده", + "notifications.permission_denied": "آگاهیهای میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند", + "notifications.permission_denied_alert": "از آنجا که پیش از این اجازهٔ مرورگر رد شده است، آگاهیهای میزکار نمیتوانند به کار بیفتند", + "notifications.permission_required": "اعلانهای میزکار در دسترس نیستند زیرا نیازمند مجوزی هستند که اعطا نشده است.", + "notifications_permission_banner.enable": "به کار انداختن آگاهیهای میزکار", + "notifications_permission_banner.how_to_control": "اگر میخواهید حتی زمانی که ماستودون باز نیست اعلانها نمایش یابند، اعلانهای میزکار را فعال کنید. به محض فعال شدن از طریق دکمه {icon} بالا میتوانید به دقت کنترل کنید که چه نوع از تعاملها باعث صادر شدن اعلانها شوند.", + "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید", + "picture_in_picture.restore": "برگرداندن", "poll.closed": "پایانیافته", "poll.refresh": "بهروزرسانی", "poll.total_people": "{count, plural, one {# نفر} other {# نفر}}", @@ -389,7 +413,7 @@ "status.pinned": "بوق ثابت", "status.read_more": "بیشتر بخوانید", "status.reblog": "بازبوقیدن", - "status.reblog_private": "بازبوق به مخاطبان اولیه", + "status.reblog_private": "تقویت برای مخاطبان نخستین", "status.reblogged_by": "{name} بازبوقید", "status.reblogs.empty": "هنوز هیچ کسی این بوق را بازنبوقیده است. وقتی کسی چنین کاری کند، اینجا نمایش خواهد یافت.", "status.redraft": "پاککردن و بازنویسی", @@ -398,7 +422,7 @@ "status.replyAll": "پاسخ به رشته", "status.report": "گزارش @{name}", "status.sensitive_warning": "محتوای حساس", - "status.share": "همرسانی", + "status.share": "همرسانی", "status.show_less": "نمایش کمتر", "status.show_less_all": "نمایش کمتر همه", "status.show_more": "نمایش بیشتر", @@ -430,7 +454,7 @@ "units.short.million": "{count}میلیون", "units.short.thousand": "{count}هزار", "upload_area.title": "برای بارگذاری به اینجا بکشید", - "upload_button.label": "افزودن رسانه ({formats})", + "upload_button.label": "افزودن رسانه", "upload_error.limit": "از حد مجاز باگذاری پرونده فراتر رفتید.", "upload_error.poll": "بارگذاری پرونده در نظرسنجیها مجاز نیست.", "upload_form.audio_description": "برای ناشنوایان توصیفش کنید", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "تشخیص متن درون عکس", "upload_modal.edit_media": "ویرایش رسانه", "upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابهجا کردن آن تنظیم کنید.", + "upload_modal.preparing_ocr": "در حال آماده سازی OCR…", "upload_modal.preview_label": "پیشنمایش ({ratio})", "upload_progress.label": "در حال بارگذاری…", "video.close": "بستن ویدیو", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 51f95e08c..8916d4339 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", "account.cancel_follow_request": "Peruuta seurauspyyntö", "account.direct": "Viesti käyttäjälle @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa profiilia", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Suosittele profiilissasi", "account.follow": "Seuraa", "account.followers": "Seuraajaa", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ei ole 'toots' täällä!", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.", "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopioi stacktrace leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", "follow_request.authorize": "Valtuuta", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä", "keyboard_shortcuts.up": "siirry listassa ylöspäin", "lightbox.close": "Sulje", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "lightbox.view_context": "Näytä kontekstissa", "lists.account.add": "Lisää listaan", "lists.account.remove": "Poista listasta", "lists.delete": "Poista lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Vaihda otsikko", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listat", "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Säädä näkyvyyttä", "missing_indicator.label": "Ei löytynyt", "missing_indicator.sublabel": "Tätä resurssia ei löytynyt", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobiilisovellukset", "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", @@ -298,6 +310,7 @@ "notification.own_poll": "Kyselysi on päättynyt", "notification.poll": "Kysely, johon osallistuit, on päättynyt", "notification.reblog": "{name} buustasi tilaasi", + "notification.status": "{name} just posted", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.alert": "Työpöytäilmoitukset", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Buustit:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Kaikki", "notifications.filter.boosts": "Buustit", "notifications.filter.favourites": "Suosikit", "notifications.filter.follows": "Seuraa", "notifications.filter.mentions": "Maininnat", "notifications.filter.polls": "Kyselyn tulokset", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ilmoitusta", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Suljettu", "poll.refresh": "Päivitä", "poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "video.close": "Sulje video", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 5329923da..214f3aeea 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Parcourir davantage sur le profil original", "account.cancel_follow_request": "Annuler la demande de suivi", "account.direct": "Envoyer un message direct à @{name}", + "account.disable_notifications": "Arrêter de me notifier quand @{name} publie", "account.domain_blocked": "Domaine bloqué", "account.edit_profile": "Modifier le profil", + "account.enable_notifications": "Me notifier quand @{name} publie", "account.endorse": "Recommander sur le profil", "account.follow": "Suivre", "account.followers": "Abonné·e·s", @@ -97,7 +99,7 @@ "compose_form.publish": "Pouet", "compose_form.publish_loud": "{publish} !", "compose_form.sensitive.hide": "Marquer le média comme sensible", - "compose_form.sensitive.marked": "Média marqué comme sensible", + "compose_form.sensitive.marked": "{count, plural, one {Le média est marqué comme sensible} other {Les médias sont marqués comme sensibles}}", "compose_form.sensitive.unmarked": "Le média n’est pas marqué comme sensible", "compose_form.spoiler.marked": "Le texte est caché derrière un avertissement", "compose_form.spoiler.unmarked": "Le texte n’est pas caché", @@ -147,13 +149,14 @@ "emoji_button.search_results": "Résultats de la recherche", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", + "empty_column.account_suspended": "Compte suspendu", "empty_column.account_timeline": "Aucun pouet ici !", "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", "empty_column.bookmarked_statuses": "Vous n'avez pas de pouets enregistrés comme marque-pages pour le moment. Lorsque vous en ajouterez un, il apparaîtra ici.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", - "empty_column.domain_blocks": "Il n’y a aucun domaine caché pour le moment.", + "empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.", "empty_column.favourited_statuses": "Vous n’avez aucun pouet favoris pour le moment. Lorsque vous en mettrez un en favori, il apparaîtra ici.", "empty_column.favourites": "Personne n’a encore mis ce pouet en favori. Lorsque quelqu’un le fera, il apparaîtra ici.", "empty_column.follow_requests": "Vous n’avez pas encore de demande de suivi. Lorsque vous en recevrez une, elle apparaîtra ici.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", + "error.unexpected_crash.explanation_addons": "Cette page n’a pas pu être affichée correctement. Cette erreur est probablement causée par une extension de navigateur ou des outils de traduction automatique.", "error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", + "error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", "follow_request.authorize": "Accepter", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "quitter la zone de rédaction/recherche", "keyboard_shortcuts.up": "remonter dans la liste", "lightbox.close": "Fermer", + "lightbox.compress": "Compresser la fenêtre de visualisation des images", + "lightbox.expand": "Agrandir la fenêtre de visualisation des images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", - "lightbox.view_context": "Voir le contexte", "lists.account.add": "Ajouter à la liste", "lists.account.remove": "Supprimer de la liste", "lists.delete": "Supprimer la liste", @@ -260,6 +266,10 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", + "lists.replies_policy.followed": "N’importe quel·le utilisateur·rice suivi·e", + "lists.replies_policy.list": "Membres de la liste", + "lists.replies_policy.none": "Personne", + "lists.replies_policy.title": "Afficher les réponses à :", "lists.search": "Rechercher parmi les gens que vous suivez", "lists.subheading": "Vos listes", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Intervertir la visibilité", "missing_indicator.label": "Non trouvé", "missing_indicator.sublabel": "Ressource introuvable", + "mute_modal.duration": "Durée", "mute_modal.hide_notifications": "Masquer les notifications de cette personne ?", + "mute_modal.indefinite": "Indéfinie", "navigation_bar.apps": "Applications mobiles", "navigation_bar.blocks": "Comptes bloqués", "navigation_bar.bookmarks": "Marque-pages", @@ -298,6 +310,7 @@ "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre statut", + "notification.status": "{name} vient de publier", "notifications.clear": "Effacer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?", "notifications.column_settings.alert": "Notifications du navigateur", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.sound": "Émettre un son", + "notifications.column_settings.status": "Nouveaux pouets :", "notifications.filter.all": "Tout", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favoris", "notifications.filter.follows": "Abonnés", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Résultats des sondages", + "notifications.filter.statuses": "Mises à jour des personnes que vous suivez", + "notifications.grant_permission": "Accorder l’autorisation.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Marquer toutes les notifications comme lues", + "notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.", + "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant", + "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.", + "notifications_permission_banner.enable": "Activer les notifications de bureau", + "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", + "notifications_permission_banner.title": "Toujours au courant", + "picture_in_picture.restore": "Remettre en place", "poll.closed": "Fermé", "poll.refresh": "Actualiser", "poll.total_people": "{count, plural, one {# personne} other {# personnes}}", @@ -414,8 +438,8 @@ "tabs_bar.local_timeline": "Fil public local", "tabs_bar.notifications": "Notifications", "tabs_bar.search": "Chercher", - "time_remaining.days": "{number, plural, one {# day} other {# days}} restants", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} restantes", + "time_remaining.days": "{number, plural, one {# jour} other {# jours}} restant·s", + "time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes", "time_remaining.moments": "Encore quelques instants", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes", @@ -426,11 +450,11 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} personne en parle} other {{counter} personnes en parlent}}", "trends.trending_now": "Tendance en ce moment", "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}Md", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Glissez et déposez pour envoyer", - "upload_button.label": "Joindre un média ({formats})", + "upload_button.label": "Ajouter des images, une vidéo ou un fichier audio", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Détecter le texte de l’image", "upload_modal.edit_media": "Modifier le média", "upload_modal.hint": "Cliquez ou faites glisser le cercle sur l’aperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.", + "upload_modal.preparing_ocr": "Préparation de l’OCR…", "upload_modal.preview_label": "Aperçu ({ratio})", "upload_progress.label": "Envoi en cours…", "video.close": "Fermer la vidéo", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 2b1546a57..928742dd7 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 44d8b4662..854e31554 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "A túa nota para @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Engadir ou eliminar das listaxes", "account.badges.bot": "Bot", "account.badges.group": "Grupo", @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "Busca máis no perfil orixinal", "account.cancel_follow_request": "Desbotar solicitude de seguimento", "account.direct": "Mensaxe directa @{name}", + "account.disable_notifications": "Deixar de notificarme cando @{name} publica", "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Noficarme cando @{name} publique", "account.endorse": "Amosar no perfil", "account.follow": "Seguir", "account.followers": "Seguidoras", "account.followers.empty": "Aínda ninguén segue esta usuaria.", "account.followers_counter": "{count, plural, one {{counter} Seguidora} other {{counter} Seguidoras}}", - "account.following_counter": "{count, plural, other {{counter} Seguindo}}", + "account.following_counter": "{count, plural, one {{counter} Seguindo} other {{counter} Seguindo}}", "account.follows.empty": "Esta usuaria aínda non segue a ninguén.", "account.follows_you": "Séguete", "account.hide_reblogs": "Agochar repeticións de @{name}", @@ -43,10 +45,10 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Deixar de silenciar a @{name}", "account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}", - "account_note.placeholder": "Sen comentarios", + "account_note.placeholder": "Preme para engadir nota", "alert.rate_limited.message": "Téntao novamente após {retry_time, time, medium}.", "alert.rate_limited.title": "Límite de intentos", - "alert.unexpected.message": "Ocorreu un erro non agardado.", + "alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.title": "Vaites!", "announcement.announcement": "Anuncio", "autosuggest_hashtag.per_week": "{count} por semana", @@ -71,7 +73,7 @@ "column.notifications": "Notificacións", "column.pins": "Toots fixados", "column.public": "Cronoloxía federada", - "column_back_button.label": "Voltar", + "column_back_button.label": "Volver", "column_header.hide_settings": "Agochar axustes", "column_header.moveLeft_settings": "Mover columna cara a esquerda", "column_header.moveRight_settings": "Mover columna cara a dereita", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Mudar a enquisa para permitir unha soa escolla", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marcar coma contido multimedia sensíbel", - "compose_form.sensitive.marked": "Contido multimedia marcado coma sensíbel", - "compose_form.sensitive.unmarked": "Contido multimedia non marcado coma sensíbel", + "compose_form.sensitive.hide": "{count, plural, one {Marca multimedia como sensible} other {Marca multimedia como sensibles}}", + "compose_form.sensitive.marked": "{count, plural, one {Multimedia marcado como sensible} other {Multimedia marcados como sensibles}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "O texto está agochado tras un aviso", "compose_form.spoiler.unmarked": "O texto non está agochado", "compose_form.spoiler_placeholder": "Escribe o teu aviso aquí", @@ -107,7 +109,7 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "Tes a certeza de querer bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "Tes a certeza de querer eliminar este estado?", + "confirmations.delete.message": "Tes a certeza de querer eliminar este toot?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "Tes a certeza de querer eliminar de xeito permanente esta listaxe?", "confirmations.domain_block.confirm": "Agochar dominio enteiro", @@ -118,7 +120,7 @@ "confirmations.mute.explanation": "Isto agochará as publicacións delas ou nas que as mencionen, mais permitirá que vexan as túas publicacións e sexan seguidoras túas.", "confirmations.mute.message": "Tes a certeza de querer acalar a {name}?", "confirmations.redraft.confirm": "Eliminar e reescribir", - "confirmations.redraft.message": "Tes a certeza de querer eliminar este estado e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.", + "confirmations.redraft.message": "Tes a certeza de querer eliminar este toot e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder agora sobrescribirá a mensaxe que estás a compor. Tes a certeza de que queres continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", @@ -131,7 +133,7 @@ "directory.local": "Só de {domain}", "directory.new_arrivals": "Recén chegadas", "directory.recently_active": "Activas recentemente", - "embed.instructions": "Engade este estado ó teu sitio web copiando o seguinte código.", + "embed.instructions": "Engade este toot ó teu sitio web copiando o seguinte código.", "embed.preview": "Así será mostrado:", "emoji_button.activity": "Actividade", "emoji_button.custom": "Personalizado", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Resultados da procura", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", + "empty_column.account_suspended": "Conta suspendida", "empty_column.account_timeline": "Non hai toots aquí!", "empty_column.account_unavailable": "Perfil non dispoñible", "empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.", @@ -160,13 +163,15 @@ "empty_column.hashtag": "Aínda non hai nada con este cancelo.", "empty_column.home": "A túa cronoloxía inicial está baleira! Visita {public} ou emprega a procura para atopar outras usuarias.", "empty_column.home.public_timeline": "a cronoloxía pública", - "empty_column.list": "Aínda non hai nada nesta listaxe. Cando os usuarios incluídas na listaxe publiquen mensaxes, amosaranse aquí.", + "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.", "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.", "empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.", "empty_column.notifications": "Aínda non tes notificacións. Interactúa con outras para comezar unha conversa.", "empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo", "error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.", + "error.unexpected_crash.explanation_addons": "Non se puido mostrar correctamente a páxina. Habitualmente este erro está causado por algún engadido do navegador ou ferramentas de tradución automática.", "error.unexpected_crash.next_steps": "Tenta actualizar a páxina. Se esto non axuda podes tamén empregar Mastodon noutro navegador ou aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", "follow_request.authorize": "Autorizar", @@ -215,15 +220,15 @@ "introduction.welcome.action": "Imos!", "introduction.welcome.headline": "Primeiros pasos", "introduction.welcome.text": "Benvida ó fediverso! Nun intre poderás difundir mensaxes e falar coas túas amizades nun grande número de servidores. Mais este servidor, {domain}, é especial—hospeda o teu perfil, por iso lémbra o seu nome.", - "keyboard_shortcuts.back": "para voltar atrás", + "keyboard_shortcuts.back": "para volver atrás", "keyboard_shortcuts.blocked": "abrir lista de usuarias bloqueadas", "keyboard_shortcuts.boost": "promover", - "keyboard_shortcuts.column": "para destacar un estado nunha das columnas", + "keyboard_shortcuts.column": "para destacar un toot nunha das columnas", "keyboard_shortcuts.compose": "para destacar a área de escritura", "keyboard_shortcuts.description": "Descrición", "keyboard_shortcuts.direct": "para abrir a columna de mensaxes directas", "keyboard_shortcuts.down": "para mover cara abaixo na listaxe", - "keyboard_shortcuts.enter": "para abrir estado", + "keyboard_shortcuts.enter": "para abrir toot", "keyboard_shortcuts.favourite": "para engadir a favoritos", "keyboard_shortcuts.favourites": "para abrir a listaxe dos favoritos", "keyboard_shortcuts.federated": "para abrir a cronoloxía federada", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "para mover cara arriba na listaxe", "lightbox.close": "Fechar", + "lightbox.compress": "Comprimir a caixa de vista da imaxe", + "lightbox.expand": "Expandir a caixa de vista da imaxe", "lightbox.next": "Seguinte", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ollar contexto", "lists.account.add": "Engadir á listaxe", "lists.account.remove": "Eliminar da listaxe", "lists.delete": "Eliminar listaxe", @@ -260,14 +266,20 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", + "lists.replies_policy.followed": "Toda usuaria seguida", + "lists.replies_policy.list": "Membros da lista", + "lists.replies_policy.none": "Ninguén", + "lists.replies_policy.title": "Mostrar respostas a:", "lists.search": "Procurar entre as persoas que segues", "lists.subheading": "As túas listaxes", "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}", "loading_indicator.label": "Estase a cargar...", - "media_gallery.toggle_visible": "Trocar visibilidade", + "media_gallery.toggle_visible": "Agochar {number, plural, one {imaxe} other {imaxes}}", "missing_indicator.label": "Non atopado", "missing_indicator.sublabel": "Este recurso non foi atopado", + "mute_modal.duration": "Duración", "mute_modal.hide_notifications": "Agochar notificacións desta usuaria?", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicacións móbiles", "navigation_bar.blocks": "Usuarias bloqueadas", "navigation_bar.bookmarks": "Marcadores", @@ -291,13 +303,14 @@ "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Cronoloxía federada", "navigation_bar.security": "Seguranza", - "notification.favourite": "{name} marcou o teu estado coma favorito", + "notification.favourite": "{name} marcou o teu toot coma favorito", "notification.follow": "{name} comezou a seguirte", "notification.follow_request": "{name} solicitou seguirte", "notification.mention": "{name} mencionoute", "notification.own_poll": "A túa enquisa rematou", "notification.poll": "Unha enquisa na que votaches rematou", - "notification.reblog": "{name} compartiu o teu estado", + "notification.reblog": "{name} compartiu o teu toot", + "notification.status": "{name} publicou", "notifications.clear": "Limpar notificacións", "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?", "notifications.column_settings.alert": "Notificacións de escritorio", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir son", + "notifications.column_settings.status": "Novos toots:", "notifications.filter.all": "Todo", "notifications.filter.boosts": "Compartidos", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguimentos", "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", + "notifications.filter.statuses": "Actualizacións de xente á que segues", + "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificacións", + "notifications.mark_as_read": "Marcar todas as notificacións como lidas", + "notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso", + "notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente", + "notifications.permission_required": "As notificacións de escritorio non están dispoñibles porque non se concedeu o permiso necesario.", + "notifications_permission_banner.enable": "Activar notificacións de escritorio", + "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.", + "notifications_permission_banner.title": "Non perder nada", + "picture_in_picture.restore": "Devolver", "poll.closed": "Pechado", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural,one {# persoa} other {# persoas}}", @@ -338,7 +362,7 @@ "privacy.unlisted.long": "Non publicar nas cronoloxías públicas", "privacy.unlisted.short": "Non listado", "refresh": "Actualizar", - "regeneration_indicator.label": "Cargando…", + "regeneration_indicator.label": "Estase a cargar…", "regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", @@ -355,9 +379,9 @@ "report.target": "Denunciar a {target}", "search.placeholder": "Procurar", "search_popout.search_format": "Formato de procura avanzada", - "search_popout.tips.full_text": "Texto simple devolve estados que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.", + "search_popout.tips.full_text": "Texto simple devolve toots que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.", "search_popout.tips.hashtag": "cancelo", - "search_popout.tips.status": "estado", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Texto simple devolve coincidencias con nomes públicos, nomes de usuaria e cancelos", "search_popout.tips.user": "usuaria", "search_results.accounts": "Persoas", @@ -366,12 +390,12 @@ "search_results.statuses_fts_disabled": "Procurar toots polo seu contido non está activado neste servidor do Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interface de moderación para @{name}", - "status.admin_status": "Abrir este estado na interface de moderación", + "status.admin_status": "Abrir este toot na interface de moderación", "status.block": "Bloquear a @{name}", "status.bookmark": "Marcar", "status.cancel_reblog_private": "Desfacer compartido", "status.cannot_reblog": "Esta publicación non pode ser promovida", - "status.copy": "Copiar ligazón ó estado", + "status.copy": "Copiar ligazón ó toot", "status.delete": "Eliminar", "status.detailed_status": "Vista detallada da conversa", "status.direct": "Mensaxe directa a @{name}", @@ -384,12 +408,12 @@ "status.more": "Máis", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversa", - "status.open": "Expandir este estado", + "status.open": "Expandir este toot", "status.pin": "Fixar no perfil", "status.pinned": "Toot fixado", "status.read_more": "Ler máis", "status.reblog": "Promover", - "status.reblog_private": "Compartir á audiencia orixinal", + "status.reblog_private": "Compartir coa audiencia orixinal", "status.reblogged_by": "{name} promoveu", "status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.", "status.redraft": "Eliminar e reescribir", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Arrastra e solta para subir", - "upload_button.label": "Engadir multimedia ({formats})", + "upload_button.label": "Engadir imaxes, un vídeo ou ficheiro de audio", "upload_error.limit": "Límite máximo do ficheiro a subir excedido.", "upload_error.poll": "Non se poden subir ficheiros nas enquisas.", "upload_form.audio_description": "Describir para persoas con problemas auditivos", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detectar texto na imaxe", "upload_modal.edit_media": "Editar multimedia", "upload_modal.hint": "Preme ou arrastra o círculo na vista previa para escoller o punto focal que sempre estará á vista en todas as miniaturas.", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Estase a subir...", "video.close": "Pechar vídeo", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index bec0c7636..123b2e855 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "המשך לגלוש בפרופיל המקורי", "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "הדומיין חסוי", "account.edit_profile": "עריכת פרופיל", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "הצג בפרופיל", "account.follow": "מעקב", "account.followers": "עוקבים", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "ללחוש", "compose_form.publish_loud": "לחצרץ!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "אזהרת תוכן", @@ -147,6 +149,7 @@ "emoji_button.search_results": "תוצאות חיפוש", "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.", "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "קבלה", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "lightbox.close": "סגירה", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "הלאה", "lightbox.previous": "הקודם", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "נראה\\בלתי נראה", "missing_indicator.label": "לא נמצא", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "להסתיר הודעות מחשבון זה?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "חסימות", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "חצרוצך הודהד על ידי {name}", + "notification.status": "{name} just posted", "notifications.clear": "הסרת התראות", "notifications.clear_confirmation": "להסיר את כל ההתראות? בטוח?", "notifications.column_settings.alert": "התראות לשולחן העבודה", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "הדהודים:", "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "עולה...", "video.close": "סגירת וידאו", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index cec0c689f..7e0fe4e7a 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "टिप्पणियाँ", "account.add_or_remove_from_list": "सूची में जोड़ें या हटाए", "account.badges.bot": "बॉट", - "account.badges.group": "Group", + "account.badges.group": "समूह", "account.block": "@{name} को ब्लॉक करें", "account.block_domain": "{domain} के सारी चीज़े छुपाएं", "account.blocked": "ब्लॉक", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "मूल प्रोफ़ाइल पर अधिक ब्राउज़ करें", "account.cancel_follow_request": "फ़ॉलो रिक्वेस्ट रद्द करें", "account.direct": "प्रत्यक्ष संदेश @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "छिपा हुआ डोमेन", "account.edit_profile": "प्रोफ़ाइल संपादित करें", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "प्रोफ़ाइल पर दिखाए", "account.follow": "फॉलो करें", "account.followers": "फॉलोवर", "account.followers.empty": "कोई भी इस यूज़र् को फ़ॉलो नहीं करता है", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} अनुगामी} other {{counter} समर्थक}}", + "account.following_counter": "{count, plural, one {{counter} निम्नलिखित} other {{counter} निम्नलिखित}}", "account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।", "account.follows_you": "आपको फॉलो करता है", "account.hide_reblogs": "@{name} के बूस्ट छुपाएं", @@ -36,19 +38,19 @@ "account.requested": "मंजूरी का इंतजार। फॉलो रिक्वेस्ट को रद्द करने के लिए क्लिक करें", "account.share": "@{name} की प्रोफाइल शेयर करे", "account.show_reblogs": "@{name} के बूस्ट दिखाए", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} भोंपू} other {{counter} भोंपू}}", "account.unblock": "@{name} को अनब्लॉक करें", "account.unblock_domain": "{domain} दिखाए", "account.unendorse": "प्रोफ़ाइल पर न दिखाए", "account.unfollow": "अनफॉलो करें", "account.unmute": "अनम्यूट @{name}", "account.unmute_notifications": "@{name} के नोटिफिकेशन अनम्यूट करे", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "नोट्स जोड़ने के लिए क्लिक करें", "alert.rate_limited.message": "कृप्या {retry_time, time, medium} के बाद दुबारा कोशिश करें", "alert.rate_limited.title": "सीमित दर", "alert.unexpected.message": "एक अप्रत्याशित त्रुटि हुई है!", "alert.unexpected.title": "उफ़!", - "announcement.announcement": "Announcement", + "announcement.announcement": "घोषणा", "autosuggest_hashtag.per_week": "{count} हर सप्ताह", "boost_modal.combo": "अगली बार स्किप करने के लिए आप {combo} दबा सकते है", "bundle_column_error.body": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", @@ -58,7 +60,7 @@ "bundle_modal_error.message": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", "bundle_modal_error.retry": "दुबारा कोशिश करें", "column.blocks": "ब्लॉक्ड यूज़र्स", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "पुस्तकचिह्न:", "column.community": "लोकल टाइम्लाइन", "column.direct": "सीधा संदेश", "column.directory": "प्रोफाइल्स खोजें", @@ -79,9 +81,9 @@ "column_header.show_settings": "सेटिंग्स दिखाएँ", "column_header.unpin": "अनपिन", "column_subheading.settings": "सेटिंग्स", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "स्थानीय ही", "community.column_settings.media_only": "सिर्फ़ मीडिया", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "केवल सुदूर", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "और जानें", "compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।", @@ -92,8 +94,8 @@ "compose_form.poll.duration": "चुनाव की अवधि", "compose_form.poll.option_placeholder": "कुल विकल्प {number}", "compose_form.poll.remove_option": "इस विकल्प को हटाएँ", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "कई विकल्पों की अनुमति देने के लिए पोल बदलें", + "compose_form.poll.switch_to_single": "एक ही विकल्प के लिए अनुमति देने के लिए पोल बदलें", "compose_form.publish": "टूट्", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "मीडिया को संवेदनशील के रूप में चिह्नित करें", @@ -147,10 +149,11 @@ "emoji_button.search_results": "खोज परिणाम", "emoji_button.symbols": "प्रतीक", "emoji_button.travel": "यात्रा एवं स्थान", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "सन्नाटा! यहां कोई टूट्स नहीं!", "empty_column.account_unavailable": "प्रोफाइल उपलब्ध नहीं", "empty_column.blocks": "आप अभी तक किसी भी यूजर के द्वारा ब्लॉक्ड नहीं हो।", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "आपके पास अभी तक कोई बुकमार्क नहीं है। जब आप एक बुकमार्क करते हैं, तो यह यहां दिखाई देगा।", "empty_column.community": "लोकल टाइम्लाइन खाली है, कुछ देखने के लिये सार्वजनिक रूप से कुछ लिखें!", "empty_column.direct": "आपके पास कोई सीधा सन्देश नहीं है, जब आप कोई भेजेंगे प्राप्त करेंगे तो यहाँ दिखेगा।", "empty_column.domain_blocks": "अभी तक कोई छुपा हुआ डोमेन नहीं है।", @@ -161,17 +164,19 @@ "empty_column.home": "आपकी मुख्य कालक्रम अभी खली है. अन्य उपयोगकर्ताओं से मिलने के लिए और अपनी गतिविधियां शुरू करने के लिए या तो {public} पर जाएं या खोज का उपयोग करें।", "empty_column.home.public_timeline": "सार्वजनिक कालक्रम", "empty_column.list": "यह सूची अभी खाली है. जब इसके सदस्य कोई अभिव्यक्ति देंगे, तो वो यहां दिखाई देंगी.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "empty_column.lists": "आपके पास अभी तक कोई सूची नहीं है। जब आप एक बनाते हैं, तो यह यहां दिखाई देगा।", + "empty_column.mutes": "आपने अभी तक किसी भी उपयोगकर्ता को म्यूट नहीं किया है।", + "empty_column.notifications": "आपके पास अभी तक कोई सूचना नहीं है। बातचीत शुरू करने के लिए दूसरों के साथ बातचीत करें।", + "empty_column.public": "यहां कुछ नहीं है! सार्वजनिक रूप से कुछ लिखें, या इसे भरने के लिए अन्य सर्वर से उपयोगकर्ताओं का मैन्युअल रूप से अनुसरण करें", + "error.unexpected_crash.explanation": "हमारे कोड या ब्राउज़र संगतता समस्या में बग के कारण, यह पृष्ठ सही ढंग से प्रदर्शित नहीं हो सका।", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", "follow_request.authorize": "अधिकार दें", "follow_request.reject": "अस्वीकार करें", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "follow_requests.unlocked_explanation": "हालाँकि आपका खाता लॉक नहीं है, फिर भी {domain} डोमेन स्टाफ ने सोचा कि आप इन खातों के मैन्युअल अनुरोधों की समीक्षा करना चाहते हैं।", "generic.saved": "Saved", "getting_started.developers": "डेवॅलपर्स", "getting_started.directory": "प्रोफ़ाइल निर्देशिका", @@ -193,31 +198,31 @@ "home.column_settings.basic": "बुनियादी", "home.column_settings.show_reblogs": "बूस्ट दिखाए", "home.column_settings.show_replies": "जवाबों को दिखाए", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", + "home.hide_announcements": "घोषणाएँ छिपाएँ", + "home.show_announcements": "घोषणाएं दिखाएं", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "introduction.federation.action": "अगला", "introduction.federation.federated.headline": "फ़ेडरेटेड", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.federated.text": "महासंघ के अन्य सर्वरों से सार्वजनिक पद संघटित समय-सीमा में दिखाई देंगे।", "introduction.federation.home.headline": "होम", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.home.text": "आपके द्वारा अनुसरण किए जाने वाले लोगों के पोस्ट आपके होम फीड में दिखाई देंगे। आप किसी भी सर्वर पर किसी को भी फॉलो कर सकते हैं!", "introduction.federation.local.headline": "लोकल", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", "introduction.interactions.action": "Finish toot-orial!", "introduction.interactions.favourite.headline": "पसंदीदा", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.favourite.text": "आप बाद में इसके लिए एक टोट को बचा सकते हैं, और लेखक को यह बता दें कि आपको यह पसंद आया, इसे फेवर करके।", "introduction.interactions.reblog.headline": "बूस्ट", "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", "introduction.interactions.reply.headline": "जवाब", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", "introduction.welcome.action": "आइए शुरू करते हैं!", "introduction.welcome.headline": "पहले कदम", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "introduction.welcome.text": "फेडवर्स में आपका स्वागत है! कुछ ही क्षणों में, आप संदेशों को प्रसारित करने और अपने दोस्तों से विस्तृत सर्वर पर बात करने में सक्षम होंगे। लेकिन यह सर्वर, {domain}, विशेष है - यह आपकी प्रोफ़ाइल को होस्ट करता है, इसलिए इसका नाम याद रखें।", + "keyboard_shortcuts.back": "वापस जाने के लिए", + "keyboard_shortcuts.blocked": "अवरुद्ध उपयोगकर्ताओं की सूची खोलने के लिए", + "keyboard_shortcuts.boost": "बढ़ावा देने के लिए", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "कंपोज़ टेक्स्ट-एरिया पर ध्यान केंद्रित करने के लिए", "keyboard_shortcuts.description": "विवरण", @@ -249,42 +254,49 @@ "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", + "lightbox.close": "बंद करें", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "अगला", + "lightbox.previous": "पिछला", "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", + "lists.account.remove": "सूची से निकालें", + "lists.delete": "सूची हटाएँ", + "lists.edit": "सूची संपादित करें", "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", + "lists.new.create": "सूची जोड़ें", + "lists.new.title_placeholder": "नये सूची का शीर्षक", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lists.subheading": "आपकी सूचियाँ", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "लोड हो रहा है...", "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "नहीं मिला", "missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "मोबाइल एप्लिकेशंस", "navigation_bar.blocks": "ब्लॉक्ड यूज़र्स", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "पुस्तकचिह्न:", "navigation_bar.community_timeline": "लोकल टाइम्लाइन", "navigation_bar.compose": "नया टूट् लिखें", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "navigation_bar.direct": "सीधा संदेश", + "navigation_bar.discover": "खोजें", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.edit_profile": "प्रोफ़ाइल संपादित करें", "navigation_bar.favourites": "Favourites", "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follow_requests": "अनुसरण करने के अनुरोध", "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", + "navigation_bar.info": "इस सर्वर के बारे में", "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", + "navigation_bar.lists": "सूचियाँ", + "navigation_bar.logout": "बाहर जाए", "navigation_bar.mutes": "Muted users", "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "बूस्ट:", "notifications.column_settings.show": "कॉलम में दिखाएँ", "notifications.column_settings.sound": "ध्वनि चलाएँ", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "सभी", "notifications.filter.boosts": "बूस्ट", "notifications.filter.favourites": "पसंदीदा", "notifications.filter.follows": "फॉलो", "notifications.filter.mentions": "उल्लेख", "notifications.filter.polls": "चुनाव परिणाम", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} सूचनाएँ", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "बंद कर दिया", "poll.refresh": "रीफ्रेश करें", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "मीडिया में संशोधन करें", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "अपलोडिंग...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index f20a384b9..f1b78eda4 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -1,366 +1,390 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.account_note_header": "Bilješka", + "account.add_or_remove_from_list": "Dodaj ili ukloni s liste", "account.badges.bot": "Bot", - "account.badges.group": "Group", + "account.badges.group": "Grupa", "account.block": "Blokiraj @{name}", - "account.block_domain": "Sakrij sve sa {domain}", - "account.blocked": "Blocked", - "account.browse_more_on_origin_server": "Browse more on the original profile", - "account.cancel_follow_request": "Cancel follow request", - "account.direct": "Direct Message @{name}", - "account.domain_blocked": "Domain hidden", + "account.block_domain": "Blokiraj domenu {domain}", + "account.blocked": "Blokirano", + "account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu", + "account.cancel_follow_request": "Otkaži zahtjev za praćenje", + "account.direct": "Pošalji poruku @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domena je blokirana", "account.edit_profile": "Uredi profil", - "account.endorse": "Feature on profile", - "account.follow": "Slijedi", - "account.followers": "Sljedbenici", - "account.followers.empty": "No one follows this user yet.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "te slijedi", - "account.hide_reblogs": "Hide boosts from @{name}", - "account.last_status": "Last active", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Istakni na profilu", + "account.follow": "Prati", + "account.followers": "Pratitelji", + "account.followers.empty": "Nitko još ne prati korisnika/cu.", + "account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}", + "account.following_counter": "{count, plural, one {{counter} praćeni} few{{counter} praćena} other {{counter} praćenih}}", + "account.follows.empty": "Korisnik/ca još ne prati nikoga.", + "account.follows_you": "Prati te", + "account.hide_reblogs": "Sakrij boostove od @{name}", + "account.last_status": "Posljednja aktivnost", + "account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}", + "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.", + "account.media": "Medijski sadržaj", "account.mention": "Spomeni @{name}", - "account.moved_to": "{name} has moved to:", + "account.moved_to": "Račun {name} je premješten na:", "account.mute": "Utišaj @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.never_active": "Never", - "account.posts": "Postovi", - "account.posts_with_replies": "Toots with replies", + "account.mute_notifications": "Utišaj obavijesti od @{name}", + "account.muted": "Utišano", + "account.never_active": "Nikad", + "account.posts": "Tootovi", + "account.posts_with_replies": "Tootovi i odgovori", "account.report": "Prijavi @{name}", - "account.requested": "Čeka pristanak", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.requested": "Čekanje na potvrdu. Kliknite za otkazivanje zahtjeva za praćenje", + "account.share": "Podijeli profil @{name}", + "account.show_reblogs": "Prikaži boostove od @{name}", + "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toota}}", "account.unblock": "Deblokiraj @{name}", - "account.unblock_domain": "Poništi sakrivanje {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Prestani slijediti", + "account.unblock_domain": "Deblokiraj domenu {domain}", + "account.unendorse": "Ne ističi na profilu", + "account.unfollow": "Prestani pratiti", "account.unmute": "Poništi utišavanje @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "announcement.announcement": "Announcement", - "autosuggest_hashtag.per_week": "{count} per week", - "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put", - "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", + "account.unmute_notifications": "Ne utišavaj obavijesti od @{name}", + "account_note.placeholder": "Kliknite za dodavanje bilješke", + "alert.rate_limited.message": "Molimo pokušajte nakon {retry_time, time, medium}.", + "alert.rate_limited.title": "Ograničenje učestalosti", + "alert.unexpected.message": "Dogodila se neočekivana greška.", + "alert.unexpected.title": "Ups!", + "announcement.announcement": "Najava", + "autosuggest_hashtag.per_week": "{count} tjedno", + "boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put", + "bundle_column_error.body": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", + "bundle_column_error.retry": "Pokušajte ponovno", + "bundle_column_error.title": "Greška mreže", + "bundle_modal_error.close": "Zatvori", + "bundle_modal_error.message": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", + "bundle_modal_error.retry": "Pokušajte ponovno", "column.blocks": "Blokirani korisnici", - "column.bookmarks": "Bookmarks", - "column.community": "Lokalni timeline", - "column.direct": "Direct messages", - "column.directory": "Browse profiles", - "column.domain_blocks": "Hidden domains", + "column.bookmarks": "Knjižne oznake", + "column.community": "Lokalna vremenska crta", + "column.direct": "Izravne poruke", + "column.directory": "Pregledavanje profila", + "column.domain_blocks": "Blokirane domene", "column.favourites": "Favoriti", - "column.follow_requests": "Zahtjevi za slijeđenje", - "column.home": "Dom", - "column.lists": "Lists", + "column.follow_requests": "Zahtjevi za praćenje", + "column.home": "Početna", + "column.lists": "Liste", "column.mutes": "Utišani korisnici", - "column.notifications": "Notifikacije", - "column.pins": "Pinned toot", - "column.public": "Federalni timeline", + "column.notifications": "Obavijesti", + "column.pins": "Prikvačeni tootovi", + "column.public": "Federalna vremenska crta", "column_back_button.label": "Natrag", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", + "column_header.hide_settings": "Sakrij postavke", + "column_header.moveLeft_settings": "Pomakni stupac ulijevo", + "column_header.moveRight_settings": "Pomakni stupac udesno", + "column_header.pin": "Prikvači", + "column_header.show_settings": "Prikaži postavke", + "column_header.unpin": "Otkvači", "column_subheading.settings": "Postavke", - "community.column_settings.local_only": "Local only", - "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Remote only", - "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Tvoj račun nije {locked}. Svatko te može slijediti kako bi vidio postove namijenjene samo tvojim sljedbenicima.", + "community.column_settings.local_only": "Samo lokalno", + "community.column_settings.media_only": "Samo medijski sadržaj", + "community.column_settings.remote_only": "Samo udaljeno", + "compose_form.direct_message_warning": "Ovaj toot bit će poslan samo spomenutim korisnicima.", + "compose_form.direct_message_warning_learn_more": "Saznajte više", + "compose_form.hashtag_warning": "Ovaj toot neće biti prikazan ni pod jednim hashtagom jer je postavljen kao neprikazan. Samo javni tootovi mogu biti pretraživani pomoći hashtagova.", + "compose_form.lock_disclaimer": "Vaš račun nije {locked}. Svatko Vas može pratiti kako bi vidjeli objave namijenjene Vašim pratiteljima.", "compose_form.lock_disclaimer.lock": "zaključan", "compose_form.placeholder": "Što ti je na umu?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.poll.add_option": "Dodaj opciju", + "compose_form.poll.duration": "Trajanje ankete", + "compose_form.poll.option_placeholder": "Opcija {number}", + "compose_form.poll.remove_option": "Ukloni ovu opciju", + "compose_form.poll.switch_to_multiple": "Omogući višestruki odabir opcija ankete", + "compose_form.poll.switch_to_single": "Omogući odabir samo jedne opcije ankete", + "compose_form.publish": "Tootni", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Upozorenje o sadržaju", + "compose_form.sensitive.hide": "Označi medijski sadržaj kao osjetljiv", + "compose_form.sensitive.marked": "Medijski sadržaj označen je kao osjetljiv", + "compose_form.sensitive.unmarked": "Medijski sadržaj nije označen kao osjetljiv", + "compose_form.spoiler.marked": "Tekst je skriven iza upozorenja", + "compose_form.spoiler.unmarked": "Tekst nije skriven", + "compose_form.spoiler_placeholder": "Ovdje upišite upozorenje", "confirmation_modal.cancel": "Otkaži", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blokiraj i prijavi", "confirmations.block.confirm": "Blokiraj", - "confirmations.block.message": "Želiš li sigurno blokirati {name}?", + "confirmations.block.message": "Sigurno želite blokirati {name}?", "confirmations.delete.confirm": "Obriši", - "confirmations.delete.message": "Želiš li stvarno obrisati ovaj status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Sakrij cijelu domenu", - "confirmations.domain_block.message": "Jesi li zaista, zaista siguran da želiš potpuno blokirati {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.delete.message": "Stvarno želite obrisati ovaj toot?", + "confirmations.delete_list.confirm": "Obriši", + "confirmations.delete_list.message": "Jeste li sigurni da želite trajno obrisati ovu listu?", + "confirmations.domain_block.confirm": "Blokiraj cijelu domenu", + "confirmations.domain_block.message": "Jeste li zaista, zaista sigurni da želite blokirati cijelu domenu {domain}? U većini slučajeva dovoljno je i preferirano nekoliko ciljanih blokiranja ili utišavanja. Nećete vidjeti sadržaj s te domene ni u kojim javnim vremenskim crtama ili Vašim obavijestima. Vaši pratitelji s te domene bit će uklonjeni.", + "confirmations.logout.confirm": "Odjavi se", + "confirmations.logout.message": "Jeste li sigurni da se želite odjaviti?", "confirmations.mute.confirm": "Utišaj", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", + "confirmations.mute.explanation": "Ovo će sakriti njihove objave i objave koje ih spominju, ali i dalje će im dopuštati da vide Vaše objave i da Vas prate.", + "confirmations.mute.message": "Jeste li sigurni da želite utišati {name}?", + "confirmations.redraft.confirm": "Izbriši i ponovno uredi", + "confirmations.redraft.message": "Jeste li sigurni da želite izbrisati ovaj toot i ponovno ga urediti? Favoriti i boostovi bit će izgubljeni, a odgovori na izvornu objavu bit će odvojeni.", + "confirmations.reply.confirm": "Odgovori", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.confirm": "Prestani pratiti", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", + "conversation.delete": "Izbriši razgovor", + "conversation.mark_as_read": "Označi kao pročitano", + "conversation.open": "Prikaži razgovor", + "conversation.with": "S {names}", "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", + "directory.local": "Samo iz {domain}", "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", + "directory.recently_active": "Nedavno aktivni", "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", + "embed.preview": "Evo kako će izgledati:", "emoji_button.activity": "Aktivnost", - "emoji_button.custom": "Custom", + "emoji_button.custom": "Prilagođeno", "emoji_button.flags": "Zastave", - "emoji_button.food": "Hrana & Piće", - "emoji_button.label": "Umetni smajlije", + "emoji_button.food": "Hrana i piće", + "emoji_button.label": "Umetni emotikone", "emoji_button.nature": "Priroda", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objekti", + "emoji_button.not_found": "Nema emotikona!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Predmeti", "emoji_button.people": "Ljudi", - "emoji_button.recent": "Frequently used", + "emoji_button.recent": "Često korišteno", "emoji_button.search": "Traži...", - "emoji_button.search_results": "Search results", + "emoji_button.search_results": "Rezultati pretraživanja", "emoji_button.symbols": "Simboli", - "emoji_button.travel": "Putovanja & Mjesta", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", + "emoji_button.travel": "Putovanje i mjesta", + "empty_column.account_suspended": "Račun je suspendiran", + "empty_column.account_timeline": "Ovdje nema tootova!", + "empty_column.account_unavailable": "Profil nije dostupan", + "empty_column.blocks": "Još niste blokirali nikoga.", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!", + "empty_column.community": "Lokalna vremenska crta je prazna. Napišite nešto javno da biste pokrenuli stvari!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "Još nema blokiranih domena.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.", - "empty_column.home": "Još ne slijediš nikoga. Posjeti {public} ili koristi tražilicu kako bi počeo i upoznao druge korisnike.", - "empty_column.home.public_timeline": "javni timeline", - "empty_column.list": "There is nothing in this list yet.", + "empty_column.home": "Vaša početna vremenska crta je prazna! Posjetite {public} ili koristite tražilicu kako biste započeli i upoznali druge korisnike.", + "empty_column.home.public_timeline": "javnu vremensku crtu", + "empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.", - "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio", + "empty_column.mutes": "Niste utišali nijednog korisnika.", + "empty_column.notifications": "Još nemate obavijesti. Komunicirajte s drugima kako biste započeli razgovor.", + "empty_column.public": "Ovdje nema ništa! Napišite nešto javno ili ručno pratite korisnike s drugi poslužitelja da biste ovo popunili", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", + "errors.unexpected_crash.report_issue": "Prijavi problem", "follow_request.authorize": "Autoriziraj", "follow_request.reject": "Odbij", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "generic.saved": "Spremljeno", + "getting_started.developers": "Razvijatelji", + "getting_started.directory": "Direktorij profila", + "getting_started.documentation": "Dokumentacija", "getting_started.heading": "Počnimo", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon je softver otvorenog koda. Možeš pridonijeti ili prijaviti probleme na GitHubu {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "getting_started.invite": "Pozovi ljude", + "getting_started.open_source_notice": "Mastodon je softver otvorenog kôda. Možete pridonijeti ili prijaviti probleme na GitHubu na {github}.", + "getting_started.security": "Postavke računa", + "getting_started.terms": "Uvjeti pružanja usluga", + "hashtag.column_header.tag_mode.all": "i {additional}", + "hashtag.column_header.tag_mode.any": "ili {additional}", + "hashtag.column_header.tag_mode.none": "bez {additional}", + "hashtag.column_settings.select.no_options_message": "Nisu pronađeni prijedlozi", + "hashtag.column_settings.select.placeholder": "Unesite hashtagove…", + "hashtag.column_settings.tag_mode.all": "Sve navedeno", + "hashtag.column_settings.tag_mode.any": "Bilo koji navedeni", + "hashtag.column_settings.tag_mode.none": "Nijedan navedeni", + "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac", "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži boostove", "home.column_settings.show_replies": "Pokaži odgovore", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", + "home.hide_announcements": "Sakrij najave", + "home.show_announcements": "Prikaži najave", + "intervals.full.days": "{number, plural, one {# dan} other {# dana}}", + "intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}", + "intervals.full.minutes": "{number, plural, one {# minuta} few {# minute} other {# minuta}}", + "introduction.federation.action": "Sljedeće", + "introduction.federation.federated.headline": "Federalno", + "introduction.federation.federated.text": "Javne objave s drugih poslužitelja fediverzuma prikazat će se u federalnoj vremenskoj crti.", + "introduction.federation.home.headline": "Početna", + "introduction.federation.home.text": "Objave ljudi koje pratite prikazat će se na Vašoj početnoj stranici. Možete pratiti bilo koga na bilo kojem poslužitelju!", + "introduction.federation.local.headline": "Lokalno", + "introduction.federation.local.text": "Javne objave ljudi na istom poslužitelju prikazat će se u lokalnoj vremenskoj crti.", + "introduction.interactions.action": "Dovrši tutorijal!", + "introduction.interactions.favourite.headline": "Favoriti", + "introduction.interactions.favourite.text": "Toot možete spremiti za kasnije i javiti njegovom autoru da Vam se sviđa tako što ga označite kao favorit.", + "introduction.interactions.reblog.headline": "Boostanje", + "introduction.interactions.reblog.text": "Tuđe tootove možete dijeliti sa svojim pratiteljima tako što ih boostate.", + "introduction.interactions.reply.headline": "Odgovaranje", + "introduction.interactions.reply.text": "Možete odgovoriti na tuđe i svoje tootove, čime će se oni povezati u razgovor.", + "introduction.welcome.action": "Krenimo!", + "introduction.welcome.headline": "Prvi koraci", + "introduction.welcome.text": "Dobro došli na fediverzum! Za nekoliko trenutaka moći ćete dijeliti poruke i razgovara sa svojim prijateljima kroz široki raspon poslužitelja. Ali ovaj poslužitelj, {domain}, je poseban — on sadrži Vaš profil, pa zapamtite njegovo ime.", + "keyboard_shortcuts.back": "za vraćanje natrag", + "keyboard_shortcuts.blocked": "za otvaranje liste blokiranih korisnika", + "keyboard_shortcuts.boost": "za boostanje", + "keyboard_shortcuts.column": "za fokusiranje na toot u jednom od stupaca", + "keyboard_shortcuts.compose": "za fokusiranje na tekstualni okvir za stvaranje", + "keyboard_shortcuts.description": "Opis", + "keyboard_shortcuts.direct": "za otvaranje stupca s izravnim porukama", + "keyboard_shortcuts.down": "za pomak dolje na listi", + "keyboard_shortcuts.enter": "za otvaranje toota", + "keyboard_shortcuts.favourite": "za označavanje favoritom", + "keyboard_shortcuts.favourites": "za otvaranje liste favorita", + "keyboard_shortcuts.federated": "za otvaranje federalne vremenske crte", + "keyboard_shortcuts.heading": "Tipkovnički prečaci", + "keyboard_shortcuts.home": "za otvaranje početne vremenske crte", + "keyboard_shortcuts.hotkey": "Tipkovnički prečac", + "keyboard_shortcuts.legend": "za prikaz ove legende", + "keyboard_shortcuts.local": "za otvaranje lokalne vremenske crte", + "keyboard_shortcuts.mention": "za spominjanje autora", + "keyboard_shortcuts.muted": "za otvaranje liste utišanih korisnika", + "keyboard_shortcuts.my_profile": "za otvaranje Vašeg profila", + "keyboard_shortcuts.notifications": "za otvaranje stupca s obavijestima", + "keyboard_shortcuts.open_media": "za otvaranje medijskog sadržaja", + "keyboard_shortcuts.pinned": "za otvaranje liste prikvačenih tootova", + "keyboard_shortcuts.profile": "za otvaranje autorovog profila", + "keyboard_shortcuts.reply": "za odgovaranje", + "keyboard_shortcuts.requests": "za otvaranje liste zahtjeva za praćenje", + "keyboard_shortcuts.search": "za fokusiranje na tražilicu", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.toggle_sensitivity": "za prikaz/sakrivanje medijskog sadržaja", + "keyboard_shortcuts.toot": "za započinjanje novog toota", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Zatvori", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Sljedeće", + "lightbox.previous": "Prethodno", + "lists.account.add": "Dodaj na listu", + "lists.account.remove": "Ukloni s liste", + "lists.delete": "Izbriši listu", + "lists.edit": "Uredi listu", + "lists.edit.submit": "Promijeni naslov", + "lists.new.create": "Dodaj listu", + "lists.new.title_placeholder": "Naziv nove liste", + "lists.replies_policy.followed": "Bilo koji praćeni korisnik", + "lists.replies_policy.list": "Članovi liste", + "lists.replies_policy.none": "Nitko", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Traži među praćenim ljudima", + "lists.subheading": "Vaše liste", "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Učitavam...", - "media_gallery.toggle_visible": "Preklopi vidljivost", - "missing_indicator.label": "Nije nađen", + "loading_indicator.label": "Učitavanje...", + "media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}", + "missing_indicator.label": "Nije pronađeno", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Trajanje", "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobilne aplikacije", "navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Lokalni timeline", + "navigation_bar.community_timeline": "Lokalna vremenska crta", "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.direct": "Izravne poruke", + "navigation_bar.discover": "Istraživanje", + "navigation_bar.domain_blocks": "Blokirane domene", "navigation_bar.edit_profile": "Uredi profil", "navigation_bar.favourites": "Favoriti", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Zahtjevi za slijeđenje", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "Više informacija", - "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", - "navigation_bar.lists": "Lists", + "navigation_bar.filters": "Utišane riječi", + "navigation_bar.follow_requests": "Zahtjevi za praćenje", + "navigation_bar.follows_and_followers": "Praćeni i pratitelji", + "navigation_bar.info": "O ovom poslužitelju", + "navigation_bar.keyboard_shortcuts": "Tipkovnički prečaci", + "navigation_bar.lists": "Liste", "navigation_bar.logout": "Odjavi se", "navigation_bar.mutes": "Utišani korisnici", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.personal": "Osobno", + "navigation_bar.pins": "Prikvačeni tootovi", "navigation_bar.preferences": "Postavke", - "navigation_bar.public_timeline": "Federalni timeline", - "navigation_bar.security": "Security", - "notification.favourite": "{name} je lajkao tvoj status", - "notification.follow": "{name} te sada slijedi", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} te je spomenuo", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} je podigao tvoj status", - "notifications.clear": "Očisti notifikacije", - "notifications.clear_confirmation": "Želiš li zaista obrisati sve svoje notifikacije?", - "notifications.column_settings.alert": "Desktop notifikacije", + "navigation_bar.public_timeline": "Federalna vremenska crta", + "navigation_bar.security": "Sigurnost", + "notification.favourite": "{name} je favorizirao/la Vaš toot", + "notification.follow": "{name} Vas je počeo/la pratiti", + "notification.follow_request": "{name} zatražio/la je da Vas prati", + "notification.mention": "{name} Vas je spomenuo", + "notification.own_poll": "Vaša anketa je završila", + "notification.poll": "Anketa u kojoj ste glasali je završila", + "notification.reblog": "{name} je boostao/la Vaš status", + "notification.status": "{name} just posted", + "notifications.clear": "Očisti obavijesti", + "notifications.clear_confirmation": "Želite li zaista trajno očistiti sve Vaše obavijesti?", + "notifications.column_settings.alert": "Obavijesti radne površine", "notifications.column_settings.favourite": "Favoriti:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "Novi sljedbenici:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije", + "notifications.column_settings.filter_bar.category": "Brza traka filtera", + "notifications.column_settings.filter_bar.show": "Prikaži", + "notifications.column_settings.follow": "Novi pratitelji:", + "notifications.column_settings.follow_request": "Novi zahtjevi za praćenje:", "notifications.column_settings.mention": "Spominjanja:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.poll": "Rezultati anketa:", + "notifications.column_settings.push": "Push obavijesti", "notifications.column_settings.reblog": "Boostovi:", "notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.sound": "Sviraj zvuk", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Podesi status privatnosti", - "privacy.direct.long": "Prikaži samo spomenutim korisnicima", - "privacy.direct.short": "Direktno", - "privacy.private.long": "Prikaži samo sljedbenicima", - "privacy.private.short": "Privatno", - "privacy.public.long": "Postaj na javne timeline", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "Sve", + "notifications.filter.boosts": "Boostovi", + "notifications.filter.favourites": "Favoriti", + "notifications.filter.follows": "Praćenja", + "notifications.filter.mentions": "Spominjanja", + "notifications.filter.polls": "Rezultati anketa", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} obavijesti", + "notifications.mark_as_read": "Označi sve obavijesti kao pročitane", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Završeno", + "poll.refresh": "Osvježi", + "poll.total_people": "{count, plural, one {# osoba} few {# osobe} other {# osoba}}", + "poll.total_votes": "{count, plural, one {# glas} few {# glasa} other {# glasova}}", + "poll.vote": "Glasaj", + "poll.voted": "Vi ste glasali za ovaj odgovor", + "poll_button.add_poll": "Dodaj anketu", + "poll_button.remove_poll": "Ukloni anketu", + "privacy.change": "Podesi privatnost toota", + "privacy.direct.long": "Vidljivo samo spomenutim korisnicima", + "privacy.direct.short": "Izravno", + "privacy.private.long": "Vidljivo samo pratiteljima", + "privacy.private.short": "Samo pratitelji", + "privacy.public.long": "Vidljivo svima, prikazano u javim vremenskim crtama", "privacy.public.short": "Javno", - "privacy.unlisted.long": "Ne prikazuj u javnim timelineovima", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "privacy.unlisted.long": "Vidljivo svima, ali se ne prikazuje u javnim vremenskim crtama", + "privacy.unlisted.short": "Neprikazano", + "refresh": "Osvježi", + "regeneration_indicator.label": "Učitavanje…", + "regeneration_indicator.sublabel": "Priprema se Vaša početna stranica!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "sada", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "relative_time.today": "today", + "relative_time.today": "danas", "reply_indicator.cancel": "Otkaži", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.forward": "Proslijedi {target}", + "report.forward_hint": "Račun je s drugog poslužitelja. Poslati anonimiziranu kopiju prijave i tamo?", + "report.hint": "Prijava bit će poslana moderatorima poslužitelja. Ispod možete dati objašnjenje zašto prijavljujete ovaj račun:", "report.placeholder": "Dodatni komentari", "report.submit": "Pošalji", - "report.target": "Prijavljivanje", + "report.target": "Prijavljivanje korisnika {target}", "search.placeholder": "Traži", - "search_popout.search_format": "Advanced search format", + "search_popout.search_format": "Format naprednog pretraživanja", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", + "search_popout.tips.user": "korisnik", + "search_results.accounts": "Ljudi", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", @@ -370,92 +394,93 @@ "status.block": "Block @{name}", "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "Ovaj post ne može biti boostan", + "status.cannot_reblog": "Ova objava ne može biti boostana", "status.copy": "Copy link to status", "status.delete": "Obriši", "status.detailed_status": "Detailed conversation view", "status.direct": "Direct message @{name}", "status.embed": "Embed", - "status.favourite": "Označi omiljenim", + "status.favourite": "Označi favoritom", "status.filtered": "Filtered", "status.load_more": "Učitaj više", - "status.media_hidden": "Sakriven media sadržaj", + "status.media_hidden": "Sakriven medijski sadržaj", "status.mention": "Spomeni @{name}", "status.more": "More", "status.mute": "Mute @{name}", "status.mute_conversation": "Utišaj razgovor", - "status.open": "Proširi ovaj status", + "status.open": "Proširi ovaj toot", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Podigni", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} je podigao", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", + "status.read_more": "Pročitajte više", + "status.reblog": "Boostaj", + "status.reblog_private": "Boostaj s izvornom vidljivošću", + "status.reblogged_by": "{name} je boostao/la", + "status.reblogs.empty": "Nitko još nije boostao ovaj toot. Kada netko to učini, ovdje će biti prikazani.", + "status.redraft": "Izbriši i ponovno uredi", + "status.remove_bookmark": "Ukloni knjižnu oznaku", "status.reply": "Odgovori", - "status.replyAll": "Odgovori na temu", + "status.replyAll": "Odgovori na niz", "status.report": "Prijavi @{name}", "status.sensitive_warning": "Osjetljiv sadržaj", - "status.share": "Share", + "status.share": "Podijeli", "status.show_less": "Pokaži manje", "status.show_less_all": "Show less for all", "status.show_more": "Pokaži više", "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", + "status.show_thread": "Prikaži nit", + "status.uncached_media_warning": "Nije dostupno", "status.unmute_conversation": "Poništi utišavanje razgovora", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federalni", - "tabs_bar.home": "Dom", + "status.unpin": "Otkvači s profila", + "suggestions.dismiss": "Odbaci prijedlog", + "suggestions.header": "Možda Vas zanima…", + "tabs_bar.federated_timeline": "Federalno", + "tabs_bar.home": "Početna", "tabs_bar.local_timeline": "Lokalno", - "tabs_bar.notifications": "Notifikacije", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "tabs_bar.notifications": "Obavijesti", + "tabs_bar.search": "Traži", + "time_remaining.days": "{number, plural, one {preostao # dan} other {preostalo # dana}}", + "time_remaining.hours": "{number, plural, one {preostao # sat} few {preostalo # sata} other {preostalo # sati}}", + "time_remaining.minutes": "{number, plural, one {preostala # minuta} few {preostale # minute} other {preostalo # minuta}}", "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "time_remaining.seconds": "{number, plural, one {preostala # sekunda} few {preostale # sekunde} other {preostalo # sekundi}}", + "timeline_hint.remote_resource_not_displayed": "{resource} s drugih poslužitelja nisu prikazani.", + "timeline_hint.resources.followers": "Pratitelji", + "timeline_hint.resources.follows": "Praćenja", + "timeline_hint.resources.statuses": "Stariji tootovi", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Povuci i spusti kako bi uploadao", - "upload_button.label": "Dodaj media", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Poništi", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "trends.trending_now": "Popularno", + "ui.beforeunload": "Vaša skica bit će izgubljena ako napustite Mastodon.", + "units.short.billion": "{count} mlrd.", + "units.short.million": "{count} mil.", + "units.short.thousand": "{count} tis.", + "upload_area.title": "Povucite i ispustite za prijenos", + "upload_button.label": "Dodajte slike, video ili audio datoteku", + "upload_error.limit": "Ograničenje prijenosa datoteka je prekoračeno.", + "upload_error.poll": "Prijenos datoteka nije dopušten kod anketa.", + "upload_form.audio_description": "Opišite za ljude sa slabim sluhom", + "upload_form.description": "Opišite za ljude sa slabim vidom", + "upload_form.edit": "Uredi", + "upload_form.thumbnail": "Promijeni pretpregled", + "upload_form.undo": "Obriši", + "upload_form.video_description": "Opišite za ljude sa slabim sluhom ili vidom", + "upload_modal.analyzing_picture": "Analiza slike…", + "upload_modal.apply": "Primijeni", + "upload_modal.choose_image": "Odaberite sliku", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", + "upload_modal.detect_text": "Detektiraj tekst sa slike", + "upload_modal.edit_media": "Uređivanje medija", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploadam...", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "upload_progress.label": "Prenošenje...", + "video.close": "Zatvori video", + "video.download": "Preuzmi datoteku", + "video.exit_fullscreen": "Izađi iz cijelog zaslona", + "video.expand": "Proširi video", + "video.fullscreen": "Cijeli zaslon", + "video.hide": "Sakrij video", + "video.mute": "Utišaj zvuk", + "video.pause": "Pauziraj", + "video.play": "Reproduciraj", + "video.unmute": "Uključi zvuk" } diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 9afadd7d6..a0ae7305c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Megjegyzés @{name} fiókhoz", + "account.account_note_header": "Feljegyzés", "account.add_or_remove_from_list": "Hozzáadás vagy eltávolítás a listáról", "account.badges.bot": "Bot", "account.badges.group": "Csoport", @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "További böngészés az eredeti profilon", "account.cancel_follow_request": "Követési kérelem törlése", "account.direct": "Közvetlen üzenet @{name} számára", + "account.disable_notifications": "Ne figyelmeztess, ha @{name} tülköl", "account.domain_blocked": "Rejtett domain", "account.edit_profile": "Profil szerkesztése", + "account.enable_notifications": "Figyelmeztess, ha @{name} tülköl", "account.endorse": "Kiemelés a profilodon", "account.follow": "Követés", "account.followers": "Követő", @@ -43,7 +45,7 @@ "account.unfollow": "Követés vége", "account.unmute": "@{name} némítás feloldása", "account.unmute_notifications": "@{name} némított értesítéseinek feloldása", - "account_note.placeholder": "Nincs megjegyzés", + "account_note.placeholder": "Klikk a feljegyzéshez", "alert.rate_limited.message": "Próbáld újra {retry_time, time, medium} után.", "alert.rate_limited.title": "Forgalomkorlátozás", "alert.unexpected.message": "Váratlan hiba történt.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Keresési találatok", "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és Helyek", + "empty_column.account_suspended": "Fiók felfüggesztve", "empty_column.account_timeline": "Itt nincs tülkölés!", "empty_column.account_unavailable": "A profil nem érhető el", "empty_column.blocks": "Még senkit sem tiltottál le.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.", "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd", "error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.", + "error.unexpected_crash.explanation_addons": "Ezt az oldalt nem lehet helyesen megjeleníteni. Ezt a hibát valószínűleg egy böngésző beépülő vagy egy automatikus fordító okozza.", "error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", + "error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", "follow_request.authorize": "Engedélyezés", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele", "keyboard_shortcuts.up": "felfelé mozdítás a listában", "lightbox.close": "Bezárás", + "lightbox.compress": "Képnézet összecsukása", + "lightbox.expand": "Képnézet kinagyítása", "lightbox.next": "Következő", "lightbox.previous": "Előző", - "lightbox.view_context": "Kontextus megtekintése", "lists.account.add": "Hozzáadás a listához", "lists.account.remove": "Eltávolítás a listából", "lists.delete": "Lista törlése", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cím megváltoztatása", "lists.new.create": "Lista hozzáadása", "lists.new.title_placeholder": "Új lista címe", + "lists.replies_policy.followed": "Bármely követett felhasználó", + "lists.replies_policy.list": "A lista tagjai", + "lists.replies_policy.none": "Senki", + "lists.replies_policy.title": "Nekik mutassuk a válaszokat:", "lists.search": "Keresés a követett személyek között", "lists.subheading": "Listáid", "load_pending": "{count, plural, one {# új elem} other {# új elem}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Láthatóság állítása", "missing_indicator.label": "Nincs találat", "missing_indicator.sublabel": "Ez az erőforrás nem található", + "mute_modal.duration": "Időtartam", "mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?", + "mute_modal.indefinite": "Határozatlan", "navigation_bar.apps": "Mobil appok", "navigation_bar.blocks": "Letiltott felhasználók", "navigation_bar.bookmarks": "Könyvjelzők", @@ -298,6 +310,7 @@ "notification.own_poll": "A szavazásod véget ért", "notification.poll": "Egy szavazás, melyben részt vettél, véget ért", "notification.reblog": "{name} megtolta a tülködet", + "notification.status": "{name} tülkölt egyet", "notifications.clear": "Értesítések törlése", "notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?", "notifications.column_settings.alert": "Asztali értesítések", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Megtolások:", "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", + "notifications.column_settings.status": "Új tülkök:", "notifications.filter.all": "Mind", "notifications.filter.boosts": "Megtolások", "notifications.filter.favourites": "Kedvencnek jelölések", "notifications.filter.follows": "Követések", "notifications.filter.mentions": "Megemlítések", "notifications.filter.polls": "Szavazások eredményei", + "notifications.filter.statuses": "Frissítések azoktól, akiket követsz", + "notifications.grant_permission": "Engedély megadása.", "notifications.group": "{count} értesítés", + "notifications.mark_as_read": "Minden értesítés olvasottnak jelölése", + "notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.", + "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben", + "notifications.permission_required": "Az asztali értesítések nem elérhetőek, mert a szükséges engedélyt nem adtad meg.", + "notifications_permission_banner.enable": "Asztali értesítések engedélyezése", + "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.", + "notifications_permission_banner.title": "Soha ne mulassz el semmit", + "picture_in_picture.restore": "Visszarakás", "poll.closed": "Lezárva", "poll.refresh": "Frissítés", "poll.total_people": "{count, plural, one {# személy} other {# személy}}", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Húzd ide a feltöltéshez", - "upload_button.label": "Média hozzáadása ({formats})", + "upload_button.label": "Média hozzáadása", "upload_error.limit": "Túllépted a fájlfeltöltési korlátot.", "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", "upload_form.audio_description": "Írja le a hallássérültek számára", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Szöveg felismerése a képről", "upload_modal.edit_media": "Média szerkesztése", "upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen látható kell, legyen.", + "upload_modal.preparing_ocr": "OCR előkészítése…", "upload_modal.preview_label": "Előnézet ({ratio})", "upload_progress.label": "Feltöltés...", "video.close": "Videó bezárása", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 8c6cb1de2..5cdba58e8 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -6,17 +6,19 @@ "account.block": "Արգելափակել @{name}֊ին", "account.block_domain": "Թաքցնել ամէնը հետեւեալ տիրոյթից՝ {domain}", "account.blocked": "Արգելափակուած է", - "account.browse_more_on_origin_server": "Դիտել ավելին իրական պրոֆիլում", + "account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում", "account.cancel_follow_request": "չեղարկել հետեւելու հայցը", "account.direct": "Նամակ գրել @{name} -ին", + "account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել անձնական էջը", + "account.enable_notifications": "Ծանուցել ինձ @{name} գրառումների մասին", "account.endorse": "Ցուցադրել անձնական էջում", "account.follow": "Հետեւել", "account.followers": "Հետեւողներ", "account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։", - "account.followers_counter": "{count, plural, one {{counter} Հետևորդ} other {{counter} Հետևորդներ}}", - "account.following_counter": "{count, plural, other {{counter} Հետևում են}}", + "account.followers_counter": "{count, plural, one {{counter} Հետեւորդ} other {{counter} Հետեւորդներ}}", + "account.following_counter": "{count, plural, other {{counter} Հետեւում են}}", "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։", "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", @@ -43,7 +45,7 @@ "account.unfollow": "Ապահետեւել", "account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", - "account_note.placeholder": "Սեղմեք գրառելու համար", + "account_note.placeholder": "Սեղմէ՛ք գրառելու համար\n", "alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։", "alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին", "alert.unexpected.message": "Անսպասելի սխալ տեղի ունեցաւ։", @@ -55,9 +57,9 @@ "bundle_column_error.retry": "Կրկին փորձել", "bundle_column_error.title": "Ցանցային սխալ", "bundle_modal_error.close": "Փակել", - "bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։", + "bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանուեց։", "bundle_modal_error.retry": "Կրկին փորձել", - "column.blocks": "Արգելափակված օգտատերեր", + "column.blocks": "Արգելափակուած օգտատէրեր", "column.bookmarks": "Էջանիշեր", "column.community": "Տեղական հոսք", "column.direct": "Հասցէագրուած հաղորդագրութիւններ", @@ -67,27 +69,27 @@ "column.follow_requests": "Հետեւելու հայցեր", "column.home": "Հիմնական", "column.lists": "Ցանկեր", - "column.mutes": "Լռեցրած օգտատերեր", + "column.mutes": "Լռեցրած օգտատէրեր", "column.notifications": "Ծանուցումներ", - "column.pins": "Ամրացված թթեր", + "column.pins": "Ամրացուած թթեր", "column.public": "Դաշնային հոսք", "column_back_button.label": "Ետ", - "column_header.hide_settings": "Թաքցնել կարգավորումները", + "column_header.hide_settings": "Թաքցնել կարգաւորումները", "column_header.moveLeft_settings": "Տեղաշարժել սիւնը ձախ", "column_header.moveRight_settings": "Տեղաշարժել սիւնը աջ", "column_header.pin": "Ամրացնել", - "column_header.show_settings": "Ցուցադրել կարգավորումները", + "column_header.show_settings": "Ցուցադրել կարգաւորումները", "column_header.unpin": "Հանել", - "column_subheading.settings": "Կարգավորումներ", - "community.column_settings.local_only": "Միայն ներքին", - "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Միայն հեռակա", - "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Իմանալ ավելին", - "compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։", + "column_subheading.settings": "Կարգաւորումներ", + "community.column_settings.local_only": "Միայն տեղական", + "community.column_settings.media_only": "Միայն մեդիա", + "community.column_settings.remote_only": "Միայն հեռակայ", + "compose_form.direct_message_warning": "Այս թութը տեսանելի կը լինի միայն նշուած օգտատէրերին։", + "compose_form.direct_message_warning_learn_more": "Իմանալ աւելին", + "compose_form.hashtag_warning": "Այս թութը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։", "compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։", "compose_form.lock_disclaimer.lock": "փակ", - "compose_form.placeholder": "Ի՞նչ կա մտքիդ", + "compose_form.placeholder": "Ի՞նչ կայ մտքիդ", "compose_form.poll.add_option": "Աւելացնել տարբերակ", "compose_form.poll.duration": "Հարցման տեւողութիւնը", "compose_form.poll.option_placeholder": "Տարբերակ {number}", @@ -109,16 +111,16 @@ "confirmations.delete.confirm": "Ջնջել", "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս թութը։", "confirmations.delete_list.confirm": "Ջնջել", - "confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապես ջնջել այս ցանկը։", + "confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապէս ջնջել այս ցանկը։", "confirmations.domain_block.confirm": "Թաքցնել ամբողջ տիրույթը", - "confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրույթը։ Սովորաբար մի երկու թիրախավորված արգելափակում կամ լռեցում բավական է ու նախընտրելի։", + "confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրոյթը։ Սովորաբար մի երկու թիրախաւորուած արգելափակում կամ լռեցում բաւական է ու նախընտրելի։", "confirmations.logout.confirm": "Ելք", "confirmations.logout.message": "Համոզո՞ւած ես, որ ուզում ես դուրս գալ", "confirmations.mute.confirm": "Լռեցնել", "confirmations.mute.explanation": "Սա թաքցնելու ա իրենց գրառումներն, ինչպէս նաեւ իրենց նշող գրառումներն, բայց իրենք միեւնոյն է կը կարողանան հետեւել ձեզ եւ տեսնել ձեր գրառումները։", "confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։", "confirmations.redraft.confirm": "Ջնջել եւ խմբագրել նորից", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", + "confirmations.redraft.message": "Վստահ ե՞ս, որ ցանկանում ես ջնջել եւ վերախմբագրել այս թութը։ Դու կը կորցնես այս գրառման բոլոր պատասխանները, տարածումները եւ հաւանումները։", "confirmations.reply.confirm": "Պատասխանել", "confirmations.reply.message": "Այս պահին պատասխանելը կը չեղարկի ձեր՝ այս պահին անաւարտ հաղորդագրութիւնը։ Համոզուա՞ծ էք։", "confirmations.unfollow.confirm": "Ապահետեւել", @@ -126,70 +128,73 @@ "conversation.delete": "Ջնջել խօսակցութիւնը", "conversation.mark_as_read": "Նշել որպէս ընթերցուած", "conversation.open": "Դիտել խօսակցութիւնը", - "conversation.with": "{names}֊երի հետ", + "conversation.with": "{names}-ի հետ", "directory.federated": "Յայտնի դաշնեզերքից", "directory.local": "{domain} տիրոյթից միայն", "directory.new_arrivals": "Նորեկներ", "directory.recently_active": "Վերջերս ակտիւ", "embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճէնել ներքինանալ կոդը։", - "embed.preview": "Ահա, թե ինչ տեսք կունենա այն՝", + "embed.preview": "Ահայ, թէ ինչ տեսք կը ունենայ այն՝", "emoji_button.activity": "Զբաղմունքներ", - "emoji_button.custom": "Հատուկ", - "emoji_button.flags": "Դրոշներ", + "emoji_button.custom": "Յատուկ", + "emoji_button.flags": "Դրօշներ", "emoji_button.food": "Կերուխում", - "emoji_button.label": "Էմոջի ավելացնել", + "emoji_button.label": "Էմոջի աւելացնել", "emoji_button.nature": "Բնութիւն", - "emoji_button.not_found": "Նման էմոջիներ դեռ չեն հայտնաբերվել։ (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Նման էմոջիներ դեռ չեն յայտնաբերուել։ (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Առարկաներ", "emoji_button.people": "Մարդիկ", - "emoji_button.recent": "Հաճախ օգտագործվող", + "emoji_button.recent": "Յաճախ օգտագործուող", "emoji_button.search": "Որոնել…", "emoji_button.search_results": "Որոնման արդիւնքներ", "emoji_button.symbols": "Նշաններ", "emoji_button.travel": "Ուղեւորութիւն եւ տեղանքներ", + "empty_column.account_suspended": "Հաշիւը արգելափակուած է", "empty_column.account_timeline": "Այստեղ թթեր չկա՛ն։", "empty_column.account_unavailable": "Անձնական էջը հասանելի չի", "empty_column.blocks": "Դու դեռ ոչ մէկի չես արգելափակել։", - "empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կերեւան այստեղ։", - "empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։", + "empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կը երեւան այստեղ։", + "empty_column.community": "Տեղական հոսքը դատարկ է։ Հրապարակային մի բան գրի՛ր շարժիչը գործարկելու համար։", "empty_column.direct": "Դու դեռ չունես ոչ մի հասցէագրուած հաղորդագրութիւն։ Երբ ուղարկես կամ ստանաս որեւէ անձնական նամակ, այն այստեղ կերեւայ։", "empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։", "empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։", "empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։", "empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։", - "empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկա։", - "empty_column.home": "Քո հիմնական հոսքը դատա՛րկ է։ Այցելի՛ր {public}ը կամ օգտվիր որոնումից՝ այլ մարդկանց հանդիպելու համար։", + "empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկայ։", + "empty_column.home": "Քո հիմնական հոսքը դատարկ է։ Այցելի՛ր {public}ը կամ օգտուիր որոնումից՝ այլ մարդկանց հանդիպելու համար։", "empty_column.home.public_timeline": "հրապարակային հոսք", - "empty_column.list": "Այս ցանկում դեռ ոչինչ չկա։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կհայտնվի այստեղ։", - "empty_column.lists": "Դուք դեռ չունեք ստեղծած ցանկ։ Ցանկ ստեղծելուն պես այն կհայտնվի այստեղ։", - "empty_column.mutes": "Առայժմ ոչ ոքի չեք լռեցրել։", + "empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կը յայտնուի այստեղ։", + "empty_column.lists": "Դուք դեռ չունէք ստեղծած ցանկ։ Ցանկ ստեղծելուն պէս այն կը յայտնուի այստեղ։", + "empty_column.mutes": "Առայժմ ոչ ոքի չէք լռեցրել։", "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։", "empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։", "error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։", - "error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։", + "error.unexpected_crash.explanation_addons": "Այս էջի ճիշտ պատկերումը չի ստացում։ Խափանումը հաւանաբար առաջացել է դիտարկիչի յավելվածից կամ առցանց թարգմանիչից։", + "error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթէ դա չօգնի ապա կարող ես օգտուել Մաստադոնից ուրիշ դիտարկիչով կամ յաւելուածով։", + "error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։", "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", - "follow_request.authorize": "Վավերացնել", + "follow_request.authorize": "Վաւերացնել", "follow_request.reject": "Մերժել", - "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկված է հաշվից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", - "generic.saved": "Պահպանված է", + "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", + "generic.saved": "Պահպանուած է", "getting_started.developers": "Մշակողներ", "getting_started.directory": "Օգտատէրերի շտեմարան", "getting_started.documentation": "Փաստաթղթեր", - "getting_started.heading": "Ինչպես սկսել", + "getting_started.heading": "Ինչպէս սկսել", "getting_started.invite": "Հրաւիրել մարդկանց", - "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {github}։", + "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրէպներ զեկուցել ԳիթՀաբում՝ {github}։", "getting_started.security": "Հաշուի կարգաւորումներ", "getting_started.terms": "Ծառայութեան պայմանները", "hashtag.column_header.tag_mode.all": "եւ {additional}", "hashtag.column_header.tag_mode.any": "կամ {additional}", "hashtag.column_header.tag_mode.none": "առանց {additional}", "hashtag.column_settings.select.no_options_message": "Առաջարկներ չկան", - "hashtag.column_settings.select.placeholder": "Ավելացրու հեշթեգեր…", + "hashtag.column_settings.select.placeholder": "Աւելացրու պիտկներ…", "hashtag.column_settings.tag_mode.all": "Բոլորը", "hashtag.column_settings.tag_mode.any": "Ցանկացածը", "hashtag.column_settings.tag_mode.none": "Ոչ մեկը", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_toggle": "Ներառել լրացուցիչ պիտակները այս սիւնակում ", "home.column_settings.basic": "Հիմնական", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները", @@ -197,17 +202,17 @@ "home.show_announcements": "Ցուցադրել յայտարարութիւնները", "intervals.full.days": "{number, plural, one {# օր} other {# օր}}", "intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}", - "intervals.full.minutes": "{number, plural, one {# րոպե} other {# րոպե}}", - "introduction.federation.action": "Հաջորդ", + "intervals.full.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}}", + "introduction.federation.action": "Յաջորդ", "introduction.federation.federated.headline": "Դաշնային", "introduction.federation.federated.text": "Դաշնեզերքի հարեւան հանգոյցների հանրային գրառումները կը յայտնուեն դաշնային հոսքում։", "introduction.federation.home.headline": "Հիմնական", "introduction.federation.home.text": "Այն անձանց թթերը ում հետևում ես, կը յայտնուեն հիմնական հոսքում։ Դու կարող ես հետեւել ցանկացած անձի ցանկացած հանգոյցից։", "introduction.federation.local.headline": "Տեղային", "introduction.federation.local.text": "Տեղական հոսքում կարող ես տեսնել քո հանգոյցի բոլոր հանրային գրառումները։", - "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.action": "Աւարտել թթի դասընթացը", "introduction.interactions.favourite.headline": "Նախընտրելի", - "introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հավանելով այն։", + "introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հաւանելով այն։", "introduction.interactions.reblog.headline": "Տարածել", "introduction.interactions.reblog.text": "Կիսիր այլ օգտատէրերի թութերը քո հետեւողների հետ տարածելով դրանք քո անձնական էջում։", "introduction.interactions.reply.headline": "Պատասխանել", @@ -215,25 +220,25 @@ "introduction.welcome.action": "Գնացի՜նք։", "introduction.welcome.headline": "Առաջին քայլեր", "introduction.welcome.text": "Դաշնեզերքը ողջունում է ձեզ։ Շուտով կը կարողանաս ուղարկել նամակներ ու շփուել տարբեր հանգոյցների ընկերներիդ հետ։ Բայց մտապահիր {domain} հանգոյցը, այն իւրայատուկ է, այստեղ է պահւում քո հաշիւը։", - "keyboard_shortcuts.back": "ետ նավարկելու համար", - "keyboard_shortcuts.blocked": "արգելափակված օգտատերերի ցանկը բացելու համար", + "keyboard_shortcuts.back": "ետ նաւարկելու համար", + "keyboard_shortcuts.blocked": "արգելափակուած օգտատէրերի ցանկը բացելու համար", "keyboard_shortcuts.boost": "տարածելու համար", "keyboard_shortcuts.column": "սիւներից մէկի վրայ սեւեռուելու համար", - "keyboard_shortcuts.compose": "շարադրման տիրույթին սեւեռվելու համար", + "keyboard_shortcuts.compose": "շարադրման տիրոյթին սեւեռուելու համար", "keyboard_shortcuts.description": "Նկարագրութիւն", - "keyboard_shortcuts.direct": "հասցեագրված գրվածքների հոսքը բացելու համար", - "keyboard_shortcuts.down": "ցանկով ներքեւ շարժվելու համար", + "keyboard_shortcuts.direct": "հասցէագրուած գրուածքների հոսքը բացելու համար", + "keyboard_shortcuts.down": "ցանկով ներքեւ շարժուելու համար", "keyboard_shortcuts.enter": "թութը բացելու համար", - "keyboard_shortcuts.favourite": "հավանելու համար", + "keyboard_shortcuts.favourite": "հաւանելու համար", "keyboard_shortcuts.favourites": "էջանիշերի ցուցակը բացելու համար", "keyboard_shortcuts.federated": "դաշնային հոսքին անցնելու համար", "keyboard_shortcuts.heading": "Ստեղնաշարի կարճատներ", "keyboard_shortcuts.home": "անձնական հոսքին անցնելու համար", - "keyboard_shortcuts.hotkey": "Հատուկ ստեղն", + "keyboard_shortcuts.hotkey": "Յատուկ ստեղն", "keyboard_shortcuts.legend": "այս ձեռնարկը ցուցադրելու համար", "keyboard_shortcuts.local": "տեղական հոսքին անցնելու համար", "keyboard_shortcuts.mention": "հեղինակին նշելու համար", - "keyboard_shortcuts.muted": "լռեցված օգտատերերի ցանկը բացելու համար", + "keyboard_shortcuts.muted": "լռեցուած օգտատէրերի ցանկը բացելու համար", "keyboard_shortcuts.my_profile": "սեփական էջին անցնելու համար", "keyboard_shortcuts.notifications": "ծանուցումների սիւնակը բացելու համար", "keyboard_shortcuts.open_media": "ցուցադրել մեդիան", @@ -242,34 +247,41 @@ "keyboard_shortcuts.reply": "պատասխանելու համար", "keyboard_shortcuts.requests": "հետեւելու հայցերի ցանկը դիտելու համար", "keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար", - "keyboard_shortcuts.spoilers": "որպեսզի ցուցադրվի/թաքցվի CW դաշտը", + "keyboard_shortcuts.spoilers": "որպէսզի ցուցադրուի/թաքցուի CW դաշտը", "keyboard_shortcuts.start": "«սկսել» սիւնակը բացելու համար", "keyboard_shortcuts.toggle_hidden": "CW֊ի ետեւի տեքստը ցուցադրել֊թաքցնելու համար", "keyboard_shortcuts.toggle_sensitivity": "մեդիան ցուցադրել֊թաքցնելու համար", "keyboard_shortcuts.toot": "թարմ թութ սկսելու համար", - "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրույթից ապասեւեռվելու համար", - "keyboard_shortcuts.up": "ցանկով վերեւ շարժվելու համար", + "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրոյթից ապասեւեռուելու համար", + "keyboard_shortcuts.up": "ցանկով վերեւ շարժուելու համար", "lightbox.close": "Փակել", - "lightbox.next": "Հաջորդ", + "lightbox.compress": "Փակել պատկերի դիտման պատուհանը", + "lightbox.expand": "Բացել պատկերի դիտման պատուհանը", + "lightbox.next": "Յաջորդ", "lightbox.previous": "Նախորդ", - "lightbox.view_context": "Տեսնել ենթատեքստը", - "lists.account.add": "Ավելացնել ցանկին", + "lists.account.add": "Աւելացնել ցանկին", "lists.account.remove": "Հանել ցանկից", "lists.delete": "Ջնջել ցանկը", "lists.edit": "Փոփոխել ցանկը", "lists.edit.submit": "Փոխել վերնագիրը", - "lists.new.create": "Ավելացնել ցանկ", + "lists.new.create": "Աւելացնել ցանկ", "lists.new.title_placeholder": "Նոր ցանկի վերնագիր", - "lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", + "lists.replies_policy.followed": "Ցանկացած հետեւող օգտատէր", + "lists.replies_policy.list": "Ցանկի անդամներ", + "lists.replies_policy.none": "Ոչ ոք", + "lists.replies_policy.title": "Ցուցադրել պատասխանները՝", + "lists.search": "Փնտրել քո հետեւած մարդկանց մէջ", "lists.subheading": "Քո ցանկերը", "load_pending": "{count, plural, one {# նոր նիւթ} other {# նոր նիւթ}}", - "loading_indicator.label": "Բեռնվում է…", + "loading_indicator.label": "Բեռնւում է…", "media_gallery.toggle_visible": "Ցուցադրել/թաքցնել", - "missing_indicator.label": "Չգտնվեց", + "missing_indicator.label": "Չգտնուեց", "missing_indicator.sublabel": "Պաշարը չի գտնւում", + "mute_modal.duration": "Տեւողութիւն", "mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։", + "mute_modal.indefinite": "Անժամկէտ", "navigation_bar.apps": "Դիւրակիր յաւելուածներ", - "navigation_bar.blocks": "Արգելափակված օգտատերեր", + "navigation_bar.blocks": "Արգելափակուած օգտատէրեր", "navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.community_timeline": "Տեղական հոսք", "navigation_bar.compose": "Գրել նոր թութ", @@ -285,22 +297,23 @@ "navigation_bar.keyboard_shortcuts": "Ստեղնաշարի կարճատներ", "navigation_bar.lists": "Ցանկեր", "navigation_bar.logout": "Դուրս գալ", - "navigation_bar.mutes": "Լռեցրած օգտատերեր", + "navigation_bar.mutes": "Լռեցրած օգտատէրեր", "navigation_bar.personal": "Անձնական", - "navigation_bar.pins": "Ամրացված թթեր", + "navigation_bar.pins": "Ամրացուած թթեր", "navigation_bar.preferences": "Նախապատուութիւններ", "navigation_bar.public_timeline": "Դաշնային հոսք", "navigation_bar.security": "Անվտանգութիւն", - "notification.favourite": "{name} հավանեց թութդ", + "notification.favourite": "{name} հաւանեց թութդ", "notification.follow": "{name} սկսեց հետեւել քեզ", "notification.follow_request": "{name} քեզ հետեւելու հայց է ուղարկել", "notification.mention": "{name} նշեց քեզ", "notification.own_poll": "Հարցումդ աւարտուեց", "notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։", "notification.reblog": "{name} տարածեց թութդ", + "notification.status": "{name} հենց նոր թթեց", "notifications.clear": "Մաքրել ծանուցումները", - "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապես մաքրել քո բոլոր ծանուցումները։", - "notifications.column_settings.alert": "Աշխատատիրույթի ծանուցումներ", + "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։", + "notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ", "notifications.column_settings.favourite": "Հաւանածներից՝", "notifications.column_settings.filter_bar.advanced": "Ցուցադրել բոլոր կատեգորիաները", "notifications.column_settings.filter_bar.category": "Արագ զտման վահանակ", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Տարածածներից՝", "notifications.column_settings.show": "Ցուցադրել սիւնում", "notifications.column_settings.sound": "Ձայն հանել", + "notifications.column_settings.status": "Նոր թթեր։", "notifications.filter.all": "Բոլորը", "notifications.filter.boosts": "Տարածածները", "notifications.filter.favourites": "Հաւանածները", "notifications.filter.follows": "Հետեւածները", "notifications.filter.mentions": "Նշումները", "notifications.filter.polls": "Հարցման արդիւնքները", + "notifications.filter.statuses": "Թարմացումներ հետեւորդներից", + "notifications.grant_permission": "Թոյլատրել։", "notifications.group": "{count} ծանուցում", + "notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած", + "notifications.permission_denied": "Աշխատատիրոյթի ծանուցումներն անհասանելի են՝ դիտարկչի նախկինում մերժուած թոյլտուութիւնների հայցման հետեւանքով", + "notifications.permission_denied_alert": "Աշխատատիրոյթի ծանուցումները չեն կարող միացուել, քանի որ դիտարկչի թոյլտուութիւնները նախկինում մերժուել են", + "notifications.permission_required": "Աշխատատիրոյթի ծանուցումներն անհասանելի են, քանի որ անհրաժեշտ թոյլտուութիւնները բացակայում են։", + "notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները", + "notifications_permission_banner.how_to_control": "Ծանուցումներ ստանալու համար, երբ Մաստոդոնը բաց չէ՝ ակտիւացրու աշխատատիրոյթի ծանուցումները։ Դու կարող ես ճշգրտօրէն վերահսկել թէ ինչպիսի փոխգործակցութիւններ առաջանան աշխատատիրոյթի ծանուցումներից՝ {icon}ի կոճակով՝ այն ակտիւացնելուց յետոյ։", + "notifications_permission_banner.title": "Ոչինչ բաց մի թող", + "picture_in_picture.restore": "Յետ բերել", "poll.closed": "Փակ", "poll.refresh": "Թարմացնել", "poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}", @@ -329,8 +353,8 @@ "poll_button.add_poll": "Աւելացնել հարցում", "poll_button.remove_poll": "Հեռացնել հարցումը", "privacy.change": "Կարգաւորել թթի գաղտնիութիւնը", - "privacy.direct.long": "Թթել միայն նշված օգտատերերի համար", - "privacy.direct.short": "Հասցեագրված", + "privacy.direct.long": "Թթել միայն նշուած օգտատէրերի համար", + "privacy.direct.short": "Հասցէագրուած", "privacy.private.long": "Թթել միայն հետեւողների համար", "privacy.private.short": "Միայն հետեւողներին", "privacy.public.long": "Թթել հրապարակային հոսքերում", @@ -349,17 +373,17 @@ "reply_indicator.cancel": "Չեղարկել", "report.forward": "Փոխանցել {target}֊ին", "report.forward_hint": "Այս հաշիւ այլ հանգոյցից է։ Ուղարկե՞մ այնտեղ էլ այս բողոքի անոնիմ պատճէնը։", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.hint": "Այս զեկոյցը կուղարկուի հանգոյցի մոդերատորներին։ Ներքեւում կարող ես տրամադրել բացատրութիւն, թէ ինչու ես զեկուցում այս հաշուի մասին․", "report.placeholder": "Լրացուցիչ մեկնաբանութիւններ", "report.submit": "Ուղարկել", "report.target": "Բողոքել {target}֊ի մասին", "search.placeholder": "Փնտրել", - "search_popout.search_format": "Փնտրելու առաջադեմ ձեւ", + "search_popout.search_format": "Փնտրելու առաջադէմ ձեւ", "search_popout.tips.full_text": "Պարզ տեքստը վերադարձնում է գրառումներդ, հաւանածներդ, տարածածներդ, որտեղ ես նշուած եղել, ինչպէս նաեւ նման օգտանուններ, անուններ եւ պիտակներ։", "search_popout.tips.hashtag": "պիտակ", "search_popout.tips.status": "թութ", - "search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ", - "search_popout.tips.user": "օգտատեր", + "search_popout.tips.text": "Հասարակ տեքստը կը վերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ", + "search_popout.tips.user": "օգտատէր", "search_results.accounts": "Մարդիկ", "search_results.hashtags": "Պիտակներ", "search_results.statuses": "Թթեր", @@ -370,24 +394,24 @@ "status.block": "Արգելափակել @{name}֊ին", "status.bookmark": "Էջանիշ", "status.cancel_reblog_private": "Ապատարածել", - "status.cannot_reblog": "Այս թութը չի կարող տարածվել", - "status.copy": "Պատճենել գրառման հղումը", + "status.cannot_reblog": "Այս թութը չի կարող տարածուել", + "status.copy": "Պատճէնել գրառման յղումը", "status.delete": "Ջնջել", - "status.detailed_status": "Շղթայի ընդլայնված դիտում", + "status.detailed_status": "Շղթայի ընդլայնուած դիտում", "status.direct": "Նամակ գրել {name} -ին", "status.embed": "Ներդնել", - "status.favourite": "Հավանել", - "status.filtered": "Զտված", - "status.load_more": "Բեռնել ավելին", + "status.favourite": "Հաւանել", + "status.filtered": "Զտուած", + "status.load_more": "Բեռնել աւելին", "status.media_hidden": "մեդիաբովանդակութիւնը թաքցուած է", "status.mention": "Նշել @{name}֊ին", - "status.more": "Ավելին", + "status.more": "Աւելին", "status.mute": "Լռեցնել @{name}֊ին", "status.mute_conversation": "Լռեցնել խօսակցութիւնը", "status.open": "Ընդարձակել այս թութը", "status.pin": "Ամրացնել անձնական էջում", - "status.pinned": "Ամրացված թութ", - "status.read_more": "Կարդալ ավելին", + "status.pinned": "Ամրացուած թութ", + "status.read_more": "Կարդալ աւելին", "status.reblog": "Տարածել", "status.reblog_private": "Տարածել սեփական լսարանին", "status.reblogged_by": "{name} տարածել է", @@ -395,20 +419,20 @@ "status.redraft": "Ջնջել եւ վերակազմել", "status.remove_bookmark": "Հեռացնել էջանիշերից", "status.reply": "Պատասխանել", - "status.replyAll": "Պատասխանել թելին", + "status.replyAll": "Պատասխանել շղթային", "status.report": "Բողոքել @{name}֊ից", "status.sensitive_warning": "Կասկածելի բովանդակութիւն", - "status.share": "Կիսվել", + "status.share": "Կիսուել", "status.show_less": "Պակաս", "status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները", - "status.show_more": "Ավելին", + "status.show_more": "Աւելին", "status.show_more_all": "Ցուցադրել բոլոր նախազգուշացնումները", "status.show_thread": "Բացել շղթան", "status.uncached_media_warning": "Անհասանելի", "status.unmute_conversation": "Ապալռեցնել խօսակցութիւնը", "status.unpin": "Հանել անձնական էջից", "suggestions.dismiss": "Անտեսել առաջարկը", - "suggestions.header": "Միգուցե քեզ հետաքրքրի…", + "suggestions.header": "Միգուցէ քեզ հետաքրքրի…", "tabs_bar.federated_timeline": "Դաշնային", "tabs_bar.home": "Հիմնական", "tabs_bar.local_timeline": "Տեղական", @@ -416,46 +440,47 @@ "tabs_bar.search": "Փնտրել", "time_remaining.days": "{number, plural, one {մնաց # օր} other {մնաց # օր}}", "time_remaining.hours": "{number, plural, one {# ժամ} other {# ժամ}} անց", - "time_remaining.minutes": "{number, plural, one {# րոպե} other {# րոպե}} անց", + "time_remaining.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}} անց", "time_remaining.moments": "Մնացել է մի քանի վարկեան", "time_remaining.seconds": "{number, plural, one {# վարկեան} other {# վարկեան}} անց", "timeline_hint.remote_resource_not_displayed": "{resource} այլ սպասարկիչներից չեն ցուցադրվել:", "timeline_hint.resources.followers": "Հետևորդներ", - "timeline_hint.resources.follows": "Հետևել", + "timeline_hint.resources.follows": "Հետեւել", "timeline_hint.resources.statuses": "Հին թութեր", - "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խոսում են", + "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են", "trends.trending_now": "Այժմ արդիական", - "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։", + "ui.beforeunload": "Քո սեւագիրը կը կորի, եթէ լքես Մաստոդոնը։", "units.short.billion": "{count}մլրդ", "units.short.million": "{count}մլն", "units.short.thousand": "{count}Հազ.", "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար", - "upload_button.label": "Ավելացնել մեդիա", - "upload_error.limit": "Ֆայլի վերբեռնման սահմանաչափը գերազանցված է։", + "upload_button.label": "Աւելացնել մեդիա", + "upload_error.limit": "Նիշքի վերբեռնման սահմանաչափը գերազանցուած է։", "upload_error.poll": "Հարցումների հետ նիշք կցել հնարաւոր չէ։", "upload_form.audio_description": "Նկարագրիր ձայնագրութեան բովանդակութիւնը լսողական խնդիրներով անձանց համար", "upload_form.description": "Նկարագիր՝ տեսողական խնդիրներ ունեցողների համար", "upload_form.edit": "Խմբագրել", "upload_form.thumbnail": "Փոխել պատկերակը", - "upload_form.undo": "Հետարկել", + "upload_form.undo": "Յետարկել", "upload_form.video_description": "Նկարագրիր տեսանիւթը լսողական կամ տեսողական խնդիրներով անձանց համար", "upload_modal.analyzing_picture": "Լուսանկարի վերլուծում…", "upload_modal.apply": "Կիրառել", "upload_modal.choose_image": "Ընտրել նկար", - "upload_modal.description_placeholder": "Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։", - "upload_modal.detect_text": "Հայտնբերել տեքստը նկարից", + "upload_modal.description_placeholder": "Բել դղեակի ձախ ժամն օֆ ազգութեանը ցպահանջ չճշտած վնաս էր եւ փառք։", + "upload_modal.detect_text": "Յայտնաբերել տեքստը նկարից", "upload_modal.edit_media": "Խմբագրել մեդիան", "upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։", + "upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…", "upload_modal.preview_label": "Նախադիտում ({ratio})", "upload_progress.label": "Վերբեռնվում է…", "video.close": "Փակել տեսագրութիւնը", - "video.download": "Ներբեռնել ֆայլը", + "video.download": "Ներբեռնել նիշքը", "video.exit_fullscreen": "Անջատել լիաէկրան դիտումը", "video.expand": "Ընդարձակել տեսագրութիւնը", "video.fullscreen": "Լիաէկրան", "video.hide": "Թաքցնել տեսագրութիւնը", "video.mute": "Լռեցնել ձայնը", "video.pause": "Դադար տալ", - "video.play": "Նվագել", + "video.play": "Նուագել", "video.unmute": "Միացնել ձայնը" } diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 91ad76e03..24f100b6a 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Catatan", "account.add_or_remove_from_list": "Tambah atau Hapus dari daftar", "account.badges.bot": "Bot", "account.badges.group": "Grup", "account.block": "Blokir @{name}", "account.block_domain": "Sembunyikan segalanya dari {domain}", "account.blocked": "Terblokir", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Lihat lebih lanjut diprofil asli", "account.cancel_follow_request": "Batalkan permintaan ikuti", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Berhenti memberitahu saya ketika @{name} memposting", "account.domain_blocked": "Domain disembunyikan", "account.edit_profile": "Ubah profil", + "account.enable_notifications": "Beritahu saya saat @{name} memposting", "account.endorse": "Tampilkan di profil", "account.follow": "Ikuti", "account.followers": "Pengikut", "account.followers.empty": "Tidak ada satupun yang mengkuti pengguna ini saat ini.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, other {{counter} Pengikut}}", + "account.following_counter": "{count, plural, other {{counter} Mengikuti}}", "account.follows.empty": "Pengguna ini belum mengikuti siapapun.", "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", @@ -36,14 +38,14 @@ "account.requested": "Menunggu persetujuan. Klik untuk membatalkan permintaan", "account.share": "Bagikan profil @{name}", "account.show_reblogs": "Tampilkan boost dari @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, other {{counter} Toot}}", "account.unblock": "Hapus blokir @{name}", - "account.unblock_domain": "Tampilkan {domain}", + "account.unblock_domain": "Buka blokir domain {domain}", "account.unendorse": "Jangan tampilkan di profil", "account.unfollow": "Berhenti mengikuti", "account.unmute": "Berhenti membisukan @{name}", "account.unmute_notifications": "Munculkan notifikasi dari @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Klik untuk menambah catatan", "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.", "alert.rate_limited.title": "Batasan tingkat", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", @@ -79,9 +81,9 @@ "column_header.show_settings": "Tampilkan pengaturan", "column_header.unpin": "Lepaskan", "column_subheading.settings": "Pengaturan", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Hanya lokal", "community.column_settings.media_only": "Hanya media", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Hanya jarak jauh", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya", "compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah di set sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Ubah japat menjadi pilihan tunggal", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Tandai sebagai media sensitif", - "compose_form.sensitive.marked": "Sumber ini telah ditandai sebagai sumber sensitif.", - "compose_form.sensitive.unmarked": "Sumber ini tidak ditandai sebagai sumber sensitif", + "compose_form.sensitive.hide": "{count, plural, other {Tandai media sebagai sensitif}}", + "compose_form.sensitive.marked": "{count, plural, other {Media ini ditandai sebagai sensitif}}", + "compose_form.sensitive.unmarked": "{count, plural, other {Media ini tidak ditandai sebagai sensitif}}", "compose_form.spoiler.marked": "Teks disembunyikan dibalik peringatan", "compose_form.spoiler.unmarked": "Teks tidak tersembunyi", "compose_form.spoiler_placeholder": "Peringatan konten", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Hasil pencarian", "emoji_button.symbols": "Simbol", "emoji_button.travel": "Tempat Wisata", + "empty_column.account_suspended": "Akun ditangguhkan", "empty_column.account_timeline": "Tidak ada toot di sini!", "empty_column.account_unavailable": "Profil tidak tersedia", "empty_column.blocks": "Anda belum memblokir siapapun.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.", "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini", "error.unexpected_crash.explanation": "Karena kutu pada kode kami atau isu kompatibilitas peramban, halaman tak dapat ditampilkan dengan benar.", + "error.unexpected_crash.explanation_addons": "Halaman ini tidak dapat ditampilkan dengan benar. Kesalahan ini mungkin disebabkan pengaya peramban atau alat terjemahan otomatis.", "error.unexpected_crash.next_steps": "Coba segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi native.", + "error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi murni.", "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", "follow_request.authorize": "Izinkan", "follow_request.reject": "Tolak", "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.", - "generic.saved": "Saved", + "generic.saved": "Disimpan", "getting_started.developers": "Pengembang", "getting_started.directory": "Direktori profil", "getting_started.documentation": "Dokumentasi", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "balas", "keyboard_shortcuts.requests": "buka daftar permintaan ikuti", "keyboard_shortcuts.search": "untuk fokus mencari", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "untuk menampilkan/menyembunyikan bidang CW", "keyboard_shortcuts.start": "buka kolom \"memulai\"", "keyboard_shortcuts.toggle_hidden": "tampilkan/sembunyikan teks di belakang CW", "keyboard_shortcuts.toggle_sensitivity": "tampilkan/sembunyikan media", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian", "keyboard_shortcuts.up": "untuk memindah ke atas pada daftar", "lightbox.close": "Tutup", + "lightbox.compress": "Kompres kotak tampilan gambar", + "lightbox.expand": "Besarkan kotak tampilan gambar", "lightbox.next": "Selanjutnya", "lightbox.previous": "Sebelumnya", - "lightbox.view_context": "Lihat konteks", "lists.account.add": "Tambah ke daftar", "lists.account.remove": "Hapus dari daftar", "lists.delete": "Hapus daftar", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ubah judul", "lists.new.create": "Tambah daftar", "lists.new.title_placeholder": "Judul daftar baru", + "lists.replies_policy.followed": "Siapapun pengguna yang diikuti", + "lists.replies_policy.list": "Anggota di daftar tersebut", + "lists.replies_policy.none": "Tidak ada satu pun", + "lists.replies_policy.title": "Tampilkan balasan ke:", "lists.search": "Cari di antara orang yang Anda ikuti", "lists.subheading": "Daftar Anda", "load_pending": "{count, plural, other {# item baru}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Tampil/Sembunyikan", "missing_indicator.label": "Tidak ditemukan", "missing_indicator.sublabel": "Sumber daya tak bisa ditemukan", + "mute_modal.duration": "Durasi", "mute_modal.hide_notifications": "Sembunyikan notifikasi dari pengguna ini?", + "mute_modal.indefinite": "Tak terbatas", "navigation_bar.apps": "Aplikasi mobile", "navigation_bar.blocks": "Pengguna diblokir", "navigation_bar.bookmarks": "Markah", @@ -298,6 +310,7 @@ "notification.own_poll": "Japat Anda telah berakhir", "notification.poll": "Japat yang Anda ikuti telah berakhir", "notification.reblog": "{name} mem-boost status anda", + "notification.status": "{name} baru saja memposting", "notifications.clear": "Hapus notifikasi", "notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?", "notifications.column_settings.alert": "Notifikasi desktop", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boost:", "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", + "notifications.column_settings.status": "Toot baru:", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Boost", "notifications.filter.favourites": "Favorit", "notifications.filter.follows": "Diikuti", "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Hasil japat", + "notifications.filter.statuses": "Pembaruan dari orang yang Anda ikuti", + "notifications.grant_permission": "Setujui izin.", "notifications.group": "{count} notifikasi", + "notifications.mark_as_read": "Tandai setiap notifikasi sebagai sudah dibaca", + "notifications.permission_denied": "Tidak dapat mengaktifkan notifikasi desktop karena izin ditolak.", + "notifications.permission_denied_alert": "Notifikasi desktop tidak dapat diaktifkan karena izin peramban telah ditolak sebelumnya", + "notifications.permission_required": "Notifikasi desktop tidak tersedia karena izin yang dibutuhkan belum disetujui.", + "notifications_permission_banner.enable": "Aktifkan notifikasi desktop", + "notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.", + "notifications_permission_banner.title": "Jangan lewatkan apapun", + "picture_in_picture.restore": "Taruh kembali", "poll.closed": "Ditutup", "poll.refresh": "Segarkan", "poll.total_people": "{count, plural, other {# orang}}", @@ -343,7 +367,7 @@ "relative_time.days": "{number}h", "relative_time.hours": "{number}j", "relative_time.just_now": "sekarang", - "relative_time.minutes": "{number}b", + "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}d", "relative_time.today": "hari ini", "reply_indicator.cancel": "Batal", @@ -419,16 +443,16 @@ "time_remaining.minutes": "{number, plural, other {# menit}} tersisa", "time_remaining.moments": "Momen tersisa", "time_remaining.seconds": "{number, plural, other {# detik}} tersisa", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} dari server lain tidak ditampilkan.", + "timeline_hint.resources.followers": "Pengikut", + "timeline_hint.resources.follows": "Ikuti", + "timeline_hint.resources.statuses": "Toot lama", + "trends.counter_by_accounts": "{count, plural, other {{counter} orang}} berbicara", "trends.trending_now": "Sedang tren sekarang", "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}M", + "units.short.million": "{count}Jt", + "units.short.thousand": "{count}Rb", "upload_area.title": "Seret & lepaskan untuk mengunggah", "upload_button.label": "Tambahkan media", "upload_error.limit": "Batas unggah berkas terlampaui.", @@ -436,16 +460,17 @@ "upload_form.audio_description": "Penjelasan untuk orang dengan gangguan pendengaran", "upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas", "upload_form.edit": "Sunting", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Ubah gambar kecil", "upload_form.undo": "Undo", "upload_form.video_description": "Penjelasan untuk orang dengan gangguan pendengaran atau penglihatan", "upload_modal.analyzing_picture": "Analisis gambar…", "upload_modal.apply": "Terapkan", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Pilih gambar", "upload_modal.description_placeholder": "Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar", "upload_modal.detect_text": "Deteksi teks pada gambar", "upload_modal.edit_media": "Sunting media", "upload_modal.hint": "Klik atau seret lingkaran pada pratinjau untuk memilih titik fokus yang akan ditampilkan pada semua gambar kecil.", + "upload_modal.preparing_ocr": "Menyiapkan OCR…", "upload_modal.preview_label": "Pratinjau ({ratio})", "upload_progress.label": "Mengunggah...", "video.close": "Tutup video", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index e12bf697a..998799b9f 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Modifikar profilo", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Sequar", "account.followers": "Sequanti", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Siflar", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Averto di kontenajo", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.", "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Yurizar", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Klozar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Chanjar videbleso", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blokusita uzeri", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} repetis tua mesajo", + "notification.status": "{name} just posted", "notifications.clear": "Efacar savigi", "notifications.clear_confirmation": "Ka tu esas certa, ke tu volas efacar omna tua savigi?", "notifications.column_settings.alert": "Surtabla savigi", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Repeti:", "notifications.column_settings.show": "Montrar en kolumno", "notifications.column_settings.sound": "Plear sono", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Kargante...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 72d8fefaf..d90156835 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "Skoða nánari upplýsingar á notandasniðinu", "account.cancel_follow_request": "Hætta við beiðni um að fylgjast með", "account.direct": "Bein skilaboð til @{name}", + "account.disable_notifications": "Hætta að láta mig vita þegar @{name} sendir inn", "account.domain_blocked": "Lén falið", "account.edit_profile": "Breyta notandasniði", + "account.enable_notifications": "Láta mig vita þegar @{name} sendir inn", "account.endorse": "Birta á notandasniði", "account.follow": "Fylgjast með", "account.followers": "Fylgjendur", "account.followers.empty": "Ennþá fylgist enginn með þessum notanda.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} fylgjandi} other {{counter} fylgjendur}}", + "account.following_counter": "{count, plural, one {{counter} fylgist með} other {{counter} fylgjast með}}", "account.follows.empty": "Þessi notandi fylgist ennþá ekki með neinum.", "account.follows_you": "Fylgir þér", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", @@ -36,7 +38,7 @@ "account.requested": "Bíður eftir samþykki. Smelltu til að hætta við beiðni um að fylgjast með", "account.share": "Deila notandasniði fyrir @{name}", "account.show_reblogs": "Sýna endurbirtingar frá @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} tíst} other {{counter} tíst}}", "account.unblock": "Aflétta útilokun af @{name}", "account.unblock_domain": "Hætta að fela {domain}", "account.unendorse": "Ekki birta á notandasniði", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Leitarniðurstöður", "emoji_button.symbols": "Tákn", "emoji_button.travel": "Ferðalög og staðir", + "empty_column.account_suspended": "Notandaaðgangur í bið", "empty_column.account_timeline": "Engin tíst hér!", "empty_column.account_unavailable": "Notandasnið ekki tiltækt", "empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Þú ert ekki ennþá með neinar tilkynningar. Vertu í samskiptum við aðra til að umræður fari af stað.", "empty_column.public": "Það er ekkert hér! Skrifaðu eitthvað opinberlega, eða fylgstu með notendum á öðrum netþjónum til að fylla upp í þetta", "error.unexpected_crash.explanation": "Vegna villu í kóðanum okkar eða samhæfnivandamála í vafra er ekki hægt að birta þessa síðu svo vel sé.", + "error.unexpected_crash.explanation_addons": "Ekki er hægt að birta þessa síðu rétt. Þetta er líklega af völdum forritsviðbótar í vafranum eða sjálfvirkra þýðainaverkfæra.", "error.unexpected_crash.next_steps": "Prófaðu að endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", + "error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", "follow_request.authorize": "Heimila", "follow_request.reject": "Hafna", "follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.", - "generic.saved": "Saved", + "generic.saved": "Vistað", "getting_started.developers": "Forritarar", "getting_started.directory": "Notandasniðamappa", "getting_started.documentation": "Hjálparskjöl", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "að taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "að fara ofar í listanum", "lightbox.close": "Loka", + "lightbox.compress": "Þjappa myndskoðunarreit", + "lightbox.expand": "Fletta út myndskoðunarreit", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", - "lightbox.view_context": "Skoða samhengi", "lists.account.add": "Bæta á lista", "lists.account.remove": "Fjarlægja af lista", "lists.delete": "Eyða lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Breyta titli", "lists.new.create": "Bæta við lista", "lists.new.title_placeholder": "Titill á nýjum lista", + "lists.replies_policy.followed": "Allra notenda sem fylgst er með", + "lists.replies_policy.list": "Meðlima listans", + "lists.replies_policy.none": "Engra", + "lists.replies_policy.title": "Sýna svör til:", "lists.search": "Leita meðal þeirra sem þú fylgist með", "lists.subheading": "Listarnir þínir", "load_pending": "{count, plural, one {# nýtt atriði} other {# ný atriði}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Víxla sýnileika", "missing_indicator.label": "Fannst ekki", "missing_indicator.sublabel": "Tilfangið fannst ekki", + "mute_modal.duration": "Lengd", "mute_modal.hide_notifications": "Fela tilkynningar frá þessum notanda?", + "mute_modal.indefinite": "Óendanlegt", "navigation_bar.apps": "Farsímaforrit", "navigation_bar.blocks": "Útilokaðir notendur", "navigation_bar.bookmarks": "Bókamerki", @@ -298,6 +310,7 @@ "notification.own_poll": "Könnuninni þinni er lokið", "notification.poll": "Könnun sem þú tókst þátt í er lokið", "notification.reblog": "{name} endurbirti stöðufærsluna þína", + "notification.status": "{name} sendi inn rétt í þessu", "notifications.clear": "Hreinsa tilkynningar", "notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?", "notifications.column_settings.alert": "Tilkynningar á skjáborði", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Endurbirtingar:", "notifications.column_settings.show": "Sýna í dálki", "notifications.column_settings.sound": "Spila hljóð", + "notifications.column_settings.status": "Ný tíst:", "notifications.filter.all": "Allt", "notifications.filter.boosts": "Endurbirtingar", "notifications.filter.favourites": "Eftirlæti", "notifications.filter.follows": "Fylgist með", "notifications.filter.mentions": "Tilvísanir", "notifications.filter.polls": "Niðurstöður könnunar", + "notifications.filter.statuses": "Uppfærslur frá fólki sem þú fylgist með", + "notifications.grant_permission": "Veita heimild.", "notifications.group": "{count} tilkynningar", + "notifications.mark_as_read": "Merkja allar tilkynningar sem lesnar", + "notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra", + "notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað", + "notifications.permission_required": "Tilkynningar á skjáborði eru ekki aðgengilegar þar sem nauðsynlegar heimildir hafa ekki verið veittar.", + "notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði", + "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.", + "notifications_permission_banner.title": "Aldrei missa af neinu", + "picture_in_picture.restore": "Setja til baka", "poll.closed": "Lokað", "poll.refresh": "Endurlesa", "poll.total_people": "{count, plural, one {# aðili} other {# aðilar}}", @@ -423,29 +447,30 @@ "timeline_hint.resources.followers": "Fylgjendur", "timeline_hint.resources.follows": "Fylgist með", "timeline_hint.resources.statuses": "Eldri tíst", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} aðilar}} tala", "trends.trending_now": "Í umræðunni núna", "ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Dragðu-og-slepptu hér til að senda inn", - "upload_button.label": "Bæta við ({formats}) myndskrá", + "upload_button.label": "Bæta við myndum, myndskeiði eða hljóðskrá", "upload_error.limit": "Fór yfir takmörk á innsendingum skráa.", "upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.", "upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta", "upload_form.description": "Lýstu þessu fyrir sjónskerta", "upload_form.edit": "Breyta", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Skipta um smámynd", "upload_form.undo": "Eyða", "upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón", "upload_modal.analyzing_picture": "Greini mynd…", "upload_modal.apply": "Virkja", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Veldu mynd", "upload_modal.description_placeholder": "Öllum dýrunum í skóginum þætti bezt að vera vinir", "upload_modal.detect_text": "Skynja texta úr mynd", "upload_modal.edit_media": "Breyta myndskrá", "upload_modal.hint": "Smelltu eða dragðu til hringinn á forskoðuninni til að velja miðpunktinn sem verður alltaf sýnilegastur á öllum smámyndum.", + "upload_modal.preparing_ocr": "Undirbý OCR-ljóslestur…", "upload_modal.preview_label": "Forskoðun ({ratio})", "upload_progress.label": "Er að senda inn...", "video.close": "Loka myndskeiði", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 077f61e48..b63b231ae 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -1,16 +1,18 @@ { - "account.account_note_header": "La tua nota per @{name}", - "account.add_or_remove_from_list": "Aggiungi o Rimuovi dagli elenchi", + "account.account_note_header": "Le tue note sull'utente", + "account.add_or_remove_from_list": "Aggiungi o togli dalle liste", "account.badges.bot": "Bot", "account.badges.group": "Gruppo", "account.block": "Blocca @{name}", "account.block_domain": "Blocca dominio {domain}", - "account.blocked": "Bloccato", - "account.browse_more_on_origin_server": "Naviga di più sul profilo originale", + "account.blocked": "Bloccat*", + "account.browse_more_on_origin_server": "Sfoglia ulteriormente sul profilo originale", "account.cancel_follow_request": "Annulla richiesta di seguirti", "account.direct": "Messaggio diretto a @{name}", + "account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post", "account.domain_blocked": "Dominio bloccato", "account.edit_profile": "Modifica profilo", + "account.enable_notifications": "Avvisami quando @{name} pubblica un post", "account.endorse": "Mostra sul profilo", "account.follow": "Segui", "account.followers": "Seguaci", @@ -19,7 +21,7 @@ "account.following_counter": "{count, plural, other {{counter} Seguiti}}", "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.follows_you": "Ti segue", - "account.hide_reblogs": "Nascondi incrementi da @{name}", + "account.hide_reblogs": "Nascondi condivisioni da @{name}", "account.last_status": "Ultima attività", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", "account.locked_info": "Lo stato di privacy del profilo è impostato a bloccato. Il proprietario revisiona manualmente chi lo può seguire.", @@ -28,14 +30,14 @@ "account.moved_to": "{name} si è trasferito su:", "account.mute": "Silenzia @{name}", "account.mute_notifications": "Silenzia notifiche da @{name}", - "account.muted": "Silenziato", + "account.muted": "Silenziat*", "account.never_active": "Mai", "account.posts": "Toot", "account.posts_with_replies": "Toot e risposte", "account.report": "Segnala @{name}", "account.requested": "In attesa di approvazione. Clicca per annullare la richiesta di seguire", "account.share": "Condividi il profilo di @{name}", - "account.show_reblogs": "Mostra incrementi da @{name}", + "account.show_reblogs": "Mostra condivisioni da @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toot}}", "account.unblock": "Sblocca @{name}", "account.unblock_domain": "Sblocca il dominio {domain}", @@ -43,9 +45,9 @@ "account.unfollow": "Smetti di seguire", "account.unmute": "Non silenziare @{name}", "account.unmute_notifications": "Non silenziare le notifiche da @{name}", - "account_note.placeholder": "Nessun commento fornito", + "account_note.placeholder": "Clicca per aggiungere una nota", "alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.", - "alert.rate_limited.title": "Intervallo limitato", + "alert.rate_limited.title": "Limitazione per eccesso di richieste", "alert.unexpected.message": "Si è verificato un errore inatteso.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Annuncio", @@ -59,9 +61,9 @@ "bundle_modal_error.retry": "Riprova", "column.blocks": "Utenti bloccati", "column.bookmarks": "Segnalibri", - "column.community": "Fuso orario locale", + "column.community": "Timeline locale", "column.direct": "Messaggi diretti", - "column.directory": "Naviga profili", + "column.directory": "Sfoglia profili", "column.domain_blocks": "Domini bloccati", "column.favourites": "Preferiti", "column.follow_requests": "Richieste di seguirti", @@ -70,7 +72,7 @@ "column.mutes": "Utenti silenziati", "column.notifications": "Notifiche", "column.pins": "Toot in evidenza", - "column.public": "Fuso orario federato", + "column.public": "Timeline federata", "column_back_button.label": "Indietro", "column_header.hide_settings": "Nascondi impostazioni", "column_header.moveLeft_settings": "Sposta colonna a sinistra", @@ -111,13 +113,13 @@ "confirmations.delete_list.confirm": "Cancella", "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?", "confirmations.domain_block.confirm": "Blocca l'intero dominio", - "confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna linea temporale pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.", + "confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna timeline pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.", "confirmations.logout.confirm": "Disconnettiti", "confirmations.logout.message": "Sei sicuro di volerti disconnettere?", "confirmations.mute.confirm": "Silenzia", "confirmations.mute.explanation": "Questo nasconderà i post da loro ed i post che li menzionano, ma consentirà ancora loro di vedere i tuoi post e di seguirti.", "confirmations.mute.message": "Sei sicuro di voler silenziare {name}?", - "confirmations.redraft.confirm": "Cancella e rivali", + "confirmations.redraft.confirm": "Cancella e riscrivi", "confirmations.redraft.message": "Sei sicuro di voler eliminare questo toot e riscriverlo? I preferiti e gli incrementi saranno persi e le risposte al post originale saranno perse.", "confirmations.reply.confirm": "Rispondi", "confirmations.reply.message": "Rispondere ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Risultati della ricerca", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi & Luoghi", + "empty_column.account_suspended": "Account sospeso", "empty_column.account_timeline": "Nessun toot qui!", "empty_column.account_unavailable": "Profilo non disponibile", "empty_column.blocks": "Non hai ancora bloccato alcun utente.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio", "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.", + "error.unexpected_crash.explanation_addons": "Questa pagina non può essere visualizzata correttamente. Questo errore è probabilmente causato da un componente aggiuntivo del browser o da strumenti di traduzione automatica.", "error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.", + "error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e ad aggiornare la pagina. Se questo non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser o un'app diversi.", "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala il problema", "follow_request.authorize": "Autorizza", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "per uscire dall'area di composizione o dalla ricerca", "keyboard_shortcuts.up": "per spostarsi in alto nella lista", "lightbox.close": "Chiudi", + "lightbox.compress": "Comprimi casella di visualizzazione immagine", + "lightbox.expand": "Espandi casella di visualizzazione immagine", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", - "lightbox.view_context": "Mostra contesto", "lists.account.add": "Aggiungi alla lista", "lists.account.remove": "Togli dalla lista", "lists.delete": "Elimina lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambia titolo", "lists.new.create": "Aggiungi lista", "lists.new.title_placeholder": "Titolo della nuova lista", + "lists.replies_policy.followed": "Qualsiasi utente seguito", + "lists.replies_policy.list": "Iscritti alla lista", + "lists.replies_policy.none": "Nessuno", + "lists.replies_policy.title": "Mostra risposte a:", "lists.search": "Cerca tra le persone che segui", "lists.subheading": "Le tue liste", "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Imposta visibilità", "missing_indicator.label": "Non trovato", "missing_indicator.sublabel": "Risorsa non trovata", + "mute_modal.duration": "Durata", "mute_modal.hide_notifications": "Nascondere le notifiche da quest'utente?", + "mute_modal.indefinite": "Per sempre", "navigation_bar.apps": "App per dispositivi mobili", "navigation_bar.blocks": "Utenti bloccati", "navigation_bar.bookmarks": "Segnalibri", @@ -298,6 +310,7 @@ "notification.own_poll": "Il tuo sondaggio è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.reblog": "{name} ha condiviso il tuo post", + "notification.status": "{name} ha appena pubblicato un post", "notifications.clear": "Cancella notifiche", "notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?", "notifications.column_settings.alert": "Notifiche desktop", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.sound": "Riproduci suono", + "notifications.column_settings.status": "Nuovi toot:", "notifications.filter.all": "Tutti", "notifications.filter.boosts": "Condivisioni", "notifications.filter.favourites": "Apprezzati", "notifications.filter.follows": "Seguaci", "notifications.filter.mentions": "Menzioni", "notifications.filter.polls": "Risultati del sondaggio", + "notifications.filter.statuses": "Aggiornamenti dalle persone che segui", + "notifications.grant_permission": "Dai il permesso.", "notifications.group": "{count} notifiche", + "notifications.mark_as_read": "Segna tutte le notifiche come lette", + "notifications.permission_denied": "Impossibile abilitare le notifiche sul desktop perché il permesso è stato negato.", + "notifications.permission_denied_alert": "Le notifiche sul desktop non possono essere abilitate, poiché il permesso nel browser è stato negato in precedenza", + "notifications.permission_required": "Le notifiche desktop non sono disponibili perché l'autorizzazione richiesta non è stata concessa.", + "notifications_permission_banner.enable": "Abilita le notifiche sul desktop", + "notifications_permission_banner.how_to_control": "Per ricevere notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare con precisione quali tipi di interazioni generano notifiche desktop tramite il pulsante {icon} qui sopra, dopo averle abilitate.", + "notifications_permission_banner.title": "Non perderti mai nulla", + "picture_in_picture.restore": "Riportalo indietro", "poll.closed": "Chiuso", "poll.refresh": "Aggiorna", "poll.total_people": "{count, plural, one {# persona} other {# persone}}", @@ -426,7 +450,7 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parla·no", "trends.trending_now": "Di tendenza ora", "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}G", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Trascina per caricare", @@ -446,8 +470,9 @@ "upload_modal.detect_text": "Rileva testo dall'immagine", "upload_modal.edit_media": "Modifica media", "upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.", + "upload_modal.preparing_ocr": "Preparazione OCR…", "upload_modal.preview_label": "Anteprima ({ratio})", - "upload_progress.label": "Sto caricando...", + "upload_progress.label": "Invio in corso...", "video.close": "Chiudi video", "video.download": "Scarica file", "video.exit_fullscreen": "Esci da modalità a schermo intero", @@ -456,6 +481,6 @@ "video.hide": "Nascondi video", "video.mute": "Silenzia suono", "video.pause": "Pausa", - "video.play": "Avvia", + "video.play": "Riproduci", "video.unmute": "Riattiva suono" } diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index ec3d0ee59..012f88a68 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "リモートで表示", "account.cancel_follow_request": "フォローリクエストを取り消す", "account.direct": "@{name}さんにダイレクトメッセージ", + "account.disable_notifications": "@{name} の投稿時の通知を停止", "account.domain_blocked": "ドメインブロック中", "account.edit_profile": "プロフィール編集", + "account.enable_notifications": "@{name} の投稿時に通知", "account.endorse": "プロフィールで紹介する", "account.follow": "フォロー", "account.followers": "フォロワー", @@ -99,8 +101,8 @@ "compose_form.sensitive.hide": "メディアを閲覧注意にする", "compose_form.sensitive.marked": "メディアに閲覧注意が設定されています", "compose_form.sensitive.unmarked": "メディアに閲覧注意が設定されていません", - "compose_form.spoiler.marked": "閲覧注意が設定されています", - "compose_form.spoiler.unmarked": "閲覧注意が設定されていません", + "compose_form.spoiler.marked": "本文は警告の後ろに隠されます", + "compose_form.spoiler.unmarked": "本文は隠されていません", "compose_form.spoiler_placeholder": "ここに警告を書いてください", "confirmation_modal.cancel": "キャンセル", "confirmations.block.block_and_report": "ブロックし通報", @@ -147,6 +149,7 @@ "emoji_button.search_results": "検索結果", "emoji_button.symbols": "記号", "emoji_button.travel": "旅行と場所", + "empty_column.account_suspended": "アカウントは停止されています", "empty_column.account_timeline": "トゥートがありません!", "empty_column.account_unavailable": "プロフィールは利用できません", "empty_column.blocks": "まだ誰もブロックしていません。", @@ -166,7 +169,9 @@ "empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。", "empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のサーバーのユーザーをフォローしたりしていっぱいにしましょう", "error.unexpected_crash.explanation": "不具合かブラウザの互換性問題のため、このページを正しく表示できませんでした。", + "error.unexpected_crash.explanation_addons": "このページは正しく表示できませんでした。このエラーはブラウザのアドオンや自動翻訳ツールによって引き起こされることがあります。", "error.unexpected_crash.next_steps": "ページの再読み込みをお試しください。それでも解決しない場合、別のブラウザかアプリを使えば使用できることがあります。", + "error.unexpected_crash.next_steps_addons": "それらを無効化してからリロードをお試しください。それでも解決しない場合、他のブラウザやアプリで Mastodon をお試しください。", "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", "follow_request.authorize": "許可", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "トゥート入力欄・検索欄から離れる", "keyboard_shortcuts.up": "カラム内一つ上に移動", "lightbox.close": "閉じる", + "lightbox.compress": "画像ビューボックスを閉じる", + "lightbox.expand": "画像ビューボックスを開く", "lightbox.next": "次", "lightbox.previous": "前", - "lightbox.view_context": "トゥートを表示", "lists.account.add": "リストに追加", "lists.account.remove": "リストから外す", "lists.delete": "リストを削除", @@ -260,6 +266,10 @@ "lists.edit.submit": "タイトルを変更", "lists.new.create": "リストを作成", "lists.new.title_placeholder": "新規リスト名", + "lists.replies_policy.followed": "フォロー中のユーザー全員", + "lists.replies_policy.list": "リストのメンバー", + "lists.replies_policy.none": "表示しない", + "lists.replies_policy.title": "リプライを表示:", "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", "load_pending": "{count} 件の新着", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "メディアを隠す", "missing_indicator.label": "見つかりません", "missing_indicator.sublabel": "見つかりませんでした", + "mute_modal.duration": "ミュートする期間", "mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?", + "mute_modal.indefinite": "無期限", "navigation_bar.apps": "アプリ", "navigation_bar.blocks": "ブロックしたユーザー", "navigation_bar.bookmarks": "ブックマーク", @@ -298,6 +310,7 @@ "notification.own_poll": "アンケートが終了しました", "notification.poll": "アンケートが終了しました", "notification.reblog": "{name}さんがあなたのトゥートをブーストしました", + "notification.status": "{name}さんがトゥートしました", "notifications.clear": "通知を消去", "notifications.clear_confirmation": "本当に通知を消去しますか?", "notifications.column_settings.alert": "デスクトップ通知", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.show": "カラムに表示", "notifications.column_settings.sound": "通知音を再生", + "notifications.column_settings.status": "新しいトゥート:", "notifications.filter.all": "すべて", "notifications.filter.boosts": "ブースト", "notifications.filter.favourites": "お気に入り", "notifications.filter.follows": "フォロー", "notifications.filter.mentions": "返信", "notifications.filter.polls": "アンケート結果", + "notifications.filter.statuses": "フォローしている人の新着情報", + "notifications.grant_permission": "権限の付与", "notifications.group": "{count} 件の通知", + "notifications.mark_as_read": "すべて既読にする", + "notifications.permission_denied": "ブラウザの通知が拒否されているためデスクトップ通知は利用できません", + "notifications.permission_denied_alert": "ブラウザの通知が拒否されているためデスクトップ通知を有効にできません", + "notifications.permission_required": "必要な権限が付与されていないため、デスクトップ通知は利用できません。", + "notifications_permission_banner.enable": "デスクトップ通知を有効にする", + "notifications_permission_banner.how_to_control": "Mastodon を閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。", + "notifications_permission_banner.title": "お見逃しなく", + "picture_in_picture.restore": "元に戻す", "poll.closed": "終了", "poll.refresh": "更新", "poll.total_people": "{count}人", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "画像からテキストを検出", "upload_modal.edit_media": "メディアを編集", "upload_modal.hint": "サムネイルの焦点にしたい場所をクリックするか円形の枠をその場所にドラッグしてください。", + "upload_modal.preparing_ocr": "OCR の準備中…", "upload_modal.preview_label": "プレビュー ({ratio})", "upload_progress.label": "アップロード中...", "video.close": "動画を閉じる", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 0051fee1f..ad3b1b033 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "პირდაპირი წერილი @{name}-ს", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "დომენი დამალულია", "account.edit_profile": "პროფილის ცვლილება", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "გამორჩევა პროფილზე", "account.follow": "გაყოლა", "account.followers": "მიმდევრები", @@ -96,7 +98,7 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "ტუტი", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "მედია მონიშნულია მგრძნობიარედ", "compose_form.sensitive.unmarked": "მედია არაა მონიშნული მგრძნობიარედ", "compose_form.spoiler.marked": "გაფრთხილების უკან ტექსტი დამალულია", @@ -147,6 +149,7 @@ "emoji_button.search_results": "ძებნის შედეგები", "emoji_button.symbols": "სიმბოლოები", "emoji_button.travel": "მოგზაურობა და ადგილები", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "ჯერ შეტყობინებები არ გაქვთ. საუბრის დასაწყებად იურთიერთქმედეთ სხვებთან.", "empty_column.public": "აქ არაფერია! შესავსებად, დაწერეთ რაიმე ღიად ან ხელით გაჰყევით მომხმარებლებს სხვა ინსტანციებისგან", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "ავტორიზაცია", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "შედგენის ტექსტ-არეაზე ფოკუსის მოსაშორებლად", "keyboard_shortcuts.up": "სიაში ზემოთ გადასაადგილებლად", "lightbox.close": "დახურვა", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "შემდეგი", "lightbox.previous": "წინა", - "lightbox.view_context": "View context", "lists.account.add": "სიაში დამატება", "lists.account.remove": "სიიდან ამოშლა", "lists.delete": "სიის წაშლა", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "სიის დამატება", "lists.new.title_placeholder": "ახალი სიის სათაური", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "ძებნა ადამიანებს შორის რომელთაც მიჰყვებით", "lists.subheading": "თქვენი სიები", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "ხილვადობის ჩართვა", "missing_indicator.label": "არაა ნაპოვნი", "missing_indicator.sublabel": "ამ რესურსის პოვნა ვერ მოხერხდა", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "დავმალოთ შეტყობინებები ამ მომხმარებლისგან?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "დაბლოკილი მომხმარებლები", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name}-მა დაბუსტა თქვენი სტატუსი", + "notification.status": "{name} just posted", "notifications.clear": "შეტყობინებების გასუფთავება", "notifications.clear_confirmation": "დარწმუნებული ხართ, გსურთ სამუდამოდ წაშალოთ ყველა თქვენი შეტყობინება?", "notifications.column_settings.alert": "დესკტოპ შეტყობინებები", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "ბუსტები:", "notifications.column_settings.show": "გამოჩნდეს სვეტში", "notifications.column_settings.sound": "ხმის დაკვრა", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} შეტყობინება", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "იტვირთება...", "video.close": "ვიდეოს დახურვა", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index fde037504..cf9860f1e 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli", "account.cancel_follow_request": "Sefsex asuter n uḍfar", "account.direct": "Izen usrid i @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Taɣult yeffren", "account.edit_profile": "Ẓreg amaɣnu", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Welleh fell-as deg umaɣnu-inek", "account.follow": "Ḍfer", "account.followers": "Imeḍfaren", "account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.", "account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.following_counter": "{count, plural, one {{counter} yeṭṭafaren} aḍfar {{counter} wayeḍ}}", "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", @@ -36,7 +38,7 @@ "account.requested": "Di laɛḍil ad yettwaqbel. Ssit i wakken ad yefsex usuter n uḍfar", "account.share": "Bḍu amaɣnu n @{name}", "account.show_reblogs": "Ssken-d inebḍa n @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} ajewwaq} other {{counter} ijewwaqen}}", "account.unblock": "Serreḥ i @{name}", "account.unblock_domain": "Ssken-d {domain}", "account.unendorse": "Ur ttwellih ara fell-as deg umaɣnu-inek", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Igemmaḍ n unadi", "emoji_button.symbols": "Izamulen", "emoji_button.travel": "Imeḍqan d Yinigen", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ulac tijewwaqin dagi!", "empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi", "empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.", @@ -166,8 +169,10 @@ "empty_column.notifications": "Ulac ɣur-k tilɣa. Sedmer akked yemdanen-nniḍen akken ad tebduḍ adiwenni.", "empty_column.public": "Ulac kra da! Aru kra, neɣ ḍfeṛ imdanen i yellan deg yiqeddacen-nniḍen akken ad d-teččar tsuddemt tazayezt", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Smiren asebter-a, ma ur yekkis ara wugur, ẓer d akken tzemreḍ ad tesqedceḍ Maṣṭudun deg yiminig-nniḍen neɣ deg usnas anaṣli.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", "follow_request.authorize": "Ssireg", "follow_request.reject": "Agi", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart", "lightbox.close": "Mdel", + "lightbox.compress": "Ḥemmeẓ tamnaḍt n uskan n tugna", + "lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna", "lightbox.next": "Γer zdat", "lightbox.previous": "Γer deffir", - "lightbox.view_context": "Ẓer amnaḍ", "lists.account.add": "Rnu ɣer tebdart", "lists.account.remove": "Kkes seg tebdart", "lists.delete": "Kkes tabdart", @@ -260,6 +266,10 @@ "lists.edit.submit": "Beddel azwel", "lists.new.create": "Rnu tabdart", "lists.new.title_placeholder": "Azwel amaynut n tebdart", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Ssken-d tiririyin i:", "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ", "lists.subheading": "Tibdarin-ik·im", "load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ffer {number, plural, one {tugna} other {tugniwin}}", "missing_indicator.label": "Ulac-it", "missing_indicator.sublabel": "Ur nufi ara aɣbalu-a", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Tebɣiḍ ad teffreḍ talɣutin n umseqdac-a?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Isnasen izirazen", "navigation_bar.blocks": "Imseqdacen yettusḥebsen", "navigation_bar.bookmarks": "Ticraḍ", @@ -298,6 +310,7 @@ "notification.own_poll": "Tafrant-ik·im tfuk", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} yebḍa tajewwiqt-ik i tikelt-nniḍen", + "notification.status": "{name} just posted", "notifications.clear": "Sfeḍ tilɣa", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?", "notifications.column_settings.alert": "Tilɣa n tnarit", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Seǧhed:", "notifications.column_settings.show": "Ssken-d tilɣa deg ujgu", "notifications.column_settings.sound": "Rmed imesli", + "notifications.column_settings.status": "Tiẓenẓunin timaynutin:", "notifications.filter.all": "Akk", "notifications.filter.boosts": "Seǧhed", "notifications.filter.favourites": "Ismenyifen", "notifications.filter.follows": "Yeṭafaṛ", "notifications.filter.mentions": "Abdar", "notifications.filter.polls": "Igemmaḍ n usenqed", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} n tilɣa", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel.", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Ifukk", "poll.refresh": "Smiren", "poll.total_people": "{count, plural, one {# n wemdan} other {# n yemdanen}}", @@ -328,7 +352,7 @@ "poll.voted": "Tdeɣṛeḍ ɣef tririt-ayi", "poll_button.add_poll": "Rnu asenqed", "poll_button.remove_poll": "Kkes asenqed", - "privacy.change": "Adjust status privacy", + "privacy.change": "Seggem tabaḍnit n yizen", "privacy.direct.long": "Bḍu gar yimseqdacen i tbedreḍ kan", "privacy.direct.short": "Usrid", "privacy.private.long": "Bḍu i yimeḍfaṛen-ik kan", @@ -417,20 +441,20 @@ "time_remaining.days": "Mazal {number, plural, one {# n wass} other {# n wussan}}", "time_remaining.hours": "Mazal {number, plural, one {# n usrag} other {# n yesragen}}", "time_remaining.minutes": "Mazal {number, plural, one {# n tesdat} other {# n tesdatin}}", - "time_remaining.moments": "Moments remaining", + "time_remaining.moments": "Akuden i d-yeqqimen", "time_remaining.seconds": "Mazal {number, plural, one {# n tasint} other {# n tsinin}} id yugran", "timeline_hint.remote_resource_not_displayed": "{resource} seg yiqeddacen-nniḍen ur d-ttwaskanent ara.", "timeline_hint.resources.followers": "Imeḍfaṛen", "timeline_hint.resources.follows": "T·Yeṭafaṛ", "timeline_hint.resources.statuses": "Tijewwaqin tiqdimin", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} amdan} imdanen {{counter} wiyaḍ}} yettmeslayen", "trends.trending_now": "Trending now", "ui.beforeunload": "Arewway-ik·im ad iruḥ ma yella tefeɣ-d deg Maṣṭudun.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Zuḥeb rnu sers i tasalyt", - "upload_button.label": "Rnu taɣwalt ({formats})", + "upload_button.label": "Rnu taɣwalt", "upload_error.limit": "Asali n ufaylu iεedda talast.", "upload_error.poll": "Ur ittusireg ara usali n ufaylu s tefranin.", "upload_form.audio_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Sefru-d aḍris seg tugna", "upload_modal.edit_media": "Ẓreg taɣwalt", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Aheyyi n OCR…", "upload_modal.preview_label": "Taskant ({ratio})", "upload_progress.label": "Asali iteddu...", "video.close": "Mdel tabidyutt", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 322c15fff..04a0f9140 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Жазба", "account.add_or_remove_from_list": "Тізімге қосу немесе жою", "account.badges.bot": "Бот", - "account.badges.group": "Group", + "account.badges.group": "Топ", "account.block": "Бұғаттау @{name}", "account.block_domain": "Домендегі барлығын бұғатта {domain}", "account.blocked": "Бұғатталды", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Толығырақ оригинал профилінде қара", "account.cancel_follow_request": "Жазылуға сұранымды қайтару", "account.direct": "Жеке хат @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен жабық", "account.edit_profile": "Профильді өңдеу", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Профильде рекомендеу", "account.follow": "Жазылу", "account.followers": "Оқырмандар", "account.followers.empty": "Әлі ешкім жазылмаған.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Оқырман} other {{counter} Оқырман}}", + "account.following_counter": "{count, plural, one {{counter} Жазылым} other {{counter} Жазылым}}", "account.follows.empty": "Ешкімге жазылмапты.", "account.follows_you": "Сізге жазылыпты", "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру", @@ -36,19 +38,19 @@ "account.requested": "Растауын күтіңіз. Жазылудан бас тарту үшін басыңыз", "account.share": "@{name} профилін бөлісу\"", "account.show_reblogs": "@{name} бөліскендерін көрсету", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Пост} other {{counter} Пост}}", "account.unblock": "Бұғаттан шығару @{name}", "account.unblock_domain": "Бұғаттан шығару {domain}", "account.unendorse": "Профильде рекомендемеу", "account.unfollow": "Оқымау", "account.unmute": "@{name} ескертпелерін қосу", "account.unmute_notifications": "@{name} ескертпелерін көрсету", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Жазба қалдыру үшін бас", "alert.rate_limited.message": "Қайтадан көріңіз {retry_time, time, medium} кейін.", "alert.rate_limited.title": "Бағалау шектеулі", "alert.unexpected.message": "Бір нәрсе дұрыс болмады.", "alert.unexpected.title": "Өй!", - "announcement.announcement": "Announcement", + "announcement.announcement": "Хабарландыру", "autosuggest_hashtag.per_week": "{count} аптасына", "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}", "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.", @@ -79,9 +81,9 @@ "column_header.show_settings": "Баптауларды көрсет", "column_header.unpin": "Алып тастау", "column_subheading.settings": "Баптаулар", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Тек жергілікті", "community.column_settings.media_only": "Тек медиа", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Тек сыртқы", "compose_form.direct_message_warning": "Тек аталған қолданушыларға.", "compose_form.direct_message_warning_learn_more": "Көбірек білу", "compose_form.hashtag_warning": "Бұл пост іздеуде хэштегпен шықпайды, өйткені ол бәріне ашық емес. Тек ашық жазбаларды ғана хэштег арқылы іздеп табуға болады.", @@ -92,8 +94,8 @@ "compose_form.poll.duration": "Сауалнама мерзімі", "compose_form.poll.option_placeholder": "Жауап {number}", "compose_form.poll.remove_option": "Бұл жауапты өшір", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "Бірнеше жауап таңдайтындай қылу", + "compose_form.poll.switch_to_single": "Тек бір жауап таңдайтындай қылу", "compose_form.publish": "Түрт", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "Сезімтал ретінде белгіле", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Іздеу нәтижелері", "emoji_button.symbols": "Таңбалар", "emoji_button.travel": "Саяхат", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Жазба жоқ ешқандай!", "empty_column.account_unavailable": "Профиль қолжетімді емес", "empty_column.blocks": "Ешкімді бұғаттамағансыз.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Әзірше ешқандай ескертпе жоқ. Басқалармен араласуды бастаңыз және пікірталастарға қатысыңыз.", "empty_column.public": "Ештеңе жоқ бұл жерде! Өзіңіз бастап жазып көріңіз немесе басқаларға жазылыңыз", "error.unexpected_crash.explanation": "Кодтағы баг немесе браузердегі қатеден, бұл бет дұрыс ашылмай тұр.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Бетті жаңартып көріңіз. Егер бұл көмектеспесе, Mastodon желісін басқа браузерден немесе мобиль қосымшадан ашып көріңіз.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа", "errors.unexpected_crash.report_issue": "Мәселені хабарла", "follow_request.authorize": "Авторизация", "follow_request.reject": "Қабылдамау", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "generic.saved": "Сақталды", "getting_started.developers": "Жасаушылар тобы", "getting_started.directory": "Профильдер каталогы", "getting_started.documentation": "Құжаттама", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "жауап жазу", "keyboard_shortcuts.requests": "жазылу сұранымдарын қарау", "keyboard_shortcuts.search": "іздеу", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "CW көрсету/жабу", "keyboard_shortcuts.start": "бастапқы бағанға бару", "keyboard_shortcuts.toggle_hidden": "жабық мәтінді CW ашу/жабу", "keyboard_shortcuts.toggle_sensitivity": "көрсет/жап", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "жазба қалдыру алаңынан шығу", "keyboard_shortcuts.up": "тізімде жоғары шығу", "lightbox.close": "Жабу", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Келесі", "lightbox.previous": "Алдыңғы", - "lightbox.view_context": "Контексті көрсет", "lists.account.add": "Тізімге қосу", "lists.account.remove": "Тізімнен шығару", "lists.delete": "Тізімді өшіру", @@ -260,6 +266,10 @@ "lists.edit.submit": "Тақырыбын өзгерту", "lists.new.create": "Тізім құру", "lists.new.title_placeholder": "Жаңа тізім аты", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Сіз іздеген адамдар арасында іздеу", "lists.subheading": "Тізімдеріңіз", "load_pending": "{count, plural, one {# жаңа нәрсе} other {# жаңа нәрсе}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Көрінуді қосу", "missing_indicator.label": "Табылмады", "missing_indicator.sublabel": "Бұл ресурс табылмады", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Бұл қолданушы ескертпелерін жасырамыз ба?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобиль қосымшалар", "navigation_bar.blocks": "Бұғатталғандар", "navigation_bar.bookmarks": "Бетбелгілер", @@ -298,6 +310,7 @@ "notification.own_poll": "Сауалнама аяқталды", "notification.poll": "Бұл сауалнаманың мерзімі аяқталыпты", "notification.reblog": "{name} жазбаңызды бөлісті", + "notification.status": "{name} just posted", "notifications.clear": "Ескертпелерді тазарт", "notifications.clear_confirmation": "Шынымен барлық ескертпелерді өшіресіз бе?", "notifications.column_settings.alert": "Үстел ескертпелері", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Бөлісулер:", "notifications.column_settings.show": "Бағанда көрсет", "notifications.column_settings.sound": "Дыбысын қос", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Барлығы", "notifications.filter.boosts": "Бөлісулер", "notifications.filter.favourites": "Таңдаулылар", "notifications.filter.follows": "Жазылулар", "notifications.filter.mentions": "Аталымдар", "notifications.filter.polls": "Сауалнама нәтижелері", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ескертпе", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Жабық", "poll.refresh": "Жаңарту", "poll.total_people": "{count, plural, one {# адам} other {# адам}}", @@ -419,11 +443,11 @@ "time_remaining.minutes": "{number, plural, one {# минут} other {# минут}}", "time_remaining.moments": "Қалған уақыт", "time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} басқа серверлерде көрсетілмейді.", + "timeline_hint.resources.followers": "Оқырман", + "timeline_hint.resources.follows": "Жазылым", + "timeline_hint.resources.statuses": "Ескі посттары", + "trends.counter_by_accounts": "{count, plural, one {{counter} адам} other {{counter} адам}} айтып жатыр", "trends.trending_now": "Тренд тақырыптар", "ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.", "units.short.billion": "{count}B", @@ -436,16 +460,17 @@ "upload_form.audio_description": "Есту қабілеті нашар адамдарға сипаттама беріңіз", "upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз", "upload_form.edit": "Түзету", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Суретті өзгерту", "upload_form.undo": "Өшіру", "upload_form.video_description": "Есту немесе көру қабілеті нашар адамдарға сипаттама беріңіз", "upload_modal.analyzing_picture": "Суретті анализ жасау…", "upload_modal.apply": "Қолдану", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Сурет таңдау", "upload_modal.description_placeholder": "Щучинск съезіндегі өрт пе? Вагон-үй, аэромобиль һәм ұшақ фюзеляжы цехінен ғой", "upload_modal.detect_text": "Суреттен мәтін анықтау", "upload_modal.edit_media": "Медиафайлды өңдеу", "upload_modal.hint": "Алдын-ала қарау шеңберін басыңыз немесе сүйреңіз, барлық нобайларда көрінетін фокусты таңдау үшін.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Превью ({ratio})", "upload_progress.label": "Жүктеп жатыр...", "video.close": "Видеоны жабу", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 8a0014e91..a5025bb72 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -1,19 +1,21 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.account_note_header": "ಟಿಪ್ಪಣಿ", + "account.add_or_remove_from_list": "ಪಟ್ಟಿಗೆ ಸೇರಿಸು ಅಥವ ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು", "account.badges.bot": "Bot", - "account.badges.group": "Group", + "account.badges.group": "ಗುಂಪು", "account.block": "Block @{name}", "account.block_domain": "Hide everything from {domain}", "account.blocked": "Blocked", "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", - "account.follow": "Follow", - "account.followers": "Followers", + "account.follow": "ಹಿಂಬಾಲಿಸಿ", + "account.followers": "ಹಿಂಬಾಲಕರು", "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", @@ -30,7 +32,7 @@ "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", "account.never_active": "Never", - "account.posts": "Toots", + "account.posts": "ಟೂಟ್ಗಳು", "account.posts_with_replies": "Toots and replies", "account.report": "Report @{name}", "account.requested": "Awaiting approval", @@ -47,12 +49,12 @@ "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "ಅಯ್ಯೋ!", "announcement.announcement": "Announcement", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", + "bundle_column_error.retry": "ಮರಳಿ ಪ್ರಯತ್ನಿಸಿ", "bundle_column_error.title": "Network error", "bundle_modal_error.close": "Close", "bundle_modal_error.message": "Something went wrong while loading this component.", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index f13b364b0..10f7eabcf 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "원본 프로필에서 더 탐색하기", "account.cancel_follow_request": "팔로우 요청 취소", "account.direct": "@{name}의 다이렉트 메시지", + "account.disable_notifications": "@{name} 의 게시물 알림 끄기", "account.domain_blocked": "도메인 숨겨짐", "account.edit_profile": "프로필 편집", + "account.enable_notifications": "@{name} 의 게시물 알림 켜기", "account.endorse": "프로필에 보이기", "account.follow": "팔로우", "account.followers": "팔로워", @@ -147,6 +149,7 @@ "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", + "empty_column.account_suspended": "계정 정지됨", "empty_column.account_timeline": "여긴 툿이 없어요!", "empty_column.account_unavailable": "프로필 사용 불가", "empty_column.blocks": "아직 아무도 차단하지 않았습니다.", @@ -166,7 +169,9 @@ "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요.", "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 서버의 유저를 팔로우 해서 채워보세요", "error.unexpected_crash.explanation": "버그 혹은 브라우저 호환성 문제로 이 페이지를 올바르게 표시할 수 없습니다.", + "error.unexpected_crash.explanation_addons": "이 페이지는 올바르게 보여질 수 없습니다. 브라우저 애드온이나 자동 번역 도구 등으로 인해 발생된 에러일 수 있습니다.", "error.unexpected_crash.next_steps": "페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", + "error.unexpected_crash.next_steps_addons": "그것들을 끄고 페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", "follow_request.authorize": "허가", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "lightbox.close": "닫기", + "lightbox.compress": "이미지 박스 압축", + "lightbox.expand": "이미지 박스 확장", "lightbox.next": "다음", "lightbox.previous": "이전", - "lightbox.view_context": "게시물 보기", "lists.account.add": "리스트에 추가", "lists.account.remove": "리스트에서 제거", "lists.delete": "리스트 삭제", @@ -260,6 +266,10 @@ "lists.edit.submit": "제목 수정", "lists.new.create": "리스트 추가", "lists.new.title_placeholder": "새 리스트의 이름", + "lists.replies_policy.followed": "팔로우 한 사용자 누구나", + "lists.replies_policy.list": "리스트의 구성원들", + "lists.replies_policy.none": "아무도 없음", + "lists.replies_policy.title": "답글 표시:", "lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.subheading": "당신의 리스트", "load_pending": "{count}개의 새 항목", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "표시 전환", "missing_indicator.label": "찾을 수 없습니다", "missing_indicator.sublabel": "이 리소스를 찾을 수 없었습니다", + "mute_modal.duration": "기간", "mute_modal.hide_notifications": "이 사용자로부터의 알림을 숨기시겠습니까?", + "mute_modal.indefinite": "무기한", "navigation_bar.apps": "모바일 앱", "navigation_bar.blocks": "차단한 사용자", "navigation_bar.bookmarks": "보관함", @@ -291,13 +303,14 @@ "navigation_bar.preferences": "사용자 설정", "navigation_bar.public_timeline": "연합 타임라인", "navigation_bar.security": "보안", - "notification.favourite": "{name}님이 즐겨찾기 했습니다", - "notification.follow": "{name}님이 나를 팔로우 했습니다", - "notification.follow_request": "{name}님이 팔로우 요청을 보냈습니다", - "notification.mention": "{name}님이 답글을 보냈습니다", + "notification.favourite": "{name} 님이 즐겨찾기 했습니다", + "notification.follow": "{name} 님이 나를 팔로우 했습니다", + "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", + "notification.mention": "{name} 님이 답글을 보냈습니다", "notification.own_poll": "내 투표가 끝났습니다", "notification.poll": "당신이 참여 한 투표가 종료되었습니다", - "notification.reblog": "{name}님이 부스트 했습니다", + "notification.reblog": "{name} 님이 부스트 했습니다", + "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notifications.clear": "알림 지우기", "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?", "notifications.column_settings.alert": "데스크탑 알림", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.sound": "효과음 재생", + "notifications.column_settings.status": "새 툿:", "notifications.filter.all": "모두", "notifications.filter.boosts": "부스트", "notifications.filter.favourites": "즐겨찾기", "notifications.filter.follows": "팔로우", "notifications.filter.mentions": "멘션", "notifications.filter.polls": "투표 결과", + "notifications.filter.statuses": "팔로우 하는 사람들의 최신 게시물", + "notifications.grant_permission": "권한 부여.", "notifications.group": "{count} 개의 알림", + "notifications.mark_as_read": "모든 알림을 읽은 상태로 표시", + "notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음", + "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", + "notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.", + "notifications_permission_banner.enable": "데스크탑 알림 활성화", + "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", + "notifications_permission_banner.title": "아무것도 놓치지 마세요", + "picture_in_picture.restore": "다시 넣기", "poll.closed": "마감됨", "poll.refresh": "새로고침", "poll.total_people": "{count}명", @@ -390,7 +414,7 @@ "status.read_more": "더 보기", "status.reblog": "부스트", "status.reblog_private": "원래의 수신자들에게 부스트", - "status.reblogged_by": "{name}님이 부스트 했습니다", + "status.reblogged_by": "{name} 님이 부스트 했습니다", "status.reblogs.empty": "아직 아무도 이 툿을 부스트하지 않았습니다. 부스트 한 사람들이 여기에 표시 됩니다.", "status.redraft": "지우고 다시 쓰기", "status.remove_bookmark": "보관한 툿 삭제", @@ -419,16 +443,16 @@ "time_remaining.minutes": "{number} 분 남음", "time_remaining.moments": "남은 시간", "time_remaining.seconds": "{number} 초 남음", - "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource}는 보여지지 않습니다.", + "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource} 표시는 할 수 없습니다.", "timeline_hint.resources.followers": "팔로워", "timeline_hint.resources.follows": "팔로우", "timeline_hint.resources.statuses": "이전 툿", "trends.counter_by_accounts": "{counter} 명이 말하는 중", "trends.trending_now": "지금 유행중", "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.", - "units.short.billion": "{count}십억", - "units.short.million": "{count}백만", - "units.short.thousand": "{count}천", + "units.short.billion": "{count}B", + "units.short.million": "{count}B", + "units.short.thousand": "{count}K", "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "이미지에서 텍스트 추출", "upload_modal.edit_media": "미디어 편집", "upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.", + "upload_modal.preparing_ocr": "OCR 준비 중…", "upload_modal.preview_label": "미리보기 ({ratio})", "upload_progress.label": "업로드 중...", "video.close": "동영상 닫기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index b3822ff08..3c359d222 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -1,461 +1,486 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", - "account.badges.group": "Group", - "account.block": "Block @{name}", - "account.block_domain": "Block domain {domain}", - "account.blocked": "Blocked", - "account.browse_more_on_origin_server": "Browse more on the original profile", - "account.cancel_follow_request": "Cancel follow request", - "account.direct": "Direct message @{name}", - "account.domain_blocked": "Domain blocked", - "account.edit_profile": "Edit profile", - "account.endorse": "Feature on profile", - "account.follow": "Follow", - "account.followers": "Followers", - "account.followers.empty": "No one follows this user yet.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.account_note_header": "تێبینی ", + "account.add_or_remove_from_list": "زیادکردن یان سڕینەوە لە پێرستەکان", + "account.badges.bot": "بوت", + "account.badges.group": "گرووپ", + "account.block": "بلۆکی @{name}", + "account.block_domain": "بلۆکی هەموو شتێک لە {domain}", + "account.blocked": "بلۆککرا", + "account.browse_more_on_origin_server": "گەڕانی فرەتر لە سەر پرۆفایلی سەرەکی", + "account.cancel_follow_request": "بەتاڵکردنی داوای شوێنکەوتن", + "account.direct": "پەیامی تایبەت بە @{name}", + "account.disable_notifications": "ئاگانامە مەنێرە بۆم کاتێک @{name} پۆست دەکرێت", + "account.domain_blocked": "دۆمەین قەپاتکرا", + "account.edit_profile": "دەستکاری پرۆفایل", + "account.enable_notifications": "ئاگادارم بکەوە کاتێک @{name} بابەتەکان", + "account.endorse": "ناساندن لە پرۆفایل", + "account.follow": "شوێنکەوتن", + "account.followers": "شوێنکەوتووان", + "account.followers.empty": "کەسێک شوێن ئەم بەکارهێنەرە نەکەوتووە", + "account.followers_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", - "account.hide_reblogs": "Hide boosts from @{name}", - "account.last_status": "Last active", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", - "account.mention": "Mention @{name}", - "account.moved_to": "{name} has moved to:", - "account.mute": "Mute @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.never_active": "Never", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.report": "Report @{name}", - "account.requested": "Awaiting approval", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", - "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unblock domain {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Unfollow", - "account.unmute": "Unmute @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "announcement.announcement": "Announcement", - "autosuggest_hashtag.per_week": "{count} per week", - "boost_modal.combo": "You can press {combo} to skip this next time", - "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", - "column.blocks": "Blocked users", - "column.bookmarks": "Bookmarks", - "column.community": "Local timeline", - "column.direct": "Direct messages", - "column.directory": "Browse profiles", - "column.domain_blocks": "Blocked domains", - "column.favourites": "Favourites", - "column.follow_requests": "Follow requests", - "column.home": "Home", - "column.lists": "Lists", - "column.mutes": "Muted users", - "column.notifications": "Notifications", - "column.pins": "Pinned toot", - "column.public": "Federated timeline", - "column_back_button.label": "Back", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", - "community.column_settings.local_only": "Local only", - "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Remote only", - "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", - "compose_form.placeholder": "What is on your mind?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.", + "account.follows_you": "شوێنکەوتووەکانت", + "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}", + "account.last_status": "دوایین چالاکی", + "account.link_verified_on": "خاوەنداریەتی ئەم لینکە لە {date} چێک کراوە", + "account.locked_info": "تایبەتمەندی ئەم هەژمارەیە ڕیکخراوە بۆ قوفڵدراوە. خاوەنەکە بە دەستی پێداچوونەوە دەکات کە کێ دەتوانێت شوێنیان بکەوێت.", + "account.media": "میدیا", + "account.mention": "ئاماژە @{name}", + "account.moved_to": "{name} گواسترایەوە بۆ:", + "account.mute": "بێدەنگکردن @{name}", + "account.mute_notifications": "هۆشیارکەرەوەکان لاببە لە @{name}", + "account.muted": "بێ دەنگ", + "account.never_active": "هەرگیز", + "account.posts": "توتس", + "account.posts_with_replies": "توتس و وەڵامەکان", + "account.report": "گوزارشت @{name}", + "account.requested": "چاوەڕێی ڕەزامەندین. کرتە بکە بۆ هەڵوەشاندنەوەی داواکاری شوێنکەوتن", + "account.share": "پرۆفایلی @{name} هاوبەش بکە", + "account.show_reblogs": "پیشاندانی بەرزکردنەوەکان لە @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.unblock": "@{name} لاببە", + "account.unblock_domain": "کردنەوەی دۆمەینی {domain}", + "account.unendorse": "تایبەتمەندی لەسەر پرۆفایلەکە نیە", + "account.unfollow": "بەدوادانەچو", + "account.unmute": "بێدەنگکردنی @{name}", + "account.unmute_notifications": "بێدەنگکردنی هۆشیارییەکان لە @{name}", + "account_note.placeholder": "کرتەبکە بۆ زیادکردنی تێبینی", + "alert.rate_limited.message": "تکایە هەوڵبدەرەوە دوای {retry_time, time, medium}.", + "alert.rate_limited.title": "ڕێژەی سنووردار", + "alert.unexpected.message": "هەڵەیەکی چاوەڕوان نەکراو ڕوویدا.", + "alert.unexpected.title": "تەححح!", + "announcement.announcement": "بانگەواز", + "autosuggest_hashtag.per_week": "{count} هەرهەفتە", + "boost_modal.combo": "دەتوانیت دەست بنێی بە سەر {combo} بۆ بازدان لە جاری داهاتوو", + "bundle_column_error.body": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.", + "bundle_column_error.retry": "دووبارە هەوڵبدە", + "bundle_column_error.title": "هەڵيی تۆڕ", + "bundle_modal_error.close": "داخستن", + "bundle_modal_error.message": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.", + "bundle_modal_error.retry": "دووبارە تاقی بکەوە", + "column.blocks": "بەکارهێنەرە بلۆککراوەکان", + "column.bookmarks": "نیشانەکان", + "column.community": "هێڵی کاتی ناوخۆیی", + "column.direct": "نامە ڕاستەوخۆکان", + "column.directory": "گەڕان لە پرۆفایلەکان", + "column.domain_blocks": "دۆمەینە داخراوەکان", + "column.favourites": "دڵخوازترینەکان", + "column.follow_requests": "بەدواداچوی داواکاریەکان بکە", + "column.home": "سەرەتا", + "column.lists": "پێرست", + "column.mutes": "بێدەنگکردنی بەکارهێنەران", + "column.notifications": "ئاگادارییەکان", + "column.pins": "تووتسی چەسپاو", + "column.public": "نووسراوەکانی هەمووشوێنێک", + "column_back_button.label": "دواوە", + "column_header.hide_settings": "شاردنەوەی ڕێکخستنەکان", + "column_header.moveLeft_settings": "ستوون بگوێزەرەوە بۆ لای چەپ", + "column_header.moveRight_settings": "جوولاندنی ئەستوون بۆ لای ڕاست", + "column_header.pin": "سنجاق", + "column_header.show_settings": "نیشاندانی رێکخستنەکان", + "column_header.unpin": "سنجاق نەکردن", + "column_subheading.settings": "رێکخستنەکان", + "community.column_settings.local_only": "تەنها خۆماڵی", + "community.column_settings.media_only": "تەنها میدیا", + "community.column_settings.remote_only": "تەنها بۆ دوور", + "compose_form.direct_message_warning": "ئەم توتە تەنیا بۆ بەکارهێنەرانی ناوبراو دەنێردرێت.", + "compose_form.direct_message_warning_learn_more": "زیاتر فێربه", + "compose_form.hashtag_warning": "ئەم توتە لە ژێر هیچ هاشتاگییەک دا ناکرێت وەک ئەوەی لە لیستەکەدا نەریزراوە. تەنها توتی گشتی دەتوانرێت بە هاشتاگی بگەڕێت.", + "compose_form.lock_disclaimer": "هەژمێرەکەی لە حاڵەتی {locked}. هەر کەسێک دەتوانێت شوێنت بکەوێت بۆ پیشاندانی بابەتەکانی تەنها دوایخۆی.", + "compose_form.lock_disclaimer.lock": "قفڵ دراوە", + "compose_form.placeholder": "چی لە مێشکتدایە?", + "compose_form.poll.add_option": "زیادکردنی هەڵبژاردەیەک", + "compose_form.poll.duration": "ماوەی ڕاپرسی", + "compose_form.poll.option_placeholder": "هەڵبژاردن {number}", + "compose_form.poll.remove_option": "لابردنی ئەم هەڵبژاردەیە", + "compose_form.poll.switch_to_multiple": "ڕاپرسی بگۆڕە بۆ ڕێگەدان بە چەند هەڵبژاردنێک", + "compose_form.poll.switch_to_single": "گۆڕینی ڕاپرسی بۆ ڕێگەدان بە تاکە هەڵبژاردنێک", + "compose_form.publish": "توت", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Write your warning here", - "confirmation_modal.cancel": "Cancel", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Are you sure you want to mute {name}?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", - "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", - "emoji_button.food": "Food & Drink", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objects", - "emoji_button.people": "People", - "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", - "emoji_button.search_results": "Search results", - "emoji_button.symbols": "Symbols", - "emoji_button.travel": "Travel & Places", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no blocked domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", - "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", - "follow_request.authorize": "Authorize", - "follow_request.reject": "Reject", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", - "getting_started.heading": "Getting started", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "compose_form.sensitive.hide": "نیشانکردنی میدیا وەک هەستیار", + "compose_form.sensitive.marked": "وادەی کۆتایی", + "compose_form.sensitive.unmarked": "میدیا وەک هەستیار نیشان نەکراوە", + "compose_form.spoiler.marked": "دەق لە پشت ئاگاداریدا شاراوەتەوە", + "compose_form.spoiler.unmarked": "دەق شاراوە نییە", + "compose_form.spoiler_placeholder": "ئاگاداریەکەت لێرە بنووسە", + "confirmation_modal.cancel": "هەڵوەشاندنەوه", + "confirmations.block.block_and_report": "بلۆک & گوزارشت", + "confirmations.block.confirm": "بلۆک", + "confirmations.block.message": "ئایا دڵنیایت لەوەی دەتەوێت {name} بلۆک بکەیت?", + "confirmations.delete.confirm": "سڕینەوە", + "confirmations.delete.message": "ئایا دڵنیایت لەوەی دەتەوێت ئەم توتە بسڕیتەوە?", + "confirmations.delete_list.confirm": "سڕینەوە", + "confirmations.delete_list.message": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی ئەم لیستە بسڕیتەوە?", + "confirmations.domain_block.confirm": "بلۆککردنی هەموو دۆمەینەکە", + "confirmations.domain_block.message": "ئایا بەڕاستی، بەڕاستی تۆ دەتەوێت هەموو {domain} بلۆک بکەیت؟ لە زۆربەی حاڵەتەکاندا چەند بلۆکێکی ئامانجدار یان بێدەنگەکان پێویست و پەسەندن. تۆ ناوەڕۆک ێک نابینیت لە دۆمەینەکە لە هیچ هێڵی کاتی گشتی یان ئاگانامەکانت. شوێنکەوتوانی تۆ لەو دۆمەینەوە لادەبرێن.", + "confirmations.logout.confirm": "چوونە دەرەوە", + "confirmations.logout.message": "ئایا دڵنیایت لەوەی دەتەوێت بچیتە دەرەوە?", + "confirmations.mute.confirm": "بێدەنگ", + "confirmations.mute.explanation": "ئەمەش دەبێتە هۆی شاردنەوەی پۆستەکان یان ئەو بابەتانەی کە ئاماژەیان پێ دەکات ، بەڵام هێشتا ڕێگەیان پێ دەدات کە پۆستەکانتان ببینن و شوێنتان بکەون.", + "confirmations.mute.message": "ئایا دڵنیایت لەوەی دەتەوێت بیلێیت {name}?", + "confirmations.redraft.confirm": "سڕینەوە & دووبارە ڕەشکردنەوە", + "confirmations.redraft.message": "ئایا دڵنیایت لەوەی دەتەوێت ئەم توتە بسڕیتەوە و دووبارە دایبنووسیتەوە؟ دڵخوازەکان و بەرزکردنەوەکان وون دەبن، و وەڵامەکان بۆ پۆستە ڕەسەنەکە هەتیو دەبن.", + "confirmations.reply.confirm": "وەڵام", + "confirmations.reply.message": "وەڵامدانەوە ئێستا ئەو نامەیە ی کە تۆ ئێستا دایڕشتووە، دەنووسێتەوە. ئایا دڵنیایت کە دەتەوێت بەردەوام بیت?", + "confirmations.unfollow.confirm": "بەدوادانەچو", + "confirmations.unfollow.message": "ئایا دڵنیایت لەوەی دەتەوێت پەیڕەوی {name}?", + "conversation.delete": "سڕینەوەی گفتوگۆ", + "conversation.mark_as_read": "نیشانەکردن وەک خوێندراوە", + "conversation.open": "نیشاندان گفتوگۆ", + "conversation.with": "لەگەڵ{names}", + "directory.federated": "لە ڕاژەکانی ناسراو", + "directory.local": "تەنها لە {domain}", + "directory.new_arrivals": "تازە گەیشتنەکان", + "directory.recently_active": "بەم دواییانە چالاکە", + "embed.instructions": "ئەم توتە بنچین بکە لەسەر وێب سایتەکەت بە کۆپیکردنی کۆدەکەی خوارەوە.", + "embed.preview": "ئەمە ئەو شتەیە کە لە شێوەی خۆی دەچێت:", + "emoji_button.activity": "چالاکی", + "emoji_button.custom": "ئاسایی", + "emoji_button.flags": "ئاڵاکان", + "emoji_button.food": "خواردن& خواردنەوە", + "emoji_button.label": "ئیمۆجی بکەنێو", + "emoji_button.nature": "سروشت", + "emoji_button.not_found": "بێ ئیمۆجی! (╯°□°)╯( ┻━┻", + "emoji_button.objects": "ئامانجەکان", + "emoji_button.people": "خەڵک", + "emoji_button.recent": "زۆرجار بەکارهێنراوە", + "emoji_button.search": "گەڕان...", + "emoji_button.search_results": "ئەنجامەکانی گەڕان", + "emoji_button.symbols": "هێماکان", + "emoji_button.travel": "گەشت & شوێنەکان", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "لێرە هیچ توتەک نییە!", + "empty_column.account_unavailable": "پرۆفایل بەردەست نیە", + "empty_column.blocks": "تۆ هێشتا هیچ بەکارهێنەرێکت بلۆک نەکردووە.", + "empty_column.bookmarked_statuses": "تۆ هێشتا هیچ توتێکی دیاریکراوت نیە کاتێک نیشانەیەک نیشان دەکەیت، لێرە دەرئەکەویت.", + "empty_column.community": "هێڵی کاتی ناوخۆیی بەتاڵە. شتێک بە ئاشکرا بنووسە بۆ ئەوەی تۆپەکە بسووڕێت!", + "empty_column.direct": "تۆ هیچ نامەی ڕاستەوخۆت نیە تا ئێستا. کاتێک دانەیەک دەنێریت یان وەرت دەگرێت، لێرە پیشان دەدات.", + "empty_column.domain_blocks": "هێشتا هیچ دۆمەینێکی بلۆک کراو نییە.", + "empty_column.favourited_statuses": "تۆ هێشتا هیچ توتێکی دڵخوازت نییە، کاتێک حەزت لە دانەیەکی باشە، لێرە دەرئەکەویت.", + "empty_column.favourites": "کەس ئەم توتەی دڵخواز نەکردووە،کاتێک کەسێک وا بکات، لێرە دەرئەکەون.", + "empty_column.follow_requests": "تۆ هێشتا هیچ داواکارییەکی بەدواداچووت نیە. کاتێک یەکێکت بۆ هات، لێرە دەرئەکەویت.", + "empty_column.hashtag": "هێشتا هیچ شتێک لەم هاشتاگەدا نییە.", + "empty_column.home": "تایم لاینی ماڵەوەت بەتاڵە! سەردانی {public} بکە یان گەڕان بەکاربێنە بۆ دەستپێکردن و بینینی بەکارهێنەرانی تر.", + "empty_column.home.public_timeline": "هێڵی کاتی گشتی", + "empty_column.list": "هێشتا هیچ شتێک لەم لیستەدا نییە. کاتێک ئەندامانی ئەم لیستە دەنگی نوێ بڵاودەکەن، لێرە دەردەکەون.", + "empty_column.lists": "تۆ هێشتا هیچ لیستت دروست نەکردووە، کاتێک دانەیەک دروست دەکەیت، لێرە پیشان دەدرێت.", + "empty_column.mutes": "تۆ هێشتا هیچ بەکارهێنەرێکت بێدەنگ نەکردووە.", + "empty_column.notifications": "تۆ هێشتا هیچ ئاگانامێکت نیە. چالاکی لەگەڵ کەسانی دیکە بکە بۆ دەستپێکردنی گفتوگۆکە.", + "empty_column.public": "لێرە هیچ نییە! شتێک بە ئاشکرا بنووسە(بەگشتی)، یان بە دەستی شوێن بەکارهێنەران بکەوە لە ڕاژەکانی ترەوە بۆ پڕکردنەوەی", + "error.unexpected_crash.explanation": "بەهۆی بوونی کێشە لە کۆدەکەمان یان کێشەی گونجانی وێبگەڕەکە، ئەم لاپەڕەیە بە دروستی پیشان نادرێت.", + "error.unexpected_crash.explanation_addons": "ئەم لاپەڕەیە ناتوانرێت بە دروستی پیشان بدرێت. ئەم هەڵەیە لەوانەیە بەهۆی ئامێری وەرگێڕانی خۆکار یان زیادکراوی وێبگەڕەوە بێت.", + "error.unexpected_crash.next_steps": "هەوڵدە لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکەیان کاربەرنامەی ڕەسەن.", + "error.unexpected_crash.next_steps_addons": "هەوڵدە لەکاریان بخەیت و لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکانی دیکە یان نەرمەکالاکانی ئەسڵی.", + "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد", + "errors.unexpected_crash.report_issue": "کێشەی گوزارشت", + "follow_request.authorize": "دهسهڵاتپێدراو", + "follow_request.reject": "ڕەتکردنەوە", + "follow_requests.unlocked_explanation": "هەرچەندە هەژمارەکەت داخراو نییە، ستافی {domain} وا بیریان کردەوە کە لەوانەیە بتانەوێت پێداچوونەوە بە داواکاریەکانی ئەم هەژمارەدا بکەن بە دەستی.", + "generic.saved": "پاشکەوتکرا", + "getting_started.developers": "پەرەپێدەران", + "getting_started.directory": "پەڕەی پرۆفایل", + "getting_started.documentation": "بەڵگەنامە", + "getting_started.heading": "دەست پێکردن", + "getting_started.invite": "بانگهێشتکردنی خەڵک", + "getting_started.open_source_notice": "ماستۆدۆن نەرمەکالایەکی سەرچاوەی کراوەیە. دەتوانیت بەشداری بکەیت یان گوزارشت بکەیت لەسەر کێشەکانی لە پەڕەی گیتهاب {github}.", + "getting_started.security": "ڕێکخستنەکانی هەژمارە", + "getting_started.terms": "مەرجەکانی خزمەتگوزاری", + "hashtag.column_header.tag_mode.all": "و {additional}", + "hashtag.column_header.tag_mode.any": "یا {additional}", + "hashtag.column_header.tag_mode.none": "بەبێ {additional}", + "hashtag.column_settings.select.no_options_message": "هیچ پێشنیارێک نەدۆزرایەوە", + "hashtag.column_settings.select.placeholder": "هاشتاگی تێبنووسە…", + "hashtag.column_settings.tag_mode.all": "هەموو ئەمانە", + "hashtag.column_settings.tag_mode.any": "هەر کام لەمانە", + "hashtag.column_settings.tag_mode.none": "هیچ کام لەمانە", + "hashtag.column_settings.tag_toggle": "تاگی زیادە ی ئەم ستوونە لەخۆ بنووسە", + "home.column_settings.basic": "بنەڕەتی", + "home.column_settings.show_reblogs": "پیشاندانی بەهێزکردن", + "home.column_settings.show_replies": "وەڵامدانەوەکان پیشان بدە", + "home.hide_announcements": "شاردنەوەی راگەیەنراوەکان", + "home.show_announcements": "پیشاندانی راگەیەنراوەکان", + "intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}", + "intervals.full.hours": "{number, plural, one {# کات} other {# کات}}", + "intervals.full.minutes": "{number, plural, one {# خولەک} other {# خولەک}}", + "introduction.federation.action": "داهاتوو", + "introduction.federation.federated.headline": "گشتی", + "introduction.federation.federated.text": "نووسراوە گشتیەکان لە خزمەتگوزاریەکانی تری جیهانی دەرئەکەون لە هێڵی گشتی.", + "introduction.federation.home.headline": "سەرەتا", + "introduction.federation.home.text": "ئەو بابەتانەی کە بەشوێنیان دەکەویت لە پەڕەی ژوورەکەت دەردەکەوێت. دەتوانیت شوێن هەموو کەسێک بکەویت لەسەر هەر ڕاژەیەک!", + "introduction.federation.local.headline": "ناوخۆیی", + "introduction.federation.local.text": "نووسراوە گشتیەکان لە خەڵک لەسەر هەمان ڕاژە وەک تۆ دەردەکەون لە هێڵی کاتی ناوخۆیی.", + "introduction.interactions.action": "خوێندنی تەواوبکە!", + "introduction.interactions.favourite.headline": "دڵخواز", + "introduction.interactions.favourite.text": "دەتوانیت پاشترتوتێک پاشەکەوت بکەیت، با نووسەر بزانێت کە تۆ حەزت لێ بوو، بە ئارەزووی خۆت.", + "introduction.interactions.reblog.headline": "بەهێزکردن", + "introduction.interactions.reblog.text": "دەتوانیت دەنگی کەسانی تر هاوبەش بکەیت لەگەڵ شوێنکەوتوانی خۆت بە بەهێزکردنیان.", + "introduction.interactions.reply.headline": "وەڵام", + "introduction.interactions.reply.text": "دەتوانیت وەڵامی کەسانی تر و توتەکانی خۆت بدەوە، کە لە گفتوگۆیەکدا بە یەکەوە زنجیریان دەکات.", + "introduction.welcome.action": "با بڕۆین!", + "introduction.welcome.headline": "هەنگاوی یەکەم", + "introduction.welcome.text": "بەخێربێیت بۆتۆڕەکۆمەڵەییەکانی چربووە! لە چەند ساتێکی کەمدا دەتوانیت پەیامەکان پەخش بکەیت و لەگەڵ هاوڕێکانت لە ناو چەندین جۆر لە ڕاژەکان قسە بکەیت.. بەڵام ئەم ڕاژانە، {domain}، جیاوزە لەگەڵ ئەوانی دیکە بۆ ئەوە کە میوانداری پرۆفایلەکەت دەکان، بۆیە ناوەکەیت لەبیربێت.", + "keyboard_shortcuts.back": "بۆ گەڕانەوە", + "keyboard_shortcuts.blocked": "بۆ کردنەوەی لیستی بەکارهێنەرە بلۆککراوەکان", + "keyboard_shortcuts.boost": "بۆ بەهێزکردن", + "keyboard_shortcuts.column": "بۆ ئەوەی تیشک بخاتە سەر توتێک لە یەکێک لە ستوونەکان", + "keyboard_shortcuts.compose": "بۆ سەرنجدان بە نووسینی ناوچەی دەق", + "keyboard_shortcuts.description": "وهسف", + "keyboard_shortcuts.direct": "بۆ کردنەوەی ستوونی نامە ڕاستەوخۆکان", + "keyboard_shortcuts.down": "بۆ چوونە خوارەوە لە لیستەکەدا", + "keyboard_shortcuts.enter": "بۆ کردنەوەی توت", + "keyboard_shortcuts.favourite": "بۆ دڵخواز", + "keyboard_shortcuts.favourites": "بۆ کردنەوەی لیستی دڵخوازەکان", + "keyboard_shortcuts.federated": "بۆ کردنەوەی نووسراوەکانی هەمووشوێن", + "keyboard_shortcuts.heading": "قهدبڕەکانی تەختەکلیل", + "keyboard_shortcuts.home": "بۆ کردنەوەی هێڵی کاتی ماڵەوە", + "keyboard_shortcuts.hotkey": "هۆتکەی", + "keyboard_shortcuts.legend": "بۆ نیشاندانی ئەم نیشانە", + "keyboard_shortcuts.local": "بۆ کردنەوەی نووسراوەکانی خۆماڵی", + "keyboard_shortcuts.mention": "نۆ ناوبردن لە نووسەر", + "keyboard_shortcuts.muted": "بۆ کردنەوەی پێرستی بەکارهێنەرانی بێدەنگ", + "keyboard_shortcuts.my_profile": "بۆ کردنەوەی پرۆفایڵ", + "keyboard_shortcuts.notifications": "بۆ کردنەوەی ستوونی ئاگانامەکان", + "keyboard_shortcuts.open_media": "بۆ کردنەوەی میدیا", + "keyboard_shortcuts.pinned": "بۆ کردنەوەی لیستی توتەکانی چەسپێنراو", + "keyboard_shortcuts.profile": "بۆ کردنەوەی پرۆفایڵی نووسەر", + "keyboard_shortcuts.reply": "بۆ وەڵامدانەوە", + "keyboard_shortcuts.requests": "بۆ کردنەوەی لیستی داواکاریەکانی بەدوادا", + "keyboard_shortcuts.search": "بۆ جەختکردن لەسەر گەڕان", + "keyboard_shortcuts.spoilers": "بۆ پیشاندان/شاردنەوەی خانەی CW", + "keyboard_shortcuts.start": "بۆ کردنەوەی ستوونی \"دەست پێبکە\"", + "keyboard_shortcuts.toggle_hidden": "بۆ پیشاندان/شاردنەوەی دەق لە پشت CW", + "keyboard_shortcuts.toggle_sensitivity": "بۆ پیشاندان/شاردنەوەی میدیا", + "keyboard_shortcuts.toot": "بۆ دەست کردن بە براندێکی تازە", + "keyboard_shortcuts.unfocus": "بۆ دروستکردنی ناوچەی دەق/گەڕان", + "keyboard_shortcuts.up": "بۆ ئەوەی لە لیستەکەدا بڕۆیت", + "lightbox.close": "دابخە", + "lightbox.compress": "سندوقی نیشاندانی وێنە بپەستێنە", + "lightbox.expand": "فراوانکردنی سندوقی بینینی وێنە", + "lightbox.next": "داهاتوو", + "lightbox.previous": "پێشوو", + "lists.account.add": "زیادکردن بۆ لیست", + "lists.account.remove": "لابردن لە لیست", + "lists.delete": "سڕینەوەی لیست", + "lists.edit": "دەستکاری لیست", + "lists.edit.submit": "گۆڕینی ناونیشان", + "lists.new.create": "زیادکردنی لیست", + "lists.new.title_placeholder": "ناونیشانی لیستی نوێ", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "پیشاندانی وەڵامەکان بۆ:", + "lists.search": "بگەڕێ لەناو ئەو کەسانەی کە شوێنیان کەوتویت", + "lists.subheading": "لیستەکانت", "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", - "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", - "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", - "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", - "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", - "privacy.direct.long": "Visible for mentioned users only", - "privacy.direct.short": "Direct", - "privacy.private.long": "Visible for followers only", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all, shown in public timelines", - "privacy.public.short": "Public", - "privacy.unlisted.long": "Visible for all, but not in public timelines", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", - "report.target": "Report {target}", - "search.placeholder": "Search", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", - "status.delete": "Delete", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", - "status.favourite": "Favourite", - "status.filtered": "Filtered", - "status.load_more": "Load more", - "status.media_hidden": "Media hidden", - "status.mention": "Mention @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", - "status.open": "Expand this status", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", - "status.replyAll": "Reply to thread", - "status.report": "Report @{name}", - "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", - "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", - "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", - "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", - "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "loading_indicator.label": "بارکردن...", + "media_gallery.toggle_visible": "شاردنەوەی {number, plural, one {image} other {images}}", + "missing_indicator.label": "نەدۆزرایەوە", + "missing_indicator.sublabel": "ئەو سەرچاوەیە نادۆزرێتەوە", + "mute_modal.duration": "ماوە", + "mute_modal.hide_notifications": "شاردنەوەی ئاگانامەکان لەم بەکارهێنەرە؟ ", + "mute_modal.indefinite": "نادیار", + "navigation_bar.apps": "بەرنامەی مۆبایل", + "navigation_bar.blocks": "بەکارهێنەرە بلۆککراوەکان", + "navigation_bar.bookmarks": "نیشانکراوەکان", + "navigation_bar.community_timeline": "دەمنامەی ناوخۆیی", + "navigation_bar.compose": "نووسینی توتی نوێ", + "navigation_bar.direct": "نامە ڕاستەوخۆکان", + "navigation_bar.discover": "دۆزینەوە", + "navigation_bar.domain_blocks": "دۆمەینە بلۆک کراوەکان", + "navigation_bar.edit_profile": "دەستکاری پرۆفایل بکە", + "navigation_bar.favourites": "دڵخوازەکان", + "navigation_bar.filters": "وشە کپەکان", + "navigation_bar.follow_requests": "بەدواداچوی داواکاریەکان بکە", + "navigation_bar.follows_and_followers": "شوێنکەوتوو و شوێنکەوتوان", + "navigation_bar.info": "دەربارەی ئەم ڕاژە", + "navigation_bar.keyboard_shortcuts": "هۆتکەی", + "navigation_bar.lists": "لیستەکان", + "navigation_bar.logout": "دەرچوون", + "navigation_bar.mutes": "کپکردنی بەکارهێنەران", + "navigation_bar.personal": "کەسی", + "navigation_bar.pins": "توتی چەسپاو", + "navigation_bar.preferences": "پەسەندەکان", + "navigation_bar.public_timeline": "نووسراوەکانی هەمووشوێنێک", + "navigation_bar.security": "ئاسایش", + "notification.favourite": "{name} نووسراوەکەتی پەسەند کرد", + "notification.follow": "{name} دوای تۆ کەوت", + "notification.follow_request": "{name} داوای کردووە کە شوێنت بکەوێت", + "notification.mention": "{name} باسی ئێوەی کرد", + "notification.own_poll": "ڕاپرسیەکەت کۆتایی هات", + "notification.poll": "ڕاپرسییەک کە دەنگی پێداویت کۆتایی هات", + "notification.reblog": "{name} نووسراوەکەتی دووبارە توتاند", + "notification.status": "{name} تازە بڵاوکرایەوە", + "notifications.clear": "ئاگانامەکان بسڕیەوە", + "notifications.clear_confirmation": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی هەموو ئاگانامەکانت بسڕیتەوە?", + "notifications.column_settings.alert": "ئاگانامەکانی پیشانگەرر ڕومێزی", + "notifications.column_settings.favourite": "دڵخوازترین:", + "notifications.column_settings.filter_bar.advanced": "هەموو پۆلەکان پیشان بدە", + "notifications.column_settings.filter_bar.category": "شریتی پاڵێوەری خێرا", + "notifications.column_settings.filter_bar.show": "نیشاندان", + "notifications.column_settings.follow": "شوێنکەوتوانی نوێ:", + "notifications.column_settings.follow_request": "شوینکەوتنی داواکاری نوێ:", + "notifications.column_settings.mention": "ئاماژەکان:", + "notifications.column_settings.poll": "ئەنجامەکانی ڕاپرسی:", + "notifications.column_settings.push": "ئاگانامەکان پاڵ بنێ", + "notifications.column_settings.reblog": "دووبارەتوتەکان:", + "notifications.column_settings.show": "لە ستووندا پیشان بدە", + "notifications.column_settings.sound": "لێدانی دەنگ", + "notifications.column_settings.status": "توتەکانی نوێ:", + "notifications.filter.all": "هەموو", + "notifications.filter.boosts": "دووبارەتوتەکان", + "notifications.filter.favourites": "دڵخوازەکان", + "notifications.filter.follows": "شوێنکەوتن", + "notifications.filter.mentions": "ئاماژەکان", + "notifications.filter.polls": "ئەنجامەکانی ڕاپرسی", + "notifications.filter.statuses": "نوێکردنەوەکان ئەو کەسانەی کە پەیڕەوی دەکەیت", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} ئاگانامە", + "notifications.mark_as_read": "هەموو ئاگانامەکان وەک خوێندراوەتەوە نیشان بکە", + "notifications.permission_denied": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت وەک ڕێپێدان ڕەتکرایەوە.", + "notifications.permission_denied_alert": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت، چونکە پێشتر مۆڵەتی وێبگەڕ ڕەتکرایەوە", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "چالاککردنی ئاگانامەکانی دێسکتۆپ", + "notifications_permission_banner.how_to_control": "بۆ وەرگرتنی ئاگانامەکان کاتێک ماستۆدۆن نەکراوەیە، ئاگانامەکانی دێسکتۆپ چالاک بکە. دەتوانیت بە وردی کۆنترۆڵی جۆری کارلێکەکان بکەیت کە ئاگانامەکانی دێسکتۆپ دروست دەکەن لە ڕێگەی دوگمەی {icon} لەسەرەوە کاتێک چالاک دەکرێن.", + "notifications_permission_banner.title": "هەرگیز شتێک لە دەست مەدە", + "picture_in_picture.restore": "بیگەڕێنەوە", + "poll.closed": "دابخە", + "poll.refresh": "نوێکردنەوە", + "poll.total_people": "{count, plural, one {# خەڵک} other {# خەڵک}}", + "poll.total_votes": "{count, plural, one {# دەنگ} other {# دەنگ}}\n", + "poll.vote": "دەنگ", + "poll.voted": "تۆ دەنگت بەو وەڵامە دا", + "poll_button.add_poll": "ڕاپرسییەک زیاد بکە", + "poll_button.remove_poll": "دهنگدان بسڕهوه", + "privacy.change": "ڕێکخستنی تایبەتمەندی توت", + "privacy.direct.long": "تەنیا بۆ بەکارهێنەرانی ناوبراو", + "privacy.direct.short": "ڕاستەوخۆ", + "privacy.private.long": "بینراو تەنها بۆ شوێنکەوتوان", + "privacy.private.short": "تەنها بۆ شوێنکەوتوان", + "privacy.public.long": "بۆ هەمووان دیاربێت، لە هێڵی کاتی گشتی دا نیشان دەدرێت", + "privacy.public.short": "گشتی", + "privacy.unlisted.long": "بۆ هەمووان دیارە، بەڵام لە هێڵی کاتی گشتیدا نا", + "privacy.unlisted.short": "لە لیست نەکراو", + "refresh": "نوێکردنەوە", + "regeneration_indicator.label": "بارکردن…", + "regeneration_indicator.sublabel": "ڕاگەیەنەری ماڵەوەت ئامادە دەکرێت!", + "relative_time.days": "{number}ڕۆژ", + "relative_time.hours": "{number}کات", + "relative_time.just_now": "ئێستا", + "relative_time.minutes": "{number}کات", + "relative_time.seconds": "{number}کات", + "relative_time.today": "ئیمڕۆ", + "reply_indicator.cancel": "هەڵوەشاندنەوه", + "report.forward": "ناردن بۆ {target}", + "report.forward_hint": "هەژمارەکە لە ڕاژەیەکی ترە. ڕونووسێکی نەناسراو بنێرە بۆ گوزارشت لەوێ?", + "report.hint": "گوزارشتەکە دەنێردرێت بۆ بەرپرسانی ڕاژەکەت. دەتوانیت ڕوونکردنەوەیەک پێشکەش بکەیت کە بۆچی ئەم هەژمارە لە خوارەوە گوزارش دەکەیت:", + "report.placeholder": "سەرنجەکانی زیاتر", + "report.submit": "ناردن", + "report.target": "گوزارشتکردنی{target}", + "search.placeholder": "گەڕان", + "search_popout.search_format": "شێوەی گەڕانی پێشکەوتوو", + "search_popout.tips.full_text": "گەڕانێکی دەقی سادە دەتوانێت توتەکانی ئێوە کە، نووسیوتانە،پەسەنتان کردووە، دووبارەتانکردووە، یان ئەو توتانە کە باسی ئێوەی تێدا کراوە پەیدا دەکا. هەروەها ناوی بەکارهێنەران، ناوی پیشاندراو و هەشتەگەکانیش لە خۆ دەگرێت.", + "search_popout.tips.hashtag": "هەشتاگ", + "search_popout.tips.status": "توت", + "search_popout.tips.text": "دەقی سادە هەڵدەسێ بە گەڕاندنەوەی هاوتایی ناوی پیشاندان، ناوی بەکارهێنەر و هاشتاگەکان", + "search_popout.tips.user": "بەکارهێنەر", + "search_results.accounts": "خەڵک", + "search_results.hashtags": "هەشتاگ", + "search_results.statuses": "توتەکان", + "search_results.statuses_fts_disabled": "گەڕانی توتەکان بە ناوەڕۆکیان لەسەر ئەم ڕاژەی ماستۆدۆن چالاک نەکراوە.", + "search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}", + "status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}", + "status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر", + "status.block": "بلۆکی @{name}", + "status.bookmark": "نیشانه", + "status.cancel_reblog_private": "بێبەهێزکردن", + "status.cannot_reblog": "ئەم بابەتە ناتوانرێت بەرزبکرێتەوە", + "status.copy": "ڕوونووسی بەستەر بۆ توت", + "status.delete": "سڕینەوە", + "status.detailed_status": "ڕوانگەی گفتوگۆ بە وردەکاری", + "status.direct": "پەیامی ڕاستەوخۆ @{name}", + "status.embed": "نیشتەجێ بکە", + "status.favourite": "دڵخواز", + "status.filtered": "پاڵاوتن", + "status.load_more": "بارکردنی زیاتر", + "status.media_hidden": "میدیای شاراوە", + "status.mention": "ناوبنێ @{name}", + "status.more": "زیاتر", + "status.mute": "بێدەنگکردن @{name}", + "status.mute_conversation": "گفتوگۆی بێدەنگ", + "status.open": "ئەم توتە فراوان بکە", + "status.pin": "لکاندن لەسەر پرۆفایل", + "status.pinned": "توتی چەسپکراو", + "status.read_more": "زیاتر بخوێنەوە", + "status.reblog": "بەهێزکردن", + "status.reblog_private": "بەهێزکردن بۆ بینەرانی سەرەتایی", + "status.reblogged_by": "{name} توتی کردەوە", + "status.reblogs.empty": "کەس ئەم توتەی دووبارە نەتوتاندوە ،کاتێک کەسێک وا بکات، لێرە دەرئەکەون.", + "status.redraft": "سڕینەوەی و دووبارە ڕەشنووس", + "status.remove_bookmark": "لابردنی نیشانه", + "status.reply": "وەڵام", + "status.replyAll": "بە نووسراوە وەڵام بدەوە", + "status.report": "گوزارشت @{name}", + "status.sensitive_warning": "ناوەڕۆکی هەستیار", + "status.share": "هاوبەش کردن", + "status.show_less": "کەمتر نیشان بدە", + "status.show_less_all": "کەمتر نیشان بدە بۆ هەمووی", + "status.show_more": "زیاتر پیشان بدە", + "status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی", + "status.show_thread": "نیشاندانی گفتوگۆ", + "status.uncached_media_warning": "بەردەست نیە", + "status.unmute_conversation": "گفتوگۆی بێدەنگ", + "status.unpin": "لابردن لە پرۆفایل", + "suggestions.dismiss": "ڕەتکردنەوەی پێشنیار", + "suggestions.header": "لەوانەیە حەزت لەمەش بێت…", + "tabs_bar.federated_timeline": "گشتی", + "tabs_bar.home": "سەرەتا", + "tabs_bar.local_timeline": "ناوخۆیی", + "tabs_bar.notifications": "ئاگادارییەکان", + "tabs_bar.search": "گەڕان", + "time_remaining.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژ}} ماوە", + "time_remaining.hours": "{number, plural, one {# کات} other {# کات}} ماوە", + "time_remaining.minutes": "{number, plural, one {# خۆلەک} other {# خولەک}} ماوە", + "time_remaining.moments": "ئەو ساتانەی ماونەتەوە", + "time_remaining.seconds": "{number, plural, one {# چرکە} other {# چرکە}} ماوە", + "timeline_hint.remote_resource_not_displayed": "{resource} لە ڕاژەکانی ترەوە پیشان نادرێت.", + "timeline_hint.resources.followers": "شوێنکەوتووان", + "timeline_hint.resources.follows": "شوێنکەوتن", + "timeline_hint.resources.statuses": "توتی کۆن", + "trends.counter_by_accounts": "{count, plural, one {{counter} کەس} other {{counter} کەس}} گفتوگۆ دەکا", + "trends.trending_now": "گۆگران", + "ui.beforeunload": "ڕەشنووسەکەت لە دەست دەچێت ئەگەر لە ماستۆدۆن بڕۆیت.", + "units.short.billion": "{count}ملیار", + "units.short.million": "{count}ملیۆن", + "units.short.thousand": "{count}هەزار", + "upload_area.title": "ڕاکێشان & دانان بۆ بارکردن", + "upload_button.label": "زیادکردنی وێنەکان، ڤیدیۆیەک یان فایلێکی دەنگی", + "upload_error.limit": "سنووری بارکردنی فایل تێپەڕیوە.", + "upload_error.poll": "پەڕگەکە ڕێی پێنەدراوە بە ڕاپرسی باربکرێت.", + "upload_form.audio_description": "بۆ ئەو کەسانەی کە گوێ بیستیان هەیە وەسف دەکات", + "upload_form.description": "وەسف بکە بۆ کەمبینایان", + "upload_form.edit": "دەستکاری", + "upload_form.thumbnail": "گۆڕانی وینۆچکە", + "upload_form.undo": "سڕینەوە", + "upload_form.video_description": "بۆ کەم بینایان و کەم بیستان وەسفی بکە", + "upload_modal.analyzing_picture": "شیکردنەوەی وێنە…", + "upload_modal.apply": "جێبەجێ کردن", + "upload_modal.choose_image": "وێنە هەڵبژێرە", + "upload_modal.description_placeholder": "بە دڵ کەین با بە نەشئەی مەی غوباری میحنەتی دونیا", + "upload_modal.detect_text": "دەقی وێنەکە بدۆزیەوە", + "upload_modal.edit_media": "دەستکاریکردنی میدیا", + "upload_modal.hint": "گەر وێنە چکۆلە یان بڕاوەبێت، خاڵی ناوەندی دیار دەکەوێت. خاڵی ناوەندی وێنە بە کرتە یان جێبەجیکردنی رێکبخەن.", + "upload_modal.preparing_ocr": "ئامادەکردنی OCR…", + "upload_modal.preview_label": "پێشبینی ({ratio})", + "upload_progress.label": "بارکردن...", + "video.close": "داخستنی ڤیدیۆ", + "video.download": "داگرتنی فایل", + "video.exit_fullscreen": "دەرچوون لە پڕ شاشە", + "video.expand": "ڤیدیۆفراوان بکە", + "video.fullscreen": "پڕپیشانگەر", + "video.hide": "شاردنەوەی ڤیدیۆ", + "video.mute": "دەنگی کپ", + "video.pause": "وەستان", + "video.play": "پەخشکردن", + "video.unmute": "دەنگ لابدە" } diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 8a0014e91..46dc0975d 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 41d983f48..f075731fe 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Pārlūkot vairāk sākotnējā profilā", "account.cancel_follow_request": "Atcelt pieprasījumu", "account.direct": "Privātā ziņa @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domēns ir paslēpts", "account.edit_profile": "Labot profilu", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Izcelts profilā", "account.follow": "Sekot", "account.followers": "Sekotāji", @@ -96,7 +98,7 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Publicēt", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "Mēdijs ir atzīmēts kā sensitīvs", "compose_form.sensitive.unmarked": "Mēdijs nav atzīmēts kā sensitīvs", "compose_form.spoiler.marked": "Teksts ir paslēpts aiz brīdinājuma", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Meklēšanas rezultāti", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Ceļošana & Vietas", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Šeit ziņojumu nav!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Tu neesi vēl nevienu bloķējis.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Tev nav paziņojumu. Iesaisties sarunās ar citiem.", "empty_column.public": "Šeit nekā nav, tukšums! Ieraksti kaut ko publiski, vai uzmeklē un seko kādam no citas instances", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizēt", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index aeaf7355c..6dac40e8b 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Одкажи барање за следење", "account.direct": "Директна порана @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Скриен домен", "account.edit_profile": "Измени профил", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Карактеристики на профилот", "account.follow": "Следи", "account.followers": "Следбеници", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Резултати од барање", "emoji_button.symbols": "Симболи", "emoji_button.travel": "Патувања и Места", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Недостапен профил", "empty_column.blocks": "Немате сеуште блокирано корисници.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Пријавете проблем", "follow_request.authorize": "Одобри", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Бустови:", "notifications.column_settings.show": "Прикажи во колона", "notifications.column_settings.sound": "Свири звуци", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Сите", "notifications.filter.boosts": "Бустови", "notifications.filter.favourites": "Омилени", "notifications.filter.follows": "Следења", "notifications.filter.mentions": "Спомнувања", "notifications.filter.polls": "Резултати од анкета", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} нотификации", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Затворени", "poll.refresh": "Освежи", "poll.total_people": "{count, plural, one {# човек} other {# луѓе}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 0c5a84204..4f44f3800 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -2,15 +2,17 @@ "account.account_note_header": "കുറിപ്പ്", "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ അല്ലെങ്കിൽ മാറ്റുകയോ ചെയ്യുക", "account.badges.bot": "റോബോട്ട്", - "account.badges.group": "കൂട്ടം", - "account.block": "@{name} നെ ബ്ലോക്ക് ചെയ്യുക", + "account.badges.group": "ഗ്രൂപ്പ്", + "account.block": "@{name} -നെ തടയുക", "account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക", "account.blocked": "തടഞ്ഞു", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക", "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക", "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", + "account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക", "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", + "account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക", "account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക", "account.follow": "പിന്തുടരുക", "account.followers": "പിന്തുടരുന്നവർ", @@ -36,7 +38,7 @@ "account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക", "account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കുവെക്കുക", "account.show_reblogs": "@{name} ൽ നിന്നുള്ള ബൂസ്റ്റുകൾ കാണിക്കുക", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} ടൂട്ട്} other {{counter} ടൂട്ടുകൾ}}", "account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}", "account.unblock_domain": "{domain} വെളിപ്പെടുത്തുക", "account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കാതിരിക്കുക", @@ -65,7 +67,7 @@ "column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ", "column.favourites": "പ്രിയപ്പെട്ടവ", "column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", - "column.home": "ഭവനം", + "column.home": "ഹോം", "column.lists": "പട്ടികകൾ", "column.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", "column.notifications": "അറിയിപ്പുകൾ", @@ -92,28 +94,28 @@ "compose_form.poll.duration": "തിരഞ്ഞെടുപ്പിന്റെ സമയദൈർഖ്യം", "compose_form.poll.option_placeholder": "ചോയ്സ് {number}", "compose_form.poll.remove_option": "ഈ ഡിവൈസ് മാറ്റുക", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "വോട്ടെടുപ്പിൽ ഒന്നിലധികം ചോയ്സുകൾ ഉൾപ്പെടുതുക", + "compose_form.poll.switch_to_single": "വോട്ടെടുപ്പിൽ ഒരൊറ്റ ചോയ്സ് മാത്രം ആക്കുക", "compose_form.publish": "ടൂട്ട്", - "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.publish_loud": "{പ്രസിദ്ധീകരിക്കുക}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "എഴുത്ത് മുന്നറിയിപ്പിനാൽ മറച്ചിരിക്കുന്നു", "compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല", "compose_form.spoiler_placeholder": "നിങ്ങളുടെ മുന്നറിയിപ്പ് ഇവിടെ എഴുതുക", "confirmation_modal.cancel": "റദ്ദാക്കുക", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "തടയുകയും റിപ്പോർട്ടും ചെയ്യുക", "confirmations.block.confirm": "തടയുക", - "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.block.message": "{name} തടയാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", "confirmations.delete.confirm": "മായ്ക്കുക", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "confirmations.delete_list.confirm": "മായ്ക്കുക", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", + "confirmations.domain_block.confirm": "മുഴുവൻ ഡൊമെയ്നും തടയുക", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "പുറത്തുകടക്കുക", - "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?", "confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -131,7 +133,7 @@ "directory.local": "{domain} ൽ നിന്ന് മാത്രം", "directory.new_arrivals": "പുതിയ വരവുകൾ", "directory.recently_active": "അടുത്തിടെയായി സജീവമായ", - "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.", "embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:", "emoji_button.activity": "പ്രവര്ത്തനം", "emoji_button.custom": "സ്വന്തമായ ഭേദഗതി", @@ -139,7 +141,7 @@ "emoji_button.food": "ഭക്ഷണവും പാനീയവും", "emoji_button.label": "ഇമോജി ചേർക്കുക", "emoji_button.nature": "പ്രകൃതി", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "ഇമോജി പാടില്ല (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "വസ്തുക്കൾ", "emoji_button.people": "ആളുകൾ", "emoji_button.recent": "അടിക്കടി ഉപയോഗിക്കുന്നവ", @@ -147,26 +149,29 @@ "emoji_button.search_results": "തിരച്ചിൽ ഫലങ്ങൾ", "emoji_button.symbols": "ചിഹ്നങ്ങൾ", "emoji_button.travel": "യാത്രയും സ്ഥലങ്ങളും", + "empty_column.account_suspended": "അക്കൗണ്ട് താൽക്കാലികമായി നിർത്തിവച്ചു", "empty_column.account_timeline": "ഇവിടെ ടൂട്ടുകൾ ഇല്ല!", "empty_column.account_unavailable": "പ്രൊഫൈൽ ലഭ്യമല്ല", "empty_column.blocks": "നിങ്ങൾ ഇതുവരെ ഒരു ഉപയോക്താക്കളെയും തടഞ്ഞിട്ടില്ല.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "നിങ്ങൾക് ഇതുവരെ അടയാളപ്പെടുത്തിയ ടൂട്ടുകൾ ഇല്ല. അടയാളപ്പെടുത്തിയാൽ അത് ഇവിടെ വരും.", "empty_column.community": "പ്രാദേശികമായ സമയരേഖ ശൂന്യമാണ്. എന്തെങ്കിലും പരസ്യമായി എഴുതി തുടക്കം കുറിക്കു!", "empty_column.direct": "നിങ്ങൾക്ക് ഇതുവരെ നേരിട്ടുള്ള സന്ദേശങ്ങൾ ഒന്നുമില്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് അയക്കുകയോ, നിങ്ങൾക്ക് ലഭിക്കുകയോ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.domain_blocks": "മറയ്ക്കപ്പെട്ടിരിക്കുന്ന മേഖലകൾ ഇതുവരെ ഇല്ല.", "empty_column.favourited_statuses": "നിങ്ങൾക്ക് ഇത് വരെ ഒരു പ്രിയപ്പെട്ട ടൂട്ടും ഇല്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് പ്രിയപ്പെടുന്ന പക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.favourites": "ഇതുവരെ ആരും ഈ ടൂട്ട് പ്രിയപ്പെട്ടതായി അടയാളപ്പെടുത്തിയിട്ടില്ല. ആരെങ്കിലും അങ്ങനെ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.hashtag": "ഈ ഹാഷ്ടാഗിൽ ഇതുവരെ ഒന്നുമില്ല.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home.public_timeline": "പൊതു സമയരേഖ", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.", "empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", @@ -174,7 +179,7 @@ "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.developers": "വികസിപ്പിക്കുന്നവർ", - "getting_started.directory": "രൂപരേഖ നാമഗൃഹസൂചി", + "getting_started.directory": "പ്രൊഫൈൽ ഡയറക്ടറി", "getting_started.documentation": "രേഖാ സമാഹരണം", "getting_started.heading": "തുടക്കം കുറിക്കുക", "getting_started.invite": "ആളുകളെ ക്ഷണിക്കുക", @@ -185,7 +190,7 @@ "hashtag.column_header.tag_mode.any": "അല്ലെങ്കിൽ {additional}", "hashtag.column_header.tag_mode.none": "{additional} ഇല്ലാതെ", "hashtag.column_settings.select.no_options_message": "ഒരു സൂചനയും കണ്ടെത്തിയില്ല", - "hashtag.column_settings.select.placeholder": "ചർച്ചാവിഷയങ്ങൾ എഴുതുക…", + "hashtag.column_settings.select.placeholder": "ഹാഷ്ടാഗുകൾ എഴുതുക…", "hashtag.column_settings.tag_mode.all": "ഇവയെല്ലാം", "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", @@ -201,7 +206,7 @@ "introduction.federation.action": "അടുത്തത്", "introduction.federation.federated.headline": "സംയുക്തമാക്കിയ", "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "ഭവനം", + "introduction.federation.home.headline": "ഹോം", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", "introduction.federation.local.headline": "പ്രാദേശികം", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", @@ -217,245 +222,265 @@ "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "ബൂസ്റ്റ് ചെയ്യുക", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "വിവരണം", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.enter": "ടൂട്ട് എടുക്കാൻ", "keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "കീബോർഡ് എളുപ്പവഴികൾ", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "ഹോം ടൈംലൈൻ തുറക്കുന്നതിന്", "keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.my_profile": "നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കാൻ", "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "മീഡിയ തുറക്കാൻ", "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.profile": "രചയിതാവിന്റെ പ്രൊഫൈൽ തുറക്കുന്നതിന്", + "keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.toggle_sensitivity": "മീഡിയ കാണിക്കുന്നതിനും/മറയ്ക്കുന്നതിനും", + "keyboard_shortcuts.toot": "ഒരു പുതിയ ടൂട്ട് ആരംഭിക്കാൻ", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", + "lightbox.close": "അടയ്ക്കുക", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "അടുത്തത്", + "lightbox.previous": "പുറകോട്ട്", + "lists.account.add": "പട്ടികയിലേക്ക് ചേർക്കുക", + "lists.account.remove": "പട്ടികയിൽ നിന്ന് ഒഴിവാക്കുക", + "lists.delete": "പട്ടിക ഒഴിവാക്കുക", + "lists.edit": "പട്ടിക തിരുത്തുക", + "lists.edit.submit": "തലക്കെട്ട് മാറ്റുക", + "lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "ആരുമില്ല", + "lists.replies_policy.title": "ഇതിനുള്ള മറുപടികൾ കാണിക്കുക:", "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lists.subheading": "എന്റെ പട്ടികകൾ", "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", + "loading_indicator.label": "ലോഡിംഗ്...", "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", - "missing_indicator.label": "Not found", + "missing_indicator.label": "കാണാനില്ല", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "കാലാവധി", "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "mute_modal.indefinite": "അനിശ്ചിതകാല", + "navigation_bar.apps": "മൊബൈൽ ആപ്പുകൾ", + "navigation_bar.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ", + "navigation_bar.bookmarks": "ബുക്ക്മാർക്കുകൾ", + "navigation_bar.community_timeline": "പ്രാദേശിക സമയരേഖ", + "navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക", + "navigation_bar.direct": "നേരിട്ടുള്ള സന്ദേശങ്ങൾ", + "navigation_bar.discover": "കണ്ടെത്തുക", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", + "navigation_bar.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", + "navigation_bar.favourites": "പ്രിയപ്പെട്ടവ", "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", + "navigation_bar.info": "ഈ സെർവറിനെക്കുറിച്ച്", "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", + "navigation_bar.lists": "ലിസ്റ്റുകൾ", + "navigation_bar.logout": "ലോഗൗട്ട്", + "navigation_bar.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", + "navigation_bar.preferences": "ക്രമീകരണങ്ങൾ", "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", + "navigation_bar.security": "സുരക്ഷ", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", + "notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു", "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", + "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", + "notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്തു", + "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", + "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", + "notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:", + "notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക", "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.show": "കാണിക്കുക", "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:", "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:", "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:", "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", + "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക", + "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:", + "notifications.filter.all": "എല്ലാം", + "notifications.filter.boosts": "ബൂസ്റ്റുകൾ", + "notifications.filter.favourites": "പ്രിയപ്പെട്ടവ", + "notifications.filter.follows": "പിന്തുടരുന്നു", "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "notifications.filter.polls": "പോൾ ഫലങ്ങൾ", + "notifications.filter.statuses": "നിങ്ങൾ പിന്തുടരുന്ന ആളുകളിൽ നിന്നുള്ള അപ്ഡേറ്റുകൾ", + "notifications.grant_permission": "അനുമതി നൽകുക.", + "notifications.group": "{count} അറിയിപ്പുകൾ", + "notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "തിരികെ വയ്ക്കുക", + "poll.closed": "അടച്ചു", + "poll.refresh": "പുതുക്കുക", "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", + "poll.vote": "വോട്ട് ചെയ്യുക", + "poll.voted": "ഈ ഉത്തരത്തിനായി നിങ്ങൾ വോട്ട് ചെയ്തു", + "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", + "poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക", + "privacy.change": "ടൂട്ട് സ്വകാര്യത ക്രമീകരിക്കുക", "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "നേരിട്ട്", "privacy.private.long": "Post to followers only", - "privacy.private.short": "Followers-only", + "privacy.private.short": "പിന്തുടരുന്നവർക്ക് മാത്രം", "privacy.public.long": "Post to public timelines", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "refresh": "പുതുക്കുക", + "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…", + "regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "ഇപ്പോൾ", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", + "relative_time.today": "ഇന്ന്", + "reply_indicator.cancel": "റദ്ദാക്കുക", "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.forward_hint": "ഈ അക്കൗണ്ട് മറ്റൊരു സെർവറിൽ നിന്നാണ്. റിപ്പോർട്ടിന്റെ അജ്ഞാത പകർപ്പ് അവിടെ അയയ്ക്കണോ?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", + "report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ", + "report.submit": "സമർപ്പിക്കുക", "report.target": "Report {target}", - "search.placeholder": "Search", + "search.placeholder": "തിരയുക", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.hashtag": "ഹാഷ്ടാഗ്", + "search_popout.tips.status": "ടൂട്ട്", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", + "search_popout.tips.user": "ഉപയോക്താവ്", + "search_results.accounts": "ആളുകൾ", + "search_results.hashtags": "ഹാഷ്ടാഗുകൾ", + "search_results.statuses": "ടൂട്ടുകൾ", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", + "status.block": "@{name} -നെ തടയുക", + "status.bookmark": "ബുക്ക്മാർക്ക്", "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", + "status.cannot_reblog": "ഈ പോസ്റ്റ് ബൂസ്റ്ചെയ്യാൻ കഴിയില്ല", + "status.copy": "ടൂട്ടിലേക്ക് ലിങ്ക് പകർത്തുക", "status.delete": "മായ്ക്കുക", "status.detailed_status": "വിശദമായ സംഭാഷണ കാഴ്ച", "status.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", "status.embed": "ഉൾച്ചേർക്കുക", "status.favourite": "പ്രിയപ്പെട്ടത്", - "status.filtered": "Filtered", + "status.filtered": "ഫിൽട്ടർ ചെയ്തു", "status.load_more": "കൂടുതൽ ലോഡു ചെയ്യുക", - "status.media_hidden": "Media hidden", + "status.media_hidden": "മീഡിയ മറച്ചു", "status.mention": "@{name} സൂചിപ്പിക്കുക", - "status.more": "More", - "status.mute": "Mute @{name}", + "status.more": "കൂടുതൽ", + "status.mute": "@{name}-നെ നിശ്ശബ്ദമാക്കുക", "status.mute_conversation": "Mute conversation", "status.open": "Expand this status", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost", + "status.read_more": "കൂടുതൽ വായിക്കുക", + "status.reblog": "ബൂസ്റ്റ്", "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", + "status.reblogged_by": "{name} ബൂസ്റ്റ് ചെയ്തു", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", + "status.redraft": "ഇല്ലാതാക്കുക & വീണ്ടും ഡ്രാഫ്റ്റ് ചെയ്യുക", + "status.remove_bookmark": "ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക", + "status.reply": "മറുപടി", "status.replyAll": "Reply to thread", - "status.report": "Report @{name}", + "status.report": "@{name}--നെ റിപ്പോർട്ട് ചെയ്യുക", "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", + "status.share": "പങ്കിടുക", + "status.show_less": "കുറച്ച് കാണിക്കുക", "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", + "status.show_more": "കൂടുതകൽ കാണിക്കുക", + "status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക", + "status.show_thread": "ത്രെഡ് കാണിക്കുക", + "status.uncached_media_warning": "ലഭ്യമല്ല", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", + "suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…", + "tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ", + "tabs_bar.home": "ഹോം", + "tabs_bar.local_timeline": "പ്രാദേശികം", + "tabs_bar.notifications": "അറിയിപ്പുകൾ", + "tabs_bar.search": "തിരയുക", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "പിന്തുടരുന്നവർ", + "timeline_hint.resources.follows": "പിന്തുടരുന്നു", + "timeline_hint.resources.statuses": "പഴയ ടൂട്ടുകൾ", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", + "trends.trending_now": "ഇപ്പോൾ ട്രെൻഡിംഗ്", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", - "units.short.million": "{count}M", + "units.short.million": "{count}ദശലക്ഷം", "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "File upload limit exceeded.", + "upload_area.title": "അപ്ലോഡുചെയ്യാൻ വലിച്ചിടുക", + "upload_button.label": "ഇമേജുകൾ, ഒരു വീഡിയോ അല്ലെങ്കിൽ ഓഡിയോ ഫയൽ ചേർക്കുക", + "upload_error.limit": "ഫയൽ അപ്ലോഡ് പരിധി കവിഞ്ഞു.", "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", + "upload_form.audio_description": "കേൾവിശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ", + "upload_form.description": "കാഴ്ചശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ", + "upload_form.edit": "തിരുത്തുക", + "upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക", + "upload_form.undo": "ഇല്ലാതാക്കുക", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "upload_modal.analyzing_picture": "ചിത്രം വിശകലനം ചെയ്യുന്നു…", + "upload_modal.apply": "പ്രയോഗിക്കുക", + "upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", + "upload_modal.edit_media": "മീഡിയ തിരുത്തുക", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "OCR തയ്യാറാക്കുന്നു…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", + "video.close": "വീഡിയോ അടയ്ക്കുക", + "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക", + "video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക", "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", + "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ", + "video.hide": "വീഡിയോ മറയ്ക്കുക", "video.mute": "Mute sound", "video.pause": "Pause", - "video.play": "Play", + "video.play": "പ്ലേ", "video.unmute": "Unmute sound" } diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index e07baddff..8559665b9 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "अनुयायी होण्याची विनंती रद्द करा", "account.direct": "थेट संदेश @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "प्रोफाइल एडिट करा", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "अनुयायी व्हा", "account.followers": "अनुयायी", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index ffac61ed0..ec992c679 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 7b94a4981..e19f0b6d3 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Meer op het originele profiel bekijken", "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "@{name} een direct bericht sturen", + "account.disable_notifications": "Geef geen melding meer wanneer @{name} toot", "account.domain_blocked": "Server verborgen", "account.edit_profile": "Profiel bewerken", + "account.enable_notifications": "Geef een melding wanneer @{name} toot", "account.endorse": "Op profiel weergeven", "account.follow": "Volgen", "account.followers": "Volgers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Poll wijzigen om een enkele keuze toe te staan", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Media als gevoelig markeren", - "compose_form.sensitive.marked": "Media is als gevoelig gemarkeerd", - "compose_form.sensitive.unmarked": "Media is niet als gevoelig gemarkeerd", + "compose_form.sensitive.hide": "{count, plural, one {Media als gevoelig markeren} other {Media als gevoelig markeren}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is als gevoelig gemarkeerd} other {Media is als gevoelig gemarkeerd}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is niet als gevoelig gemarkeerd} other {Media is niet als gevoelig gemarkeerd}}", "compose_form.spoiler.marked": "Tekst is achter een waarschuwing verborgen", "compose_form.spoiler.unmarked": "Tekst is niet verborgen", "compose_form.spoiler_placeholder": "Waarschuwingstekst", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en plekken", + "empty_column.account_suspended": "Account opgeschort", "empty_column.account_timeline": "Hier zijn geen toots!", "empty_column.account_unavailable": "Profiel is niet beschikbaar", "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.", "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen", "error.unexpected_crash.explanation": "Als gevolg van een bug in onze broncode of als gevolg van een compatibiliteitsprobleem met jouw webbrowser, kan deze pagina niet goed worden weergegeven.", + "error.unexpected_crash.explanation_addons": "Deze pagina kon niet correct geladen worden. Deze fout wordt waarschijnlijk door een browser-add-on of een automatische vertalingshulpmiddel veroorzaakt.", "error.unexpected_crash.next_steps": "Probeer deze pagina te vernieuwen. Wanneer dit niet helpt is het nog steeds mogelijk om Mastodon in een andere webbrowser of mobiele app te gebruiken.", + "error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", "follow_request.authorize": "Goedkeuren", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "om het tekst- en zoekvak te ontfocussen", "keyboard_shortcuts.up": "om omhoog te bewegen in de lijst", "lightbox.close": "Sluiten", + "lightbox.compress": "Afbeelding passend weergeven", + "lightbox.expand": "Afbeelding groot weergeven", "lightbox.next": "Volgende", "lightbox.previous": "Vorige", - "lightbox.view_context": "Context tonen", "lists.account.add": "Aan lijst toevoegen", "lists.account.remove": "Uit lijst verwijderen", "lists.delete": "Lijst verwijderen", @@ -260,6 +266,10 @@ "lists.edit.submit": "Titel veranderen", "lists.new.create": "Lijst toevoegen", "lists.new.title_placeholder": "Naam nieuwe lijst", + "lists.replies_policy.followed": "Elke gevolgde gebruiker", + "lists.replies_policy.list": "Leden van de lijst", + "lists.replies_policy.none": "Niemand", + "lists.replies_policy.title": "Toon reacties aan:", "lists.search": "Zoek naar mensen die je volgt", "lists.subheading": "Jouw lijsten", "load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Media verbergen", "missing_indicator.label": "Niet gevonden", "missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden", + "mute_modal.duration": "Duur", "mute_modal.hide_notifications": "Verberg meldingen van deze persoon?", + "mute_modal.indefinite": "Voor onbepaalde tijd", "navigation_bar.apps": "Mobiele apps", "navigation_bar.blocks": "Geblokkeerde gebruikers", "navigation_bar.bookmarks": "Bladwijzers", @@ -298,6 +310,7 @@ "notification.own_poll": "Jouw poll is beëindigd", "notification.poll": "Een poll waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw toot", + "notification.status": "{name} heeft zojuist een toot geplaatst", "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", "notifications.column_settings.alert": "Desktopmeldingen", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.sound": "Geluid afspelen", + "notifications.column_settings.status": "Nieuwe toots:", "notifications.filter.all": "Alles", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favorieten", "notifications.filter.follows": "Die jij volgt", "notifications.filter.mentions": "Vermeldingen", "notifications.filter.polls": "Pollresultaten", + "notifications.filter.statuses": "Updates van mensen die je volgt", + "notifications.grant_permission": "Toestemming geven.", "notifications.group": "{count} meldingen", + "notifications.mark_as_read": "Markeer elke melding als gelezen", + "notifications.permission_denied": "Desktopmeldingen zijn niet beschikbaar omdat een eerdere browsertoestemming werd geweigerd", + "notifications.permission_denied_alert": "Desktopmeldingen kunnen niet worden ingeschakeld, omdat een eerdere browsertoestemming werd geweigerd", + "notifications.permission_required": "Desktopmeldingen zijn niet beschikbaar omdat de benodigde toestemming niet is verleend.", + "notifications_permission_banner.enable": "Desktopmeldingen inschakelen", + "notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open is. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.", + "notifications_permission_banner.title": "Mis nooit meer iets", + "picture_in_picture.restore": "Terugzetten", "poll.closed": "Gesloten", "poll.refresh": "Vernieuwen", "poll.total_people": "{count, plural, one {# persoon} other {# mensen}}", @@ -426,9 +450,9 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten", "trends.trending_now": "Trends", "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} mrd.", + "units.short.million": "{count} mln.", + "units.short.thousand": "{count}k", "upload_area.title": "Hiernaar toe slepen om te uploaden", "upload_button.label": "Afbeeldingen, een video- of een geluidsbestand toevoegen", "upload_error.limit": "Uploadlimiet van bestand overschreden.", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Tekst in een afbeelding detecteren", "upload_modal.edit_media": "Media bewerken", "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal punt dat op elke thumbnail zichtbaar moet blijven.", + "upload_modal.preparing_ocr": "OCR voorbereiden…", "upload_modal.preview_label": "Voorvertoning ({ratio})", "upload_progress.label": "Uploaden...", "video.close": "Video sluiten", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index b567a3533..38a95533c 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Merknad", "account.add_or_remove_from_list": "Legg til eller tak vekk frå listene", "account.badges.bot": "Robot", "account.badges.group": "Gruppe", "account.block": "Blokker @{name}", "account.block_domain": "Skjul alt frå {domain}", "account.blocked": "Blokkert", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Sjå gjennom meir på den opphavlege profilen", "account.cancel_follow_request": "Fjern fylgjeførespurnad", "account.direct": "Send melding til @{name}", + "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", "account.domain_blocked": "Domenet er gøymt", "account.edit_profile": "Rediger profil", + "account.enable_notifications": "Varsle meg når @{name} legger ut innlegg", "account.endorse": "Framhev på profil", "account.follow": "Fylg", "account.followers": "Fylgjarar", "account.followers.empty": "Ingen fylgjer denne brukaren enno.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}", + "account.following_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjar}}", "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", "account.follows_you": "Fylgjer deg", "account.hide_reblogs": "Gøym fremhevingar frå @{name}", @@ -36,14 +38,14 @@ "account.requested": "Ventar på samtykke. Klikk for å avbryta fylgjeførespurnaden", "account.share": "Del @{name} sin profil", "account.show_reblogs": "Vis framhevingar frå @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tut}}", "account.unblock": "Slutt å blokera @{name}", "account.unblock_domain": "Vis {domain}", "account.unendorse": "Ikkje framhev på profil", "account.unfollow": "Slutt å fylgja", "account.unmute": "Av-demp @{name}", "account.unmute_notifications": "Vis varsel frå @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Klikk for å leggja til merknad", "alert.rate_limited.message": "Ver venleg å prøva igjen etter {retry_time, time, medium}.", "alert.rate_limited.title": "Begrensa rate", "alert.unexpected.message": "Eit uventa problem oppstod.", @@ -54,7 +56,7 @@ "bundle_column_error.body": "Noko gjekk gale mens denne komponenten vart lasta ned.", "bundle_column_error.retry": "Prøv igjen", "bundle_column_error.title": "Nettverksfeil", - "bundle_modal_error.close": "Lukk", + "bundle_modal_error.close": "Lat att", "bundle_modal_error.message": "Noko gjekk gale under lastinga av denne komponenten.", "bundle_modal_error.retry": "Prøv igjen", "column.blocks": "Blokkerte brukarar", @@ -79,9 +81,9 @@ "column_header.show_settings": "Vis innstillingar", "column_header.unpin": "Løys", "column_subheading.settings": "Innstillingar", - "community.column_settings.local_only": "Kun lokalt", + "community.column_settings.local_only": "Berre lokalt", "community.column_settings.media_only": "Berre media", - "community.column_settings.remote_only": "Kun eksternt", + "community.column_settings.remote_only": "Berre eksternt", "compose_form.direct_message_warning": "Dette tutet vert berre synleg for nemnde brukarar.", "compose_form.direct_message_warning_learn_more": "Lær meir", "compose_form.hashtag_warning": "Dette tutet vert ikkje oppført under nokon emneknagg sidan det ikkje er oppført. Berre offentlege tut kan verta søkt etter med emneknagg.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symbol", "emoji_button.travel": "Reise & stader", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ingen tut her!", "empty_column.account_unavailable": "Profil ikkje tilgjengelig", "empty_column.blocks": "Du har ikkje blokkert nokon brukarar enno.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Du har ingen varsel ennå. Kommuniser med andre for å starte samtalen.", "empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller følg brukarar frå andre tenarar manuelt for å fylle det opp", "error.unexpected_crash.explanation": "På grunn av ein feil i vår kode eller eit nettlesarkompatibilitetsproblem, kunne ikkje denne sida verte vist korrekt.", + "error.unexpected_crash.explanation_addons": "Denne siden kunne ikke vises riktig. Denne feilen er sannsynligvis forårsaket av en nettleserutvidelse eller automatiske oversettelsesverktøy.", "error.unexpected_crash.next_steps": "Prøv å lasta inn sida på nytt. Om det ikkje hjelper så kan du framleis nytta Mastodon i ein annan nettlesar eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", - "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte {domain} tilsette at du ville gå gjennom førespurnadar frå desse kontoane manuelt.", + "generic.saved": "Lagra", "getting_started.developers": "Utviklarar", "getting_started.directory": "Profilkatalog", "getting_started.documentation": "Dokumentasjon", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "for å svara", "keyboard_shortcuts.requests": "for å opna lista med fylgjeførespurnader", "keyboard_shortcuts.search": "for å fokusera søket", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "for å visa/gøyma CW-felt", "keyboard_shortcuts.start": "for å opna \"kom i gang\"-feltet", "keyboard_shortcuts.toggle_hidden": "for å visa/gøyma tekst bak innhaldsvarsel", "keyboard_shortcuts.toggle_sensitivity": "for å visa/gøyma media", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "for å flytta seg opp på lista", "lightbox.close": "Lukk att", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Neste", "lightbox.previous": "Førre", - "lightbox.view_context": "Sjå kontekst", "lists.account.add": "Legg til i liste", "lists.account.remove": "Fjern frå liste", "lists.delete": "Slett liste", @@ -260,6 +266,10 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk gjennom folk du følgjer", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nytt element} other {# nye element}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Gjer synleg/usynleg", "missing_indicator.label": "Ikkje funne", "missing_indicator.sublabel": "Fann ikkje ressursen", + "mute_modal.duration": "Varighet", "mute_modal.hide_notifications": "Gøyme varsel frå denne brukaren?", + "mute_modal.indefinite": "På ubestemt tid", "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blokkerte brukarar", "navigation_bar.bookmarks": "Bokmerke", @@ -298,6 +310,7 @@ "notification.own_poll": "Rundspørjinga di er ferdig", "notification.poll": "Ei rundspørjing du har røysta i er ferdig", "notification.reblog": "{name} framheva statusen din", + "notification.status": "{name} la nettopp ut", "notifications.clear": "Tøm varsel", "notifications.clear_confirmation": "Er du sikker på at du vil fjerna alle varsla dine for alltid?", "notifications.column_settings.alert": "Skrivebordsvarsel", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Framhevingar:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spel av lyd", + "notifications.column_settings.status": "Nye tuter:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", "notifications.filter.favourites": "Favorittar", "notifications.filter.follows": "Fylgjer", "notifications.filter.mentions": "Nemningar", "notifications.filter.polls": "Røysteresultat", + "notifications.filter.statuses": "Oppdateringer fra folk du følger", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} varsel", + "notifications.mark_as_read": "Merk alle varsler som lest", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Aldri gå glipp av noe", + "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukka", "poll.refresh": "Oppdater", "poll.total_people": "{count, plural, one {# person} other {# folk}}", @@ -419,33 +443,34 @@ "time_remaining.minutes": "{number, plural, one {# minutt} other {# minutt}} igjen", "time_remaining.moments": "Kort tid igjen", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekund}} igjen", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} frå andre tenarar synest ikkje.", + "timeline_hint.resources.followers": "Fylgjarar", + "timeline_hint.resources.follows": "Fylgjer", + "timeline_hint.resources.statuses": "Eldre tut", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} folk}} pratar", "trends.trending_now": "Populært no", "ui.beforeunload": "Kladden din forsvinn om du forlèt Mastodon no.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & slepp for å lasta opp", - "upload_button.label": "Legg til medium ({formats})", + "upload_button.label": "Legg til medium", "upload_error.limit": "Du har gått over opplastingsgrensa.", "upload_error.poll": "Filopplasting ikkje tillate med meiningsmålingar.", "upload_form.audio_description": "Grei ut for folk med nedsett høyrsel", "upload_form.description": "Skildr for synshemja", "upload_form.edit": "Rediger", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Bytt miniatyrbilete", "upload_form.undo": "Slett", "upload_form.video_description": "Greit ut for folk med nedsett høyrsel eller syn", "upload_modal.analyzing_picture": "Analyserer bilete…", "upload_modal.apply": "Bruk", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Vel bilete", "upload_modal.description_placeholder": "Ein rask brun rev hoppar over den late hunden", "upload_modal.detect_text": "Gjenkjenn tekst i biletet", "upload_modal.edit_media": "Rediger medium", "upload_modal.hint": "Klikk og dra sirkelen på førehandsvisninga for å velge fokuspunktet som alltid vil vere synleg på alle miniatyrbileta.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Førehandsvis ({ratio})", "upload_progress.label": "Lastar opp...", "video.close": "Lukk video", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index a15e96fdc..e64bf4a5a 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Notis", "account.add_or_remove_from_list": "Legg til eller fjern fra lister", "account.badges.bot": "Bot", "account.badges.group": "Gruppe", "account.block": "Blokkér @{name}", "account.block_domain": "Skjul alt fra {domain}", "account.blocked": "Blokkert", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Bla mer på den opprinnelige profilen", "account.cancel_follow_request": "Avbryt følge forespørsel", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", "account.domain_blocked": "Domenet skjult", "account.edit_profile": "Rediger profil", + "account.enable_notifications": "Varsle meg når @{name} legger ut innlegg", "account.endorse": "Vis frem på profilen", "account.follow": "Følg", "account.followers": "Følgere", "account.followers.empty": "Ingen følger denne brukeren ennå.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} følger} other {{counter} følgere}}", + "account.following_counter": "{count, plural, one {{counter} som følges} other {{counter} som følges}}", "account.follows.empty": "Denne brukeren følger ikke noen enda.", "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", @@ -36,14 +38,14 @@ "account.requested": "Venter på godkjennelse", "account.share": "Del @{name}s profil", "account.show_reblogs": "Vis boosts fra @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tuter}}", "account.unblock": "Avblokker @{name}", "account.unblock_domain": "Vis {domain}", "account.unendorse": "Ikke vis frem på profilen", "account.unfollow": "Avfølg", "account.unmute": "Avdemp @{name}", "account.unmute_notifications": "Vis varsler fra @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Klikk for å legge til et notat", "alert.rate_limited.message": "Vennligst prøv igjen etter kl. {retry_time, time, medium}.", "alert.rate_limited.title": "Hastighetsbegrenset", "alert.unexpected.message": "En uventet feil oppstod.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Reise & steder", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ingen tuter er her!", "empty_column.account_unavailable": "Profilen er utilgjengelig", "empty_column.blocks": "Du har ikke blokkert noen brukere enda.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.", "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp", "error.unexpected_crash.explanation": "På grunn av en bug i koden vår eller et nettleserkompatibilitetsproblem, kunne denne siden ikke vises riktig.", + "error.unexpected_crash.explanation_addons": "Denne siden kunne ikke vises riktig. Denne feilen er sannsynligvis forårsaket av en nettleserutvidelse eller automatiske oversettelsesverktøy.", "error.unexpected_crash.next_steps": "Prøv å oppfriske siden. Dersom det ikke hjelper, vil du kanskje fortsatt kunne bruke Mastodon gjennom en annen nettleser eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", "follow_request.authorize": "Autorisér", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", - "generic.saved": "Saved", + "generic.saved": "Lagret", "getting_started.developers": "Utviklere", "getting_started.directory": "Profilmappe", "getting_started.documentation": "Dokumentasjon", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "å ufokusere komponerings-/søkefeltet", "keyboard_shortcuts.up": "å flytte opp i listen", "lightbox.close": "Lukk", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Neste", "lightbox.previous": "Forrige", - "lightbox.view_context": "Vis sammenheng", "lists.account.add": "Legg til i listen", "lists.account.remove": "Fjern fra listen", "lists.delete": "Slett listen", @@ -260,6 +266,10 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Ligg til liste", "lists.new.title_placeholder": "Ny listetittel", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk blant personer du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural,one {# ny gjenstand} other {# nye gjenstander}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Veksle synlighet", "missing_indicator.label": "Ikke funnet", "missing_indicator.sublabel": "Denne ressursen ble ikke funnet", + "mute_modal.duration": "Varighet", "mute_modal.hide_notifications": "Skjul varslinger fra denne brukeren?", + "mute_modal.indefinite": "På ubestemt tid", "navigation_bar.apps": "Mobilapper", "navigation_bar.blocks": "Blokkerte brukere", "navigation_bar.bookmarks": "Bokmerker", @@ -298,6 +310,7 @@ "notification.own_poll": "Avstemningen din er ferdig", "notification.poll": "En avstemning du har stemt på har avsluttet", "notification.reblog": "{name} fremhevde din status", + "notification.status": "{name} la nettopp ut", "notifications.clear": "Fjern varsler", "notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?", "notifications.column_settings.alert": "Skrivebordsvarslinger", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", + "notifications.column_settings.status": "Nye tuter:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Fremhevinger", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følginger", "notifications.filter.mentions": "Nevnelser", "notifications.filter.polls": "Avstemningsresultater", + "notifications.filter.statuses": "Oppdateringer fra folk du følger", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} varslinger", + "notifications.mark_as_read": "Merk alle varsler som lest", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Aldri gå glipp av noe", + "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukket", "poll.refresh": "Oppdater", "poll.total_people": "{count, plural, one {# person} other {# personer}}", @@ -420,15 +444,15 @@ "time_remaining.moments": "Gjenværende øyeblikk", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} igjen", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.resources.followers": "Følgere", + "timeline_hint.resources.follows": "Følger", + "timeline_hint.resources.statuses": "Eldre tuter", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} snakker", "trends.trending_now": "Trender nå", "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}m.ard", + "units.short.million": "{count}mill", + "units.short.thousand": "{count}T", "upload_area.title": "Dra og slipp for å laste opp", "upload_button.label": "Legg til media", "upload_error.limit": "Filopplastingsgrensen er oversteget.", @@ -436,16 +460,17 @@ "upload_form.audio_description": "Beskriv det for folk med hørselstap", "upload_form.description": "Beskriv for synshemmede", "upload_form.edit": "Rediger", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Endre miniatyrbilde", "upload_form.undo": "Angre", "upload_form.video_description": "Beskriv det for folk med hørselstap eller synshemminger", "upload_modal.analyzing_picture": "Analyserer bildet …", "upload_modal.apply": "Bruk", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Velg et bilde", "upload_modal.description_placeholder": "Når du en gang kommer, neste sommer, skal vi atter drikke vin", "upload_modal.detect_text": "Oppdag tekst i bildet", "upload_modal.edit_media": "Rediger media", "upload_modal.hint": "Klikk eller dra sirkelen i forhåndsvisningen for å velge hovedpunktet som alltid vil bli vist i alle miniatyrbilder.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Laster opp...", "video.close": "Lukk video", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 1aa0193a5..f56d337d3 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "Navigar sul perfil original", "account.cancel_follow_request": "Anullar la demanda de seguiment", "account.direct": "Escriure un MP a @{name}", + "account.disable_notifications": "Quitar de m’avisar quand @{name} publica quicòm", "account.domain_blocked": "Domeni amagat", "account.edit_profile": "Modificar lo perfil", + "account.enable_notifications": "M’avisar quand @{name} publica quicòm", "account.endorse": "Mostrar pel perfil", "account.follow": "Sègre", "account.followers": "Seguidors", "account.followers.empty": "Degun sèc pas aqueste utilizaire pel moment.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}", + "account.following_counter": "{count, plural, one {{counter} Abonaments} other {{counter} Abonaments}}", "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.", "account.follows_you": "Vos sèc", "account.hide_reblogs": "Rescondre los partatges de @{name}", @@ -36,7 +38,7 @@ "account.requested": "Invitacion mandada. Clicatz per anullar", "account.share": "Partejar lo perfil a @{name}", "account.show_reblogs": "Mostrar los partatges de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Tut} other {{counter} Tuts}}", "account.unblock": "Desblocar @{name}", "account.unblock_domain": "Desblocar {domain}", "account.unendorse": "Mostrar pas pel perfil", @@ -85,7 +87,7 @@ "compose_form.direct_message_warning": "Sols los mencionats poiràn veire aqueste tut.", "compose_form.direct_message_warning_learn_more": "Ne saber mai", "compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap d’etiqueta estant qu’es pas listat. Òm pòt pas cercar que los tuts publics per etiqueta.", - "compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo monde pòt vos sègre e veire los estatuts reservats als seguidors.", + "compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.", "compose_form.lock_disclaimer.lock": "clavat", "compose_form.placeholder": "A de qué pensatz ?", "compose_form.poll.add_option": "Ajustar una causida", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Resultats de recèrca", "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", + "empty_column.account_suspended": "Compte suspendut", "empty_column.account_timeline": "Cap de tuts aquí !", "empty_column.account_unavailable": "Perfil pas disponible", "empty_column.blocks": "Avètz pas blocat degun pel moment.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.", "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autres servidors per garnir lo flux public", "error.unexpected_crash.explanation": "A causa d’una avaria dins nòstre còdi o d’un problèma de compatibilitat de navegador, aquesta pagina se pòt pas afichar corrèctament.", + "error.unexpected_crash.explanation_addons": "Aquesta pagina podiá pas s’afichar corrèctament. Aquesta error arriba sovent a causa d’un modul complementari de navigador o una aisina de traduccion automatica.", "error.unexpected_crash.next_steps": "Ensajatz d’actualizar la pagina. S’aquò càmbia pas res, podètz provar d’utilizar Mastodon via un navegador diferent o d’una aplicacion nativa estant.", + "error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", "follow_request.authorize": "Acceptar", @@ -177,7 +182,7 @@ "getting_started.directory": "Annuari de perfils", "getting_started.documentation": "Documentacion", "getting_started.heading": "Per començar", - "getting_started.invite": "Convidar de monde", + "getting_started.invite": "Convidar de mond", "getting_started.open_source_notice": "Mastodon es un logicial liure. Podètz contribuir e mandar vòstres comentaris e rapòrt de bug via {github} sus GitHub.", "getting_started.security": "Seguretat", "getting_started.terms": "Condicions d’utilizacion", @@ -202,9 +207,9 @@ "introduction.federation.federated.headline": "Federat", "introduction.federation.federated.text": "Los tuts publics d’autres servidors del fediverse apareisseràn dins lo flux d’actualitats.", "introduction.federation.home.headline": "Acuèlh", - "introduction.federation.home.text": "Los tuts del monde que seguètz apareisseràn dins vòstre flux d’acuèlh. Podètz sègre de monde ont que siasquen !", + "introduction.federation.home.text": "Los tuts del mond que seguètz apareisseràn dins vòstre flux d’acuèlh. Podètz sègre de mond ont que siasquen !", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los tuts publics del monde del meteis servidor que vosautres apareisseràn dins lo flux local.", + "introduction.federation.local.text": "Los tuts publics del mond del meteis servidor que vosautres apareisseràn dins lo flux local.", "introduction.interactions.action": "Acabar la leiçon !", "introduction.interactions.favourite.headline": "Favorit", "introduction.interactions.favourite.text": "Podètz enregistrar un tut per mai tard, e avisar l’autor que l’avètz aimat, en l’ajustant als favorits.", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", "keyboard_shortcuts.up": "far montar dins la lista", "lightbox.close": "Tampar", + "lightbox.compress": "Fenèstra de visualizacion dels imatges compressats", + "lightbox.expand": "Espandir la fenèstra de visualizacion d’imatge", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", - "lightbox.view_context": "Veire lo contèxt", "lists.account.add": "Ajustar a la lista", "lists.account.remove": "Levar de la lista", "lists.delete": "Suprimir la lista", @@ -260,14 +266,20 @@ "lists.edit.submit": "Cambiar lo títol", "lists.new.create": "Ajustar una lista", "lists.new.title_placeholder": "Títol de la nòva lista", - "lists.search": "Cercar demest lo monde que seguètz", + "lists.replies_policy.followed": "Quin seguidor que siá", + "lists.replies_policy.list": "Membres de la lista", + "lists.replies_policy.none": "Degun", + "lists.replies_policy.title": "Mostrar las responsas a :", + "lists.search": "Cercar demest lo mond que seguètz", "lists.subheading": "Vòstras listas", "load_pending": "{count, plural, one {# nòu element} other {# nòu elements}}", "loading_indicator.label": "Cargament…", "media_gallery.toggle_visible": "Modificar la visibilitat", "missing_indicator.label": "Pas trobat", "missing_indicator.sublabel": "Aquesta ressorsa es pas estada trobada", + "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?", + "mute_modal.indefinite": "Cap de data de fin", "navigation_bar.apps": "Aplicacions mobil", "navigation_bar.blocks": "Personas blocadas", "navigation_bar.bookmarks": "Marcadors", @@ -298,6 +310,7 @@ "notification.own_poll": "Vòstre sondatge es acabat", "notification.poll": "Avètz participat a un sondatge que ven de s’acabar", "notification.reblog": "{name} a partejat vòstre estatut", + "notification.status": "{name} ven de publicar", "notifications.clear": "Escafar", "notifications.clear_confirmation": "Volètz vertadièrament escafar totas vòstras las notificacions ?", "notifications.column_settings.alert": "Notificacions localas", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Partatges :", "notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.sound": "Emetre un son", + "notifications.column_settings.status": "Tuts novèls :", "notifications.filter.all": "Totas", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favorits", "notifications.filter.follows": "Seguiments", "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats del sondatge", + "notifications.filter.statuses": "Mesas a jorn del monde que seguissètz", + "notifications.grant_permission": "Acordar l’autorizacion.", "notifications.group": "{count} notificacions", + "notifications.mark_as_read": "Marcar totas las notificacions coma legidas", + "notifications.permission_denied": "Las notificacion burèu son pas disponiblas a causa del refús de las demandas d’autorizacion navigador", + "notifications.permission_denied_alert": "Las notificacions burèu son pas activada, per çò que las autorizacions son estadas refusada abans", + "notifications.permission_required": "Las notificacions de burèu son pas indisponiblas perque las permissions requeridas son pas estadas acordadas.", + "notifications_permission_banner.enable": "Activar las notificacions burèu", + "notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.", + "notifications_permission_banner.title": "Manquetz pas jamai res", + "picture_in_picture.restore": "Lo tornar", "poll.closed": "Tampat", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", @@ -423,7 +447,7 @@ "timeline_hint.resources.followers": "Seguidors", "timeline_hint.resources.follows": "Abonaments", "timeline_hint.resources.statuses": "Tuts mai ancians", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona ne parla} other {{counter} personas ne parlan}}", "trends.trending_now": "Tendéncia del moment", "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.", "units.short.billion": "{count}B", @@ -436,16 +460,17 @@ "upload_form.audio_description": "Descriure per las personas amb pèrdas auditivas", "upload_form.description": "Descripcion pels mal vesents", "upload_form.edit": "Modificar", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Cambiar la vinheta", "upload_form.undo": "Suprimir", "upload_form.video_description": "Descriure per las personas amb pèrdas auditivas o mal vesent", "upload_modal.analyzing_picture": "Analisi de l’imatge…", "upload_modal.apply": "Aplicar", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Causir un imatge", "upload_modal.description_placeholder": "Lo dròlle bilingüe manja un yaourt de ròcs exagonals e kiwis verds farà un an mai", "upload_modal.detect_text": "Detectar lo tèxt de l’imatge", "upload_modal.edit_media": "Modificar lo mèdia", "upload_modal.hint": "Clicatz o lisatz lo cercle de l’apercebut per causir lo ponch que serà totjorn visible dins las vinhetas.", + "upload_modal.preparing_ocr": "Preparacion de la ROC…", "upload_modal.preview_label": "Apercebut ({ratio})", "upload_progress.label": "Mandadís…", "video.close": "Tampar la vidèo", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 4e0230b75..0af58e351 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Notatka", "account.add_or_remove_from_list": "Dodaj lub usuń z list", "account.badges.bot": "Bot", "account.badges.group": "Grupa", @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "Zobacz więcej na oryginalnym profilu", "account.cancel_follow_request": "Zrezygnuj z prośby o możliwość śledzenia", "account.direct": "Wyślij wiadomość bezpośrednią do @{name}", + "account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", - "account.endorse": "Polecaj na profilu", + "account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}", + "account.endorse": "Wyróżnij na profilu", "account.follow": "Śledź", "account.followers": "Śledzący", "account.followers.empty": "Nikt jeszcze nie śledzi tego użytkownika.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} śledzący} few {{counter} śledzących} many {{counter} śledzących} other {{counter} śledzących}}", + "account.following_counter": "{count, plural, one {{counter} śledzony} few {{counter} śledzonych} many {{counter} śledzonych} other {{counter} śledzonych}}", "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.", "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", @@ -36,14 +38,14 @@ "account.requested": "Oczekująca prośba, kliknij aby anulować", "account.share": "Udostępnij profil @{name}", "account.show_reblogs": "Pokazuj podbicia od @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", "account.unblock": "Odblokuj @{name}", "account.unblock_domain": "Odblokuj domenę {domain}", "account.unendorse": "Przestań polecać", "account.unfollow": "Przestań śledzić", "account.unmute": "Cofnij wyciszenie @{name}", "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Naciśnij aby dodać notatkę", "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", "alert.rate_limited.title": "Ograniczony czasowo", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", + "empty_column.account_suspended": "Konto zawieszone", "empty_column.account_timeline": "Brak wpisów tutaj!", "empty_column.account_unavailable": "Profil niedostępny", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", + "error.unexpected_crash.explanation_addons": "Ta strona nie mogła zostać poprawnie wyświetlona. Może to być spowodowane dodatkiem do przeglądarki lub narzędziem do automatycznego tłumaczenia.", "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.", + "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "follow_request.authorize": "Autoryzuj", "follow_request.reject": "Odrzuć", "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość śledzenia.", - "generic.saved": "Saved", + "generic.saved": "Zapisano", "getting_started.developers": "Dla programistów", "getting_started.directory": "Katalog profilów", "getting_started.documentation": "Dokumentacja", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", "keyboard_shortcuts.up": "aby przejść na górę listy", "lightbox.close": "Zamknij", + "lightbox.compress": "Zmniejsz pole widoku obrazu", + "lightbox.expand": "Rozwiń pole widoku obrazu", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", - "lightbox.view_context": "Pokaż kontekst", "lists.account.add": "Dodaj do listy", "lists.account.remove": "Usunąć z listy", "lists.delete": "Usuń listę", @@ -260,6 +266,10 @@ "lists.edit.submit": "Zmień tytuł", "lists.new.create": "Utwórz listę", "lists.new.title_placeholder": "Wprowadź tytuł listy", + "lists.replies_policy.followed": "Dowolny obserwowany użytkownik", + "lists.replies_policy.list": "Członkowie listy", + "lists.replies_policy.none": "Nikt", + "lists.replies_policy.title": "Pokazuj odpowiedzi dla:", "lists.search": "Szukaj wśród osób które śledzisz", "lists.subheading": "Twoje listy", "load_pending": "{count, plural, one {# nowy przedmiot} other {nowe przedmioty}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Przełącz widoczność", "missing_indicator.label": "Nie znaleziono", "missing_indicator.sublabel": "Nie można odnaleźć tego zasobu", + "mute_modal.duration": "Czas", "mute_modal.hide_notifications": "Chcesz ukryć powiadomienia od tego użytkownika?", + "mute_modal.indefinite": "Nieokreślony", "navigation_bar.apps": "Aplikacje mobilne", "navigation_bar.blocks": "Zablokowani użytkownicy", "navigation_bar.bookmarks": "Zakładki", @@ -298,6 +310,7 @@ "notification.own_poll": "Twoje głosowanie zakończyło się", "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyła się", "notification.reblog": "{name} podbił(a) Twój wpis", + "notification.status": "{name} właśnie utworzył(a) wpis", "notifications.clear": "Wyczyść powiadomienia", "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", "notifications.column_settings.alert": "Powiadomienia na pulpicie", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", + "notifications.column_settings.status": "Nowe wpisy:", "notifications.filter.all": "Wszystkie", "notifications.filter.boosts": "Podbicia", "notifications.filter.favourites": "Ulubione", "notifications.filter.follows": "Śledzenia", "notifications.filter.mentions": "Wspomienia", "notifications.filter.polls": "Wyniki głosowania", + "notifications.filter.statuses": "Aktualizacje od osób które obserwujesz", + "notifications.grant_permission": "Przyznaj uprawnienia.", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", + "notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane", + "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", + "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", + "notifications.permission_required": "Powiadomienia na pulpicie nie są dostępne, ponieważ nie przyznano wymaganego uprawnienia.", + "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", + "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", + "notifications_permission_banner.title": "Nie przegap niczego", + "picture_in_picture.restore": "Odłóż", "poll.closed": "Zamknięte", "poll.refresh": "Odśwież", "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", @@ -423,12 +447,12 @@ "timeline_hint.resources.followers": "Śledzący", "timeline_hint.resources.follows": "Śledzeni", "timeline_hint.resources.statuses": "Starsze wpisy", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "rozmawiają: {count, plural, one {{counter} osoba} few {{counter} osoby} many {{counter} osób} other {{counter} osoby}}", "trends.trending_now": "Popularne teraz", "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} mld", + "units.short.million": "{count} mln", + "units.short.thousand": "{count} tys.", "upload_area.title": "Przeciągnij i upuść aby wysłać", "upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Przekroczono limit plików do wysłania.", @@ -436,16 +460,17 @@ "upload_form.audio_description": "Opisz dla osób niesłyszących i niedosłyszących", "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących", "upload_form.edit": "Edytuj", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Zmień miniaturę", "upload_form.undo": "Usuń", "upload_form.video_description": "Opisz dla osób niesłyszących, niedosłyszących, niewidomych i niedowidzących", "upload_modal.analyzing_picture": "Analizowanie obrazu…", "upload_modal.apply": "Zastosuj", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Wybierz obraz", "upload_modal.description_placeholder": "Pchnąć w tę łódź jeża lub ośm skrzyń fig", - "upload_modal.detect_text": "Wykryj tekst ze obrazu", + "upload_modal.detect_text": "Wykryj tekst z obrazu", "upload_modal.edit_media": "Edytuj multimedia", "upload_modal.hint": "Kliknij lub przeciągnij kółko na podglądzie by wybrać centralny punkt, który zawsze będzie na widoku na miniaturce.", + "upload_modal.preparing_ocr": "Przygotowywanie OCR…", "upload_modal.preview_label": "Podgląd ({ratio})", "upload_progress.label": "Wysyłanie…", "video.close": "Zamknij film", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 016d98b93..65d5815ed 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Encontre mais no perfil original", "account.cancel_follow_request": "Cancelar solicitação para seguir", "account.direct": "Enviar toot direto para @{name}", + "account.disable_notifications": "Parar de me notificar quando @{name} fizer publicações", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notificar-me quando @{name} fizer publicações", "account.endorse": "Destacar no perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagem & Lugares", + "empty_column.account_suspended": "Conta suspensa", "empty_column.account_timeline": "Nada aqui!", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Nada aqui.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Nada aqui. Interaja com outros usuários para começar a conversar.", "empty_column.public": "Não há nada aqui! Escreva algo publicamente, ou siga manualmente usuários de outros servidores para enchê-la", "error.unexpected_crash.explanation": "Devido a um bug em nosso código ou um problema de compatibilidade de navegador, esta página não pôde ser exibida corretamente.", + "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", "error.unexpected_crash.next_steps": "Tente atualizar a página. Se não resolver, você ainda pode conseguir usar o Mastodon por meio de um navegador ou app nativo diferente.", + "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para área de transferência", "errors.unexpected_crash.report_issue": "Denunciar problema", "follow_request.authorize": "Aprovar", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "para desfocar de área de texto de composição/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", + "lightbox.compress": "Compactar caixa de visualização de imagem", + "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", "lists.delete": "Excluir lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Renomear", "lists.new.create": "Criar lista", "lists.new.title_placeholder": "Nome da lista", + "lists.replies_policy.followed": "Qualquer usuário seguido", + "lists.replies_policy.list": "Membros da lista", + "lists.replies_policy.none": "Ninguém", + "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Procurar entre as pessoas que você segue", "lists.subheading": "Suas listas", "load_pending": "{count, plural, one {# novo item} other {# novos items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Esconder mídia", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Esse recurso não pôde ser encontrado", + "mute_modal.duration": "Duração", "mute_modal.hide_notifications": "Ocultar notificações deste usuário?", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicativos", "navigation_bar.blocks": "Usuários bloqueados", "navigation_bar.bookmarks": "Salvos", @@ -298,6 +310,7 @@ "notification.own_poll": "Sua enquete terminou", "notification.poll": "Uma enquete que você votou terminou", "notification.reblog": "{name} boostou seu status", + "notification.status": "{name} acabou de postar", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?", "notifications.column_settings.alert": "Notificações no computador", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Tocar som", + "notifications.column_settings.status": "Novos toots:", "notifications.filter.all": "Tudo", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguindo", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Resultados de enquete", + "notifications.filter.statuses": "Atualizações de pessoas que você segue", + "notifications.grant_permission": "Conceder permissão.", "notifications.group": "{count} notificações", + "notifications.mark_as_read": "Marcar todas as notificações como lidas", + "notifications.permission_denied": "Não é possível habilitar as notificações da área de trabalho pois a permissão foi negada.", + "notifications.permission_denied_alert": "As notificações da área de trabalho não podem ser habilitdas pois a permissão do navegador foi negada antes", + "notifications.permission_required": "Notificações da área de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", + "notifications_permission_banner.enable": "Habilitar notificações da área de trabalho", + "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, habilite as notificações da área de trabalho. Você pode controlar precisamente quais tipos de interações geram notificações da área de trabalho através do botão {icon} acima uma vez habilitadas.", + "notifications_permission_banner.title": "Nunca perca nada", + "picture_in_picture.restore": "Colocar de volta", "poll.closed": "Fechou", "poll.refresh": "Atualizar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", @@ -430,22 +454,23 @@ "units.short.million": "{count} mi", "units.short.thousand": "{count} mil", "upload_area.title": "Arraste & solte para fazer upload", - "upload_button.label": "Adicionar mídia ({formats})", + "upload_button.label": "Adicionar mídia", "upload_error.limit": "Limite de upload de arquivos excedido.", "upload_error.poll": "Não é possível fazer upload de arquivos com enquetes.", "upload_form.audio_description": "Descrever para pessoas com deficiência auditiva", "upload_form.description": "Descreva para deficientes visuais", "upload_form.edit": "Editar", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Alterar miniatura", "upload_form.undo": "Excluir", "upload_form.video_description": "Descreva para pessoas com deficiência auditiva ou visual", "upload_modal.analyzing_picture": "Analisando imagem…", "upload_modal.apply": "Aplicar", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Escolher imagem", "upload_modal.description_placeholder": "Um pequeno jabuti xereta viu dez cegonhas felizes", "upload_modal.detect_text": "Detectar texto da imagem", "upload_modal.edit_media": "Editar mídia", "upload_modal.hint": "Clique ou arraste o círculo na prévia para escolher o ponto focal que vai estar sempre visível em todas as thumbnails.", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Prévia ({ratio})", "upload_progress.label": "Fazendo upload...", "video.close": "Fechar vídeo", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 49fb95885..dd3b4eba2 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -1,36 +1,38 @@ { - "account.account_note_header": "A sua nota para @{name}", + "account.account_note_header": "A tua nota para @{name}", "account.add_or_remove_from_list": "Adicionar ou remover das listas", - "account.badges.bot": "Robô", + "account.badges.bot": "Bot", "account.badges.group": "Grupo", "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo do domínio {domain}", - "account.blocked": "Bloqueado", - "account.browse_more_on_origin_server": "Encontre mais no perfil original", - "account.cancel_follow_request": "Cancelar pedido de seguidor", - "account.direct": "Mensagem directa @{name}", - "account.domain_blocked": "Domínio escondido", + "account.blocked": "Bloqueado(a)", + "account.browse_more_on_origin_server": "Encontrar mais no perfil original", + "account.cancel_follow_request": "Cancelar pedido para seguir", + "account.direct": "Enviar mensagem directa para @{name}", + "account.disable_notifications": "Parar de me notificar das publicações de @{name}", + "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", - "account.endorse": "Atributo no perfil", + "account.enable_notifications": "Notificar-me das publicações de @{name}", + "account.endorse": "Destacar no perfil", "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Ainda ninguém segue este utilizador.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {A seguir {counter}}}", - "account.follows.empty": "Este utilizador ainda não segue alguém.", + "account.follows.empty": "Este utilizador ainda não segue ninguém.", "account.follows_you": "Segue-te", "account.hide_reblogs": "Esconder partilhas de @{name}", "account.last_status": "Última atividade", "account.link_verified_on": "A posse deste link foi verificada em {date}", "account.locked_info": "O estatuto de privacidade desta conta é fechado. O dono revê manualmente quem a pode seguir.", - "account.media": "Media", + "account.media": "Média", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} mudou a sua conta para:", "account.mute": "Silenciar @{name}", "account.mute_notifications": "Silenciar notificações de @{name}", "account.muted": "Silenciada", "account.never_active": "Nunca", - "account.posts": "Publicações", + "account.posts": "Toots", "account.posts_with_replies": "Publicações e respostas", "account.report": "Denunciar @{name}", "account.requested": "A aguardar aprovação. Clique para cancelar o pedido de seguidor", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", + "empty_column.account_suspended": "Conta suspensa", "empty_column.account_timeline": "Sem toots por aqui!", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a uma compatilidade com o seu navegador, esta página não pôde ser apresentada correctamente.", + "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.", + "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", "follow_request.authorize": "Autorizar", @@ -202,9 +207,9 @@ "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Publicações públicas de outras instâncias do fediverso aparecerão na cronologia federada.", "introduction.federation.home.headline": "Início", - "introduction.federation.home.text": "As publicações das pessoas que você segue aparecerão na sua coluna de início. Você pode seguir qualquer pessoa em qualquer instância!", + "introduction.federation.home.text": "As publicações das pessoas que segues aparecerão na tua coluna de início. Podes seguir qualquer pessoa em qualquer instância!", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Publicações públicas de pessoas na mesma instância que você aparecerão na coluna local.", + "introduction.federation.local.text": "Publicações públicas de pessoas na mesma instância que tu aparecerão na coluna local.", "introduction.interactions.action": "Terminar o tutorial!", "introduction.interactions.favourite.headline": "Favorito", "introduction.interactions.favourite.text": "Podes guardar um toot para depois e deixar o autor saber que gostaste dele, marcando-o como favorito.", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", + "lightbox.compress": "Compactar caixa de visualização de imagem", + "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", "lists.delete": "Remover lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Título da nova lista", + "lists.replies_policy.followed": "Qualquer utilizador seguido", + "lists.replies_policy.list": "Membros da lista", + "lists.replies_policy.none": "Ninguém", + "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Pesquisa entre as pessoas que segues", "lists.subheading": "As tuas listas", "load_pending": "{count, plural, one {# novo item} other {# novos itens}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Alternar visibilidade", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Este recurso não foi encontrado", + "mute_modal.duration": "Duração", "mute_modal.hide_notifications": "Esconder notificações deste utilizador?", + "mute_modal.indefinite": "Indefinidamente", "navigation_bar.apps": "Aplicações móveis", "navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.bookmarks": "Itens salvos", @@ -298,9 +310,10 @@ "notification.own_poll": "A sua votação terminou", "notification.poll": "Uma votação em que participaste chegou ao fim", "notification.reblog": "{name} partilhou a tua publicação", + "notification.status": "{name} acabou de publicar", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", - "notifications.column_settings.alert": "Notificações no computador", + "notifications.column_settings.alert": "Notificações no ambiente de trabalho", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias", "notifications.column_settings.filter_bar.category": "Barra de filtros rápidos", @@ -313,19 +326,30 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Reproduzir som", + "notifications.column_settings.status": "Novos toots:", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Votações", + "notifications.filter.statuses": "Atualizações de pessoas que você segue", + "notifications.grant_permission": "Conceder permissões.", "notifications.group": "{count} notificações", + "notifications.mark_as_read": "Marcar todas as notificações como lidas", + "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", + "notifications.permission_denied_alert": "Notificações no ambinente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", + "notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", + "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", + "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", + "notifications_permission_banner.title": "Nunca perca nada", + "picture_in_picture.restore": "Colocá-lo de volta", "poll.closed": "Fechado", "poll.refresh": "Recarregar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", "poll.total_votes": "{contar, plural, um {# vote} outro {# votes}}", "poll.vote": "Votar", - "poll.voted": "Você votou nesta resposta", + "poll.voted": "Votaste nesta resposta", "poll_button.add_poll": "Adicionar votação", "poll_button.remove_poll": "Remover votação", "privacy.change": "Ajustar a privacidade da publicação", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}m", "upload_area.title": "Arraste e solte para enviar", - "upload_button.label": "Adicionar media ({formats})", + "upload_button.label": "Adicionar media", "upload_error.limit": "Limite máximo do ficheiro a carregar excedido.", "upload_error.poll": "Carregamento de ficheiros não é permitido em votações.", "upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detectar texto na imagem", "upload_modal.edit_media": "Editar media", "upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.", + "upload_modal.preparing_ocr": "A preparar OCR…", "upload_modal.preview_label": "Pré-visualizar ({ratio})", "upload_progress.label": "A enviar...", "video.close": "Fechar vídeo", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 544d68102..a80bfa822 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Caută mai multe în profilul original", "account.cancel_follow_request": "Anulați cererea de urmărire", "account.direct": "Mesaj direct @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domeniu blocat", "account.edit_profile": "Editați profilul", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Promovați pe profil", "account.follow": "Urmărește", "account.followers": "Urmăritori", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Rezultatele căutării", "emoji_button.symbols": "Simboluri", "emoji_button.travel": "Călătorii și Locuri", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nicio postare aici!", "empty_column.account_unavailable": "Profil indisponibil", "empty_column.blocks": "Nu ai blocat nici un utilizator încă.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Nu ai nici o notificare încă. Interacționează cu alții pentru a începe o conversație.", "empty_column.public": "Nu este nimic aici! Scrie ceva public, sau urmărește alți utilizatori din alte instanțe pentru a porni fluxul", "error.unexpected_crash.explanation": "Din cauza unei erori în codul nostru sau a unei probleme de compatibilitate cu navigatorul, această pagină nu a putut fi afișată corect.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Încercați să reîmprospătați pagina. Dacă acest lucru nu ajută, este posibil să mai puteți folosi site-ul printr-un navigator diferit sau o aplicație nativă.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiați stiva în clipboard", "errors.unexpected_crash.report_issue": "Raportați o problemă", "follow_request.authorize": "Autorizează", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "să dezactiveze zona de compunere/căutare", "keyboard_shortcuts.up": "să mute mai sus în listă", "lightbox.close": "Închide", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Următorul", "lightbox.previous": "Precedentul", - "lightbox.view_context": "Vizualizați contextul", "lists.account.add": "Adaugă în listă", "lists.account.remove": "Elimină din listă", "lists.delete": "Șterge lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Schimbă titlul", "lists.new.create": "Adaugă listă", "lists.new.title_placeholder": "Titlu pentru noua listă", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Caută printre persoanele pe care le urmărești", "lists.subheading": "Listele tale", "load_pending": "{count, plural, one {# element nou} other {# elemente noi}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ascunde media", "missing_indicator.label": "Nu a fost găsit", "missing_indicator.sublabel": "Această resursă nu a putut fi găsită", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ascunzi notificările de la acest utilizator?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicații mobile", "navigation_bar.blocks": "Utilizatori blocați", "navigation_bar.bookmarks": "Marcaje", @@ -298,6 +310,7 @@ "notification.own_poll": "Sondajul tău s-a sfârșit", "notification.poll": "Un sondaj la care ai votat s-a sfârșit", "notification.reblog": "{name} a impulsionat postarea ta", + "notification.status": "{name} just posted", "notifications.clear": "Șterge notificările", "notifications.clear_confirmation": "Ești sigur că vrei să ștergi permanent toate notificările?", "notifications.column_settings.alert": "Notificări pe desktop", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Impulsuri:", "notifications.column_settings.show": "Arată în coloană", "notifications.column_settings.sound": "Redă sunet", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Toate", "notifications.filter.boosts": "Impulsuri", "notifications.filter.favourites": "Favorite", "notifications.filter.follows": "Urmărește", "notifications.filter.mentions": "Menționări", "notifications.filter.polls": "Rezultate sondaj", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificări", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Închis", "poll.refresh": "Reîmprospătează", "poll.total_people": "{count, plural, one {# persoană} other {# persoane}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detectare text din imagine", "upload_modal.edit_media": "Editați media", "upload_modal.hint": "Faceţi clic sau trageţi cercul pe previzualizare pentru a alege punctul focal care va fi întotdeauna vizualizat pe toate miniaturile.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previzualizare ({ratio})", "upload_progress.label": "Se Încarcă...", "video.close": "Închide video", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 73d3df12b..2853b3302 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Посмотреть их можно в оригинальном профиле", "account.cancel_follow_request": "Отменить запрос", "account.direct": "Написать @{name}", + "account.disable_notifications": "Отключить уведомления от @{name}", "account.domain_blocked": "Домен скрыт", "account.edit_profile": "Изменить профиль", + "account.enable_notifications": "Включить уведомления для @{name}", "account.endorse": "Рекомендовать в профиле", "account.follow": "Подписаться", "account.followers": "Подписаны", @@ -96,7 +98,7 @@ "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.publish": "Запостить", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Отметить медиафайл как деликатный", + "compose_form.sensitive.hide": "{count, plural, one {Отметить медифайл как деликатный} other {Отметить медифайлы как деликатные}}", "compose_form.sensitive.marked": "Медиафайл отмечен как деликатный", "compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный", "compose_form.spoiler.marked": "Текст скрыт за предупреждением", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия и места", + "empty_column.account_suspended": "Учетная запись заблокирована", "empty_column.account_timeline": "Здесь нет постов!", "empty_column.account_unavailable": "Профиль недоступен", "empty_column.blocks": "Вы ещё никого не заблокировали.", @@ -166,7 +169,9 @@ "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.", "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту", "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.", + "error.unexpected_crash.explanation_addons": "Эта страница не может быть корректно отображена. Скорее всего, эта ошибка вызвана расширением браузера или инструментом автоматического перевода.", "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.", + "error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.", "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "follow_request.authorize": "Авторизовать", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "lightbox.close": "Закрыть", + "lightbox.compress": "Сжать окно просмотра изображений", + "lightbox.expand": "Развернуть окно просмотра изображений", "lightbox.next": "Далее", "lightbox.previous": "Назад", - "lightbox.view_context": "Контекст", "lists.account.add": "Добавить в список", "lists.account.remove": "Убрать из списка", "lists.delete": "Удалить список", @@ -260,6 +266,10 @@ "lists.edit.submit": "Изменить название", "lists.new.create": "Создать список", "lists.new.title_placeholder": "Название для нового списка", + "lists.replies_policy.followed": "Любой подписанный пользователь", + "lists.replies_policy.list": "Пользователи в списке", + "lists.replies_policy.none": "Никого", + "lists.replies_policy.title": "Показать ответы только:", "lists.search": "Искать среди подписок", "lists.subheading": "Ваши списки", "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Показать/скрыть", "missing_indicator.label": "Не найдено", "missing_indicator.sublabel": "Запрашиваемый ресурс не найден", + "mute_modal.duration": "Продолжительность", "mute_modal.hide_notifications": "Скрыть уведомления от этого пользователя?", + "mute_modal.indefinite": "Не определена", "navigation_bar.apps": "Мобильные приложения", "navigation_bar.blocks": "Список блокировки", "navigation_bar.bookmarks": "Закладки", @@ -298,6 +310,7 @@ "notification.own_poll": "Ваш опрос закончился", "notification.poll": "Опрос, в котором вы приняли участие, завершился", "notification.reblog": "{name} продвинул(а) ваш пост", + "notification.status": "{name} только что запостил", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", "notifications.column_settings.alert": "Уведомления в фоне", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Ваш пост продвинули:", "notifications.column_settings.show": "Отображать в списке", "notifications.column_settings.sound": "Проигрывать звук", + "notifications.column_settings.status": "Новые посты:", "notifications.filter.all": "Все", "notifications.filter.boosts": "Продвижения", "notifications.filter.favourites": "Отметки «избранного»", "notifications.filter.follows": "Подписки", "notifications.filter.mentions": "Упоминания", "notifications.filter.polls": "Результаты опросов", + "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", + "notifications.grant_permission": "Дать разрешение.", "notifications.group": "{count} уведомл.", + "notifications.mark_as_read": "Отмечать все уведомления прочитанными", + "notifications.permission_denied": "Уведомления на рабочем столе недоступны из-за ранее отклонённого запроса разрешений браузера", + "notifications.permission_denied_alert": "Уведомления на рабочем столе не могут быть включены, так как раньше было отказано в разрешении браузера", + "notifications.permission_required": "Десктоп нотификации недоступны, потому что требуемое разрешение не было предоставлено.", + "notifications_permission_banner.enable": "Включить уведомления на рабочем столе", + "notifications_permission_banner.how_to_control": "Чтобы получать уведомления, когда Мастодон не открыт, включите уведомления рабочего стола. Вы можете точно управлять, какие типы взаимодействия генерируют уведомления рабочего стола с помощью кнопки {icon} выше, когда они включены.", + "notifications_permission_banner.title": "Ничего не пропустите", + "picture_in_picture.restore": "Вернуть обратно", "poll.closed": "Завершён", "poll.refresh": "Обновить", "poll.total_people": "{count, plural, one {# человек} few {# человека} many {# человек} other {# человек}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Найти текст на картинке", "upload_modal.edit_media": "Изменить файл", "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.", + "upload_modal.preparing_ocr": "Подготовка распознования…", "upload_modal.preview_label": "Предпросмотр ({ratio})", "upload_progress.label": "Загрузка...", "video.close": "Закрыть видео", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json new file mode 100644 index 000000000..4656aa275 --- /dev/null +++ b/app/javascript/mastodon/locales/sa.json @@ -0,0 +1,486 @@ +{ + "account.account_note_header": "टीका", + "account.add_or_remove_from_list": "युज्यतां / नश्यतां सूच्याः", + "account.badges.bot": "यन्त्रम्", + "account.badges.group": "समूहः", + "account.block": "अवरुध्यताम् @{name}", + "account.block_domain": "अवरुध्यतां प्रदेशः {domain}", + "account.blocked": "अवरुद्धम्", + "account.browse_more_on_origin_server": "अधिकं मूलव्यक्तिगतविवरणे दृश्यताम्", + "account.cancel_follow_request": "अनुसरणानुरोधो नश्यताम्", + "account.direct": "प्रत्यक्षसन्देशः @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "प्रदेशो निषिद्धः", + "account.edit_profile": "सम्पाद्यताम्", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "व्यक्तिगतविवरणे वैशिष्ट्यम्", + "account.follow": "अनुस्रियताम्", + "account.followers": "अनुसर्तारः", + "account.followers.empty": "नाऽनुसर्तारो वर्तन्ते", + "account.followers_counter": "{count, plural, one {{counter} अनुसर्ता} two {{counter} अनुसर्तारौ} other {{counter} अनुसर्तारः}}", + "account.following_counter": "{count, plural, one {{counter} अनुसृतः} two {{counter} अनुसृतौ} other {{counter} अनुसृताः}}", + "account.follows.empty": "न कोऽप्यनुसृतो वर्तते", + "account.follows_you": "त्वामनुसरति", + "account.hide_reblogs": "@{name} मित्रस्य प्रकाशनानि छिद्यन्ताम्", + "account.last_status": "गतसक्रियता", + "account.link_verified_on": "अन्तर्जालस्थानस्यास्य स्वामित्वं परीक्षितमासीत् {date} दिने", + "account.locked_info": "एतस्या लेखायाः गुह्यता \"निषिद्ध\"इति वर्तते । स्वामी स्वयञ्चिनोति कोऽनुसर्ता भवितुमर्हतीति ।", + "account.media": "सामग्री", + "account.mention": "उल्लिख्यताम् @{name}", + "account.moved_to": "{name} अत्र प्रस्थापितम्:", + "account.mute": "निःशब्दम् @{name}", + "account.mute_notifications": "@{name} सूचनाः निष्क्रियन्ताम्", + "account.muted": "निःशब्दम्", + "account.never_active": "नैव कदापि", + "account.posts": "दौत्यानि", + "account.posts_with_replies": "दौत्यानि प्रत्युत्तराणि च", + "account.report": "आविद्यताम् @{name}", + "account.requested": "स्वीकृतिः प्रतीक्ष्यते । नश्यतामित्यस्मिन्नुद्यतां निराकर्तुम् ।", + "account.share": "@{name} मित्रस्य विवरणं विभाज्यताम्", + "account.show_reblogs": "@{name} मित्रस्य प्रकाशनानि दृश्यन्ताम्", + "account.statuses_counter": "{count, plural, one {{counter} दौत्यम्} two {{counter} दौत्ये} other {{counter} दौत्यानि}}", + "account.unblock": "निषेधता नश्यताम् @{name}", + "account.unblock_domain": "प्रदेशनिषेधता नश्यताम् {domain}", + "account.unendorse": "व्यक्तिगतविवरणे मा प्रकाश्यताम्", + "account.unfollow": "नश्यतामनुसरणम्", + "account.unmute": "सशब्दम् @{name}", + "account.unmute_notifications": "@{name} सूचनाः सक्रियन्ताम्", + "account_note.placeholder": "टीकायोजनार्थं नुद्यताम्", + "alert.rate_limited.message": "{retry_time, time, medium}. समयात् पश्चात् प्रयतताम्", + "alert.rate_limited.title": "सीमितगतिः", + "alert.unexpected.message": "अनपेक्षितदोषो जातः ।", + "alert.unexpected.title": "अरे !", + "announcement.announcement": "उद्घोषणा", + "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताहे", + "boost_modal.combo": "{combo} अत्र स्प्रष्टुं शक्यते, त्यक्तुमेतमन्यस्मिन् समये", + "bundle_column_error.body": "विषयस्याऽऽरोपणे कश्चिद्दोषो जातः", + "bundle_column_error.retry": "पुनः यतताम्", + "bundle_column_error.title": "जाले दोषः", + "bundle_modal_error.close": "पिधीयताम्", + "bundle_modal_error.message": "आरोपणे कश्चन दोषो जातः", + "bundle_modal_error.retry": "पुनः यतताम्", + "column.blocks": "निषिद्धभोक्तारः", + "column.bookmarks": "पुटचिह्नानि", + "column.community": "स्थानीयसमयतालिका", + "column.direct": "प्रत्यक्षसन्देशाः", + "column.directory": "व्यक्तित्वानि दृश्यन्ताम्", + "column.domain_blocks": "निषिद्धप्रदेशाः", + "column.favourites": "प्रियाः", + "column.follow_requests": "अनुसरणानुरोधाः", + "column.home": "गृहम्", + "column.lists": "सूचयः", + "column.mutes": "निःशब्दाः भोक्तारः", + "column.notifications": "सूचनाः", + "column.pins": "कीलितदौत्यानि", + "column.public": "सङ्घीयसमयतालिका", + "column_back_button.label": "पूर्वम्", + "column_header.hide_settings": "विन्यासाः छाद्यन्ताम्", + "column_header.moveLeft_settings": "स्तम्भो वामी क्रियताम्", + "column_header.moveRight_settings": "स्तम्भो दक्षिणी क्रियताम्", + "column_header.pin": "कीलयतु", + "column_header.show_settings": "विन्यासाः दृश्यन्ताम्", + "column_header.unpin": "कीलनं नाशय", + "column_subheading.settings": "विन्यासाः", + "community.column_settings.local_only": "केवलं स्थानीयम्", + "community.column_settings.media_only": "सामग्री केवलम्", + "community.column_settings.remote_only": "दर्गमः केवलम्", + "compose_form.direct_message_warning": "दौत्यमेतत्केवलमुल्लेखितजनानां कृते वर्तते", + "compose_form.direct_message_warning_learn_more": "अधिकं ज्ञायताम्", + "compose_form.hashtag_warning": "न कस्मिन्नपि प्रचलितवस्तुषु सूचितमिदं दौत्यम् । केवलं सार्वजनिकदौत्यानि प्रचलितवस्तुचिह्नेन अन्वेषयितुं शक्यते ।", + "compose_form.lock_disclaimer": "तव लेखा न प्रवेष्टुमशक्या {locked} । कोऽप्यनुसर्ता ते केवलमनुसर्तृृणां कृते स्थितानि दौत्यानि द्रष्टुं शक्नोति ।", + "compose_form.lock_disclaimer.lock": "अवरुद्धः", + "compose_form.placeholder": "मनसि ते किमस्ति?", + "compose_form.poll.add_option": "मतमपरं युज्यताम्", + "compose_form.poll.duration": "मतदान-समयावधिः", + "compose_form.poll.option_placeholder": "मतम् {number}", + "compose_form.poll.remove_option": "मतमेतन्नश्यताम्", + "compose_form.poll.switch_to_multiple": "मतदानं परिवर्तयित्वा बहुवैकल्पिकमतदानं क्रियताम्", + "compose_form.poll.switch_to_single": "मतदानं परिवर्तयित्वा निर्विकल्पमतदानं क्रियताम्", + "compose_form.publish": "दौत्यम्", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "संवेदनशीलसामग्रीत्यङ्यताम्", + "compose_form.sensitive.marked": "संवेदनशीलसामग्रीत्यङ्कितम्", + "compose_form.sensitive.unmarked": "संवेदनशीलसामग्रीति नाङ्कितम्", + "compose_form.spoiler.marked": "प्रच्छान्नाक्षरं विद्यते", + "compose_form.spoiler.unmarked": "अप्रच्छन्नाक्षरं विद्यते", + "compose_form.spoiler_placeholder": "प्रत्यादेशस्ते लिख्यताम्", + "confirmation_modal.cancel": "नश्यताम्", + "confirmations.block.block_and_report": "अवरुध्य आविद्यताम्", + "confirmations.block.confirm": "निषेधः", + "confirmations.block.message": "निश्चयेनाऽवरोधो विधेयः {name}?", + "confirmations.delete.confirm": "नश्यताम्", + "confirmations.delete.message": "निश्चयेन दौत्यमिदं नश्यताम्?", + "confirmations.delete_list.confirm": "नश्यताम्", + "confirmations.delete_list.message": "सूचिरियं निश्चयेन स्थायित्वेन च नश्यताम् वा?", + "confirmations.domain_block.confirm": "निषिद्धः प्रदेशः क्रियताम्", + "confirmations.domain_block.message": "नूनं निश्चयेनैव विनष्टुमिच्छति पूर्णप्रदेशमेव {domain} ? अधिकांशसन्दर्भेऽस्थायित्वेन निषेधता निःशब्दत्वञ्च पर्याप्तं चयनीयञ्च । न तस्मात् प्रदेशात्सर्वे विषया द्रष्टुमशक्याः किस्यांश्चिदपि सर्वजनिकसमयतालिकायां वा स्वीयसूचनापटले । सर्वेऽनुसर्तारस्ते प्रदेशात् ये सन्ति ते नश्यन्ते ।", + "confirmations.logout.confirm": "बहिर्गम्यताम्", + "confirmations.logout.message": "निश्चयेनैव बहिर्गमनं वाञ्छितम्?", + "confirmations.mute.confirm": "निःशब्दम्", + "confirmations.mute.explanation": "एतेन तेषां प्रकटनानि तथा च यत्र ते उल्लिखिताः तानि छाद्यन्ते, किन्त्वेवं सत्यपि ते त्वामनुसर्तुं ततश्च प्रकटनानि द्रष्टुं शक्नुवन्ति ।", + "confirmations.mute.message": "किं निश्चयेन निःशब्दं भवेत् {name} मित्रमेतत् ?", + "confirmations.redraft.confirm": "विनश्य पुनः लिख्यताम्", + "confirmations.redraft.message": "किं वा निश्चयेन नष्टुमिच्छसि दौत्यमेतत्तथा च पुनः लेखितुं? प्रकाशनानि प्रीतयश्च विनष्टा भविष्यन्ति, प्रत्युत्तराण्यपि नश्यन्ते ।", + "confirmations.reply.confirm": "उत्तरम्", + "confirmations.reply.message": "प्रत्युत्तरमिदानीं लिख्यते तर्हि पूर्वलिखितसन्देशं विनश्य पुनः लिख्यते । निश्चयेनैवं कर्तव्यम् ?", + "confirmations.unfollow.confirm": "अनुसरणं नश्यताम्", + "confirmations.unfollow.message": "निश्चयेनैवाऽनुसरणं नश्यतां {name} मित्रस्य?", + "conversation.delete": "वार्तालापो नश्यताम्", + "conversation.mark_as_read": "पठितमित्यङ्क्यताम्", + "conversation.open": "वार्तालापो दृश्यताम्", + "conversation.with": "{names} जनैः साकम्", + "directory.federated": "सुपरिचितं Fediverse इति स्थानात्", + "directory.local": "{domain} प्रदेशात्केवलम्", + "directory.new_arrivals": "नवामगमाः", + "directory.recently_active": "नातिपूर्वं सक्रियः", + "embed.instructions": "दौत्यमेतत् स्वीयजालस्थाने स्थापयितुमधो लिखितो विध्यादेशो युज्यताम्", + "embed.preview": "अत्रैवं दृश्यते तत्:", + "emoji_button.activity": "आचरणम्", + "emoji_button.custom": "स्वीयानुकूलम्", + "emoji_button.flags": "ध्वजाः", + "emoji_button.food": "भोजनं पेयञ्च", + "emoji_button.label": "भावचिह्नं युज्यताम्", + "emoji_button.nature": "प्रकृतिः", + "emoji_button.not_found": "न भावचिह्नानि (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "वस्तूनि", + "emoji_button.people": "जनाः", + "emoji_button.recent": "आधिक्येन प्रयुक्तम्", + "emoji_button.search": "अन्विष्यताम्...", + "emoji_button.search_results": "अन्वेषणपरिणामाः", + "emoji_button.symbols": "चिह्नानि", + "emoji_button.travel": "यात्रा च स्थानानि", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "न दौत्यान्यत्र", + "empty_column.account_unavailable": "व्यक्तित्वं न प्राप्यते", + "empty_column.blocks": "नैकोऽप्युपभोक्ता निषिद्धो वर्तते", + "empty_column.bookmarked_statuses": "नैकमपि पुटचिह्नयुक्तदौत्यानि सन्ति । यदा भविष्यति तदत्र दृश्यते ।", + "empty_column.community": "स्थानीयसमयतालिका रिक्ता । सार्वजनिकत्वेनाऽत्र किमपि लिख्यताम् ।", + "empty_column.direct": "नैकोऽपि प्रत्यक्षसन्देशो वर्तते । यदा प्रेष्यते वा प्राप्यतेऽत्र दृश्यते", + "empty_column.domain_blocks": "न निषिद्धप्रदेशाः सन्ति ।", + "empty_column.favourited_statuses": "न प्रियदौत्यानि सन्ति । यदा प्रीतिरित्यङ्क्यतेऽत्र दृश्यते ।", + "empty_column.favourites": "नैतद्दौत्यं प्रियमस्ति कस्मै अपि । यदा कस्मै प्रियं भवति तदाऽत्र दृश्यते ।", + "empty_column.follow_requests": "नाऽनुसरणानुरोधस्ते वर्तते । यदैको प्राप्यतेऽत्र दृश्यते ।", + "empty_column.hashtag": "नाऽस्मिन् प्रचलितवस्तुचिह्ने किमपि ।", + "empty_column.home": "गृहसमयतालिका रिक्ताऽस्ति । गम्यतां {public} वाऽन्वेषणैः प्रारभ्यतां मेलनं क्रियताञ्च ।", + "empty_column.home.public_timeline": "सार्वजनिकसमयतालिका", + "empty_column.list": "न किमपि वर्तते सूच्यामस्याम् । यदा सूच्याः सदस्या नवदौत्यानि प्रकटीकुर्वन्ति तदाऽत्राऽऽयान्ति ।", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 30a3e3374..e1b4e3998 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -1,53 +1,55 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Agiunghe o boga dae is listas", "account.badges.bot": "Bot", "account.badges.group": "Grupu", "account.block": "Bloca @{name}", - "account.block_domain": "Bloca domìniu{domain}", + "account.block_domain": "Bloca su domìniu {domain}", "account.blocked": "Blocadu", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Esplora de prus in su profilu originale", "account.cancel_follow_request": "Annulla rechesta de sighidura", "account.direct": "Messàgiu deretu a @{name}", + "account.disable_notifications": "Non mi notìfiches prus cando @{name} pùblichet messàgios", "account.domain_blocked": "Domìniu blocadu", "account.edit_profile": "Modìfica profilu", + "account.enable_notifications": "Notìfica·mi cando @{name} pùblicat messàgios", "account.endorse": "Cussìgia in su profilu tuo", "account.follow": "Sighi", "account.followers": "Sighiduras", "account.followers.empty": "Nemos sighit ancora custa persone.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} sighidura} other {{counter} sighiduras}}", + "account.following_counter": "{count, plural, one {Sighende a {counter}} other {Sighende a {counter}}}", "account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", "account.last_status": "Ùrtima atividade", - "account.link_verified_on": "Sa propiedade de custu ligàmene est istada controllada su {date}", - "account.locked_info": "Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", + "account.link_verified_on": "Sa propiedade de custu ligòngiu est istada controllada su {date}", + "account.locked_info": "S'istadu de riservadesa de custu contu est istadu cunfiguradu comente blocadu. Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", "account.media": "Cuntenutu multimediale", - "account.mention": "Mentova @{name}", - "account.moved_to": "{name} est istadu trasferidu a:", - "account.mute": "Pone @name a sa muda", - "account.mute_notifications": "Notìficas disativadas dae @{name}", + "account.mention": "Mentova a @{name}", + "account.moved_to": "{name} at cambiadu a:", + "account.mute": "Pone a @{name} a sa muda", + "account.mute_notifications": "Disativa is notìficas de @{name}", "account.muted": "A sa muda", "account.never_active": "Mai", "account.posts": "Tuts", "account.posts_with_replies": "Tuts e rispostas", "account.report": "Signala @{name}", - "account.requested": "Incarca pro annullare sa rechesta de sighidura", + "account.requested": "Abetende s'aprovatzione. Incarca pro annullare sa rechesta de sighidura", "account.share": "Cumpartzi su profilu de @{name}", "account.show_reblogs": "Ammustra is cumpartziduras de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", - "account.unblock": "Isbloca @{name}", + "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tuts}}", + "account.unblock": "Isbloca a @{name}", "account.unblock_domain": "Isbloca su domìniu {domain}", "account.unendorse": "Non cussiges in su profilu", "account.unfollow": "Non sigas prus", "account.unmute": "Torra a ativare @{name}", "account.unmute_notifications": "Ativa notìficas pro @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Incarca pro agiùnghere una nota", "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.", "alert.rate_limited.title": "Màssimu de rechestas barigadu", "alert.unexpected.message": "B'at àpidu una faddina.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Oh!", "announcement.announcement": "Annùntziu", "autosuggest_hashtag.per_week": "{count} a sa chida", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", @@ -58,7 +60,7 @@ "bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.", "bundle_modal_error.retry": "Torra·bi a proare", "column.blocks": "Persones blocadas", - "column.bookmarks": "Marcadores", + "column.bookmarks": "Sinnalibros", "column.community": "Lìnia de tempus locale", "column.direct": "Messàgios diretos", "column.directory": "Nàviga in is profilos", @@ -71,7 +73,7 @@ "column.notifications": "Notìficas", "column.pins": "Tuts apicados", "column.public": "Lìnia de tempus federada", - "column_back_button.label": "In segus", + "column_back_button.label": "A coa", "column_header.hide_settings": "Cua is cunfiguratziones", "column_header.moveLeft_settings": "Moe sa colunna a manca", "column_header.moveRight_settings": "Moe sa colunna a dereta", @@ -79,13 +81,13 @@ "column_header.show_settings": "Ammustra is cunfiguratziones", "column_header.unpin": "Boga dae pitzu", "column_subheading.settings": "Cunfiguratziones", - "community.column_settings.local_only": "Local only", - "community.column_settings.media_only": "Multimediale isceti", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.local_only": "Isceti locale", + "community.column_settings.media_only": "Isceti multimediale", + "community.column_settings.remote_only": "Isceti remotu", "compose_form.direct_message_warning": "Custu tut at a èssere imbiadu isceti a is persones mentovadas.", "compose_form.direct_message_warning_learn_more": "Àteras informatziones", - "compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu.", - "compose_form.lock_disclaimer": "Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a is chi ti sighint.", + "compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu. Isceti is tuts pùblicos podent èssere chircados cun etichetas.", + "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.", "compose_form.lock_disclaimer.lock": "blocadu", "compose_form.placeholder": "A ite ses pensende?", "compose_form.poll.add_option": "Agiunghe unu sèberu", @@ -96,10 +98,10 @@ "compose_form.poll.switch_to_single": "Muda su sondàgiu pro permìtere un'optzione isceti", "compose_form.publish": "Tut", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marca mèdia comente a sensìbile", - "compose_form.sensitive.marked": "Mèdia marcadu comente a sensìbile", - "compose_form.sensitive.unmarked": "Mèdia non marcadu comente a sensìbile", - "compose_form.spoiler.marked": "Su testu est cuadu dae s'avisu", + "compose_form.sensitive.hide": "{count, plural, one {Marca elementu multimediale comente a sensìbile} other {Marca elementos multimediales comente sensìbiles}}", + "compose_form.sensitive.marked": "{count, plural, one {Elementu multimediale marcadu comente a sensìbile} other {Elementos multimediales marcados comente a sensìbiles}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Elementu multimediale non marcadu comente a sensìbile} other {Elementos multimediales non marcados comente a sensìbiles}}", + "compose_form.spoiler.marked": "Su testu est cuadu in fatu de s'avisu", "compose_form.spoiler.unmarked": "Su testu no est cuadu", "compose_form.spoiler_placeholder": "Iscrie s'avisu tuo inoghe", "confirmation_modal.cancel": "Annulla", @@ -110,24 +112,24 @@ "confirmations.delete.message": "Seguru chi boles cantzellare custu tut?", "confirmations.delete_list.confirm": "Cantzella", "confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?", - "confirmations.domain_block.confirm": "Cua totu su domìniu", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.domain_block.confirm": "Bloca totu su domìniu", + "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare su {domain} intreu? In sa parte manna de is casos pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.", "confirmations.logout.confirm": "Essi·nche", "confirmations.logout.message": "Seguru chi boles essire?", "confirmations.mute.confirm": "A sa muda", "confirmations.mute.explanation": "Custu at a cuare is publicatziones issoro e is messàgios chi ddos mentovant, ma ant a pòdere bìdere is messàgios tuos e t'ant a pòdere sighire.", - "confirmations.mute.message": "Seguru chi boles pònnere {name} a sa muda?", + "confirmations.mute.message": "Seguru chi boles pònnere a {name} a sa muda?", "confirmations.redraft.confirm": "Cantzella e torra a fàghere", - "confirmations.redraft.message": "As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", + "confirmations.redraft.message": "Seguru chi boles cantzellare a torrare a fàghere custu tut? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", "confirmations.reply.confirm": "Risponde", "confirmations.reply.message": "Rispondende immoe as a subraiscrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", "confirmations.unfollow.confirm": "Non sigas prus", - "confirmations.unfollow.message": "Seguru chi non boles sighire prus {name}?", + "confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?", "conversation.delete": "Cantzella arresonada", "conversation.mark_as_read": "Signala comente lèghidu", - "conversation.open": "Bide arresonada", + "conversation.open": "Ammsutra arresonada", "conversation.with": "Cun {names}", - "directory.federated": "Dae unu fediversu connòschidu", + "directory.federated": "Dae unu fediversu connotu", "directory.local": "Isceti dae {domain}", "directory.new_arrivals": "Arribos noos", "directory.recently_active": "Ativos dae pagu", @@ -147,14 +149,15 @@ "emoji_button.search_results": "Resurtados de sa chirca", "emoji_button.symbols": "Sìmbulos", "emoji_button.travel": "Biàgios e logos", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Perunu tut inoghe!", "empty_column.account_unavailable": "Su profilu no est a disponimentu", - "empty_column.blocks": "No as isblocadu ancora nemos.", + "empty_column.blocks": "No as blocadu ancora nemos.", "empty_column.bookmarked_statuses": "Non tenes ancora perunu tut in is marcadores. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", "empty_column.community": "Sa lìnia de tempus locale est bòida. Iscrie inoghe pro cumintzare sa festa!", "empty_column.direct": "Non tenes ancora perunu messàgiu deretu. Cando nd'as a imbiare o nd'as a retzire unu, at a èssere ammustradu inoghe.", "empty_column.domain_blocks": "Non tenes ancora perunu domìniu blocadu.", - "empty_column.favourited_statuses": "Non tenes ancora perunu tut in is marcadores. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", + "empty_column.favourited_statuses": "Non tenes ancora perunu tut in is preferidos. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", "empty_column.favourites": "Nemos at marcadu ancora custu tut comente preferidu. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", "empty_column.follow_requests": "Non tenes ancora peruna rechesta de sighidura. Cando nd'as a retzire una, at a èssere ammustrada inoghe.", "empty_column.hashtag": "Ancora nudda in custa eticheta.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Non tenes ancora peruna notìfica. Chistiona cun una persone pro cumintzare un'arresonada.", "empty_column.public": "Nudda inoghe. Iscrie calicuna cosa pùblica, o sighi àteras persones de àteros serbidores pro prenare custu ispàtziu", "error.unexpected_crash.explanation": "A càusa de una faddina in su còdighe nostru o unu problema de cumpatibilidade de su navigadore, custa pàgina diat pòdere no èssere ammustrada in manera curreta.", - "error.unexpected_crash.next_steps": "Proa de atualizare sa pàgina. Si custu non acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", + "error.unexpected_crash.explanation_addons": "Custa pàgina diat pòdere no èssere ammustrada comente si tocat. Custa faddina est probàbile chi dipendat dae un'estensione de su navigadore o dae ainas automàticas de tradutzione.", + "error.unexpected_crash.next_steps": "Proa de torrare a carrigare sa pàgina. Si custu no acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", + "error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e torra a carrigare sa pàgina. Si custu no acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", "errors.unexpected_crash.report_issue": "Signala unu problema", "follow_request.authorize": "Autoriza", "follow_request.reject": "Refuda", "follow_requests.unlocked_explanation": "Fintzas si su contu tuo no est blocadu, su personale de {domain} at pensadu chi forsis bolias revisionare a manu is rechestas de custos contos.", - "generic.saved": "Saved", + "generic.saved": "Sarvadu", "getting_started.developers": "Iscuadra de isvilupu", "getting_started.directory": "Diretòriu de profilos", "getting_started.documentation": "Documentatzione", @@ -195,14 +200,14 @@ "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", "home.show_announcements": "Ammustra annùntzios", - "intervals.full.days": "{number, plural, one {# die} other {# die}}", + "intervals.full.days": "{number, plural, one {# die} other {# dies}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", "introduction.federation.action": "Sighi", "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Is publicatziones pùblicas de àteros serbidores de su fediversu ant a aparèssere in sa lìnia de tempus federada.", "introduction.federation.home.headline": "Printzipale", - "introduction.federation.home.text": "Is messàgios de gente chi sighis ant a aparèssere in lìnia de tempus printzipale tua. Podes sighire gente de cale si siat serbidore.", + "introduction.federation.home.text": "Is messàgios de sa gente chi sighis ant a aparèssere in sa lìnia de tempus printzipale tua. Podes sighire gente de cale si siat serbidore!", "introduction.federation.local.headline": "Locale", "introduction.federation.local.text": "Is publicatziones pùblicas de sa gente de su pròpiu serbidore tuo ant a aparèssere in sa lìnia de tempus locale.", "introduction.interactions.action": "Acabba su tutoriale!", @@ -214,16 +219,16 @@ "introduction.interactions.reply.text": "Podes rispòndere a is tuts de àtera gente e a is tuos pròpios, e ant a èssere unidos in un'arresonada.", "introduction.welcome.action": "Ajò, andamus!", "introduction.welcome.headline": "Primos passos", - "introduction.welcome.text": "Ti donamus sa benebènnida a su fediversu. Dae immoe a pagu, as a pòdere publicare messàgios e chistionare cun is amistades tuas in meda serbidores. Però custu serbidore, {domain}, est ispetziale: allògiat su profilu tuo, duncas regorda·nde si nòmine.", + "introduction.welcome.text": "Ti donamus sa benebènnida a su fediversu. Dae immoe a pagu, as a pòdere publicare messàgios e chistionare cun is amistades tuas in meda serbidores. Però custu serbidore, {domain}, est ispetziale: allògiat su profilu tuo, duncas regorda·ti·nde su nòmine.", "keyboard_shortcuts.back": "pro navigare in segus", "keyboard_shortcuts.blocked": "pro abèrrere sa lista de persones blocadas", "keyboard_shortcuts.boost": "pro cumpartzire", - "keyboard_shortcuts.column": "pro atzentrare un'istadu in una de is colunnas", + "keyboard_shortcuts.column": "pro atzentrare unu tut in una de is colunnas", "keyboard_shortcuts.compose": "pro atzentrare in s'àrea de cumpositzione de testu", "keyboard_shortcuts.description": "Descritzione", "keyboard_shortcuts.direct": "pro abèrrere sa colunna de messàgios diretos", "keyboard_shortcuts.down": "pro mòere in bàsciu in sa lista", - "keyboard_shortcuts.enter": "pro abèrrere s'istadu", + "keyboard_shortcuts.enter": "pro abèrrere su tut", "keyboard_shortcuts.favourite": "pro marcare comente a preferidu", "keyboard_shortcuts.favourites": "pro abèrrere sa lista de preferidos", "keyboard_shortcuts.federated": "pro abèrrere sa lìnia de tempus federada", @@ -236,41 +241,48 @@ "keyboard_shortcuts.muted": "pro abèrrere sa lista de persones a sa muda", "keyboard_shortcuts.my_profile": "pro abèrrere su profilu tuo", "keyboard_shortcuts.notifications": "pro abèrrere sa colunna de notificatziones", - "keyboard_shortcuts.open_media": "pro abèrrere mèdia", + "keyboard_shortcuts.open_media": "pro abèrrere elementos multimediales", "keyboard_shortcuts.pinned": "pro abèrrere lista de tuts apicados", "keyboard_shortcuts.profile": "pro abèrrere su profilu de s'autore", "keyboard_shortcuts.reply": "pro rispòndere", "keyboard_shortcuts.requests": "pro abèrrere sa lista de rechestas de sighidura", "keyboard_shortcuts.search": "pro atzentrare sa chirca", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "pro ammustrare/cuare su campu AC", "keyboard_shortcuts.start": "pro abèrrere sa colunna \"Cumintza\"", - "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is CW", - "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare mèdias", + "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC", + "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare elementos multimediales", "keyboard_shortcuts.toot": "pro cumintzare a iscrìere unu tut nou", "keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "pro mòere in susu in sa lista", "lightbox.close": "Serra", + "lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines", + "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines", "lightbox.next": "Sighi", "lightbox.previous": "Pretzedente", - "lightbox.view_context": "Bide su cuntestu", - "lists.account.add": "Agiùnghe a sa lista", + "lists.account.add": "Agiunghe a sa lista", "lists.account.remove": "Boga dae sa lista", "lists.delete": "Cantzella sa lista", "lists.edit": "Modìfica sa lista", "lists.edit.submit": "Muda su tìtulu", "lists.new.create": "Agiunghe lista", - "lists.new.title_placeholder": "Lista noa", - "lists.search": "Chircare intre sa gente chi ses sighende", + "lists.new.title_placeholder": "Tìtulu de sa lista noa", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Ammustra is rispostas a:", + "lists.search": "Chirca intre sa gente chi ses sighende", "lists.subheading": "Is listas tuas", "load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}", "loading_indicator.label": "Carrighende...", - "media_gallery.toggle_visible": "Cua mèdia", + "media_gallery.toggle_visible": "Cua {number, plural, one {immàgine} other {immàgines}}", "missing_indicator.label": "Perunu resurtadu", "missing_indicator.sublabel": "Resursa no agatada", + "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Boles cuare is notìficas de custa persone?", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicatziones mòbiles", "navigation_bar.blocks": "Persones blocadas", - "navigation_bar.bookmarks": "Marcadores", + "navigation_bar.bookmarks": "Sinnalibros", "navigation_bar.community_timeline": "Lìnia de tempus locale", "navigation_bar.compose": "Cumpone unu tut nou", "navigation_bar.direct": "Messàgios diretos", @@ -278,7 +290,7 @@ "navigation_bar.domain_blocks": "Domìnios blocados", "navigation_bar.edit_profile": "Modìfica profilu", "navigation_bar.favourites": "Preferidos", - "navigation_bar.filters": "Paràulas a sa muda", + "navigation_bar.filters": "Faeddos a sa muda", "navigation_bar.follow_requests": "Rechestas de sighidura", "navigation_bar.follows_and_followers": "Persones chi sighis e chi ti sighint", "navigation_bar.info": "Informatziones de su serbidore", @@ -297,7 +309,8 @@ "notification.mention": "{name} t'at mentovadu", "notification.own_poll": "Sondàgiu acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", - "notification.reblog": "{name} at cumpartzidu s'istadu tuo", + "notification.reblog": "{name} at cumpartzidu su tut tuo", + "notification.status": "{name} at publicadu cosa", "notifications.clear": "Lìmpia notìficas", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", "notifications.column_settings.alert": "Notìficas de iscrivania", @@ -305,25 +318,36 @@ "notifications.column_settings.filter_bar.advanced": "Ammustra totu is categorias", "notifications.column_settings.filter_bar.category": "Barra lestra de filtros", "notifications.column_settings.filter_bar.show": "Ammustra", - "notifications.column_settings.follow": "Gente noa chi ti sighit:", - "notifications.column_settings.follow_request": "Rechesta de sighidura noa:", + "notifications.column_settings.follow": "Sighiduras noas:", + "notifications.column_settings.follow_request": "Rechestas noas de sighidura:", "notifications.column_settings.mention": "Mentovos:", "notifications.column_settings.poll": "Resurtados de su sondàgiu:", "notifications.column_settings.push": "Notìficas push", "notifications.column_settings.reblog": "Cumpartziduras:", "notifications.column_settings.show": "Ammustra in sa colunna", "notifications.column_settings.sound": "Reprodue unu sonu", + "notifications.column_settings.status": "Tuts noos:", "notifications.filter.all": "Totus", "notifications.filter.boosts": "Cumpartziduras", "notifications.filter.favourites": "Preferidos", "notifications.filter.follows": "Sighende", "notifications.filter.mentions": "Mentovos", - "notifications.filter.polls": "Resurtados dae su sondàgiu", + "notifications.filter.polls": "Resurtados de su sondàgiu", + "notifications.filter.statuses": "Atualizatziones dae gente chi sighis", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notìficas", + "notifications.mark_as_read": "Sinnala ònnia notìfica comente lèghida", + "notifications.permission_denied": "Is notìficas de iscrivania non sunt a disponimentu pro neghe de rechestas de permissu chi sunt istadas dennegadas in antis", + "notifications.permission_denied_alert": "Is notìficas de iscrivania non podent èssere abilitadas, ca su permissu de su navigadore est istadu dennegadu in antis", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Abilita is notìficas de iscrivania", + "notifications_permission_banner.how_to_control": "Pro retzire notìficas cando Mastodon no est abertu, abilita is notìficas de iscrivania. Podes controllare cun pretzisione is castas de interatziones chi ingendrant notìficas de iscrivania pro mèdiu de su butone {icon} in subra, cando sunt abilitadas.", + "notifications_permission_banner.title": "Non ti perdas mai nudda", + "picture_in_picture.restore": "Torra·ddu a ue fiat", "poll.closed": "Serradu", "poll.refresh": "Atualiza", - "poll.total_people": "{count, plurale, one {# persone} other {# persones}}", - "poll.total_votes": "{count, plurale, one {# votu} other {# votos}}", + "poll.total_people": "{count, plural, one {# persone} other {# persones}}", + "poll.total_votes": "{count, plural, one {# votu} other {# votos}}", "poll.vote": "Vota", "poll.voted": "As votadu custa risposta", "poll_button.add_poll": "Agiunghe unu sondàgiu", @@ -341,14 +365,14 @@ "regeneration_indicator.label": "Carrighende…", "regeneration_indicator.sublabel": "Preparende sa lìnia de tempus printzipale tua.", "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.hours": "{number}o", "relative_time.just_now": "immoe", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "oe", "reply_indicator.cancel": "Annulla", "report.forward": "Torra a imbiare a {target}", - "report.forward_hint": "Custu contu est de un'àteru serbidore. Bi boles imbiare puru una còpia anònima de custu informe?", + "report.forward_hint": "Custu contu est de un'àteru serbidore. Ddi boles imbiare puru una còpia anònima de custu informe?", "report.hint": "S'informe at a èssere imbiadu a sa moderatzione de su serbidore. Podes frunire un'ispiegatzione de sa signalatzione tua de custu contu:", "report.placeholder": "Cummentos additzionales", "report.submit": "Imbia", @@ -357,21 +381,21 @@ "search_popout.search_format": "Formadu de chirca avantzada", "search_popout.tips.full_text": "Testu sèmplitze pro agatare istados chi as iscritu, marcadu comente a preferidos, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines de utente, nòmines visualizados e etichetas chi ddu includent.", "search_popout.tips.hashtag": "eticheta", - "search_popout.tips.status": "istadu", + "search_popout.tips.status": "tut", "search_popout.tips.text": "Testu sèmplitze pro agatare nòmines visualizados, nòmines de utente e etichetas", "search_popout.tips.user": "utente", "search_results.accounts": "Gente", "search_results.hashtags": "Etichetas", "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "Sa chirca de tuts pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", - "search_results.total": "{count, number} {count, plurale, one {resurtadu} other {resurtados}}", + "search_results.total": "{count, number} {count, plural, one {resurtadu} other {resurtados}}", "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}", "status.admin_status": "Aberi custu istadu in s'interfache de moderatzione", "status.block": "Bloca @{name}", - "status.bookmark": "Marcadore", + "status.bookmark": "Sinnalibru", "status.cancel_reblog_private": "Iscontza sa cumpartzidura", "status.cannot_reblog": "Custa publicatzione non podet èssere cumpartzida", - "status.copy": "Còpia su ligàmene a s'istadu tuo", + "status.copy": "Còpia su ligòngiu a su tut tuo", "status.delete": "Cantzella", "status.detailed_status": "Visualizatzione de detàlliu de arresonada", "status.direct": "Messàgiu deretu a @{name}", @@ -379,24 +403,24 @@ "status.favourite": "Preferidos", "status.filtered": "Filtradu", "status.load_more": "Càrriga·nde àteros", - "status.media_hidden": "Mèdias cuados", + "status.media_hidden": "Elementos multimediales cuados", "status.mention": "Mentova @{name}", "status.more": "Àteru", - "status.mute": "Pone @name a sa muda", + "status.mute": "Pone @{name} a sa muda", "status.mute_conversation": "Pone s'arresonada a sa muda", - "status.open": "Ismànnia custu istadu", + "status.open": "Ismànnia custu tut", "status.pin": "Apica in su profilu", "status.pinned": "Tut apicadu", - "status.read_more": "Lèghe·nde àteru", + "status.read_more": "Leghe·nde àteru", "status.reblog": "Cumpartzi", "status.reblog_private": "Cumpartzi cun is utentes originales", "status.reblogged_by": "{name} at cumpartzidu", - "status.reblogs.empty": "No one has boosted this toot yet. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", + "status.reblogs.empty": "Nemos at ancora cumpartzidu custu tut. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", "status.redraft": "Cantzella e torra a iscrìere", - "status.remove_bookmark": "Boga su marcadore", + "status.remove_bookmark": "Boga su sinnalibru", "status.reply": "Risponde", "status.replyAll": "Risponde a su tema", - "status.report": "Signala @{name}", + "status.report": "Sinnala @{name}", "status.sensitive_warning": "Cuntenutu sensìbile", "status.share": "Cumpartzi", "status.show_less": "Ammustra·nde prus pagu", @@ -406,7 +430,7 @@ "status.show_thread": "Ammustra su tema", "status.uncached_media_warning": "No est a disponimentu", "status.unmute_conversation": "Torra a ativare s'arresonada", - "status.unpin": "Isbloca dae pitzu de su profilu", + "status.unpin": "Boga dae pitzu de su profilu", "suggestions.dismiss": "Iscarta cussìgiu", "suggestions.header": "Est possìbile chi tèngias interessu in…", "tabs_bar.federated_timeline": "Federada", @@ -419,33 +443,34 @@ "time_remaining.minutes": "{number, plural, one {abarrat # minutu} other {abarrant # minutos}}", "time_remaining.moments": "Abarrant pagu momentos", "time_remaining.seconds": "{number, plural, one {abarrat # segundu} other {abarrant # segundos}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} dae àteros serbidores non benint ammustrados.", + "timeline_hint.resources.followers": "Sighiduras", + "timeline_hint.resources.follows": "Sighende", + "timeline_hint.resources.statuses": "Tuts prus betzos", + "trends.counter_by_accounts": "{count, plural, one {{counter} persone} other {{counter} persones}} chistionende", "trends.trending_now": "Est tendèntzia immoe", "ui.beforeunload": "S'abbotzu tuo at a èssere pèrdidu si essis dae Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}Mrd", + "units.short.million": "{count}Mln", + "units.short.thousand": "{count}m", "upload_area.title": "Traga pro carrigare", - "upload_button.label": "Agiunghe mèdias ({formats})", + "upload_button.label": "Agiunghe immàgines, unu vìdeu o unu documentu sonoru", "upload_error.limit": "Lìmite de càrriga de archìvios barigadu.", "upload_error.poll": "Non si permitit s'imbiu de archìvios in is sondàgios.", "upload_form.audio_description": "Descritzione pro persones cun pèrdida auditiva", "upload_form.description": "Descritzione pro persones cun problemas visuales", "upload_form.edit": "Modìfica", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Càmbia sa miniadura", "upload_form.undo": "Cantzella", "upload_form.video_description": "Descritzione pro persones cun pèrdida auditiva o problemas visuales", "upload_modal.analyzing_picture": "Analizende immàgine…", "upload_modal.apply": "Àplica", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Sèbera un'immàgine", "upload_modal.description_placeholder": "Su margiane castàngiu brincat lestru a subra de su cane mandrone", "upload_modal.detect_text": "Rileva testu de s'immàgine", - "upload_modal.edit_media": "Modìfica su mèdia", - "upload_modal.hint": "Incarca o traga su tzìrculu in sa previsualizatzione pro seberare su puntu focale chi at a èssere semper visìbile in totu is miniaturas.", + "upload_modal.edit_media": "Modìfica elementu multimediale", + "upload_modal.hint": "Incarca o traga su tzìrculu in sa previsualizatzione pro seberare su puntu focale chi at a èssere semper visìbile in totu is miniaduras.", + "upload_modal.preparing_ocr": "Ammaniende s'OCR…", "upload_modal.preview_label": "Previsualiza ({ratio})", "upload_progress.label": "Carrighende...", "video.close": "Serra su vìdeu", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 4e48d53c8..6640d5472 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Zruš žiadosť o sledovanie", "account.direct": "Priama správa pre @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Doména ukrytá", "account.edit_profile": "Uprav profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Zobrazuj na profile", "account.follow": "Nasleduj", "account.followers": "Sledujúci", @@ -43,7 +45,7 @@ "account.unfollow": "Prestaň následovať", "account.unmute": "Prestaň ignorovať @{name}", "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Klikni pre vloženie poznámky", "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", @@ -79,7 +81,7 @@ "column_header.show_settings": "Ukáž nastavenia", "column_header.unpin": "Odopni", "column_subheading.settings": "Nastavenia", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Iba miestna", "community.column_settings.media_only": "Iba médiá", "community.column_settings.remote_only": "Remote only", "compose_form.direct_message_warning": "Tento príspevok bude boslaný iba spomenutým užívateľom.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Nájdené", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Niesú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Ešte nemáš žiadne oznámenia. Začni komunikovať s ostatnými, aby diskusia mohla začať.", "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo", "error.unexpected_crash.explanation": "Kvôli chybe v našom kóde, alebo problému s kompatibilitou prehliadača, túto stránku nebolo možné zobraziť správne.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Skús obnoviť stránku. Ak to nepomôže, pravdepodobne budeš stále môcť používať Mastodon cez iný prehliadač, alebo natívnu aplikáciu.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlás problém", "follow_request.authorize": "Povoľ prístup", "follow_request.reject": "Odmietni", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "generic.saved": "Uložené", "getting_started.developers": "Vývojári", "getting_started.directory": "Zoznam profilov", "getting_started.documentation": "Dokumentácia", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie", "keyboard_shortcuts.up": "posuň sa vyššie v zozname", "lightbox.close": "Zatvor", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", - "lightbox.view_context": "Ukáž kontext", "lists.account.add": "Pridaj do zoznamu", "lists.account.remove": "Odober zo zoznamu", "lists.delete": "Vymaž list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Zmeň názov", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.subheading": "Tvoje zoznamy", "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", "missing_indicator.label": "Nenájdené", "missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplikácie", "navigation_bar.blocks": "Blokovaní užívatelia", "navigation_bar.bookmarks": "Záložky", @@ -298,6 +310,7 @@ "notification.own_poll": "Tvoja anketa sa skončila", "notification.poll": "Anketa v ktorej si hlasoval/a sa skončila", "notification.reblog": "{name} zdieľal/a tvoj príspevok", + "notification.status": "{name} just posted", "notifications.clear": "Vyčisti oboznámenia", "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", "notifications.column_settings.alert": "Oboznámenia na ploche", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Vyzdvihnutia:", "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", "notifications.filter.favourites": "Obľúbené", "notifications.filter.follows": "Sledovania", "notifications.filter.mentions": "Iba spomenutia", "notifications.filter.polls": "Výsledky ankiet", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} oboznámení", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Uzatvorená", "poll.refresh": "Občerstvi", "poll.total_people": "{count, plural, one {# človek} few {# ľudia} other {# ľudí}}", @@ -420,9 +444,9 @@ "time_remaining.moments": "Ostáva už iba chviľka", "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "Sledujúci", + "timeline_hint.resources.follows": "Následuje", + "timeline_hint.resources.statuses": "Staršie príspevky", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "Teraz populárne", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Rozpoznaj text z obrázka", "upload_modal.edit_media": "Uprav médiá", "upload_modal.hint": "Klikni, alebo potiahni okruh ukážky pre zvolenie z ktorého východzieho bodu bude vždy v dohľadne na všetkých náhľadoch.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "video.close": "Zavri video", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 71ba0d1b6..ca29c4455 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Neposredno sporočilo @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Skrita domena", "account.edit_profile": "Uredi profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Zmožnost profila", "account.follow": "Sledi", "account.followers": "Sledilci", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Rezultati iskanja", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Potovanja in Kraji", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Tukaj ni tutov!", "empty_column.account_unavailable": "Profil ni na voljo", "empty_column.blocks": "Niste še blokirali nobenega uporabnika.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.", "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Overi", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "odfokusiraj območje za sestavljanje besedila/iskanje", "keyboard_shortcuts.up": "premakni se navzgor po seznamu", "lightbox.close": "Zapri", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Naslednji", "lightbox.previous": "Prejšnji", - "lightbox.view_context": "Poglej kontekst", "lists.account.add": "Dodaj na seznam", "lists.account.remove": "Odstrani s seznama", "lists.delete": "Izbriši seznam", @@ -260,6 +266,10 @@ "lists.edit.submit": "Spremeni naslov", "lists.new.create": "Dodaj seznam", "lists.new.title_placeholder": "Nov naslov seznama", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Išči med ljudmi, katerim sledite", "lists.subheading": "Vaši seznami", "load_pending": "{count, plural, one {# nov element} other {# novih elementov}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Preklopi vidljivost", "missing_indicator.label": "Ni najdeno", "missing_indicator.sublabel": "Tega vira ni bilo mogoče najti", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skrij obvestila tega uporabnika?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilne aplikacije", "navigation_bar.blocks": "Blokirani uporabniki", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "Glasovanje, v katerem ste sodelovali, se je končalo", "notification.reblog": "{name} je spodbudil/a vaš status", + "notification.status": "{name} just posted", "notifications.clear": "Počisti obvestila", "notifications.clear_confirmation": "Ali ste prepričani, da želite trajno izbrisati vsa vaša obvestila?", "notifications.column_settings.alert": "Namizna obvestila", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Spodbude:", "notifications.column_settings.show": "Prikaži v stolpcu", "notifications.column_settings.sound": "Predvajaj zvok", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Vse", "notifications.filter.boosts": "Spodbude", "notifications.filter.favourites": "Priljubljeni", "notifications.filter.follows": "Sledi", "notifications.filter.mentions": "Omembe", "notifications.filter.polls": "Rezultati glasovanj", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} obvestil", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Zaprto", "poll.refresh": "Osveži", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Za pošiljanje povlecite in spustite", - "upload_button.label": "Dodaj medije ({formats})", + "upload_button.label": "Dodaj medije", "upload_error.limit": "Omejitev prenosa datoteke je presežena.", "upload_error.poll": "Prenos datoteke z anketami ni dovoljen.", "upload_form.audio_description": "Describe for people with hearing loss", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Pošiljanje...", "video.close": "Zapri video", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 6b33b17b6..b45f62cd5 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Shfletoni më tepër rreth profilit origjinal", "account.cancel_follow_request": "Anulo kërkesën e ndjekjes", "account.direct": "Mesazh i drejtpërdrejtë për @{name}", + "account.disable_notifications": "Resht së njoftuari mua, kur poston @{name}", "account.domain_blocked": "Përkatësia u bllokua", "account.edit_profile": "Përpunoni profilin", + "account.enable_notifications": "Njoftomë, kur poston @{name}", "account.endorse": "Pasqyrojeni në profil", "account.follow": "Ndiqeni", "account.followers": "Ndjekës", @@ -48,7 +50,7 @@ "alert.rate_limited.title": "Shpejtësi e kufizuar", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", - "announcement.announcement": "Njoftime", + "announcement.announcement": "Njoftim", "autosuggest_hashtag.per_week": "{count} për javë", "boost_modal.combo": "Mund të shtypni {combo}, që kjo të anashkalohet herës tjetër", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Përfundime kërkimi", "emoji_button.symbols": "Simbole", "emoji_button.travel": "Udhëtime & Vende", + "empty_column.account_suspended": "Llogaria u pezullua", "empty_column.account_timeline": "S’ka mesazhe këtu!", "empty_column.account_unavailable": "Profil jashtë funksionimi", "empty_column.blocks": "S’keni bllokuar ende ndonjë përdorues.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.", "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë", "error.unexpected_crash.explanation": "Për shkak të një të mete në kodin tonë ose të një problemi përputhshmërie të shfletuesit, kjo faqe s’mund të shfaqet saktë.", + "error.unexpected_crash.explanation_addons": "Kjo faqe s’u shfaq dot saktë. Ky gabim ka gjasa të jetë shkaktuar nga një shtesë shfletuesi ose një mjet përkthimi të automatizuar.", "error.unexpected_crash.next_steps": "Provoni të freskoni faqen. Nëse kjo s’bën punë, mundeni ende të jeni në gjendje të përdorni Mastodon-in që nga një shfletues tjetër ose nga ndonjë aplikacion origjinal prej projektit.", + "error.unexpected_crash.next_steps_addons": "Provoni t’i çaktivizoni dhe të rifreskoni faqen. Nëse kjo s’bën punë, mundeni prapë të jeni në gjendje të përdorni Mastodon-in përmes një shfletuesi tjetër, apo një aplikacioni prej Mastodon-it.", "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", "follow_request.authorize": "Autorizoje", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", + "lightbox.compress": "Ngjeshe kuadratin e parjes së figurave", + "lightbox.expand": "Zgjeroje kuadratin e parjes së figurave", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", - "lightbox.view_context": "Shihni kontekstin", "lists.account.add": "Shto në listë", "lists.account.remove": "Hiqe nga lista", "lists.delete": "Fshije listën", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ndryshoni titullin", "lists.new.create": "Shtoni listë", "lists.new.title_placeholder": "Titull liste të re", + "lists.replies_policy.followed": "Cilido përdorues i ndjekur", + "lists.replies_policy.list": "Anëtarë të listës", + "lists.replies_policy.none": "Askush", + "lists.replies_policy.title": "Shfaq përgjigje për:", "lists.search": "Kërkoni mes personash që ndiqni", "lists.subheading": "Listat tuaja", "load_pending": "{count, plural,one {# objekt i ri }other {# objekte të rinj }}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Fshihni {number, plural, one {figurë} other {figura}}", "missing_indicator.label": "S’u gjet", "missing_indicator.sublabel": "Ky burim s’u gjet dot", + "mute_modal.duration": "Kohëzgjatje", "mute_modal.hide_notifications": "Të kalohen të fshehura njoftimet prej këtij përdoruesi?", + "mute_modal.indefinite": "E pacaktuar", "navigation_bar.apps": "Aplikacione për celular", "navigation_bar.blocks": "Përdorues të bllokuar", "navigation_bar.bookmarks": "Faqerojtës", @@ -298,6 +310,7 @@ "notification.own_poll": "Pyetësori juaj ka përfunduar", "notification.poll": "Ka përfunduar një pyetësor ku keni votuar", "notification.reblog": "{name} përforcoi mesazhin tuaj", + "notification.status": "{name} sapo postoi", "notifications.clear": "Spastroji njoftimet", "notifications.clear_confirmation": "Jeni i sigurt se doni të spastrohen përgjithmonë krejt njoftimet tuaja?", "notifications.column_settings.alert": "Njoftime desktopi", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Përforcime:", "notifications.column_settings.show": "Shfaq në shtylla", "notifications.column_settings.sound": "Luaj një tingull", + "notifications.column_settings.status": "Mesazhe të rinj:", "notifications.filter.all": "Krejt", "notifications.filter.boosts": "Përforcime", "notifications.filter.favourites": "Të parapëlqyer", "notifications.filter.follows": "Ndjekje", "notifications.filter.mentions": "Përmendje", "notifications.filter.polls": "Përfundime pyetësori", + "notifications.filter.statuses": "Përditësime prej personash që ndiqni", + "notifications.grant_permission": "Akordoji leje.", "notifications.group": "{count}s njoftime", + "notifications.mark_as_read": "Vëri shenjë çdo njoftimi si të lexuar", + "notifications.permission_denied": "S’mund të aktivizohen njoftime në desktop, ngaqë janë mohuar lejet për këtë.", + "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", + "notifications.permission_required": "S’merren dot njoftime desktop, ngaqë s’është akorduar leja përkatëse.", + "notifications_permission_banner.enable": "Aktivizo njoftime në desktop", + "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në dekstop, pasi të jenë aktivizuar.", + "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", + "picture_in_picture.restore": "Ktheje ku qe", "poll.closed": "I mbyllur", "poll.refresh": "Rifreskoje", "poll.total_people": "{count, plural,one {# person }other {# vetë }}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Pikase tekstin prej fotoje", "upload_modal.edit_media": "Përpunoni media", "upload_modal.hint": "Që të zgjidhni pikën vatrore e cila do të jetë përherë e dukshme në krejt miniaturat, klikojeni ose tërhiqeni rrethin te paraparja.", + "upload_modal.preparing_ocr": "Po përgatitet OCR-ja…", "upload_modal.preview_label": "Paraparje ({ratio})", "upload_progress.label": "Po ngarkohet…", "video.close": "Mbylle videon", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index a140fa36e..88c9df59b 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Izmeni profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Zaprati", "account.followers": "Pratioca", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Tutni", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Ovde upišite upozorenje", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Rezultati pretrage", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanja & mesta", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Trenutno nemate obaveštenja. Družite se malo da započnete razgovore.", "empty_column.public": "Ovde nema ničega! Napišite nešto javno, ili nađite korisnike sa drugih instanci koje ćete zapratiti da popunite ovu prazninu", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Odobri", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "da ne budete više na pretrazi/pravljenju novog tuta", "keyboard_shortcuts.up": "da se pomerite na gore u listi", "lightbox.close": "Zatvori", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Sledeći", "lightbox.previous": "Prethodni", - "lightbox.view_context": "View context", "lists.account.add": "Dodaj na listu", "lists.account.remove": "Ukloni sa liste", "lists.delete": "Obriši listu", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Dodaj listu", "lists.new.title_placeholder": "Naslov nove liste", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Pretraži među ljudima koje pratite", "lists.subheading": "Vaše liste", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Uključi/isključi vidljivost", "missing_indicator.label": "Nije pronađeno", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Sakrij obaveštenja od ovog korisnika?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} je podržao(la) Vaš status", + "notification.status": "{name} just posted", "notifications.clear": "Očisti obaveštenja", "notifications.clear_confirmation": "Da li ste sigurno da trajno želite da očistite Vaša obaveštenja?", "notifications.column_settings.alert": "Obaveštenja na radnoj površini", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Podrški:", "notifications.column_settings.show": "Prikaži u koloni", "notifications.column_settings.sound": "Puštaj zvuk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Otpremam...", "video.close": "Zatvori video", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 7c42f0e8a..2509c9085 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Поништи захтеве за праћење", "account.direct": "Директна порука @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен сакривен", "account.edit_profile": "Измени профил", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Приказати на профилу", "account.follow": "Запрати", "account.followers": "Пратиоци", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Резултати претраге", "emoji_button.symbols": "Симболи", "emoji_button.travel": "Путовања и места", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Овде нема труба!", "empty_column.account_unavailable": "Профил недоступан", "empty_column.blocks": "Још увек немате блокираних корисника.", @@ -166,7 +169,9 @@ "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.", "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину", "error.unexpected_crash.explanation": "Због грешке у нашем коду или проблема са компатибилношћу прегледача, ова страница се није могла правилно приказати.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Покушајте да освежите страницу. Ако то не помогне, можда ћете и даље моћи да користите Мастодон путем другог прегледача или матичне апликације.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Копирај \"stacktrace\" у клипборд", "errors.unexpected_crash.report_issue": "Пријави проблем", "follow_request.authorize": "Одобри", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "да одфокусирате/не будете више на претрази/прављењу нове трубе", "keyboard_shortcuts.up": "да се померите на горе у листи", "lightbox.close": "Затвори", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Следећи", "lightbox.previous": "Претходни", - "lightbox.view_context": "View context", "lists.account.add": "Додај на листу", "lists.account.remove": "Уклони са листе", "lists.delete": "Обриши листу", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Додај листу", "lists.new.title_placeholder": "Наслов нове листе", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Претражи међу људима које пратите", "lists.subheading": "Ваше листе", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Укључи/искључи видљивост", "missing_indicator.label": "Није пронађено", "missing_indicator.sublabel": "Овај ресурс није пронађен", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Сакриј обавештења од овог корисника?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобилне апликације", "navigation_bar.blocks": "Блокирани корисници", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} је подржао/ла Ваш статус", + "notification.status": "{name} just posted", "notifications.clear": "Очисти обавештења", "notifications.clear_confirmation": "Да ли сте сигурно да трајно желите да очистите Ваша обавештења?", "notifications.column_settings.alert": "Обавештења на радној површини", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Подршки:", "notifications.column_settings.show": "Прикажи у колони", "notifications.column_settings.sound": "Пуштај звук", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} обавештења", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Отпремам...", "video.close": "Затвори видео", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index c9251d73c..a75cca8b5 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Anteckning", "account.add_or_remove_from_list": "Lägg till i eller ta bort från listor", "account.badges.bot": "Robot", "account.badges.group": "Grupp", "account.block": "Blockera @{name}", "account.block_domain": "Dölj allt från {domain}", "account.blocked": "Blockerad", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Läs mer på original profilen", "account.cancel_follow_request": "Avbryt följarförfrågan", "account.direct": "Skicka ett direktmeddelande till @{name}", + "account.disable_notifications": "Sluta meddela mig när @{name} tutar", "account.domain_blocked": "Domän dold", "account.edit_profile": "Redigera profil", + "account.enable_notifications": "Meddela mig när @{name} tutar", "account.endorse": "Visa på profil", "account.follow": "Följ", "account.followers": "Följare", "account.followers.empty": "Ingen följer denna användare än.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Följare} other {{counter} Följare}}", + "account.following_counter": "{count, plural, one {{counter} Följer} other {{counter} Följer}}", "account.follows.empty": "Denna användare följer inte någon än.", "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", @@ -43,12 +45,12 @@ "account.unfollow": "Sluta följ", "account.unmute": "Sluta tysta @{name}", "account.unmute_notifications": "Återaktivera aviseringar från @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Klicka för att lägga till anteckning", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Mängd begränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", "alert.unexpected.title": "Hoppsan!", - "announcement.announcement": "Announcement", + "announcement.announcement": "Meddelande", "autosuggest_hashtag.per_week": "{count} per vecka", "boost_modal.combo": "Du kan trycka {combo} för att slippa detta nästa gång", "bundle_column_error.body": "Något gick fel medan denna komponent laddades.", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Sökresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Resor & platser", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Inga inlägg här!", "empty_column.account_unavailable": "Profilen ej tillgänglig", "empty_column.blocks": "Du har ännu ej blockerat några användare.", @@ -166,13 +169,15 @@ "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.", "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det", "error.unexpected_crash.explanation": "På grund av en bugg i vår kod eller kompatiblitetsproblem i webbläsaren kan den här sidan inte visas korrekt.", + "error.unexpected_crash.explanation_addons": "Denna sida kunde inte visas korrekt. Detta beror troligen på ett webbläsartillägg eller ett automatiskt översättningsverktyg.", "error.unexpected_crash.next_steps": "Prova att ladda om sidan. Om det inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller app.", + "error.unexpected_crash.next_steps_addons": "Prova att avaktivera dem och uppdatera sidan. Om detta inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller en app.", "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", "follow_request.authorize": "Godkänn", "follow_request.reject": "Avvisa", "follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain} personalen att du kanske vill granska dessa följares förfrågningar manuellt.", - "generic.saved": "Saved", + "generic.saved": "Sparad", "getting_started.developers": "Utvecklare", "getting_started.directory": "Profilkatalog", "getting_started.documentation": "Dokumentation", @@ -236,13 +241,13 @@ "keyboard_shortcuts.muted": "för att öppna listan över tystade användare", "keyboard_shortcuts.my_profile": "för att öppna din profil", "keyboard_shortcuts.notifications": "för att öppna Meddelanden", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "öppna media", "keyboard_shortcuts.pinned": "för att öppna Nålade toots", "keyboard_shortcuts.profile": "för att öppna skaparens profil", "keyboard_shortcuts.reply": "för att svara", "keyboard_shortcuts.requests": "för att öppna Följförfrågningar", "keyboard_shortcuts.search": "för att fokusera sökfältet", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "visa/dölja CW-fält", "keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen", "keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW", "keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", "keyboard_shortcuts.up": "för att flytta uppåt i listan", "lightbox.close": "Stäng", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", - "lightbox.view_context": "Visa kontext", "lists.account.add": "Lägg till i lista", "lists.account.remove": "Ta bort från lista", "lists.delete": "Radera lista", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ändra titel", "lists.new.create": "Lägg till lista", "lists.new.title_placeholder": "Ny listrubrik", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Sök bland personer du följer", "lists.subheading": "Dina listor", "load_pending": "{count, plural, other {# objekt}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Växla synlighet", "missing_indicator.label": "Hittades inte", "missing_indicator.sublabel": "Den här resursen kunde inte hittas", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Dölj aviseringar från denna användare?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blockerade användare", "navigation_bar.bookmarks": "Bokmärken", @@ -298,6 +310,7 @@ "notification.own_poll": "Din röstning har avslutats", "notification.poll": "En omröstning du röstat i har avslutats", "notification.reblog": "{name} knuffade din status", + "notification.status": "{name} just posted", "notifications.clear": "Rensa aviseringar", "notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?", "notifications.column_settings.alert": "Skrivbordsaviseringar", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.sound": "Spela upp ljud", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alla", "notifications.filter.boosts": "Knuffar", "notifications.filter.favourites": "Favoriter", "notifications.filter.follows": "Följer", "notifications.filter.mentions": "Omnämningar", "notifications.filter.polls": "Omröstningsresultat", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} aviseringar", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Stängd", "poll.refresh": "Ladda om", "poll.total_people": "{persons, plural, one {# person} other {# personer}}", @@ -419,11 +443,11 @@ "time_remaining.minutes": "{minutes, plural, one {1 minut} other {# minuter}} kvar", "time_remaining.moments": "Återstående tillfällen", "time_remaining.seconds": "{hours, plural, one {# sekund} other {# sekunder}} kvar", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} från andra servrar visas inte.", + "timeline_hint.resources.followers": "Följare", + "timeline_hint.resources.follows": "Följer", + "timeline_hint.resources.statuses": "Äldre tutningar", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} pratar", "trends.trending_now": "Trendar nu", "ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.", "units.short.billion": "{count}B", @@ -433,19 +457,20 @@ "upload_button.label": "Lägg till media", "upload_error.limit": "Filöverföringsgränsen överskriden.", "upload_error.poll": "Filuppladdning tillåts inte med omröstningar.", - "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.audio_description": "Beskriv för personer med hörselnedsättning", "upload_form.description": "Beskriv för synskadade", "upload_form.edit": "Redigera", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Ändra miniatyr", "upload_form.undo": "Ta bort", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning", "upload_modal.analyzing_picture": "Analyserar bild…", "upload_modal.apply": "Verkställ", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Välj bild", "upload_modal.description_placeholder": "En snabb brun räv hoppar över den lata hunden", "upload_modal.detect_text": "Upptäck bildens text", "upload_modal.edit_media": "Redigera meida", "upload_modal.hint": "Klicka eller dra cirkeln på förhandstitten för att välja den fokusering som alltid kommer synas på alla miniatyrer.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Förhandstitt ({ratio})", "upload_progress.label": "Laddar upp...", "video.close": "Stäng video", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index b3822ff08..70f6ab152 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 28f03f781..8f5f06cc4 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -1,22 +1,24 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "குறிப்பு", "account.add_or_remove_from_list": "பட்டியல்களில் சேர்/நீக்கு", "account.badges.bot": "பாட்", "account.badges.group": "குழு", "account.block": "@{name} -ஐத் தடு", "account.block_domain": "{domain} யில் இருந்து வரும் எல்லாவற்றையும் மறை", "account.blocked": "முடக்கப்பட்டது", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "மேலும் உலாவ சுயவிவரத்திற்குச் செல்க", "account.cancel_follow_request": "பின்தொடரும் கோரிக்கையை நிராகரி", "account.direct": "நேரடி செய்தி @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "மறைக்கப்பட்டத் தளங்கள்", "account.edit_profile": "சுயவிவரத்தை மாற்று", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "சுயவிவரத்தில் வெளிப்படுத்து", "account.follow": "பின்தொடர்", "account.followers": "பின்தொடர்பவர்கள்", "account.followers.empty": "இதுவரை யாரும் இந்த பயனரைப் பின்தொடரவில்லை.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} வாசகர்} other {{counter} வாசகர்கள்}}", + "account.following_counter": "{count, plural,one {{counter} சந்தா} other {{counter} சந்தாக்கள்}}", "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", @@ -36,14 +38,14 @@ "account.requested": "ஒப்புதலுக்காகக் காத்திருக்கிறது. பின்தொடரும் கோரிக்கையை நீக்க அழுத்தவும்", "account.share": "@{name} உடைய விவரத்தை பகிர்", "account.show_reblogs": "காட்டு boosts இருந்து @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} டூட்} other {{counter} டூட்டுகள்}}", "account.unblock": "@{name} மீது தடை நீக்குக", "account.unblock_domain": "{domain} ஐ காண்பி", "account.unendorse": "சுயவிவரத்தில் இடம்பெற வேண்டாம்", "account.unfollow": "பின்தொடர்வதை நிறுத்துக", "account.unmute": "@{name} இன் மீது மௌனத் தடையை நீக்குக", "account.unmute_notifications": "@{name} இலிருந்து அறிவிப்புகளின் மீது மௌனத் தடையை நீக்குக", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "குறிப்பு ஒன்றை சேர்க்க சொடுக்கவும்", "alert.rate_limited.message": "{retry_time, time, medium} க்கு பிறகு மீண்டும் முயற்சிக்கவும்.", "alert.rate_limited.title": "பயன்பாடு கட்டுப்படுத்தப்பட்டுள்ளது", "alert.unexpected.message": "எதிர்பாராத பிழை ஏற்பட்டுவிட்டது.", @@ -79,9 +81,9 @@ "column_header.show_settings": "அமைப்புகளைக் காட்டு", "column_header.unpin": "கழட்டு", "column_subheading.settings": "அமைப்புகள்", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "அருகிலிருந்து மட்டுமே", "community.column_settings.media_only": "படங்கள் மட்டுமே", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "தொலைவிலிருந்து மட்டுமே", "compose_form.direct_message_warning": "இந்த டூட் இதில் குறிப்பிடப்பட்டுள்ள பயனர்களுக்கு மட்டுமே அனுப்பப்படும்.", "compose_form.direct_message_warning_learn_more": "மேலும் அறிய", "compose_form.hashtag_warning": "இது ஒரு பட்டியலிடப்படாத டூட் என்பதால் எந்த ஹேஷ்டேகின் கீழும் வராது. ஹேஷ்டேகின் மூலம் பொதுவில் உள்ள டூட்டுகளை மட்டுமே தேட முடியும்.", @@ -127,7 +129,7 @@ "conversation.mark_as_read": "படிக்கபட்டதாகக் குறி", "conversation.open": "உரையாடலைக் காட்டு", "conversation.with": "{names} உடன்", - "directory.federated": "ஆலமரத்தின் அறியப்பட்டப் பகுதியிலிருந்து", + "directory.federated": "அறியப்பட்ட ஃபெடிவெர்சிலிருந்து", "directory.local": "{domain} களத்திலிருந்து மட்டும்", "directory.new_arrivals": "புதிய வரவு", "directory.recently_active": "சற்றுமுன் செயல்பாட்டில் இருந்தவர்கள்", @@ -139,7 +141,7 @@ "emoji_button.food": "உணவு மற்றும் பானம்", "emoji_button.label": "எமோஜியை உள்ளிடு", "emoji_button.nature": "இயற்கை", - "emoji_button.not_found": "வேண்டாம் எமோஜோஸ்! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "எமோஜிக்கள் இல்லை! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "பொருட்கள்", "emoji_button.people": "மக்கள்", "emoji_button.recent": "அடிக்கடி பயன்படுத்தப்படுபவை", @@ -147,88 +149,91 @@ "emoji_button.search_results": "தேடல் முடிவுகள்", "emoji_button.symbols": "குறியீடுகள்", "emoji_button.travel": "சுற்றுலா மற்றும் இடங்கள்", - "empty_column.account_timeline": "இல்லை toots இங்கே!", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "டூட்டுகள் ஏதும் இல்லை!", "empty_column.account_unavailable": "சுயவிவரம் கிடைக்கவில்லை", - "empty_column.blocks": "இதுவரை எந்த பயனர்களும் தடுக்கவில்லை.", + "empty_column.blocks": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", "empty_column.bookmarked_statuses": "உங்களிடம் அடையாளக்குறியிட்ட டூட்டுகள் எவையும் இல்லை. அடையாளக்குறியிட்ட பிறகு அவை இங்கே காட்டப்படும்.", - "empty_column.community": "உள்ளூர் காலக்கெடு காலியாக உள்ளது. பந்தை உருட்டிக்கொள்வதற்கு பகிரங்கமாக ஒன்றை எழுதுங்கள்!", - "empty_column.direct": "உங்களிடம் நேரடியான செய்திகள் எதுவும் இல்லை. நீங்கள் ஒன்றை அனுப்பி அல்லது பெறும் போது, அது இங்கே காண்பிக்கும்.", - "empty_column.domain_blocks": "இன்னும் மறைந்த களங்கள் இல்லை.", - "empty_column.favourited_statuses": "இதுவரை உங்களுக்கு பிடித்த டோட்டுகள் இல்லை. உங்களுக்கு பிடித்த ஒரு போது, அது இங்கே காண்பிக்கும்.", - "empty_column.favourites": "இதுவரை யாரும் இந்தத் தட்டுக்கு ஆதரவில்லை. யாராவது செய்தால், அவர்கள் இங்கே காண்பார்கள்.", - "empty_column.follow_requests": "உங்களுக்கு இன்னும் எந்தவொரு கோரிக்கைகளும் இல்லை. நீங்கள் ஒன்றைப் பெற்றுக்கொண்டால், அது இங்கே காண்பிக்கும்.", - "empty_column.hashtag": "இன்னும் இந்த ஹேஸ்டேக்கில் எதுவும் இல்லை.", - "empty_column.home": "உங்கள் வீட்டுக் காலம் காலியாக உள்ளது! வருகை {public} அல்லது தொடங்குவதற்கு தேடலைப் பயன்படுத்தலாம் மற்றும் பிற பயனர்களை சந்திக்கவும்.", - "empty_column.home.public_timeline": "பொது காலக்கெடு", - "empty_column.list": "இந்த பட்டியலில் இதுவரை எதுவும் இல்லை. இந்த பட்டியலின் உறுப்பினர்கள் புதிய நிலைகளை இடுகையிடுகையில், அவை இங்கே தோன்றும்.", - "empty_column.lists": "உங்களுக்கு இதுவரை எந்த பட்டியலும் இல்லை. நீங்கள் ஒன்றை உருவாக்கினால், அது இங்கே காண்பிக்கும்.", - "empty_column.mutes": "நீங்கள் இதுவரை எந்த பயனர்களையும் முடக்கியிருக்கவில்லை.", - "empty_column.notifications": "உங்களிடம் எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் தொடங்க பிறருடன் தொடர்புகொள்ளவும்.", - "empty_column.public": "இங்கே எதுவும் இல்லை! பகிரங்கமாக ஒன்றை எழுதவும் அல்லது மற்ற நிகழ்வுகளிலிருந்து பயனர்களை அதை நிரப்புவதற்கு கைமுறையாக பின்பற்றவும்", - "error.unexpected_crash.explanation": "மென்பொருள் பழுதுனாலோ அல்லது உங்கள் இணை உலாவியின் பொருந்தாதன்மையினாலோ இந்தப் பக்கத்தை சரியாகக் காண்பிக்க முடியவில்லை.", - "error.unexpected_crash.next_steps": "பக்கத்தை புதுப்பித்துப் பார்க்கவும். வேலை செய்யவில்லையெனில், வேறு ஒரு உலாவியில் இருந்தோ அல்லது உங்கள் கருவிக்கு பொருத்தமான வேறு செயலியில் இருந்தோ மச்டோடனைப் பயன்படுத்தவும்.", - "errors.unexpected_crash.copy_stacktrace": "பழுசெய்தியை பிடிப்புப் பலகைக்கு நகல் எடு", + "empty_column.community": "உங்கள் மாஸ்டடான் முச்சந்தியில் யாரும் இல்லை. எதையேனும் எழுதி ஆட்டத்தைத் துவக்குங்கள்!", + "empty_column.direct": "உங்கள் தனிப்பெட்டியில் செய்திகள் ஏதும் இல்லை. செய்தியை நீங்கள் அனுப்பும்போதோ அல்லது பெறும்போதோ, அது இங்கே காண்பிக்கப்படும்.", + "empty_column.domain_blocks": "தடுக்கப்பட்டக் களங்கள் இதுவரை இல்லை.", + "empty_column.favourited_statuses": "உங்களுக்குப் பிடித்த டூட்டுகள் இதுவரை இல்லை. ஒரு டூட்டில் நீங்கள் விருப்பக்குறி இட்டால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.favourites": "இந்த டூட்டில் இதுவரை யாரும் விருப்பக்குறி இடவில்லை. யாரேனும் விரும்பினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.follow_requests": "வாசகர் கோரிக்கைகள் இதுவரை ஏதும் இல்லை. யாரேனும் கோரிக்கையை அனுப்பினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.hashtag": "இந்த சிட்டையில் இதுவரை ஏதும் இல்லை.", + "empty_column.home": "உங்கள் மாஸ்டடான் வீட்டில் யாரும் இல்லை. {public} -இல் சென்று பார்க்கவும், அல்லது தேடல் கருவியைப் பயன்படுத்திப் பிற பயனர்களைக் கண்டடையவும்.", + "empty_column.home.public_timeline": "பொது டைம்லைன்", + "empty_column.list": "இந்தப் பட்டியலில் இதுவரை ஏதும் இல்லை. இப்பட்டியலின் உறுப்பினர்கள் புதிய டூட்டுகளை இட்டால். அவை இங்கே காண்பிக்கப்படும்.", + "empty_column.lists": "இதுவரை நீங்கள் எந்தப் பட்டியலையும் உருவாக்கவில்லை. உருவாக்கினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.mutes": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", + "empty_column.notifications": "உங்களுக்காக எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் துவங்க பிறரைத் தொடர்புகொள்ளவும்.", + "empty_column.public": "இங்கு எதுவும் இல்லை! இவ்விடத்தை நிரப்ப எதையேனும் எழுதவும், அல்லது வேறு சர்வர்களில் உள்ள பயனர்களைப் பின்தொடரவும்", + "error.unexpected_crash.explanation": "இந்தப் பக்கத்தை சரியாகக் காண்பிக்க இயலவில்லை. மென்பொருளில் உள்ள பிழையோ அல்லது பொருந்தாத உலாவியோ காரணமாக இருக்கலாம்.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "பக்கத்தைப் புதுப்பித்துப் பார்க்கவும். அப்படியும் வேலை செய்யவில்லை எனில், மாஸ்டடானை வேறு ஒரு உலாவியின் மூலமோ, அல்லது பொருத்தமான செயலியின் மூலமோ பயன்படுத்திப் பார்க்கவும்.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு", "errors.unexpected_crash.report_issue": "புகாரளி", - "follow_request.authorize": "அதிகாரமளி", - "follow_request.reject": "விலக்கு", + "follow_request.authorize": "அனுமதியளி", + "follow_request.reject": "நிராகரி", "follow_requests.unlocked_explanation": "உங்கள் கணக்கு பூட்டப்படவில்லை என்றாலும், இந்தக் கணக்குகளிலிருந்து உங்களைப் பின்தொடர விரும்பும் கோரிக்கைகளை நீங்கள் பரீசீலிப்பது நலம் என்று {domain} ஊழியர் எண்ணுகிறார்.", - "generic.saved": "Saved", + "generic.saved": "சேமிக்கப்பட்டது", "getting_started.developers": "உருவாக்குநர்கள்", - "getting_started.directory": "சுயவிவர அடைவு", + "getting_started.directory": "பயனர்கள்", "getting_started.documentation": "ஆவணங்கள்", - "getting_started.heading": "தொடங்குதல்", - "getting_started.invite": "நபர்களை அழைக்கவும்", - "getting_started.open_source_notice": "Mastodon திறந்த மூல மென்பொருள். GitHub இல் நீங்கள் பங்களிக்கவோ அல்லது புகார் அளிக்கவோ முடியும் {github}.", - "getting_started.security": "பத்திரம்", + "getting_started.heading": "முதன்மைப் பக்கம்", + "getting_started.invite": "நண்பர்களை அழைக்க", + "getting_started.open_source_notice": "மாஸ்டடான் ஒரு open source மென்பொருள் ஆகும். {github} -இன் மூலம் உங்களால் இதில் பங்களிக்கவோ, சிக்கல்களைத் தெரியப்படுத்தவோ முடியும்.", + "getting_started.security": "கணக்கு அமைப்புகள்", "getting_started.terms": "சேவை விதிமுறைகள்", "hashtag.column_header.tag_mode.all": "மற்றும் {additional}", "hashtag.column_header.tag_mode.any": "அல்லது {additional}", - "hashtag.column_header.tag_mode.none": "இல்லாமல் {additional}", - "hashtag.column_settings.select.no_options_message": "பரிந்துரைகள் எதுவும் இல்லை", - "hashtag.column_settings.select.placeholder": "ஹாஷ்டேகுகளை உள்ளிடவும் …", + "hashtag.column_header.tag_mode.none": "{additional} தவிர்த்து", + "hashtag.column_settings.select.no_options_message": "பரிந்துரைகள் ஏதும் இல்லை", + "hashtag.column_settings.select.placeholder": "சிட்டைகளை உள்ளிடவும்…", "hashtag.column_settings.tag_mode.all": "இவை அனைத்தும்", - "hashtag.column_settings.tag_mode.any": "இவை எதையும்", + "hashtag.column_settings.tag_mode.any": "இவற்றில் எவையேனும்", "hashtag.column_settings.tag_mode.none": "இவற்றில் ஏதுமில்லை", - "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் குறிச்சொற்களை சேர்க்கவும்", - "home.column_settings.basic": "அடிப்படையான", - "home.column_settings.show_reblogs": "காட்டு boosts", - "home.column_settings.show_replies": "பதில்களைக் காண்பி", + "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் சிட்டைகளைச் சேர்க்கவும்", + "home.column_settings.basic": "அடிப்படையானவை", + "home.column_settings.show_reblogs": "பகிர்வுகளைக் காண்பி", + "home.column_settings.show_replies": "மறுமொழிகளைக் காண்பி", "home.hide_announcements": "அறிவிப்புகளை மறை", "home.show_announcements": "அறிவிப்புகளைக் காட்டு", - "intervals.full.days": "{number, plural, one {# day} மற்ற {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} மற்ற {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} மற்ற {# minutes}}", - "introduction.federation.action": "அடுத்த", + "intervals.full.days": "{number, plural, one {# நாள்} other {# நாட்கள்}}", + "intervals.full.hours": "{number, plural, one {# மணிநேரம்} other {# மணிநேரங்கள்}}", + "intervals.full.minutes": "{number, plural, one {# நிமிடம்} other {# நிமிடங்கள்}}", + "introduction.federation.action": "அடுத்து", "introduction.federation.federated.headline": "கூட்டமைந்த", - "introduction.federation.federated.text": "கூட்டமைப்பின் பிற சேவையகங்களிலிருந்து பொது பதிவுகள் கூட்டப்பட்ட காலக்கெடுவில் தோன்றும்.", + "introduction.federation.federated.text": "ஃபெடிவெர்சின் மற்ற சர்வர்களிலிருந்து இடப்படும் பொதுப் பதிவுகள் இந்த மாஸ்டடான் ஆலமரத்தில் தோன்றும்.", "introduction.federation.home.headline": "முகப்பு", - "introduction.federation.home.text": "நீங்கள் பின்பற்றும் நபர்களின் இடுகைகள் உங்கள் வீட்டு ஊட்டத்தில் தோன்றும். நீங்கள் எந்த சர்வரில் யாரையும் பின்பற்ற முடியும்!", + "introduction.federation.home.text": "நீங்கள் பின்தொடரும் நபர்களின் இடுகைகள் உங்கள் மாஸ்டடான் வீட்டில் தோன்றும். உங்களால் எந்த சர்வரில் உள்ள எவரையும் பின்பற்ற முடியும்!", "introduction.federation.local.headline": "அருகாமை", - "introduction.federation.local.text": "உள்ளூர் சேவையகத்தில் தோன்றும் அதே சர்வரில் உள்ளவர்களின் பொது இடுகைகள்.", - "introduction.interactions.action": "பயிற்சி முடிக்க!", - "introduction.interactions.favourite.headline": "விருப்பத்துக்குகந்த", - "introduction.interactions.favourite.text": "நீங்கள் ஒரு காப்பாற்ற முடியும் toot பின்னர், மற்றும் ஆசிரியர் அதை நீங்கள் பிடித்திருக்கிறது என்று, அதை பிடித்திருக்கிறது என்று தெரியப்படுத்துங்கள்.", - "introduction.interactions.reblog.headline": "மதிப்பை உயர்த்து", - "introduction.interactions.reblog.text": "மற்றவர்களின் பகிர்ந்து கொள்ளலாம் toots உங்கள் ஆதரவாளர்களுடன் அவர்களை அதிகரிக்கும்.", - "introduction.interactions.reply.headline": "மறுமொழி கூறு", - "introduction.interactions.reply.text": "நீங்கள் மற்றவர்களுக்கும் உங்கள் சொந்த டோட்ட்களிற்கும் பதிலளிப்பீர்கள், இது ஒரு உரையாடலில் சங்கிலி ஒன்றாகச் சேரும்.", - "introduction.welcome.action": "போகலாம்!", - "introduction.welcome.headline": "முதல் படிகள்", - "introduction.welcome.text": "கூட்டாளிக்கு வருக! ஒரு சில நிமிடங்களில், பலவிதமான சேவையகங்களில் செய்திகளை உரையாட மற்றும் உங்கள் நண்பர்களிடம் பேச முடியும். ஆனால் இந்த சர்வர், {domain}, சிறப்பு - இது உங்கள் சுயவிவரத்தை வழங்குகிறது, எனவே அதன் பெயரை நினைவில் கொள்ளுங்கள்.", - "keyboard_shortcuts.back": "பின் செல்வதற்கு", - "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்களின் பட்டியலைத் திறக்க", - "keyboard_shortcuts.boost": "அதிகரிக்கும்", - "keyboard_shortcuts.column": "நெடுவரிசைகளில் ஒன்றில் நிலைக்கு கவனம் செலுத்த வேண்டும்", - "keyboard_shortcuts.compose": "தொகு உரைப்பகுதியை கவனத்தில் கொள்ளவும்", + "introduction.federation.local.text": "உங்கள் சர்வரில் இருக்கும் மற்ற நபர்களின் பொதுப் பதிவுகள் இந்த மாஸ்டடான் முச்சந்தியில் தோன்றும்.", + "introduction.interactions.action": "பயிற்சியை நிறைவு செய்!", + "introduction.interactions.favourite.headline": "விருப்பம்", + "introduction.interactions.favourite.text": "ஒரு டூட்டில் விருப்பக்குறி இடுவதன் மூலம் உங்கள் விருப்பத்தை அதை எழுதியவருக்குத் தெரியப்படுத்த முடியும், மேலும் அந்த டூட்டை மறுவாசிப்பிற்காக சேமிக்கமுடியும்.", + "introduction.interactions.reblog.headline": "பகிர்", + "introduction.interactions.reblog.text": "மற்றவர்களின் டூட்டுகளைப் பகிர்வதன் மூலம் அவற்றை உங்கள் வாசகர்களுக்குக் காண்பிக்க முடியும்.", + "introduction.interactions.reply.headline": "மறுமொழி", + "introduction.interactions.reply.text": "உங்களால் மற்றவர்களின் டூட்டுகளிலும் உங்கள் டூட்டுகளிலும் மறுமொழி இட முடியும். அவை ஒன்றோடு ஒன்றாக சங்கிலிபோல் பின்னப்பட்டு உரையாடலாக மாறும்.", + "introduction.welcome.action": "வாருங்கள் துவங்கலாம்!", + "introduction.welcome.headline": "முதற்படிகள்", + "introduction.welcome.text": "ஃபெடிவெர்ஸ் உங்களை அன்புடன் வரவேற்கிறது! இன்னும் சில நிமிடங்களில் உங்களால் செய்திகளை உலகிற்குச் சொல்லமுடியும். பல்வேறு சர்வர்களில் இருக்கும் உங்கள் நண்பர்களோடு பேச முடியும். ஆனால், இந்த சர்வர் {domain} மிகவும் தனித்துவமானது, ஏனெனில் உங்கள் பக்கத்தை இதுதான் வழங்குகிறது, எனவே இதன் பெயரை நினைவில் கொள்ளுங்கள்.", + "keyboard_shortcuts.back": "பின் செல்ல", + "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்கள் பட்டியலைத் திறக்க", + "keyboard_shortcuts.boost": "பகிர", + "keyboard_shortcuts.column": "ஏதேனும் ஒரு நெடுவரிசையில் உள்ள டூட்டுல் கவனம் செலுத்த", + "keyboard_shortcuts.compose": "பதிவு எழுதும் பெட்டியில் கவனம் செலுத்த", "keyboard_shortcuts.description": "விவரம்", - "keyboard_shortcuts.direct": "நேரடி செய்திகள் பத்தி திறக்க", - "keyboard_shortcuts.down": "பட்டியலில் கீழே நகர்த்த", - "keyboard_shortcuts.enter": "பதிவைத்திறக்க", - "keyboard_shortcuts.favourite": "பிடித்தது", - "keyboard_shortcuts.favourites": "பிடித்தவை பட்டியலை திறக்க", - "keyboard_shortcuts.federated": "ஒருங்கிணைந்த நேரத்தை திறக்க", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "வீட்டு நேரத்தை திறக்க", + "keyboard_shortcuts.direct": "தனிப்பெட்டியைத் திறக்க", + "keyboard_shortcuts.down": "பட்டியலின் கீழே செல்ல", + "keyboard_shortcuts.enter": "டூட்டைத் திறக்க", + "keyboard_shortcuts.favourite": "விருப்பக்குறி இட", + "keyboard_shortcuts.favourites": "விருப்பப் பட்டியலைத் திறக்க", + "keyboard_shortcuts.federated": "மாஸ்டடான் ஆலமரத்தைத் திறக்க", + "keyboard_shortcuts.heading": "விசைப்பலகை குறுக்குவழிகள்", + "keyboard_shortcuts.home": "மாஸ்டடான் வீட்டைத் திறக்க", "keyboard_shortcuts.hotkey": "ஹாட் கீ", "keyboard_shortcuts.legend": "இந்த புராணத்தை காட்சிப்படுத்த", "keyboard_shortcuts.local": "உள்ளூர் காலவரிசை திறக்க", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "பதிலளிக்க", "keyboard_shortcuts.requests": "கோரிக்கைகள் பட்டியலைத் திறக்க", "keyboard_shortcuts.search": "தேடல் கவனம் செலுத்த", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "உள்ளடக்க எச்சரிக்கை செய்தியைக் காட்ட/மறைக்க", "keyboard_shortcuts.start": "'தொடங்குவதற்கு' நெடுவரிசை திறக்க", "keyboard_shortcuts.toggle_hidden": "CW க்கு பின்னால் உரையை மறைக்க / மறைக்க", "keyboard_shortcuts.toggle_sensitivity": "படிமங்களைக் காட்ட/மறைக்க", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "உரை பகுதியை / தேடலை கவனம் செலுத்த வேண்டும்", "keyboard_shortcuts.up": "பட்டியலில் மேலே செல்ல", "lightbox.close": "நெருக்கமாக", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "அடுத்த", "lightbox.previous": "சென்ற", - "lightbox.view_context": "சூழலைக் பார்", "lists.account.add": "பட்டியலில் சேர்", "lists.account.remove": "பட்டியலில் இருந்து அகற்று", "lists.delete": "பட்டியலை நீக்கு", @@ -260,6 +266,10 @@ "lists.edit.submit": "தலைப்பு மாற்றவும்", "lists.new.create": "பட்டியலில் சேர்", "lists.new.title_placeholder": "புதிய பட்டியல் தலைப்பு", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "நீங்கள் பின்தொடரும் நபர்கள் மத்தியில் தேடுதல்", "lists.subheading": "உங்கள் பட்டியல்கள்", "load_pending": "{count, plural,one {# புதியது}other {# புதியவை}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "நிலைமாற்று தெரியும்", "missing_indicator.label": "கிடைக்கவில்லை", "missing_indicator.sublabel": "இந்த ஆதாரத்தை காண முடியவில்லை", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "இந்த பயனரின் அறிவிப்புகளை மறைக்கவா?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "மொபைல் பயன்பாடுகள்", "navigation_bar.blocks": "தடுக்கப்பட்ட பயனர்கள்", "navigation_bar.bookmarks": "அடையாளக்குறிகள்", @@ -298,6 +310,7 @@ "notification.own_poll": "கருத்துக்கணிப்பு நிறைவடைந்தது", "notification.poll": "நீங்கள் வாக்களித்த வாக்கெடுப்பு முடிவடைந்தது", "notification.reblog": "{name} உங்கள் நிலை அதிகரித்தது", + "notification.status": "{name} just posted", "notifications.clear": "அறிவிப்புகளை அழிக்கவும்", "notifications.clear_confirmation": "உங்கள் எல்லா அறிவிப்புகளையும் நிரந்தரமாக அழிக்க விரும்புகிறீர்களா?", "notifications.column_settings.alert": "டெஸ்க்டாப் அறிவிப்புகள்", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "மதிப்பை உயர்த்து:", "notifications.column_settings.show": "பத்தியில் காண்பி", "notifications.column_settings.sound": "ஒலி விளையாட", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "எல்லா", "notifications.filter.boosts": "மதிப்பை உயர்த்து", "notifications.filter.favourites": "விருப்பத்துக்குகந்த", "notifications.filter.follows": "பின்பற்று", "notifications.filter.mentions": "குறிப்பிடுகிறார்", "notifications.filter.polls": "கருத்துக்கணிப்பு முடிவுகள்", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} அறிவிப்புகள்", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "மூடிய", "poll.refresh": "பத்துயிர்ப்ப?ட்டு", "poll.total_people": "{count, plural, one {# நபர்} other {# நபர்கள்}}", @@ -419,11 +443,11 @@ "time_remaining.minutes": "{number, plural, one {# minute} மற்ற {# minutes}} left", "time_remaining.moments": "தருணங்கள் மீதமுள்ளன", "time_remaining.seconds": "{number, plural, one {# second} மற்ற {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "பிற சர்வர்களிலிருந்து வரும் {resource} காட்டப்படவில்லை.", + "timeline_hint.resources.followers": "வாசகர்கள்", + "timeline_hint.resources.follows": "வாசிக்கிறார்", + "timeline_hint.resources.statuses": "பழைய டூட்டுகள்", + "trends.counter_by_accounts": "{count, plural, one {{counter} நபர்} other {{counter} நபர்கள்}} உரையாடலில்", "trends.trending_now": "இப்போது செல்திசையில் இருப்பவை", "ui.beforeunload": "நீங்கள் வெளியே சென்றால் உங்கள் வரைவு இழக்கப்படும் மஸ்தோடோன்.", "units.short.billion": "{count}B", @@ -436,16 +460,17 @@ "upload_form.audio_description": "செவித்திறன் குறைபாடு உள்ளவர்களுக்காக விளக்குக", "upload_form.description": "பார்வையற்ற விவரிக்கவும்", "upload_form.edit": "தொகு", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "சிறுபடத்தை மாற்ற", "upload_form.undo": "நீக்கு", "upload_form.video_description": "செவித்திறன் மற்றும் பார்வைக் குறைபாடு உள்ளவர்களுக்காக விளக்குக", "upload_modal.analyzing_picture": "படம் ஆராயப்படுகிறது…", "upload_modal.apply": "உபயோகி", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "படத்தைத் தேர்வுசெய்ய", "upload_modal.description_placeholder": "பொருள் விளக்கம்", "upload_modal.detect_text": "படத்தில் இருக்கும் எழுத்தை கண்டறி", "upload_modal.edit_media": "படத்தைத் தொகு", "upload_modal.hint": "எல்லா வில்லைப்பட்த்திலும் தெரியவேண்டிய, படத்தின் முக்கிய குவியப்புள்ளிக்கு, வட்டத்தை சொடுக்கி இழுத்துச்செல்லவும்.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "முன்னோட்டம் ({ratio})", "upload_progress.label": "ஏற்றுகிறது ...", "video.close": "வீடியோவை மூடு", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index b3822ff08..70f6ab152 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 4763dcbd3..994682a67 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "@{name}కు నేరుగా సందేశం పంపు", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది", "account.edit_profile": "ప్రొఫైల్ని సవరించండి", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "ప్రొఫైల్లో చూపించు", "account.follow": "అనుసరించు", "account.followers": "అనుచరులు", @@ -96,7 +98,7 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "టూట్", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "మీడియా సున్నితమైనదిగా గుర్తించబడింది", "compose_form.sensitive.unmarked": "మీడియా సున్నితమైనదిగా గుర్తించబడలేదు", "compose_form.spoiler.marked": "హెచ్చరిక వెనుక పాఠ్యం దాచబడింది", @@ -147,6 +149,7 @@ "emoji_button.search_results": "శోధన ఫలితాలు", "emoji_button.symbols": "చిహ్నాలు", "emoji_button.travel": "ప్రయాణం & ప్రదేశాలు", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "ఇక్కడ ఏ టూట్లూ లేవు!No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "మీరు ఇంకా ఏ వినియోగదారులనూ బ్లాక్ చేయలేదు.", @@ -166,7 +169,9 @@ "empty_column.notifications": "మీకు ఇంకా ఏ నోటిఫికేషన్లు లేవు. సంభాషణను ప్రారంభించడానికి ఇతరులతో ప్రతిస్పందించండి.", "empty_column.public": "ఇక్కడ ఏమీ లేదు! దీన్ని నింపడానికి బహిరంగంగా ఏదైనా వ్రాయండి, లేదా ఇతర సేవికల నుండి వినియోగదారులను అనుసరించండి", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "అనుమతించు", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "పాఠ్యం వ్రాసే ఏరియా/శోధన పట్టిక నుండి బయటకు రావడానికి", "keyboard_shortcuts.up": "జాబితాలో పైకి తరలించడానికి", "lightbox.close": "మూసివేయు", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "తరువాత", "lightbox.previous": "మునుపటి", - "lightbox.view_context": "View context", "lists.account.add": "జాబితాకు జోడించు", "lists.account.remove": "జాబితా నుండి తొలగించు", "lists.delete": "జాబితాను తొలగించు", @@ -260,6 +266,10 @@ "lists.edit.submit": "శీర్షిక మార్చు", "lists.new.create": "జాబితాను జోడించు", "lists.new.title_placeholder": "కొత్త జాబితా శీర్షిక", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "మీరు అనుసరించే వ్యక్తులలో శోధించండి", "lists.subheading": "మీ జాబితాలు", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "దృశ్యమానతను టోగుల్ చేయండి", "missing_indicator.label": "దొరకలేదు", "missing_indicator.sublabel": "ఈ వనరు కనుగొనబడలేదు", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "ఈ వినియోగదారు నుండి నోటిఫికేషన్లను దాచాలా?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "మొబైల్ ఆప్ లు", "navigation_bar.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "మీరు పాల్గొనిన ఎన్సిక ముగిసినది", "notification.reblog": "{name} మీ స్టేటస్ ను బూస్ట్ చేసారు", + "notification.status": "{name} just posted", "notifications.clear": "ప్రకటనలను తుడిచివేయు", "notifications.clear_confirmation": "మీరు మీ అన్ని నోటిఫికేషన్లను శాశ్వతంగా తొలగించాలనుకుంటున్నారా?", "notifications.column_settings.alert": "డెస్క్టాప్ నోటిఫికేషన్లు", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "బూస్ట్ లు:", "notifications.column_settings.show": "నిలువు వరుసలో చూపు", "notifications.column_settings.sound": "ధ్వనిని ప్లే చేయి", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "అన్నీ", "notifications.filter.boosts": "బూస్ట్లు", "notifications.filter.favourites": "ఇష్టాలు", "notifications.filter.follows": "అనుసరిస్తున్నవి", "notifications.filter.mentions": "పేర్కొన్నవి", "notifications.filter.polls": "ఎన్నిక ఫలితాలు", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ప్రకటనలు", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "మూసివేయబడినవి", "poll.refresh": "నవీకరించు", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "అప్లోడ్ అవుతోంది...", "video.close": "వీడియోని మూసివేయి", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 596473394..30ec26809 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "เรียกดูเพิ่มเติมในโปรไฟล์ดั้งเดิม", "account.cancel_follow_request": "ยกเลิกคำขอติดตาม", "account.direct": "ส่งข้อความโดยตรงถึง @{name}", + "account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์", "account.domain_blocked": "ปิดกั้นโดเมนอยู่", "account.edit_profile": "แก้ไขโปรไฟล์", + "account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์", "account.endorse": "แสดงให้เห็นในโปรไฟล์", "account.follow": "ติดตาม", "account.followers": "ผู้ติดตาม", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตตัวเลือกเดี่ยว", "compose_form.publish": "โพสต์", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "ทำเครื่องหมายสื่อว่าละเอียดอ่อน", - "compose_form.sensitive.marked": "มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน", - "compose_form.sensitive.unmarked": "ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน", + "compose_form.sensitive.hide": "{count, plural, other {ทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", + "compose_form.sensitive.marked": "{count, plural, other {มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", + "compose_form.sensitive.unmarked": "{count, plural, other {ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", "compose_form.spoiler.marked": "มีการซ่อนข้อความอยู่หลังคำเตือน", "compose_form.spoiler.unmarked": "ไม่มีการซ่อนข้อความ", "compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่", @@ -147,6 +149,7 @@ "emoji_button.search_results": "ผลลัพธ์การค้นหา", "emoji_button.symbols": "สัญลักษณ์", "emoji_button.travel": "การเดินทางและสถานที่", + "empty_column.account_suspended": "ระงับบัญชีอยู่", "empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!", "empty_column.account_unavailable": "ไม่มีโปรไฟล์", "empty_column.blocks": "คุณยังไม่ได้ปิดกั้นผู้ใช้ใด ๆ", @@ -166,7 +169,9 @@ "empty_column.notifications": "คุณยังไม่มีการแจ้งเตือนใด ๆ โต้ตอบกับผู้อื่นเพื่อเริ่มการสนทนา", "empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม", "error.unexpected_crash.explanation": "เนื่องจากข้อบกพร่องในโค้ดของเราหรือปัญหาความเข้ากันได้ของเบราว์เซอร์ จึงไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง", + "error.unexpected_crash.explanation_addons": "ไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง ข้อผิดพลาดนี้เป็นไปได้ว่าเกิดจากส่วนเสริมของเบราว์เซอร์หรือเครื่องมือการแปลอัตโนมัติ", "error.unexpected_crash.next_steps": "ลองรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", + "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือแล้วรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", "follow_request.authorize": "อนุญาต", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "เพื่อเลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "เพื่อย้ายขึ้นในรายการ", "lightbox.close": "ปิด", + "lightbox.compress": "บีบอัดกล่องดูภาพ", + "lightbox.expand": "ขยายกล่องดูภาพ", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", - "lightbox.view_context": "ดูบริบท", "lists.account.add": "เพิ่มไปยังรายการ", "lists.account.remove": "เอาออกจากรายการ", "lists.delete": "ลบรายการ", @@ -260,14 +266,20 @@ "lists.edit.submit": "เปลี่ยนชื่อเรื่อง", "lists.new.create": "เพิ่มรายการ", "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่", + "lists.replies_policy.followed": "ผู้ใช้ใด ๆ ที่ติดตาม", + "lists.replies_policy.list": "สมาชิกของรายการ", + "lists.replies_policy.none": "ไม่มีใคร", + "lists.replies_policy.title": "แสดงการตอบกลับแก่:", "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม", "lists.subheading": "รายการของคุณ", "load_pending": "{count, plural, other {# รายการใหม่}}", "loading_indicator.label": "กำลังโหลด...", - "media_gallery.toggle_visible": "ซ่อน{number, plural, other {ภาพ}}", + "media_gallery.toggle_visible": "ซ่อน {number, plural, other {ภาพ}}", "missing_indicator.label": "ไม่พบ", "missing_indicator.sublabel": "ไม่พบทรัพยากรนี้", + "mute_modal.duration": "ระยะเวลา", "mute_modal.hide_notifications": "ซ่อนการแจ้งเตือนจากผู้ใช้นี้?", + "mute_modal.indefinite": "ไม่มีกำหนด", "navigation_bar.apps": "แอปมือถือ", "navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "navigation_bar.bookmarks": "ที่คั่นหน้า", @@ -298,6 +310,7 @@ "notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว", "notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว", "notification.reblog": "{name} ได้ดันโพสต์ของคุณ", + "notification.status": "{name} เพิ่งโพสต์", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "การดัน:", "notifications.column_settings.show": "แสดงในคอลัมน์", "notifications.column_settings.sound": "เล่นเสียง", + "notifications.column_settings.status": "โพสต์ใหม่:", "notifications.filter.all": "ทั้งหมด", "notifications.filter.boosts": "การดัน", "notifications.filter.favourites": "รายการโปรด", "notifications.filter.follows": "การติดตาม", "notifications.filter.mentions": "การกล่าวถึง", "notifications.filter.polls": "ผลลัพธ์การสำรวจความคิดเห็น", + "notifications.filter.statuses": "การอัปเดตจากผู้คนที่คุณติดตาม", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} การแจ้งเตือน", + "notifications.mark_as_read": "ทำเครื่องหมายทุกการแจ้งเตือนว่าอ่านแล้ว", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "ไม่พลาดสิ่งต่าง ๆ", + "picture_in_picture.restore": "นำกลับมา", "poll.closed": "ปิดแล้ว", "poll.refresh": "รีเฟรช", "poll.total_people": "{count, plural, other {# คน}}", @@ -389,7 +413,7 @@ "status.pinned": "โพสต์ที่ปักหมุด", "status.read_more": "อ่านเพิ่มเติม", "status.reblog": "ดัน", - "status.reblog_private": "ดันไปยังผู้ชมดั้งเดิม", + "status.reblog_private": "ดันด้วยการมองเห็นดั้งเดิม", "status.reblogged_by": "{name} ได้ดัน", "status.reblogs.empty": "ยังไม่มีใครดันโพสต์นี้ เมื่อใครสักคนดัน เขาจะปรากฏที่นี่", "status.redraft": "ลบแล้วร่างใหม่", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "ตรวจหาข้อความจากรูปภาพ", "upload_modal.edit_media": "แก้ไขสื่อ", "upload_modal.hint": "คลิกหรือลากวงกลมในตัวอย่างเพื่อเลือกจุดโฟกัส ซึ่งจะอยู่ในมุมมองของภาพขนาดย่อทั้งหมดเสมอ", + "upload_modal.preparing_ocr": "กำลังเตรียม OCR…", "upload_modal.preview_label": "ตัวอย่าง ({ratio})", "upload_progress.label": "กำลังอัปโหลด...", "video.close": "ปิดวิดีโอ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 351e80f81..1d56d169c 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -1,30 +1,32 @@ { - "account.account_note_header": "@{name} için notunuz", + "account.account_note_header": "Not", "account.add_or_remove_from_list": "Listelere ekle veya kaldır", "account.badges.bot": "Bot", "account.badges.group": "Grup", "account.block": "@{name} adlı kişiyi engelle", - "account.block_domain": "{domain} alanından her şeyi gizle", - "account.blocked": "Engellenmiş", + "account.block_domain": "{domain} alan adını engelle", + "account.blocked": "Engellendi", "account.browse_more_on_origin_server": "Orijinal profilde daha fazlasına göz atın", "account.cancel_follow_request": "Takip isteğini iptal et", - "account.direct": "Mesaj gönder @{name}", - "account.domain_blocked": "Alan adı gizlendi", + "account.direct": "@{name} adlı kişiye mesaj gönder", + "account.disable_notifications": "@{name} gönderi yaptığında bana bildirmeyi durdur", + "account.domain_blocked": "Alan adı engellendi", "account.edit_profile": "Profili düzenle", + "account.enable_notifications": "@{name} gönderi yaptığında bana bildir", "account.endorse": "Profildeki özellik", "account.follow": "Takip et", "account.followers": "Takipçi", "account.followers.empty": "Henüz kimse bu kullanıcıyı takip etmiyor.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Takipçi} other {{counter} Takipçi}}", + "account.following_counter": "{count, plural, one {{counter} Takip Edilen} other {{counter} Takip Edilen}}", "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.", "account.follows_you": "Seni takip ediyor", - "account.hide_reblogs": "@{name} kişisinin yinelemelerini gizle", - "account.last_status": "Son aktivite", + "account.hide_reblogs": "@{name} kişisinin boostlarını gizle", + "account.last_status": "Son etkinlik", "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi", "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceliyor.", "account.media": "Medya", - "account.mention": "@{name} kullanıcısından bahset", + "account.mention": "@{name} kişisinden bahset", "account.moved_to": "{name} şuraya taşındı:", "account.mute": "@{name} adlı kişiyi sessize al", "account.mute_notifications": "@{name} adlı kişinin bildirimlerini kapat", @@ -33,18 +35,18 @@ "account.posts": "Toot", "account.posts_with_replies": "Tootlar ve cevaplar", "account.report": "@{name} adlı kişiyi bildir", - "account.requested": "Onay Bekleniyor. Takip isteğini iptal etmek için tıklayın", - "account.share": "@{name} kullanıcısının profilini paylaş", - "account.show_reblogs": "@{name} kullanıcısının yinelemelerini göster", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.requested": "Onay bekleniyor. Takip isteğini iptal etmek için tıklayın", + "account.share": "@{name} adlı kişinin profilini paylaş", + "account.show_reblogs": "@{name} kişisinin boostlarını göster", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toot}}", "account.unblock": "@{name} adlı kişinin engelini kaldır", - "account.unblock_domain": "{domain} göster", - "account.unendorse": "Profilde özellik yok", + "account.unblock_domain": "{domain} alan adının engelini kaldır", + "account.unendorse": "Profilde gösterme", "account.unfollow": "Takibi bırak", "account.unmute": "@{name} adlı kişinin sesini aç", "account.unmute_notifications": "@{name} adlı kişinin bildirimlerini aç", - "account_note.placeholder": "Yorum yapılmamış", - "alert.rate_limited.message": "Lütfen sonra tekrar deneyin {retry_time, time, medium}.", + "account_note.placeholder": "Not eklemek için tıklayın", + "alert.rate_limited.message": "Lütfen {retry_time, time, medium} süresinden sonra tekrar deneyin.", "alert.rate_limited.title": "Oran sınırlıdır", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", @@ -58,16 +60,16 @@ "bundle_modal_error.message": "Bu bileşen yüklenirken bir şeyler ters gitti.", "bundle_modal_error.retry": "Tekrar deneyin", "column.blocks": "Engellenen kullanıcılar", - "column.bookmarks": "Yer imleri", + "column.bookmarks": "Yer İmleri", "column.community": "Yerel zaman tüneli", - "column.direct": "Doğrudan mesajlar", + "column.direct": "Direkt Mesajlar", "column.directory": "Profillere göz at", - "column.domain_blocks": "Gizli alan adları", + "column.domain_blocks": "Engellenen alan adları", "column.favourites": "Favoriler", "column.follow_requests": "Takip istekleri", - "column.home": "Anasayfa", + "column.home": "Ana Sayfa", "column.lists": "Listeler", - "column.mutes": "Susturulmuş kullanıcılar", + "column.mutes": "Sessize alınmış kullanıcılar", "column.notifications": "Bildirimler", "column.pins": "Sabitlenmiş tootlar", "column.public": "Federe zaman tüneli", @@ -87,45 +89,45 @@ "compose_form.hashtag_warning": "Bu toot liste dışı olduğu için hiç bir etikette yer almayacak. Sadece herkese açık tootlar etiketlerde bulunabilir.", "compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", - "compose_form.placeholder": "Aklınızdan ne geçiyor?", + "compose_form.placeholder": "Aklında ne var?", "compose_form.poll.add_option": "Bir seçenek ekleyin", "compose_form.poll.duration": "Anket süresi", - "compose_form.poll.option_placeholder": "Seçim {number}", - "compose_form.poll.remove_option": "Bu seçimi kaldır", + "compose_form.poll.option_placeholder": "{number}.seçenek", + "compose_form.poll.remove_option": "Bu seçeneği kaldır", "compose_form.poll.switch_to_multiple": "Birden çok seçeneğe izin vermek için anketi değiştir", "compose_form.poll.switch_to_single": "Tek bir seçeneğe izin vermek için anketi değiştir", "compose_form.publish": "Tootla", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Medyayı hassas olarak işaretle", - "compose_form.sensitive.marked": "Medya hassas olarak işaretlendi", - "compose_form.sensitive.unmarked": "Medya hassas olarak işaretlenmemiş", + "compose_form.sensitive.hide": "{count, plural, one {Medyayı hassas olarak işaretle} other {Medyayı hassas olarak işaretle}}", + "compose_form.sensitive.marked": "{count, plural, one {Medya hassas olarak işaretlendi} other {Medya hassas olarak işaretlendi}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Medya hassas olarak işaretlenmemiş} other {Medya hassas olarak işaretlenmemiş}}", "compose_form.spoiler.marked": "Metin uyarının arkasına gizlenir", "compose_form.spoiler.unmarked": "Metin gizli değil", - "compose_form.spoiler_placeholder": "İçerik uyarısı", + "compose_form.spoiler_placeholder": "Uyarınızı buraya yazın", "confirmation_modal.cancel": "İptal", - "confirmations.block.block_and_report": "Engelle & Bildir", + "confirmations.block.block_and_report": "Engelle ve Bildir", "confirmations.block.confirm": "Engelle", - "confirmations.block.message": "{name} kullanıcısını engellemek istiyor musunuz?", + "confirmations.block.message": "{name} adlı kullanıcıyı engellemek istediğinizden emin misiniz?", "confirmations.delete.confirm": "Sil", - "confirmations.delete.message": "Bu gönderiyi silmek istiyor musunuz?", + "confirmations.delete.message": "Bu tootu silmek istediğinizden emin misiniz?", "confirmations.delete_list.confirm": "Sil", "confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinize emin misiniz?", - "confirmations.domain_block.confirm": "Alan adının tamamını gizle", + "confirmations.domain_block.confirm": "Alanın tamamını engelle", "confirmations.domain_block.message": "tüm {domain} alan adını engellemek istediğinizden emin misiniz? Genellikle birkaç hedefli engel ve susturma işi görür ve tercih edilir.", - "confirmations.logout.confirm": "Çıkış Yap", - "confirmations.logout.message": "Çıkış yapmak istediğinize emin misiniz?", + "confirmations.logout.confirm": "Oturumu kapat", + "confirmations.logout.message": "Oturumu kapatmak istediğinizden emin misiniz?", "confirmations.mute.confirm": "Sessize al", "confirmations.mute.explanation": "Bu onlardan gelen ve onlardan bahseden gönderileri gizleyecek, fakat yine de onların gönderilerinizi görmelerine ve sizi takip etmelerine izin verecektir.", - "confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?", - "confirmations.redraft.confirm": "Sil ve yeniden tasarla", - "confirmations.redraft.message": "Bu durumu silip tekrar taslaklaştırmak istediğinizden emin misiniz? Tüm cevapları, boostları ve favorileri kaybedeceksiniz.", + "confirmations.mute.message": "{name} kullanıcısını sessize almak istediğinizden emin misiniz?", + "confirmations.redraft.confirm": "Sil ve yeniden taslak yap", + "confirmations.redraft.message": "Bu toot'u silmek ve yeniden taslak yapmak istediğinizden emin misiniz? Favoriler, boostlar kaybolacak ve orijinal gönderiye verilen yanıtlar sahipsiz kalacak.", "confirmations.reply.confirm": "Yanıtla", "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?", - "confirmations.unfollow.confirm": "Takibi kaldır", - "confirmations.unfollow.message": "{name}'yi takipten çıkarmak istediğinizden emin misiniz?", - "conversation.delete": "Konuşmayı sil", - "conversation.mark_as_read": "Okunmuş olarak işaretle", - "conversation.open": "Konuşmayı görüntüle", + "confirmations.unfollow.confirm": "Takibi bırak", + "confirmations.unfollow.message": "{name} adlı kullanıcıyı takibi bırakmak istediğinizden emin misiniz?", + "conversation.delete": "Sohbeti sil", + "conversation.mark_as_read": "Okundu olarak işaretle", + "conversation.open": "Sohbeti görüntüle", "conversation.with": "{names} ile", "directory.federated": "Bilinen fediverse'lerden", "directory.local": "Yalnızca {domain} adresinden", @@ -137,7 +139,7 @@ "emoji_button.custom": "Özel", "emoji_button.flags": "Bayraklar", "emoji_button.food": "Yiyecek ve İçecek", - "emoji_button.label": "Emoji ekle", + "emoji_button.label": "İfade ekle", "emoji_button.nature": "Doğa", "emoji_button.not_found": "İfade yok!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Nesneler", @@ -147,52 +149,55 @@ "emoji_button.search_results": "Arama sonuçları", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", + "empty_column.account_suspended": "Hesap askıya alındı", "empty_column.account_timeline": "Burada hiç toot yok!", "empty_column.account_unavailable": "Profil kullanılamıyor", "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", - "empty_column.bookmarked_statuses": "Hiç işaretlediğiniz tootunuz yok. Bir tane olduğunda burada görünecek.", + "empty_column.bookmarked_statuses": "Henüz yer imine eklediğiniz toot yok. Yer imine eklendiğinde burada görünecek.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", - "empty_column.direct": "Henüz doğrudan mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.", + "empty_column.direct": "Henüz direkt mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.", "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.", - "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Bir tane olduğunda burada görünecek.", + "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Favori olduğunda burada görünecek.", "empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.", "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.", "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", "empty_column.home.public_timeline": "herkese açık zaman tüneli", "empty_column.list": "Bu listede henüz hiçbir şey yok.", - "empty_column.lists": "Henüz hiç listeniz yok. Bir tane oluşturduğunuzda burada görünecek.", - "empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.", - "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.", + "empty_column.lists": "Henüz listeniz yok. Liste oluşturduğunuzda burada görünecek.", + "empty_column.mutes": "Henüz bir kullanıcıyı sessize almadınız.", + "empty_column.notifications": "Henüz bildiriminiz yok. Sohbete başlamak için başkalarıyla etkileşim kurun.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.", + "error.unexpected_crash.explanation_addons": "Bu sayfa doğru görüntülenemedi. Bu hata büyük olasılıkla bir tarayıcı eklentisinden veya otomatik çeviri araçlarından kaynaklanır.", "error.unexpected_crash.next_steps": "Sayfayı yenilemeyi deneyin. Eğer bu yardımcı olmazsa, Mastodon'u farklı bir tarayıcı ya da yerel uygulama üzerinden kullanabilirsiniz.", + "error.unexpected_crash.next_steps_addons": "Bunları devre dışı bırakmayı ve sayfayı yenilemeyi deneyin. Bu yardımcı olmazsa, Mastodon'u başka bir tarayıcı veya yerel uygulama aracılığıyla kullanabilirsiniz.", "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", - "follow_request.authorize": "Yetkilendir", + "follow_request.authorize": "İzin Ver", "follow_request.reject": "Reddet", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa bile, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.", + "generic.saved": "Kaydedildi", "getting_started.developers": "Geliştiriciler", - "getting_started.directory": "Profil dizini", + "getting_started.directory": "Profil Dizini", "getting_started.documentation": "Belgeler", - "getting_started.heading": "Başlangıç", - "getting_started.invite": "İnsanları davet edin", - "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. Github {github}. {apps} üzerinden katkıda bulunabilir, hata raporlayabilirsiniz.", - "getting_started.security": "Güvenlik", - "getting_started.terms": "Hizmet koşulları", + "getting_started.heading": "Başlarken", + "getting_started.invite": "İnsanları davet et", + "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. GitHub'taki {github} üzerinden katkıda bulunabilir veya sorunları bildirebilirsiniz.", + "getting_started.security": "Hesap ayarları", + "getting_started.terms": "Kullanım şartları", "hashtag.column_header.tag_mode.all": "ve {additional}", "hashtag.column_header.tag_mode.any": "ya da {additional}", "hashtag.column_header.tag_mode.none": "{additional} olmadan", - "hashtag.column_settings.select.no_options_message": "Hiç öneri bulunamadı", - "hashtag.column_settings.select.placeholder": "Hashtagler girin…", + "hashtag.column_settings.select.no_options_message": "Öneri bulunamadı", + "hashtag.column_settings.select.placeholder": "Etiketler girin…", "hashtag.column_settings.tag_mode.all": "Bunların hepsi", - "hashtag.column_settings.tag_mode.any": "Bunların hiçbiri", + "hashtag.column_settings.tag_mode.any": "Herhangi biri", "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri", "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer", "home.column_settings.basic": "Temel", - "home.column_settings.show_reblogs": "Boost edilenleri göster", - "home.column_settings.show_replies": "Cevapları göster", + "home.column_settings.show_reblogs": "Boostları göster", + "home.column_settings.show_replies": "Yanıtları göster", "home.hide_announcements": "Duyuruları gizle", "home.show_announcements": "Duyuruları göster", "intervals.full.days": "{number, plural, one {# gün} other {# gün}}", @@ -201,22 +206,22 @@ "introduction.federation.action": "İleri", "introduction.federation.federated.headline": "Birleşik", "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.", - "introduction.federation.home.headline": "Ana sayfa", + "introduction.federation.home.headline": "Ana Sayfa", "introduction.federation.home.text": "Takip ettiğiniz kişilerin yayınları ana sayfada gösterilecek. Herhangi bir sunucudaki herkesi takip edebilirsiniz!", "introduction.federation.local.headline": "Yerel", "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.", - "introduction.interactions.action": "Öğreticiyi bitirin!", - "introduction.interactions.favourite.headline": "Favori", + "introduction.interactions.action": "Öğreticiyi bitir!", + "introduction.interactions.favourite.headline": "Beğeni", "introduction.interactions.favourite.text": "Bir tootu favorilerinize alarak sonrası için saklayabilirsiniz ve yazara tootu beğendiğinizi söyleyebilirsiniz.", - "introduction.interactions.reblog.headline": "Yinele", - "introduction.interactions.reblog.text": "Başkalarının tootlarını yineleyerek onları kendi takipçilerinizle paylaşabillirsiniz.", + "introduction.interactions.reblog.headline": "Boostla", + "introduction.interactions.reblog.text": "Başkalarının tootlarını boostlayarak onları kendi takipçilerinizle paylaşabillirsiniz.", "introduction.interactions.reply.headline": "Yanıt", "introduction.interactions.reply.text": "Başkalarının ve kendinizin tootlarına cevap verebilirsiniz. Bu, onları bir konuşmada zincirli bir şekilde gösterecektir.", - "introduction.welcome.action": "Hadi gidelim!", + "introduction.welcome.action": "Hadi başlayalım!", "introduction.welcome.headline": "İlk adımlar", "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).", "keyboard_shortcuts.back": "geriye gitmek için", - "keyboard_shortcuts.blocked": "engelli kullanıcılar listesini açmak için", + "keyboard_shortcuts.blocked": "engellenen kullanıcılar listesini açmak için", "keyboard_shortcuts.boost": "boostlamak için", "keyboard_shortcuts.column": "sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "yazma alanına odaklanmak için", @@ -224,102 +229,121 @@ "keyboard_shortcuts.direct": "direkt mesajlar sütununu açmak için", "keyboard_shortcuts.down": "listede aşağıya inmek için", "keyboard_shortcuts.enter": "durumu açmak için", - "keyboard_shortcuts.favourite": "favorilere eklemek için", + "keyboard_shortcuts.favourite": "beğenmek için", "keyboard_shortcuts.favourites": "favoriler listesini açmak için", "keyboard_shortcuts.federated": "federe edilmiş zaman tünelini açmak için", "keyboard_shortcuts.heading": "Klavye kısayolları", - "keyboard_shortcuts.home": "ana sayfa zaman çizelgesini açmak için", - "keyboard_shortcuts.hotkey": "Kısatuş", + "keyboard_shortcuts.home": "anasayfa zaman çizelgesini açmak için", + "keyboard_shortcuts.hotkey": "Kısayol tuşu", "keyboard_shortcuts.legend": "bu efsaneyi görüntülemek için", "keyboard_shortcuts.local": "yerel zaman tünelini açmak için", "keyboard_shortcuts.mention": "yazardan bahsetmek için", - "keyboard_shortcuts.muted": "susturulmuş kullanıcı listesini açmak için", + "keyboard_shortcuts.muted": "sessize alınmış kullanıcı listesini açmak için", "keyboard_shortcuts.my_profile": "profilinizi açmak için", "keyboard_shortcuts.notifications": "bildirimler sütununu açmak için", "keyboard_shortcuts.open_media": "medyayı açmak için", "keyboard_shortcuts.pinned": "sabitlenmiş tootların listesini açmak için", "keyboard_shortcuts.profile": "yazarın profilini açmak için", - "keyboard_shortcuts.reply": "cevaplamak için", + "keyboard_shortcuts.reply": "yanıtlamak için", "keyboard_shortcuts.requests": "takip istekleri listesini açmak için", "keyboard_shortcuts.search": "aramaya odaklanmak için", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "\"başlayın\" sütununu açmak için", + "keyboard_shortcuts.spoilers": "CW alanını göstermek/gizlemek için", + "keyboard_shortcuts.start": "\"başlarken\" sütununu açmak için", "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", "keyboard_shortcuts.toggle_sensitivity": "medyayı göstermek/gizlemek için", - "keyboard_shortcuts.toot": "yeni bir toot başlatmak için", + "keyboard_shortcuts.toot": "yepyeni bir toot başlatmak için", "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", + "lightbox.compress": "Resim görüntüleme kutusunu sıkıştır", + "lightbox.expand": "Resim görüntüleme kutusunu genişlet", "lightbox.next": "Sonraki", - "lightbox.previous": "Önceli", - "lightbox.view_context": "İçeriği göster", + "lightbox.previous": "Önceki", "lists.account.add": "Listeye ekle", "lists.account.remove": "Listeden kaldır", "lists.delete": "Listeyi sil", - "lists.edit": "listeyi düzenle", + "lists.edit": "Listeleri düzenle", "lists.edit.submit": "Başlığı değiştir", "lists.new.create": "Liste ekle", "lists.new.title_placeholder": "Yeni liste başlığı", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Listenin üyeleri", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Yanıtları göster:", "lists.search": "Takip ettiğiniz kişiler arasından arayın", "lists.subheading": "Listeleriniz", "load_pending": "{count, plural, one {# yeni öğe} other {# yeni öğe}}", "loading_indicator.label": "Yükleniyor...", - "media_gallery.toggle_visible": "Görünürlüğü değiştir", + "media_gallery.toggle_visible": "{number, plural, one {Resmi} other {Resimleri}} gizle", "missing_indicator.label": "Bulunamadı", "missing_indicator.sublabel": "Bu kaynak bulunamadı", + "mute_modal.duration": "Süre", "mute_modal.hide_notifications": "Bu kullanıcıdan bildirimler gizlensin mı?", + "mute_modal.indefinite": "Belirsiz", "navigation_bar.apps": "Mobil uygulamalar", "navigation_bar.blocks": "Engellenen kullanıcılar", - "navigation_bar.bookmarks": "Yer imleri", - "navigation_bar.community_timeline": "Yerel zaman tüneli", + "navigation_bar.bookmarks": "Yer İmleri", + "navigation_bar.community_timeline": "Yerel Zaman Tüneli", "navigation_bar.compose": "Yeni toot oluştur", "navigation_bar.direct": "Direkt Mesajlar", "navigation_bar.discover": "Keşfet", - "navigation_bar.domain_blocks": "Gizli alan adları", + "navigation_bar.domain_blocks": "Engellenen alan adları", "navigation_bar.edit_profile": "Profili düzenle", "navigation_bar.favourites": "Favoriler", - "navigation_bar.filters": "Susturulmuş kelimeler", + "navigation_bar.filters": "Sessize alınmış kelimeler", "navigation_bar.follow_requests": "Takip istekleri", "navigation_bar.follows_and_followers": "Takip edilenler ve takipçiler", - "navigation_bar.info": "Genişletilmiş bilgi", + "navigation_bar.info": "Bu sunucu hakkında", "navigation_bar.keyboard_shortcuts": "Klavye kısayolları", "navigation_bar.lists": "Listeler", - "navigation_bar.logout": "Çıkış", + "navigation_bar.logout": "Oturumu kapat", "navigation_bar.mutes": "Sessize alınmış kullanıcılar", "navigation_bar.personal": "Kişisel", "navigation_bar.pins": "Sabitlenmiş tootlar", "navigation_bar.preferences": "Tercihler", "navigation_bar.public_timeline": "Federe zaman tüneli", "navigation_bar.security": "Güvenlik", - "notification.favourite": "{name} senin durumunu favorilere ekledi", - "notification.follow": "{name} seni takip ediyor", - "notification.follow_request": "{name} sizi takip etme isteği gönderdi", + "notification.favourite": "{name} tootunu beğendi", + "notification.follow": "{name} seni takip etti", + "notification.follow_request": "{name} size takip isteği gönderdi", "notification.mention": "{name} senden bahsetti", "notification.own_poll": "Anketiniz sona erdi", - "notification.poll": "Oy verdiğiniz bir anket bitti", - "notification.reblog": "{name} senin durumunu boost etti", + "notification.poll": "Oy verdiğiniz bir anket sona erdi", + "notification.reblog": "{name} tootunu boostladı", + "notification.status": "{name} az önce gönderdi", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", "notifications.column_settings.alert": "Masaüstü bildirimleri", - "notifications.column_settings.favourite": "Favoriler:", - "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri göster", + "notifications.column_settings.favourite": "Beğeniler:", + "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri görüntüle", "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", "notifications.column_settings.filter_bar.show": "Göster", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow_request": "Yeni takip istekleri:", - "notifications.column_settings.mention": "Bahsedilenler:", + "notifications.column_settings.mention": "Bahsetmeler:", "notifications.column_settings.poll": "Anket sonuçları:", - "notifications.column_settings.push": "Push bildirimleri", + "notifications.column_settings.push": "Anlık bildirimler", "notifications.column_settings.reblog": "Boostlar:", - "notifications.column_settings.show": "Bildirimlerde göster", + "notifications.column_settings.show": "Sütunda göster", "notifications.column_settings.sound": "Ses çal", + "notifications.column_settings.status": "Yeni tootlar:", "notifications.filter.all": "Tümü", "notifications.filter.boosts": "Boostlar", - "notifications.filter.favourites": "Favoriler", + "notifications.filter.favourites": "Beğeniler", "notifications.filter.follows": "Takip edilenler", "notifications.filter.mentions": "Bahsetmeler", "notifications.filter.polls": "Anket sonuçları", + "notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} bildirim", + "notifications.mark_as_read": "Her bildirimi okundu olarak işaretle", + "notifications.permission_denied": "Daha önce reddedilen tarayıcı izinleri isteği nedeniyle masaüstü bildirimleri kullanılamıyor", + "notifications.permission_denied_alert": "Tarayıcı izni daha önce reddedildiğinden, masaüstü bildirimleri etkinleştirilemez", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", + "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", + "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", + "picture_in_picture.restore": "Onu geri koy", "poll.closed": "Kapandı", "poll.refresh": "Yenile", "poll.total_people": "{count, plural, one {# kişi} other {# kişi}}", @@ -327,90 +351,90 @@ "poll.vote": "Oy ver", "poll.voted": "Bu cevap için oy kullandınız", "poll_button.add_poll": "Bir anket ekleyin", - "poll_button.remove_poll": "Anket kaldır", - "privacy.change": "Gönderi gizliliğini ayarla", - "privacy.direct.long": "Sadece bahsedilen kişilere gönder", + "poll_button.remove_poll": "Anketi kaldır", + "privacy.change": "Toot gizliliğini ayarlayın", + "privacy.direct.long": "Sadece bahsedilen kullanıcılar için görünür", "privacy.direct.short": "Direkt", - "privacy.private.long": "Sadece takipçilerime gönder", + "privacy.private.long": "Sadece takipçiler için görünür", "privacy.private.short": "Sadece takipçiler", - "privacy.public.long": "Herkese açık zaman tüneline gönder", + "privacy.public.long": "Herkese görünür, herkese açık zaman çizelgelerinde gösterilir", "privacy.public.short": "Herkese açık", - "privacy.unlisted.long": "Herkese açık zaman tüneline gönderme", + "privacy.unlisted.long": "Herkese görünür, ancak genel zaman çizelgelerinde gösterilmez", "privacy.unlisted.short": "Listelenmemiş", "refresh": "Yenile", "regeneration_indicator.label": "Yükleniyor…", - "regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!", + "regeneration_indicator.sublabel": "Ana akışınız hazırlanıyor!", "relative_time.days": "{number}g", - "relative_time.hours": "{number}s", + "relative_time.hours": "{number}sa", "relative_time.just_now": "şimdi", "relative_time.minutes": "{number}dk", "relative_time.seconds": "{number}sn", "relative_time.today": "bugün", "reply_indicator.cancel": "İptal", - "report.forward": "Şu kişiye ilet : {target}", - "report.forward_hint": "Bu hesap başka bir sunucudan. Anonimleştirilmiş bir rapor oraya da gönderilsin mi?", + "report.forward": "{target} ilet", + "report.forward_hint": "Hesap başka bir sunucudan. Raporun anonim bir kopyası da oraya gönderilsin mi?", "report.hint": "Bu rapor sunucu moderatörlerine gönderilecek. Bu hesabı neden bildirdiğiniz hakkında bilgi verebirsiniz:", "report.placeholder": "Ek yorumlar", "report.submit": "Gönder", - "report.target": "Raporlama", + "report.target": "{target} Bildiriliyor", "search.placeholder": "Ara", - "search_popout.search_format": "Gelişmiş arama formatı", - "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, yinelediğiniz veya bunlardan bahsettiğiniz durumların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren durumları döndürür.", - "search_popout.tips.hashtag": "etiketler", - "search_popout.tips.status": "durum", + "search_popout.search_format": "Gelişmiş arama biçimi", + "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, boostladığınız veya bunlardan bahsettiğiniz tootların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren tootları döndürür.", + "search_popout.tips.hashtag": "etiket", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Basit metin, eşleşen görünen adları, kullanıcı adlarını ve hashtag'leri döndürür", "search_popout.tips.user": "kullanıcı", "search_results.accounts": "İnsanlar", - "search_results.hashtags": "Hashtagler", + "search_results.hashtags": "Etiketler", "search_results.statuses": "Tootlar", "search_results.statuses_fts_disabled": "Bu Mastodon sunucusunda toot içeriğine göre arama etkin değil.", - "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuçlar}}", + "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuç}}", "status.admin_account": "@{name} için denetim arayüzünü açın", "status.admin_status": "Denetim arayüzünde bu durumu açın", - "status.block": "Engelle : @{name}", + "status.block": "@{name} adlı kişiyi engelle", "status.bookmark": "Yer imlerine ekle", - "status.cancel_reblog_private": "Boost'u geri al", + "status.cancel_reblog_private": "Boostu geri al", "status.cannot_reblog": "Bu gönderi boost edilemez", "status.copy": "Bağlantı durumunu kopyala", "status.delete": "Sil", - "status.detailed_status": "Detaylı yazışma dökümü", - "status.direct": "@{name}'e gönder", + "status.detailed_status": "Ayrıntılı sohbet görünümü", + "status.direct": "@{name} adlı kişiye direkt mesaj", "status.embed": "Gömülü", - "status.favourite": "Favorilere ekle", + "status.favourite": "Beğen", "status.filtered": "Filtrelenmiş", - "status.load_more": "Daha fazla", + "status.load_more": "Daha fazlasını yükle", "status.media_hidden": "Gizli görsel", - "status.mention": "Bahset : @{name}", + "status.mention": "@{name} kişisinden bahset", "status.more": "Daha fazla", - "status.mute": "Sustur : @{name}", - "status.mute_conversation": "Yazışmayı sustur", - "status.open": "Bu gönderiyi genişlet", + "status.mute": "@{name} kişisini sessize al", + "status.mute_conversation": "Sohbeti sessize al", + "status.open": "Bu tootu genişlet", "status.pin": "Profile sabitle", "status.pinned": "Sabitlenmiş toot", - "status.read_more": "Daha dazla oku", + "status.read_more": "Devamını okuyun", "status.reblog": "Boostla", - "status.reblog_private": "Orjinal kitleye yinele", - "status.reblogged_by": "{name} boost etti", - "status.reblogs.empty": "Henüz kimse bu tootu yinelemedi. Biri yaptığında burada görünecek.", - "status.redraft": "Sil & tekrar taslakla", + "status.reblog_private": "Orijinal görünürlük ile boostla", + "status.reblogged_by": "{name} boostladı", + "status.reblogs.empty": "Henüz kimse bu tootu boostlamadı. Biri yaptığında burada görünecek.", + "status.redraft": "Sil ve yeniden taslak yap", "status.remove_bookmark": "Yer imini kaldır", - "status.reply": "Cevapla", - "status.replyAll": "Mesaj dizisini cevapla", - "status.report": "@{name}'i raporla", + "status.reply": "Yanıtla", + "status.replyAll": "Konuyu yanıtla", + "status.report": "@{name} adlı kişiyi bildir", "status.sensitive_warning": "Hassas içerik", "status.share": "Paylaş", "status.show_less": "Daha az göster", "status.show_less_all": "Hepsi için daha az göster", - "status.show_more": "Daha fazla göster", + "status.show_more": "Daha fazlasını göster", "status.show_more_all": "Hepsi için daha fazla göster", - "status.show_thread": "Mesaj dizisini göster", + "status.show_thread": "Konuyu göster", "status.uncached_media_warning": "Mevcut değil", - "status.unmute_conversation": "Sohbeti aç", + "status.unmute_conversation": "Sohbet sesini aç", "status.unpin": "Profilden sabitlemeyi kaldır", "suggestions.dismiss": "Öneriyi görmezden gel", "suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…", "tabs_bar.federated_timeline": "Federe", - "tabs_bar.home": "Ana sayfa", + "tabs_bar.home": "Ana Sayfa", "tabs_bar.local_timeline": "Yerel", "tabs_bar.notifications": "Bildirimler", "tabs_bar.search": "Ara", @@ -419,33 +443,34 @@ "time_remaining.minutes": "{number, plural, one {# dakika} other {# dakika}} kaldı", "time_remaining.moments": "Sadece birkaç dakika kaldı", "time_remaining.seconds": "{number, plural, one {# saniye} other {# saniye}} kaldı", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.remote_resource_not_displayed": "diğer sunucudaki {resource} gösterilemiyor.", "timeline_hint.resources.followers": "Takipçiler", "timeline_hint.resources.follows": "Takip Edilenler", "timeline_hint.resources.statuses": "Eski tootlar", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Şu an popüler", - "ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "trends.counter_by_accounts": "{count, plural, one {{counter} kişi} other {{counter} kişi}} konuşuyor", + "trends.trending_now": "Şu an gündemde", + "ui.beforeunload": "Mastodon'u terk ederseniz taslağınız kaybolacak.", + "units.short.billion": "{count}Mr", + "units.short.million": "{count}Mn", + "units.short.thousand": "{count}Mn", "upload_area.title": "Karşıya yükleme için sürükle bırak yapınız", - "upload_button.label": "Görsel ekle", + "upload_button.label": "Resim, video veya ses dosyası ekleyin", "upload_error.limit": "Dosya yükleme sınırı aşıldı.", "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.", "upload_form.audio_description": "İşitme kaybı olan kişiler için tarif edin", "upload_form.description": "Görme engelliler için açıklama", "upload_form.edit": "Düzenle", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Geri al", + "upload_form.thumbnail": "Küçük resmi değiştir", + "upload_form.undo": "Sil", "upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için tarif edin", - "upload_modal.analyzing_picture": "Resmi analiz ediyor…", + "upload_modal.analyzing_picture": "Resim analiz ediliyor…", "upload_modal.apply": "Uygula", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Resim seç", "upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi", "upload_modal.detect_text": "Resimdeki metni algıla", "upload_modal.edit_media": "Medyayı düzenle", "upload_modal.hint": "Her zaman tüm küçük resimlerde görüntülenecek odak noktasını seçmek için ön izlemedeki daireyi tıklayın veya sürükleyin.", + "upload_modal.preparing_ocr": "OCR hazırlanıyor…", "upload_modal.preview_label": "Ön izleme ({ratio})", "upload_progress.label": "Yükleniyor...", "video.close": "Videoyu kapat", @@ -454,7 +479,7 @@ "video.expand": "Videoyu genişlet", "video.fullscreen": "Tam ekran", "video.hide": "Videoyu gizle", - "video.mute": "Sesi kıs", + "video.mute": "Sesi sustur", "video.pause": "Duraklat", "video.play": "Oynat", "video.unmute": "Sesi aç" diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json new file mode 100644 index 000000000..224c51301 --- /dev/null +++ b/app/javascript/mastodon/locales/tt.json @@ -0,0 +1,486 @@ +{ + "account.account_note_header": "Язма", + "account.add_or_remove_from_list": "Исемлеккә кертү я бетерү", + "account.badges.bot": "Бот", + "account.badges.group": "Төркем", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Тулырак оригинал профилендә карап була", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domain blocked", + "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.local_only": "Local only", + "community.column_settings.media_only": "Media only", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index b3822ff08..70f6ab152 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -96,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -166,7 +169,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 244f04a9e..941e43c99 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "Переглянути більше в оригіналі", "account.cancel_follow_request": "Скасувати запит на підписку", "account.direct": "Пряме повідомлення @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен приховано", "account.edit_profile": "Редагувати профіль", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Публікувати у профілі", "account.follow": "Підписатися", "account.followers": "Підписники", "account.followers.empty": "Ніхто ще не підписався на цього користувача.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Підписник} few {{counter} Підписники} many {{counter} Підписників} other {{counter} Підписники}}", + "account.following_counter": "{count, plural, one {{counter} Підписка} few {{counter} Підписки} many {{counter} Підписок} other {{counter} Підписки}}", "account.follows.empty": "Цей користувач ще ні на кого не підписався.", "account.follows_you": "Підписаний(-а) на вас", "account.hide_reblogs": "Сховати передмухи від @{name}", @@ -36,7 +38,7 @@ "account.requested": "Очікує підтвердження. Натисніть щоб відмінити запит", "account.share": "Поділитися профілем @{name}", "account.show_reblogs": "Показати передмухи від @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Пост} few {{counter} Пости} many {{counter} Постів} other {{counter} Пости}}", "account.unblock": "Розблокувати @{name}", "account.unblock_domain": "Розблокувати {domain}", "account.unendorse": "Не публікувати у профілі", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Результати пошуку", "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Тут дмухалок немає!", "empty_column.account_unavailable": "Профіль недоступний", "empty_column.blocks": "Ви ще не заблокували жодного користувача.", @@ -166,13 +169,15 @@ "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.", "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку", "error.unexpected_crash.explanation": "Ця сторінка не може бути коректно відображена через баґ у нашому коді або через проблему сумісності браузера.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний додаток.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", "errors.unexpected_crash.report_issue": "Повідомити про проблему", "follow_request.authorize": "Авторизувати", "follow_request.reject": "Відмовити", "follow_requests.unlocked_explanation": "Хоча ваш обліковий запис не заблоковано, працівники {domain} припускають, що, можливо, ви хотіли б переглянути ці запити на підписку.", - "generic.saved": "Saved", + "generic.saved": "Збережено", "getting_started.developers": "Розробникам", "getting_started.directory": "Каталог профілів", "getting_started.documentation": "Документація", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "рухатися вверх списком", "lightbox.close": "Закрити", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Далі", "lightbox.previous": "Назад", - "lightbox.view_context": "Переглянути контекст", "lists.account.add": "Додати до списку", "lists.account.remove": "Видалити зі списку", "lists.delete": "Видалити список", @@ -260,6 +266,10 @@ "lists.edit.submit": "Змінити назву", "lists.new.create": "Додати список", "lists.new.title_placeholder": "Нова назва списку", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Шукати серед людей, на яких ви підписані", "lists.subheading": "Ваші списки", "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Показати/приховати", "missing_indicator.label": "Не знайдено", "missing_indicator.sublabel": "Ресурс не знайдений", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Приховати сповіщення від користувача?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобільні додатки", "navigation_bar.blocks": "Заблоковані користувачі", "navigation_bar.bookmarks": "Закладки", @@ -298,6 +310,7 @@ "notification.own_poll": "Ваше опитування завершено", "notification.poll": "Опитування, у якому ви голосували, закінчилося", "notification.reblog": "{name} передмухнув(-ла) Ваш допис", + "notification.status": "{name} just posted", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?", "notifications.column_settings.alert": "Сповіщення на комп'ютері", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.sound": "Відтворювати звуки", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Усі", "notifications.filter.boosts": "Передмухи", "notifications.filter.favourites": "Улюблені", "notifications.filter.follows": "Підписки", "notifications.filter.mentions": "Згадки", "notifications.filter.polls": "Результати опитування", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} сповіщень", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Закрито", "poll.refresh": "Оновити", "poll.total_people": "{count, plural, one {# особа} other {# осіб}}", @@ -423,29 +447,30 @@ "timeline_hint.resources.followers": "Підписники", "timeline_hint.resources.follows": "Підписки", "timeline_hint.resources.statuses": "Старіші дмухи", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} особа обговорює} few {{counter} особи обговорюють} many {{counter} осіб обговорюють} other {{counter} особи обговорюють}}", "trends.trending_now": "Актуальні", "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} млрд", + "units.short.million": "{count} млн", + "units.short.thousand": "{count} тис", "upload_area.title": "Перетягніть сюди, щоб завантажити", - "upload_button.label": "Додати медіа ({formats})", + "upload_button.label": "Додати медіа", "upload_error.limit": "Ліміт завантаження файлів перевищено.", "upload_error.poll": "Не можна завантажувати файли до опитувань.", "upload_form.audio_description": "Опишіть для людей із вадами слуху", "upload_form.description": "Опишіть для людей з вадами зору", "upload_form.edit": "Змінити", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Змінити мініатюру", "upload_form.undo": "Видалити", "upload_form.video_description": "Опишіть для людей із вадами слуху або зору", "upload_modal.analyzing_picture": "Аналізуємо малюнок…", "upload_modal.apply": "Застосувати", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Вибрати зображення", "upload_modal.description_placeholder": "Щурячий бугай із їжаком-харцизом в'ючись підписали ґешефт у єнах", "upload_modal.detect_text": "Виявити текст на малюнку", "upload_modal.edit_media": "Редагувати медіа", "upload_modal.hint": "Клацніть або перетягніть коло на превью, щоб обрати точку, яку буде завжди видно на мініатюрах.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Переглянути ({ratio})", "upload_progress.label": "Завантаження...", "video.close": "Закрити відео", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index ada675496..aaccf1d83 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "درخواستِ پیروی منسوخ کریں", "account.direct": "راست پیغام @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "پوشیدہ ڈومین", "account.edit_profile": "مشخص ترمیم کریں", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "مشکص پر نمایاں کریں", "account.follow": "پیروی کریں", "account.followers": "پیروکار", @@ -98,7 +100,7 @@ "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "وسائل کو حساس نشاندہ کریں", "compose_form.sensitive.marked": "وسائل حساس نشاندہ ہے", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", @@ -147,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "یہاں کوئی نوٹس نہیں ہیں!", "empty_column.account_unavailable": "مشخص دستیاب نہیں ہے", "empty_column.blocks": "آپ نے ابھی کسی صارف کو مسدود نہیں کیا ہے.", @@ -166,7 +169,9 @@ "empty_column.notifications": "ابھی آپ کیلئے کوئی اطلاعات نہیں ہیں. گفتگو شروع کرنے کے لئے دیگر صارفین سے متعامل ہوں.", "empty_column.public": "یہاں کچھ بھی نہیں ہے! کچھ عمومی تحریر کریں یا اس جگہ کو پُر کرنے کے لئے از خود دیگر سرورس کے صارفین کی پیروی کریں", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "صفحے کو تازہ کرنے کی کوشش کریں. اگر کارآمد نہ ہو تو آپ کسی دیگر براؤزر یا مقامی ایپ سے ہنوز ماسٹوڈون استعمال کر سکتے ہیں.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں", "follow_request.authorize": "اجازت دیں", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index aa0c0d5ff..d22b8d704 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -1,28 +1,30 @@ { - "account.account_note_header": "Viết nhận xét", + "account.account_note_header": "Ghi chú", "account.add_or_remove_from_list": "Thêm hoặc Xóa khỏi danh sách", "account.badges.bot": "Bot", "account.badges.group": "Nhóm", "account.block": "Chặn @{name}", "account.block_domain": "Ẩn mọi thứ từ {domain}", "account.blocked": "Đã chặn", - "account.browse_more_on_origin_server": "Tìm những tài khoản có liên quan", + "account.browse_more_on_origin_server": "Truy cập trang của người này", "account.cancel_follow_request": "Hủy yêu cầu theo dõi", - "account.direct": "Nhắn tin cho @{name}", - "account.domain_blocked": "Đã chặn người dùng", + "account.direct": "Nhắn tin @{name}", + "account.disable_notifications": "Không thông báo khi @{name} đăng tút", + "account.domain_blocked": "Người đã chặn", "account.edit_profile": "Chỉnh sửa trang cá nhân", + "account.enable_notifications": "Thông báo khi @{name} đăng tút", "account.endorse": "Vinh danh người này", "account.follow": "Theo dõi", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", "account.followers_counter": "{count, plural, one {{counter} Người theo dõi} other {{counter} Người theo dõi}}", - "account.following_counter": "{count, plural, one {{counter} Đang theo dõi} other {{counter} Đang theo dõi}}", - "account.follows.empty": "Người dùng này chưa theo dõi ai.", + "account.following_counter": "{count, plural, one {{counter} Theo dõi} other {{counter} Theo dõi}}", + "account.follows.empty": "Người này chưa theo dõi ai.", "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn chia sẻ từ @{name}", - "account.last_status": "Hoạt động cuối", + "account.last_status": "Online", "account.link_verified_on": "Liên kết này đã được xác thực vào {date}", - "account.locked_info": "Người dùng này thiết lập trạng thái ẩn. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", + "account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", "account.media": "Bộ sưu tập", "account.mention": "Nhắc đến @{name}", "account.moved_to": "{name} đã dời sang:", @@ -31,12 +33,12 @@ "account.muted": "Đã ẩn", "account.never_active": "Chưa có bất cứ hoạt động nào", "account.posts": "Tút", - "account.posts_with_replies": "Trả lời", + "account.posts_with_replies": "Tương tác", "account.report": "Báo cáo @{name}", "account.requested": "Đang chờ chấp thuận. Nhấp vào đây để hủy yêu cầu theo dõi", "account.share": "Chia sẻ hồ sơ @{name}", "account.show_reblogs": "Hiện chia sẻ từ @{name}", - "account.statuses_counter": "{count, plural, other {{counter} Tút}}", + "account.statuses_counter": "{count, plural, one {{counter} Tút} other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", "account.unblock_domain": "Bỏ ẩn {domain}", "account.unendorse": "Ngưng vinh danh người này", @@ -48,35 +50,35 @@ "alert.rate_limited.title": "Vượt giới hạn", "alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.", "alert.unexpected.title": "Ốiii!", - "announcement.announcement": "Thông báo", + "announcement.announcement": "Thông báo chung", "autosuggest_hashtag.per_week": "{count} mỗi tuần", - "boost_modal.combo": "Bạn có thể nhấn {combo} để bỏ qua", + "boost_modal.combo": "Nhấn {combo} để chia sẻ nhanh hơn", "bundle_column_error.body": "Đã có lỗi xảy ra trong khi tải nội dung này.", "bundle_column_error.retry": "Thử lại", "bundle_column_error.title": "Không có kết nối internet", "bundle_modal_error.close": "Đóng", "bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải nội dung này.", "bundle_modal_error.retry": "Thử lại", - "column.blocks": "Người dùng đã chặn", - "column.bookmarks": "Tút đã lưu", + "column.blocks": "Người đã chặn", + "column.bookmarks": "Đã lưu", "column.community": "Máy chủ của bạn", - "column.direct": "Tin nhắn của bạn", - "column.directory": "Tìm một ai đó", + "column.direct": "Tin nhắn", + "column.directory": "Tìm người cùng sở thích", "column.domain_blocks": "Máy chủ đã chặn", - "column.favourites": "Thích", + "column.favourites": "Lượt thích", "column.follow_requests": "Yêu cầu theo dõi", "column.home": "Bảng tin", "column.lists": "Danh sách", - "column.mutes": "Người dùng đã ẩn", + "column.mutes": "Người đã ẩn", "column.notifications": "Thông báo", "column.pins": "Tút ghim", - "column.public": "Mạng liên kết", + "column.public": "Mạng liên hợp", "column_back_button.label": "Quay lại", - "column_header.hide_settings": "Ẩn cài đặt", + "column_header.hide_settings": "Ẩn bộ lọc", "column_header.moveLeft_settings": "Dời cột sang bên trái", "column_header.moveRight_settings": "Dời cột sang bên phải", "column_header.pin": "Ghim", - "column_header.show_settings": "Hiển thị cài đặt", + "column_header.show_settings": "Hiện bộ lọc", "column_header.unpin": "Không ghim", "column_subheading.settings": "Cài đặt", "community.column_settings.local_only": "Chỉ máy chủ của bạn", @@ -96,11 +98,11 @@ "compose_form.poll.switch_to_single": "Chỉ cho phép chọn duy nhất một lựa chọn", "compose_form.publish": "Tút", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Nội dung nhạy cảm", - "compose_form.sensitive.marked": "Nội dung đã đánh dấu nhạy cảm", - "compose_form.sensitive.unmarked": "Nội dung không đánh dấu nhạy cảm", - "compose_form.spoiler.marked": "Văn bản bị ẩn", - "compose_form.spoiler.unmarked": "Văn bản không ẩn sau spoil", + "compose_form.sensitive.hide": "{count, plural, one {Nội dung là nhạy cảm} other {Nội dung là nhạy cảm}}", + "compose_form.sensitive.marked": "{count, plural, one {Nội dung đã đánh dấu là nhạy cảm} other {Nội dung đã đánh dấu là nhạy cảm}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Nội dung này bình thường} other {Nội dung này bình thường}}", + "compose_form.spoiler.marked": "Hủy nội dung ẩn", + "compose_form.spoiler.unmarked": "Tạo nội dung ẩn", "compose_form.spoiler_placeholder": "Viết nội dung ẩn của bạn ở đây", "confirmation_modal.cancel": "Hủy bỏ", "confirmations.block.block_and_report": "Chặn & Báo cáo", @@ -115,7 +117,7 @@ "confirmations.logout.confirm": "Đăng xuất", "confirmations.logout.message": "Bạn có thật sự muốn thoát?", "confirmations.mute.confirm": "Ẩn", - "confirmations.mute.explanation": "Điều này sẽ khiến tút của người đó và những tút có đề cập đến họ bị ẩn, tuy nhiên vẫn cho phép họ xem bài đăng của bạn và theo dõi bạn.", + "confirmations.mute.explanation": "Điều này sẽ khiến tút của họ và những tút có nhắc đến họ bị ẩn, tuy nhiên họ vẫn có thể xem tút của bạn và theo dõi bạn.", "confirmations.mute.message": "Bạn có chắc chắn muốn ẩn {name}?", "confirmations.redraft.confirm": "Xóa & viết lại", "confirmations.redraft.message": "Bạn có chắc chắn muốn xóa tút và viết lại? Điều này sẽ xóa mất những lượt thích và chia sẻ của tút, cũng như những trả lời sẽ không còn nội dung gốc.", @@ -127,7 +129,7 @@ "conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.open": "Xem toàn bộ tin nhắn", "conversation.with": "Với {names}", - "directory.federated": "Từ mạng liên kết", + "directory.federated": "Từ mạng liên hợp", "directory.local": "Từ {domain}", "directory.new_arrivals": "Mới tham gia", "directory.recently_active": "Hoạt động gần đây", @@ -147,8 +149,9 @@ "emoji_button.search_results": "Kết quả tìm kiếm", "emoji_button.symbols": "Biểu tượng", "emoji_button.travel": "Du lịch", + "empty_column.account_suspended": "Tài khoản vô hiệu hóa", "empty_column.account_timeline": "Chưa có tút nào!", - "empty_column.account_unavailable": "Tài khoản không còn nữa", + "empty_column.account_unavailable": "Tài khoản bị đình chỉ", "empty_column.blocks": "Bạn chưa chặn bất cứ ai.", "empty_column.bookmarked_statuses": "Bạn chưa lưu tút nào. Nếu có, nó sẽ hiển thị ở đây.", "empty_column.community": "Máy chủ của bạn chưa có tút nào công khai. Bạn hãy thử viết gì đó đi!", @@ -157,16 +160,18 @@ "empty_column.favourited_statuses": "Bạn chưa thích tút nào. Hãy thử đi, nó sẽ xuất hiện ở đây.", "empty_column.favourites": "Chưa có ai thích tút này.", "empty_column.follow_requests": "Bạn chưa có yêu cầu theo dõi nào.", - "empty_column.hashtag": "Chưa có bài đăng nào sử dụng hashtag này.", + "empty_column.hashtag": "Chưa có bài đăng nào dùng hashtag này.", "empty_column.home": "Chưa có bất cứ gì! Hãy bắt đầu bằng cách tìm kiếm hoặc truy cập {public} để theo dõi những người bạn quan tâm.", "empty_column.home.public_timeline": "tút công khai", - "empty_column.list": "Chưa có gì trong danh sách. Khi thành viên của danh sách này đăng tút mới, chúng mới xuất hiện ở đây.", - "empty_column.lists": "Bạn không có danh sách nào.", - "empty_column.mutes": "Bạn chưa ẩn người dùng nào.", + "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.", + "empty_column.lists": "Bạn chưa tạo danh sách nào.", + "empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.", "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn tin cho một ai đó.", - "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi người dùng khác", + "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi những người khác", "error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.", + "error.unexpected_crash.explanation_addons": "Trang này không thể hiển thị do xung khắc với add-on của trình duyệt hoặc công cụ tự động dịch ngôn ngữ.", "error.unexpected_crash.next_steps": "Hãy thử làm mới trang. Nếu vẫn không được, bạn hãy vào Mastodon bằng một ứng dụng di động hoặc trình duyệt khác.", + "error.unexpected_crash.next_steps_addons": "Hãy tắt add-on và làm tươi trang. Nếu vẫn không được, bạn nên thử đăng nhập Mastodon trên trình duyệt khác hoặc app khác.", "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", "follow_request.authorize": "Cho phép", @@ -174,9 +179,9 @@ "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.", "generic.saved": "Đã lưu", "getting_started.developers": "Nhà phát triển", - "getting_started.directory": "Danh sách người dùng", + "getting_started.directory": "Mạng lưới", "getting_started.documentation": "Tài liệu", - "getting_started.heading": "Dành cho người mới", + "getting_started.heading": "Quản lý", "getting_started.invite": "Mời bạn bè", "getting_started.open_source_notice": "Mastodon là phần mềm mã nguồn mở. Bạn có thể đóng góp hoặc báo lỗi trên GitHub tại {github}.", "getting_started.security": "Bảo mật", @@ -199,12 +204,12 @@ "intervals.full.hours": "{number, plural, other {# giờ}}", "intervals.full.minutes": "{number, plural, other {# phút}}", "introduction.federation.action": "Tiếp theo", - "introduction.federation.federated.headline": "Mạng liên kết", - "introduction.federation.federated.text": "Nếu máy chủ của bạn có liên kết với các máy chủ khác, bài đăng công khai từ họ sẽ xuất hiện ở Mạng liên kết.", + "introduction.federation.federated.headline": "Mạng liên hợp", + "introduction.federation.federated.text": "Nếu máy chủ của bạn có liên kết với các máy chủ khác, bài đăng công khai từ họ sẽ xuất hiện ở Thế giới.", "introduction.federation.home.headline": "Bảng tin", "introduction.federation.home.text": "Bảng tin là nơi hiển thị bài đăng từ những người bạn theo dõi. Bạn có thể theo dõi bất cứ ai trên bất cứ máy chủ nào!", - "introduction.federation.local.headline": "Máy chủ của bạn", - "introduction.federation.local.text": "Máy chủ của bạn là nơi hiển thị bài đăng công khai từ những người thuộc cùng một máy chủ của bạn.", + "introduction.federation.local.headline": "Cộng đồng", + "introduction.federation.local.text": "Cộng đồng là nơi hiển thị bài đăng công khai từ những người thuộc cùng một máy chủ của bạn.", "introduction.interactions.action": "Tôi đã hiểu rồi!", "introduction.interactions.favourite.headline": "Thích", "introduction.interactions.favourite.text": "Thích một tút có nghĩa là bạn tâm đắc nội dung của tút và muốn lưu giữ để sau này xem lại.", @@ -216,7 +221,7 @@ "introduction.welcome.headline": "Hướng dẫn người mới", "introduction.welcome.text": "Chào mừng bạn đến mạng xã hội liên hợp! Tại đây bạn có thể đăng tải nội dung và trao đổi với bạn bè của mình trên các máy chủ khác nhau. Máy chủ {domain} là nơi lưu trữ trang cá nhân của bạn.", "keyboard_shortcuts.back": "trở lại", - "keyboard_shortcuts.blocked": "mở danh sách người dùng đã chặn", + "keyboard_shortcuts.blocked": "mở danh sách người đã chặn", "keyboard_shortcuts.boost": "chia sẻ", "keyboard_shortcuts.column": "mở các mục", "keyboard_shortcuts.compose": "mở khung soạn tút", @@ -226,14 +231,14 @@ "keyboard_shortcuts.enter": "viết tút mới", "keyboard_shortcuts.favourite": "thích", "keyboard_shortcuts.favourites": "mở lượt thích", - "keyboard_shortcuts.federated": "mở mạng liên kết", + "keyboard_shortcuts.federated": "mở mạng liên hợp", "keyboard_shortcuts.heading": "Các phím tắt", "keyboard_shortcuts.home": "mở bảng tin", "keyboard_shortcuts.hotkey": "Phím tắt", "keyboard_shortcuts.legend": "hiện bảng hướng dẫn này", "keyboard_shortcuts.local": "mở máy chủ của bạn", - "keyboard_shortcuts.mention": "nhắc đến người dùng", - "keyboard_shortcuts.muted": "mở danh sách người dùng đã ẩn", + "keyboard_shortcuts.mention": "nhắc đến ai đó", + "keyboard_shortcuts.muted": "mở danh sách người đã ẩn", "keyboard_shortcuts.my_profile": "mở trang cá nhân của bạn", "keyboard_shortcuts.notifications": "mở mục thông báo", "keyboard_shortcuts.open_media": "mở ảnh hoặc video", @@ -242,7 +247,7 @@ "keyboard_shortcuts.reply": "trả lời", "keyboard_shortcuts.requests": "mở danh sách yêu cầu theo dõi", "keyboard_shortcuts.search": "mở tìm kiếm", - "keyboard_shortcuts.spoilers": "Hiện/ẩn nội dung nhạy cảm", + "keyboard_shortcuts.spoilers": "hiện/ẩn nội dung nhạy cảm", "keyboard_shortcuts.start": "mở mục \"Dành cho người mới\"", "keyboard_shortcuts.toggle_hidden": "ẩn/hiện văn bản bên dưới spoil", "keyboard_shortcuts.toggle_sensitivity": "ẩn/hiện ảnh hoặc video", @@ -250,33 +255,40 @@ "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", + "lightbox.compress": "Thu nhỏ hình", + "lightbox.expand": "Phóng to hình", "lightbox.next": "Tiếp", "lightbox.previous": "Trước", - "lightbox.view_context": "Xem nội dung", "lists.account.add": "Thêm vào danh sách", "lists.account.remove": "Xóa khỏi danh sách", "lists.delete": "Xóa danh sách", "lists.edit": "Sửa danh sách", "lists.edit.submit": "Thay đổi tiêu đề", - "lists.new.create": "Thêm vào danh sách", + "lists.new.create": "Tạo danh sách mới", "lists.new.title_placeholder": "Tên danh sách mới", + "lists.replies_policy.followed": "Người theo dõi", + "lists.replies_policy.list": "Người trong danh sách", + "lists.replies_policy.none": "Không ai", + "lists.replies_policy.title": "Cho phép bình luận với:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", - "load_pending": "{count, plural, one {# tút} other {# tút}}", + "load_pending": "{count, plural, one {# tút mới} other {# tút mới}}", "loading_indicator.label": "Đang tải...", - "media_gallery.toggle_visible": "Ẩn {number, plural, one {ảnh} other {ảnh}}", + "media_gallery.toggle_visible": "Ẩn {number, plural, one {hình ảnh} other {hình ảnh}}", "missing_indicator.label": "Không tìm thấy", - "missing_indicator.sublabel": "Không tìm thấy cái này", - "mute_modal.hide_notifications": "Ẩn thông báo từ người dùng này?", + "missing_indicator.sublabel": "Nội dung này không còn tồn tại", + "mute_modal.duration": "Thời hạn", + "mute_modal.hide_notifications": "Ẩn thông báo từ người này?", + "mute_modal.indefinite": "Vĩnh viễn", "navigation_bar.apps": "Apps", - "navigation_bar.blocks": "Người dùng đã chặn", + "navigation_bar.blocks": "Người đã chặn", "navigation_bar.bookmarks": "Đã lưu", - "navigation_bar.community_timeline": "Máy chủ của bạn", - "navigation_bar.compose": "Soạn tút mới", + "navigation_bar.community_timeline": "Cộng đồng", + "navigation_bar.compose": "Viết tút mới", "navigation_bar.direct": "Tin nhắn", - "navigation_bar.discover": "Cộng đồng", + "navigation_bar.discover": "Khám phá", "navigation_bar.domain_blocks": "Máy chủ đã ẩn", - "navigation_bar.edit_profile": "Chỉnh sửa trang cá nhân", + "navigation_bar.edit_profile": "Trang cá nhân", "navigation_bar.favourites": "Lượt thích", "navigation_bar.filters": "Bộ lọc từ ngữ", "navigation_bar.follow_requests": "Yêu cầu theo dõi", @@ -285,85 +297,97 @@ "navigation_bar.keyboard_shortcuts": "Phím tắt", "navigation_bar.lists": "Danh sách", "navigation_bar.logout": "Đăng xuất", - "navigation_bar.mutes": "Người dùng đã ẩn", + "navigation_bar.mutes": "Người đã ẩn", "navigation_bar.personal": "Cá nhân", "navigation_bar.pins": "Tút ghim", "navigation_bar.preferences": "Cài đặt", - "navigation_bar.public_timeline": "Dòng thời gian liên kết", + "navigation_bar.public_timeline": "Thế giới", "navigation_bar.security": "Bảo mật", - "notification.favourite": "{name} vừa thích tút của bạn", - "notification.follow": "{name} vừa theo dõi bạn", - "notification.follow_request": "{name} vừa yêu cầu theo dõi bạn", + "notification.favourite": "{name} thích tút của bạn", + "notification.follow": "{name} theo dõi bạn", + "notification.follow_request": "{name} yêu cầu theo dõi bạn", "notification.mention": "{name} nhắc đến bạn", - "notification.own_poll": "Cuộc thăm dò của bạn đã kết thúc", - "notification.poll": "Một cuộc thăm dò mà bạn tham gia đã kết thúc", + "notification.own_poll": "Cuộc bình chọn bạn tạo đã kết thúc", + "notification.poll": "Cuộc bình chọn của bạn đã kết thúc", "notification.reblog": "{name} chia sẻ tút của bạn", - "notifications.clear": "Làm trống thông báo", + "notification.status": "{name} vừa đăng", + "notifications.clear": "Xóa hết thông báo", "notifications.clear_confirmation": "Bạn có chắc chắn muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.column_settings.alert": "Thông báo trên máy tính", "notifications.column_settings.favourite": "Lượt thích:", - "notifications.column_settings.filter_bar.advanced": "Hiển thị toàn bộ", - "notifications.column_settings.filter_bar.category": "Lọc nhanh", - "notifications.column_settings.filter_bar.show": "Hiện", + "notifications.column_settings.filter_bar.advanced": "Toàn bộ", + "notifications.column_settings.filter_bar.category": "Phân loại", + "notifications.column_settings.filter_bar.show": "Lượt nhắc", "notifications.column_settings.follow": "Người theo dõi mới:", "notifications.column_settings.follow_request": "Yêu cầu theo dõi mới:", - "notifications.column_settings.mention": "Đề cập:", - "notifications.column_settings.poll": "Kết quả cuộc thăm dò:", + "notifications.column_settings.mention": "Lượt nhắc đến:", + "notifications.column_settings.poll": "Kết quả:", "notifications.column_settings.push": "Thông báo đẩy", "notifications.column_settings.reblog": "Lượt chia sẻ mới:", "notifications.column_settings.show": "Thông báo trên thanh menu", "notifications.column_settings.sound": "Kèm theo tiếng \"bíp\"", + "notifications.column_settings.status": "Tút mới:", "notifications.filter.all": "Toàn bộ", "notifications.filter.boosts": "Chia sẻ", "notifications.filter.favourites": "Thích", "notifications.filter.follows": "Đang theo dõi", "notifications.filter.mentions": "Lượt nhắc đến", - "notifications.filter.polls": "Kết quả cuộc thăm dò", + "notifications.filter.polls": "Kết quả bình chọn", + "notifications.filter.statuses": "Cập nhật từ những người bạn theo dõi", + "notifications.grant_permission": "Cho phép.", "notifications.group": "{count} thông báo", - "poll.closed": "Cuộc thăm dò đã kết thúc", + "notifications.mark_as_read": "Đánh dấu tất cả thông báo là đã đọc", + "notifications.permission_denied": "Trình duyệt không cho phép hiển thị thông báo trên màn hình.", + "notifications.permission_denied_alert": "Không thể bật thông báo trên màn hình bởi vì trình duyệt đã cấm trước đó", + "notifications.permission_required": "Không hiện thông báo trên màn hình bởi vì chưa cho phép.", + "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình", + "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.", + "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào", + "picture_in_picture.restore": "Hiển thị bình thường", + "poll.closed": "Kết thúc", "poll.refresh": "Làm mới", - "poll.total_people": "{count, plural, one {# người bình chọn} other {# người bình chọn}}", - "poll.total_votes": "{count, plural, one {# bình chọn} other {# bình chọn}}", - "poll.vote": "Cuộc thăm dò", - "poll.voted": "Bạn đã bình chọn câu trả lời này", - "poll_button.add_poll": "Tạo thăm dò", - "poll_button.remove_poll": "Hủy thăm dò", + "poll.total_people": "{count, plural, one {# người} other {# người}}", + "poll.total_votes": "{count, plural, one {# người} other {# người}}", + "poll.vote": "Bình chọn", + "poll.voted": "Bạn đã bình chọn rồi", + "poll_button.add_poll": "Tạo bình chọn", + "poll_button.remove_poll": "Hủy cuộc bình chọn", "privacy.change": "Thay đổi quyền riêng tư", "privacy.direct.long": "Chỉ người được nhắc đến mới thấy", "privacy.direct.short": "Tin nhắn", "privacy.private.long": "Chỉ dành cho người theo dõi", - "privacy.private.short": "Chỉ người theo dõi", + "privacy.private.short": "Người theo dõi", "privacy.public.long": "Hiện trên bảng tin máy chủ", "privacy.public.short": "Công khai", - "privacy.unlisted.long": "Ai cũng có thể xem nhưng không hiện trên bảng tin máy chủ", - "privacy.unlisted.short": "Mở", + "privacy.unlisted.long": "Không hiện trên bảng tin máy chủ", + "privacy.unlisted.short": "Riêng tư", "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!", - "relative_time.days": "{number}d", + "relative_time.days": "{number} ngày", "relative_time.hours": "{number}h", - "relative_time.just_now": "vừa xong", + "relative_time.just_now": "mới", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hôm nay", "reply_indicator.cancel": "Hủy bỏ", "report.forward": "Chuyển đến {target}", - "report.forward_hint": "Người dùng này ở máy chủ khác. Gửi một báo xấu ẩn danh tới máy chủ đó?", - "report.hint": "Hãy cho quản trị viên biết lý do tại sao bạn lại báo xấu tài khoản này:", + "report.forward_hint": "Người này thuộc máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?", + "report.hint": "Hãy cho quản trị viên biết lý do vì sao bạn báo cáo người này:", "report.placeholder": "Bổ sung thêm", "report.submit": "Gửi đi", - "report.target": "Báo xấu {target}", + "report.target": "Báo cáo {target}", "search.placeholder": "Tìm kiếm", - "search_popout.search_format": "Tìm kiếm nâng cao", - "search_popout.tips.full_text": "Nội dung trả về bao gồm các tút do bạn viết, yêu thích, đã chia sẻ hoặc được nhắc đến. Cũng như địa chỉ người dùng, tên hiển thị lẫn hashtag.", + "search_popout.search_format": "Gợi ý", + "search_popout.tips.full_text": "Nội dung trả về bao gồm những tút mà bạn đã viết, thích, chia sẻ hoặc những tút có nhắc đến bạn. Bạn cũng có thể tìm địa chỉ người dùng, tên hiển thị và hashtag.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "tút", - "search_popout.tips.text": "Nội dung trả về là địa chỉ người dùng, tên hiển thị và hashtag", + "search_popout.tips.text": "Nội dung trả về là tên người dùng, tên hiển thị và hashtag", "search_popout.tips.user": "người dùng", "search_results.accounts": "Người dùng", "search_results.hashtags": "Hashtags", "search_results.statuses": "Tút", - "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật chức năng tìm kiếm tút.", + "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật tính năng tìm kiếm tút.", "search_results.total": "{count, number} {count, plural, one {kết quả} other {kết quả}}", "status.admin_account": "Mở giao diện quản trị @{name}", "status.admin_status": "Mở tút này trong giao diện quản trị", @@ -374,7 +398,7 @@ "status.copy": "Sao chép URL", "status.delete": "Xóa", "status.detailed_status": "Xem chi tiết thêm", - "status.direct": "Nhắn riêng @{name}", + "status.direct": "Nhắn tin @{name}", "status.embed": "Nhúng", "status.favourite": "Thích", "status.filtered": "Bộ lọc", @@ -387,31 +411,31 @@ "status.open": "Xem nguyên văn", "status.pin": "Ghim lên trang cá nhân", "status.pinned": "Tút đã ghim", - "status.read_more": "Đọc thêm", + "status.read_more": "Đọc tiếp", "status.reblog": "Chia sẻ", - "status.reblog_private": "Chia sẻ với người viết tút gốc", + "status.reblog_private": "Chia sẻ với người có thể xem", "status.reblogged_by": "{name} chia sẻ", "status.reblogs.empty": "Tút này chưa có ai chia sẻ. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Hủy lưu", "status.reply": "Trả lời", "status.replyAll": "Trả lời tất cả", - "status.report": "Báo xấu @{name}", - "status.sensitive_warning": "Nội dung nhạy cảm", + "status.report": "Báo cáo @{name}", + "status.sensitive_warning": "Nhạy cảm", "status.share": "Chia sẻ", "status.show_less": "Thu gọn", - "status.show_less_all": "Thu gọn tất cả", - "status.show_more": "Mở rộng", + "status.show_less_all": "Thu gọn toàn bộ", + "status.show_more": "Xem thêm", "status.show_more_all": "Hiển thị tất cả", - "status.show_thread": "Hiện thêm", - "status.uncached_media_warning": "N/A", + "status.show_thread": "Toàn bộ chủ đề", + "status.uncached_media_warning": "Uncached", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên trang cá nhân", "suggestions.dismiss": "Tắt đề xuất", "suggestions.header": "Có thể bạn quan tâm…", - "tabs_bar.federated_timeline": "Mạng liên kết", + "tabs_bar.federated_timeline": "Thế giới", "tabs_bar.home": "Bảng tin", - "tabs_bar.local_timeline": "Máy chủ của bạn", + "tabs_bar.local_timeline": "Cộng đồng", "tabs_bar.notifications": "Thông báo", "tabs_bar.search": "Tìm kiếm", "time_remaining.days": "Kết thúc sau {number, plural, other {# ngày}}", @@ -432,24 +456,25 @@ "upload_area.title": "Kéo và thả để tải lên", "upload_button.label": "Thêm media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Tập tin tải lên vượt quá giới hạn cho phép.", - "upload_error.poll": "Cuộc thăm dò không được tải tập tin.", - "upload_form.audio_description": "Mô tả cho người thính giác kém", + "upload_error.poll": "Không cho phép đính kèm tập tin.", + "upload_form.audio_description": "Mô tả cho người mất thính giác", "upload_form.description": "Mô tả cho người khiếm thị", "upload_form.edit": "Biên tập", "upload_form.thumbnail": "Đổi ảnh thumbnail", "upload_form.undo": "Xóa bỏ", - "upload_form.video_description": "Mô tả cho người có vấn đề về thính giác", + "upload_form.video_description": "Mô tả cho người mất thị lực hoặc không thể nghe", "upload_modal.analyzing_picture": "Phân tích hình ảnh", "upload_modal.apply": "Áp dụng", - "upload_modal.choose_image": "Chọn hình", + "upload_modal.choose_image": "Chọn ảnh", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Phát hiện văn bản trong hình ảnh", - "upload_modal.edit_media": "Chỉnh sửa ảnh/video", + "upload_modal.detect_text": "Trích văn bản từ trong ảnh", + "upload_modal.edit_media": "Biên tập", "upload_modal.hint": "Nhấp hoặc kéo vòng tròn trên bản xem trước để chọn phần hiển thị trên hình thu nhỏ.", + "upload_modal.preparing_ocr": "Đang nhận dạng ký tự…", "upload_modal.preview_label": "Xem trước ({ratio})", "upload_progress.label": "Đang tải lên...", "video.close": "Đóng video", - "video.download": "Tải tập tin", + "video.download": "Lưu về máy", "video.exit_fullscreen": "Thoát toàn màn hình", "video.expand": "Mở rộng video", "video.fullscreen": "Toàn màn hình", diff --git a/app/javascript/mastodon/locales/whitelist_sa.json b/app/javascript/mastodon/locales/whitelist_sa.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_sa.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_tt.json b/app/javascript/mastodon/locales/whitelist_tt.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_tt.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_zgh.json b/app/javascript/mastodon/locales/whitelist_zgh.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_zgh.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json new file mode 100644 index 000000000..e2c69c116 --- /dev/null +++ b/app/javascript/mastodon/locales/zgh.json @@ -0,0 +1,486 @@ +{ + "account.account_note_header": "ⵍⵎⴷ ⵓⴳⴳⴰⵔ", + "account.add_or_remove_from_list": "ⵔⵏⵓ ⵏⵖ ⵙⵉⵜⵜⵢ ⵙⴳ ⵜⵍⴳⴰⵎⵜ", + "account.badges.bot": "ⴰⴱⵓⵜ", + "account.badges.group": "ⵜⴰⵔⴰⴱⴱⵓⵜ", + "account.block": "ⴳⴷⵍ @{name}", + "account.block_domain": "ⴳⴷⵍ ⵉⴳⵔ {domain}", + "account.blocked": "ⵉⵜⵜⵓⴳⴷⵍ", + "account.browse_more_on_origin_server": "ⵙⵜⴰⵔⴰ ⵓⴳⴳⴰⵔ ⴳ ⵉⴼⵔⵙ ⴰⵏⵚⵍⵉ", + "account.cancel_follow_request": "ⵙⵔ ⵜⵓⵜⵔⴰ ⵏ ⵓⴹⴼⵕ", + "account.direct": "ⵜⵓⵣⵉⵏⵜ ⵜⵓⵙⵔⵉⴷⵜ @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "ⵉⵜⵜⵓⴳⴷⵍ ⵉⴳⵔ", + "account.edit_profile": "ⵙⵏⴼⵍ ⵉⴼⵔⵙ", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "ⴹⴼⵕ", + "account.followers": "ⵉⵎⴹⴼⴰⵕⵏ", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "ⴹⴼⵕⵏ ⴽⵯⵏ", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "ⴰⵙⵏⵖⵎⵉⵙ", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "ⵓⵙⴰⵔ", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "ⴱⴹⵓ ⵉⴼⵔⵙ ⵏ @{name}", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "ⴽⴽⵙ ⴰⴹⴼⴼⵓⵕ", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "autosuggest_hashtag.per_week": "{count} ⵙ ⵉⵎⴰⵍⴰⵙⵙ", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "ⴰⵍⵙ ⴰⵔⵎ", + "bundle_column_error.title": "ⴰⵣⴳⴰⵍ ⵏ ⵓⵥⵟⵟⴰ", + "bundle_modal_error.close": "ⵔⴳⵍ", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "ⴰⵍⵙ ⴰⵔⵎ", + "column.blocks": "ⵉⵏⵙⵙⵎⵔⵙⵏ ⵜⵜⵓⴳⴷⵍⵏⵉⵏ", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "ⵜⵓⴼⵓⵜⵉⵏ", + "column.follow_requests": "Follow requests", + "column.home": "ⴰⵙⵏⵓⴱⴳ", + "column.lists": "ⵜⵉⵍⴳⴰⵎⵉⵏ", + "column.mutes": "Muted users", + "column.notifications": "ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "ⴰⵖⵓⵍ", + "column_header.hide_settings": "ⵙⵏⵜⵍ ⵜⵉⵙⵖⴰⵍ", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "ⵖⵏⵙ", + "column_header.show_settings": "ⵙⵎⴰⵍ ⵜⵉⵙⵖⴰⵍ", + "column_header.unpin": "ⴽⴽⵙ ⴰⵖⵏⴰⵙ", + "column_subheading.settings": "ⵜⵉⵙⵖⴰⵍ", + "community.column_settings.local_only": "ⵖⴰⵙ ⴰⴷⵖⴰⵔⴰⵏ", + "community.column_settings.media_only": "ⵖⴰⵙ ⵉⵙⵏⵖⵎⵉⵙⵏ", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "ⵙⵙⵏ ⵓⴳⴳⴰⵔ", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "ⵎⴰⵢⴷ ⵉⵍⵍⴰⵏ ⴳ ⵉⵅⴼ ⵏⵏⴽ?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "ⴰⵙⵜⵜⴰⵢ {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "ⵙⵔ", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "ⴳⴷⵍ", + "confirmations.block.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴳⴷⵍⴷ {name}?", + "confirmations.delete.confirm": "ⴽⴽⵙ", + "confirmations.delete.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴽⴽⵙⴷ ⵜⴰⵥⵕⵉⴳⵜ ⴰ?", + "confirmations.delete_list.confirm": "ⴽⴽⵙ", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "ⴼⴼⵖ", + "confirmations.logout.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴼⴼⵖⴷ?", + "confirmations.mute.confirm": "ⵥⵥⵉⵥⵏ", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "ⵔⴰⵔ", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "ⴽⴽⵙ ⴰⴹⴼⴼⵓⵕ", + "confirmations.unfollow.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴽⴽⵙⴷ ⴰⴹⴼⴼⵓⵕ ⵉ {name}?", + "conversation.delete": "ⴽⴽⵙ ⴰⵎⵙⴰⵡⴰⵍ", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "ⴰⴽⴷ {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "ⵉⵛⵏⵢⴰⵍⵏ", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "ⵓⵍⴰ ⵉⵎⵓⵊⵉ!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "ⵎⵉⴷⴷⵏ", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "ⵔⵣⵓ...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "ⵜⵉⵎⴰⵜⴰⵔⵉⵏ", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "ⵜⵉⵙⵖⴰⵍ ⵏ ⵓⵎⵉⴹⴰⵏ", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "ⴷ {additional}", + "hashtag.column_header.tag_mode.any": "ⵏⵖ {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "ⵙⴽⵛⵎ ⴰⵀⴰⵛⵟⴰⴳ…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# ⵡⴰⵙⵙ} other {# ⵡⵓⵙⵙⴰⵏ}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# ⵜⵓⵙⴷⵉⴷⵜ} other {# ⵜⵓⵙⴷⵉⴷⵉⵏ}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "ⴰⵙⵏⵓⴱⴳ", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "ⴰⴷⵖⴰⵔⴰⵏ", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "ⵔⴰⵔ", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "ⵔⴳⵍ", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "ⵔⵏⵓ ⵖⵔ ⵜⵍⴳⴰⵎⵜ", + "lists.account.remove": "ⴽⴽⵙ ⵙⴳ ⵜⵍⴳⴰⵎⵜ", + "lists.delete": "ⴽⴽⵙ ⵜⴰⵍⴳⴰⵎⵜ", + "lists.edit": "ⵙⵏⴼⵍ ⵜⴰⵍⴳⴰⵎⵜ", + "lists.edit.submit": "ⵙⵏⴼⵍ ⴰⵣⵡⵍ", + "lists.new.create": "ⵙⴽⵔ ⵜⴰⵍⴳⴰⵎⵜ", + "lists.new.title_placeholder": "ⴰⵣⵡⵍ ⵏ ⵜⵍⴳⴰⵎⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "ⵜⵉⵍⴳⴰⵎⵉⵏ ⵏⵏⴽ", + "load_pending": "{count, plural, one {# ⵓⴼⵔⴷⵉⵙ ⴰⵎⴰⵢⵏⵓ} other {# ⵉⴼⵔⴷⴰⵙ ⵉⵎⴰⵢⵏⵓⵜⵏ}}", + "loading_indicator.label": "ⴰⵣⴷⴰⵎ...", + "media_gallery.toggle_visible": "ⴼⴼⵔ {number, plural, one {ⵜⴰⵡⵍⴰⴼⵜ} other {ⵜⵉⵡⵍⴰⴼⵉⵏ}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "ⴼⴼⵖ", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "ⵖⵔ ⵉⵎⵙⵍⵉ", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "ⴰⴽⴽⵯ", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} ⵜⵏⵖⵎⵉⵙⵉⵏ", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "ⵉⵜⵜⵓⵔⴳⵍ", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# ⵓⴼⴳⴰⵏ} other {# ⵉⴼⴳⴰⵏⵏ}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "ⵔⵏⵓ ⵢⴰⵏ ⵢⵉⴷⵣ", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "ⵜⵓⵔⴷⵉⵜ", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "ⵜⴰⴳⴷⵓⴷⴰⵏⵜ", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "ⴰⵣⴷⴰⵎ…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}ⴰⵙ", + "relative_time.hours": "{number}ⵙⵔⴳ", + "relative_time.just_now": "ⴷⵖⵉ", + "relative_time.minutes": "{number}ⵙⴷ", + "relative_time.seconds": "{number}ⵙⵏ", + "relative_time.today": "ⴰⵙⵙⴰ", + "reply_indicator.cancel": "ⵙⵔ", + "report.forward": "ⵙⵙⵉⴼⴹ ⵉ {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "ⴰⵣⵏ", + "report.target": "Report {target}", + "search.placeholder": "ⵔⵣⵓ", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "ⵎⵉⴷⴷⵏ", + "search_results.hashtags": "ⵀⴰⵛⵟⴰⴳ", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "ⴳⴷⵍ @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "ⴽⴽⵙ", + "status.detailed_status": "Detailed conversation view", + "status.direct": "ⵜⵓⵣⵉⵏⵜ ⵜⵓⵙⵔⵉⴷⵜ ⵉ @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "ⵙⵙⵉⵍⵉ ⵓⴳⴳⴰⵔ", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "ⵓⴳⴳⴰⵔ", + "status.mute": "ⵥⵥⵉⵥⵏ @{name}", + "status.mute_conversation": "ⵥⵥⵉⵥⵏ ⴰⵎⵙⴰⵡⴰⵍ", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "ⵖⵔ ⵓⴳⴳⴰⵔ", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "ⵔⴰⵔ", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "ⴱⴹⵓ", + "status.show_less": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ", + "status.show_less_all": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ ⵉ ⵎⴰⵕⵕⴰ", + "status.show_more": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ", + "status.show_more_all": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ ⵉ ⵎⴰⵕⵕⴰ", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "ⴰⵙⵏⵓⴱⴳ", + "tabs_bar.local_timeline": "ⴰⴷⵖⴰⵔⴰⵏ", + "tabs_bar.notifications": "ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", + "tabs_bar.search": "ⵔⵣⵓ", + "time_remaining.days": "{number, plural, one {# ⵡⴰⵙⵙ} other {# ⵡⵓⵙⵙⴰⵏ}} ⵉⵇⵇⵉⵎⵏ", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "ⵉⵎⴹⴼⴰⵕⵏ", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "ⵙⵏⴼⵍ", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "ⴽⴽⵙ", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "ⵔⴳⵍ ⴰⴼⵉⴷⵢⵓ", + "video.download": "ⴰⴳⵎ ⴰⴼⴰⵢⵍⵓ", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "ⵖⵔ", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index b57bbb2ad..6c746bf96 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -9,14 +9,16 @@ "account.browse_more_on_origin_server": "在原始个人资料页面上浏览详情", "account.cancel_follow_request": "取消关注请求", "account.direct": "发送私信给 @{name}", + "account.disable_notifications": "当 @{name} 发嘟时不要通知我", "account.domain_blocked": "网站已屏蔽", "account.edit_profile": "修改个人资料", + "account.enable_notifications": "当 @{name} 发嘟时通知我", "account.endorse": "在个人资料中推荐此用户", "account.follow": "关注", "account.followers": "关注者", "account.followers.empty": "目前无人关注此用户。", - "account.followers_counter": "被 {count, plural, one {{counter} 人} other {{counter} 人}}关注", - "account.following_counter": "正在关注 {count, plural, other {{counter} 人}}", + "account.followers_counter": "被 {counter} 人关注", + "account.following_counter": "正在关注 {counter} 人", "account.follows.empty": "此用户目前尚未关注任何人。", "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", @@ -36,7 +38,7 @@ "account.requested": "正在等待对方同意。点击以取消发送关注请求", "account.share": "分享 @{name} 的个人资料", "account.show_reblogs": "显示来自 @{name} 的转嘟", - "account.statuses_counter": "{count, plural, one {{counter} 条} other {{counter} 条}}嘟文", + "account.statuses_counter": "{counter} 条嘟文", "account.unblock": "解除屏蔽 @{name}", "account.unblock_domain": "不再隐藏来自 {domain} 的内容", "account.unendorse": "不在个人资料中推荐此用户", @@ -131,7 +133,7 @@ "directory.local": "仅来自 {domain}", "directory.new_arrivals": "新来者", "directory.recently_active": "最近活跃", - "embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。", + "embed.instructions": "要在你的网站上嵌入此嘟文,请复制以下代码。", "embed.preview": "它会像这样显示出来:", "emoji_button.activity": "活动", "emoji_button.custom": "自定义", @@ -147,6 +149,7 @@ "emoji_button.search_results": "搜索结果", "emoji_button.symbols": "符号", "emoji_button.travel": "旅行和地点", + "empty_column.account_suspended": "账户被封禁", "empty_column.account_timeline": "这里没有嘟文!", "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你目前没有屏蔽任何用户。", @@ -160,13 +163,15 @@ "empty_column.hashtag": "这个话题标签下暂时没有内容。", "empty_column.home": "你还没有关注任何用户。快看看{public},向其他人问个好吧。", "empty_column.home.public_timeline": "公共时间轴", - "empty_column.list": "这个列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。", + "empty_column.list": "此列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。", "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。", "empty_column.mutes": "你没有隐藏任何用户。", "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了", "error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", + "error.unexpected_crash.explanation_addons": "此页面无法正确显示,这个错误很可能是由浏览器附加组件或自动翻译工具造成的。", "error.unexpected_crash.next_steps": "刷新一下页面试试。如果没用,您可以换个浏览器或者用本地应用。", + "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,你仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", "follow_request.authorize": "同意", @@ -250,9 +255,10 @@ "keyboard_shortcuts.unfocus": "取消输入", "keyboard_shortcuts.up": "在列表中让光标上移", "lightbox.close": "关闭", + "lightbox.compress": "返回图片全览", + "lightbox.expand": "放大查看图片", "lightbox.next": "下一个", "lightbox.previous": "上一个", - "lightbox.view_context": "查看上下文", "lists.account.add": "添加到列表", "lists.account.remove": "从列表中移除", "lists.delete": "删除列表", @@ -260,6 +266,10 @@ "lists.edit.submit": "更改标题", "lists.new.create": "新建列表", "lists.new.title_placeholder": "新列表的标题", + "lists.replies_policy.followed": "任何被关注的用户", + "lists.replies_policy.list": "列表成员", + "lists.replies_policy.none": "没有人", + "lists.replies_policy.title": "显示回复给:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", "load_pending": "{count} 项", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "隐藏 {number} 张图片", "missing_indicator.label": "找不到内容", "missing_indicator.sublabel": "无法找到此资源", + "mute_modal.duration": "持续期间", "mute_modal.hide_notifications": "同时隐藏来自这个用户的通知?", + "mute_modal.indefinite": "无期限", "navigation_bar.apps": "移动应用", "navigation_bar.blocks": "已屏蔽的用户", "navigation_bar.bookmarks": "书签", @@ -298,6 +310,7 @@ "notification.own_poll": "您的投票已经结束", "notification.poll": "你参与的一个投票已经结束", "notification.reblog": "{name} 转嘟了你的嘟文", + "notification.status": "{name} 刚刚发嘟", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", "notifications.column_settings.alert": "桌面通知", @@ -313,13 +326,24 @@ "notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:", "notifications.column_settings.show": "在通知栏显示", "notifications.column_settings.sound": "播放音效", + "notifications.column_settings.status": "新嘟文:", "notifications.filter.all": "全部", "notifications.filter.boosts": "转嘟", "notifications.filter.favourites": "喜欢", "notifications.filter.follows": "关注", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", + "notifications.filter.statuses": "你关注的人的动态", + "notifications.grant_permission": "授予权限", "notifications.group": "{count} 条通知", + "notifications.mark_as_read": "将所有通知标为已读", + "notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。", + "notifications.permission_denied_alert": "由于在此之前浏览器权限请求就已被拒绝,所以启用桌面通知失败", + "notifications.permission_required": "所需权限未被授予,所以桌面通知不可用", + "notifications_permission_banner.enable": "启用桌面通知", + "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。您可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", + "notifications_permission_banner.title": "精彩不容错过", + "picture_in_picture.restore": "恢复", "poll.closed": "已关闭", "poll.refresh": "刷新", "poll.total_people": "{count}人", @@ -328,7 +352,7 @@ "poll.voted": "您已经对这个答案投过票了", "poll_button.add_poll": "发起投票", "poll_button.remove_poll": "移除投票", - "privacy.change": "设置嘟文可见范围", + "privacy.change": "设置嘟文的可见范围", "privacy.direct.long": "只有被提及的用户能看到", "privacy.direct.short": "私信", "privacy.private.long": "只有关注你的用户能看到", @@ -379,11 +403,11 @@ "status.favourite": "喜欢", "status.filtered": "已过滤", "status.load_more": "加载更多", - "status.media_hidden": "隐藏媒体内容", + "status.media_hidden": "已隐藏的媒体内容", "status.mention": "提及 @{name}", "status.more": "更多", "status.mute": "隐藏 @{name}", - "status.mute_conversation": "隐藏此对话", + "status.mute_conversation": "将此对话静音", "status.open": "展开嘟文", "status.pin": "在个人资料页面置顶", "status.pinned": "置顶嘟文", @@ -405,7 +429,7 @@ "status.show_more_all": "显示所有内容", "status.show_thread": "显示全部对话", "status.uncached_media_warning": "暂不可用", - "status.unmute_conversation": "不再隐藏此对话", + "status.unmute_conversation": "将此对话解除静音", "status.unpin": "在个人资料页面取消置顶", "suggestions.dismiss": "关闭建议", "suggestions.header": "您可能会感兴趣…", @@ -430,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "将文件拖放到此处开始上传", - "upload_button.label": "上传媒体文件 ({formats})", + "upload_button.label": "上传图片、视频或音频", "upload_error.limit": "文件大小超过限制。", "upload_error.poll": "投票中不允许上传文件。", "upload_form.audio_description": "为听障人士添加文字描述", @@ -446,6 +470,7 @@ "upload_modal.detect_text": "从图片中检测文本", "upload_modal.edit_media": "编辑媒体", "upload_modal.hint": "在预览图上点击或拖动圆圈,以选择缩略图的焦点。", + "upload_modal.preparing_ocr": "正在准备文字识别……", "upload_modal.preview_label": "预览 ({ratio})", "upload_progress.label": "上传中……", "video.close": "关闭视频", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 248a74dcd..1a62ccbb3 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -1,28 +1,30 @@ { - "account.account_note_header": "備註", - "account.add_or_remove_from_list": "從名單中新增或移除", + "account.account_note_header": "筆記", + "account.add_or_remove_from_list": "從列表中新增或移除", "account.badges.bot": "機械人", "account.badges.group": "群組", "account.block": "封鎖 @{name}", - "account.block_domain": "隱藏來自 {domain} 的一切文章", - "account.blocked": "封鎖", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.block_domain": "封鎖來自 {domain} 的一切文章", + "account.blocked": "已封鎖", + "account.browse_more_on_origin_server": "瀏覽原服務站上的個人資料頁", "account.cancel_follow_request": "取消關注請求", "account.direct": "私訊 @{name}", - "account.domain_blocked": "服務站被隱藏", + "account.disable_notifications": "如果 @{name} 發文請不要再通知我", + "account.domain_blocked": "服務站被封鎖", "account.edit_profile": "修改個人資料", - "account.endorse": "在個人資料推薦對方", - "account.follow": "關注", - "account.followers": "關注的人", - "account.followers.empty": "尚沒有人關注這位使用者。", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "這位使用者尚未關注任何使用者。", + "account.enable_notifications": "如果 @{name} 發文請通知我", + "account.endorse": "在個人資料頁推薦對方", + "account.follow": "正在關注", + "account.followers": "關注者", + "account.followers.empty": "尚未有人關注這位使用者。", + "account.followers_counter": "有 {count, plural,one {{counter} 個} other {{counter} 個}}關注者", + "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", + "account.follows.empty": "這位使用者尚未關注任何人。", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", "account.last_status": "上次活躍時間", "account.link_verified_on": "此連結的所有權已在 {date} 檢查過", - "account.locked_info": "此用戶的私隱狀態為不公開,關注請求需經過該用戶的審核。", + "account.locked_info": "這位使用者將私隱設定為「不公開」,會手動審批誰能關注他/她。", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已經遷移到:", @@ -36,15 +38,15 @@ "account.requested": "等候審批", "account.share": "分享 @{name} 的個人資料", "account.show_reblogs": "顯示 @{name} 的推文", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} 篇}other {{counter} 篇}}文章", "account.unblock": "解除對 @{name} 的封鎖", - "account.unblock_domain": "不再隱藏 {domain}", + "account.unblock_domain": "解除對域名 {domain} 的封鎖", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", + "account_note.placeholder": "按此添加備注", + "alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生不可預期的錯誤。", "alert.unexpected.title": "噢!", @@ -57,12 +59,12 @@ "bundle_modal_error.close": "關閉", "bundle_modal_error.message": "加載本組件出錯。", "bundle_modal_error.retry": "重試", - "column.blocks": "封鎖用戶", + "column.blocks": "封鎖名單", "column.bookmarks": "書籤", "column.community": "本站時間軸", "column.direct": "個人訊息", "column.directory": "瀏覽個人資料", - "column.domain_blocks": "隱藏的服務站", + "column.domain_blocks": "封鎖的服務站", "column.favourites": "最愛的文章", "column.follow_requests": "關注請求", "column.home": "主頁", @@ -75,25 +77,25 @@ "column_header.hide_settings": "隱藏設定", "column_header.moveLeft_settings": "將欄左移", "column_header.moveRight_settings": "將欄右移", - "column_header.pin": "固定", + "column_header.pin": "置頂", "column_header.show_settings": "顯示設定", - "column_header.unpin": "取下", + "column_header.unpin": "取消置頂", "column_subheading.settings": "設定", - "community.column_settings.local_only": "只有本地", - "community.column_settings.media_only": "僅媒體", - "community.column_settings.remote_only": "只有遠端", - "compose_form.direct_message_warning": "這文章只有被提及的用戶才可以看到。", + "community.column_settings.local_only": "只顯示本站", + "community.column_settings.media_only": "只顯示多媒體", + "community.column_settings.remote_only": "只顯示外站", + "compose_form.direct_message_warning": "這文章只有被提及的使用者才可以看到。", "compose_form.direct_message_warning_learn_more": "了解更多", "compose_form.hashtag_warning": "這文章因為不是公開,所以不會被標籤搜索。只有公開的文章才會被標籤搜索。", - "compose_form.lock_disclaimer": "你的用戶狀態為「{locked}」,任何人都能立即關注你,然後看到「只有關注者能看」的文章。", - "compose_form.lock_disclaimer.lock": "公共", + "compose_form.lock_disclaimer": "你的用戶狀態沒有{locked},任何人都能立即關注你,然後看到「只有關注者能看」的文章。", + "compose_form.lock_disclaimer.lock": "鎖定", "compose_form.placeholder": "你在想甚麼?", "compose_form.poll.add_option": "新增選擇", "compose_form.poll.duration": "投票期限", "compose_form.poll.option_placeholder": "第 {number} 個選擇", "compose_form.poll.remove_option": "移除此選擇", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", - "compose_form.poll.switch_to_single": "變更投票為允許單一選項", + "compose_form.poll.switch_to_single": "變更投票為限定單一選項", "compose_form.publish": "發文", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "標記媒體為敏感內容", @@ -110,8 +112,8 @@ "confirmations.delete.message": "你確定要刪除這文章嗎?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "你確定要永久刪除這列表嗎?", - "confirmations.domain_block.confirm": "隱藏整個網站", - "confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或靜音幾個特定目標就好。你從此將不會再看到該站的內容和通知。來自該站的關注者亦會被移除。", + "confirmations.domain_block.confirm": "封鎖整個網站", + "confirmations.domain_block.message": "你真的真的確定要封鎖整個 {domain} ?多數情況下,封鎖或靜音幾個特定目標就已經有效,也是比較建議的做法。若然封鎖全站,你將不會再在這裏看到該站的內容和通知。來自該站的關注者亦會被移除。", "confirmations.logout.confirm": "登出", "confirmations.logout.message": "確定要登出嗎?", "confirmations.mute.confirm": "靜音", @@ -127,9 +129,9 @@ "conversation.mark_as_read": "標為已讀", "conversation.open": "檢視對話", "conversation.with": "與 {names}", - "directory.federated": "來自已知聯邦宇宙", + "directory.federated": "來自已知的聯盟網絡", "directory.local": "僅來自 {domain}", - "directory.new_arrivals": "新貨", + "directory.new_arrivals": "新內容", "directory.recently_active": "最近活躍", "embed.instructions": "要內嵌此文章,請將以下代碼貼進你的網站。", "embed.preview": "看上去會是這樣:", @@ -139,7 +141,7 @@ "emoji_button.food": "飲飲食食", "emoji_button.label": "加入表情符號", "emoji_button.nature": "自然", - "emoji_button.not_found": "沒有表情符號!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "沒找到表情符號!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物品", "emoji_button.people": "人物", "emoji_button.recent": "常用", @@ -147,6 +149,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊景物", + "empty_column.account_suspended": "帳號已停權", "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人資料", "empty_column.blocks": "你還沒有封鎖任何使用者。", @@ -154,11 +157,11 @@ "empty_column.community": "本站時間軸暫時未有內容,快寫一點東西來搶頭香啊!", "empty_column.direct": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。", "empty_column.domain_blocks": "尚未隱藏任何網域。", - "empty_column.favourited_statuses": "你還沒收藏任何嘟文。這裡將會顯示你收藏的嘟文。", - "empty_column.favourites": "還沒有人收藏這則嘟文。這裡將會顯示被收藏的嘟文。", + "empty_column.favourited_statuses": "你還沒收藏任何文章。這裡將會顯示你收藏的嘟文。", + "empty_column.favourites": "還沒有人收藏這則文章。這裡將會顯示被收藏的嘟文。", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個標籤暫時未有內容。", - "empty_column.home": "你還沒有關注任何用戶。快看看{public},向其他用戶搭訕吧。", + "empty_column.home": "你還沒有關注任何使用者。快看看{public},向其他使用者搭訕吧。", "empty_column.home.public_timeline": "公共時間軸", "empty_column.list": "這個列表暫時未有內容。", "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", @@ -166,20 +169,22 @@ "empty_column.notifications": "你沒有任何通知紀錄,快向其他用戶搭訕吧。", "empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。", "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。", + "error.unexpected_crash.explanation_addons": "此頁面無法被正確顯示,這可能是由於瀏覽器的附加元件或網頁自動翻譯工具造成的。", "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", - "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", + "error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", + "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "follow_request.authorize": "批准", "follow_request.reject": "拒絕", - "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "即使您的帳戶未上鎖,{domain} 的工作人員認為您可能想手動審核來自這些帳戶的關注請求。", + "generic.saved": "已儲存", "getting_started.developers": "開發者", "getting_started.directory": "個人資料目錄", "getting_started.documentation": "文件", "getting_started.heading": "開始使用", "getting_started.invite": "邀請使用者", - "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub ({github}) 貢獻或者回報問題。", - "getting_started.security": "帳戶安全", + "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub {github} 貢獻或者回報問題。", + "getting_started.security": "帳戶設定", "getting_started.terms": "服務條款", "hashtag.column_header.tag_mode.all": "以及{additional}", "hashtag.column_header.tag_mode.any": "或是{additional}", @@ -189,7 +194,7 @@ "hashtag.column_settings.tag_mode.all": "全部", "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_toggle": "在這欄位加入額外的標籤", "home.column_settings.basic": "基本", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", @@ -199,24 +204,24 @@ "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "站台聯盟", - "introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。", + "introduction.federation.federated.headline": "已知服務站", + "introduction.federation.federated.text": "來自社交聯盟其他網站的公開文章,將會顯示在站點跨站時間軸上。", "introduction.federation.home.headline": "首頁", - "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", - "introduction.federation.local.headline": "本機", - "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "關注", - "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", - "introduction.interactions.reblog.headline": "轉嘟", - "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", + "introduction.federation.home.text": "你所關注使用者的文章,將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", + "introduction.federation.local.headline": "本站", + "introduction.federation.local.text": "與你共用一個服務站使用者的公開文章,將會顯示在本站時間軸中。", + "introduction.interactions.action": "完成使用教學", + "introduction.interactions.favourite.headline": "最愛", + "introduction.interactions.favourite.text": "你能用將文章加入「最愛的文章」,一方便把儲存文章稍候觀看,也同時對作者表示支持。", + "introduction.interactions.reblog.headline": "轉推", + "introduction.interactions.reblog.text": "你可以透過「轉推文章」把文章分享給你的關注者。", "introduction.interactions.reply.headline": "回覆", - "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。", + "introduction.interactions.reply.text": "你可以回覆其他人或自己的文章,這麼做會把這些回覆串成一串對話。", "introduction.welcome.action": "開始旅程吧!", "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。", - "keyboard_shortcuts.back": "後退", - "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單", + "introduction.welcome.text": "歡迎來到聯盟社交網絡 (fediverse)!稍後你就可以廣播訊息,同時與多個服務站的不同朋友聊天。但留意 {domain} 這個服務站非常特別——它託管了你的個人資料啊!所以請記住它。", + "keyboard_shortcuts.back": "返回", + "keyboard_shortcuts.blocked": "開啟封鎖名單", "keyboard_shortcuts.boost": "轉推", "keyboard_shortcuts.column": "把標示移動到其中一列", "keyboard_shortcuts.compose": "把標示移動到文字輸入區", @@ -224,35 +229,36 @@ "keyboard_shortcuts.direct": "開啟私訊欄", "keyboard_shortcuts.down": "在列表往下移動", "keyboard_shortcuts.enter": "打開文章", - "keyboard_shortcuts.favourite": "收藏", - "keyboard_shortcuts.favourites": "開啟收藏名單", - "keyboard_shortcuts.federated": "開啟站點聯盟時間軸", + "keyboard_shortcuts.favourite": "收藏文章", + "keyboard_shortcuts.favourites": "開啟最愛的內容", + "keyboard_shortcuts.federated": "打開跨站時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", - "keyboard_shortcuts.home": "開啟首頁時間軸", + "keyboard_shortcuts.home": "開啟個人時間軸", "keyboard_shortcuts.hotkey": "快速鍵", "keyboard_shortcuts.legend": "顯示這個說明", - "keyboard_shortcuts.local": "開啟本機時間軸", + "keyboard_shortcuts.local": "開啟本站時間軸", "keyboard_shortcuts.mention": "提及作者", - "keyboard_shortcuts.muted": "開啟靜音使用者名單", + "keyboard_shortcuts.muted": "開啟靜音名單", "keyboard_shortcuts.my_profile": "開啟個人資料頁面", "keyboard_shortcuts.notifications": "開啟通知欄", "keyboard_shortcuts.open_media": "開啟媒體", - "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單", + "keyboard_shortcuts.pinned": "開啟釘選的文章清單", "keyboard_shortcuts.profile": "開啟作者的個人資料頁面", "keyboard_shortcuts.reply": "回覆", "keyboard_shortcuts.requests": "開啟關注請求名單", "keyboard_shortcuts.search": "把標示移動到搜索", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文", "keyboard_shortcuts.start": "開啟「開始使用」欄位", "keyboard_shortcuts.toggle_hidden": "顯示或隱藏被標為敏感的文字", "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", - "keyboard_shortcuts.toot": "新的推文", + "keyboard_shortcuts.toot": "新的文章", "keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索", "keyboard_shortcuts.up": "在列表往上移動", "lightbox.close": "關閉", - "lightbox.next": "繼續", - "lightbox.previous": "回退", - "lightbox.view_context": "檢視內文", + "lightbox.compress": "縮小檢視", + "lightbox.expand": "擴大檢視", + "lightbox.next": "下一頁", + "lightbox.previous": "上一頁", "lists.account.add": "新增到列表", "lists.account.remove": "從列表刪除", "lists.delete": "刪除列表", @@ -260,22 +266,28 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增列表", "lists.new.title_placeholder": "新列表標題", - "lists.search": "從你關注的用戶中搜索", + "lists.replies_policy.followed": "任何已關注的用戶", + "lists.replies_policy.list": "列表中的用戶", + "lists.replies_policy.none": "無人", + "lists.replies_policy.title": "顯示回應文章︰", + "lists.search": "從你關注的人搜索", "lists.subheading": "列表", "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "載入中...", - "media_gallery.toggle_visible": "打開或關上", + "media_gallery.toggle_visible": "隱藏圖片", "missing_indicator.label": "找不到內容", "missing_indicator.sublabel": "無法找到內容", - "mute_modal.hide_notifications": "隱藏來自這用戶的通知嗎?", - "navigation_bar.apps": "封鎖的使用者", - "navigation_bar.blocks": "被你封鎖的用戶", + "mute_modal.duration": "時間", + "mute_modal.hide_notifications": "需要隱藏這使用者的通知嗎?", + "mute_modal.indefinite": "沒期限", + "navigation_bar.apps": "手機 App", + "navigation_bar.blocks": "封鎖名單", "navigation_bar.bookmarks": "書籤", "navigation_bar.community_timeline": "本站時間軸", - "navigation_bar.compose": "撰寫新嘟文", + "navigation_bar.compose": "撰寫新文章", "navigation_bar.direct": "個人訊息", "navigation_bar.discover": "探索", - "navigation_bar.domain_blocks": "隱藏的服務站", + "navigation_bar.domain_blocks": "封鎖的服務站", "navigation_bar.edit_profile": "修改個人資料", "navigation_bar.favourites": "最愛的內容", "navigation_bar.filters": "靜音詞彙", @@ -285,23 +297,24 @@ "navigation_bar.keyboard_shortcuts": "鍵盤快速鍵", "navigation_bar.lists": "列表", "navigation_bar.logout": "登出", - "navigation_bar.mutes": "被你靜音的用戶", + "navigation_bar.mutes": "靜音名單", "navigation_bar.personal": "個人", "navigation_bar.pins": "置頂文章", "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "跨站時間軸", "navigation_bar.security": "安全", - "notification.favourite": "{name} 收藏了你的文章", + "notification.favourite": "{name} 喜歡你的文章", "notification.follow": "{name} 開始關注你", "notification.follow_request": "{name} 要求關注你", "notification.mention": "{name} 提及你", - "notification.own_poll": "您的投票已結束", - "notification.poll": "您投過的投票已經結束", + "notification.own_poll": "你的投票已結束", + "notification.poll": "你參與過的一個投票已經結束", "notification.reblog": "{name} 轉推你的文章", + "notification.status": "{name} 剛發表了文章", "notifications.clear": "清空通知紀錄", "notifications.clear_confirmation": "你確定要清空通知紀錄嗎?", "notifications.column_settings.alert": "顯示桌面通知", - "notifications.column_settings.favourite": "收藏了你的文章:", + "notifications.column_settings.favourite": "你最愛的文章:", "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾欄", "notifications.column_settings.filter_bar.show": "顯示", @@ -313,25 +326,36 @@ "notifications.column_settings.reblog": "轉推你的文章:", "notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.sound": "播放音效", + "notifications.column_settings.status": "新的文章", "notifications.filter.all": "全部", - "notifications.filter.boosts": "轉嘟", + "notifications.filter.boosts": "轉推", "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", + "notifications.filter.statuses": "已關注的用戶的最新動態", + "notifications.grant_permission": "授予權限", "notifications.group": "{count} 條通知", + "notifications.mark_as_read": "標記所有通知為已讀", + "notifications.permission_denied": "本站不能發送桌面通知,因為瀏覽器先前拒絕了本站的桌面通知權限請求", + "notifications.permission_denied_alert": "無法啟用桌面通知,因為瀏覽器先前拒絕了本站的桌面通知權限請求", + "notifications.permission_required": "由於瀏覽器未有授予桌面通知權限,本站暫未能發送桌面通知。", + "notifications_permission_banner.enable": "啟用桌面通知", + "notifications_permission_banner.how_to_control": "只要啟用桌面通知,便可在 Mastodon 網站沒有打開時收到通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。", + "notifications_permission_banner.title": "不放過任何事情", + "picture_in_picture.restore": "還原影片播放器", "poll.closed": "已關閉", "poll.refresh": "重新整理", - "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", - "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", + "poll.total_people": "{count, plural, one {# 人投票} other {# 人投票}}", + "poll.total_votes": "{count, plural, one {# 票} other {# 票}}", "poll.vote": "投票", - "poll.voted": "你已對此問題投票", + "poll.voted": "你已投票給這答案", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整私隱設定", - "privacy.direct.long": "只有提及的用戶能看到", + "privacy.direct.long": "只有提及的使用者能看到", "privacy.direct.short": "私人訊息", - "privacy.private.long": "只有關注你用戶能看到", + "privacy.private.long": "只有你的關注者能看到", "privacy.private.short": "關注者", "privacy.public.long": "在公共時間軸顯示", "privacy.public.short": "公共", @@ -340,11 +364,11 @@ "refresh": "重新整理", "regeneration_indicator.label": "載入中……", "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!", - "relative_time.days": "{number}日", - "relative_time.hours": "{number}小時", + "relative_time.days": "{number}日前", + "relative_time.hours": "{number}小時前", "relative_time.just_now": "剛剛", - "relative_time.minutes": "{number}分鐘", - "relative_time.seconds": "{number}秒", + "relative_time.minutes": "{number}分鐘前", + "relative_time.seconds": "{number}秒前", "relative_time.today": "今天", "reply_indicator.cancel": "取消", "report.forward": "轉寄到 {target}", @@ -355,28 +379,28 @@ "report.target": "舉報", "search.placeholder": "搜尋", "search_popout.search_format": "高級搜索格式", - "search_popout.tips.full_text": "輸入簡單的文字,搜索由你發放、收藏、轉推和提及你的文章,以及符合的用戶名稱,帳號名稱和標籤。", + "search_popout.tips.full_text": "輸入簡單的文字,搜索由你發放、收藏、轉推和提及你的文章,以及符合的使用者名稱,顯示名稱和標籤。", "search_popout.tips.hashtag": "標籤", "search_popout.tips.status": "文章", - "search_popout.tips.text": "輸入簡單的文字,搜索符合的用戶名稱,帳號名稱和標籤", - "search_popout.tips.user": "用戶", + "search_popout.tips.text": "輸入簡單的文字,搜索符合的顯示名稱、使用者名稱和標籤", + "search_popout.tips.user": "使用者", "search_results.accounts": "使用者", "search_results.hashtags": "標籤", "search_results.statuses": "文章", - "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", + "search_results.statuses_fts_disabled": "此 Mastodon 伺服器並未啟用「搜尋文章內章」功能。", "search_results.total": "{count, number} 項結果", "status.admin_account": "開啟 @{name} 的管理介面", - "status.admin_status": "在管理介面開啟此嘟文", + "status.admin_status": "在管理介面開啟這篇文章", "status.block": "封鎖 @{name}", "status.bookmark": "書籤", "status.cancel_reblog_private": "取消轉推", "status.cannot_reblog": "這篇文章無法被轉推", - "status.copy": "將連結複製到嘟文中", + "status.copy": "將連結複製到文章中", "status.delete": "刪除", - "status.detailed_status": "對話的詳細內容", + "status.detailed_status": "詳細對話內容", "status.direct": "私訊 @{name}", - "status.embed": "鑲嵌", - "status.favourite": "收藏", + "status.embed": "嵌入", + "status.favourite": "最愛", "status.filtered": "已過濾", "status.load_more": "載入更多", "status.media_hidden": "隱藏媒體內容", @@ -391,7 +415,7 @@ "status.reblog": "轉推", "status.reblog_private": "轉推到原讀者", "status.reblogged_by": "{name} 轉推", - "status.reblogs.empty": "還沒有人轉嘟。如果有,會顯示在這裡。", + "status.reblogs.empty": "還未有人轉推。有的話會顯示在這裡。", "status.redraft": "刪除並編輯", "status.remove_bookmark": "移除書籤", "status.reply": "回應", @@ -399,60 +423,61 @@ "status.report": "舉報 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", - "status.show_less": "減少顯示", - "status.show_less_all": "減少顯示這類文章", - "status.show_more": "顯示更多", - "status.show_more_all": "顯示更多這類文章", + "status.show_less": "收起", + "status.show_less_all": "全部收起", + "status.show_more": "展開", + "status.show_more_all": "全部展開", "status.show_thread": "顯示討論串", "status.uncached_media_warning": "無法使用", - "status.unmute_conversation": "解禁對話", + "status.unmute_conversation": "對話解除靜音", "status.unpin": "解除置頂", "suggestions.dismiss": "關閉建議", - "suggestions.header": "您可能對這些東西有興趣…", + "suggestions.header": "你可能對這些感興趣…", "tabs_bar.federated_timeline": "跨站", "tabs_bar.home": "主頁", "tabs_bar.local_timeline": "本站", "tabs_bar.notifications": "通知", "tabs_bar.search": "搜尋", - "time_remaining.days": "剩餘{number, plural, one {# 天數} other {# 天數}}", - "time_remaining.hours": "剩餘{number, plural, one {# 小時} other {# 小時}}", - "time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}", + "time_remaining.days": "剩餘 {number, plural, one {# 天} other {# 天}}", + "time_remaining.hours": "剩餘 {number, plural, one {# 小時} other {# 小時}}", + "time_remaining.minutes": "剩餘 {number, plural, one {# 分鐘} other {# 分鐘}}", "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "目前趨勢", + "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他伺服器的 {resource}", + "timeline_hint.resources.followers": "關注者", + "timeline_hint.resources.follows": "關注中", + "timeline_hint.resources.statuses": "更早的文章", + "trends.counter_by_accounts": "{count, plural, one {{counter} 個人}other {{counter} 個人}}正在討論", + "trends.trending_now": "現在流行", "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "將檔案拖放至此上載", - "upload_button.label": "上載媒體檔案", + "upload_button.label": "加入圖片、影片或音訊檔", "upload_error.limit": "已達到檔案上傳限制。", "upload_error.poll": "不允許在投票上傳檔案。", "upload_form.audio_description": "簡單描述內容給聽障人士", "upload_form.description": "為視覺障礙人士添加文字說明", "upload_form.edit": "編輯", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "更改預覽圖", "upload_form.undo": "刪除", "upload_form.video_description": "簡單描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", "upload_modal.apply": "套用", "upload_modal.choose_image": "選擇圖片", - "upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗", + "upload_modal.description_placeholder": "一隻敏捷的狐狸,輕巧地跳過那隻懶洋洋的狗", "upload_modal.detect_text": "從圖片偵測文字", "upload_modal.edit_media": "編輯媒體", "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", + "upload_modal.preparing_ocr": "準備辨識圖片文字…", "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上載中……", "video.close": "關閉影片", "video.download": "下載檔案", - "video.exit_fullscreen": "退出全熒幕", + "video.exit_fullscreen": "退出全螢幕", "video.expand": "展開影片", - "video.fullscreen": "全熒幕", + "video.fullscreen": "全螢幕", "video.hide": "隱藏影片", "video.mute": "靜音", "video.pause": "暫停", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 429f6c5d3..cc996e91b 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -4,25 +4,27 @@ "account.badges.bot": "機器人", "account.badges.group": "群組", "account.block": "封鎖 @{name}", - "account.block_domain": "隱藏來自 {domain} 的所有內容", + "account.block_domain": "封鎖來自 {domain} 網域的所有內容", "account.blocked": "已封鎖", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "在該伺服器的個人檔案頁上瀏覽更多", "account.cancel_follow_request": "取消關注請求", "account.direct": "傳私訊給 @{name}", - "account.domain_blocked": "已隱藏網域", + "account.disable_notifications": "取消來自 @{name} 嘟文的通知", + "account.domain_blocked": "已封鎖網域", "account.edit_profile": "編輯個人資料", + "account.enable_notifications": "當 @{name} 嘟文時通知我", "account.endorse": "在個人資料推薦對方", "account.follow": "關注", "account.followers": "關注者", - "account.followers.empty": "尚沒有人關注這位使用者。", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "這位使用者尚未關注任何使用者。", - "account.follows_you": "關注了你", - "account.hide_reblogs": "隱藏來自 @{name} 的轉推", - "account.last_status": "上次活躍", + "account.followers.empty": "尚未有人關注這位使用者。", + "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", + "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", + "account.follows.empty": "這位使用者尚未關注任何人。", + "account.follows_you": "關注了您", + "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟", + "account.last_status": "上次活躍時間", "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", - "account.locked_info": "這隻帳戶的隱私狀態被設成鎖定。該擁有者會手動審核能關注這隻帳號的人。", + "account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳號的人。", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已遷移至:", @@ -36,15 +38,15 @@ "account.requested": "正在等待核准。按一下取消關注請求", "account.share": "分享 @{name} 的個人資料", "account.show_reblogs": "顯示來自 @{name} 的嘟文", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文", "account.unblock": "取消封鎖 @{name}", - "account.unblock_domain": "取消隱藏 {domain}", + "account.unblock_domain": "取消封鎖域名 {domain}", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消靜音 @{name}", "account.unmute_notifications": "重新接收來自 @{name} 的通知", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", + "account_note.placeholder": "按此添加備注", + "alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生了非預期的錯誤。", "alert.unexpected.title": "哎呀!", @@ -57,17 +59,17 @@ "bundle_modal_error.close": "關閉", "bundle_modal_error.message": "載入此元件時發生錯誤。", "bundle_modal_error.retry": "重試", - "column.blocks": "封鎖的使用者", + "column.blocks": "已封鎖的使用者", "column.bookmarks": "書籤", "column.community": "本機時間軸", "column.direct": "私訊", "column.directory": "瀏覽個人資料", - "column.domain_blocks": "隱藏的網域", + "column.domain_blocks": "已封鎖的網域", "column.favourites": "收藏", "column.follow_requests": "關注請求", - "column.home": "主頁", + "column.home": "首頁", "column.lists": "名單", - "column.mutes": "被靜音的使用者", + "column.mutes": "已靜音的使用者", "column.notifications": "通知", "column.pins": "釘選的嘟文", "column.public": "聯邦時間軸", @@ -79,113 +81,116 @@ "column_header.show_settings": "顯示設定", "column_header.unpin": "取消釘選", "column_subheading.settings": "設定", - "community.column_settings.local_only": "只有本地", + "community.column_settings.local_only": "只有本機", "community.column_settings.media_only": "只有媒體", "community.column_settings.remote_only": "只有遠端", "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才看得到。", "compose_form.direct_message_warning_learn_more": "了解更多", - "compose_form.hashtag_warning": "由於這則嘟文被設定成「不公開」,所以它將不會被列在任何主題標籤下。只有公開的嘟文才能藉主題標籤找到。", + "compose_form.hashtag_warning": "由於這則嘟文設定為「不公開」,它將不會被列於任何主題標籤下。只有公開的嘟文才能藉由主題標籤找到。", "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成只有關注者能看的嘟文。", "compose_form.lock_disclaimer.lock": "上鎖", - "compose_form.placeholder": "您正在想些什麼?", - "compose_form.poll.add_option": "新增選擇", + "compose_form.placeholder": "正在想些什麼嗎?", + "compose_form.poll.add_option": "新增選項", "compose_form.poll.duration": "投票期限", - "compose_form.poll.option_placeholder": "第 {number} 個選擇", - "compose_form.poll.remove_option": "移除此選擇", + "compose_form.poll.option_placeholder": "第 {number} 個選項", + "compose_form.poll.remove_option": "移除此選項", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", "compose_form.poll.switch_to_single": "變更投票為允許單一選項", "compose_form.publish": "嘟出去", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "標記媒體為敏感內容", "compose_form.sensitive.marked": "此媒體被標記為敏感內容", - "compose_form.sensitive.unmarked": "此媒體未標記為敏感內容", + "compose_form.sensitive.unmarked": "此媒體未被標記為敏感內容", "compose_form.spoiler.marked": "正文已隱藏到警告之後", "compose_form.spoiler.unmarked": "正文未被隱藏", "compose_form.spoiler_placeholder": "請在此處寫入警告訊息", "confirmation_modal.cancel": "取消", "confirmations.block.block_and_report": "封鎖並檢舉", "confirmations.block.confirm": "封鎖", - "confirmations.block.message": "確定封鎖 {name} ?", + "confirmations.block.message": "確定要封鎖 {name} 嗎?", "confirmations.delete.confirm": "刪除", - "confirmations.delete.message": "你確定要刪除這條嘟文?", + "confirmations.delete.message": "您確定要刪除這則嘟文?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "確定永久刪除此名單?", - "confirmations.domain_block.confirm": "隱藏整個網域", - "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 嗎?大部分情況下,你只需要封鎖或靜音少數特定的人就能滿足需求了。你將不能在任何公開的時間軸及通知中看到那個網域的內容。你來自該網域的關注者也會被移除。", + "confirmations.domain_block.confirm": "隱藏整個域名", + "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳號就能滿足需求了。您將不能在任何公開的時間軸及通知中看到此網域的內容。您來自該網域的關注者也將被移除。", "confirmations.logout.confirm": "登出", "confirmations.logout.message": "確定要登出嗎?", "confirmations.mute.confirm": "靜音", - "confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注你。", + "confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注您。", "confirmations.mute.message": "確定靜音 {name} ?", "confirmations.redraft.confirm": "刪除並重新編輯", "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。", "confirmations.reply.confirm": "回覆", "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", "confirmations.unfollow.confirm": "取消關注", - "confirmations.unfollow.message": "真的要取消關注 {name} 嗎?", + "confirmations.unfollow.message": "確定要取消關注 {name} 嗎?", "conversation.delete": "刪除對話", - "conversation.mark_as_read": "標為已讀", + "conversation.mark_as_read": "標記為已讀", "conversation.open": "檢視對話", "conversation.with": "與 {names}", "directory.federated": "來自已知聯邦宇宙", - "directory.local": "僅來自 {domain}", + "directory.local": "僅來自 {domain} 網域", "directory.new_arrivals": "新人", "directory.recently_active": "最近活躍", - "embed.instructions": "要嵌入此嘟文,請將以下程式碼貼進你的網站。", - "embed.preview": "他會顯示成這樣:", + "embed.instructions": "要在您的網站嵌入此嘟文,請複製以下程式碼。", + "embed.preview": "它將顯示成這樣:", "emoji_button.activity": "活動", "emoji_button.custom": "自訂", - "emoji_button.flags": "旗標", - "emoji_button.food": "飲食", + "emoji_button.flags": "旗幟", + "emoji_button.food": "食物 & 飲料", "emoji_button.label": "插入表情符號", - "emoji_button.nature": "大自然", + "emoji_button.nature": "自然", "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物件", - "emoji_button.people": "使用者", + "emoji_button.people": "人物", "emoji_button.recent": "最常使用", "emoji_button.search": "搜尋…", "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", + "empty_column.account_suspended": "帳號被暫停", "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人資料", - "empty_column.blocks": "你還沒有封鎖任何使用者。", - "empty_column.bookmarked_statuses": "你還沒建立任何書籤。這裡將會顯示你建立的書籤。", - "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!", + "empty_column.blocks": "您還沒有封鎖任何使用者。", + "empty_column.bookmarked_statuses": "您還沒建立任何書籤。當您建立書簽時,它將於此顯示。", + "empty_column.community": "本機時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", - "empty_column.domain_blocks": "尚未隱藏任何網域。", - "empty_column.favourited_statuses": "你還沒收藏任何嘟文。這裡將會顯示你收藏的嘟文。", - "empty_column.favourites": "還沒有人收藏這則嘟文。這裡將會顯示被收藏的嘟文。", + "empty_column.domain_blocks": "尚未封鎖任何網域。", + "empty_column.favourited_statuses": "您還沒收藏過任何嘟文。當您收藏嘟文時,它將於此顯示。", + "empty_column.favourites": "還沒有人收藏過這則嘟文。當有人收藏嘟文時,它將於此顯示。", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個主題標籤下什麼也沒有。", "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。", "empty_column.home.public_timeline": "公開時間軸", "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。", - "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", - "empty_column.mutes": "你尚未靜音任何使用者。", + "empty_column.lists": "您還沒有建立任何名單。這裡將會顯示您所建立的名單。", + "empty_column.mutes": "您尚未靜音任何使用者。", "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了", - "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。", - "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", - "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", - "errors.unexpected_crash.report_issue": "舉報問題", + "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示此頁面。", + "error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。", + "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", + "error.unexpected_crash.next_steps_addons": "請嘗試關閉他們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", + "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", + "errors.unexpected_crash.report_issue": "回報問題", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", - "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳號的追蹤請求。", + "generic.saved": "已儲存", "getting_started.developers": "開發者", "getting_started.directory": "個人資料目錄", "getting_started.documentation": "文件", "getting_started.heading": "開始使用", "getting_started.invite": "邀請使用者", - "getting_started.open_source_notice": "Mastodon 是開源軟體。你可以在 GitHub {github} 上貢獻或是回報問題。", - "getting_started.security": "安全性", + "getting_started.open_source_notice": "Mastodon 是開源軟體。您可以在 GitHub {github} 上貢獻或是回報問題。", + "getting_started.security": "帳號安全性設定", "getting_started.terms": "服務條款", - "hashtag.column_header.tag_mode.all": "以及{additional}", - "hashtag.column_header.tag_mode.any": "或是{additional}", - "hashtag.column_header.tag_mode.none": "而無需{additional}", + "hashtag.column_header.tag_mode.all": "以及 {additional}", + "hashtag.column_header.tag_mode.any": "或是 {additional}", + "hashtag.column_header.tag_mode.none": "而無需 {additional}", "hashtag.column_settings.select.no_options_message": "找不到建議", - "hashtag.column_settings.select.placeholder": "輸入主題標籤…", + "hashtag.column_settings.select.placeholder": "請輸入主題標籤…", "hashtag.column_settings.tag_mode.all": "全部", "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", @@ -199,14 +204,14 @@ "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "站台聯盟", - "introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。", + "introduction.federation.federated.headline": "聯邦", + "introduction.federation.federated.text": "來自聯盟宇宙中其他伺服器的公開嘟文將會在聯邦時間軸中顯示。", "introduction.federation.home.headline": "首頁", "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", "introduction.federation.local.headline": "本機", "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", "introduction.interactions.action": "完成教學!", - "introduction.interactions.favourite.headline": "關注", + "introduction.interactions.favourite.headline": "收藏", "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", "introduction.interactions.reblog.headline": "轉嘟", "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", @@ -214,23 +219,23 @@ "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。", "introduction.welcome.action": "開始旅程吧!", "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。", + "introduction.welcome.text": "歡迎來到聯盟宇宙!稍候您就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它承載了您的個人資料,所以請記住它的名字。", "keyboard_shortcuts.back": "返回上一頁", "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單", "keyboard_shortcuts.boost": "轉嘟", "keyboard_shortcuts.column": "將焦點放在其中一欄的嘟文", "keyboard_shortcuts.compose": "將焦點移至撰寫文字區塊", - "keyboard_shortcuts.description": "描述", + "keyboard_shortcuts.description": "說明", "keyboard_shortcuts.direct": "開啟私訊欄", - "keyboard_shortcuts.down": "往下移動名單項目", + "keyboard_shortcuts.down": "在名單中往下移動", "keyboard_shortcuts.enter": "檢視嘟文", - "keyboard_shortcuts.favourite": "收藏", + "keyboard_shortcuts.favourite": "加到收藏", "keyboard_shortcuts.favourites": "開啟收藏名單", - "keyboard_shortcuts.federated": "開啟站點聯盟時間軸", + "keyboard_shortcuts.federated": "開啟聯邦時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", "keyboard_shortcuts.home": "開啟首頁時間軸", "keyboard_shortcuts.hotkey": "快速鍵", - "keyboard_shortcuts.legend": "顯示此列表", + "keyboard_shortcuts.legend": "顯示此圖例", "keyboard_shortcuts.local": "開啟本機時間軸", "keyboard_shortcuts.mention": "提及作者", "keyboard_shortcuts.muted": "開啟靜音使用者名單", @@ -239,20 +244,21 @@ "keyboard_shortcuts.open_media": "開啟媒體", "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單", "keyboard_shortcuts.profile": "開啟作者的個人資料頁面", - "keyboard_shortcuts.reply": "回覆", + "keyboard_shortcuts.reply": "回應嘟文", "keyboard_shortcuts.requests": "開啟關注請求名單", "keyboard_shortcuts.search": "將焦點移至搜尋框", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文", "keyboard_shortcuts.start": "開啟「開始使用」欄位", "keyboard_shortcuts.toggle_hidden": "顯示/隱藏在內容警告之後的正文", "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", "keyboard_shortcuts.toot": "開始發出新嘟文", "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點", - "keyboard_shortcuts.up": "往上移動名單項目", + "keyboard_shortcuts.up": "在名單中往上移動", "lightbox.close": "關閉", + "lightbox.compress": "折疊圖片檢視框", + "lightbox.expand": "展開圖片檢視框", "lightbox.next": "下一步", "lightbox.previous": "上一步", - "lightbox.view_context": "檢視內文", "lists.account.add": "新增至名單", "lists.account.remove": "從名單中移除", "lists.delete": "刪除名單", @@ -260,15 +266,21 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增名單", "lists.new.title_placeholder": "新名單標題", + "lists.replies_policy.followed": "任何跟隨的使用者", + "lists.replies_policy.list": "列表成員", + "lists.replies_policy.none": "沒有人", + "lists.replies_policy.title": "顯示回覆:", "lists.search": "搜尋您關注的使用者", "lists.subheading": "您的名單", - "load_pending": "{count, plural, other {# 個新項目}}", + "load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}", "loading_indicator.label": "讀取中...", "media_gallery.toggle_visible": "切換可見性", "missing_indicator.label": "找不到", "missing_indicator.sublabel": "找不到此資源", + "mute_modal.duration": "持續時間", "mute_modal.hide_notifications": "隱藏來自這位使用者的通知?", - "navigation_bar.apps": "封鎖的使用者", + "mute_modal.indefinite": "無期限", + "navigation_bar.apps": "行動應用程式", "navigation_bar.blocks": "封鎖使用者", "navigation_bar.bookmarks": "書籤", "navigation_bar.community_timeline": "本機時間軸", @@ -291,71 +303,83 @@ "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "聯邦時間軸", "navigation_bar.security": "安全性", - "notification.favourite": "{name} 把你的嘟文加入了最愛", - "notification.follow": "{name} 關注了你", - "notification.follow_request": "{name} 要求關注你", - "notification.mention": "{name} 提到了你", + "notification.favourite": "{name} 把您的嘟文加入了最愛", + "notification.follow": "{name} 關注了您", + "notification.follow_request": "{name} 要求關注您", + "notification.mention": "{name} 提到了您", "notification.own_poll": "您的投票已結束", - "notification.poll": "您投過的投票已經結束", - "notification.reblog": "{name}轉嘟了你的嘟文", + "notification.poll": "您曾投過的投票已經結束", + "notification.reblog": "{name} 轉嘟了您的嘟文", + "notification.status": "{name} 剛剛嘟文", "notifications.clear": "清除通知", - "notifications.clear_confirmation": "確定要永久清除你的通知嗎?", + "notifications.clear_confirmation": "確定要永久清除您的通知嗎?", "notifications.column_settings.alert": "桌面通知", "notifications.column_settings.favourite": "最愛:", "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾欄", "notifications.column_settings.filter_bar.show": "顯示", "notifications.column_settings.follow": "新關注者:", - "notifications.column_settings.follow_request": "新的關注請求:", + "notifications.column_settings.follow_request": "新的關注請求:", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票結果:", - "notifications.column_settings.push": "推送通知", + "notifications.column_settings.push": "推播通知", "notifications.column_settings.reblog": "轉嘟:", "notifications.column_settings.show": "在欄位中顯示", - "notifications.column_settings.sound": "播放音效", + "notifications.column_settings.sound": "播放聲音", + "notifications.column_settings.status": "新嘟文:", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", + "notifications.filter.statuses": "已跟隨使用者的最新動態", + "notifications.grant_permission": "授予權限", "notifications.group": "{count} 條通知", + "notifications.mark_as_read": "將所有通知都標記為已讀", + "notifications.permission_denied": "由於之前拒絕了瀏覽器請求,因此桌面通知不可用", + "notifications.permission_denied_alert": "因為之前瀏覽器權限被拒絕,無法啟用桌面通知", + "notifications.permission_required": "因為尚未授予所需的權限,所以桌面通知不可用。", + "notifications_permission_banner.enable": "啟用桌面通知", + "notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,您可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", + "notifications_permission_banner.title": "不要錯過任何東西!", + "picture_in_picture.restore": "還原", "poll.closed": "已關閉", "poll.refresh": "重新整理", "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", "poll.vote": "投票", - "poll.voted": "你已對此問題投票", + "poll.voted": "您已對此問題投票", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", - "privacy.change": "調整隱私狀態", - "privacy.direct.long": "只有被提到的使用者能看到", + "privacy.change": "調整嘟文隱私狀態", + "privacy.direct.long": "只有被提及的使用者能看到", "privacy.direct.short": "私訊", - "privacy.private.long": "只有關注你的使用者能看到", + "privacy.private.long": "只有關注您的使用者能看到", "privacy.private.short": "僅關注者", - "privacy.public.long": "嘟到公開時間軸", + "privacy.public.long": "公開,且顯示於公開時間軸", "privacy.public.short": "公開", "privacy.unlisted.long": "公開,但不會顯示在公開時間軸", "privacy.unlisted.short": "不公開", "refresh": "重新整理", "regeneration_indicator.label": "載入中…", - "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!", + "regeneration_indicator.sublabel": "您的主頁時間軸正在準備中!", "relative_time.days": "{number} 天", - "relative_time.hours": "{number} 小時", + "relative_time.hours": "{number}小時前", "relative_time.just_now": "剛剛", - "relative_time.minutes": "{number} 分", + "relative_time.minutes": "{number} 分前", "relative_time.seconds": "{number} 秒", "relative_time.today": "今天", "reply_indicator.cancel": "取消", "report.forward": "轉寄到 {target}", - "report.forward_hint": "這個帳戶屬於其他站點。要像該站點發送匿名的檢舉訊息嗎?", - "report.hint": "這項訊息會發送到您伺服器的管理員。你可以提供檢舉這個帳戶的理由:", - "report.placeholder": "更多訊息", + "report.forward_hint": "這個帳戶屬於其他伺服器。要像該伺服器發送匿名的檢舉訊息嗎?", + "report.hint": "這項訊息會發送到您伺服器的管理員。您可以提供檢舉這個帳戶的理由:", + "report.placeholder": "其他備註", "report.submit": "送出", "report.target": "檢舉 {target}", "search.placeholder": "搜尋", "search_popout.search_format": "進階搜尋格式", - "search_popout.tips.full_text": "輸入簡單的文字,搜尋由你撰寫、最愛、轉嘟或提你的嘟文,以及符合使用者名稱、帳戶名稱和標籤。", + "search_popout.tips.full_text": "輸入簡單的文字,搜尋由您撰寫、收藏、轉嘟或提您的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶顯示名稱和主題標籤。", "search_popout.tips.hashtag": "主題標籤", "search_popout.tips.status": "嘟文", "search_popout.tips.text": "輸入簡單的文字,搜尋符合的使用者名稱,帳戶名稱與標籤", @@ -370,32 +394,32 @@ "status.block": "封鎖 @{name}", "status.bookmark": "書籤", "status.cancel_reblog_private": "取消轉嘟", - "status.cannot_reblog": "這篇嘟文無法被轉嘟", - "status.copy": "將連結複製到嘟文中", + "status.cannot_reblog": "這則嘟文無法被轉嘟", + "status.copy": "複製嘟文連結", "status.delete": "刪除", - "status.detailed_status": "對話的詳細內容", + "status.detailed_status": "詳細的對話內容", "status.direct": "發送私訊給 @{name}", - "status.embed": "嵌入", + "status.embed": "內嵌", "status.favourite": "最愛", "status.filtered": "已過濾", "status.load_more": "載入更多", "status.media_hidden": "隱藏媒體內容", - "status.mention": "提到 @{name}", + "status.mention": "提及 @{name}", "status.more": "更多", "status.mute": "靜音 @{name}", "status.mute_conversation": "靜音對話", - "status.open": "展開嘟文", + "status.open": "展開此嘟文", "status.pin": "釘選到個人資料頁", "status.pinned": "釘選的嘟文", "status.read_more": "閱讀更多", "status.reblog": "轉嘟", "status.reblog_private": "轉嘟給原有關注者", "status.reblogged_by": "{name} 轉嘟了", - "status.reblogs.empty": "還沒有人轉嘟。如果有,會顯示在這裡。", + "status.reblogs.empty": "還沒有人轉嘟過這則嘟文。當有人轉嘟時,它將於此顯示。", "status.redraft": "刪除 & 編輯", "status.remove_bookmark": "移除書籤", "status.reply": "回覆", - "status.replyAll": "回覆所有人", + "status.replyAll": "回覆討論串", "status.report": "檢舉 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", @@ -406,46 +430,47 @@ "status.show_thread": "顯示討論串", "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "解除此對話的靜音", - "status.unpin": "解除置頂", + "status.unpin": "從個人頁面解除釘選", "suggestions.dismiss": "關閉建議", "suggestions.header": "您可能對這些東西有興趣…", - "tabs_bar.federated_timeline": "其他站點", - "tabs_bar.home": "主頁", - "tabs_bar.local_timeline": "本站", + "tabs_bar.federated_timeline": "聯邦宇宙", + "tabs_bar.home": "首頁", + "tabs_bar.local_timeline": "本機", "tabs_bar.notifications": "通知", "tabs_bar.search": "搜尋", - "time_remaining.days": "剩餘{number, plural, one {# 天數} other {# 天數}}", + "time_remaining.days": "剩餘{number, plural, one {# 天} other {# 天}}", "time_remaining.hours": "剩餘{number, plural, one {# 小時} other {# 小時}}", "time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}", "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他服務器的 {resource}", + "timeline_hint.resources.followers": "關注者", + "timeline_hint.resources.follows": "正在關注", + "timeline_hint.resources.statuses": "更早的嘟文", + "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", "trends.trending_now": "目前趨勢", - "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。", + "ui.beforeunload": "如果離開 Mastodon,您的草稿將會不見。", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "拖放來上傳", - "upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "上傳圖像、影片、或音樂檔案", "upload_error.limit": "已達到檔案上傳限制。", - "upload_error.poll": "不允許在投票上傳檔案。", - "upload_form.audio_description": "簡單描述內容給聽障人士", + "upload_error.poll": "不允許在投票中上傳檔案。", + "upload_form.audio_description": "描述內容給聽障人士", "upload_form.description": "為視障人士增加文字說明", "upload_form.edit": "編輯", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "更改預覽圖", "upload_form.undo": "刪除", - "upload_form.video_description": "簡單描述給聽障或視障人士", + "upload_form.video_description": "描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", "upload_modal.apply": "套用", "upload_modal.choose_image": "選擇圖片", - "upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗", - "upload_modal.detect_text": "從圖片偵測文字", + "upload_modal.description_placeholder": "我能吞下玻璃而不傷身體", + "upload_modal.detect_text": "從圖片中偵測文字", "upload_modal.edit_media": "編輯媒體", - "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", + "upload_modal.hint": "於預覽中點擊或拖曳圓圈以選擇將於所有縮圖中顯示的焦點。", + "upload_modal.preparing_ocr": "準備 OCR 中……", "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上傳中...", "video.close": "關閉影片", diff --git a/app/javascript/mastodon/main.js b/app/javascript/mastodon/main.js index da4884fd3..bda51f692 100644 --- a/app/javascript/mastodon/main.js +++ b/app/javascript/mastodon/main.js @@ -1,4 +1,5 @@ import * as registerPushNotifications from './actions/push_notifications'; +import { setupBrowserNotifications } from './actions/notifications'; import { default as Mastodon, store } from './containers/mastodon'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -22,6 +23,7 @@ function main() { const props = JSON.parse(mountNode.getAttribute('data-props')); ReactDOM.render(<Mastodon {...props} />, mountNode); + store.dispatch(setupBrowserNotifications()); if (process.env.NODE_ENV === 'production') { // avoid offline in dev mode because it's harder to debug require('offline-plugin/runtime').install(); diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js index 3823bb05e..a8fb69c27 100644 --- a/app/javascript/mastodon/reducers/index.js +++ b/app/javascript/mastodon/reducers/index.js @@ -36,6 +36,7 @@ import trends from './trends'; import missed_updates from './missed_updates'; import announcements from './announcements'; import markers from './markers'; +import picture_in_picture from './picture_in_picture'; const reducers = { announcements, @@ -75,6 +76,7 @@ const reducers = { trends, missed_updates, markers, + picture_in_picture, }; export default combineReducers(reducers); diff --git a/app/javascript/mastodon/reducers/meta.js b/app/javascript/mastodon/reducers/meta.js index 36a5a1c35..65becc44f 100644 --- a/app/javascript/mastodon/reducers/meta.js +++ b/app/javascript/mastodon/reducers/meta.js @@ -1,15 +1,20 @@ -import { STORE_HYDRATE } from '../actions/store'; +import { STORE_HYDRATE } from 'mastodon/actions/store'; +import { APP_LAYOUT_CHANGE } from 'mastodon/actions/app'; import { Map as ImmutableMap } from 'immutable'; +import { layoutFromWindow } from 'mastodon/is_mobile'; const initialState = ImmutableMap({ streaming_api_base_url: null, access_token: null, + layout: layoutFromWindow(), }); export default function meta(state = initialState, action) { switch(action.type) { case STORE_HYDRATE: return state.merge(action.state.get('meta')); + case APP_LAYOUT_CHANGE: + return state.set('layout', action.layout); default: return state; } diff --git a/app/javascript/mastodon/reducers/mutes.js b/app/javascript/mastodon/reducers/mutes.js index 4672e5097..a9eb61ff8 100644 --- a/app/javascript/mastodon/reducers/mutes.js +++ b/app/javascript/mastodon/reducers/mutes.js @@ -3,12 +3,14 @@ import Immutable from 'immutable'; import { MUTES_INIT_MODAL, MUTES_TOGGLE_HIDE_NOTIFICATIONS, + MUTES_CHANGE_DURATION, } from '../actions/mutes'; const initialState = Immutable.Map({ new: Immutable.Map({ account: null, notifications: true, + duration: 0, }), }); @@ -21,6 +23,8 @@ export default function mutes(state = initialState, action) { }); case MUTES_TOGGLE_HIDE_NOTIFICATIONS: return state.updateIn(['new', 'notifications'], (old) => !old); + case MUTES_CHANGE_DURATION: + return state.setIn(['new', 'duration'], Number(action.duration)); default: return state; } diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index ed1ba0272..1d4874717 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -9,6 +9,9 @@ import { NOTIFICATIONS_LOAD_PENDING, NOTIFICATIONS_MOUNT, NOTIFICATIONS_UNMOUNT, + NOTIFICATIONS_MARK_AS_READ, + NOTIFICATIONS_SET_BROWSER_SUPPORT, + NOTIFICATIONS_SET_BROWSER_PERMISSION, } from '../actions/notifications'; import { ACCOUNT_BLOCK_SUCCESS, @@ -16,6 +19,13 @@ import { FOLLOW_REQUEST_AUTHORIZE_SUCCESS, FOLLOW_REQUEST_REJECT_SUCCESS, } from '../actions/accounts'; +import { + MARKERS_FETCH_SUCCESS, +} from '../actions/markers'; +import { + APP_FOCUS, + APP_UNFOCUS, +} from '../actions/app'; import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks'; import { TIMELINE_DELETE, TIMELINE_DISCONNECT } from '../actions/timelines'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; @@ -26,9 +36,14 @@ const initialState = ImmutableMap({ items: ImmutableList(), hasMore: true, top: false, - mounted: false, + mounted: 0, unread: 0, + lastReadId: '0', + readMarkerId: '0', + isTabVisible: true, isLoading: false, + browserSupport: false, + browserPermission: 'default', }); const notificationToMap = notification => ImmutableMap({ @@ -46,8 +61,10 @@ const normalizeNotification = (state, notification, usePendingItems) => { return state.update('pendingItems', list => list.unshift(notificationToMap(notification))).update('unread', unread => unread + 1); } - if (!top) { + if (shouldCountUnreadNotifications(state)) { state = state.update('unread', unread => unread + 1); + } else { + state = state.set('lastReadId', notification.id); } return state.update('items', list => { @@ -60,6 +77,7 @@ const normalizeNotification = (state, notification, usePendingItems) => { }; const expandNormalizedNotifications = (state, notifications, next, isLoadingRecent, usePendingItems) => { + const lastReadId = state.get('lastReadId'); let items = ImmutableList(); notifications.forEach((n, i) => { @@ -87,6 +105,15 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece mutable.set('hasMore', false); } + if (shouldCountUnreadNotifications(state)) { + mutable.update('unread', unread => unread + items.count(item => compareId(item.get('id'), lastReadId) > 0)); + } else { + const mostRecent = items.find(item => item !== null); + if (mostRecent && compareId(lastReadId, mostRecent.get('id')) < 0) { + mutable.set('lastReadId', mostRecent.get('id')); + } + } + mutable.set('isLoading', false); }); }; @@ -96,21 +123,93 @@ const filterNotifications = (state, accountIds, type) => { return state.update('items', helper).update('pendingItems', helper); }; +const clearUnread = (state) => { + state = state.set('unread', state.get('pendingItems').size); + const lastNotification = state.get('items').find(item => item !== null); + return state.set('lastReadId', lastNotification ? lastNotification.get('id') : '0'); +}; + const updateTop = (state, top) => { - if (top) { - state = state.set('unread', state.get('pendingItems').size); + state = state.set('top', top); + + if (!shouldCountUnreadNotifications(state)) { + state = clearUnread(state); } - return state.set('top', top); + return state; }; const deleteByStatus = (state, statusId) => { + const lastReadId = state.get('lastReadId'); + + if (shouldCountUnreadNotifications(state)) { + const deletedUnread = state.get('items').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0); + state = state.update('unread', unread => unread - deletedUnread.size); + } + const helper = list => list.filterNot(item => item !== null && item.get('status') === statusId); + const deletedUnread = state.get('pendingItems').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0); + state = state.update('unread', unread => unread - deletedUnread.size); return state.update('items', helper).update('pendingItems', helper); }; +const updateMounted = (state) => { + state = state.update('mounted', count => count + 1); + if (!shouldCountUnreadNotifications(state, state.get('mounted') === 1)) { + state = state.set('readMarkerId', state.get('lastReadId')); + state = clearUnread(state); + } + return state; +}; + +const updateVisibility = (state, visibility) => { + state = state.set('isTabVisible', visibility); + if (!shouldCountUnreadNotifications(state)) { + state = state.set('readMarkerId', state.get('lastReadId')); + state = clearUnread(state); + } + return state; +}; + +const shouldCountUnreadNotifications = (state, ignoreScroll = false) => { + const isTabVisible = state.get('isTabVisible'); + const isOnTop = state.get('top'); + const isMounted = state.get('mounted') > 0; + const lastReadId = state.get('lastReadId'); + const lastItem = state.get('items').findLast(item => item !== null); + const lastItemReached = !state.get('hasMore') || lastReadId === '0' || (lastItem && compareId(lastItem.get('id'), lastReadId) <= 0); + + return !(isTabVisible && (ignoreScroll || isOnTop) && isMounted && lastItemReached); +}; + +const recountUnread = (state, last_read_id) => { + return state.withMutations(mutable => { + if (compareId(last_read_id, mutable.get('lastReadId')) > 0) { + mutable.set('lastReadId', last_read_id); + } + + if (compareId(last_read_id, mutable.get('readMarkerId')) > 0) { + mutable.set('readMarkerId', last_read_id); + } + + if (state.get('unread') > 0 || shouldCountUnreadNotifications(state)) { + mutable.set('unread', mutable.get('pendingItems').count(item => item !== null) + mutable.get('items').count(item => item && compareId(item.get('id'), last_read_id) > 0)); + } + }); +}; + export default function notifications(state = initialState, action) { switch(action.type) { + case MARKERS_FETCH_SUCCESS: + return action.markers.notifications ? recountUnread(state, action.markers.notifications.last_read_id) : state; + case NOTIFICATIONS_MOUNT: + return updateMounted(state); + case NOTIFICATIONS_UNMOUNT: + return state.update('mounted', count => count - 1); + case APP_FOCUS: + return updateVisibility(state, true); + case APP_UNFOCUS: + return updateVisibility(state, false); case NOTIFICATIONS_LOAD_PENDING: return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0); case NOTIFICATIONS_EXPAND_REQUEST: @@ -144,10 +243,13 @@ export default function notifications(state = initialState, action) { return action.timeline === 'home' ? state.update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : state; - case NOTIFICATIONS_MOUNT: - return state.set('mounted', true); - case NOTIFICATIONS_UNMOUNT: - return state.set('mounted', false); + case NOTIFICATIONS_MARK_AS_READ: + const lastNotification = state.get('items').find(item => item !== null); + return lastNotification ? recountUnread(state, lastNotification.get('id')) : state; + case NOTIFICATIONS_SET_BROWSER_SUPPORT: + return state.set('browserSupport', action.value); + case NOTIFICATIONS_SET_BROWSER_PERMISSION: + return state.set('browserPermission', action.value); default: return state; } diff --git a/app/javascript/mastodon/reducers/picture_in_picture.js b/app/javascript/mastodon/reducers/picture_in_picture.js new file mode 100644 index 000000000..06cd8c5e8 --- /dev/null +++ b/app/javascript/mastodon/reducers/picture_in_picture.js @@ -0,0 +1,22 @@ +import { PICTURE_IN_PICTURE_DEPLOY, PICTURE_IN_PICTURE_REMOVE } from 'mastodon/actions/picture_in_picture'; + +const initialState = { + statusId: null, + accountId: null, + type: null, + src: null, + muted: false, + volume: 0, + currentTime: 0, +}; + +export default function pictureInPicture(state = initialState, action) { + switch(action.type) { + case PICTURE_IN_PICTURE_DEPLOY: + return { statusId: action.statusId, accountId: action.accountId, type: action.playerType, ...action.props }; + case PICTURE_IN_PICTURE_REMOVE: + return { ...initialState }; + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/relationships.js b/app/javascript/mastodon/reducers/relationships.js index 1d050cc63..53949258a 100644 --- a/app/javascript/mastodon/reducers/relationships.js +++ b/app/javascript/mastodon/reducers/relationships.js @@ -45,7 +45,7 @@ const initialState = ImmutableMap(); export default function relationships(state = initialState, action) { switch(action.type) { case ACCOUNT_FOLLOW_REQUEST: - return state.setIn([action.id, action.locked ? 'requested' : 'following'], true); + return state.getIn([action.id, 'following']) ? state : state.setIn([action.id, action.locked ? 'requested' : 'following'], true); case ACCOUNT_FOLLOW_FAIL: return state.setIn([action.id, action.locked ? 'requested' : 'following'], false); case ACCOUNT_UNFOLLOW_REQUEST: diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index efef2ad9a..357ab352a 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -29,12 +29,13 @@ const initialState = ImmutableMap({ notifications: ImmutableMap({ alerts: ImmutableMap({ - follow: true, + follow: false, follow_request: false, - favourite: true, - reblog: true, - mention: true, - poll: true, + favourite: false, + reblog: false, + mention: false, + poll: false, + status: false, }), quickFilter: ImmutableMap({ @@ -43,6 +44,8 @@ const initialState = ImmutableMap({ advanced: false, }), + dismissPermissionBanner: false, + shows: ImmutableMap({ follow: true, follow_request: false, @@ -50,6 +53,7 @@ const initialState = ImmutableMap({ reblog: true, mention: true, poll: true, + status: true, }), sounds: ImmutableMap({ @@ -59,6 +63,7 @@ const initialState = ImmutableMap({ reblog: true, mention: true, poll: true, + status: true, }), }), diff --git a/app/javascript/mastodon/reducers/user_lists.js b/app/javascript/mastodon/reducers/user_lists.js index 8165952a7..10aaa2d68 100644 --- a/app/javascript/mastodon/reducers/user_lists.js +++ b/app/javascript/mastodon/reducers/user_lists.js @@ -53,14 +53,20 @@ import { } from 'mastodon/actions/directory'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; +const initialListState = ImmutableMap({ + next: null, + isLoading: false, + items: ImmutableList(), +}); + const initialState = ImmutableMap({ - followers: ImmutableMap(), - following: ImmutableMap(), - reblogged_by: ImmutableMap(), - favourited_by: ImmutableMap(), - follow_requests: ImmutableMap(), - blocks: ImmutableMap(), - mutes: ImmutableMap(), + followers: initialListState, + following: initialListState, + reblogged_by: initialListState, + favourited_by: initialListState, + follow_requests: initialListState, + blocks: initialListState, + mutes: initialListState, }); const normalizeList = (state, path, accounts, next) => { diff --git a/app/javascript/mastodon/rtl.js b/app/javascript/mastodon/rtl.js deleted file mode 100644 index 89bed6de8..000000000 --- a/app/javascript/mastodon/rtl.js +++ /dev/null @@ -1,32 +0,0 @@ -// U+0590 to U+05FF - Hebrew -// U+0600 to U+06FF - Arabic -// U+0700 to U+074F - Syriac -// U+0750 to U+077F - Arabic Supplement -// U+0780 to U+07BF - Thaana -// U+07C0 to U+07FF - N'Ko -// U+0800 to U+083F - Samaritan -// U+08A0 to U+08FF - Arabic Extended-A -// U+FB1D to U+FB4F - Hebrew presentation forms -// U+FB50 to U+FDFF - Arabic presentation forms A -// U+FE70 to U+FEFF - Arabic presentation forms B - -const rtlChars = /[\u0590-\u083F]|[\u08A0-\u08FF]|[\uFB1D-\uFDFF]|[\uFE70-\uFEFF]/mg; - -export function isRtl(text) { - if (text.length === 0) { - return false; - } - - text = text.replace(/(?:^|[^\/\w])@([a-z0-9_]+(@[a-z0-9\.\-]+)?)/ig, ''); - text = text.replace(/(?:^|[^\/\w])#([\S]+)/ig, ''); - text = text.replace(/\s+/g, ''); - text = text.replace(/(\w\S+\.\w{2,}\S*)/g, ''); - - const matches = text.match(rtlChars); - - if (!matches) { - return false; - } - - return matches.length / text.length > 0.3; -}; diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index fd3b72f96..1e19db65d 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -1,5 +1,5 @@ import { createSelector } from 'reselect'; -import { List as ImmutableList, is } from 'immutable'; +import { List as ImmutableList, Map as ImmutableMap, is } from 'immutable'; import { me } from '../initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); @@ -121,6 +121,16 @@ export const makeGetStatus = () => { ); }; +export const makeGetPictureInPicture = () => { + return createSelector([ + (state, { id }) => state.get('picture_in_picture').statusId === id, + (state) => state.getIn(['meta', 'layout']) !== 'mobile', + ], (inUse, available) => ImmutableMap({ + inUse: inUse && available, + available, + })); +}; + const getAlertsBase = state => state.get('alerts'); export const getAlerts = createSelector([getAlertsBase], (base) => { diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js index cf1388aed..c6d12cd6f 100644 --- a/app/javascript/mastodon/stream.js +++ b/app/javascript/mastodon/stream.js @@ -16,7 +16,7 @@ let sharedConnection; * @property {function(): void} onDisconnect */ - /** +/** * @typedef StreamEvent * @property {string} event * @property {object} payload diff --git a/app/javascript/mastodon/utils/config.js b/app/javascript/mastodon/utils/config.js new file mode 100644 index 000000000..932cd0cbf --- /dev/null +++ b/app/javascript/mastodon/utils/config.js @@ -0,0 +1,10 @@ +import ready from '../ready'; + +export let assetHost = ''; + +ready(() => { + const cdnHost = document.querySelector('meta[name=cdn-host]'); + if (cdnHost) { + assetHost = cdnHost.content || ''; + } +}); diff --git a/app/javascript/mastodon/utils/notifications.js b/app/javascript/mastodon/utils/notifications.js new file mode 100644 index 000000000..7634cac21 --- /dev/null +++ b/app/javascript/mastodon/utils/notifications.js @@ -0,0 +1,30 @@ +// Handles browser quirks, based on +// https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API + +const checkNotificationPromise = () => { + try { + // eslint-disable-next-line promise/catch-or-return + Notification.requestPermission().then(); + } catch(e) { + return false; + } + + return true; +}; + +const handlePermission = (permission, callback) => { + // Whatever the user answers, we make sure Chrome stores the information + if(!('permission' in Notification)) { + Notification.permission = permission; + } + + callback(Notification.permission); +}; + +export const requestNotificationPermission = (callback) => { + if (checkNotificationPromise()) { + Notification.requestPermission().then((permission) => handlePermission(permission, callback)).catch(console.warn); + } else { + Notification.requestPermission((permission) => handlePermission(permission, callback)); + } +}; diff --git a/app/javascript/mastodon/utils/resize_image.js b/app/javascript/mastodon/utils/resize_image.js index 6c1cb61a2..8f1485379 100644 --- a/app/javascript/mastodon/utils/resize_image.js +++ b/app/javascript/mastodon/utils/resize_image.js @@ -41,6 +41,45 @@ const dropOrientationIfNeeded = (orientation) => new Promise(resolve => { } }); +// Some browsers don't allow reading from a canvas and instead return all-white +// or randomized data. Use a pre-defined image to check if reading the canvas +// works. +const checkCanvasReliability = () => new Promise((resolve, reject) => { + switch(_browser_quirks['canvas-read-unreliable']) { + case true: + reject('Canvas reading unreliable'); + break; + case false: + resolve(); + break; + default: + // 2×2 GIF with white, red, green and blue pixels + const testImageURL = + 'data:image/gif;base64,R0lGODdhAgACAKEDAAAA//8AAAD/AP///ywAAAAAAgACAAACA1wEBQA7'; + const refData = + [255, 255, 255, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 255]; + const img = new Image(); + img.onload = () => { + const canvas = document.createElement('canvas'); + const context = canvas.getContext('2d'); + context.drawImage(img, 0, 0, 2, 2); + const imageData = context.getImageData(0, 0, 2, 2); + if (imageData.data.every((x, i) => refData[i] === x)) { + _browser_quirks['canvas-read-unreliable'] = false; + resolve(); + } else { + _browser_quirks['canvas-read-unreliable'] = true; + reject('Canvas reading unreliable'); + } + }; + img.onerror = () => { + _browser_quirks['canvas-read-unreliable'] = true; + reject('Failed to load test image'); + }; + img.src = testImageURL; + } +}); + const getImageUrl = inputFile => new Promise((resolve, reject) => { if (window.URL && URL.createObjectURL) { try { @@ -110,14 +149,6 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) = context.drawImage(img, 0, 0, width, height); - // The Tor Browser and maybe other browsers may prevent reading from canvas - // and return an all-white image instead. Assume reading failed if the resized - // image is perfectly white. - const imageData = context.getImageData(0, 0, width, height); - if (imageData.data.every(value => value === 255)) { - throw 'Failed to read from canvas'; - } - canvas.toBlob(resolve, type); }); @@ -127,7 +158,8 @@ const resizeImage = (img, type = 'image/png') => new Promise((resolve, reject) = const newWidth = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (width / height))); const newHeight = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (height / width))); - getOrientation(img, type) + checkCanvasReliability() + .then(getOrientation(img, type)) .then(orientation => processImage(img, { width: newWidth, height: newHeight, diff --git a/app/javascript/packs/about.js b/app/javascript/packs/about.js index 843cb2c87..892d825ec 100644 --- a/app/javascript/packs/about.js +++ b/app/javascript/packs/about.js @@ -1,3 +1,4 @@ +import './public-path'; import loadPolyfills from '../mastodon/load_polyfills'; import { start } from '../mastodon/common'; diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js index 51f92de8a..8fd1b8a8e 100644 --- a/app/javascript/packs/admin.js +++ b/app/javascript/packs/admin.js @@ -1,3 +1,4 @@ +import './public-path'; import { delegate } from '@rails/ujs'; import ready from '../mastodon/ready'; @@ -56,18 +57,46 @@ const onEnableBootstrapTimelineAccountsChange = (target) => { bootstrapTimelineAccountsField.disabled = !target.checked; if (target.checked) { bootstrapTimelineAccountsField.parentElement.classList.remove('disabled'); + bootstrapTimelineAccountsField.parentElement.parentElement.classList.remove('disabled'); } else { bootstrapTimelineAccountsField.parentElement.classList.add('disabled'); + bootstrapTimelineAccountsField.parentElement.parentElement.classList.add('disabled'); } } }; delegate(document, '#form_admin_settings_enable_bootstrap_timeline_accounts', 'change', ({ target }) => onEnableBootstrapTimelineAccountsChange(target)); +const onChangeRegistrationMode = (target) => { + const enabled = target.value === 'approved'; + + [].forEach.call(document.querySelectorAll('#form_admin_settings_require_invite_text'), (input) => { + input.disabled = !enabled; + if (enabled) { + let element = input; + do { + element.classList.remove('disabled'); + element = element.parentElement; + } while (element && !element.classList.contains('fields-group')); + } else { + let element = input; + do { + element.classList.add('disabled'); + element = element.parentElement; + } while (element && !element.classList.contains('fields-group')); + } + }); +}; + +delegate(document, '#form_admin_settings_registrations_mode', 'change', ({ target }) => onChangeRegistrationMode(target)); + ready(() => { const domainBlockSeverityInput = document.getElementById('domain_block_severity'); if (domainBlockSeverityInput) onDomainBlockSeverityChange(domainBlockSeverityInput); const enableBootstrapTimelineAccounts = document.getElementById('form_admin_settings_enable_bootstrap_timeline_accounts'); if (enableBootstrapTimelineAccounts) onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts); + + const registrationMode = document.getElementById('form_admin_settings_registrations_mode'); + if (registrationMode) onChangeRegistrationMode(registrationMode); }); diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index c65ebed74..91240aecf 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -1,3 +1,4 @@ +import './public-path'; import loadPolyfills from '../mastodon/load_polyfills'; import { start } from '../mastodon/common'; diff --git a/app/javascript/packs/error.js b/app/javascript/packs/error.js index 685c89065..6376dc2f5 100644 --- a/app/javascript/packs/error.js +++ b/app/javascript/packs/error.js @@ -1,3 +1,4 @@ +import './public-path'; import ready from '../mastodon/ready'; ready(() => { diff --git a/app/javascript/packs/public-path.js b/app/javascript/packs/public-path.js new file mode 100644 index 000000000..f96109f4f --- /dev/null +++ b/app/javascript/packs/public-path.js @@ -0,0 +1,21 @@ +// Dynamically set webpack's loading path depending on a meta header, in order +// to share the same assets regardless of instance configuration. +// See https://webpack.js.org/guides/public-path/#on-the-fly + +function removeOuterSlashes(string) { + return string.replace(/^\/*/, '').replace(/\/*$/, ''); +} + +function formatPublicPath(host = '', path = '') { + let formattedHost = removeOuterSlashes(host); + if (formattedHost && !/^http/i.test(formattedHost)) { + formattedHost = `//${formattedHost}`; + } + const formattedPath = removeOuterSlashes(path); + return `${formattedHost}/${formattedPath}/`; +} + +const cdnHost = document.querySelector('meta[name=cdn-host]'); + +// eslint-disable-next-line camelcase, no-undef, no-unused-vars +__webpack_public_path__ = formatPublicPath(cdnHost ? cdnHost.content : '', process.env.PUBLIC_OUTPUT_PATH); diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 551e281a8..8c5c15b8f 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -1,3 +1,4 @@ +import './public-path'; import escapeTextContentForBrowser from 'escape-html'; import loadPolyfills from '../mastodon/load_polyfills'; import ready from '../mastodon/ready'; @@ -279,6 +280,17 @@ function main() { target.style.display = 'block'; } }); + + // Empty the honeypot fields in JS in case something like an extension + // automatically filled them. + delegate(document, '#registration_new_user,#new_user', 'submit', () => { + ['user_website', 'user_confirm_password', 'registration_user_website', 'registration_user_confirm_password'].forEach(id => { + const field = document.getElementById(id); + if (field) { + field.value = ''; + } + }); + }); } loadPolyfills() diff --git a/app/javascript/packs/share.js b/app/javascript/packs/share.js index 4ef23e1b2..1225d7b52 100644 --- a/app/javascript/packs/share.js +++ b/app/javascript/packs/share.js @@ -1,3 +1,4 @@ +import './public-path'; import loadPolyfills from '../mastodon/load_polyfills'; import { start } from '../mastodon/common'; diff --git a/app/javascript/styles/contrast/diff.scss b/app/javascript/styles/contrast/diff.scss index 5a40e7d79..841ed6648 100644 --- a/app/javascript/styles/contrast/diff.scss +++ b/app/javascript/styles/contrast/diff.scss @@ -75,3 +75,8 @@ .public-layout .public-account-header__tabs__tabs .counter.active::after { border-bottom: 4px solid $ui-highlight-color; } + +.compose-form .autosuggest-textarea__textarea::placeholder, +.compose-form .spoiler-input__input::placeholder { + color: $inverted-text-color; +} diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index e25a80c04..55ebd3091 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -58,6 +58,16 @@ td { vertical-align: top; } +.auto-dir { + p { + unicode-bidi: plaintext; + } + + a { + unicode-bidi: isolate; + } +} + .email-table, .content-section, .column, @@ -96,7 +106,7 @@ body { .col-3, .col-4, .col-5, -.col-6, { +.col-6 { font-size: 0; display: inline-block; width: 100%; diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 8c8d69fc4..d4290d7e6 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -256,14 +256,6 @@ html { background: $ui-base-color; } -.status.status-direct { - background: lighten($ui-base-color, 4%); -} - -.focusable:focus .status.status-direct { - background: lighten($ui-base-color, 8%); -} - .detailed-status, .detailed-status__action-bar { background: $white; @@ -363,11 +355,45 @@ html { .error-modal, .onboarding-modal, .report-modal__comment .setting-text__wrapper, -.report-modal__comment .setting-text { +.report-modal__comment .setting-text, +.announcements, +.picture-in-picture__header, +.picture-in-picture__footer, +.reactions-bar__item { background: $white; border: 1px solid lighten($ui-base-color, 8%); } +.reactions-bar__item { + &:hover, + &:focus, + &:active { + background-color: $ui-base-color; + } +} + +.reactions-bar__item.active { + background-color: mix($white, $ui-highlight-color, 80%); + border-color: mix(lighten($ui-base-color, 8%), $ui-highlight-color, 80%); +} + +.media-modal__overlay .picture-in-picture__footer { + border: 0; +} + +.picture-in-picture__header { + border-bottom: 0; +} + +.announcements, +.picture-in-picture__footer { + border-top: 0; +} + +.icon-with-badge__badge { + border-color: $white; +} + .report-modal__comment { border-right-color: lighten($ui-base-color, 8%); } @@ -520,6 +546,12 @@ html { } } +.picture-in-picture-placeholder { + background: $white; + border-color: lighten($ui-base-color, 8%); + color: lighten($ui-base-color, 8%); +} + .brand__tagline { color: $ui-secondary-color; } @@ -767,3 +799,8 @@ html { .compose-form .compose-form__warning { box-shadow: none; } + +.mute-modal select { + border: 1px solid lighten($ui-base-color, 8%); + background: $simple-background-color url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14.933 18.467' height='19.698' width='15.929'><path d='M3.467 14.967l-3.393-3.5H14.86l-3.392 3.5c-1.866 1.925-3.666 3.5-4 3.5-.335 0-2.135-1.575-4-3.5zm.266-11.234L7.467 0 11.2 3.733l3.733 3.734H0l3.733-3.734z' fill='#{hex-color(lighten($ui-base-color, 8%))}'/></svg>") no-repeat right 8px center / auto 16px; +} diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 3be0aee49..d6bd9e3c6 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -732,6 +732,7 @@ $small-breakpoint: 960px; &__column { flex: 1 1 50%; + overflow-x: hidden; } } diff --git a/app/javascript/styles/mastodon/boost.scss b/app/javascript/styles/mastodon/boost.scss index f94c0aa46..fb1451cb2 100644 --- a/app/javascript/styles/mastodon/boost.scss +++ b/app/javascript/styles/mastodon/boost.scss @@ -1,22 +1,32 @@ -button.icon-button i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); +button.icon-button { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); + } - &:hover { + &:hover i.fa-retweet { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); } -} -button.icon-button.reblogPrivate i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + &.reblogPrivate { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color($action-button-color)}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + } - &:hover { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + &:hover i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 15.980703 3.0497656 15.339844 7.2597656 15.339844 L 11.869141 15.339844 L 11.869141 14.119141 L 11.869141 13.523438 L 11.869141 12.441406 C 11.869141 12.441406 11.869141 12.439453 11.869141 12.439453 L 7.2695312 12.439453 C 6.8295312 12.439453 6.5507814 12.140703 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 z M 17.150391 3.5800781 L 17.130859 3.5898438 C 16.580859 3.5698436 15.810469 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 14.699219 6.5195312 C 15.106887 6.5195312 15.397113 6.7872181 15.414062 7.2050781 C 15.738375 7.0991315 16.077769 7.0273437 16.435547 7.0273438 L 16.578125 7.0273438 C 17.24903 7.0273438 17.874081 7.2325787 18.400391 7.578125 L 18.400391 7.2402344 C 18.400391 4.0902344 18.800391 3.6200781 17.150391 3.5800781 z M 16.435547 8.0273438 C 15.143818 8.0273438 14.083984 9.0851838 14.083984 10.376953 L 14.083984 11.607422 L 13.570312 11.607422 C 13.375448 11.607422 13.210603 11.704118 13.119141 11.791016 C 13.027691 11.877916 12.983569 11.958238 12.951172 12.03125 C 12.886382 12.177277 12.867187 12.304789 12.867188 12.441406 L 12.867188 13.523438 L 12.867188 14.119141 L 12.867188 15.677734 L 12.867188 16.509766 L 13.570312 16.509766 L 19.472656 16.509766 L 20.173828 16.509766 L 20.173828 15.677734 L 20.173828 13.523438 L 20.173828 12.441406 C 20.173828 12.304794 20.156597 12.177281 20.091797 12.03125 C 20.059397 11.95824 20.015299 11.877916 19.923828 11.791016 C 19.832368 11.704116 19.667509 11.607422 19.472656 11.607422 L 18.927734 11.607422 L 18.927734 10.376953 C 18.927734 9.0851838 17.867902 8.0273438 16.576172 8.0273438 L 16.435547 8.0273438 z M 16.435547 9.2207031 L 16.576172 9.2207031 C 17.22782 9.2207031 17.734375 9.7251013 17.734375 10.376953 L 17.734375 11.607422 L 15.277344 11.607422 L 15.277344 10.376953 C 15.277344 9.7251013 15.7839 9.2207031 16.435547 9.2207031 z M 12.919922 9.9394531 C 12.559922 9.9594531 12.359141 10.480234 12.619141 10.740234 L 12.751953 10.904297 C 12.862211 10.870135 12.980058 10.842244 13.085938 10.802734 L 13.085938 10.378906 C 13.085938 10.228632 13.111295 10.084741 13.130859 9.9394531 L 12.919922 9.9394531 z M 19.882812 9.9394531 C 19.902378 10.084741 19.927734 10.228632 19.927734 10.378906 L 19.927734 10.791016 C 20.168811 10.875098 20.455966 10.916935 20.613281 11.066406 C 20.691227 11.140457 20.749315 11.223053 20.806641 11.302734 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 19.882812 9.9394531 z M 16.435547 10.220703 C 16.301234 10.220703 16.277344 10.244432 16.277344 10.378906 L 16.277344 10.607422 L 16.734375 10.607422 L 16.734375 10.378906 C 16.734375 10.244433 16.712442 10.220703 16.578125 10.220703 L 16.435547 10.220703 z ' fill='#{hex-color(lighten($action-button-color, 7%))}' stroke-width='0'/><path d='M 7.7792969 19.650391 L 7.7792969 19.660156 C 7.5392969 19.680156 7.3398437 19.910156 7.3398438 20.160156 L 7.3398438 22.619141 L 7.2792969 22.619141 C 6.1992969 22.619141 5.4208594 22.589844 4.8808594 22.589844 C 3.2408594 22.589844 3.6308594 23.020234 3.6308594 26.240234 L 3.6308594 30.710938 C 3.6308594 34.970937 3.0692969 34.330078 7.2792969 34.330078 L 8.5 34.330078 L 7.1992188 33.269531 C 7.0992188 33.189531 7.02 33.070703 7 32.970703 C 6.98 32.800703 7.0592186 32.619531 7.1992188 32.519531 L 8.5292969 31.419922 L 7.2792969 31.419922 C 6.8392969 31.419922 6.5605469 31.120703 6.5605469 30.720703 L 6.5605469 26.240234 C 6.5605469 25.800234 6.8392969 25.519531 7.2792969 25.519531 L 7.3398438 25.519531 L 7.3398438 28.019531 C 7.3398438 28.399531 7.8801564 28.650391 8.1601562 28.400391 L 13.060547 24.470703 C 13.310547 24.290703 13.310547 23.869453 13.060547 23.689453 L 8.1601562 19.769531 C 8.0601563 19.669531 7.9192969 19.630391 7.7792969 19.650391 z M 17.119141 22.580078 L 17.119141 22.589844 C 16.579141 22.569844 15.820703 22.609375 14.720703 22.609375 L 13.470703 22.609375 L 14.769531 23.679688 C 14.869531 23.749688 14.950703 23.879766 14.970703 24.009766 C 14.990703 24.169766 14.909531 24.310156 14.769531 24.410156 L 13.439453 25.509766 L 14.720703 25.509766 C 15.129702 25.509766 15.41841 25.778986 15.433594 26.199219 C 15.752266 26.097283 16.084896 26.027344 16.435547 26.027344 L 16.578125 26.027344 C 17.236645 26.027344 17.848901 26.228565 18.369141 26.5625 L 18.369141 26.240234 C 18.369141 23.090234 18.769141 22.620078 17.119141 22.580078 z M 16.435547 27.027344 C 15.143818 27.027344 14.083984 28.085184 14.083984 29.376953 L 14.083984 30.607422 L 13.570312 30.607422 C 13.375452 30.607422 13.210603 30.704118 13.119141 30.791016 C 13.027691 30.877916 12.983569 30.958238 12.951172 31.03125 C 12.886382 31.177277 12.867184 31.304789 12.867188 31.441406 L 12.867188 32.523438 L 12.867188 33.119141 L 12.867188 34.677734 L 12.867188 35.509766 L 13.570312 35.509766 L 19.472656 35.509766 L 20.173828 35.509766 L 20.173828 34.677734 L 20.173828 32.523438 L 20.173828 31.441406 C 20.173828 31.304794 20.156597 31.177281 20.091797 31.03125 C 20.059397 30.95824 20.015299 30.877916 19.923828 30.791016 C 19.832368 30.704116 19.667509 30.607422 19.472656 30.607422 L 18.927734 30.607422 L 18.927734 29.376953 C 18.927734 28.085184 17.867902 27.027344 16.576172 27.027344 L 16.435547 27.027344 z M 16.435547 28.220703 L 16.576172 28.220703 C 17.22782 28.220703 17.734375 28.725101 17.734375 29.376953 L 17.734375 30.607422 L 15.277344 30.607422 L 15.277344 29.376953 C 15.277344 28.725101 15.7839 28.220703 16.435547 28.220703 z M 13.109375 29.150391 L 8.9199219 32.509766 C 8.6599219 32.689766 8.6599219 33.109063 8.9199219 33.289062 L 11.869141 35.648438 L 11.869141 34.677734 L 11.869141 33.119141 L 11.869141 32.523438 L 11.869141 31.441406 C 11.869141 31.217489 11.912641 30.907486 12.037109 30.626953 C 12.093758 30.499284 12.228597 30.257492 12.429688 30.066406 C 12.580253 29.92335 12.859197 29.887344 13.085938 29.802734 L 13.085938 29.378906 C 13.085938 29.300761 13.104 29.227272 13.109375 29.150391 z M 16.435547 29.220703 C 16.301234 29.220703 16.277344 29.244432 16.277344 29.378906 L 16.277344 29.607422 L 16.734375 29.607422 L 16.734375 29.378906 C 16.734375 29.244433 16.712442 29.220703 16.578125 29.220703 L 16.435547 29.220703 z M 12.943359 36.509766 L 13.820312 37.210938 C 14.090314 37.460938 14.639141 37.210078 14.619141 36.830078 L 14.619141 36.509766 L 13.570312 36.509766 L 12.943359 36.509766 z M 10.330078 38.650391 L 10.339844 38.660156 C 10.099844 38.680156 9.9001562 38.910156 9.9101562 39.160156 L 9.9101562 41.630859 L 7.3007812 41.630859 C 6.2207812 41.630859 5.4403906 41.589844 4.9003906 41.589844 C 3.2603906 41.589844 3.6503906 42.020234 3.6503906 45.240234 L 3.6503906 49.710938 C 3.6503906 53.370936 3.4202344 53.409141 5.9902344 53.369141 L 4.6503906 52.269531 C 4.5503906 52.189531 4.4692187 52.070703 4.4492188 51.970703 C 4.4492188 51.800703 4.5203906 51.619531 4.6503906 51.519531 L 6.609375 49.919922 C 6.579375 49.859922 6.5703125 49.790703 6.5703125 49.720703 L 6.5703125 45.240234 C 6.5703125 44.800234 6.8490625 44.519531 7.2890625 44.519531 L 9.9003906 44.519531 L 9.9003906 47.019531 C 9.9003906 47.379531 10.399219 47.620391 10.699219 47.400391 L 15.630859 43.470703 C 15.870859 43.290703 15.870859 42.869453 15.630859 42.689453 L 10.689453 38.769531 C 10.589453 38.689531 10.460078 38.640391 10.330078 38.650391 z M 16.869141 41.585938 C 16.616211 41.581522 16.322969 41.584844 15.980469 41.589844 L 15.970703 41.589844 L 17.310547 42.689453 C 17.410547 42.759453 17.489766 42.889531 17.509766 43.019531 C 17.529766 43.179531 17.479609 43.319922 17.349609 43.419922 L 15.390625 45.019531 C 15.406724 45.075878 15.427133 45.132837 15.4375 45.197266 C 15.754974 45.096169 16.086404 45.027344 16.435547 45.027344 L 16.578125 45.027344 C 17.24129 45.027344 17.858323 45.230088 18.380859 45.568359 L 18.380859 45.25 C 18.380859 42.0475 18.639648 41.616836 16.869141 41.585938 z M 16.435547 46.027344 C 15.143818 46.027344 14.083984 47.085184 14.083984 48.376953 L 14.083984 49.607422 L 13.570312 49.607422 C 13.375448 49.607422 13.210603 49.704118 13.119141 49.791016 C 13.027691 49.877916 12.983569 49.958238 12.951172 50.03125 C 12.886382 50.177277 12.867187 50.304789 12.867188 50.441406 L 12.867188 51.523438 L 12.867188 52.119141 L 12.867188 53.677734 L 12.867188 54.509766 L 13.570312 54.509766 L 19.472656 54.509766 L 20.173828 54.509766 L 20.173828 53.677734 L 20.173828 51.523438 L 20.173828 50.441406 C 20.173828 50.304794 20.156597 50.177281 20.091797 50.03125 C 20.059397 49.95824 20.015299 49.877916 19.923828 49.791016 C 19.832368 49.704116 19.667509 49.607422 19.472656 49.607422 L 18.927734 49.607422 L 18.927734 48.376953 C 18.927734 47.085184 17.867902 46.027344 16.576172 46.027344 L 16.435547 46.027344 z M 16.435547 47.220703 L 16.576172 47.220703 C 17.22782 47.220703 17.734375 47.725101 17.734375 48.376953 L 17.734375 49.607422 L 15.277344 49.607422 L 15.277344 48.376953 C 15.277344 47.725101 15.7839 47.220703 16.435547 47.220703 z M 11.470703 47.490234 C 11.410703 47.510234 11.349063 47.539844 11.289062 47.589844 L 6.3496094 51.519531 C 6.1096094 51.699531 6.1096094 52.120781 6.3496094 52.300781 L 11.289062 56.220703 C 11.569064 56.440703 12.070312 56.199844 12.070312 55.839844 L 12.070312 55.509766 L 11.869141 55.509766 L 11.869141 53.677734 L 11.869141 52.119141 L 11.869141 51.523438 L 11.869141 50.441406 C 11.869141 50.217489 11.912641 49.907486 12.037109 49.626953 C 12.043809 49.611855 12.061451 49.584424 12.070312 49.566406 L 12.070312 47.960938 C 12.070312 47.660938 11.770703 47.430234 11.470703 47.490234 z M 16.435547 48.220703 C 16.301234 48.220703 16.277344 48.244432 16.277344 48.378906 L 16.277344 48.607422 L 16.734375 48.607422 L 16.734375 48.378906 C 16.734375 48.244433 16.712442 48.220703 16.578125 48.220703 L 16.435547 48.220703 z M 13.060547 57.650391 L 13.060547 57.660156 C 12.830547 57.690156 12.660156 57.920156 12.660156 58.160156 L 12.660156 60.630859 L 7.2792969 60.630859 C 6.1992969 60.630859 5.4208594 60.589844 4.8808594 60.589844 C 3.2408594 60.589844 3.6308594 61.020234 3.6308594 64.240234 L 3.6308594 69.109375 L 6.5605469 66.740234 L 6.5605469 64.240234 C 6.5605469 63.800234 6.8392969 63.519531 7.2792969 63.519531 L 12.660156 63.519531 L 12.660156 66.019531 C 12.660156 66.299799 12.960394 66.500006 13.226562 66.474609 C 13.625751 65.076914 14.904956 64.035678 16.421875 64.029297 L 18.380859 62.470703 C 18.620859 62.290703 18.620859 61.869453 18.380859 61.689453 L 13.439453 57.769531 C 13.339453 57.669531 13.200547 57.630391 13.060547 57.650391 z M 18.359375 63.810547 L 17.800781 64.269531 C 18.004793 64.350836 18.198411 64.450249 18.380859 64.568359 L 18.380859 64.25 L 18.380859 63.810547 L 18.359375 63.810547 z M 16.435547 65.027344 C 15.143818 65.027344 14.083984 66.085184 14.083984 67.376953 L 14.083984 68.607422 L 13.570312 68.607422 C 13.375448 68.607422 13.210603 68.704118 13.119141 68.791016 C 13.027691 68.877916 12.983569 68.958238 12.951172 69.03125 C 12.886382 69.177277 12.867187 69.304789 12.867188 69.441406 L 12.867188 70.523438 L 12.867188 71.119141 L 12.867188 72.677734 L 12.867188 73.509766 L 13.570312 73.509766 L 19.472656 73.509766 L 20.173828 73.509766 L 20.173828 72.677734 L 20.173828 70.523438 L 20.173828 69.441406 C 20.173828 69.304794 20.156597 69.177281 20.091797 69.03125 C 20.059397 68.95824 20.015299 68.877916 19.923828 68.791016 C 19.832368 68.704116 19.667509 68.607422 19.472656 68.607422 L 18.927734 68.607422 L 18.927734 67.376953 C 18.927734 66.085184 17.867902 65.027344 16.576172 65.027344 L 16.435547 65.027344 z M 16.435547 66.220703 L 16.576172 66.220703 C 17.22782 66.220703 17.734375 66.725101 17.734375 67.376953 L 17.734375 68.607422 L 15.277344 68.607422 L 15.277344 67.376953 C 15.277344 66.725101 15.7839 66.220703 16.435547 66.220703 z M 8.7207031 66.509766 C 8.6507031 66.529766 8.5895312 66.559375 8.5195312 66.609375 L 3.5996094 70.519531 C 3.3496094 70.699531 3.3496094 71.120781 3.5996094 71.300781 L 8.5292969 75.220703 C 8.8092969 75.440703 9.3105469 75.199844 9.3105469 74.839844 L 9.3105469 72.339844 L 11.869141 72.339844 L 11.869141 71.119141 L 11.869141 70.523438 L 11.869141 69.449219 L 9.3203125 69.449219 L 9.3203125 66.980469 C 9.3203125 66.680469 9.0007031 66.449766 8.7207031 66.509766 z M 16.435547 67.220703 C 16.301234 67.220703 16.277344 67.244432 16.277344 67.378906 L 16.277344 67.607422 L 16.734375 67.607422 L 16.734375 67.378906 C 16.734375 67.244433 16.712442 67.220703 16.578125 67.220703 L 16.435547 67.220703 z M 19.248047 78.800781 C 19.148558 78.831033 19.050295 78.90106 18.970703 78.970703 L 18.070312 79.869141 C 17.630312 79.569141 16.710703 79.619141 14.720703 79.619141 L 7.2792969 79.619141 C 6.1992969 79.619141 5.4208594 79.589844 4.8808594 79.589844 C 3.2408594 79.589844 3.6308594 80.020234 3.6308594 83.240234 L 3.6308594 83.939453 L 6.5605469 84.240234 L 6.5605469 83.240234 C 6.5605469 82.800234 6.8392969 82.519531 7.2792969 82.519531 L 14.720703 82.519531 C 14.920703 82.519531 15.090703 82.600703 15.220703 82.720703 L 13.419922 84.519531 C 13.279464 84.665607 13.281282 84.881022 13.363281 85.054688 C 13.880838 83.867655 15.067337 83.027344 16.435547 83.027344 L 16.578125 83.027344 C 18.290465 83.027344 19.703357 84.345788 19.890625 86.011719 L 19.960938 86.019531 C 20.240938 86.049531 20.520234 85.770234 20.490234 85.490234 L 19.789062 79.240234 C 19.789062 78.973661 19.498025 78.767523 19.25 78.800781 L 19.248047 78.800781 z M 16.435547 84.027344 C 15.143818 84.027344 14.083984 85.085184 14.083984 86.376953 L 14.083984 87.607422 L 13.570312 87.607422 C 13.375448 87.607422 13.210603 87.704118 13.119141 87.791016 C 13.027691 87.877916 12.983569 87.958238 12.951172 88.03125 C 12.886382 88.177277 12.867187 88.304789 12.867188 88.441406 L 12.867188 89.523438 L 12.867188 90.119141 L 12.867188 91.677734 L 12.867188 92.509766 L 13.570312 92.509766 L 19.472656 92.509766 L 20.173828 92.509766 L 20.173828 91.677734 L 20.173828 89.523438 L 20.173828 88.441406 C 20.173828 88.304794 20.156597 88.177281 20.091797 88.03125 C 20.059397 87.95824 20.015299 87.877916 19.923828 87.791016 C 19.832368 87.704116 19.667509 87.607422 19.472656 87.607422 L 18.927734 87.607422 L 18.927734 86.376953 C 18.927734 85.085184 17.867902 84.027344 16.576172 84.027344 L 16.435547 84.027344 z M 2.0507812 84.900391 C 1.8507824 84.970391 1.6907031 85.199453 1.7207031 85.439453 L 2.4199219 91.689453 C 2.4399219 92.049453 3 92.240929 3.25 91.960938 L 4.0507812 91.160156 C 4.0707812 91.160156 4.0898437 91.140156 4.0898438 91.160156 C 4.5498437 91.400156 5.4595313 91.330078 7.2695312 91.330078 L 11.869141 91.330078 L 11.869141 90.119141 L 11.869141 89.523438 L 11.869141 88.441406 C 11.869141 88.437991 11.871073 88.433136 11.871094 88.429688 L 7.2792969 88.429688 C 7.1292969 88.429688 6.9808594 88.400078 6.8808594 88.330078 L 8.8007812 86.400391 C 9.1007822 86.160391 8.8992969 85.600547 8.5292969 85.560547 L 2.25 84.910156 L 2.0507812 84.910156 L 2.0507812 84.900391 z M 16.435547 85.220703 L 16.576172 85.220703 C 17.22782 85.220703 17.734375 85.725101 17.734375 86.376953 L 17.734375 87.607422 L 15.277344 87.607422 L 15.277344 86.376953 C 15.277344 85.725101 15.7839 85.220703 16.435547 85.220703 z M 4.8808594 98.599609 C 3.5508594 98.599609 3.5400781 99.080402 3.5800781 100.90039 L 4.7207031 99.529297 C 4.8007031 99.429297 4.9405469 99.360078 5.0605469 99.330078 C 5.2205469 99.330078 5.4 99.409297 5.5 99.529297 L 7.1601562 101.56055 C 7.2001563 101.56055 7.2292969 101.5293 7.2792969 101.5293 L 14.720703 101.5293 C 15.060703 101.5293 15.289141 101.7293 15.369141 102.0293 L 12.939453 102.0293 C 12.599453 102.0793 12.410625 102.55055 12.640625 102.81055 L 13.470703 103.85742 C 14.029941 102.77899 15.146801 102.02734 16.435547 102.02734 L 16.578125 102.02734 C 18.158418 102.02734 19.491598 103.14879 19.835938 104.63086 L 21.279297 102.82031 C 21.499297 102.55031 21.260156 102.06078 20.910156 102.05078 L 18.400391 102.05078 C 18.420391 98.150792 19.000234 98.650391 14.740234 98.650391 L 7.2792969 98.650391 C 6.1992969 98.650391 5.4208594 98.609375 4.8808594 98.609375 L 4.8808594 98.599609 z M 5.0292969 101.06055 C 4.9292969 101.09055 4.83 101.15977 4.75 101.25977 L 0.81054688 106.16016 C 0.61054688 106.44016 0.8409375 106.92945 1.2109375 106.93945 L 3.5996094 106.93945 C 3.5796094 110.87945 3.1497656 110.33984 7.2597656 110.33984 L 11.869141 110.33984 L 11.869141 109.11914 L 11.869141 108.52344 L 11.869141 107.44141 L 11.869141 107.43945 L 7.2792969 107.43945 C 6.9292969 107.43945 6.7091406 107.23945 6.6191406 106.93945 L 9.0605469 106.93945 C 9.4305469 106.93945 9.6909375 106.44016 9.4609375 106.16016 L 5.5 101.25977 C 5.4 101.10977 5.1992969 101.03055 5.0292969 101.06055 z M 16.435547 103.02734 C 15.143818 103.02734 14.083984 104.08518 14.083984 105.37695 L 14.083984 106.60742 L 13.570312 106.60742 C 13.375448 106.60742 13.210603 106.70409 13.119141 106.79102 C 13.027691 106.87792 12.983569 106.95823 12.951172 107.03125 C 12.886382 107.17727 12.867187 107.30479 12.867188 107.44141 L 12.867188 108.52344 L 12.867188 109.11914 L 12.867188 110.67773 L 12.867188 111.50977 L 13.570312 111.50977 L 19.472656 111.50977 L 20.173828 111.50977 L 20.173828 110.67773 L 20.173828 108.52344 L 20.173828 107.44141 C 20.173828 107.3048 20.156597 107.17728 20.091797 107.03125 C 20.059397 106.95825 20.015299 106.87792 19.923828 106.79102 C 19.832368 106.70412 19.667509 106.60742 19.472656 106.60742 L 18.927734 106.60742 L 18.927734 105.37695 C 18.927734 104.08518 17.867902 103.02734 16.576172 103.02734 L 16.435547 103.02734 z M 16.435547 104.2207 L 16.576172 104.2207 C 17.22782 104.2207 17.734375 104.7251 17.734375 105.37695 L 17.734375 106.60742 L 15.277344 106.60742 L 15.277344 105.37695 C 15.277344 104.7251 15.7839 104.2207 16.435547 104.2207 z M 16.435547 105.2207 C 16.301234 105.2207 16.277344 105.24444 16.277344 105.37891 L 16.277344 105.60742 L 16.734375 105.60742 L 16.734375 105.37891 C 16.734375 105.24441 16.712442 105.2207 16.578125 105.2207 L 16.435547 105.2207 z M 4.8808594 117.58984 L 4.8808594 117.59961 C 3.7208594 117.59961 3.5800781 117.90016 3.5800781 119.16016 L 4.7207031 117.7793 C 4.8007031 117.6793 4.9405469 117.63914 5.0605469 117.61914 C 5.2205469 117.61914 5.4 117.6593 5.5 117.7793 L 7.7207031 120.5293 L 14.720703 120.5293 C 15.123595 120.5293 15.408576 120.79174 15.431641 121.20117 C 15.750992 121.09876 16.08404 121.02734 16.435547 121.02734 L 16.578125 121.02734 C 17.24903 121.02734 17.874081 121.23262 18.400391 121.57812 L 18.400391 121.25 C 18.400391 117.05 19.120234 117.61914 14.740234 117.61914 L 7.2792969 117.61914 C 6.1992969 117.61914 5.4208594 117.58984 4.8808594 117.58984 z M 4.9804688 119.33984 C 4.8804688 119.36984 4.81 119.44 4.75 119.5 L 0.80078125 124.43945 C 0.60078125 124.71945 0.8292182 125.2107 1.1992188 125.2207 L 3.5996094 125.2207 L 3.5996094 125.7207 C 3.5996094 129.9807 3.0497656 129.33984 7.2597656 129.33984 L 11.869141 129.33984 L 11.869141 128.11914 L 11.869141 127.52344 L 11.869141 126.44141 C 11.869141 126.43799 11.871073 126.43314 11.871094 126.42969 L 7.2792969 126.42969 C 6.8392969 126.42969 6.5605469 126.13094 6.5605469 125.71094 L 6.5605469 125.21094 L 9.0605469 125.21094 C 9.4305469 125.23094 9.6909375 124.70969 9.4609375 124.42969 L 5.5 119.5 C 5.3820133 119.35252 5.1682348 119.28513 4.9804688 119.33984 z M 12.839844 121.7793 C 12.539844 121.8793 12.410625 122.32055 12.640625 122.56055 L 13.267578 123.34375 C 13.473522 122.72168 13.852237 122.1828 14.353516 121.7793 L 12.839844 121.7793 z M 18.658203 121.7793 C 19.393958 122.37155 19.878978 123.25738 19.916016 124.25781 L 21.279297 122.56055 C 21.499297 122.28055 21.260156 121.7893 20.910156 121.7793 L 18.658203 121.7793 z M 16.435547 122.02734 C 15.143818 122.02734 14.083984 123.08518 14.083984 124.37695 L 14.083984 125.60742 L 13.570312 125.60742 C 13.375448 125.60742 13.210603 125.70409 13.119141 125.79102 C 13.027691 125.87792 12.983569 125.95823 12.951172 126.03125 C 12.886382 126.17727 12.867187 126.30479 12.867188 126.44141 L 12.867188 127.52344 L 12.867188 128.11914 L 12.867188 129.67773 L 12.867188 130.50977 L 13.570312 130.50977 L 19.472656 130.50977 L 20.173828 130.50977 L 20.173828 129.67773 L 20.173828 127.52344 L 20.173828 126.44141 C 20.173828 126.3048 20.156597 126.17728 20.091797 126.03125 C 20.059397 125.95825 20.015299 125.87792 19.923828 125.79102 C 19.832368 125.70412 19.667509 125.60742 19.472656 125.60742 L 18.927734 125.60742 L 18.927734 124.37695 C 18.927734 123.08518 17.867902 122.02734 16.576172 122.02734 L 16.435547 122.02734 z M 16.435547 123.2207 L 16.576172 123.2207 C 17.22782 123.2207 17.734375 123.7251 17.734375 124.37695 L 17.734375 125.60742 L 15.277344 125.60742 L 15.277344 124.37695 C 15.277344 123.7251 15.7839 123.2207 16.435547 123.2207 z M 16.435547 124.2207 C 16.301234 124.2207 16.277344 124.24444 16.277344 124.37891 L 16.277344 124.60742 L 16.734375 124.60742 L 16.734375 124.37891 C 16.734375 124.24441 16.712442 124.2207 16.578125 124.2207 L 16.435547 124.2207 z M 5.9394531 136.58984 L 5.9394531 136.59961 L 8.3105469 139.5293 L 14.730469 139.5293 C 15.131912 139.5293 15.414551 139.79039 15.439453 140.19727 C 15.756409 140.09653 16.087055 140.02734 16.435547 140.02734 L 16.578125 140.02734 C 17.24903 140.02734 17.874081 140.23261 18.400391 140.57812 L 18.400391 140.25 C 18.400391 136.05 19.120234 136.61914 14.740234 136.61914 L 7.2792969 136.61914 C 6.6792969 136.61914 6.3594531 136.59984 5.9394531 136.58984 z M 4.2207031 136.66016 C 3.8207031 136.74016 3.6791406 136.96016 3.6191406 137.41016 L 4.2207031 136.66992 L 4.2207031 136.66016 z M 5.0605469 137.57031 L 5.0605469 137.58984 C 4.9405469 137.58984 4.8197656 137.66953 4.7597656 137.76953 L 0.81054688 142.66992 C 0.57054688 142.96992 0.8109375 143.50023 1.2109375 143.49023 L 3.5996094 143.49023 L 3.5996094 144.71094 C 3.5996094 148.97094 3.0497656 148.33008 7.2597656 148.33008 L 11.869141 148.33008 L 11.869141 147.11914 L 11.869141 146.52344 L 11.869141 145.44141 C 11.869141 145.43799 11.871073 145.43314 11.871094 145.42969 L 7.2792969 145.42969 C 6.8392969 145.42969 6.5605469 145.13094 6.5605469 144.71094 L 6.5605469 143.49023 L 9.0605469 143.49023 C 9.4605469 143.53023 9.7309375 142.95945 9.4609375 142.68945 L 5.5 137.76953 C 5.4 137.63953 5.2305469 137.57031 5.0605469 137.57031 z M 16.435547 141.02734 C 15.143818 141.02734 14.083984 142.08518 14.083984 143.37695 L 14.083984 144.60742 L 13.570312 144.60742 C 13.375448 144.60742 13.210603 144.70409 13.119141 144.79102 C 13.027691 144.87792 12.983569 144.95823 12.951172 145.03125 C 12.886382 145.17727 12.867187 145.30479 12.867188 145.44141 L 12.867188 146.52344 L 12.867188 147.11914 L 12.867188 148.67773 L 12.867188 149.50977 L 13.570312 149.50977 L 19.472656 149.50977 L 20.173828 149.50977 L 20.173828 148.67773 L 20.173828 146.52344 L 20.173828 145.44141 C 20.173828 145.3048 20.156597 145.17728 20.091797 145.03125 C 20.059397 144.95825 20.015299 144.87792 19.923828 144.79102 C 19.832368 144.70412 19.667509 144.60742 19.472656 144.60742 L 18.927734 144.60742 L 18.927734 143.37695 C 18.927734 142.08518 17.867902 141.02734 16.576172 141.02734 L 16.435547 141.02734 z M 12.849609 141.5 C 12.549609 141.6 12.420391 142.0393 12.650391 142.2793 L 13.136719 142.88672 C 13.213026 142.38119 13.390056 141.90696 13.667969 141.5 L 12.849609 141.5 z M 19.34375 141.5 C 19.710704 142.03735 19.927734 142.68522 19.927734 143.37891 L 19.927734 143.79102 C 19.965561 143.80421 20.005506 143.81448 20.044922 143.82617 L 21.289062 142.2793 C 21.509062 141.9993 21.269922 141.51 20.919922 141.5 L 19.34375 141.5 z M 16.435547 142.2207 L 16.576172 142.2207 C 17.22782 142.2207 17.734375 142.7251 17.734375 143.37695 L 17.734375 144.60742 L 15.277344 144.60742 L 15.277344 143.37695 C 15.277344 142.7251 15.7839 142.2207 16.435547 142.2207 z M 16.435547 143.2207 C 16.301234 143.2207 16.277344 143.24444 16.277344 143.37891 L 16.277344 143.60742 L 16.734375 143.60742 L 16.734375 143.37891 C 16.734375 143.24441 16.712442 143.2207 16.578125 143.2207 L 16.435547 143.2207 z M 17.130859 155.59961 C 16.580859 155.57961 15.810469 155.63086 14.730469 155.63086 L 6.5292969 155.63086 L 8.9101562 158.5293 L 14.730469 158.5293 C 15.131912 158.5293 15.414551 158.79039 15.439453 159.19727 C 15.756409 159.09653 16.087055 159.02734 16.435547 159.02734 L 16.578125 159.02734 C 17.24903 159.02734 17.874081 159.23261 18.400391 159.57812 L 18.400391 159.25977 C 18.400391 156.10977 18.800391 155.63961 17.150391 155.59961 L 17.130859 155.59961 z M 5.0292969 155.86914 L 5.0292969 155.88086 C 4.9292969 155.90086 4.83 155.98055 4.75 156.06055 L 0.81054688 160.96094 C 0.61054688 161.26094 0.8409375 161.73977 1.2109375 161.75977 L 3.5996094 161.75977 L 3.5996094 163.7207 C 3.5996094 167.9807 3.0497656 167.33984 7.2597656 167.33984 L 11.869141 167.33984 L 11.869141 166.11914 L 11.869141 165.52344 L 11.869141 164.44141 L 11.869141 164.43945 L 7.2792969 164.43945 C 6.8392969 164.43945 6.5605469 164.1407 6.5605469 163.7207 L 6.5605469 161.75 L 9.0605469 161.75 C 9.4305469 161.77 9.6909375 161.2507 9.4609375 160.9707 L 5.5 156.07031 C 5.4 155.92031 5.1992969 155.84914 5.0292969 155.86914 z M 16.435547 160.02734 C 15.143818 160.02734 14.083984 161.08518 14.083984 162.37695 L 14.083984 163.60742 L 13.570312 163.60742 C 13.375448 163.60742 13.210603 163.70409 13.119141 163.79102 C 13.027691 163.87792 12.983569 163.95823 12.951172 164.03125 C 12.886382 164.17727 12.867187 164.30479 12.867188 164.44141 L 12.867188 165.52344 L 12.867188 166.11914 L 12.867188 167.67773 L 12.867188 168.50977 L 13.570312 168.50977 L 19.472656 168.50977 L 20.173828 168.50977 L 20.173828 167.67773 L 20.173828 165.52344 L 20.173828 164.44141 C 20.173828 164.3048 20.156597 164.17728 20.091797 164.03125 C 20.059397 163.95825 20.015299 163.87792 19.923828 163.79102 C 19.832368 163.70412 19.667509 163.60742 19.472656 163.60742 L 18.927734 163.60742 L 18.927734 162.37695 C 18.927734 161.08518 17.867902 160.02734 16.576172 160.02734 L 16.435547 160.02734 z M 12.900391 161.2207 C 12.580391 161.2807 12.419141 161.74 12.619141 162 L 13.085938 162.58594 L 13.085938 162.37891 C 13.085938 161.97087 13.170592 161.58376 13.306641 161.2207 L 12.900391 161.2207 z M 16.435547 161.2207 L 16.576172 161.2207 C 17.22782 161.2207 17.734375 161.7251 17.734375 162.37695 L 17.734375 163.60742 L 15.277344 163.60742 L 15.277344 162.37695 C 15.277344 161.7251 15.7839 161.2207 16.435547 161.2207 z M 19.708984 161.23047 C 19.842743 161.59081 19.927734 161.97449 19.927734 162.37891 L 19.927734 162.79102 C 20.119162 162.85779 20.322917 162.91147 20.484375 163 L 21.279297 162.00977 C 21.499297 161.72977 21.260156 161.24047 20.910156 161.23047 L 19.708984 161.23047 z M 16.435547 162.2207 C 16.301234 162.2207 16.277344 162.24444 16.277344 162.37891 L 16.277344 162.60742 L 16.734375 162.60742 L 16.734375 162.37891 C 16.734375 162.24441 16.712442 162.2207 16.578125 162.2207 L 16.435547 162.2207 z M 5.0996094 174.49023 L 5.1308594 174.5 C 4.9808594 174.5 4.83 174.56922 4.75 174.69922 L 0.80078125 179.59961 C 0.56078125 179.86961 0.7992182 180.42039 1.1992188 180.40039 L 3.5996094 180.40039 L 3.5996094 182.7207 C 3.5996094 186.9807 3.0497656 186.33984 7.2597656 186.33984 L 11.869141 186.33984 L 11.869141 185.11914 L 11.869141 184.52344 L 11.869141 183.44141 L 11.869141 183.43945 L 7.25 183.43945 C 6.82 183.43945 6.5507814 183.1407 6.5507812 182.7207 L 6.5507812 180.41992 L 9.0507812 180.41992 C 9.4307824 180.44992 9.7092187 179.87984 9.4492188 179.58984 L 5.4804688 174.68945 C 5.3804688 174.55945 5.2496094 174.49023 5.0996094 174.49023 z M 17.150391 174.58008 L 17.130859 174.59961 C 16.580859 174.57961 15.810469 174.63086 14.730469 174.63086 L 6.8300781 174.63086 L 9.1796875 177.5293 L 14.699219 177.5293 C 15.104107 177.5293 15.391475 177.79407 15.412109 178.20703 C 15.737096 178.1006 16.076913 178.02734 16.435547 178.02734 L 16.578125 178.02734 C 17.24903 178.02734 17.874081 178.2326 18.400391 178.57812 L 18.400391 178.24023 C 18.400391 175.09023 18.800391 174.62008 17.150391 174.58008 z M 16.435547 179.02734 C 15.143818 179.02734 14.083984 180.08518 14.083984 181.37695 L 14.083984 182.60742 L 13.570312 182.60742 C 13.375448 182.60742 13.210603 182.70409 13.119141 182.79102 C 13.027691 182.87792 12.983569 182.95823 12.951172 183.03125 C 12.886382 183.17727 12.867187 183.30479 12.867188 183.44141 L 12.867188 184.52344 L 12.867188 185.11914 L 12.867188 186.67773 L 12.867188 187.50977 L 13.570312 187.50977 L 19.472656 187.50977 L 20.173828 187.50977 L 20.173828 186.67773 L 20.173828 184.52344 L 20.173828 183.44141 C 20.173828 183.3048 20.156597 183.17728 20.091797 183.03125 C 20.059397 182.95825 20.015299 182.87792 19.923828 182.79102 C 19.832368 182.70412 19.667509 182.60742 19.472656 182.60742 L 18.927734 182.60742 L 18.927734 181.37695 C 18.927734 180.08518 17.867902 179.02734 16.576172 179.02734 L 16.435547 179.02734 z M 16.435547 180.2207 L 16.576172 180.2207 C 17.22782 180.2207 17.734375 180.7251 17.734375 181.37695 L 17.734375 182.60742 L 15.277344 182.60742 L 15.277344 181.37695 C 15.277344 180.7251 15.7839 180.2207 16.435547 180.2207 z M 19.816406 180.57031 C 19.882311 180.83091 19.927734 181.09907 19.927734 181.37891 L 19.927734 181.79102 C 20.168811 181.87511 20.455966 181.91694 20.613281 182.06641 C 20.630645 182.0829 20.639883 182.10199 20.65625 182.11914 L 21.259766 181.36914 C 21.479766 181.06914 21.240625 180.59031 20.890625 180.57031 L 19.816406 180.57031 z M 12.820312 180.58984 C 12.520316 180.68984 12.389141 181.11914 12.619141 181.36914 L 12.990234 181.83203 C 13.022029 181.82207 13.055579 181.81406 13.085938 181.80273 L 13.085938 181.37891 C 13.085938 181.10616 13.128698 180.84442 13.191406 180.58984 L 12.820312 180.58984 z M 16.435547 181.2207 C 16.301234 181.2207 16.277344 181.24444 16.277344 181.37891 L 16.277344 181.60742 L 16.734375 181.60742 L 16.734375 181.37891 C 16.734375 181.24441 16.712442 181.2207 16.578125 181.2207 L 16.435547 181.2207 z M 4.9609375 193.15039 L 4.9707031 193.16016 C 4.8707031 193.19016 4.8 193.25984 4.75 193.33984 L 0.81054688 198.24023 C 0.61054688 198.54023 0.8409375 199.01906 1.2109375 199.03906 L 3.5996094 199.03906 L 3.5996094 201.7207 C 3.5996094 205.9807 3.0497656 205.33984 7.2597656 205.33984 L 11.869141 205.33984 L 11.869141 204.11914 L 11.869141 203.52344 L 11.869141 202.44141 C 11.869141 202.44141 11.869141 202.43945 11.869141 202.43945 L 7.2695312 202.43945 C 6.8295312 202.43945 6.5507814 202.1407 6.5507812 201.7207 L 6.5507812 199.01953 L 9.0507812 199.01953 C 9.4207814 199.04953 9.6792188 198.54 9.4492188 198.25 L 5.4902344 193.34961 C 5.3702344 193.17961 5.1509375 193.10039 4.9609375 193.15039 z M 17.150391 193.58008 L 17.130859 193.58984 C 16.580859 193.56984 15.810469 193.61914 14.730469 193.61914 L 7.0996094 193.61914 L 9.4199219 196.46094 L 9.4492188 196.51953 L 14.699219 196.51953 C 15.106887 196.51953 15.397075 196.78718 15.414062 197.20508 C 15.738375 197.09913 16.077769 197.02734 16.435547 197.02734 L 16.578125 197.02734 C 17.24903 197.02734 17.874081 197.23259 18.400391 197.57812 L 18.400391 197.24023 C 18.400391 194.09023 18.800391 193.62008 17.150391 193.58008 z M 16.435547 198.02734 C 15.143818 198.02734 14.083984 199.08518 14.083984 200.37695 L 14.083984 201.60742 L 13.570312 201.60742 C 13.375448 201.60742 13.210603 201.70409 13.119141 201.79102 C 13.027691 201.87792 12.983569 201.95823 12.951172 202.03125 C 12.886382 202.17727 12.867187 202.30479 12.867188 202.44141 L 12.867188 203.52344 L 12.867188 204.11914 L 12.867188 205.67773 L 12.867188 206.50977 L 13.570312 206.50977 L 19.472656 206.50977 L 20.173828 206.50977 L 20.173828 205.67773 L 20.173828 203.52344 L 20.173828 202.44141 C 20.173828 202.3048 20.156597 202.17728 20.091797 202.03125 C 20.059397 201.95825 20.015299 201.87792 19.923828 201.79102 C 19.832368 201.70412 19.667509 201.60742 19.472656 201.60742 L 18.927734 201.60742 L 18.927734 200.37695 C 18.927734 199.08518 17.867902 198.02734 16.576172 198.02734 L 16.435547 198.02734 z M 16.435547 199.2207 L 16.576172 199.2207 C 17.22782 199.2207 17.734375 199.7251 17.734375 200.37695 L 17.734375 201.60742 L 15.277344 201.60742 L 15.277344 200.37695 C 15.277344 199.7251 15.7839 199.2207 16.435547 199.2207 z M 12.919922 199.93945 C 12.559922 199.95945 12.359141 200.48023 12.619141 200.74023 L 12.751953 200.9043 C 12.862211 200.87013 12.980058 200.84224 13.085938 200.80273 L 13.085938 200.37891 C 13.085938 200.22863 13.111295 200.08474 13.130859 199.93945 L 12.919922 199.93945 z M 19.882812 199.93945 C 19.902378 200.08474 19.927734 200.22863 19.927734 200.37891 L 19.927734 200.79102 C 20.168811 200.87511 20.455966 200.91694 20.613281 201.06641 C 20.691227 201.14046 20.749315 201.22305 20.806641 201.30273 L 21.259766 200.74023 C 21.519766 200.46023 21.260625 199.90945 20.890625 199.93945 L 19.882812 199.93945 z M 16.435547 200.2207 C 16.301234 200.2207 16.277344 200.24444 16.277344 200.37891 L 16.277344 200.60742 L 16.734375 200.60742 L 16.734375 200.37891 C 16.734375 200.24441 16.712442 200.2207 16.578125 200.2207 L 16.435547 200.2207 z ' fill='#{hex-color($highlight-text-color)}' stroke-width='0' /></svg>"); + } + } + + &.disabled { + i.fa-retweet, + &:hover i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 18.972656 1.2011719 C 18.829825 1.1881782 18.685932 1.2302188 18.572266 1.3300781 L 15.990234 3.5996094 C 15.58109 3.6070661 15.297269 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 12.664062 6.5195312 L 6.5761719 11.867188 C 6.5674697 11.818249 6.5507813 11.773891 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 13.045739 3.5690668 13.895038 3.6503906 14.4375 L 2.6152344 15.347656 C 2.3879011 15.547375 2.3754917 15.901081 2.5859375 16.140625 L 3.1464844 16.78125 C 3.3569308 17.020794 3.7101667 17.053234 3.9375 16.853516 L 19.892578 2.8359375 C 20.119911 2.6362188 20.134275 2.282513 19.923828 2.0429688 L 19.361328 1.4023438 C 19.256105 1.282572 19.115488 1.2141655 18.972656 1.2011719 z M 18.410156 6.7753906 L 15.419922 9.4042969 L 15.419922 9.9394531 L 14.810547 9.9394531 L 13.148438 11.400391 L 16.539062 15.640625 C 16.719062 15.890625 17.140313 15.890625 17.320312 15.640625 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 18.400391 9.9394531 L 18.400391 7.2402344 C 18.400391 7.0470074 18.407711 6.9489682 18.410156 6.7753906 z M 11.966797 12.439453 L 8.6679688 15.339844 L 14.919922 15.339844 L 12.619141 12.5 C 12.589141 12.48 12.590313 12.459453 12.570312 12.439453 L 11.966797 12.439453 z' fill='#{hex-color(darken($action-button-color, 13%))}' stroke-width='0'/></svg>"); + } } -} -button.icon-button.disabled i.fa-retweet { - &, - &:hover { - background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='209' width='22'><path d='M 18.972656 1.2011719 C 18.829825 1.1881782 18.685932 1.2302188 18.572266 1.3300781 L 15.990234 3.5996094 C 15.58109 3.6070661 15.297269 3.609375 14.730469 3.609375 L 7.0996094 3.609375 L 9.4199219 6.4609375 L 9.4492188 6.5195312 L 12.664062 6.5195312 L 6.5761719 11.867188 C 6.5674697 11.818249 6.5507813 11.773891 6.5507812 11.720703 L 6.5507812 9.0195312 L 9.0507812 9.0195312 C 9.4207813 9.0495313 9.6792188 8.54 9.4492188 8.25 L 5.5 3.3496094 C 5.38 3.1796094 5.1607031 3.1003906 4.9707031 3.1503906 L 4.9707031 3.1601562 C 4.8707031 3.1901563 4.8 3.2598438 4.75 3.3398438 L 0.80078125 8.2402344 C 0.60078125 8.5402344 0.8292187 9.0190625 1.1992188 9.0390625 L 3.5996094 9.0390625 L 3.5996094 11.720703 C 3.5996094 13.045739 3.5690668 13.895038 3.6503906 14.4375 L 2.6152344 15.347656 C 2.3879011 15.547375 2.3754917 15.901081 2.5859375 16.140625 L 3.1464844 16.78125 C 3.3569308 17.020794 3.7101667 17.053234 3.9375 16.853516 L 19.892578 2.8359375 C 20.119911 2.6362188 20.134275 2.282513 19.923828 2.0429688 L 19.361328 1.4023438 C 19.256105 1.282572 19.115488 1.2141655 18.972656 1.2011719 z M 18.410156 6.7753906 L 15.419922 9.4042969 L 15.419922 9.9394531 L 14.810547 9.9394531 L 13.148438 11.400391 L 16.539062 15.640625 C 16.719062 15.890625 17.140313 15.890625 17.320312 15.640625 L 21.259766 10.740234 C 21.519766 10.460234 21.260625 9.9094531 20.890625 9.9394531 L 18.400391 9.9394531 L 18.400391 7.2402344 C 18.400391 7.0470074 18.407711 6.9489682 18.410156 6.7753906 z M 11.966797 12.439453 L 8.6679688 15.339844 L 14.919922 15.339844 L 12.619141 12.5 C 12.589141 12.48 12.590313 12.459453 12.570312 12.439453 L 11.966797 12.439453 z' fill='#{hex-color(darken($action-button-color, 13%))}' stroke-width='0'/></svg>"); + .media-modal__overlay .picture-in-picture__footer & { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='209'><path d='M4.97 3.16c-.1.03-.17.1-.22.18L.8 8.24c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77L5.5 3.35c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.02-2.4.02H7.1l2.32 2.85.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($white)}' stroke-width='0'/><path d='M7.78 19.66c-.24.02-.44.25-.44.5v2.46h-.06c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v4.47c0 4.26-.56 3.62 3.65 3.62H8.5l-1.3-1.06c-.1-.08-.18-.2-.2-.3-.02-.17.06-.35.2-.45l1.33-1.1H7.28c-.44 0-.72-.3-.72-.7v-4.48c0-.44.28-.72.72-.72h.06v2.5c0 .38.54.63.82.38l4.9-3.93c.25-.18.25-.6 0-.78l-4.9-3.92c-.1-.1-.24-.14-.38-.12zm9.34 2.93c-.54-.02-1.3.02-2.4.02h-1.25l1.3 1.07c.1.07.18.2.2.33.02.16-.06.3-.2.4l-1.33 1.1h1.28c.42 0 .72.28.72.72v4.47c0 .42-.3.72-.72.72h-.1v-2.47c0-.3-.3-.53-.6-.47-.07 0-.14.05-.2.1l-4.9 3.93c-.26.18-.26.6 0 .78l4.9 3.92c.27.25.82 0 .8-.38v-2.5h.1c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.15.4-3.62-1.25-3.66zM10.34 38.66c-.24.02-.44.25-.43.5v2.47H7.3c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.47c0 3.66-.23 3.7 2.34 3.66l-1.34-1.1c-.1-.08-.18-.2-.2-.3 0-.17.07-.35.2-.45l1.96-1.6c-.03-.06-.04-.13-.04-.2v-4.48c0-.44.28-.72.72-.72H9.9v2.5c0 .36.5.6.8.38l4.93-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.08-.23-.13-.36-.12zm5.63 2.93l1.34 1.1c.1.07.18.2.2.33.02.16-.03.3-.16.4l-1.96 1.6c.02.07.06.13.06.22v4.47c0 .42-.3.72-.72.72h-2.66v-2.47c0-.3-.3-.53-.6-.47-.06.02-.12.05-.18.1l-4.94 3.93c-.24.18-.24.6 0 .78l4.94 3.92c.28.22.78-.02.78-.38v-2.5h2.66c4.27 0 3.65.67 3.65-3.62v-4.47c0-3.66.34-3.7-2.4-3.66zM13.06 57.66c-.23.03-.4.26-.4.5v2.47H7.28c-1.08 0-1.86-.04-2.4-.04-1.64 0-1.25.43-1.25 3.65v4.87l2.93-2.37v-2.5c0-.44.28-.72.72-.72h5.38v2.5c0 .36.5.6.78.38l4.94-3.93c.24-.18.24-.6 0-.78l-4.94-3.92c-.1-.1-.24-.14-.38-.12zm5.3 6.15l-2.92 2.4v2.52c0 .42-.3.72-.72.72h-5.4v-2.47c0-.3-.32-.53-.6-.47-.07.02-.13.05-.2.1L3.6 70.52c-.25.18-.25.6 0 .78l4.93 3.92c.28.22.78-.02.78-.38v-2.5h5.42c4.27 0 3.65.67 3.65-3.62v-4.47-.44zM19.25 78.8c-.1.03-.2.1-.28.17l-.9.9c-.44-.3-1.36-.25-3.35-.25H7.28c-1.08 0-1.86-.03-2.4-.03-1.64 0-1.25.43-1.25 3.65v.7l2.93.3v-1c0-.44.28-.72.72-.72h7.44c.2 0 .37.08.5.2l-1.8 1.8c-.25.26-.08.76.27.8l6.27.7c.28.03.56-.25.53-.53l-.7-6.25c0-.27-.3-.48-.55-.44zm-17.2 6.1c-.2.07-.36.3-.33.54l.7 6.25c.02.36.58.55.83.27l.8-.8c.02 0 .04-.02.04 0 .46.24 1.37.17 3.18.17h7.44c4.27 0 3.65.67 3.65-3.62v-.75l-2.93-.3v1.05c0 .42-.3.72-.72.72H7.28c-.15 0-.3-.03-.4-.1L8.8 86.4c.3-.24.1-.8-.27-.84l-6.28-.65h-.2zM4.88 98.6c-1.33 0-1.34.48-1.3 2.3l1.14-1.37c.08-.1.22-.17.34-.2.16 0 .34.08.44.2l1.66 2.03c.04 0 .07-.03.12-.03h7.44c.34 0 .57.2.65.5h-2.43c-.34.05-.53.52-.3.78l3.92 4.95c.18.24.6.24.78 0l3.94-4.94c.22-.27-.02-.76-.37-.77H18.4c.02-3.9.6-3.4-3.66-3.4H7.28c-1.08 0-1.86-.04-2.4-.04zm.15 2.46c-.1.03-.2.1-.28.2l-3.94 4.9c-.2.28.03.77.4.78H3.6c-.02 3.94-.45 3.4 3.66 3.4h7.44c3.65 0 3.74.3 3.7-2.25l-1.1 1.34c-.1.1-.2.17-.32.2-.16 0-.34-.08-.44-.2l-1.65-2.03c-.06.02-.1.04-.18.04H7.28c-.35 0-.57-.2-.66-.5h2.44c.37 0 .63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.23-.47-.2zM4.88 117.6c-1.16 0-1.3.3-1.3 1.56l1.14-1.38c.08-.1.22-.14.34-.16.16 0 .34.04.44.16l2.22 2.75h7c.42 0 .72.28.72.72v.53h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-.53c0-4.2.72-3.63-3.66-3.63H7.28c-1.08 0-1.86-.03-2.4-.03zm.1 1.74c-.1.03-.17.1-.23.16L.8 124.44c-.2.28.03.77.4.78H3.6v.5c0 4.26-.55 3.62 3.66 3.62h7.44c1.03 0 1.74.02 2.28 0-.16.02-.34-.03-.44-.15l-2.22-2.76H7.28c-.44 0-.72-.3-.72-.72v-.5h2.5c.37.02.63-.5.4-.78L5.5 119.5c-.12-.15-.34-.22-.53-.16zm12.02 10c1.2-.02 1.4-.25 1.4-1.53l-1.1 1.36c-.07.1-.17.17-.3.18zM5.94 136.6l2.37 2.93h6.42c.42 0 .72.28.72.72v1.25h-2.6c-.3.1-.43.54-.2.78l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.25c0-4.2.72-3.63-3.66-3.63H7.28c-.6 0-.92-.02-1.34-.03zm-1.72.06c-.4.08-.54.3-.6.75l.6-.74zm.84.93c-.12 0-.24.08-.3.18l-3.95 4.9c-.24.3 0 .83.4.82H3.6v1.22c0 4.26-.55 3.62 3.66 3.62h7.44c.63 0 .97.02 1.4.03l-2.37-2.93H7.28c-.44 0-.72-.3-.72-.72v-1.22h2.5c.4.04.67-.53.4-.8l-3.96-4.92c-.1-.13-.27-.2-.44-.2zm13.28 10.03l-.56.7c.36-.07.5-.3.56-.7zM17.13 155.6c-.55-.02-1.32.03-2.4.03h-8.2l2.38 2.9h5.82c.42 0 .72.28.72.72v1.97H12.9c-.32.06-.48.52-.28.78l3.94 4.94c.2.23.6.22.78-.03l3.94-4.9c.22-.28-.02-.77-.37-.78H18.4v-1.97c0-3.15.4-3.62-1.25-3.66zm-12.1.28c-.1.02-.2.1-.28.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v1.96c0 4.26-.55 3.62 3.66 3.62h8.24l-2.36-2.9H7.28c-.44 0-.72-.3-.72-.72v-1.97h2.5c.37.02.63-.5.4-.78l-3.96-4.9c-.1-.15-.3-.22-.47-.2zM5.13 174.5c-.15 0-.3.07-.38.2L.8 179.6c-.24.27 0 .82.4.8H3.6v2.32c0 4.26-.55 3.62 3.66 3.62h7.94l-2.35-2.9h-5.6c-.43 0-.7-.3-.7-.72v-2.3h2.5c.38.03.66-.54.4-.83l-3.97-4.9c-.1-.13-.23-.2-.38-.2zm12 .1c-.55-.02-1.32.03-2.4.03H6.83l2.35 2.9h5.52c.42 0 .72.28.72.72v2.34h-2.6c-.3.1-.43.53-.2.78l3.92 4.9c.18.24.6.24.78 0l3.94-4.9c.22-.3-.02-.78-.37-.8H18.4v-2.33c0-3.15.4-3.62-1.25-3.66zM4.97 193.16c-.1.03-.17.1-.22.18l-3.94 4.9c-.2.3.03.78.4.8H3.6v2.68c0 4.26-.55 3.62 3.66 3.62h7.66l-2.3-2.84c-.03-.02-.03-.04-.05-.06H7.27c-.44 0-.72-.3-.72-.72v-2.7h2.5c.37.03.63-.48.4-.77l-3.96-4.9c-.12-.17-.34-.25-.53-.2zm12.16.43c-.55-.02-1.32.03-2.4.03H7.1l2.32 2.84.03.06h5.25c.42 0 .72.28.72.72v2.7h-2.5c-.36.02-.56.54-.3.8l3.92 4.9c.18.25.6.25.78 0l3.94-4.9c.26-.28 0-.83-.37-.8H18.4v-2.7c0-3.15.4-3.62-1.25-3.66z' fill='#{hex-color($highlight-text-color)}' stroke-width='0'/></svg>"); + } } } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 06533246b..43b340723 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -154,6 +154,11 @@ display: block; width: 100%; } + + .layout-multiple-columns &.button--with-bell { + font-size: 12px; + padding: 0 8px; + } } .column__wrapper { @@ -172,6 +177,7 @@ cursor: pointer; transition: all 100ms ease-in; transition-property: background-color, color; + text-decoration: none; &:hover, &:active, @@ -245,6 +251,20 @@ background: rgba($base-overlay-background, 0.9); } } + + &--with-counter { + display: inline-flex; + align-items: center; + width: auto !important; + } + + &__counter { + display: inline-block; + width: 14px; + margin-left: 4px; + font-size: 12px; + font-weight: 500; + } } .text-icon-button { @@ -779,6 +799,10 @@ cursor: pointer; } +.status__content { + clear: both; +} + .status__content, .reply-indicator__content { position: relative; @@ -812,6 +836,7 @@ p { margin-bottom: 20px; white-space: pre-wrap; + unicode-bidi: plaintext; &:last-child { margin-bottom: 0; @@ -821,6 +846,7 @@ a { color: $secondary-text-color; text-decoration: none; + unicode-bidi: isolate; &:hover { text-decoration: underline; @@ -980,14 +1006,6 @@ outline: 0; background: lighten($ui-base-color, 4%); - .status.status-direct { - background: lighten($ui-base-color, 12%); - - &.muted { - background: transparent; - } - } - .detailed-status, .detailed-status__action-bar { background: lighten($ui-base-color, 8%); @@ -1022,11 +1040,6 @@ margin-top: 8px; } - &.status-direct:not(.read) { - background: lighten($ui-base-color, 8%); - border-bottom-color: lighten($ui-base-color, 12%); - } - &.light { .status__relative-time, .status__visibility-icon { @@ -1064,27 +1077,16 @@ } } -.notification-favourite { - .status.status-direct { - background: transparent; - - .icon-button.disabled { - color: lighten($action-button-color, 13%); - } - } -} - .status__relative-time, -.status__visibility-icon, .notification__relative_time { color: $dark-text-color; float: right; font-size: 14px; + padding-bottom: 1px; } .status__visibility-icon { - margin-left: 4px; - margin-right: 4px; + padding: 0 4px; } .status__display-name { @@ -1162,28 +1164,14 @@ align-items: center; display: flex; margin-top: 8px; - - &__counter { - display: inline-flex; - margin-right: 11px; - align-items: center; - - .status__action-bar-button { - margin-right: 4px; - } - - &__label { - display: inline-block; - width: 14px; - font-size: 12px; - font-weight: 500; - color: $action-button-color; - } - } } .status__action-bar-button { margin-right: 18px; + + &.icon-button--with-counter { + margin-right: 14px; + } } .status__action-bar-dropdown { @@ -1671,11 +1659,11 @@ a.account__display-name { } } -.star-icon.active { +.icon-button.star-icon.active { color: $gold-star; } -.bookmark-icon.active { +.icon-button.bookmark-icon.active { color: $red-bookmark; } @@ -1739,6 +1727,20 @@ a.account__display-name { align-items: center; justify-content: center; flex-direction: column; + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE 10+ */ + + * { + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE 10+ */ + } + + &::-webkit-scrollbar, + *::-webkit-scrollbar { + width: 0; + height: 0; + background: transparent; /* Chrome/Safari/Webkit */ + } .image-loader__preview-canvas { max-width: $media-modal-media-max-width; @@ -2440,6 +2442,17 @@ a.account__display-name { line-height: 14px; color: $primary-text-color; } + + &__issue-badge { + position: absolute; + left: 11px; + bottom: 1px; + display: block; + background: $error-red; + border-radius: 50%; + width: 0.625rem; + height: 0.625rem; + } } .column-link--transparent .icon-with-badge__badge { @@ -2871,6 +2884,7 @@ a.account__display-name { flex: 0 0 auto; padding: 10px; padding-top: 20px; + z-index: 1; ul { margin-bottom: 10px; @@ -3001,7 +3015,6 @@ button.icon-button i.fa-retweet { &::before { display: none !important; } - } button.icon-button.active i.fa-retweet { @@ -3452,6 +3465,12 @@ a.status-card.compact:hover { } } +.column-header__permission-btn { + display: inline; + font-weight: inherit; + text-decoration: underline; +} + .column-header__setting-arrows { float: right; @@ -3475,6 +3494,15 @@ a.status-card.compact:hover { cursor: pointer; } +.column-header__issue-btn { + color: $warning-red; + + &:hover { + color: $error-red; + text-decoration: underline; + } +} + .column-header__icon { display: inline-block; margin-right: 5px; @@ -3734,6 +3762,10 @@ a.status-card.compact:hover { margin-bottom: 10px; } +.column-settings__row--with-margin { + margin-bottom: 15px; +} + .column-settings__hashtags { .column-settings__row { margin-bottom: 15px; @@ -3837,7 +3869,7 @@ a.status-card.compact:hover { } .column-settings__row { - .text-btn { + .text-btn:not(.column-header__permission-btn) { margin-bottom: 15px; } } @@ -4420,8 +4452,6 @@ a.status-card.compact:hover { .modal-root { position: relative; - transition: opacity 0.3s linear; - will-change: opacity; z-index: 9999; } @@ -4470,16 +4500,19 @@ a.status-card.compact:hover { height: 100%; position: relative; - .extended-video-player { - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; + &__close, + &__zoom-button { + color: rgba($white, 0.7); - video { - max-width: $media-modal-media-max-width; - max-height: $media-modal-media-max-height; + &:hover, + &:focus, + &:active { + color: $white; + background-color: rgba($white, 0.15); + } + + &:focus { + background-color: rgba($white, 0.3); } } } @@ -4516,10 +4549,10 @@ a.status-card.compact:hover { } .media-modal__nav { - background: rgba($base-overlay-background, 0.5); + background: transparent; box-sizing: border-box; border: 0; - color: $primary-text-color; + color: rgba($primary-text-color, 0.7); cursor: pointer; display: flex; align-items: center; @@ -4530,6 +4563,12 @@ a.status-card.compact:hover { position: absolute; top: 0; bottom: 0; + + &:hover, + &:focus, + &:active { + color: $primary-text-color; + } } .media-modal__nav--left { @@ -4540,58 +4579,86 @@ a.status-card.compact:hover { right: 0; } -.media-modal__pagination { - width: 100%; - text-align: center; +.media-modal__overlay { + max-width: 600px; position: absolute; left: 0; - bottom: 20px; - pointer-events: none; -} + right: 0; + bottom: 0; + margin: 0 auto; -.media-modal__meta { - text-align: center; - position: absolute; - left: 0; - bottom: 20px; - width: 100%; - pointer-events: none; + .picture-in-picture__footer { + border-radius: 0; + background: transparent; + padding: 20px 0; - &--shifted { - bottom: 62px; - } + .icon-button { + color: $white; - a { - pointer-events: auto; - text-decoration: none; - font-weight: 500; - color: $ui-secondary-color; + &:hover, + &:focus, + &:active { + color: $white; + background-color: rgba($white, 0.15); + } - &:hover, - &:focus, - &:active { - text-decoration: underline; + &:focus { + background-color: rgba($white, 0.3); + } + + &.active { + color: $highlight-text-color; + + &:hover, + &:focus, + &:active { + background: rgba($highlight-text-color, 0.15); + } + + &:focus { + background: rgba($highlight-text-color, 0.3); + } + } + + &.star-icon.active { + color: $gold-star; + + &:hover, + &:focus, + &:active { + background: rgba($gold-star, 0.15); + } + + &:focus { + background: rgba($gold-star, 0.3); + } + } } } } -.media-modal__page-dot { - display: inline-block; +.media-modal__pagination { + display: flex; + justify-content: center; + margin-bottom: 20px; } -.media-modal__button { - background-color: $primary-text-color; - height: 12px; - width: 12px; - border-radius: 6px; - margin: 10px; +.media-modal__page-dot { + flex: 0 0 auto; + background-color: $white; + opacity: 0.4; + height: 6px; + width: 6px; + border-radius: 50%; + margin: 0 4px; padding: 0; border: 0; font-size: 0; -} + transition: opacity .2s ease-in-out; -.media-modal__button--active { - background-color: $highlight-text-color; + &.active { + opacity: 1; + } } .media-modal__close { @@ -4601,6 +4668,21 @@ a.status-card.compact:hover { z-index: 100; } +.media-modal__zoom-button { + position: absolute; + right: 64px; + top: 8px; + z-index: 100; + pointer-events: auto; + transition: opacity 0.3s linear; + will-change: opacity; +} + +.media-modal__zoom-button--hidden { + pointer-events: none; + opacity: 0; +} + .onboarding-modal, .error-modal, .embed-modal { @@ -5076,6 +5158,22 @@ a.status-card.compact:hover { } } } + + select { + appearance: none; + box-sizing: border-box; + font-size: 14px; + color: $inverted-text-color; + display: inline-block; + width: auto; + outline: 0; + font-family: inherit; + background: $simple-background-color url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14.933 18.467' height='19.698' width='15.929'><path d='M3.467 14.967l-3.393-3.5H14.86l-3.392 3.5c-1.866 1.925-3.666 3.5-4 3.5-.335 0-2.135-1.575-4-3.5zm.266-11.234L7.467 0 11.2 3.733l3.733 3.734H0l3.733-3.734z' fill='#{hex-color(darken($simple-background-color, 14%))}'/></svg>") no-repeat right 8px center / auto 16px; + border: 1px solid darken($simple-background-color, 14%); + border-radius: 4px; + padding: 6px 10px; + padding-right: 30px; + } } .confirmation-modal__container, @@ -5366,7 +5464,6 @@ a.status-card.compact:hover { } .video-player__controls { - padding: 0 15px; padding-top: 10px; background: transparent; } @@ -5485,7 +5582,8 @@ a.status-card.compact:hover { &__buttons-bar { display: flex; justify-content: space-between; - padding-bottom: 10px; + padding-bottom: 8px; + margin: 0 -5px; .video-player__download__icon { color: inherit; @@ -5502,22 +5600,13 @@ a.status-card.compact:hover { overflow: hidden; text-overflow: ellipsis; - &.left { - button { - padding-left: 0; - } - } - - &.right { - button { - padding-right: 0; - } - } + .player-button { + display: inline-block; + outline: 0; - button { flex: 0 0 auto; background: transparent; - padding: 2px 10px; + padding: 5px; font-size: 16px; border: 0; color: rgba($white, 0.75); @@ -5535,6 +5624,7 @@ a.status-card.compact:hover { flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; + margin: 0 5px; } &__time-sep, @@ -5654,7 +5744,7 @@ a.status-card.compact:hover { display: block; position: absolute; height: 4px; - top: 10px; + top: 14px; } &__progress, @@ -5663,7 +5753,7 @@ a.status-card.compact:hover { position: absolute; height: 4px; border-radius: 4px; - top: 10px; + top: 14px; background: lighten($ui-highlight-color, 8%); } @@ -5678,7 +5768,7 @@ a.status-card.compact:hover { border-radius: 50%; width: 12px; height: 12px; - top: 6px; + top: 10px; margin-left: -6px; background: lighten($ui-highlight-color, 8%); box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); @@ -5702,7 +5792,7 @@ a.status-card.compact:hover { &.detailed, &.fullscreen { .video-player__buttons { - button { + .player-button { padding-top: 10px; padding-bottom: 10px; } @@ -5957,6 +6047,10 @@ a.status-card.compact:hover { } } +.column-settings__row .radio-button { + display: block; +} + .radio-button { font-size: 14px; position: relative; @@ -6521,6 +6615,10 @@ noscript { padding: 2px; } + & > .icon-button { + margin-right: 8px; + } + .button { margin: 0 8px; } @@ -7030,3 +7128,133 @@ noscript { } } } + +.notification, +.status__wrapper { + position: relative; + + &.unread { + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + pointer-events: 0; + width: 100%; + height: 100%; + border-left: 2px solid $highlight-text-color; + pointer-events: none; + } + } +} + +.picture-in-picture { + position: fixed; + bottom: 20px; + right: 20px; + width: 300px; + + &__footer { + border-radius: 0 0 4px 4px; + background: lighten($ui-base-color, 4%); + padding: 10px; + padding-top: 12px; + display: flex; + justify-content: space-between; + } + + &__header { + border-radius: 4px 4px 0 0; + background: lighten($ui-base-color, 4%); + padding: 10px; + display: flex; + justify-content: space-between; + + &__account { + display: flex; + text-decoration: none; + } + + .account__avatar { + margin-right: 10px; + } + + .display-name { + color: $primary-text-color; + text-decoration: none; + + strong, + span { + display: block; + text-overflow: ellipsis; + overflow: hidden; + } + + span { + color: $darker-text-color; + } + } + } + + .video-player, + .audio-player { + border-radius: 0; + } +} + +.picture-in-picture-placeholder { + box-sizing: border-box; + border: 2px dashed lighten($ui-base-color, 8%); + background: $base-shadow-color; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: 10px; + font-size: 16px; + font-weight: 500; + cursor: pointer; + color: $darker-text-color; + + i { + display: block; + font-size: 24px; + font-weight: 400; + margin-bottom: 10px; + } + + &:hover, + &:focus, + &:active { + border-color: lighten($ui-base-color, 12%); + } +} + +.notifications-permission-banner { + padding: 30px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: relative; + + &__close { + position: absolute; + top: 10px; + right: 10px; + } + + h2 { + font-size: 16px; + font-weight: 500; + margin-bottom: 15px; + text-align: center; + } + + p { + color: $darker-text-color; + margin-bottom: 15px; + text-align: center; + } +} diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index 51d9b46b0..e40ad18ff 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -444,6 +444,10 @@ } } + .logo-button { + padding: 3px 15px; + } + &__image { border-radius: 4px 4px 0 0; overflow: hidden; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index a54a5fded..e0604303b 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -354,6 +354,7 @@ code { input[type=number], input[type=email], input[type=password], + input[type=url], textarea { box-sizing: border-box; font-size: 16px; @@ -376,11 +377,6 @@ code { box-shadow: none; } - &:focus:invalid:not(:placeholder-shown), - &:required:invalid:not(:placeholder-shown) { - border-color: lighten($error-red, 12%); - } - &:required:valid { border-color: $valid-value-color; } @@ -396,6 +392,16 @@ code { } } + input[type=text], + input[type=number], + input[type=email], + input[type=password] { + &:focus:invalid:not(:placeholder-shown), + &:required:invalid:not(:placeholder-shown) { + border-color: lighten($error-red, 12%); + } + } + .input.field_with_errors { label { color: lighten($error-red, 12%); @@ -994,3 +1000,10 @@ code { flex-direction: row; } } + +.input.user_confirm_password, +.input.user_website { + &:not(.field_with_errors) { + display: none; + } +} diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss index fbf26e30b..baacf46b9 100644 --- a/app/javascript/styles/mastodon/rtl.scss +++ b/app/javascript/styles/mastodon/rtl.scss @@ -17,15 +17,38 @@ body.rtl { margin-right: 15px; } - .display-name { + .display-name, + .announcements__item { text-align: right; } + .announcements__item__range { + padding-right: 0; + padding-left: 18px; + } + + .reactions-bar { + margin-left: auto; + margin-right: -2px; + direction: rtl; + } + + .reactions-bar__item__count { + margin-left: 0; + margin-right: 6px; + } + + .announcements__pagination { + right: auto; + left: 0; + } + .notification__message { margin-left: 0; margin-right: 68px; } + .announcements__mastodon, .drawer__inner__mastodon > img { transform: scaleX(-1); } @@ -147,6 +170,11 @@ body.rtl { right: 42px; } + .account__header__tabs__buttons > .icon-button { + margin-right: 0; + margin-left: 8px; + } + .account__avatar-overlay-overlay { right: auto; left: 0; @@ -195,6 +223,7 @@ body.rtl { margin-right: 0; } + .picture-in-picture__header__account .display-name, .detailed-status__display-name .display-name { text-align: right; } @@ -205,6 +234,21 @@ body.rtl { float: right; } + .picture-in-picture__header__account .account__avatar { + margin-right: 0; + margin-left: 10px; + } + + .icon-button__counter { + margin-left: 0; + margin-right: 4px; + } + + .notifications-permission-banner__close { + right: auto; + left: 10px; + } + .detailed-status__favorites, .detailed-status__reblogs { margin-left: 0; @@ -416,4 +460,9 @@ body.rtl { left: auto; right: 0; } + + .picture-in-picture { + right: auto; + left: 20px; + } } diff --git a/app/javascript/styles/mastodon/statuses.scss b/app/javascript/styles/mastodon/statuses.scss index 7ae1c5a24..078714325 100644 --- a/app/javascript/styles/mastodon/statuses.scss +++ b/app/javascript/styles/mastodon/statuses.scss @@ -83,9 +83,14 @@ background: $ui-highlight-color; color: $primary-text-color; text-transform: none; - line-height: 36px; + line-height: 1.2; height: auto; - padding: 3px 15px; + min-height: 36px; + min-width: 88px; + white-space: normal; + overflow-wrap: break-word; + hyphens: auto; + padding: 0 15px; border: 0; svg { @@ -126,6 +131,12 @@ } } +a.button.logo-button { + display: inline-flex; + align-items: center; + justify-content: center; +} + .embed, .public-layout { .status__content[data-spoiler=folded] { diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 8602c3dde..f463419c8 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -36,6 +36,8 @@ $dark-text-color: $ui-base-lighter-color !default; $secondary-text-color: $ui-secondary-color !default; $highlight-text-color: $ui-highlight-color !default; $action-button-color: $ui-base-lighter-color !default; +$passive-text-color: $gold-star !default; +$active-passive-text-color: $success-green !default; // For texts on inverted backgrounds $inverted-text-color: $ui-base-color !default; $lighter-text-color: $ui-base-lighter-color !default; diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index 5b97d1ec4..5ee4d104b 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -2,6 +2,10 @@ margin-bottom: 10px; box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + &:last-child { + margin-bottom: 0; + } + &__img { width: 100%; position: relative; @@ -442,6 +446,26 @@ vertical-align: initial !important; } + &__interrelationships { + width: 21px; + } + + .fa { + font-size: 16px; + + &.active { + color: $highlight-text-color; + } + + &.passive { + color: $passive-text-color; + } + + &.active.passive { + color: $active-passive-text-color; + } + } + @media screen and (max-width: $no-gap-breakpoint) { tbody td.optional { display: none; |