From 4cfe52635cf82ae496bf2c6b8e3271ad931d225a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 29 Apr 2023 16:03:36 -0400 Subject: [PATCH 01/43] Add pending spec for User.those_who_can (#24724) --- .rubocop_todo.yml | 1 - spec/models/user_spec.rb | 24 +++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 9ce404a1de..2b61387830 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -857,7 +857,6 @@ RSpec/PendingWithoutReason: Exclude: - 'spec/controllers/statuses_controller_spec.rb' - 'spec/models/account_spec.rb' - - 'spec/models/user_spec.rb' # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Strict, EnforcedStyle, AllowedExplicitMatchers. diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2bb6a334b1..b7754e9265 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -527,6 +527,28 @@ RSpec.describe User, type: :model do end describe '.those_who_can' do - pending + let!(:moderator_user) { Fabricate(:user, role: UserRole.find_by(name: 'Moderator')) } + + context 'when there are not any user roles' do + before { UserRole.destroy_all } + + it 'returns an empty list' do + expect(User.those_who_can(:manage_blocks)).to eq([]) + end + end + + context 'when there are not users with the needed role' do + it 'returns an empty list' do + expect(User.those_who_can(:manage_blocks)).to eq([]) + end + end + + context 'when there are users with roles' do + let!(:admin_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'returns the users with the role' do + expect(User.those_who_can(:manage_blocks)).to eq([admin_user]) + end + end end end From e0d075713f4b83960fc13a7289d7e96fa7ebcd1f Mon Sep 17 00:00:00 2001 From: mogaminsk <5103195+mgmn@users.noreply.github.com> Date: Sun, 30 Apr 2023 09:22:20 +0900 Subject: [PATCH 02/43] Change i18n-fallbacks to English (#24727) --- config/environments/production.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index ef52228a0a..018d3c1c22 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -56,7 +56,7 @@ Rails.application.configure do # Enable locale fallbacks for I18n (makes lookups for any locale fall back to # English when a translation cannot be found). - config.i18n.fallbacks = true + config.i18n.fallbacks = [:en] # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify From 274d5614308f88026db4afd53e089e2e99fe5968 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 29 Apr 2023 20:28:52 -0400 Subject: [PATCH 03/43] Enable local account key generation spec (#24728) --- spec/models/account_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 2e2ca72748..458b2ce52a 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -951,10 +951,10 @@ RSpec.describe Account, type: :model do end context 'when is local' do - # Test disabled because test environment omits autogenerating keys for performance - xit 'generates keys' do + it 'generates keys' do account = Account.create!(domain: nil, username: Faker::Internet.user_name(separators: ['_'])) - expect(account.keypair.private?).to be true + expect(account.keypair).to be_private + expect(account.keypair).to be_public end end From bfeccf67486d105d4c2a07719fdf4772652bad74 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Sun, 30 Apr 2023 02:29:24 +0200 Subject: [PATCH 04/43] Fix media description not being cleared (#24720) --- app/javascript/mastodon/actions/compose.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index f4cd2d04db..bf504b88a8 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -406,16 +406,12 @@ export function changeUploadCompose(id, params) { // Editing already-attached media is deferred to editing the post itself. // For simplicity's sake, fake an API reply. if (media && !media.get('unattached')) { - let { description, focus } = params; - const data = media.toJS(); - - if (description) { - data.description = description; - } + const { focus, ...other } = params; + const data = { ...media.toJS(), ...other }; if (focus) { - focus = focus.split(','); - data.meta = { focus: { x: parseFloat(focus[0]), y: parseFloat(focus[1]) } }; + const [x, y] = focus.split(','); + data.meta = { focus: { x: parseFloat(x), y: parseFloat(y) } }; } dispatch(changeUploadComposeSuccess(data, true)); From f22b4e556c0e66465b87c57a2d5cf48452ead259 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Sat, 29 Apr 2023 20:29:54 -0400 Subject: [PATCH 05/43] Add eslint-plugin-jsdoc (#24719) --- .eslintrc.js | 12 +++++ .../mastodon/actions/picture_in_picture.js | 2 +- app/javascript/mastodon/actions/streaming.js | 16 +++--- .../mastodon/components/blurhash.jsx | 3 +- .../mastodon/components/common_counter.jsx | 1 - .../mastodon/components/hashtag.jsx | 1 - .../mastodon/components/short_number.jsx | 2 - app/javascript/mastodon/stream.js | 14 ++--- app/javascript/mastodon/utils/scrollbar.js | 4 +- package.json | 1 + streaming/index.js | 54 +++++++++---------- yarn.lock | 44 +++++++++++++-- 12 files changed, 100 insertions(+), 54 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 259c86157b..8394d98b9c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -7,6 +7,7 @@ module.exports = { 'plugin:jsx-a11y/recommended', 'plugin:import/recommended', 'plugin:promise/recommended', + 'plugin:jsdoc/recommended', ], env: { @@ -238,6 +239,14 @@ module.exports = { 'formatjs/no-useless-message': 'error', 'formatjs/prefer-formatted-message': 'error', 'formatjs/prefer-pound-in-plural': 'error', + + 'jsdoc/check-types': 'off', + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-param-description': 'off', + 'jsdoc/require-property-description': 'off', + 'jsdoc/require-returns-description': 'off', + 'jsdoc/require-returns': 'off', }, overrides: [ @@ -270,10 +279,13 @@ module.exports = { 'plugin:import/recommended', 'plugin:import/typescript', 'plugin:promise/recommended', + 'plugin:jsdoc/recommended', ], rules: { '@typescript-eslint/no-explicit-any': 'off', + + 'jsdoc/require-jsdoc': 'off', }, }, { diff --git a/app/javascript/mastodon/actions/picture_in_picture.js b/app/javascript/mastodon/actions/picture_in_picture.js index 6b9ff7709e..898375abeb 100644 --- a/app/javascript/mastodon/actions/picture_in_picture.js +++ b/app/javascript/mastodon/actions/picture_in_picture.js @@ -20,7 +20,7 @@ export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; * @param {string} accountId * @param {string} playerType * @param {MediaProps} props - * @return {object} + * @returns {object} */ export const deployPictureInPicture = (statusId, accountId, playerType, props) => { // @ts-expect-error diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index 4d4ea83e45..41cb99e2dd 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -27,7 +27,7 @@ const { messages } = getLocale(); /** * @param {number} max - * @return {number} + * @returns {number} */ const randomUpTo = max => Math.floor(Math.random() * Math.floor(max)); @@ -40,7 +40,7 @@ const randomUpTo = max => * @param {function(Function, Function): void} [options.fallback] * @param {function(): void} [options.fillGaps] * @param {function(object): boolean} [options.accept] - * @return {function(): void} + * @returns {function(): void} */ export const connectTimelineStream = (timelineId, channelName, params = {}, options = {}) => connectStream(channelName, params, (dispatch, getState) => { @@ -132,7 +132,7 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => { }; /** - * @return {function(): void} + * @returns {function(): void} */ export const connectUserStream = () => // @ts-expect-error @@ -141,7 +141,7 @@ export const connectUserStream = () => /** * @param {Object} options * @param {boolean} [options.onlyMedia] - * @return {function(): void} + * @returns {function(): void} */ export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => (fillCommunityTimelineGaps({ onlyMedia })) }); @@ -150,7 +150,7 @@ export const connectCommunityStream = ({ onlyMedia } = {}) => * @param {Object} options * @param {boolean} [options.onlyMedia] * @param {boolean} [options.onlyRemote] - * @return {function(): void} + * @returns {function(): void} */ export const connectPublicStream = ({ onlyMedia, onlyRemote } = {}) => connectTimelineStream(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => fillPublicTimelineGaps({ onlyMedia, onlyRemote }) }); @@ -160,20 +160,20 @@ export const connectPublicStream = ({ onlyMedia, onlyRemote } = {}) => * @param {string} tagName * @param {boolean} onlyLocal * @param {function(object): boolean} accept - * @return {function(): void} + * @returns {function(): void} */ export const connectHashtagStream = (columnId, tagName, onlyLocal, accept) => connectTimelineStream(`hashtag:${columnId}${onlyLocal ? ':local' : ''}`, `hashtag${onlyLocal ? ':local' : ''}`, { tag: tagName }, { accept }); /** - * @return {function(): void} + * @returns {function(): void} */ export const connectDirectStream = () => connectTimelineStream('direct', 'direct'); /** * @param {string} listId - * @return {function(): void} + * @returns {function(): void} */ export const connectListStream = listId => connectTimelineStream(`list:${listId}`, 'list', { list: listId }, { fillGaps: () => fillListTimelineGaps(listId) }); diff --git a/app/javascript/mastodon/components/blurhash.jsx b/app/javascript/mastodon/components/blurhash.jsx index 07cd31b6ca..f5c58e04ef 100644 --- a/app/javascript/mastodon/components/blurhash.jsx +++ b/app/javascript/mastodon/components/blurhash.jsx @@ -20,9 +20,8 @@ import PropTypes from 'prop-types'; /** * Component that is used to render blurred of blurhash string - * * @param {BlurhashProps} param1 Props of the component - * @returns Canvas which will render blurred region element to embed + * @returns {JSX.Element} Canvas which will render blurred region element to embed */ function Blurhash({ hash, diff --git a/app/javascript/mastodon/components/common_counter.jsx b/app/javascript/mastodon/components/common_counter.jsx index dd9b62de9b..9964be5166 100644 --- a/app/javascript/mastodon/components/common_counter.jsx +++ b/app/javascript/mastodon/components/common_counter.jsx @@ -4,7 +4,6 @@ import { FormattedMessage } from 'react-intl'; /** * Returns custom renderer for one of the common counter types - * * @param {"statuses" | "following" | "followers"} counterType * Type of the counter * @param {boolean} isBold Whether display number must be displayed in bold diff --git a/app/javascript/mastodon/components/hashtag.jsx b/app/javascript/mastodon/components/hashtag.jsx index 8821c66f02..254fae2fe0 100644 --- a/app/javascript/mastodon/components/hashtag.jsx +++ b/app/javascript/mastodon/components/hashtag.jsx @@ -37,7 +37,6 @@ class SilentErrorBoundary extends React.Component { /** * Used to render counter of how much people are talking about hashtag - * * @type {(displayNumber: JSX.Element, pluralReady: number) => JSX.Element} */ export const accountsCountRenderer = (displayNumber, pluralReady) => ( diff --git a/app/javascript/mastodon/components/short_number.jsx b/app/javascript/mastodon/components/short_number.jsx index 861d0bc589..0c40941c0d 100644 --- a/app/javascript/mastodon/components/short_number.jsx +++ b/app/javascript/mastodon/components/short_number.jsx @@ -24,7 +24,6 @@ import { FormattedMessage, FormattedNumber } from 'react-intl'; /** * Component that renders short big number to a shorter version - * * @param {ShortNumberProps} param0 Props for the component * @returns {JSX.Element} Rendered number */ @@ -58,7 +57,6 @@ ShortNumber.propTypes = { /** * Renders short number into corresponding localizable react fragment - * * @param {ShortNumberCounterProps} param0 Props for the component * @returns {JSX.Element} FormattedMessage ready to be embedded in code */ diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js index 95e0359d0a..ff3af5fd88 100644 --- a/app/javascript/mastodon/stream.js +++ b/app/javascript/mastodon/stream.js @@ -17,10 +17,10 @@ let sharedConnection; */ /** - * @typedef StreamEvent - * @property {string} event - * @property {object} payload - */ + * @typedef StreamEvent + * @property {string} event + * @property {object} payload + */ /** * @type {Array.} @@ -126,7 +126,7 @@ const sharedCallbacks = { /** * @param {string} channelName * @param {Object.} params - * @return {string} + * @returns {string} */ const channelNameWithInlineParams = (channelName, params) => { if (Object.keys(params).length === 0) { @@ -140,7 +140,7 @@ const channelNameWithInlineParams = (channelName, params) => { * @param {string} channelName * @param {Object.} params * @param {function(Function, Function): { onConnect: (function(): void), onReceive: (function(StreamEvent): void), onDisconnect: (function(): void) }} callbacks - * @return {function(): void} + * @returns {function(): void} */ // @ts-expect-error export const connectStream = (channelName, params, callbacks) => (dispatch, getState) => { @@ -227,7 +227,7 @@ const handleEventSourceMessage = (e, received) => { * @param {string} accessToken * @param {string} channelName * @param {{ connected: Function, received: function(StreamEvent): void, disconnected: Function, reconnected: Function }} callbacks - * @return {WebSocketClient | EventSource} + * @returns {WebSocketClient | EventSource} */ const createConnection = (streamingAPIBaseURL, accessToken, channelName, { connected, received, disconnected, reconnected }) => { const params = channelName.split('&'); diff --git a/app/javascript/mastodon/utils/scrollbar.js b/app/javascript/mastodon/utils/scrollbar.js index 6f0ee010b5..ca87dd76f5 100644 --- a/app/javascript/mastodon/utils/scrollbar.js +++ b/app/javascript/mastodon/utils/scrollbar.js @@ -4,7 +4,7 @@ import { isMobile } from '../is_mobile'; let cachedScrollbarWidth = null; /** - * @return {number} + * @returns {number} */ const getActualScrollbarWidth = () => { const outer = document.createElement('div'); @@ -22,7 +22,7 @@ const getActualScrollbarWidth = () => { }; /** - * @return {number} + * @returns {number} */ export const getScrollbarWidth = () => { if (cachedScrollbarWidth !== null) { diff --git a/package.json b/package.json index 3b52664bb9..38323d925f 100644 --- a/package.json +++ b/package.json @@ -183,6 +183,7 @@ "eslint": "^8.38.0", "eslint-plugin-formatjs": "^4.9.0", "eslint-plugin-import": "~2.27.5", + "eslint-plugin-jsdoc": "^43.1.1", "eslint-plugin-jsx-a11y": "~6.7.1", "eslint-plugin-promise": "~6.1.1", "eslint-plugin-react": "~7.32.2", diff --git a/streaming/index.js b/streaming/index.js index 421c7afa9b..07cc91f3f6 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -53,7 +53,7 @@ const redisUrlToClient = async (defaultConfig, redisUrl) => { /** * @param {string} json * @param {any} req - * @return {Object.|null} + * @returns {Object.|null} */ const parseJSON = (json, req) => { try { @@ -70,7 +70,7 @@ const parseJSON = (json, req) => { /** * @param {Object.} env the `process.env` value to read configuration from - * @return {Object.} the configuration for the PostgreSQL connection + * @returns {Object.} the configuration for the PostgreSQL connection */ const pgConfigFromEnv = (env) => { const pgConfigs = { @@ -124,7 +124,7 @@ const pgConfigFromEnv = (env) => { /** * @param {Object.} env the `process.env` value to read configuration from - * @return {Object.} configuration for the Redis connection + * @returns {Object.} configuration for the Redis connection */ const redisConfigFromEnv = (env) => { const redisNamespace = env.REDIS_NAMESPACE || null; @@ -171,7 +171,7 @@ const startServer = async () => { /** * @param {string[]} channels - * @return {function(): void} + * @returns {function(): void} */ const subscriptionHeartbeat = channels => { const interval = 6 * 60; @@ -224,6 +224,7 @@ const startServer = async () => { /** * @param {string} channel + * @param {function(string): void} callback */ const unsubscribe = (channel, callback) => { log.silly(`Removing listener for ${channel}`); @@ -255,7 +256,7 @@ const startServer = async () => { /** * @param {any} value - * @return {boolean} + * @returns {boolean} */ const isTruthy = value => value && !FALSE_VALUES.includes(value); @@ -263,7 +264,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @param {function(Error=): void} + * @param {function(Error=): void} next */ const allowCrossDomain = (req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); @@ -276,7 +277,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @param {function(Error=): void} + * @param {function(Error=): void} next */ const setRequestId = (req, res, next) => { req.requestId = uuid.v4(); @@ -288,7 +289,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @param {function(Error=): void} + * @param {function(Error=): void} next */ const setRemoteAddress = (req, res, next) => { req.remoteAddress = req.connection.remoteAddress; @@ -299,7 +300,7 @@ const startServer = async () => { /** * @param {any} req * @param {string[]} necessaryScopes - * @return {boolean} + * @returns {boolean} */ const isInScope = (req, necessaryScopes) => req.scopes.some(scope => necessaryScopes.includes(scope)); @@ -307,7 +308,7 @@ const startServer = async () => { /** * @param {string} token * @param {any} req - * @return {Promise.} + * @returns {Promise.} */ const accountFromToken = (token, req) => new Promise((resolve, reject) => { pgPool.connect((err, client, done) => { @@ -345,8 +346,7 @@ const startServer = async () => { /** * @param {any} req - * @param {boolean=} required - * @return {Promise.} + * @returns {Promise.} */ const accountFromRequest = (req) => new Promise((resolve, reject) => { const authorization = req.headers.authorization; @@ -368,7 +368,7 @@ const startServer = async () => { /** * @param {any} req - * @return {string} + * @returns {string} */ const channelNameFromPath = req => { const { path, query } = req; @@ -412,7 +412,7 @@ const startServer = async () => { /** * @param {any} req * @param {string} channelName - * @return {Promise.} + * @returns {Promise.} */ const checkScopes = (req, channelName) => new Promise((resolve, reject) => { log.silly(req.requestId, `Checking OAuth scopes for ${channelName}`); @@ -477,7 +477,7 @@ const startServer = async () => { /** * @param {any} req * @param {SystemMessageHandlers} eventHandlers - * @return {function(string): void} + * @returns {function(string): void} */ const createSystemMessageListener = (req, eventHandlers) => { return message => { @@ -565,14 +565,14 @@ const startServer = async () => { /** * @param {array} arr * @param {number=} shift - * @return {string} + * @returns {string} */ const placeholders = (arr, shift = 0) => arr.map((_, i) => `$${i + 1 + shift}`).join(', '); /** * @param {string} listId * @param {any} req - * @return {Promise.} + * @returns {Promise.} */ const authorizeListAccess = (listId, req) => new Promise((resolve, reject) => { const { accountId } = req; @@ -602,7 +602,7 @@ const startServer = async () => { * @param {function(string, string): void} output * @param {function(string[], function(string): void): void} attachCloseHandler * @param {boolean=} needsFiltering - * @return {function(string): void} + * @returns {function(string): void} */ const streamFrom = (ids, req, output, attachCloseHandler, needsFiltering = false) => { const accountId = req.accountId || req.remoteAddress; @@ -765,7 +765,7 @@ const startServer = async () => { /** * @param {any} req * @param {any} res - * @return {function(string, string): void} + * @returns {function(string, string): void} */ const streamToHttp = (req, res) => { const accountId = req.accountId || req.remoteAddress; @@ -792,7 +792,7 @@ const startServer = async () => { /** * @param {any} req * @param {function(): void} [closeHandler] - * @return {function(string[]): void} + * @returns {function(string[]): void} */ const streamHttpEnd = (req, closeHandler = undefined) => (ids) => { req.on('close', () => { @@ -810,7 +810,7 @@ const startServer = async () => { * @param {any} req * @param {any} ws * @param {string[]} streamName - * @return {function(string, string): void} + * @returns {function(string, string): void} */ const streamToWs = (req, ws, streamName) => (event, payload) => { if (ws.readyState !== ws.OPEN) { @@ -885,7 +885,7 @@ const startServer = async () => { /** * @param {any} req - * @return {string[]} + * @returns {string[]} */ const channelsForUserStream = req => { const arr = [`timeline:${req.accountId}`]; @@ -910,7 +910,7 @@ const startServer = async () => { /** * @param {string} str - * @return {string} + * @returns {string} */ const foldToASCII = str => { const regex = new RegExp(NON_ASCII_CHARS.split('').join('|'), 'g'); @@ -923,7 +923,7 @@ const startServer = async () => { /** * @param {string} str - * @return {string} + * @returns {string} */ const normalizeHashtag = str => { return foldToASCII(str.normalize('NFKC').toLowerCase()).replace(/[^\p{L}\p{N}_\u00b7\u200c]/gu, ''); @@ -933,7 +933,7 @@ const startServer = async () => { * @param {any} req * @param {string} name * @param {StreamParams} params - * @return {Promise.<{ channelIds: string[], options: { needsFiltering: boolean } }>} + * @returns {Promise.<{ channelIds: string[], options: { needsFiltering: boolean } }>} */ const channelNameToIds = (req, name, params) => new Promise((resolve, reject) => { switch (name) { @@ -1041,7 +1041,7 @@ const startServer = async () => { /** * @param {string} channelName * @param {StreamParams} params - * @return {string[]} + * @returns {string[]} */ const streamNameFromChannelName = (channelName, params) => { if (channelName === 'list') { @@ -1149,7 +1149,7 @@ const startServer = async () => { /** * @param {string|string[]} arrayOrString - * @return {string} + * @returns {string} */ const firstParam = arrayOrString => { if (Array.isArray(arrayOrString)) { diff --git a/yarn.lock b/yarn.lock index 5b367f3d20..5aaa76a078 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1218,6 +1218,15 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@es-joy/jsdoccomment@~0.37.1": + version "0.37.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz#fa32a41ba12097452693343e09ad4d26d157aedd" + integrity sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg== + dependencies: + comment-parser "1.3.1" + esquery "^1.5.0" + jsdoc-type-pratt-parser "~4.0.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" @@ -2958,6 +2967,11 @@ anymatch@^3.0.3, anymatch@~3.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + are-we-there-yet@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" @@ -4013,6 +4027,11 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +comment-parser@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -5094,6 +5113,20 @@ eslint-plugin-import@~2.27.5: semver "^6.3.0" tsconfig-paths "^3.14.1" +eslint-plugin-jsdoc@^43.1.1: + version "43.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-43.1.1.tgz#fc72ba21597cc99b1a0dc988aebb9bb57d0ec492" + integrity sha512-J2kjjsJ5vBXSyNzqJhceeSGTAgVgZHcPSJKo3vD4tNjUdfky98rR2VfZUDsS1GKL6isyVa8GWvr+Az7Vyg2HXA== + dependencies: + "@es-joy/jsdoccomment" "~0.37.1" + are-docs-informative "^0.0.2" + comment-parser "1.3.1" + debug "^4.3.4" + escape-string-regexp "^4.0.0" + esquery "^1.5.0" + semver "^7.5.0" + spdx-expression-parse "^3.0.1" + eslint-plugin-jsx-a11y@~6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" @@ -5231,7 +5264,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: +esquery@^1.4.2, esquery@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -7384,6 +7417,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsdoc-type-pratt-parser@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" + integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== + jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -10268,7 +10306,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== @@ -10607,7 +10645,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== From cf1bc4bb93f93c3056434f694f7ce31ce7f03158 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 30 Apr 2023 06:42:22 +0200 Subject: [PATCH 06/43] Fix audio player width in thread view (#24713) --- app/javascript/mastodon/features/audio/index.jsx | 2 +- app/javascript/styles/mastodon/components.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/audio/index.jsx b/app/javascript/mastodon/features/audio/index.jsx index df40b48f00..53f24c6a39 100644 --- a/app/javascript/mastodon/features/audio/index.jsx +++ b/app/javascript/mastodon/features/audio/index.jsx @@ -470,7 +470,7 @@ class Audio extends React.PureComponent { } return ( -
+
Date: Sun, 30 Apr 2023 06:42:43 +0200 Subject: [PATCH 07/43] Fix pop-in player placeholder layout in thread view (#24715) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 81067f05ca..b9f27edcca 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1155,6 +1155,7 @@ body > [data-popper-placement] { .video-player, .audio-player, .attachment-list, + .picture-in-picture-placeholder, .status-card { margin-inline-start: 46px + 10px; width: calc(100% - (46px + 10px)); From 8dcfb6e0ead56cd89f1afa9ab98ef34ec4c9dcfc Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 00:43:28 -0400 Subject: [PATCH 08/43] Fix Rails/HttpPositionalArguments cop (#24699) --- .rubocop_todo.yml | 7 ------- spec/config/initializers/rack_attack_spec.rb | 18 ++++++++---------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 2b61387830..42ea2342bd 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1367,13 +1367,6 @@ Rails/HasManyOrHasOneDependent: - 'app/models/user.rb' - 'app/models/web/push_subscription.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Include. -# Include: spec/**/*, test/**/* -Rails/HttpPositionalArguments: - Exclude: - - 'spec/config/initializers/rack_attack_spec.rb' - # Configuration parameters: Include. # Include: spec/**/*.rb, test/**/*.rb Rails/I18nLocaleAssignment: diff --git a/spec/config/initializers/rack_attack_spec.rb b/spec/config/initializers/rack_attack_spec.rb index cc931b21b3..0411a48d2a 100644 --- a/spec/config/initializers/rack_attack_spec.rb +++ b/spec/config/initializers/rack_attack_spec.rb @@ -2,9 +2,7 @@ require 'rails_helper' -describe Rack::Attack do - include Rack::Test::Methods - +describe Rack::Attack, type: :request do def app Rails.application end @@ -25,7 +23,7 @@ describe Rack::Attack do it 'does not change the request status' do limit.times do request.call - expect(last_response.status).to_not eq(429) + expect(response).to_not have_http_status(429) end end end @@ -34,13 +32,13 @@ describe Rack::Attack do it 'returns http too many requests after limit and returns to normal status after period' do (limit * 2).times do |i| request.call - expect(last_response.status).to eq(429) if i > limit + expect(response).to have_http_status(429) if i > limit end travel period request.call - expect(last_response.status).to_not eq(429) + expect(response).to_not have_http_status(429) end end end @@ -51,7 +49,7 @@ describe Rack::Attack do context 'through the website' do let(:limit) { 25 } let(:period) { 5.minutes } - let(:request) { -> { post path, {}, 'REMOTE_ADDR' => remote_ip } } + let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } context 'for exact path' do let(:path) { '/auth' } @@ -69,7 +67,7 @@ describe Rack::Attack do context 'through the API' do let(:limit) { 5 } let(:period) { 30.minutes } - let(:request) { -> { post path, {}, 'REMOTE_ADDR' => remote_ip } } + let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } context 'for exact path' do let(:path) { '/api/v1/accounts' } @@ -82,7 +80,7 @@ describe Rack::Attack do it 'returns http not found' do request.call - expect(last_response.status).to eq(404) + expect(response).to have_http_status(404) end end end @@ -91,7 +89,7 @@ describe Rack::Attack do describe 'throttle excessive sign-in requests by IP address' do let(:limit) { 25 } let(:period) { 5.minutes } - let(:request) { -> { post path, {}, 'REMOTE_ADDR' => remote_ip } } + let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } context 'for exact path' do let(:path) { '/auth/sign_in' } From 60ac9e863476d6ff3e44ad09c81adaabeca94d6e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 00:43:50 -0400 Subject: [PATCH 09/43] Fix Rails/SquishedSQLHeredocs cop (#24694) --- .rubocop_todo.yml | 9 --------- db/migrate/20170920024819_status_ids_to_timestamp_ids.rb | 4 ++-- .../20180608213548_reject_following_blocked_users.rb | 4 ++-- .../20190519130537_remove_boosts_widening_audience.rb | 2 +- lib/mastodon/snowflake.rb | 2 +- lib/tasks/tests.rake | 2 +- 6 files changed, 7 insertions(+), 16 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 42ea2342bd..172f44bad1 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1520,15 +1520,6 @@ Rails/SkipsModelValidations: - 'spec/services/follow_service_spec.rb' - 'spec/services/update_account_service_spec.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/SquishedSQLHeredocs: - Exclude: - - 'db/migrate/20170920024819_status_ids_to_timestamp_ids.rb' - - 'db/migrate/20180608213548_reject_following_blocked_users.rb' - - 'db/post_migrate/20190519130537_remove_boosts_widening_audience.rb' - - 'lib/mastodon/snowflake.rb' - - 'lib/tasks/tests.rake' - Rails/TransactionExitStatement: Exclude: - 'app/lib/activitypub/activity/announce.rb' diff --git a/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb b/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb index 8679f8ece8..82e91f1e11 100644 --- a/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb +++ b/db/migrate/20170920024819_status_ids_to_timestamp_ids.rb @@ -4,7 +4,7 @@ class StatusIdsToTimestampIds < ActiveRecord::Migration[5.1] Mastodon::Snowflake.define_timestamp_id # Set up the statuses.id column to use our timestamp-based IDs. - ActiveRecord::Base.connection.execute(<<~SQL) + ActiveRecord::Base.connection.execute(<<~SQL.squish) ALTER TABLE statuses ALTER COLUMN id SET DEFAULT timestamp_id('statuses') @@ -21,7 +21,7 @@ class StatusIdsToTimestampIds < ActiveRecord::Migration[5.1] # We lock the table during this so that the ID won't get clobbered, # but ID is indexed, so this should be a fast operation. - ActiveRecord::Base.connection.execute(<<~SQL) + ActiveRecord::Base.connection.execute(<<~SQL.squish) LOCK statuses; SELECT setval('statuses_id_seq', (SELECT MAX(id) FROM statuses)); ALTER TABLE statuses diff --git a/db/migrate/20180608213548_reject_following_blocked_users.rb b/db/migrate/20180608213548_reject_following_blocked_users.rb index 78f8df5383..bb21bd8fa0 100644 --- a/db/migrate/20180608213548_reject_following_blocked_users.rb +++ b/db/migrate/20180608213548_reject_following_blocked_users.rb @@ -2,14 +2,14 @@ class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - blocked_follows = Follow.find_by_sql(<<-SQL) + blocked_follows = Follow.find_by_sql(<<-SQL.squish) select f.* from follows f inner join blocks b on f.account_id = b.target_account_id and f.target_account_id = b.account_id SQL - domain_blocked_follows = Follow.find_by_sql(<<-SQL) + domain_blocked_follows = Follow.find_by_sql(<<-SQL.squish) select f.* from follows f inner join accounts following on f.account_id = following.id inner join account_domain_blocks b on diff --git a/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb b/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb index d2d9242392..f1708b2e11 100644 --- a/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb +++ b/db/post_migrate/20190519130537_remove_boosts_widening_audience.rb @@ -2,7 +2,7 @@ class RemoveBoostsWideningAudience < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - public_boosts = Status.find_by_sql(<<-SQL) + public_boosts = Status.find_by_sql(<<-SQL.squish) SELECT boost.id FROM statuses AS boost LEFT JOIN statuses AS boosted ON boost.reblog_of_id = boosted.id diff --git a/lib/mastodon/snowflake.rb b/lib/mastodon/snowflake.rb index 8030288aff..32ed140c30 100644 --- a/lib/mastodon/snowflake.rb +++ b/lib/mastodon/snowflake.rb @@ -146,7 +146,7 @@ module Mastodon::Snowflake private def already_defined? - connection.execute(<<~SQL).values.first.first + connection.execute(<<~SQL.squish).values.first.first SELECT EXISTS( SELECT * FROM pg_proc WHERE proname = 'timestamp_id' ); diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 35073b78bb..ceb421f4b2 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -113,7 +113,7 @@ namespace :tests do desc 'Populate the database with test data for 2.4.0' task populate_v2_4: :environment do # rubocop:disable Naming/VariableNumber - ActiveRecord::Base.connection.execute(<<~SQL) + ActiveRecord::Base.connection.execute(<<~SQL.squish) INSERT INTO "settings" (id, thing_type, thing_id, var, value, created_at, updated_at) VALUES From 470b8abb69670795f02325b450a10c63a3ca64af Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Sun, 30 Apr 2023 00:46:16 -0400 Subject: [PATCH 10/43] Run Rubocop with lint-staged on commit (#24644) --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 38323d925f..0460aa4f02 100644 --- a/package.json +++ b/package.json @@ -212,6 +212,7 @@ }, "lint-staged": { "*": "prettier --ignore-unknown --write", + "Capfile|Gemfile|*.{rb,ruby,ru,rake}": "bundle exec rubocop -a", "*.{js,jsx,ts,tsx}": "eslint --fix", "*.{css,scss}": "stylelint --fix" } From 6e226f5a32d74d848da7c79041a197d259ddc2ac Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 00:46:39 -0400 Subject: [PATCH 11/43] Fix Rails/ActionOrder cop (#24692) --- .rubocop_todo.yml | 26 ------------------- .../admin/announcements_controller.rb | 8 +++--- app/controllers/admin/roles_controller.rb | 8 +++--- app/controllers/admin/rules_controller.rb | 8 +++--- .../admin/warning_presets_controller.rb | 8 +++--- app/controllers/admin/webhooks_controller.rb | 16 ++++++------ .../api/v1/admin/domain_allows_controller.rb | 20 +++++++------- .../api/v1/admin/domain_blocks_controller.rb | 20 +++++++------- .../admin/email_domain_blocks_controller.rb | 18 ++++++------- .../api/v1/admin/ip_blocks_controller.rb | 14 +++++----- app/controllers/api/v1/filters_controller.rb | 8 +++--- app/controllers/api/v1/media_controller.rb | 8 +++--- .../api/v1/push/subscriptions_controller.rb | 8 +++--- .../api/v2/filters/keywords_controller.rb | 8 +++--- .../api/v2/filters/statuses_controller.rb | 8 +++--- app/controllers/api/v2/filters_controller.rb | 8 +++--- .../auth/registrations_controller.rb | 8 +++--- app/controllers/filters_controller.rb | 4 +-- .../settings/applications_controller.rb | 4 +-- .../webauthn_credentials_controller.rb | 3 +-- 20 files changed, 93 insertions(+), 120 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 172f44bad1..7a85031453 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1148,32 +1148,6 @@ RSpec/VerifiedDoubles: - 'spec/workers/feed_insert_worker_spec.rb' - 'spec/workers/regeneration_worker_spec.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: ExpectedOrder, Include. -# ExpectedOrder: index, show, new, edit, create, update, destroy -# Include: app/controllers/**/*.rb -Rails/ActionOrder: - Exclude: - - 'app/controllers/admin/announcements_controller.rb' - - 'app/controllers/admin/roles_controller.rb' - - 'app/controllers/admin/rules_controller.rb' - - 'app/controllers/admin/warning_presets_controller.rb' - - 'app/controllers/admin/webhooks_controller.rb' - - 'app/controllers/api/v1/admin/domain_allows_controller.rb' - - 'app/controllers/api/v1/admin/domain_blocks_controller.rb' - - 'app/controllers/api/v1/admin/email_domain_blocks_controller.rb' - - 'app/controllers/api/v1/admin/ip_blocks_controller.rb' - - 'app/controllers/api/v1/filters_controller.rb' - - 'app/controllers/api/v1/media_controller.rb' - - 'app/controllers/api/v1/push/subscriptions_controller.rb' - - 'app/controllers/api/v2/filters/keywords_controller.rb' - - 'app/controllers/api/v2/filters/statuses_controller.rb' - - 'app/controllers/api/v2/filters_controller.rb' - - 'app/controllers/auth/registrations_controller.rb' - - 'app/controllers/filters_controller.rb' - - 'app/controllers/settings/applications_controller.rb' - - 'app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: Include. # Include: app/models/**/*.rb diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb index 351b9a9910..8f9708183a 100644 --- a/app/controllers/admin/announcements_controller.rb +++ b/app/controllers/admin/announcements_controller.rb @@ -14,6 +14,10 @@ class Admin::AnnouncementsController < Admin::BaseController @announcement = Announcement.new end + def edit + authorize :announcement, :update? + end + def create authorize :announcement, :create? @@ -28,10 +32,6 @@ class Admin::AnnouncementsController < Admin::BaseController end end - def edit - authorize :announcement, :update? - end - def update authorize :announcement, :update? diff --git a/app/controllers/admin/roles_controller.rb b/app/controllers/admin/roles_controller.rb index d76aa745bd..bcfc11159c 100644 --- a/app/controllers/admin/roles_controller.rb +++ b/app/controllers/admin/roles_controller.rb @@ -16,6 +16,10 @@ module Admin @role = UserRole.new end + def edit + authorize @role, :update? + end + def create authorize :user_role, :create? @@ -30,10 +34,6 @@ module Admin end end - def edit - authorize @role, :update? - end - def update authorize @role, :update? diff --git a/app/controllers/admin/rules_controller.rb b/app/controllers/admin/rules_controller.rb index f3bed3ad8e..d31aec6ea8 100644 --- a/app/controllers/admin/rules_controller.rb +++ b/app/controllers/admin/rules_controller.rb @@ -11,6 +11,10 @@ module Admin @rule = Rule.new end + def edit + authorize @rule, :update? + end + def create authorize :rule, :create? @@ -24,10 +28,6 @@ module Admin end end - def edit - authorize @rule, :update? - end - def update authorize @rule, :update? diff --git a/app/controllers/admin/warning_presets_controller.rb b/app/controllers/admin/warning_presets_controller.rb index b376f8d9b1..efbf65b119 100644 --- a/app/controllers/admin/warning_presets_controller.rb +++ b/app/controllers/admin/warning_presets_controller.rb @@ -11,6 +11,10 @@ module Admin @warning_preset = AccountWarningPreset.new end + def edit + authorize @warning_preset, :update? + end + def create authorize :account_warning_preset, :create? @@ -24,10 +28,6 @@ module Admin end end - def edit - authorize @warning_preset, :update? - end - def update authorize @warning_preset, :update? diff --git a/app/controllers/admin/webhooks_controller.rb b/app/controllers/admin/webhooks_controller.rb index d6fb1a4eaf..1ed3fd18ab 100644 --- a/app/controllers/admin/webhooks_controller.rb +++ b/app/controllers/admin/webhooks_controller.rb @@ -10,12 +10,20 @@ module Admin @webhooks = Webhook.page(params[:page]) end + def show + authorize @webhook, :show? + end + def new authorize :webhook, :create? @webhook = Webhook.new end + def edit + authorize @webhook, :update? + end + def create authorize :webhook, :create? @@ -28,14 +36,6 @@ module Admin end end - def show - authorize @webhook, :show? - end - - def edit - authorize @webhook, :update? - end - def update authorize @webhook, :update? diff --git a/app/controllers/api/v1/admin/domain_allows_controller.rb b/app/controllers/api/v1/admin/domain_allows_controller.rb index 0658199f0f..61e1d481c7 100644 --- a/app/controllers/api/v1/admin/domain_allows_controller.rb +++ b/app/controllers/api/v1/admin/domain_allows_controller.rb @@ -16,6 +16,16 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController PAGINATION_PARAMS = %i(limit).freeze + def index + authorize :domain_allow, :index? + render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer + end + + def show + authorize @domain_allow, :show? + render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer + end + def create authorize :domain_allow, :create? @@ -29,16 +39,6 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer end - def index - authorize :domain_allow, :index? - render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer - end - - def show - authorize @domain_allow, :show? - render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer - end - def destroy authorize @domain_allow, :destroy? UnallowDomainService.new.call(@domain_allow) diff --git a/app/controllers/api/v1/admin/domain_blocks_controller.rb b/app/controllers/api/v1/admin/domain_blocks_controller.rb index 8b77e9717d..2538c7c7c2 100644 --- a/app/controllers/api/v1/admin/domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/domain_blocks_controller.rb @@ -16,6 +16,16 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController PAGINATION_PARAMS = %i(limit).freeze + def index + authorize :domain_block, :index? + render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer + end + + def show + authorize @domain_block, :show? + render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer + end + def create authorize :domain_block, :create? @@ -28,16 +38,6 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer end - def index - authorize :domain_block, :index? - render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer - end - - def show - authorize @domain_block, :show? - render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer - end - def update authorize @domain_block, :update? @domain_block.update!(domain_block_params) diff --git a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb index e53d0b1573..850eda6224 100644 --- a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb @@ -18,15 +18,6 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController limit ).freeze - def create - authorize :email_domain_block, :create? - - @email_domain_block = EmailDomainBlock.create!(resource_params) - log_action :create, @email_domain_block - - render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer - end - def index authorize :email_domain_block, :index? render json: @email_domain_blocks, each_serializer: REST::Admin::EmailDomainBlockSerializer @@ -37,6 +28,15 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer end + def create + authorize :email_domain_block, :create? + + @email_domain_block = EmailDomainBlock.create!(resource_params) + log_action :create, @email_domain_block + + render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer + end + def destroy authorize @email_domain_block, :destroy? @email_domain_block.destroy! diff --git a/app/controllers/api/v1/admin/ip_blocks_controller.rb b/app/controllers/api/v1/admin/ip_blocks_controller.rb index 201ab6b1ff..61c1912344 100644 --- a/app/controllers/api/v1/admin/ip_blocks_controller.rb +++ b/app/controllers/api/v1/admin/ip_blocks_controller.rb @@ -18,13 +18,6 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController limit ).freeze - def create - authorize :ip_block, :create? - @ip_block = IpBlock.create!(resource_params) - log_action :create, @ip_block - render json: @ip_block, serializer: REST::Admin::IpBlockSerializer - end - def index authorize :ip_block, :index? render json: @ip_blocks, each_serializer: REST::Admin::IpBlockSerializer @@ -35,6 +28,13 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController render json: @ip_block, serializer: REST::Admin::IpBlockSerializer end + def create + authorize :ip_block, :create? + @ip_block = IpBlock.create!(resource_params) + log_action :create, @ip_block + render json: @ip_block, serializer: REST::Admin::IpBlockSerializer + end + def update authorize @ip_block, :update? @ip_block.update(resource_params) diff --git a/app/controllers/api/v1/filters_controller.rb b/app/controllers/api/v1/filters_controller.rb index 772791b255..ed98acce30 100644 --- a/app/controllers/api/v1/filters_controller.rb +++ b/app/controllers/api/v1/filters_controller.rb @@ -11,6 +11,10 @@ class Api::V1::FiltersController < Api::BaseController render json: @filters, each_serializer: REST::V1::FilterSerializer end + def show + render json: @filter, serializer: REST::V1::FilterSerializer + end + def create ApplicationRecord.transaction do filter_category = current_account.custom_filters.create!(filter_params) @@ -20,10 +24,6 @@ class Api::V1::FiltersController < Api::BaseController render json: @filter, serializer: REST::V1::FilterSerializer end - def show - render json: @filter, serializer: REST::V1::FilterSerializer - end - def update ApplicationRecord.transaction do @filter.update!(keyword_params) diff --git a/app/controllers/api/v1/media_controller.rb b/app/controllers/api/v1/media_controller.rb index f9c935bf3e..7485438dbf 100644 --- a/app/controllers/api/v1/media_controller.rb +++ b/app/controllers/api/v1/media_controller.rb @@ -6,6 +6,10 @@ class Api::V1::MediaController < Api::BaseController before_action :set_media_attachment, except: [:create] before_action :check_processing, except: [:create] + def show + render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment + end + def create @media_attachment = current_account.media_attachments.create!(media_attachment_params) render json: @media_attachment, serializer: REST::MediaAttachmentSerializer @@ -15,10 +19,6 @@ class Api::V1::MediaController < Api::BaseController render json: processing_error, status: 500 end - def show - render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment - end - def update @media_attachment.update!(updateable_media_attachment_params) render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 7148d63a4e..3634acf956 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -6,6 +6,10 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController before_action :set_push_subscription before_action :check_push_subscription, only: [:show, :update] + def show + render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer + end + def create @push_subscription&.destroy! @@ -21,10 +25,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end - def show - render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer - end - def update @push_subscription.update!(data: data_params) render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer diff --git a/app/controllers/api/v2/filters/keywords_controller.rb b/app/controllers/api/v2/filters/keywords_controller.rb index c63e1d986b..fe1a991944 100644 --- a/app/controllers/api/v2/filters/keywords_controller.rb +++ b/app/controllers/api/v2/filters/keywords_controller.rb @@ -12,13 +12,13 @@ class Api::V2::Filters::KeywordsController < Api::BaseController render json: @keywords, each_serializer: REST::FilterKeywordSerializer end - def create - @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params) - + def show render json: @keyword, serializer: REST::FilterKeywordSerializer end - def show + def create + @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params) + render json: @keyword, serializer: REST::FilterKeywordSerializer end diff --git a/app/controllers/api/v2/filters/statuses_controller.rb b/app/controllers/api/v2/filters/statuses_controller.rb index 755c14cffa..2e95497a66 100644 --- a/app/controllers/api/v2/filters/statuses_controller.rb +++ b/app/controllers/api/v2/filters/statuses_controller.rb @@ -12,13 +12,13 @@ class Api::V2::Filters::StatusesController < Api::BaseController render json: @status_filters, each_serializer: REST::FilterStatusSerializer end - def create - @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params) - + def show render json: @status_filter, serializer: REST::FilterStatusSerializer end - def show + def create + @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params) + render json: @status_filter, serializer: REST::FilterStatusSerializer end diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb index 8ff3076cfb..2fcdeeae45 100644 --- a/app/controllers/api/v2/filters_controller.rb +++ b/app/controllers/api/v2/filters_controller.rb @@ -11,13 +11,13 @@ class Api::V2::FiltersController < Api::BaseController render json: @filters, each_serializer: REST::FilterSerializer, rules_requested: true end - def create - @filter = current_account.custom_filters.create!(resource_params) - + def show render json: @filter, serializer: REST::FilterSerializer, rules_requested: true end - def show + def create + @filter = current_account.custom_filters.create!(resource_params) + render json: @filter, serializer: REST::FilterSerializer, rules_requested: true end diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index f9d30c1ebd..b948cd1544 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -24,16 +24,16 @@ class Auth::RegistrationsController < Devise::RegistrationsController super(&:build_invite_request) end - def destroy - not_found - end - def update super do |resource| resource.clear_other_sessions(current_session.session_id) if resource.saved_change_to_encrypted_password? end end + def destroy + not_found + end + protected def update_resource(resource, params) diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index 1881dd5a0b..bbe177ead1 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -17,6 +17,8 @@ class FiltersController < ApplicationController @filter.keywords.build end + def edit; end + def create @filter = current_account.custom_filters.build(resource_params) @@ -27,8 +29,6 @@ class FiltersController < ApplicationController end end - def edit; end - def update if @filter.update(resource_params) redirect_to filters_path diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb index e6e137c2bc..d4b7205681 100644 --- a/app/controllers/settings/applications_controller.rb +++ b/app/controllers/settings/applications_controller.rb @@ -8,6 +8,8 @@ class Settings::ApplicationsController < Settings::BaseController @applications = current_user.applications.order(id: :desc).page(params[:page]) end + def show; end + def new @application = Doorkeeper::Application.new( redirect_uri: Doorkeeper.configuration.native_redirect_uri, @@ -15,8 +17,6 @@ class Settings::ApplicationsController < Settings::BaseController ) end - def show; end - def create @application = current_user.applications.build(application_params) diff --git a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb index d1ee7dc195..4007f13470 100644 --- a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb +++ b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb @@ -8,9 +8,8 @@ module Settings before_action :require_otp_enabled before_action :require_webauthn_enabled, only: [:index, :destroy] - def new; end - def index; end + def new; end def options current_user.update(webauthn_id: WebAuthn.generate_user_id) unless current_user.webauthn_id From bdc74086e6e7224117cfb46b1f5e7540c4580485 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 00:47:15 -0400 Subject: [PATCH 12/43] Fix Rails/ContentTag cop (#24691) --- .rubocop_todo.yml | 6 ------ app/helpers/application_helper.rb | 4 ++-- app/helpers/branding_helper.rb | 4 ++-- spec/views/statuses/show.html.haml_spec.rb | 12 ++++++------ 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 7a85031453..4da60ee240 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1213,12 +1213,6 @@ Rails/CompactBlank: - 'app/services/import_service.rb' - 'config/initializers/paperclip.rb' -# This cop supports safe autocorrection (--autocorrect). -Rails/ContentTag: - Exclude: - - 'app/helpers/application_helper.rb' - - 'app/helpers/branding_helper.rb' - # Configuration parameters: Include. # Include: db/migrate/*.rb Rails/CreateTableWithTimestamps: diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 1981188fb1..8de89a181c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -118,7 +118,7 @@ module ApplicationHelper end def check_icon - content_tag(:svg, tag(:path, 'fill-rule': 'evenodd', 'clip-rule': 'evenodd', d: 'M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z'), xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20', fill: 'currentColor') + content_tag(:svg, tag.path('fill-rule': 'evenodd', 'clip-rule': 'evenodd', d: 'M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z'), xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20', fill: 'currentColor') end def visibility_icon(status) @@ -152,7 +152,7 @@ module ApplicationHelper end def opengraph(property, content) - tag(:meta, content: content, property: property) + tag.meta(content: content, property: property) end def body_classes diff --git a/app/helpers/branding_helper.rb b/app/helpers/branding_helper.rb index 548c954110..2b9c233c23 100644 --- a/app/helpers/branding_helper.rb +++ b/app/helpers/branding_helper.rb @@ -11,11 +11,11 @@ module BrandingHelper end def _logo_as_symbol_wordmark - content_tag(:svg, tag(:use, href: '#logo-symbol-wordmark'), viewBox: '0 0 261 66', class: 'logo logo--wordmark') + content_tag(:svg, tag.use(href: '#logo-symbol-wordmark'), viewBox: '0 0 261 66', class: 'logo logo--wordmark') end def _logo_as_symbol_icon - content_tag(:svg, tag(:use, href: '#logo-symbol-icon'), viewBox: '0 0 79 79', class: 'logo logo--icon') + content_tag(:svg, tag.use(href: '#logo-symbol-icon'), viewBox: '0 0 79 79', class: 'logo logo--icon') end def render_logo diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index ca5bb2ae87..370743dfec 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -29,10 +29,10 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do header_tags = view.content_for(:header_tags) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) + expect(header_tags).to match(//) + expect(header_tags).to match(//) + expect(header_tags).to match(//) + expect(header_tags).to match(%r{}) end it 'has twitter player tag' do @@ -48,7 +48,7 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do header_tags = view.content_for(:header_tags) - expect(header_tags).to match(%r{}) - expect(header_tags).to match(%r{}) + expect(header_tags).to match(%r{}) + expect(header_tags).to match(//) end end From 5a2aa06a512bd0f7e1ce7138ca5171d116158cf4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 00:47:50 -0400 Subject: [PATCH 13/43] Fix Rails/Present cop (#24688) --- .rubocop_todo.yml | 6 ------ config/initializers/content_security_policy.rb | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 4da60ee240..b68d406601 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1399,12 +1399,6 @@ Rails/OutputSafety: Exclude: - 'config/initializers/simple_form.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank. -Rails/Present: - Exclude: - - 'config/initializers/content_security_policy.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Include. # Include: **/Rakefile, **/*.rake diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 96026ce3b7..f4f9177996 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -3,7 +3,7 @@ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy def host_to_url(str) - "http#{Rails.configuration.x.use_https ? 's' : ''}://#{str}" unless str.blank? + "http#{Rails.configuration.x.use_https ? 's' : ''}://#{str}" if str.present? end base_host = Rails.configuration.x.web_domain From 2e4346110062e300f576462c92f33721ba82e5b3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 00:48:16 -0400 Subject: [PATCH 14/43] Fix Rails/Output cop (#24687) --- .rubocop_todo.yml | 7 ------- lib/mastodon/ip_blocks_cli.rb | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index b68d406601..5d21adfbf5 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1388,13 +1388,6 @@ Rails/NegateInclude: - 'app/workers/web/push_notification_worker.rb' - 'lib/paperclip/color_extractor.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: Include. -# Include: app/**/*.rb, config/**/*.rb, db/**/*.rb, lib/**/*.rb -Rails/Output: - Exclude: - - 'lib/mastodon/ip_blocks_cli.rb' - Rails/OutputSafety: Exclude: - 'config/initializers/simple_form.rb' diff --git a/lib/mastodon/ip_blocks_cli.rb b/lib/mastodon/ip_blocks_cli.rb index 08939c0926..3b99595857 100644 --- a/lib/mastodon/ip_blocks_cli.rb +++ b/lib/mastodon/ip_blocks_cli.rb @@ -108,9 +108,9 @@ module Mastodon IpBlock.where(severity: :no_access).find_each do |ip_block| case options[:format] when 'nginx' - puts "deny #{ip_block.ip}/#{ip_block.ip.prefix};" + say "deny #{ip_block.ip}/#{ip_block.ip.prefix};" else - puts "#{ip_block.ip}/#{ip_block.ip.prefix}" + say "#{ip_block.ip}/#{ip_block.ip.prefix}" end end end From e8fe941015060b61385eed28d46a2fa5b7016610 Mon Sep 17 00:00:00 2001 From: Daniel M Brasil Date: Sun, 30 Apr 2023 01:50:58 -0300 Subject: [PATCH 15/43] Fix `tootctl accounts approve --number N` not aproving N earliest registrations (#24605) --- lib/mastodon/accounts_cli.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index ebfb609791..43269334a5 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -545,7 +545,7 @@ module Mastodon User.pending.find_each(&:approve!) say('OK', :green) elsif options[:number]&.positive? - User.pending.limit(options[:number]).each(&:approve!) + User.pending.order(created_at: :asc).limit(options[:number]).each(&:approve!) say('OK', :green) elsif username.present? account = Account.find_local(username) From 921bef67998f7fb0d268331ea9c48d818202c1fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:38:53 +0900 Subject: [PATCH 16/43] Bump stylelint from 15.3.0 to 15.6.0 (#24635) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 70 ++++++++++++++++++++++++++-------------------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 0460aa4f02..6946728ce1 100644 --- a/package.json +++ b/package.json @@ -196,7 +196,7 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^15.3.0", + "stylelint": "^15.6.0", "stylelint-config-standard-scss": "^7.0.1", "typescript": "^5.0.4", "webpack-dev-server": "^3.11.3", diff --git a/yarn.lock b/yarn.lock index 5aaa76a078..b3a969671f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1110,25 +1110,25 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/css-parser-algorithms@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz#ff02629c7c95d1f4f8ea84d5ef1173461610535e" - integrity sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw== - -"@csstools/css-tokenizer@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.0.tgz#fee4de3d444db3ce9007f3af6474af8ba3e4b930" - integrity sha512-dtqFyoJBHUxGi9zPZdpCKP1xk8tq6KPHJ/NY4qWXiYo6IcSGwzk3L8x2XzZbbyOyBs9xQARoGveU2AsgLj6D2A== - -"@csstools/media-query-list-parser@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.1.tgz#d85a366811563a5d002755ed10e5212a1613c91d" - integrity sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA== - -"@csstools/selector-specificity@^2.1.1": +"@csstools/css-parser-algorithms@^2.1.1": version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" - integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.1.1.tgz#7b62e6412a468a2d1096ed267edd1e4a7fd4a119" + integrity sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA== + +"@csstools/css-tokenizer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" + integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + +"@csstools/media-query-list-parser@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.4.tgz#466bd254041530dfd1e88bcb1921e8ca4af75b6a" + integrity sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA== + +"@csstools/selector-specificity@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== "@discoveryjs/json-ext@0.5.7": version "0.5.7" @@ -4186,7 +4186,7 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.1.0: +cosmiconfig@^8.1.3: version "8.1.3" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== @@ -6190,10 +6190,10 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-tags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== http-deceiver@^1.2.7: version "1.2.7" @@ -9233,7 +9233,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.2.15, postcss@^8.4.21, postcss@^8.4.23: +postcss@^8.2.15, postcss@^8.4.22, postcss@^8.4.23: version "8.4.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== @@ -11005,18 +11005,18 @@ stylelint-scss@^4.4.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^15.3.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.3.0.tgz#5f0f3264abeb29c54f571ea3f3934eba2c2be96d" - integrity sha512-9UYBYk7K9rtlKcTUDZrtntE840sZM00qyYBQHHe7tjwMNUsPsGvR6Fd43IxHEAhRrDLzpy3TVaHb6CReBB3eFg== +stylelint@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.6.0.tgz#1d76176dd8b6307bc4645e428ad18ddd15edbafc" + integrity sha512-Cqzpc8tvJm77KaM8qUbhpJ/UYK55Ia0whQXj4b9IId9dlPICO7J8Lyo15SZWiHxKjlvy3p5FQor/3n6i8ignXg== dependencies: - "@csstools/css-parser-algorithms" "^2.0.1" - "@csstools/css-tokenizer" "^2.1.0" - "@csstools/media-query-list-parser" "^2.0.1" - "@csstools/selector-specificity" "^2.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" + "@csstools/selector-specificity" "^2.2.0" balanced-match "^2.0.0" colord "^2.9.3" - cosmiconfig "^8.1.0" + cosmiconfig "^8.1.3" css-functions-list "^3.1.0" css-tree "^2.3.1" debug "^4.3.4" @@ -11026,7 +11026,7 @@ stylelint@^15.3.0: global-modules "^2.0.0" globby "^11.1.0" globjoin "^0.1.4" - html-tags "^3.2.0" + html-tags "^3.3.1" ignore "^5.2.4" import-lazy "^4.0.0" imurmurhash "^0.1.4" @@ -11037,7 +11037,7 @@ stylelint@^15.3.0: micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.21" + postcss "^8.4.22" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" From 819daeb6515f56b4526801286f95d8a49f5f382f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:39:49 +0900 Subject: [PATCH 17/43] Bump @types/lodash from 4.14.191 to 4.14.194 (#24576) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6946728ce1..41050dedb8 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,7 @@ "@types/intl": "^1.2.0", "@types/jest": "^29.4.2", "@types/js-yaml": "^4.0.5", - "@types/lodash": "^4.14.191", + "@types/lodash": "^4.14.194", "@types/npmlog": "^4.1.4", "@types/object-assign": "^4.0.30", "@types/pg": "^8.6.6", diff --git a/yarn.lock b/yarn.lock index b3a969671f..6119af915a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2093,10 +2093,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/lodash@^4.14.191": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== +"@types/lodash@^4.14.194": + version "4.14.194" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" + integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== "@types/mime@*": version "3.0.1" From fa14976a5d53c451b4400c9ddbfc29a5103228d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:45:02 +0900 Subject: [PATCH 18/43] Bump connection_pool from 2.3.0 to 2.4.0 (#24290) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claire --- app/lib/connection_pool/shared_connection_pool.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/lib/connection_pool/shared_connection_pool.rb b/app/lib/connection_pool/shared_connection_pool.rb index 2865a4108d..7415296525 100644 --- a/app/lib/connection_pool/shared_connection_pool.rb +++ b/app/lib/connection_pool/shared_connection_pool.rb @@ -37,7 +37,17 @@ class ConnectionPool::SharedConnectionPool < ConnectionPool end def checkin(preferred_tag) - if ::Thread.current[key(preferred_tag)] + if preferred_tag.is_a?(Hash) && preferred_tag[:force] + # ConnectionPool 2.4+ calls `checkin(force: true)` after fork. + # When this happens, we should remove all connections from Thread.current + + ::Thread.current.keys.each do |name| # rubocop:disable Style/HashEachMethods + next unless name.to_s.start_with?("#{@key}-") + + @available.push(::Thread.current[name]) + ::Thread.current[name] = nil + end + elsif ::Thread.current[key(preferred_tag)] if ::Thread.current[key_count(preferred_tag)] == 1 @available.push(::Thread.current[key(preferred_tag)]) ::Thread.current[key(preferred_tag)] = nil From 56cf0920586e01279618ce82f87848b5ad3a7cb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:46:03 +0900 Subject: [PATCH 19/43] Bump @types/yargs from 17.0.22 to 17.0.24 (#24388) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 ++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 41050dedb8..3ba34fa9b8 100644 --- a/package.json +++ b/package.json @@ -176,7 +176,7 @@ "@types/requestidlecallback": "^0.3.5", "@types/uuid": "^8.3.4", "@types/webpack": "^4.41.33", - "@types/yargs": "^17.0.22", + "@types/yargs": "^17.0.24", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "babel-jest": "^29.5.0", diff --git a/yarn.lock b/yarn.lock index 6119af915a..08c09b9d42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2485,17 +2485,10 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^17.0.22": - version "17.0.22" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" - integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== +"@types/yargs@^17.0.24", "@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" From 242d7864f1cf51d38931a92ee068c19385a72342 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Apr 2023 16:00:48 +0900 Subject: [PATCH 20/43] Bump @types/jest from 29.4.2 to 29.5.1 (#24630) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 73 ++++------------------------------------------------ 2 files changed, 6 insertions(+), 69 deletions(-) diff --git a/package.json b/package.json index 3ba34fa9b8..831b027e89 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "@types/express": "^4.17.17", "@types/http-link-header": "^1.0.3", "@types/intl": "^1.2.0", - "@types/jest": "^29.4.2", + "@types/jest": "^29.5.1", "@types/js-yaml": "^4.0.5", "@types/lodash": "^4.14.194", "@types/npmlog": "^4.1.4", diff --git a/yarn.lock b/yarn.lock index 08c09b9d42..b4d9924e7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1553,16 +1553,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - "@jest/types@^27.0.2": version "27.2.5" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.5.tgz#420765c052605e75686982d24b061b4cbba22132" @@ -2028,14 +2018,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" @@ -2043,18 +2025,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": - version "26.0.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.3.tgz#79534e0e94857171c0edc596db0ebe7cb7863251" - integrity sha512-v89ga1clpVL/Y1+YI0eIu1VMW+KU7Xl8PhylVtDKVWaSUHBHYPLXMQGBdrpHewaKoTvlXkksbYqPgz8b4cmRZg== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/jest@^29.4.2": - version "29.4.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.2.tgz#13ca45d528a0f81a4792b7df199f58ad46c2a0e3" - integrity sha512-bbne90W7is+m88ezmZrLiTpp41tIoTdvPC5t3gLoNgu/6qbGdWTC2JWqPWQRJn2Q7rVYTr8aTWqOjhGJDXyvAQ== +"@types/jest@*", "@types/jest@^29.5.1": + version "29.5.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.1.tgz#83c818aa9a87da27d6da85d3378e5a34d2f31a47" + integrity sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2471,13 +2445,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== -"@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.3" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" @@ -4667,11 +4634,6 @@ detect-passive-events@^2.0.3: dependencies: detect-it "^4.0.1" -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -7050,16 +7012,6 @@ jest-config@^29.5.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^25.2.1: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-diff@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" @@ -7114,11 +7066,6 @@ jest-environment-node@^29.5.0: jest-mock "^29.5.0" jest-util "^29.5.0" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - jest-get-type@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" @@ -9277,16 +9224,6 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - pretty-format@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4" @@ -9557,7 +9494,7 @@ react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.6: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== From 0669822ae89384586ccb455c3206e1a6bb297d41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Apr 2023 16:01:11 +0900 Subject: [PATCH 21/43] Bump eslint from 8.38.0 to 8.39.0 (#24636) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 831b027e89..e146a3f4a0 100644 --- a/package.json +++ b/package.json @@ -180,7 +180,7 @@ "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "babel-jest": "^29.5.0", - "eslint": "^8.38.0", + "eslint": "^8.39.0", "eslint-plugin-formatjs": "^4.9.0", "eslint-plugin-import": "~2.27.5", "eslint-plugin-jsdoc": "^43.1.1", diff --git a/yarn.lock b/yarn.lock index b4d9924e7c..2237808626 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1254,10 +1254,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.38.0": - version "8.38.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" - integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== +"@eslint/js@8.39.0": + version "8.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" + integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== "@floating-ui/core@^1.0.1": version "1.0.1" @@ -5146,10 +5146,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -5159,15 +5159,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@^8.38.0: - version "8.38.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" - integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== +eslint@^8.39.0: + version "8.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" + integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.38.0" + "@eslint/js" "8.39.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -5177,7 +5177,7 @@ eslint@^8.38.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" + eslint-scope "^7.2.0" eslint-visitor-keys "^3.4.0" espree "^9.5.1" esquery "^1.4.2" From 8f6e290c7abf0c9792643142991c9deaa700af6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Marques?= <64037198+TheDevJoao@users.noreply.github.com> Date: Sun, 30 Apr 2023 04:01:42 -0300 Subject: [PATCH 22/43] Adds new follower/following routes (#24601) --- config/routes.rb | 2 ++ spec/requests/follower_accounts_spec.rb | 13 +++++++++++++ spec/requests/following_accounts_spec.rb | 13 +++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 spec/requests/follower_accounts_spec.rb create mode 100644 spec/requests/following_accounts_spec.rb diff --git a/config/routes.rb b/config/routes.rb index 3be088cee6..c09c5175a2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -83,6 +83,8 @@ Rails.application.routes.draw do } get '/users/:username', to: redirect('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? } + get '/users/:username/following', to: redirect('/@%{username}/following'), constraints: lambda { |req| req.format.nil? || req.format.html? } + get '/users/:username/followers', to: redirect('/@%{username}/followers'), constraints: lambda { |req| req.format.nil? || req.format.html? } get '/users/:username/statuses/:id', to: redirect('/@%{username}/%{id}'), constraints: lambda { |req| req.format.nil? || req.format.html? } get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" } diff --git a/spec/requests/follower_accounts_spec.rb b/spec/requests/follower_accounts_spec.rb new file mode 100644 index 0000000000..52e86e13fe --- /dev/null +++ b/spec/requests/follower_accounts_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'FollowerAccountsController' do + describe 'The follower_accounts route' do + it "returns a http 'moved_permanently' code" do + get '/users/:username/followers' + + expect(response).to have_http_status(301) + end + end +end diff --git a/spec/requests/following_accounts_spec.rb b/spec/requests/following_accounts_spec.rb new file mode 100644 index 0000000000..f0955ceb36 --- /dev/null +++ b/spec/requests/following_accounts_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'FollowingAccountsController' do + describe 'The following_accounts route' do + it "returns a http 'moved_permanently' code" do + get '/users/:username/following' + + expect(response).to have_http_status(301) + end + end +end From c23d285b16ba94d5e54d0a7aedf38262bc0f3054 Mon Sep 17 00:00:00 2001 From: Mark Roszko Date: Sun, 30 Apr 2023 03:33:37 -0400 Subject: [PATCH 23/43] Remove the u in Favorite for non-gb english (#24667) Co-authored-by: Yamagishi Kazutoshi --- config/locales/en.yml | 26 ++++++++++++------------ spec/mailers/notification_mailer_spec.rb | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index e5b30d7e38..ddefbc49b1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -771,7 +771,7 @@ en: remove_from_report: Remove from report report: Report deleted: Deleted - favourites: Favourites + favourites: Favorites history: Version history in_reply_to: Replying to language: Language @@ -852,14 +852,14 @@ en: statuses: allow: Allow post allow_account: Allow author - description_html: These are posts that your server knows about that are currently being shared and favourited a lot at the moment. It can help your new and returning users to find more people to follow. No posts are displayed publicly until you approve the author, and the author allows their account to be suggested to others. You can also allow or reject individual posts. + description_html: These are posts that your server knows about that are currently being shared and favorited a lot at the moment. It can help your new and returning users to find more people to follow. No posts are displayed publicly until you approve the author, and the author allows their account to be suggested to others. You can also allow or reject individual posts. disallow: Disallow post disallow_account: Disallow author no_status_selected: No trending posts were changed as none were selected not_discoverable: Author has not opted-in to being discoverable shared_by: - one: Shared or favourited one time - other: Shared and favourited %{friendly_count} times + one: Shared or favorited one time + other: Shared and favorited %{friendly_count} times title: Trending posts tags: current_score: Current score %{score} @@ -1337,9 +1337,9 @@ en: sign_up: subject: "%{name} signed up" favourite: - body: 'Your post was favourited by %{name}:' - subject: "%{name} favourited your post" - title: New favourite + body: 'Your post was favorited by %{name}:' + subject: "%{name} favorited your post" + title: New favorite follow: body: "%{name} is now following you!" subject: "%{name} is now following you" @@ -1572,10 +1572,10 @@ en: enabled_hint: Automatically deletes your posts once they reach a specified age threshold, unless they match one of the exceptions below exceptions: Exceptions explanation: Because deleting posts is an expensive operation, this is done slowly over time when the server is not otherwise busy. For this reason, your posts may be deleted a while after they reach the age threshold. - ignore_favs: Ignore favourites + ignore_favs: Ignore favorites ignore_reblogs: Ignore boosts interaction_exceptions: Exceptions based on interactions - interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favourite or boost threshold after having once gone over them. + interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favorite or boost threshold after having once gone over them. keep_direct: Keep direct messages keep_direct_hint: Doesn't delete any of your direct messages keep_media: Keep posts with media attachments @@ -1586,8 +1586,8 @@ en: keep_polls_hint: Doesn't delete any of your polls keep_self_bookmark: Keep posts you bookmarked keep_self_bookmark_hint: Doesn't delete your own posts if you have bookmarked them - keep_self_fav: Keep posts you favourited - keep_self_fav_hint: Doesn't delete your own posts if you have favourited them + keep_self_fav: Keep posts you favorited + keep_self_fav_hint: Doesn't delete your own posts if you have favorited them min_age: '1209600': 2 weeks '15778476': 6 months @@ -1598,8 +1598,8 @@ en: '63113904': 2 years '7889238': 3 months min_age_label: Age threshold - min_favs: Keep posts favourited at least - min_favs_hint: Doesn't delete any of your posts that has received at least this number of favourites. Leave blank to delete posts regardless of their number of favourites + min_favs: Keep posts favorited at least + min_favs_hint: Doesn't delete any of your posts that has received at least this number of favorites. Leave blank to delete posts regardless of their number of favorites min_reblogs: Keep posts boosted at least min_reblogs_hint: Doesn't delete any of your posts that has been boosted at least this number of times. Leave blank to delete posts regardless of their number of boosts stream_entries: diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 341fe6f233..ab98bac388 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -61,12 +61,12 @@ RSpec.describe NotificationMailer, type: :mailer do include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob' it 'renders the headers' do - expect(mail.subject).to eq('bob favourited your post') + expect(mail.subject).to eq('bob favorited your post') expect(mail[:to].value).to eq("#{receiver.account.username} <#{receiver.email}>") end it 'renders the body' do - expect(mail.body.encoded).to match('Your post was favourited by bob') + expect(mail.body.encoded).to match('Your post was favorited by bob') expect(mail.body.encoded).to include 'The body of the own status' end end From 0a08e9d3d37d85cd3855f8e42745033176aa7844 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 30 Apr 2023 10:02:11 +0200 Subject: [PATCH 24/43] New Crowdin updates (#24678) Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 3 +- app/javascript/mastodon/locales/an.json | 3 +- app/javascript/mastodon/locales/ar.json | 3 +- app/javascript/mastodon/locales/ast.json | 3 +- app/javascript/mastodon/locales/be.json | 31 +++++----- app/javascript/mastodon/locales/bg.json | 11 ++-- app/javascript/mastodon/locales/bn.json | 3 +- app/javascript/mastodon/locales/br.json | 3 +- app/javascript/mastodon/locales/bs.json | 3 +- app/javascript/mastodon/locales/ca.json | 3 +- app/javascript/mastodon/locales/ckb.json | 3 +- app/javascript/mastodon/locales/co.json | 3 +- app/javascript/mastodon/locales/cs.json | 3 +- app/javascript/mastodon/locales/cy.json | 59 ++++++++++---------- app/javascript/mastodon/locales/da.json | 3 +- app/javascript/mastodon/locales/de.json | 7 ++- app/javascript/mastodon/locales/el.json | 3 +- app/javascript/mastodon/locales/en-GB.json | 3 +- app/javascript/mastodon/locales/eo.json | 3 +- app/javascript/mastodon/locales/es-AR.json | 3 +- app/javascript/mastodon/locales/es-MX.json | 3 +- app/javascript/mastodon/locales/es.json | 17 +++--- app/javascript/mastodon/locales/et.json | 3 +- app/javascript/mastodon/locales/eu.json | 49 ++++++++-------- app/javascript/mastodon/locales/fa.json | 3 +- app/javascript/mastodon/locales/fi.json | 3 +- app/javascript/mastodon/locales/fo.json | 3 +- app/javascript/mastodon/locales/fr-QC.json | 3 +- app/javascript/mastodon/locales/fr.json | 3 +- app/javascript/mastodon/locales/fy.json | 3 +- app/javascript/mastodon/locales/ga.json | 5 +- app/javascript/mastodon/locales/gd.json | 3 +- app/javascript/mastodon/locales/gl.json | 3 +- app/javascript/mastodon/locales/he.json | 3 +- app/javascript/mastodon/locales/hi.json | 3 +- app/javascript/mastodon/locales/hr.json | 3 +- app/javascript/mastodon/locales/hu.json | 23 ++++---- app/javascript/mastodon/locales/hy.json | 3 +- app/javascript/mastodon/locales/id.json | 3 +- app/javascript/mastodon/locales/ig.json | 3 +- app/javascript/mastodon/locales/io.json | 3 +- app/javascript/mastodon/locales/is.json | 3 +- app/javascript/mastodon/locales/it.json | 3 +- app/javascript/mastodon/locales/ja.json | 9 +-- app/javascript/mastodon/locales/ka.json | 3 +- app/javascript/mastodon/locales/kab.json | 3 +- app/javascript/mastodon/locales/kk.json | 3 +- app/javascript/mastodon/locales/kn.json | 3 +- app/javascript/mastodon/locales/ko.json | 3 +- app/javascript/mastodon/locales/ku.json | 3 +- app/javascript/mastodon/locales/kw.json | 3 +- app/javascript/mastodon/locales/la.json | 3 +- app/javascript/mastodon/locales/lt.json | 3 +- app/javascript/mastodon/locales/lv.json | 3 +- app/javascript/mastodon/locales/mk.json | 3 +- app/javascript/mastodon/locales/ml.json | 3 +- app/javascript/mastodon/locales/mr.json | 3 +- app/javascript/mastodon/locales/ms.json | 3 +- app/javascript/mastodon/locales/my.json | 19 ++++--- app/javascript/mastodon/locales/nl.json | 3 +- app/javascript/mastodon/locales/nn.json | 3 +- app/javascript/mastodon/locales/no.json | 45 +++++++-------- app/javascript/mastodon/locales/oc.json | 3 +- app/javascript/mastodon/locales/pa.json | 3 +- app/javascript/mastodon/locales/pl.json | 11 ++-- app/javascript/mastodon/locales/pt-BR.json | 3 +- app/javascript/mastodon/locales/pt-PT.json | 59 ++++++++++---------- app/javascript/mastodon/locales/ro.json | 3 +- app/javascript/mastodon/locales/ru.json | 13 +++-- app/javascript/mastodon/locales/sa.json | 3 +- app/javascript/mastodon/locales/sc.json | 3 +- app/javascript/mastodon/locales/sco.json | 3 +- app/javascript/mastodon/locales/si.json | 3 +- app/javascript/mastodon/locales/sk.json | 3 +- app/javascript/mastodon/locales/sl.json | 3 +- app/javascript/mastodon/locales/sq.json | 37 ++++++------ app/javascript/mastodon/locales/sr-Latn.json | 3 +- app/javascript/mastodon/locales/sr.json | 13 +++-- app/javascript/mastodon/locales/sv.json | 7 ++- app/javascript/mastodon/locales/szl.json | 3 +- app/javascript/mastodon/locales/ta.json | 3 +- app/javascript/mastodon/locales/tai.json | 3 +- app/javascript/mastodon/locales/te.json | 3 +- app/javascript/mastodon/locales/th.json | 3 +- app/javascript/mastodon/locales/tr.json | 3 +- app/javascript/mastodon/locales/tt.json | 3 +- app/javascript/mastodon/locales/ug.json | 3 +- app/javascript/mastodon/locales/uk.json | 11 ++-- app/javascript/mastodon/locales/ur.json | 3 +- app/javascript/mastodon/locales/uz.json | 3 +- app/javascript/mastodon/locales/vi.json | 3 +- app/javascript/mastodon/locales/zgh.json | 3 +- app/javascript/mastodon/locales/zh-CN.json | 25 +++++---- app/javascript/mastodon/locales/zh-HK.json | 3 +- app/javascript/mastodon/locales/zh-TW.json | 3 +- config/locales/ga.yml | 2 + config/locales/pl.yml | 2 + config/locales/simple_form.ga.yml | 12 ++-- config/locales/simple_form.vi.yml | 1 + config/locales/sq.yml | 13 +++++ config/locales/sv.yml | 9 +++ config/locales/vi.yml | 13 +++++ 102 files changed, 433 insertions(+), 298 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 351a6e0f91..bc664c4a8e 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Soekresultate", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index ac6616c433..d9dd060e7f 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar lo seguimiento de pila en o portafuellas", "errors.unexpected_crash.report_issue": "Informar d'un problema/error", "explore.search_results": "Resultaus de busqueda", - "explore.suggested_follows": "Pa tu", + "explore.suggested_follows": "People", "explore.title": "Explorar", "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicacions", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 42cda7c9c6..093506dda1 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", "explore.search_results": "نتائج البحث", - "explore.suggested_follows": "لك", + "explore.suggested_follows": "People", "explore.title": "استكشف", "explore.trending_links": "الأخبار", "explore.trending_statuses": "المنشورات", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index bb4cb4f80f..9cf965baa4 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Resultaos de la busca", - "explore.suggested_follows": "Pa ti", + "explore.suggested_follows": "People", "explore.title": "Esploración", "explore.trending_links": "Noticies", "explore.trending_statuses": "Artículos", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 84eb132443..b58f8e49ce 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -182,7 +182,7 @@ "conversation.with": "З {names}", "copypaste.copied": "Скапіравана", "copypaste.copy": "Скапіраваць", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Капіраваць у буфер абмену", "directory.federated": "З вядомага федэсвету", "directory.local": "Толькі з {domain}", "directory.new_arrivals": "Новыя карыстальнікі", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену", "errors.unexpected_crash.report_issue": "Паведаміць аб праблеме", "explore.search_results": "Вынікі пошуку", - "explore.suggested_follows": "Для вас", + "explore.suggested_follows": "People", "explore.title": "Агляд", "explore.trending_links": "Навіны", "explore.trending_statuses": "Допісы", @@ -440,21 +440,22 @@ "notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале", "notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.", "notifications_permission_banner.title": "Не прапусціце нічога", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", + "onboarding.action.back": "Прыняць мяне назад", + "onboarding.actions.back": "Прыняць мяне назад", + "onboarding.actions.close": "Больш не паказваць гэты экран", + "onboarding.actions.go_to_explore": "Паглядзіце, што ў трэндзе", + "onboarding.actions.go_to_home": "Перайдзіце на свой хатні канал", + "onboarding.compose.template": "Hello #Mastodon!", + "onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.", + "onboarding.follows.lead": "Вы самі ствараеце свой хатні канал. Чым больш людзей вы падпішаце, тым больш актыўна і цікавей гэта будзе. Гэтыя профілі могуць стаць добрай адпраўной кропкай — вы заўсёды можаце адмяніць падпіску на іх пазней!", + "onboarding.follows.title": "Папулярна на Mastodon", + "onboarding.share.lead": "Дайце людзям ведаць, як яны могуць знайсці вас на Mastodon!", + "onboarding.share.message": "Я {username} на #Mastodon! Сачыце за мной на {url}", + "onboarding.share.next_steps": "Магчымыя наступныя крокі:", + "onboarding.share.title": "Падзяліцеся сваім профілем", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", + "onboarding.start.title": "Вы зрабілі гэта!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 1865dcb839..844473ed33 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет", "errors.unexpected_crash.report_issue": "Сигнал за проблем", "explore.search_results": "Резултати от търсенето", - "explore.suggested_follows": "За вас", + "explore.suggested_follows": "Хора", "explore.title": "Разглеждане", "explore.trending_links": "Новини", "explore.trending_statuses": "Публикации", @@ -445,11 +445,12 @@ "onboarding.actions.close": "Без показване пак на този екран", "onboarding.actions.go_to_explore": "Вижте какво изгрява", "onboarding.actions.go_to_home": "Към началния ви инфоканал", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Здравейте, #Mastodon!", + "onboarding.follows.empty": "За съжаление, в момента не могат да се показват резултати. Може да опитате да употребявате търсене или да прегледате страницата за изследване, за да намерите страница за последване, или да опитате пак по-късно.", "onboarding.follows.lead": "Може да бъдете куратор на началния си инфоканал. Последвайки повече хора, по-деен и по-интересен ще става. Тези профили може да са добра начална точка, от която винаги по-късно да спрете да следвате!", "onboarding.follows.title": "Популярно в Mastodon", "onboarding.share.lead": "Позволете на хората да знаят, че могат да ви намерят в Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Аз съм {username} в #Mastodon! Елате да ме последвате при {url}", "onboarding.share.next_steps": "Възможни следващи стъпки:", "onboarding.share.title": "Споделяне на профила ви", "onboarding.start.lead": "Вашият нов акаунт в Mastodon е готов за употреба. Ето как може да се възползвате по най-добрия начин от него:", @@ -463,9 +464,9 @@ "onboarding.steps.setup_profile.title": "Пригодете профила си", "onboarding.steps.share_profile.body": "Позволете на приятелите си да знаят как да ви намират в Mastodon!", "onboarding.steps.share_profile.title": "Споделяне на профила ви", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Знаете ли, че? Може да защитите акаунта си, настройвайки двуфакторното удостоверяване в настройките на акаунта си. То работи с всяко приложение TOTP по ваш избор, не е необходим номер телефона!", "onboarding.tips.accounts_from_other_servers": "Знаете ли, че? Откак Mastodon е децентрализиран, някои профили, които срещате ще бъдат разположени на сървъри различен от вашия. И още може да взаимодействате с тях безпроблемно! Сървърът им е втората половина от потребителското им име!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", + "onboarding.tips.migration": "Знаете ли, че? Ако се чувствате, че {domain} не е чудесен избор на сървър в бъдуще, може да се преместите на друг сървър на Mastodon без да загубите последователите си. Дори може да сте съдържатели на свой собствен сървър!", "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", "password_confirmation.exceeds_maxlength": "Потвърждаването на паролата превишава максимално допустимата дължина за парола", "password_confirmation.mismatching": "Потвърждаването на паролата не съвпада", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 899994c9e3..b26cfab756 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "সংবাদ", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 18f0065a5f..1c697daa64 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", "explore.search_results": "Disoc'hoù an enklask", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Furchal", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/bs.json b/app/javascript/mastodon/locales/bs.json index 7bb07b7b0d..01db7ea7d7 100644 --- a/app/javascript/mastodon/locales/bs.json +++ b/app/javascript/mastodon/locales/bs.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5e660a4892..17d676d299 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", "explore.search_results": "Resultats de la cerca", - "explore.suggested_follows": "Per a tu", + "explore.suggested_follows": "Persones", "explore.title": "Explora", "explore.trending_links": "Notícies", "explore.trending_statuses": "Tuts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "No tornis a mostrar aquesta pantalla", "onboarding.actions.go_to_explore": "Mira què és tendència", "onboarding.actions.go_to_home": "Vés a la teva línia de temps inici", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Malauradament, cap resultat pot ser mostrat ara mateix. Pots provar de fer servir la cerca o visitar la pàgina Explora per a trobar gent a qui seguir o provar-ho de nou més tard.", "onboarding.follows.lead": "Tu tens cura de la teva línia de temps inici. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant-los de seguir!", "onboarding.follows.title": "Popular a Mastodon", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index a8bb16a8b8..a58ea542f4 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد", "errors.unexpected_crash.report_issue": "کێشەی گوزارشت", "explore.search_results": "ئەنجامەکانی گەڕان", - "explore.suggested_follows": "بۆ تۆ", + "explore.suggested_follows": "People", "explore.title": "گەڕان", "explore.trending_links": "هەواڵەکان", "explore.trending_statuses": "بڵاوکراوەکان", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 36aed38209..f509e23941 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", "errors.unexpected_crash.report_issue": "Palisà prublemu", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1a9a4b5200..8d6dfdbdf2 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásit problém", "explore.search_results": "Výsledky hledání", - "explore.suggested_follows": "Pro vás", + "explore.suggested_follows": "People", "explore.title": "Objevit", "explore.trending_links": "Zprávy", "explore.trending_statuses": "Příspěvky", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Příště nezobrazovat tuto obrazovku", "onboarding.actions.go_to_explore": "Podívejte se, co je populární", "onboarding.actions.go_to_home": "Přejít na svůj domovský feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Populární na Mastodonu", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 490fdd2e36..82e5aafb6a 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -182,7 +182,7 @@ "conversation.with": "Gyda {names}", "copypaste.copied": "Wedi ei gopïo", "copypaste.copy": "Copïo", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Copïo i'r clipfwrdd", "directory.federated": "O'r ffedysawd cyfan", "directory.local": "O {domain} yn unig", "directory.new_arrivals": "Defnyddwyr newydd", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", "explore.search_results": "Canlyniadau chwilio", - "explore.suggested_follows": "I chi", + "explore.suggested_follows": "Pobl", "explore.title": "Darganfod", "explore.trending_links": "Newyddion", "explore.trending_statuses": "Postiadau", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith", "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddant wedi'u galluogi.", "notifications_permission_banner.title": "Peidiwch colli dim", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", - "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.action.back": "Ewch â fi yn ôl", + "onboarding.actions.back": "Ewch â fi yn ôl", + "onboarding.actions.close": "Peidio â dangos y sgrin hon eto", + "onboarding.actions.go_to_explore": "Gweld beth yw'r tuedd", + "onboarding.actions.go_to_home": "Ewch i'ch ffrwd gartref", + "onboarding.compose.template": "Helo, #Mastodon!", + "onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.", + "onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen!", + "onboarding.follows.title": "Yn boblogaidd ar Mastodon", + "onboarding.share.lead": "Cofiwch ddweud wrth bobl sut y gallan nhw ddod o hyd i chi ar Mastodon!", + "onboarding.share.message": "Fi yw {username} ar #Mastodon! Dewch i'm dilyn i yn {url}", + "onboarding.share.next_steps": "Camau nesaf posib:", + "onboarding.share.title": "Rhannwch eich proffil", + "onboarding.start.lead": "Mae eich cyfrif Mastodon newydd yn barod! Dyma sut y gallwch chi wneud y gorau ohono:", + "onboarding.start.skip": "Eisiau mynd syth yn eich blaen?", + "onboarding.start.title": "Rydych chi wedi cyrraedd!", + "onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.", + "onboarding.steps.follow_people.title": "Dilynwch {count, plural, one {one person} other {# people}}", + "onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd.", + "onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf", + "onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.", + "onboarding.steps.setup_profile.title": "Cyfaddaswch eich proffil", + "onboarding.steps.share_profile.body": "Gadewch i'ch ffrindiau wybod sut i ddod o hyd i chi ar Mastodon!", + "onboarding.steps.share_profile.title": "Rhannwch eich proffil", + "onboarding.tips.2fa": "Oeddech chi'n gwybod? Gallwch ddiogelu'ch cyfrif trwy osod dilysiad dau ffactor yng ngosodiadau eich cyfrif. Mae'n gweithio gydag unrhyw app TOTP o'ch dewis, nid oes angen rhif ffôn!", + "onboarding.tips.accounts_from_other_servers": "Oeddech chi'n gwybod? Gan fod Mastodon wedi'i ddatganoli, bydd rhai proffiliau y dewch ar eu traws yn cael eu cynnal ar weinyddion heblaw eich un chi. Ac eto gallwch chi ryngweithio â nhw yn hawdd! Mae eu gweinydd yn ail hanner eu henw defnyddiwr!", + "onboarding.tips.migration": "Oeddech chi'n gwybod? Os ydych chi'n teimlo nad yw {domain} yn ddewis gweinydd gwych i chi i'r dyfodol, gallwch chi symud i weinydd Mastodon arall heb golli'ch dilynwyr. Gallwch chi hyd yn oed gynnal eich gweinydd eich hun!", + "onboarding.tips.verification": "Oeddech chi'n gwybod? Gallwch wirio'ch cyfrif trwy roi dolen i'ch proffil Mastodon ar eich gwefan eich hun ac ychwanegu'r wefan at eich proffil. Nid oes angen ffioedd na dogfennau!", "password_confirmation.exceeds_maxlength": "Mae'r cadarnhad cyfrinair yn fwy nag uchafswm hyd y cyfrinair", "password_confirmation.mismatching": "Nid yw'r cadarnhad cyfrinair yn cyfateb", "picture_in_picture.restore": "Rhowch ef yn ôl", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index e1850ba854..205f2a8136 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen", "errors.unexpected_crash.report_issue": "Anmeld problem", "explore.search_results": "Søgeresultater", - "explore.suggested_follows": "Til dig", + "explore.suggested_follows": "People", "explore.title": "Udforsk", "explore.trending_links": "Nyheder", "explore.trending_statuses": "Indlæg", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Vis ikke denne skærm igen", "onboarding.actions.go_to_explore": "Se, hvad som trender", "onboarding.actions.go_to_home": "Gå til hjemme-feed'et", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Ingen resultater tilgængelige pt. Prøv at bruge søgning eller gennemse siden for at finde personer at følge, eller forsøg igen senere.", "onboarding.follows.lead": "Man kurerer sin eget hjemme-feed. Jo flere personer man følger, des mere aktiv og interessant vil det være. Disse profiler kan være et godt udgangspunkt – de kan altid fjernes senere!", "onboarding.follows.title": "Populært på Mastodon", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index bfd3c0b43f..461470fe68 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -218,7 +218,7 @@ "empty_column.blocks": "Du hast bisher keine Profile gesperrt.", "empty_column.bookmarked_statuses": "Du hast bisher keine Beiträge als Lesezeichen abgelegt. Sobald du einen Beitrag als Lesezeichen speicherst, wird er hier erscheinen.", "empty_column.community": "Die lokale Timeline ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!", - "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Sobald du eine private Nachricht sendest oder empfängst, wird sie hier zu sehen sein.", + "empty_column.direct": "Du hast noch keine Direktnachrichten. Sobald du eine Nachricht sendest oder empfängst, wird sie hier zu sehen sein.", "empty_column.domain_blocks": "Du hast noch keine Domains gesperrt.", "empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder vorbei!", "empty_column.favourited_statuses": "Du hast noch keine Beiträge favorisiert. Sobald du einen favorisierst, wird er hier erscheinen.", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Fehlerdiagnose in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Fehler melden", "explore.search_results": "Suchergebnisse", - "explore.suggested_follows": "Für dich", + "explore.suggested_follows": "Profile", "explore.title": "Entdecken", "explore.trending_links": "Neuigkeiten", "explore.trending_statuses": "Beiträge", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Diese Seite nicht mehr anzeigen", "onboarding.actions.go_to_explore": "Sieh, was gerade angesagt ist", "onboarding.actions.go_to_home": "Gehe zu deiner Startseite", + "onboarding.compose.template": "Hallo #Mastodon!", "onboarding.follows.empty": "Bedauerlicherweise können aktuell keine Ergebnisse angezeigt werden. Du kannst die Suche verwenden oder den Reiter „Entdecken“ auswählen, um neue Leute zum Folgen zu finden – oder du versuchst es später erneut.", "onboarding.follows.lead": "Du verwaltest deine eigene Startseite. Je mehr Leuten du folgst, desto aktiver und interessanter wird sie sein. Diese Profile können ein guter Start sein – du kannst ihnen später immer noch entfolgen!", "onboarding.follows.title": "Beliebt auf Mastodon", @@ -461,7 +462,7 @@ "onboarding.steps.publish_status.title": "Erstelle deinen ersten Beitrag", "onboarding.steps.setup_profile.body": "Mit einem ausgefüllten Profil interagieren andere eher mit dir.", "onboarding.steps.setup_profile.title": "Personalisiere dein Profil", - "onboarding.steps.share_profile.body": "Lass deine Freund*innen wissen, wie sie dich auf Mastodon finden können!", + "onboarding.steps.share_profile.body": "Lass Deine FreundInnen wissen, wie sie Dich auf Mastodon finden können!", "onboarding.steps.share_profile.title": "Teile dein Profil", "onboarding.tips.2fa": "Wusstest du schon? Du kannst die Sicherheit deines Kontos erhöhen, indem du die Zwei-Faktor-Authentisierung in deinen Kontoeinstellungen aktivierst. Dafür ist keine Telefonnummer notwendig und es funktioniert jede beliebige TOTP-App!", "onboarding.tips.accounts_from_other_servers": "Wusstest du schon? Da Mastodon dezentralisiert ist, werden einige Profile, denen du begegnest, auf anderen Servern als deinem bereitgestellt. Und trotzdem kannst du uneingeschränkt mit ihnen interagieren! Der Servername befindet sich in der zweiten Hälfte ihres Profilnamens!", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index d9a04c3939..0f44b80afb 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", "explore.search_results": "Αποτελέσματα αναζήτησης", - "explore.suggested_follows": "Για σένα", + "explore.suggested_follows": "Άτομα", "explore.title": "Εξερεύνηση", "explore.trending_links": "Νέα", "explore.trending_statuses": "Αναρτήσεις", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Να μην εμφανιστεί ξανά αυτό", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Πηγαίνετε στην αρχική σας ροή", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Δημοφιλή στο Mastodon", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 7ffe42b846..86aa015ad2 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 07e1c85305..f45c87a5da 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo", "errors.unexpected_crash.report_issue": "Raporti problemon", "explore.search_results": "Serĉaj rezultoj", - "explore.suggested_follows": "Por vi", + "explore.suggested_follows": "Homoj", "explore.title": "Esplori", "explore.trending_links": "Novaĵoj", "explore.trending_statuses": "Afiŝoj", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index ca18c161be..b1b6f9d7a9 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "explore.search_results": "Resultados de búsqueda", - "explore.suggested_follows": "Para vos", + "explore.suggested_follows": "Cuentas", "explore.title": "Explorá", "explore.trending_links": "Noticias", "explore.trending_statuses": "Mensajes", @@ -445,6 +445,7 @@ "onboarding.actions.close": "No mostrar esta pantalla de nuevo", "onboarding.actions.go_to_explore": "Mirá qué está en tendencia", "onboarding.actions.go_to_home": "Andá a tu línea temporal principal", + "onboarding.compose.template": "¡Hola, #Mastodon!", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Podés intentar usar la búsqueda o navegar por la página de exploración para encontrar cuentas a las que seguir, o intentarlo de nuevo más tarde.", "onboarding.follows.lead": "Vos completás tu propia línea temporal principal. Cuantas más cuentas sigas, más activa e interesante se volverá. Estos perfiles pueden ser un buen punto de partida; ¡podés dejar de seguir estas cuentas cuando quieras!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 91fe630a83..4deafbbeb3 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "explore.search_results": "Resultados de búsqueda", - "explore.suggested_follows": "Para ti", + "explore.suggested_follows": "People", "explore.title": "Descubrir", "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", @@ -445,6 +445,7 @@ "onboarding.actions.close": "No volver a mostrar esta pantalla", "onboarding.actions.go_to_explore": "Ver qué es tendencia", "onboarding.actions.go_to_home": "Ir al inicio", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar gente a la que seguir, o inténtalo de nuevo más tarde.", "onboarding.follows.lead": "Tienes que personalizar tu inicio. Cuantas más personas sigas, más activo e interesante será. Estos perfiles pueden ser un buen punto de partida, ¡pero siempre puedes dejar de seguirlos más adelante!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 418cbab7dd..915c858001 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -32,7 +32,7 @@ "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", - "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", + "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural, other {Siguiendo a {counter}}}", "account.follows.empty": "Este usuario todavía no sigue a nadie.", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", "explore.search_results": "Resultados de búsqueda", - "explore.suggested_follows": "Para ti", + "explore.suggested_follows": "Personas", "explore.title": "Explorar", "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", @@ -365,7 +365,7 @@ "media_gallery.toggle_visible": "Cambiar visibilidad", "moved_to_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada porque te has mudado a {movedToAccount}.", "mute_modal.duration": "Duración", - "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", + "mute_modal.hide_notifications": "¿Ocultar notificaciones de este usuario?", "mute_modal.indefinite": "Indefinida", "navigation_bar.about": "Acerca de", "navigation_bar.blocks": "Usuarios bloqueados", @@ -445,11 +445,12 @@ "onboarding.actions.close": "No volver a mostrar esta pantalla", "onboarding.actions.go_to_explore": "Ver qué es tendencia", "onboarding.actions.go_to_home": "Ir al inicio", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "¡Hola #Mastodon!", + "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar gente a la que seguir, o inténtalo de nuevo más tarde.", "onboarding.follows.lead": "Tienes que personalizar tu línea de inicio. Cuantas más personas sigas, más activa e interesante será. Estos perfiles pueden ser un buen punto de partida, ¡pero siempre puedes dejar de seguirlos más adelante!", "onboarding.follows.title": "Popular en Mastodon", "onboarding.share.lead": "¡Dile a la gente cómo te pueden encontrar en Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "¡Soy {username} en #Mastodon! Ven a seguirme en {url}", "onboarding.share.next_steps": "Posibles siguientes pasos:", "onboarding.share.title": "Comparte tu perfil", "onboarding.start.lead": "Tu nueva cuenta de Mastodon está lista. Así es como puedes sacarle el máximo provecho:", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Personaliza tu perfil", "onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!", "onboarding.steps.share_profile.title": "Comparte tu perfil", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "¿Sabías? Puedes proteger tu cuenta configurando la autenticación de dos factores en la configuración de tu cuenta. Funciona con cualquier aplicación TOTP de tu elección, ¡no necesitas número de teléfono!", "onboarding.tips.accounts_from_other_servers": "¿Sabías que? Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "¿Sabías? Si en el futuro piensas que {domain} no es el servidor adecuado para ti, puedes moverte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso puedes alojar tu propio servidor!", + "onboarding.tips.verification": "¿Sabías? Puedes verificar tu cuenta poniendo un enlace a tu perfil de Mastodon en tu propio sitio web y añadiendo el sitio web a tu perfil. ¡No se necesitan comisiones ni documentos!", "password_confirmation.exceeds_maxlength": "La contraseña de confirmación excede la longitud máxima de la contraseña", "password_confirmation.mismatching": "La contraseña de confirmación no coincide", "picture_in_picture.restore": "Restaurar", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 0db20482be..981dd05c15 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", "errors.unexpected_crash.report_issue": "Teavita veast", "explore.search_results": "Otsitulemused", - "explore.suggested_follows": "Kasutajad", + "explore.suggested_follows": "People", "explore.title": "Avasta", "explore.trending_links": "Uudised", "explore.trending_statuses": "Postitused", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ära näita seda ekraani uuesti", "onboarding.actions.go_to_explore": "Vaata, mis on trendikas", "onboarding.actions.go_to_home": "Mine oma koduvoogu", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "Haldad ise oma koduvoogu. Mida rohkemaid inimesi jälgid, seda aktiivsem ja huvitavam see on. Need profiilid võiksid olla head alustamiskohad — saad nende jälgimise alati lõpetada!", "onboarding.follows.title": "Populaarne Mastodonis", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 3949a468e8..4ace654f16 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -182,7 +182,7 @@ "conversation.with": "Hauekin: {names}", "copypaste.copied": "Kopiatuta", "copypaste.copy": "Kopiatu", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Kopiatu arbelera", "directory.federated": "Fedibertso ezagunekoak", "directory.local": "{domain} domeinukoak soilik", "directory.new_arrivals": "Iritsi berriak", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", "errors.unexpected_crash.report_issue": "Eman arazoaren berri", "explore.search_results": "Bilaketaren emaitzak", - "explore.suggested_follows": "Zuretzako", + "explore.suggested_follows": "Jendea", "explore.title": "Arakatu", "explore.trending_links": "Berriak", "explore.trending_statuses": "Tutak", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", + "onboarding.action.back": "Atzera egin", + "onboarding.actions.back": "Atzera egin", + "onboarding.actions.close": "Ez erakutsi pantaila hau berriro", + "onboarding.actions.go_to_explore": "Ikusi zer dagoen pil-pilean", + "onboarding.actions.go_to_home": "Joan hasierara", + "onboarding.compose.template": "Kaixo #Mastodon!", + "onboarding.follows.empty": "Zoritxarrez, ezin da emaitzik erakutsi orain. Bilaketa erabil dezakezu edo Arakatu orrian jendea bilatu jarraitzeko, edo saiatu geroago.", + "onboarding.follows.lead": "Hasierako orria zuk pertsonalizatzen duzu. Gero eta jende gehiago jarraitu, orduan eta aktibo eta interesgarriago izango da. Profil hauek egokiak izan daitezke hasteko, beti ere, geroago jarraitzeari utz diezazkiekezu!", + "onboarding.follows.title": "Mastodonen pil-pilean", + "onboarding.share.lead": "Ezagutarazi jendeari nola aurki zaitzaketen Mastodonen!", + "onboarding.share.message": "{username} naiz #Mastodon-en! Jarrai iezadazu hemen: {url}", + "onboarding.share.next_steps": "Hurrengo urrats posibleak:", + "onboarding.share.title": "Partekatu zure profila", + "onboarding.start.lead": "Zure Mastodoneko kontu berria prest dago. Jakin nola atera diezaioekun etekin handiena hemen:", + "onboarding.start.skip": "Urrats guztiak saltatu nahi dituzu?", + "onboarding.start.title": "Lortu duzu!", + "onboarding.steps.follow_people.body": "Zure jarioa zuk pertsonalizatzen duzu. Bete dezagun jende interesgarriaz.", + "onboarding.steps.follow_people.title": "Jarraitu {count, plural, one {pertsona bat} other {# pertsona}}", + "onboarding.steps.publish_status.body": "Agurtu munduari.", + "onboarding.steps.publish_status.title": "Sortu zure lehen argitalpena", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Bazenekien? Zure kontua babes dezakezu bi faktoreko autentifikazioa zure kontuko ezarpenetan ezarriaz. Darabilzun edozein TOTP aplikaziorekin dabil, ez da telefono-zenbakirik behar!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Bazenekien? Uste baduzu {domain} ez dela aukera on bat zuretzako etorkizunari begira, beste Mastodoneko instantzia batera alda zaitezke zure jarraitzaileak galdu gabe. Zure zerbitzaria ostata dezakezu eta guzti!", + "onboarding.tips.verification": "Bazenekien? Zure kontua egiazta dezakezu zure webgunean zure Mastodoneko profilaren esteka erantsiaz, zure webgunea Mastodoneko profilean ere duzularik. Kuota edo dokumenturik gabe!", "password_confirmation.exceeds_maxlength": "Pasahitzaren berrespenak pasahitzaren gehienezko luzera gainditzen du", "password_confirmation.mismatching": "Pasahitzaren berrespena ez dator bat", "picture_in_picture.restore": "Leheneratu", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 68b4f3f953..fb5c979efc 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", "explore.search_results": "نتایج جست‌وجو", - "explore.suggested_follows": "برای شما", + "explore.suggested_follows": "People", "explore.title": "کاوش", "explore.trending_links": "اخبار", "explore.trending_statuses": "فرسته‌ها", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 74e9c7c7c4..f8be936603 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", "explore.search_results": "Hakutulokset", - "explore.suggested_follows": "Sinulle", + "explore.suggested_follows": "Ihmiset", "explore.title": "Selaa", "explore.trending_links": "Uutiset", "explore.trending_statuses": "Julkaisut", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Älä näytä tätä uudelleen", "onboarding.actions.go_to_explore": "Katso, mikä on trendikästä", "onboarding.actions.go_to_home": "Siirry kotisyötteeseesi", + "onboarding.compose.template": "Tervehdys, #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata hakusivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", "onboarding.follows.title": "Suosittua Mastodonissa", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index f42d1a1d6c..56c4a26d23 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Avrita stakkaslóðina til setiborðið", "errors.unexpected_crash.report_issue": "Fráboða trupulleika", "explore.search_results": "Leitiúrslit", - "explore.suggested_follows": "Til tín", + "explore.suggested_follows": "Fólk", "explore.title": "Rannsaka", "explore.trending_links": "Tíðindi", "explore.trending_statuses": "Postar", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ikki vísa hendan skermin aftur", "onboarding.actions.go_to_explore": "Sí rákið", "onboarding.actions.go_to_home": "Far til heimarásina", + "onboarding.compose.template": "Hey #Mastodon!", "onboarding.follows.empty": "Tíverri kunnu eingi úrslit vísast beint nú. Tú kanst royna at brúka leiting ella at kaga gjøgnum Rannsaka síðuna fyri at finna fólk at fylgja - ella royna aftur seinni.", "onboarding.follows.lead": "Tú snikkar sjálv/ur tína heimarás til. Jú fleiri fólk, tú fylgir, jú virknari og áhugaverdari verður tað. Hesir vangar kunnu vera ein góð byrjan — tú kanst altíð gevast at fylgja teimum seinni!", "onboarding.follows.title": "Vælumtókt á Mastodon", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index af175099b3..640bdf0c93 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler un problème", "explore.search_results": "Résultats", - "explore.suggested_follows": "Pour vous", + "explore.suggested_follows": "People", "explore.title": "Explorer", "explore.trending_links": "Nouvelles", "explore.trending_statuses": "Messages", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index e49bb6d74b..75b7890d27 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", "explore.search_results": "Résultats de la recherche", - "explore.suggested_follows": "Pour vous", + "explore.suggested_follows": "People", "explore.title": "Explorer", "explore.trending_links": "Nouvelles", "explore.trending_statuses": "Messages", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index bae52ad86f..a8827a6cea 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace nei klamboerd kopiearje", "errors.unexpected_crash.report_issue": "Technysk probleem melde", "explore.search_results": "Sykresultaten", - "explore.suggested_follows": "Foar jo", + "explore.suggested_follows": "People", "explore.title": "Ferkenne", "explore.trending_links": "Nijs", "explore.trending_statuses": "Berjochten", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Dit skerm net mear toane", "onboarding.actions.go_to_explore": "De aktuele trends besjen", "onboarding.actions.go_to_home": "Gean nei jo startside", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Spitigernôch kinne op dit stuit gjin resultaten toand wurde. Jo kinne probearje te sykjen of te blêdzjen troch de ferkenningsside om minsken te finen dy’t jo folgje kinne, of probearje it letter opnij.", "onboarding.follows.lead": "Jo beheare jo eigen startside. Hoe mear minsken jo folgje, hoe aktiver en ynteressanter it wêze sil. Dizze profilen kinne in goed startpunt wêze, jo kinne se letter altyd ûntfolgje!", "onboarding.follows.title": "Populêr op Mastodon", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 9f1217758f..da3f1c9bfb 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -39,7 +39,7 @@ "account.follows_you": "Do do leanúint", "account.go_to_profile": "Téigh go dtí próifíl", "account.hide_reblogs": "Folaigh moltaí ó @{name}", - "account.in_memoriam": "In Memoriam.", + "account.in_memoriam": "Cuimhneachán.", "account.joined_short": "Cláraithe", "account.languages": "Athraigh teangacha foscríofa", "account.link_verified_on": "Seiceáladh úinéireacht an naisc seo ar {date}", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Tuairiscigh deacracht", "explore.search_results": "Torthaí cuardaigh", - "explore.suggested_follows": "Duitse", + "explore.suggested_follows": "People", "explore.title": "Féach thart", "explore.trending_links": "Nuacht", "explore.trending_statuses": "Postálacha", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 1040cdf0fb..ebd2dae7f4 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Cuir lethbhreac dhen stacktrace air an stòr-bhòrd", "errors.unexpected_crash.report_issue": "Dèan aithris air an duilgheadas", "explore.search_results": "Toraidhean an luirg", - "explore.suggested_follows": "Dhut-sa", + "explore.suggested_follows": "People", "explore.title": "Rùraich", "explore.trending_links": "Naidheachdan", "explore.trending_statuses": "Postaichean", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 9b6cd28832..9865e57b2d 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", "explore.search_results": "Resultados da busca", - "explore.suggested_follows": "Para ti", + "explore.suggested_follows": "Persoas", "explore.title": "Descubrir", "explore.trending_links": "Novas", "explore.trending_statuses": "Publicacións", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Non mostrar esta pantalla de novo", "onboarding.actions.go_to_explore": "Mira do que se está a falar", "onboarding.actions.go_to_home": "Vai á cronoloxía de inicio", + "onboarding.compose.template": "Ola #Mastodon!", "onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na páxina descubrir para atopar persoas ás que seguir, ou intentalo máis tarde.", "onboarding.follows.lead": "Podes facer que a túa cronoloxía de inicio sexa como ti a queres. Canta máis xente sigas máis interesante será. Estes perfís poderían axudarche a comezar —sempre poderás deixar de seguilos despois!", "onboarding.follows.title": "Popular en Mastodon", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 8308943f73..2b63455b29 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "להעתיק את הקוד ללוח הכתיבה", "errors.unexpected_crash.report_issue": "דווח על בעיה", "explore.search_results": "תוצאות חיפוש", - "explore.suggested_follows": "עבורך", + "explore.suggested_follows": "אנשים", "explore.title": "סיור", "explore.trending_links": "חדשות", "explore.trending_statuses": "הודעות", @@ -445,6 +445,7 @@ "onboarding.actions.close": "אל תציג זאת שוב", "onboarding.actions.go_to_explore": "הצגת מגמות", "onboarding.actions.go_to_home": "מעבר לזרם הודעות הנעקבים", + "onboarding.compose.template": "שלום #מסטודון!", "onboarding.follows.empty": "למצער, תוצאות לחיפושך אינן בנמצא. ניתן להשתמש בחיפוש או בדף החקירות לשם מציאת אנשים ולעקבם. אפשר גם לנסות שוב אחר כך.", "onboarding.follows.lead": "אתם אוצרים את הזרם הבייתי שלכם. ככל שתעקבו אחרי יותר אנשים, הוא יהיה עשיר ופעיל יותר. הנה כמה פרופילים להתחיל בהם - תמיד ניתן להפסיק מעקב אחריהם בהמשך!", "onboarding.follows.title": "פופולארי על מסטודון", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 71e18c4fdb..57dc03138e 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", "explore.search_results": "सर्च रिजल्ट्स", - "explore.suggested_follows": "आपके लिए", + "explore.suggested_follows": "People", "explore.title": "एक्स्प्लोर", "explore.trending_links": "समाचार", "explore.trending_statuses": "पोस्ट्स", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 351de35023..ac5fd7232c 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiraj stacktrace u međuspremnik", "errors.unexpected_crash.report_issue": "Prijavi problem", "explore.search_results": "Rezultati pretrage", - "explore.suggested_follows": "Za vas", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "Novosti", "explore.trending_statuses": "Objave", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index d770ddd9cb..f01e5a7f20 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -132,7 +132,7 @@ "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel nem nyilvános. Csak a nyilvános bejegyzések kereshetők hashtaggel.", "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.", "compose_form.lock_disclaimer.lock": "lezárva", - "compose_form.placeholder": "Mire gondolunk éppen?", + "compose_form.placeholder": "Mi jár a fejedben?", "compose_form.poll.add_option": "Lehetőség hozzáadása", "compose_form.poll.duration": "Szavazás időtartama", "compose_form.poll.option_placeholder": "{number}. lehetőség", @@ -148,7 +148,7 @@ "compose_form.sensitive.unmarked": "{count, plural, one {A médiát nem jelölték kényesnek} other {A médiát nem jelölték kényesnek}}", "compose_form.spoiler.marked": "Tartalmi figyelmeztetés eltávolítása", "compose_form.spoiler.unmarked": "Tartalmi figyelmeztetés hozzáadása", - "compose_form.spoiler_placeholder": "A figyelmeztetés beírása ide", + "compose_form.spoiler_placeholder": "Írd ide a figyelmeztetést", "confirmation_modal.cancel": "Mégsem", "confirmations.block.block_and_report": "Letiltás és jelentés", "confirmations.block.confirm": "Letiltás", @@ -240,11 +240,11 @@ "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", "explore.search_results": "Keresési találatok", - "explore.suggested_follows": "Nekem", + "explore.suggested_follows": "Emberek", "explore.title": "Felfedezés", "explore.trending_links": "Hírek", "explore.trending_statuses": "Bejegyzések", - "explore.trending_tags": "#Címkék", + "explore.trending_tags": "Hashtagek", "filter_modal.added.context_mismatch_explanation": "Ez a szűrőkategória nem érvényes abban a környezetben, amelyből ez a bejegyzés elérésre kerül. Ha ebben a környezetben is szűrni szeretnénk a bejegyzést, akkor szerkeszteni kell a szűrőt.", "filter_modal.added.context_mismatch_title": "Környezeti eltérés.", "filter_modal.added.expired_explanation": "Ez a szűrőkategória elévült, a használatához módosítani kell a lejárati dátumot.", @@ -264,7 +264,7 @@ "follow_request.authorize": "Hitelesítés", "follow_request.reject": "Elutasítás", "follow_requests.unlocked_explanation": "Bár a fiókod nincs zárolva, a(z) {domain} csapata úgy gondolta, hogy talán kézzel szeretnéd ellenőrizni a fiók követési kéréseit.", - "followed_tags": "Követett #címkék", + "followed_tags": "Követett hashtagek", "footer.about": "Névjegy", "footer.directory": "Profiltár", "footer.get_app": "Alkalmazás beszerzése", @@ -279,11 +279,11 @@ "hashtag.column_header.tag_mode.any": "vagy {additional}", "hashtag.column_header.tag_mode.none": "{additional} nélkül", "hashtag.column_settings.select.no_options_message": "Nincs javaslat", - "hashtag.column_settings.select.placeholder": "#Címkék megadása…", + "hashtag.column_settings.select.placeholder": "Addj meg hashtageket…", "hashtag.column_settings.tag_mode.all": "Mindegyik", "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", - "hashtag.column_settings.tag_toggle": "További címkék felvétele ehhez az oszlophoz", + "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", "hashtag.follow": "Hashtag követése", "hashtag.unfollow": "Hashtag követésének megszüntetése", "home.column_settings.basic": "Alapvető", @@ -335,7 +335,7 @@ "keyboard_shortcuts.search": "Keresősáv fókuszálása", "keyboard_shortcuts.spoilers": "Tartalmi figyelmeztetés mező megjelenítése/elrejtése", "keyboard_shortcuts.start": "\"Első lépések\" oszlop megnyitása", - "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel mögötti szöveg megjelenítése/elrejtése", + "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel ellátott szöveg megjelenítése/elrejtése", "keyboard_shortcuts.toggle_sensitivity": "Média megjelenítése/elrejtése", "keyboard_shortcuts.toot": "Új bejegyzés írása", "keyboard_shortcuts.unfocus": "Szerkesztés/keresés fókuszból való kivétele", @@ -380,7 +380,7 @@ "navigation_bar.favourites": "Kedvencek", "navigation_bar.filters": "Némított szavak", "navigation_bar.follow_requests": "Követési kérelmek", - "navigation_bar.followed_tags": "Követett #címkék", + "navigation_bar.followed_tags": "Követett hashtagek", "navigation_bar.follows_and_followers": "Követettek és követők", "navigation_bar.lists": "Listák", "navigation_bar.logout": "Kijelentkezés", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ez a képernyő ne jelenjen meg újra", "onboarding.actions.go_to_explore": "Felkapottak megtekintése", "onboarding.actions.go_to_home": "Ugrás a saját hírfolyamra", + "onboarding.compose.template": "Üdvözlet, #Mastodon!", "onboarding.follows.empty": "Sajnos jelenleg nem jeleníthető meg eredmény. Kipróbálhatod a keresést vagy böngészheted a felfedező oldalon a követni kívánt személyeket, vagy próbáld meg később.", "onboarding.follows.lead": "Mindenki maga válogatja össze a saját hírfolyamát. Minél több embert követsz, annál aktívabb és érdekesebb a dolog. Ezek a profilok jó kiindulási alapot jelenthetnek – később bármikor leállíthatod a követésüket!", "onboarding.follows.title": "Népszerű a Mastodonon", @@ -554,12 +555,12 @@ "search.quick_action.go_to_hashtag": "Ugrás a következő hashtaghez: {x}", "search.quick_action.open_url": "Webcím megnyitása a Mastodonon", "search.quick_action.status_search": "Bejegyzések a következő keresésre: {x}", - "search.search_or_paste": "Keresés vagy webcím beillesztése", + "search.search_or_paste": "Keresés vagy URL beillesztése", "search_popout.quick_actions": "Gyors műveletek", "search_popout.recent": "Legutóbbi keresések", "search_results.accounts": "Profilok", "search_results.all": "Összes", - "search_results.hashtags": "#Címkék", + "search_results.hashtags": "Hashtagek", "search_results.nothing_found": "Nincs találat ezekre a keresési kifejezésekre", "search_results.statuses": "Bejegyzések", "search_results.statuses_fts_disabled": "Ezen a Mastodon szerveren nem engedélyezett a bejegyzések tartalom szerinti keresése.", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 845c9abc3d..3bd57ca57c 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", "explore.search_results": "Որոնման արդիւնքներ", - "explore.suggested_follows": "Քեզ համար", + "explore.suggested_follows": "People", "explore.title": "Բացայայտել", "explore.trending_links": "Նորութիւններ", "explore.trending_statuses": "Գրառումներ", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 31e2839696..7cc8281e09 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", "explore.search_results": "Hasil pencarian", - "explore.suggested_follows": "Untuk Anda", + "explore.suggested_follows": "People", "explore.title": "Jelajahi", "explore.trending_links": "Berita", "explore.trending_statuses": "Kiriman", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index b720ec213f..c4eb719d75 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Kpesa nsogbu", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index fb880145b0..ed3cf0520c 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiez amastraso a klipplanko", "errors.unexpected_crash.report_issue": "Reportigez problemo", "explore.search_results": "Trovuri", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explorez", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 56ac8a799d..e6657a84f7 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", "explore.search_results": "Leitarniðurstöður", - "explore.suggested_follows": "Fyrir þig", + "explore.suggested_follows": "Fólk", "explore.title": "Kanna", "explore.trending_links": "Fréttir", "explore.trending_statuses": "Færslur", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Ekki birta þetta aftur", "onboarding.actions.go_to_explore": "Sjáðu hvað er í umræðunni", "onboarding.actions.go_to_home": "Fara á heimastreymið þitt", + "onboarding.compose.template": "Halló #Mastodon!", "onboarding.follows.empty": "Því miður er ekki hægt að birta neinar niðurstöður í augnablikinu. Þú getur reynt að nota leitina eða skoðað könnunarsíðuna til að finna fólk til að fylgjast með, nú eða prófað aftur síðar.", "onboarding.follows.lead": "Þú ræktar heimastreymið þitt. Því fleira fólki sem þú fylgist með, því virkara og áhugaverðara verður það. Að fylgjast með þessum notendum gæti verið ágætt til að byrja með - þú getur alltaf hætt að fylgjast með þeim síðar!", "onboarding.follows.title": "Vinsælt á Mastodon", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index fd18e388da..af2b8e64d7 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala un problema", "explore.search_results": "Risultati della ricerca", - "explore.suggested_follows": "Per te", + "explore.suggested_follows": "Persone", "explore.title": "Esplora", "explore.trending_links": "Novità", "explore.trending_statuses": "Post", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Non mostrare più", "onboarding.actions.go_to_explore": "Guarda le tendenze", "onboarding.actions.go_to_home": "Vai alla cronologia della tua home", + "onboarding.compose.template": "Ciao #Mastodon!", "onboarding.follows.empty": "Sfortunatamente, nessun risultato può essere mostrato in questo momento. Puoi provare a utilizzare la ricerca o sfogliare la pagina di esplorazione per trovare persone da seguire, oppure riprova più tardi.", "onboarding.follows.lead": "La cronologia della tua home è gestita da te. Più persone segui, più attiva e interessante sarà. Questi profili possono essere un buon punto di partenza; puoi sempre smettere di seguirli in seguito!", "onboarding.follows.title": "Popolare su Mastodon", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 86a56ff53c..5b9cf1752e 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", "explore.search_results": "検索結果", - "explore.suggested_follows": "おすすめ", + "explore.suggested_follows": "ユーザー", "explore.title": "エクスプローラー", "explore.trending_links": "ニュース", "explore.trending_statuses": "投稿", @@ -445,6 +445,7 @@ "onboarding.actions.close": "今後この画面を表示しない", "onboarding.actions.go_to_explore": "話題をさがす", "onboarding.actions.go_to_home": "タイムラインに移動", + "onboarding.compose.template": "#Mastodon はじめました", "onboarding.follows.empty": "おすすめに表示できるアカウントはまだありません。検索や「見つける」を活用して、ほかのアカウントを探してみましょう。", "onboarding.follows.lead": "自分の手でタイムラインを作ってみましょう。フォローを増やせば、タイムラインはより賑やかでおもしろいものになります。最初のフォローの参考になりそうなアカウントをいくつか表示しています。気になったものがあれば、ここからフォローしてみましょう。フォローはいつでも解除して大丈夫です。", "onboarding.follows.title": "おすすめのアカウント", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "プロフィールを完成させる", "onboarding.steps.share_profile.body": "Mastodon アカウントをほかの人に紹介しましょう。", "onboarding.steps.share_profile.title": "プロフィールをシェアする", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "ワンポイント アカウント設定から2要素認証を有効にして、アカウントのセキュリティを強化しておきましょう。認証には任意のワンタイムパスワード(TOTP)アプリを利用でき、電話番号は不要です。", "onboarding.tips.accounts_from_other_servers": "ワンポイント Mastodon はたくさんのサーバーがつながりあってできている非中央集権型のSNSです。いくつかのアカウントはこことは別のサーバーに所属していることがありますが、サーバーの違いを意識しなくても同じようにフォローすることができます。サーバーが異なる場合は、ユーザー名の後半にサーバー名が表示されます。", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "ワンポイント もしも {domain} の雰囲気が合わないと感じたときは、ほかのMastodonサーバーにフォロワーを引き継いだまま引っ越しできます。また、自分で独自のサーバーを開設することも可能です。", + "onboarding.tips.verification": "ワンポイント webサイトを持っている場合は、webサイトにMastodonアカウントへのリンクを掲載し、さらにアカウントのプロフィール側にもwebサイトへのリンクを追加することで、アカウントが自分のものであることを証明できます。課金や書類の提出は必要ありません。", "password_confirmation.exceeds_maxlength": "パスワードの最大文字数を超えています", "password_confirmation.mismatching": "入力済みのパスワードと一致しません", "picture_in_picture.restore": "元に戻す", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 51c4073efd..2d84b4011b 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index aee2e2f1b7..16748208b0 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", "explore.search_results": "Igemmaḍ n unadi", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Snirem", "explore.trending_links": "Isallen", "explore.trending_statuses": "Tisuffiɣin", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 0e39264f99..3876866961 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа", "errors.unexpected_crash.report_issue": "Мәселені хабарла", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index d8c85517d8..f820dbc43c 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 20a53bf4df..8030fd65f5 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", "explore.search_results": "검색 결과", - "explore.suggested_follows": "추천", + "explore.suggested_follows": "사람들", "explore.title": "둘러보기", "explore.trending_links": "소식", "explore.trending_statuses": "게시물", @@ -445,6 +445,7 @@ "onboarding.actions.close": "이 화면을 다시 보지 않기", "onboarding.actions.go_to_explore": "무엇이 유행인지 보기", "onboarding.actions.go_to_home": "홈 피드로 가기", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "안타깝지만 아직은 아무 것도 보여드릴 수 없습니다. 검색을 이용하거나 발견하기 페이지에서 팔로우 할 사람을 찾을 수 있습니다. 아니면 잠시 후에 다시 시도하세요.", "onboarding.follows.lead": "내 피드는 내가 만듭니다. 더 많은 사람을 팔로우 할 수록 더 활성화되고 흥미로울 것입니다. 이 계정들이 첫 상대로 좋을 것 같습니다. 나중에 언제든지 팔로우를 해제할 수 있습니다!", "onboarding.follows.title": "마스토돈 속 인기물", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index da1589a77a..717c0a0889 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Şopa gemara (stacktrace) tûrikê ra jê bigire", "errors.unexpected_crash.report_issue": "Pirsgirêkekê ragihîne", "explore.search_results": "Encamên lêgerînê", - "explore.suggested_follows": "Ji bo te", + "explore.suggested_follows": "People", "explore.title": "Vekole", "explore.trending_links": "Nûçe", "explore.trending_statuses": "Şandî", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 2d6cff6f3f..47fe1c3012 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Dasskrifa daslergh dhe'n astel glypp", "errors.unexpected_crash.report_issue": "Reportya kudyn", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index 250586ecd1..f947f934b8 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Contributa", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 51f29375aa..cc2b3598d8 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index cec437a39b..3d7578febc 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", "explore.search_results": "Meklēšanas rezultāti", - "explore.suggested_follows": "Tev", + "explore.suggested_follows": "Cilvēki", "explore.title": "Pārlūkot", "explore.trending_links": "Jaunumi", "explore.trending_statuses": "Ziņas", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Vairs nerādīt šo ekrānu", "onboarding.actions.go_to_explore": "Skatīt tendences", "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", + "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.", "onboarding.follows.lead": "Savu mājas plūsmu veido tu pats. Jo vairāk cilvēkiem tu sekosi, jo aktīvāk un interesantāk viss būs. Šie profili var būt labs sākumpunkts — vēlāk vienmēr varēsi pārstāt sekot!", "onboarding.follows.title": "Populārs Mastodon", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 3b789942f9..6e779e26fa 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Пријавете проблем", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 4cbbcde57b..50c239daf1 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "പര്യവേക്ഷണം നടത്തുക", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index b15050b52d..09ee8da5d4 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 3bf84ecf28..4a5a01fabd 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Salin surih tindanan ke papan keratan", "errors.unexpected_crash.report_issue": "Laporkan masalah", "explore.search_results": "Hasil carian", - "explore.suggested_follows": "Untuk anda", + "explore.suggested_follows": "People", "explore.title": "Terokai", "explore.trending_links": "Baru", "explore.trending_statuses": "Hantar", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 877cca3a4d..08bd29094f 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "stacktrace ကို ကလစ်ဘုတ်သို့ ကူးယူပါ", "errors.unexpected_crash.report_issue": "အဆင်မပြေမှုကို တိုင်ကြားရန်", "explore.search_results": "ရှာဖွေမှုရလဒ်များ", - "explore.suggested_follows": "သင့်အတွက်", + "explore.suggested_follows": "လူများ", "explore.title": "စူးစမ်းရန်", "explore.trending_links": "သတင်းများ", "explore.trending_statuses": "ပို့စ်တင်မယ်", @@ -445,28 +445,29 @@ "onboarding.actions.close": "ဤစခရင်ကို ထပ်မပြပါနှင့်", "onboarding.actions.go_to_explore": "ခေတ်စားနေသည်များကို ကြည့်ပါ", "onboarding.actions.go_to_home": "ပင်မစာမျက်နှာသို့ သွားပါ", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", + "onboarding.compose.template": "မင်္ဂလာပါ #Mastodon", + "onboarding.follows.empty": "ယခုအချိန် မည်သည့်ရလဒ်ကိုမျှ မပြသနိုင်ပါ။ လူများကိုစောင့်ကြည့်ရန်အတွက် Explore စာမျက်နှာကို အသုံးပြု၍ စမ်းကြည့်နိုင်သည် သို့မဟုတ် နောက်မှ ထပ်စမ်းကြည့်ပါ။", + "onboarding.follows.lead": "သင့်ကိုယ်ပိုင်ပို့စ်များ တင်နိုင်သည်။ သင်စောင့်ကြည့်သူ များလေလေ၊ စိတ်ဝင်စားစရာကောင်းသောပို့စ်များ တွေ့ရလေဖြစ်သည်။ ဤပရိုဖိုင်များမှာ ကောင်းမွန်သောအစပြုမှုတစ်ခုဖြစ်ပြီး ၎င်းတို့ကိုစောင့်ကြည့်ခြင်းမှလည်း အချိန်မရွေး ပယ်ဖျက်နိုင်ပါသည်။", "onboarding.follows.title": "Mastodon တွင် ရေပန်းစားခြင်း", "onboarding.share.lead": "Mastodon တွင် သင့်အား မည်သို့ရှာတွေ့နိုင်သည်ကို အသိပေးပါ။", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Mastodon ရှိ ကျွန်ုပ်၏အမည်မှာ {username} ဖြစ်သည်။ ကျွန်ုပ်ကို {url} တွင် စောင့်ကြည့်နိုင်ပါသည်", "onboarding.share.next_steps": "ဖြစ်နိုင်ချေရှိသော နောက်အဆင့်များ -", "onboarding.share.title": "သင့်ပရိုဖိုင်ကို မျှဝေပါ", "onboarding.start.lead": "သင့် Mastodon အကောင့်အသစ်မှာ အသုံးပြုနိုင်ပါပြီ။ အကောင်းဆုံးဖြစ်အောင် သင်ပြုလုပ်နိုင်သည် -", "onboarding.start.skip": "ရှေ့ကို ကျော်သွားချင်ပါသလား။", "onboarding.start.title": "ပြုလုပ်ပြီးပြီ။", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", + "onboarding.steps.follow_people.body": "သင်သည် ကိုယ်ပိုင်ပို့စ်များ တင်နိုင်သည်။ စိတ်ဝင်စားသူများနဲ့ အပြန်အလှန်စောင့်ကြည့်နိုင်ပါပြီ။", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "ကမ္ဘာကြီးကို နှုတ်ဆက်လိုက်ပါ။", "onboarding.steps.publish_status.title": "ပထမဆုံးပို့စ်တင်လိုက်ပါ။", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", + "onboarding.steps.setup_profile.body": "အခြားသူများမှာလည်း သင်နှင့် အပြန်အလှန် တုံ့ပြန်နိုင်ပါသည်။", "onboarding.steps.setup_profile.title": "သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်လိုက်ပါ", "onboarding.steps.share_profile.body": "Mastodon တွင် သင့်ကို သူငယ်ချင်းများ မည်သို့ရှာတွေ့နိုင်သည်ကို အသိပေးပါ။", "onboarding.steps.share_profile.title": "သင့်ပရိုဖိုင်ကို မျှဝေပါ", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "သင်သိပါသလား။ သင့်အကောင့်သတ်မှတ်ချက်များတွင် နှစ်ဆင့်ခံလုံခြုံရေးစနစ် ထည့်သွင်းခြင်းဖြင့် သင့်အကောင့်ကို လုံခြုံစေနိုင်ပါသည်။ ထိုစနစ်မှာ သင်နှစ်သက်ရာ TOTP အက်ပ်နှင့် အလုပ်လုပ်ပြီး ဖုန်းနံပါတ်ထည့်ရန်မလိုပါ။", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "သင်သိပါသလား? အကယ်၍ {domain} သည် နောင်တွင် သင့်အတွက် အဆင်မပြေပါက သင့်စောင့်ကြည့်သူများကို မဆုံးရှုံးစေဘဲ အခြား Mastodon ဆာဗာသို့ ပြောင်းရွှေ့နိုင်ပါသည်။ သင့် ကိုယ်ပိုင်ဆာဗာတစ်လုံး ပြုလုပ်၍ပင် ဆောင်ရွက်နိုင်ပါသည်။", + "onboarding.tips.verification": "သင်သိပါသလား။ သင့်ဝဘ်ဆိုက်တွင် Mastodon ပရိုဖိုင်အတွက် လင့်ခ်ထည့်ထားပြီး သင့်ပရိုဖိုင်တွင် ဝဘ်ဆိုက်ထည့်ထားခြင်းဖြင့် သင့်အကောင့်ကို အတည်ပြုနိုင်သည်။ အခကြေးငွေ သို့မဟုတ် စာရွက်စာတမ်းများ မလိုအပ်ပါ။", "password_confirmation.exceeds_maxlength": "စကားဝှက်အတည်ပြုခြင်းတွင် အများဆုံးစကားဝှက်အရှည်ထက် ကျော်လွန်နေပါသည်", "password_confirmation.mismatching": "စကားဝှက်အတည်ပြုချက်မှာ မကိုက်ညီပါ", "picture_in_picture.restore": "ပြန်ထားပါ", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 4e4320c1d4..b60aba5624 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", "explore.search_results": "Zoekresultaten", - "explore.suggested_follows": "Voor jou", + "explore.suggested_follows": "Mensen", "explore.title": "Verkennen", "explore.trending_links": "Nieuws", "explore.trending_statuses": "Berichten", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Dit scherm niet meer weergeven", "onboarding.actions.go_to_explore": "De huidige trends bekijken", "onboarding.actions.go_to_home": "Ga naar je starttijdlijn", + "onboarding.compose.template": "Hallo #Mastodon!", "onboarding.follows.empty": "Helaas kunnen op dit moment geen resultaten worden getoond. Je kunt proberen te zoeken of te bladeren door de verkenningspagina om mensen te vinden die je kunt volgen, of probeer het later opnieuw.", "onboarding.follows.lead": "Je beheert je eigen starttijdlijn. Hoe meer mensen je volgt, hoe actiever en interessanter het zal zijn. Deze profielen kunnen een goed startpunt zijn, je kan ze later altijd niet meer volgen!", "onboarding.follows.title": "Populair op Mastodon", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 57706abbba..e3c979de49 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", "explore.search_results": "Søkeresultat", - "explore.suggested_follows": "For deg", + "explore.suggested_follows": "People", "explore.title": "Utforsk", "explore.trending_links": "Nytt", "explore.trending_statuses": "Innlegg", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 8942b7d3bf..c04d300e4a 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -182,7 +182,7 @@ "conversation.with": "Med {names}", "copypaste.copied": "Kopiert", "copypaste.copy": "Kopier", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Kopier til utklippstavle", "directory.federated": "Fra det kjente strømiverset", "directory.local": "Kun fra {domain}", "directory.new_arrivals": "Nye ankomster", @@ -224,7 +224,7 @@ "empty_column.favourited_statuses": "Du har ikke noen favorittinnlegg enda. Når du favorittmarkerer et inlegg, vil det dukke opp her.", "empty_column.favourites": "Ingen har favorittmarkert dette innlegget ennå. Når noen gjør det, vil de dukke opp her.", "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.", - "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.", + "empty_column.followed_tags": "Du har ikke fulgt noen emneknagger ennå. Når du gjør det, vil de vises her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.", "empty_column.home": "Hjem-tidslinjen din er tom! Følg flere folk for å fylle den. {suggestions}", "empty_column.home.suggestions": "Se noen forslag", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", "explore.search_results": "Søkeresultater", - "explore.suggested_follows": "For deg", + "explore.suggested_follows": "Personer", "explore.title": "Utforsk", "explore.trending_links": "Nyheter", "explore.trending_statuses": "Innlegg", @@ -264,7 +264,7 @@ "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.", - "followed_tags": "Followed hashtags", + "followed_tags": "Fulgte emneknagger", "footer.about": "Om", "footer.directory": "Profilkatalog", "footer.get_app": "Last ned appen", @@ -292,7 +292,7 @@ "home.hide_announcements": "Skjul kunngjøring", "home.show_announcements": "Vis kunngjøring", "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.", - "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i hjem-feeden din.", + "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.", "interaction_modal.description.reblog": "Med en konto på Mastodon, kan du fremheve dette innlegget for å dele det med dine egne følgere.", "interaction_modal.description.reply": "Med en konto på Mastodon, kan du svare på dette innlegget.", "interaction_modal.on_another_server": "På en annen server", @@ -440,33 +440,34 @@ "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", "notifications_permission_banner.how_to_control": "For å motta varsler når Mastodon ikke er åpne, aktiver desktop varsler. Du kan kontrollere nøyaktig hvilke typer interaksjoner genererer skrivebordsvarsler gjennom {icon} -knappen ovenfor når de er aktivert.", "notifications_permission_banner.title": "Aldri gå glipp av noe", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.action.back": "Ta meg tilbake", + "onboarding.actions.back": "Ta meg tilbake", + "onboarding.actions.close": "Ikke vis dette flere ganger", + "onboarding.actions.go_to_explore": "Se hva som er populært", + "onboarding.actions.go_to_home": "Gå til din tidslinje", + "onboarding.compose.template": "Hallo #Mastodon!", + "onboarding.follows.empty": "Dessverre kan ingen resultater vises akkurat nå. Du kan prøve å bruke søk eller bla gjennom utforske-siden for å finne folk å følge, eller prøve igjen senere.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "onboarding.follows.title": "Populært på Mastodon", "onboarding.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Jeg er {username} på #Mastodon! Kom og følg meg på {url}", "onboarding.share.next_steps": "Possible next steps:", "onboarding.share.title": "Share your profile", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", + "onboarding.start.skip": "Vil du hoppe over dette?", + "onboarding.start.title": "Du klarte det!", + "onboarding.steps.follow_people.body": "Du bestemmer over din egen tidslinje. La oss fylle den med ineressante personer.", + "onboarding.steps.follow_people.title": "Følg {count, plural, one {en person} other {# personer}}", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.title": "Make your first post", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Visste du? Du kan sikre kontoen din ved å sette opp 2-trinnsinnlogging i kontoinnstillingene dine. Det fungerer med enhver TOTP-app du velger selv, intet telefonnummer nødvendig!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Visste du? Hvis du føler at {domain} ikke er et flott servervalg for deg i fremtiden, kan du flytte til en annen Mastodon-server uten å miste følgerene dine. Du kan også være vert for din egen server!", + "onboarding.tips.verification": "Visste du? Du kan bekrefte kontoen din ved å legge en lenke til Mastodon-profilen din på ditt eget nettsted og legge nettstedet til i profilen din. Ingen gebyrer eller dokumenter nødvendig!", "password_confirmation.exceeds_maxlength": "Passordbekreftelsen overskrider den maksimale passordlengden", "password_confirmation.mismatching": "Passordene er ulike", "picture_in_picture.restore": "Legg den tilbake", @@ -492,7 +493,7 @@ "privacy_policy.title": "Personvernregler", "refresh": "Oppfrisk", "regeneration_indicator.label": "Laster…", - "regeneration_indicator.sublabel": "Dine startside forberedes!", + "regeneration_indicator.sublabel": "Dine tidslinje blir gjort klar!", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# dag} other {# dager}} siden", "relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden", @@ -541,7 +542,7 @@ "report.thanks.title": "Ønsker du ikke å se dette?", "report.thanks.title_actionable": "Takk for at du rapporterer, vi skal se på dette.", "report.unfollow": "Slutt å følge @{name}", - "report.unfollow_explanation": "Du følger denne kontoen. For ikke å se innleggene deres i din hjem-feed lenger, slutt å følge dem.", + "report.unfollow_explanation": "Du følger denne kontoen. For ikke å se innleggene deres i din tidslinje lenger, slutt å følge dem.", "report_notification.attached_statuses": "{count, plural,one {{count} innlegg} other {{count} innlegg}} vedlagt", "report_notification.categories.other": "Annet", "report_notification.categories.spam": "Søppelpost", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index f763d25668..652255e4af 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", "explore.search_results": "Resultats de recèrca", - "explore.suggested_follows": "Per vos", + "explore.suggested_follows": "People", "explore.title": "Explorar", "explore.trending_links": "Novèlas", "explore.trending_statuses": "Publicacions", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index c160d1b11f..f142264282 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index e20a75743a..417cc54cd4 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Skopiuj stacktrace do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "explore.search_results": "Wyniki wyszukiwania", - "explore.suggested_follows": "Dla Ciebie", + "explore.suggested_follows": "Ludzie", "explore.title": "Odkrywaj", "explore.trending_links": "Aktualności", "explore.trending_statuses": "Posty", @@ -445,8 +445,9 @@ "onboarding.actions.close": "Nie pokazuj ponownie", "onboarding.actions.go_to_explore": "Zobacz co się dzieje", "onboarding.actions.go_to_home": "Przejdź do swojego kanału głównego", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", + "onboarding.compose.template": "Witaj #Mastodon!", + "onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.", + "onboarding.follows.lead": "Zarządasz swoim własnym kanałem. Im więcej ludzi śledzisz, tym bardziej aktywny i ciekawy będzie Twój kanał. Te profile mogą być dobrym punktem wyjścia— możesz przestać je obserwować w dowolnej chwili!", "onboarding.follows.title": "Popularne na Mastodonie", "onboarding.share.lead": "Daj znać ludziom, jak mogą cię znaleźć na Mastodonie!", "onboarding.share.message": "Jestem {username} na #Mastodon! Śledź mnie tutaj {url}", @@ -459,13 +460,13 @@ "onboarding.steps.follow_people.title": "Obserwuj {count, plural, one {jedną osobę} few {# osoby} many {# osób} other {# osób}}", "onboarding.steps.publish_status.body": "Przywitaj się ze światem.", "onboarding.steps.publish_status.title": "Utwórz swój pierwszy post", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", + "onboarding.steps.setup_profile.body": "Inni użytkownicy są bardziej skłonni do interakcji z Tobą jeśli posiadasz wypełniony profil.", "onboarding.steps.setup_profile.title": "Spersonalizuj swój profil", "onboarding.steps.share_profile.body": "Poinformuj swoich przyjaciół jak znaleźć cię na Mastodonie!", "onboarding.steps.share_profile.title": "Udostępnij swój profil", "onboarding.tips.2fa": "Czy wiesz? Możesz zabezpieczyć swoje konto poprzez skonfigurowanie uwierzytelniania dwuetapowego w ustawieniach konta. Działa z wybraną przez Ciebie aplikacją TOTP, żaden numer telefonu nie jest wymagany!", "onboarding.tips.accounts_from_other_servers": "Czy wiesz? Ponieważ Mastodon jest zdecentralizowany, niektóre profile, z którymi się spotkasz, będą hostowane na serwerach innych niż twoje. A mimo to możesz z nimi bezproblemowo wchodzić w interakcje! Ich serwer jest w drugiej połowie ich nazwy użytkownika!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", + "onboarding.tips.migration": "Czy wiesz? Jeśli uważasz, że {domain} nie jest dla Ciebie dobrym wyborem na serwer w przyszłości, możesz przenieść się na inny serwer Mastodona bez utraty obserwujących. Możesz nawet hostować swój własny serwer!", "onboarding.tips.verification": "Czy wiesz? Możesz zweryfikować swoje konto, umieszczając link do profilu Mastodon na swojej własnej stronie internetowej, a następnie dodając stronę do swojego profilu. Żadne opłaty lub dokumenty nie są wymagane!", "password_confirmation.exceeds_maxlength": "Potwierdzenie hasła przekracza maksymalną długość hasła", "password_confirmation.mismatching": "Wprowadzone hasła różnią się od siebie", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 42c849fad2..8057290da1 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar dados do erro para área de transferência", "errors.unexpected_crash.report_issue": "Reportar problema", "explore.search_results": "Resultado da pesquisa", - "explore.suggested_follows": "Para você", + "explore.suggested_follows": "People", "explore.title": "Explorar", "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Não mostre esta tela novamente", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Ir para sua página inicial", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular no Mastodon", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 19bfa8b5ff..0aaa83443e 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -182,7 +182,7 @@ "conversation.with": "Com {names}", "copypaste.copied": "Copiado", "copypaste.copy": "Copiar", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Copiar para a área de transferência", "directory.federated": "Do fediverso conhecido", "directory.local": "Apenas de {domain}", "directory.new_arrivals": "Recém chegados", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", "explore.search_results": "Resultados da pesquisa", - "explore.suggested_follows": "Para si", + "explore.suggested_follows": "Pessoas", "explore.title": "Explorar", "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", @@ -440,33 +440,34 @@ "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", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", - "onboarding.actions.close": "Don't show this screen again", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.share.lead": "Let people know how they can find you on Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", - "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.action.back": "Voltar atrás", + "onboarding.actions.back": "Voltar atrás", + "onboarding.actions.close": "Não exibir isto novamente", + "onboarding.actions.go_to_explore": "Veja as tendências atuais", + "onboarding.actions.go_to_home": "Ir para a sua página inicial", + "onboarding.compose.template": "Olá #Mastodon!", + "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.", + "onboarding.follows.lead": "Você personaliza a sua própria página inicial. Quanto mais pessoas seguir, mais ativa e interessante ela será. Estes perfis podem ser um bom ponto de partida - pode sempre deixar de os seguir mais tarde!", + "onboarding.follows.title": "Popular no Mastodon", + "onboarding.share.lead": "Deixe as pessoas saber como o podem encontrar no Mastodon!", + "onboarding.share.message": "Eu sou {username} no #Mastodon! Venha seguir-me em {url}", + "onboarding.share.next_steps": "Próximos passos possíveis:", + "onboarding.share.title": "Partilhe o seu perfil", + "onboarding.start.lead": "A sua nova conta no Mastodon está pronta. Aqui está como pode tirar dela melhor proveito:", + "onboarding.start.skip": "Quer saltar à frente?", + "onboarding.start.title": "Conseguiu!", + "onboarding.steps.follow_people.body": "Você personaliza a sua própria página inicial. Vamos preenche-la com pessoas interessantes.", + "onboarding.steps.follow_people.title": "Siga {count, plural, one {uma pessoa} other {# pessoas}}", + "onboarding.steps.publish_status.body": "Diga olá para o mundo.", + "onboarding.steps.publish_status.title": "Faça a sua primeira publicação", + "onboarding.steps.setup_profile.body": "É mais provável que outros interajam consigo se preencher o seu perfil.", + "onboarding.steps.setup_profile.title": "Personalize o seu perfil", + "onboarding.steps.share_profile.body": "Diga aos seus amigos como o encontrarem no Mastodon!", + "onboarding.steps.share_profile.title": "Partilhe o seu perfil", + "onboarding.tips.2fa": "Sabia? Pode proteger a sua conta ativando a autenticação em duas etapas nas configurações de conta. Funciona com qualquer aplicativo TOTP à sua escolha, sem necessitar de um número de telefone!", + "onboarding.tips.accounts_from_other_servers": "Sabia? Como o Mastodon é descentralizado, alguns perfis que você encontra serão hospedados em outros servidores que não os seus. E ainda assim você pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de usuário!", + "onboarding.tips.migration": "Sabia? Se, no futuro, sentir que {domain} não é uma ótima escolha de servidor para si, pode mudar para outro servidor Mastodon sem perder os seus seguidores. Pode até mesmo hospedar o seu próprio servidor!", + "onboarding.tips.verification": "Sabia? Pode verificar a sua conta colocando um link para o seu perfil Mastodon no seu site e adicionando o endereço do site ao seu perfil. Não são necessárias taxas ou documentos!", "password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excede o tamanho máximo para a palavra-passe", "password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde", "picture_in_picture.restore": "Colocá-lo de volta", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 4d8cd34c24..45324fb727 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiere stacktrace în clipboard", "errors.unexpected_crash.report_issue": "Raportează o problemă", "explore.search_results": "Rezultatele căutării", - "explore.suggested_follows": "Pentru tine", + "explore.suggested_follows": "People", "explore.title": "Explorează", "explore.trending_links": "Noutăți", "explore.trending_statuses": "Postări", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 32c1d385ed..9f7c80cff9 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "explore.search_results": "Результаты поиска", - "explore.suggested_follows": "Для вас", + "explore.suggested_follows": "Люди", "explore.title": "Обзор", "explore.trending_links": "Новости", "explore.trending_statuses": "Посты", @@ -445,11 +445,12 @@ "onboarding.actions.close": "Больше не показывать этот экран", "onboarding.actions.go_to_explore": "Посмотреть, что актуально", "onboarding.actions.go_to_home": "Перейти к домашней ленте новостей", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Привет, #Mastodon!", + "onboarding.follows.empty": "К сожалению, сейчас нет результатов. Вы можете попробовать использовать поиск или просмотреть страницу \"Исследования\", чтобы найти людей, за которыми можно следить, или повторить попытку позже.", "onboarding.follows.lead": "Вы сами формируете свою домашнюю ленту. Чем больше людей, за которыми вы следите, тем активнее и интереснее она будет. Эти профили могут быть хорошей отправной точкой - вы всегда можете от них отказаться!", "onboarding.follows.title": "Популярно на Mastodon", "onboarding.share.lead": "Расскажите людям, как они могут найти вас на Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Я {username} на #Mastodon! Следуйте за мной по адресу {url}", "onboarding.share.next_steps": "Возможные дальнейшие шаги:", "onboarding.share.title": "Поделиться вашим профилем", "onboarding.start.lead": "Ваш новый аккаунт Mastodon готов к работе. Вот как вы можете использовать его по максимуму:", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Настройте свой профиль", "onboarding.steps.share_profile.body": "Расскажите своим друзьям как найти вас на Mastodon!", "onboarding.steps.share_profile.title": "Поделитесь вашим профилем", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Знаете ли вы? Вы можете защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не требуется!", "onboarding.tips.accounts_from_other_servers": "Знали ли вы? Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих последователей. Вы даже можете разместить свой собственный сервер!", + "onboarding.tips.verification": "Знали ли вы? Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!", "password_confirmation.exceeds_maxlength": "Срок подтверждения пароля превышает максимальную длину пароля", "password_confirmation.mismatching": "Введенные пароли не совпадают.", "picture_in_picture.restore": "Вернуть обратно", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 82243f05ad..8947465aa9 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "स्तेक्त्रेसमनुलिपिं कुरु क्लिप्फलकं", "errors.unexpected_crash.report_issue": "दोषमावेदय", "explore.search_results": "परिणामानविच्छ", - "explore.suggested_follows": "तुभ्यम्", + "explore.suggested_follows": "People", "explore.title": "अन्विच्छ", "explore.trending_links": "वार्ताः", "explore.trending_statuses": "पत्राणि", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 07ab7ebf26..7d318d0bab 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", "errors.unexpected_crash.report_issue": "Sinnala unu problema", "explore.search_results": "Resurtados de sa chirca", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 47d18bce4c..1da29dfcd4 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace tae yer clipboord", "errors.unexpected_crash.report_issue": "Sen in a issue", "explore.search_results": "Seirch finnins", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Splore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2fba412650..3e90a30f69 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "ගවේශණය", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index debd8e7699..6a6f8845ed 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlás problém", "explore.search_results": "Výsledky hľadania", - "explore.suggested_follows": "Pre teba", + "explore.suggested_follows": "Ľudia", "explore.title": "Objavuj", "explore.trending_links": "Novinky", "explore.trending_statuses": "Príspevky", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Nazdar #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 485e3890b3..6c5943e2d2 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiraj sledenje skladu na odložišče", "errors.unexpected_crash.report_issue": "Prijavi težavo", "explore.search_results": "Rezultati iskanja", - "explore.suggested_follows": "Za vas", + "explore.suggested_follows": "People", "explore.title": "Razišči", "explore.trending_links": "Novice", "explore.trending_statuses": "Objave", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Tega zaslona ne kaži več", "onboarding.actions.go_to_explore": "Poglejte, kaj je v trendu", "onboarding.actions.go_to_home": "Pojdite na svoj domači vir", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Priljubljeno na Mastodonu", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index a06e36f82f..560ef73752 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", "explore.search_results": "Përfundime kërkimi", - "explore.suggested_follows": "Për ju", + "explore.suggested_follows": "Persona", "explore.title": "Eksploroni", "explore.trending_links": "Lajme", "explore.trending_statuses": "Postime", @@ -445,28 +445,29 @@ "onboarding.actions.close": "Mos e shfaq sërish këtë skenë", "onboarding.actions.go_to_explore": "Shihni ç’është në modë", "onboarding.actions.go_to_home": "Kaloni te prurja juaj kryesore", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", + "onboarding.compose.template": "Tungjatjeta #Mastodon!", + "onboarding.follows.empty": "Mjerisht, s’mund të shfaqen përfundime tani. Mund të provoni të përdorni kërkimin, ose të shfletoni faqen e eksplorimit, që të gjeni persona për ndjekje, ose të riprovoni më vonë.", + "onboarding.follows.lead": "Ju kujdeseni për prurjen tuaj. Sa më tepër persona të tjerë të ndiqni, aq më aktive dhe interesante do të bëhet ajo. Këto profile mund të jenë një pikënisje e mirë—mundeni përherë të ndërpritni ndjekjen e tyre më vonë!", "onboarding.follows.title": "Popullore në Mastodon", "onboarding.share.lead": "Bëjuni të ditur njerëzve se si mund t’ju gjejnë në Mastodon!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Jam {username} në #Mastodon! Ejani dhe ndiqmëni te {url}", "onboarding.share.next_steps": "Hapa pasues të mundshëm:", "onboarding.share.title": "Ndani me të tjerët profilin tuaj", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", + "onboarding.start.lead": "Llogaria juaj e re Mastodon është gati për punë. Ja se si të përfitoni maksimumin prej saj:", + "onboarding.start.skip": "Doni të hidheni drejt e në punë?", + "onboarding.start.title": "Ia dolët!", + "onboarding.steps.follow_people.body": "Ju kujdeseni për prurjen tuaj. Le ta mbushim me persona interesantë.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.publish_status.title": "Make your first post", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", - "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.steps.publish_status.body": "Përshëndetni botën.", + "onboarding.steps.publish_status.title": "Shkruani postimin tuaj të parë", + "onboarding.steps.setup_profile.body": "Ka më tepër gjasa që të tjerët të ndërveprojnë me ju, kur keni një profil të plotësuar.", + "onboarding.steps.setup_profile.title": "Personalizoni profilin tuaj", + "onboarding.steps.share_profile.body": "Bëjuni të ditur shokëve si t’ju gjejnë në Mastodon!", + "onboarding.steps.share_profile.title": "Ndani me të tjerët profilin tuaj", + "onboarding.tips.2fa": "E dini? Mund të siguroni llogarinë tuaj duke ujdisur mirëfilltësim dyfaktorësh, që nga rregullimet e llogarisë tuaj. Funksionon me çfarëdo aplikacioni TOTP që doni, pa pasur nevojë për numër telefoni!", + "onboarding.tips.accounts_from_other_servers": "E dini? Ngaqë Mastodon-i është i decentralizuar, disa profile që hasni, do të jenë të strehuar në shërbyes të tjerë nga ai i juaji. E megjithatë, mundeni të ndërveproni me ta në mënyrë të pacen! Shërbyesi i tyre gjendet në pjesën e dytë të emrit të përdoruesit të gjithkujt!", + "onboarding.tips.migration": "E dini? Nëse ju duket se {domain} s’është zgjidhje kushedi për shërbyes për ju në të ardhmen, mund të kaloni te një shërbyes tjetër Mastodon, pa humbur ndjekësit tuaj. Mundeni edhe të strehoni vetë shërbyesin tuaj!", + "onboarding.tips.verification": "E dini? Mund të verifikoni llogarinë tuaj duke vendosur në sajtin tuaj një lidhje për te profili juaj Mastodon dhe duke shtuar sajtin tuaj te profili juaj. Pa tarifa, apo pa u dashur dokumente!", "password_confirmation.exceeds_maxlength": "Fjalëkalimi i ripohuar tejkalon gjatësinë maksimum të fjalëkalimeve", "password_confirmation.mismatching": "Fjalëkalimi i ripohuar nuk përkon", "picture_in_picture.restore": "Ktheje ku qe", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index ee2db4d539..e860c8fc37 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiraj „stacktrace” u klipbord", "errors.unexpected_crash.report_issue": "Prijavi problem", "explore.search_results": "Rezultati pretrage", - "explore.suggested_follows": "Za Vas", + "explore.suggested_follows": "People", "explore.title": "Istraži", "explore.trending_links": "Vesti", "explore.trending_statuses": "Objave", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 0432869f6a..c20657a876 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Копирај „stacktrace” у клипборд", "errors.unexpected_crash.report_issue": "Пријави проблем", "explore.search_results": "Резултати претраге", - "explore.suggested_follows": "За Вас", + "explore.suggested_follows": "People", "explore.title": "Истражи", "explore.trending_links": "Вести", "explore.trending_statuses": "Објаве", @@ -445,11 +445,12 @@ "onboarding.actions.close": "Не приказуј овај екран поново", "onboarding.actions.go_to_explore": "Погледај шта је у тренду", "onboarding.actions.go_to_home": "Иди на почетну страницу", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Hello #Mastodon!", + "onboarding.follows.empty": "Нажалост, тренутно се не могу приказати резултати. Можете покушати са коришћењем претраге или прегледањем странице за истраживање да бисте пронашли људе које ћете пратити или покушајте поново касније.", "onboarding.follows.lead": "Ви сами бирате своју почетну страницу. Што више људи пратите, то ће бити активније и занимљивије. Ови профили могу бити добра полазна тачка—увек можете да их престанете пратити касније!", "onboarding.follows.title": "Популарно на Mastodon-у", "onboarding.share.lead": "Нека људи знају како могу да вас пронађу на Mastodon-у!", - "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", + "onboarding.share.message": "Ја сам {username} на #Mastodon-у! Пратите ме на {url}", "onboarding.share.next_steps": "Могући следећи кораци:", "onboarding.share.title": "Поделите свој профил", "onboarding.start.lead": "Ваш нови Mastodon налог је спреман. Ево како то можете искористити на најбољи начин:", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Прилагодите свој профил", "onboarding.steps.share_profile.body": "Нека ваши пријатељи знају како да вас пронађу на Mastodon-у!", "onboarding.steps.share_profile.title": "Поделите свој профил", - "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", + "onboarding.tips.2fa": "Да ли сте знали? Можете да заштитите свој налог подешавањем двоструке потврде идентитета у подешавањима налога. Ради са било којом TOTP апликацијом по вашем избору, није потребан број телефона!", "onboarding.tips.accounts_from_other_servers": "Да ли сте знали? Пошто је Mastodon децентрализован, неки профили на које наиђете биће смештени на серверима различитим од вашег. А ипак можете да комуницирате са њима беспрекорно! Њихов сервер је у другој половини њиховог корисничког имена!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Да ли сте знали? Ако сматрате да {domain} није одличан избор сервера за вас у будућности, можете да пређете на други Mastodon сервер без губитка пратилаца. Можете чак и да хостујете сопствени сервер!", + "onboarding.tips.verification": "Да ли сте знали? Можете да верификујете свој налог тако што ћете ставити везу до свог Mastodon профила на свој веб сајт и додати веб сајт свом профилу. Нису потребне никакве накнаде или документи!", "password_confirmation.exceeds_maxlength": "Потврда лозинке премашује максималну дужину лозинке", "password_confirmation.mismatching": "Потврда лозинке се не подудара", "picture_in_picture.restore": "Врати назад", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 9acf385283..795ffe377c 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -182,7 +182,7 @@ "conversation.with": "Med {names}", "copypaste.copied": "Kopierad", "copypaste.copy": "Kopiera", - "copypaste.copy_to_clipboard": "Copy to clipboard", + "copypaste.copy_to_clipboard": "Kopiera till urklipp", "directory.federated": "Från känt fediversum", "directory.local": "Endast från {domain}", "directory.new_arrivals": "Nyanlända", @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", "explore.search_results": "Sökresultat", - "explore.suggested_follows": "För dig", + "explore.suggested_follows": "Personer", "explore.title": "Utforska", "explore.trending_links": "Nyheter", "explore.trending_statuses": "Inlägg", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hallå #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", @@ -462,7 +463,7 @@ "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.steps.share_profile.title": "Dela din profil", "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralized, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 5600422fc7..ca773f3880 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 7d20a23329..6c048c13d0 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு", "errors.unexpected_crash.report_issue": "புகாரளி", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 40759754f2..a7bd1f5baa 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 11deeb8dc2..5166282a61 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 2443dfd227..367fe69494 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", "explore.search_results": "ผลลัพธ์การค้นหา", - "explore.suggested_follows": "สำหรับคุณ", + "explore.suggested_follows": "ผู้คน", "explore.title": "สำรวจ", "explore.trending_links": "ข่าว", "explore.trending_statuses": "โพสต์", @@ -445,6 +445,7 @@ "onboarding.actions.close": "ไม่ต้องแสดงหน้าจอนี้อีก", "onboarding.actions.go_to_explore": "ดูสิ่งที่กำลังนิยม", "onboarding.actions.go_to_home": "ไปยังฟีดหน้าแรกของคุณ", + "onboarding.compose.template": "สวัสดี #Mastodon!", "onboarding.follows.empty": "น่าเสียดาย ไม่สามารถแสดงผลลัพธ์ได้ในตอนนี้ คุณสามารถลองใช้การค้นหาหรือเรียกดูหน้าสำรวจเพื่อค้นหาผู้คนที่จะติดตาม หรือลองอีกครั้งในภายหลัง", "onboarding.follows.lead": "คุณเรียบเรียงฟีดหน้าแรกของคุณเอง ยิ่งคุณติดตามผู้คนมากเท่าไร ฟีดหน้าแรกก็จะยิ่งมีการใช้งานและน่าสนใจมากขึ้นเท่านั้น โปรไฟล์เหล่านี้อาจเป็นจุดเริ่มต้นที่ดี—คุณสามารถเลิกติดตามเขาได้ในภายหลังเสมอ!", "onboarding.follows.title": "เป็นที่นิยมใน Mastodon", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 1f6ad6e6ea..4fa354bdd2 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", "explore.search_results": "Arama sonuçları", - "explore.suggested_follows": "Sizin için", + "explore.suggested_follows": "İnsanlar", "explore.title": "Keşfet", "explore.trending_links": "Haberler", "explore.trending_statuses": "Gönderiler", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Bunu tekrar gösterme", "onboarding.actions.go_to_explore": "Öne çıkanları gör", "onboarding.actions.go_to_home": "Ana akışına git", + "onboarding.compose.template": "Merhaba #Mastodon!", "onboarding.follows.empty": "Maalesef şu an bir sonuç gösterilemiyor. Takip edilecek kişileri bulmak için arama veya keşfet sayfasına gözatmayı kullanabilirsiniz veya daha sonra tekrar deneyin.", "onboarding.follows.lead": "Kendi ana akışınızı siz düzenliyorsunuz. Siz daha fazla insanı takip ettikçe, daha etkin ve ilgi çekici olacaktır. Bu profiller iyi bir başlangıç olabilir, isterseniz izlemeyi daha sonra bırakabilirsiniz!", "onboarding.follows.title": "Mastodon'da Popüler", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 0fc45cb0f6..9cab1a9010 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Хата турында белдерү", "explore.search_results": "Search results", - "explore.suggested_follows": "Сез өчен", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "Яңалыклар", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index c160d1b11f..f142264282 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 7c2e56e562..aa0e70f7b8 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", "errors.unexpected_crash.report_issue": "Повідомити про проблему", "explore.search_results": "Результати пошуку", - "explore.suggested_follows": "Для вас", + "explore.suggested_follows": "Люди", "explore.title": "Огляд", "explore.trending_links": "Новини", "explore.trending_statuses": "Дописи", @@ -445,7 +445,8 @@ "onboarding.actions.close": "Більше не показувати цей екран", "onboarding.actions.go_to_explore": "Переглянути тенденції", "onboarding.actions.go_to_home": "Перейти до вашої домашньої стрічки", - "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.compose.template": "Привіт #Mastodon!", + "onboarding.follows.empty": "На жаль, жоден результат не може бути показаний просто зараз. Ви можете спробувати скористатися пошуком або переглядом сторінки огляду, щоб знайти людей для слідкування або повторіть спробу пізніше.", "onboarding.follows.lead": "Ви керуєте головною стрічкою. Чим більше підписок на людей, тим вона активніша й цікавіша. Ці профілі можуть бути хорошою відправною точкою - ви завжди можете відписатися від них пізніше!", "onboarding.follows.title": "Популярне в Mastodon", "onboarding.share.lead": "Розкажіть людям про те, як вони можуть знайти вас на Mastodon!", @@ -463,10 +464,10 @@ "onboarding.steps.setup_profile.title": "Персоналізуйте свій профіль", "onboarding.steps.share_profile.body": "Розкажіть друзям, як знайти вас на Mastodon!", "onboarding.steps.share_profile.title": "Поділитися своїм профілем", - "onboarding.tips.2fa": "Чи знаєте ви? Ви можете захистити свій обліковий запис, налаштувавши двофакторну автентифікацію в налаштуваннях свого облікового запису. Це працює з будь-яким TOTP додатком на ваш вибір, без потреби номеру телефону!", + "onboarding.tips.2fa": "Чи знаєте ви? Ви можете захистити свій обліковий запис, налаштувавши двофакторну автентифікацію в налаштуваннях свого облікового запису. Це працює з будь-яким TOTP-застосунком, без потреби номера телефону!", "onboarding.tips.accounts_from_other_servers": "Чи знаєте ви? Оскільки Mastodon децентралізований, деякі профілі, які ви відвідуєте, будуть розміщені на інших серверах. І все ж ви можете взаємодіяти з ними! Назва їхнього сервера розміщена у другій половині імені!", - "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", - "onboarding.tips.verification": "Did you know? You can verify your account by putting a link to your Mastodon profile on your own website and adding the website to your profile. No fees or documents necessary!", + "onboarding.tips.migration": "Чи знаєте ви? Якщо ви відчуваєте, що {domain} не найкращий вибір сервера в майбутньому, ви можете перейти на інший сервер Mastodon, не втративши при цьому своїх підписників. Ви навіть можете створити власний сервер!", + "onboarding.tips.verification": "Чи знаєте ви? Ви можете перевірити свій обліковий запис, розмістивши посилання на ваш профіль Mastodon на вашому вебсайті та додавши сайт до вашого профілю. Без плати чи документів!", "password_confirmation.exceeds_maxlength": "Підтвердження пароля перевищує максимально допустиму довжину пароля", "password_confirmation.mismatching": "Підтвердження пароля не збігається", "picture_in_picture.restore": "Повернути назад", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index f332720dc2..c9cd6e31bb 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index a9d635ed61..edadd69261 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ni vaqtinchalik xotiraga nusxalash", "errors.unexpected_crash.report_issue": "Muammo haqida xabar berish", "explore.search_results": "Qidiruv natijalari", - "explore.suggested_follows": "Siz uchun", + "explore.suggested_follows": "People", "explore.title": "Ko'rib chiqish", "explore.trending_links": "Yangiliklar", "explore.trending_statuses": "Postlar", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index f553fcb195..1b2686e251 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", "explore.search_results": "Kết quả tìm kiếm", - "explore.suggested_follows": "Đề xuất", + "explore.suggested_follows": "Mọi người", "explore.title": "Khám phá", "explore.trending_links": "Tin tức", "explore.trending_statuses": "Tút", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Không hiển thị lại", "onboarding.actions.go_to_explore": "Xem những gì đang thịnh hành", "onboarding.actions.go_to_home": "Đi đến bảng tin", + "onboarding.compose.template": "Xin chào #Mastodon!", "onboarding.follows.empty": "Không có kết quả có thể được hiển thị lúc này. Bạn có thể thử sử dụng tính năng tìm kiếm hoặc duyệt qua trang khám phá để tìm những người theo dõi hoặc thử lại sau.", "onboarding.follows.lead": "Bạn quản lý bảng tin của riêng bạn. Bạn càng theo dõi nhiều người, nó sẽ càng sôi động và thú vị. Những hồ sơ này có thể là một điểm khởi đầu tốt—bạn luôn có thể hủy theo dõi họ sau!", "onboarding.follows.title": "Thịnh hành trên Mastodon", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index ce79e7656e..2433fb728f 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "People", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 14e926bc81..7b1f3b5656 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", "explore.search_results": "搜索结果", - "explore.suggested_follows": "为你推荐", + "explore.suggested_follows": "用户", "explore.title": "探索", "explore.trending_links": "新闻", "explore.trending_statuses": "嘟文", @@ -440,24 +440,25 @@ "notifications_permission_banner.enable": "启用桌面通知", "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。你可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", "notifications_permission_banner.title": "精彩不容错过", - "onboarding.action.back": "Take me back", - "onboarding.actions.back": "Take me back", + "onboarding.action.back": "带我返回", + "onboarding.actions.back": "带我返回", "onboarding.actions.close": "不再显示此画面", "onboarding.actions.go_to_explore": "看看有什么新鲜事", "onboarding.actions.go_to_home": "转到主页订阅流", + "onboarding.compose.template": "你好 #Mastodon!", "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。您可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.share.lead": "Let people know how they can find you on Mastodon!", + "onboarding.follows.lead": "你管理你自己的家庭饲料。你关注的人越多,它将越活跃和有趣。 这些配置文件可能是一个很好的起点——你可以随时取消关注它们!", + "onboarding.follows.title": "在Mastodon上流行的", + "onboarding.share.lead": "让人们知道他们如何在Mastodon找到你!", "onboarding.share.message": "我是来自 #Mastodon 的 {username}!请在 {url} 关注我。", - "onboarding.share.next_steps": "Possible next steps:", - "onboarding.share.title": "Share your profile", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.start.title": "You've made it!", + "onboarding.share.next_steps": "可能的下一步:", + "onboarding.share.title": "分享你的个人资料", + "onboarding.start.lead": "您新的 Mastodon 帐户已准备好。下面是如何最大限度地利用它:", + "onboarding.start.skip": "想要在前面跳过吗?", + "onboarding.start.title": "你已经成功了!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.body": "向世界问声好吧。", "onboarding.steps.publish_status.title": "发布你的第一篇嘟文", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "自定义你的个人资料", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 690bedb788..0952857e22 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "explore.search_results": "搜尋結果", - "explore.suggested_follows": "為您推薦", + "explore.suggested_follows": "People", "explore.title": "探索", "explore.trending_links": "最新消息", "explore.trending_statuses": "帖文", @@ -445,6 +445,7 @@ "onboarding.actions.close": "Don't show this screen again", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a5927d9954..c4c8b761e1 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -240,7 +240,7 @@ "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "回報問題", "explore.search_results": "搜尋結果", - "explore.suggested_follows": "為您推薦", + "explore.suggested_follows": "使用者", "explore.title": "探索", "explore.trending_links": "最新消息", "explore.trending_statuses": "嘟文", @@ -445,6 +445,7 @@ "onboarding.actions.close": "不再顯示此畫面", "onboarding.actions.go_to_explore": "看看發生什麼新鮮事", "onboarding.actions.go_to_home": "前往您的首頁時間軸", + "onboarding.compose.template": "哈囉 #Mastodon!", "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。", "onboarding.follows.lead": "您建立自己的首頁時間軸。若您跟隨更多人的話,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", "onboarding.follows.title": "Mastodon 上之流行內容", diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 8a7f43c862..551071b8e9 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -94,6 +94,7 @@ ga: search: Cuardaigh security_measures: only_password: Pasfhocal amháin + password_and_2fa: Pasfhocal agus fíordheimhniú déshraithe sensitized: Marcáladh mar íogair silence: Teorannaigh silenced: Teoranta @@ -238,6 +239,7 @@ ga: status: Stádas reports: are_you_sure: An bhfuil tú cinnte? + cancel: Cealaigh category: Catagóir created_at: Tuairiscithe delete_and_resolve: Scrios postálacha diff --git a/config/locales/pl.yml b/config/locales/pl.yml index dc20202ecf..31a1236b83 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1057,6 +1057,7 @@ pl: security: Bezpieczeństwo set_new_password: Ustaw nowe hasło setup: + email_below_hint_html: Sprawdź folder ze spamem lub poproś o inny link potwierdzający. Możesz poprawić swój adres e-mail, jeśli jest niepoprawny. email_settings_hint_html: Kliknij link, który wysłaliśmy do Ciebie w celu zweryfikowania %{email}. Poczekamy tutaj. link_not_received: Nie otrzymano linku? new_confirmation_instructions_sent: Za kilka minut otrzymasz nowy e-mail z linkiem potwierdzającym! @@ -1065,6 +1066,7 @@ pl: preamble_html: Zaloguj się przy użyciu danych logowania %{domain}. Jeśli Twoje konto jest hostowane na innym serwerze, nie będziesz mógł się zalogować tutaj. title: Zaloguj się do %{domain} sign_up: + manual_review: Rejestracja na %{domain} przechodzi przez ręczne sprawdzanie przez naszych moderatorów. Aby pomóc nam usprawnić ten proces, napisz coś o sobie oraz dlaczego chcesz założyć konto na %{domain}. preamble: Z kontem na tym serwerze Mastodon będziesz mógł obserwować każdą inną osobę w sieci, niezależnie od miejsca przechowywania ich konta. title: Skonfigurujmy Twoje konto na %{domain}. status: diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 39190ad9b4..3597544ce3 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -3,15 +3,15 @@ ga: simple_form: hints: account_alias: - acct: Sonraigh ainm@fearann an chuntais ar mhaith leat aistriú uaidh + acct: Sonraigh ainm@fearann don chuntas ar mhaith leat aistriú uaidh account_migration: - acct: Sonraigh ainm@fearann an chuntais ar mhaith leat aistriú chuige + acct: Sonraigh ainm@fearann don chuntas ar mhaith leat aistriú chuige admin_account_action: types: - disable: Cuir cosc ar an úsáideoir a chuntas a úsáid, ach ná scrios nó folaigh a bhfuil ann. + disable: Cuir cosc ar an úsáideoir a chuntas a úsáid, ach ná scrios ná folaigh a bhfuil ann. defaults: - setting_display_media_hide_all: Folaítear meáin i gcónaí - setting_display_media_show_all: Go dtaispeántar meáin i gcónaí + setting_display_media_hide_all: Folaigh meáin i gcónaí + setting_display_media_show_all: Taispeáin meáin i gcónaí labels: account: fields: @@ -40,7 +40,7 @@ ga: setting_display_media_hide_all: Cuir uile i bhfolach setting_display_media_show_all: Taispeáin uile setting_theme: Téama suímh - setting_trends: Taispeáin treochta an lae + setting_trends: Taispeáin treochtaí an lae inniu title: Teideal username: Ainm úsáideora featured_tag: diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index d0e7d165bb..cfb4dc5ba3 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -59,6 +59,7 @@ vi: setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết của tút setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấn vào + username: Chỉ chấp nhận ký tự, số và dấu gạch dưới whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy domain_allow: domain: Máy chủ này sẽ tiếp nhận dữ liệu, rồi sau đó xử lý và lưu trữ diff --git a/config/locales/sq.yml b/config/locales/sq.yml index c86cf7a419..2d2dfa2d52 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -982,6 +982,7 @@ sq: prefix_invited_by_user: "@%{name} ju fton të bëheni pjesë e këtij shërbyesi Mastodon!" prefix_sign_up: Regjistrohuni në Mastodon që sot! suffix: Me një llogari, do të jeni në gjendje të ndiqni persona, përditësime postimesh dhe të shkëmbeni mesazhe me përdorues nga cilido shërbyes Mastodon, etj! + didnt_get_confirmation: S’morët një lidhje ripohimi? dont_have_your_security_key: S’i keni kyçet tuaj të sigurisë? forgot_password: Harruat fjalëkalimin tuaj? invalid_reset_password_token: Token-i i ricaktimit të fjalëkalimit është i pavlefshëm ose ka skaduar. Ju lutemi, kërkoni një të ri. @@ -994,11 +995,16 @@ sq: migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund ta formësoni këtu. or_log_in_with: Ose bëni hyrjen me privacy_policy_agreement_html: I kam lexuar dhe pajtohem me rregullat e privatësisë + progress: + confirm: Email ripohimi + details: Hollësitë tuaja + review: Shqyrtimi ynë providers: cas: CAS saml: SAML register: Regjistrohuni registration_closed: "%{instance} s’pranon anëtarë të rinj" + resend_confirmation: Ridërgo lidhje ripohimi reset_password: Ricaktoni fjalëkalimin rules: accept: Pranoje @@ -1007,10 +1013,17 @@ sq: title: Disa rregulla bazë. security: Siguri set_new_password: Caktoni fjalëkalim të ri + setup: + email_below_hint_html: Shihni te dosja juaj e të padëshiruara, ose kërkoni një tjetër. Mund të ndreqni adresën tuaj email, nëse është e gabuar. + email_settings_hint_html: Që të verifikoni %{email}, klikoni lidhjen që ju dërguam. Do të presim këtu. + link_not_received: S’morët lidhje? + new_confirmation_instructions_sent: Pas pak minutash do të merrni një email të ri me lidhjen e ripohimit! + title: Shihni te email-et tuaj sign_in: preamble_html: Hyni me kredencialet tuaja për te %{domain}. Nëse llogaria juaj strehohet në një tjetër shërbyes, s’do të jeni në gjendje të bëni hyrjen këtu. title: Bëni hyrjen te %{domain} sign_up: + manual_review: Regjistrimet te %{domain} kalojnë një shqyrtim dorazi nga moderatorët tanë. Që të na ndihmoni të përfundojmë regjistrimin tuaj, na shkruani pakëz mbi veten dhe pse doni një llogari në %{domain}. preamble: Me një llogari në këtë shërbyes Mastodon, do të jeni në gjendje të ndiqni cilindo person tjetër në rrjet, pavarësisht se ku strehohet llogaria e tyre. title: Le të ujdisim llogarinë tuaj në %{domain}. status: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index c7cc4c68db..4e93e6390f 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -125,6 +125,8 @@ sv: removed_header_msg: Tog bort %{username}s sidhuvudsbild resend_confirmation: already_confirmed: Den här användaren är redan bekräftad + send: Skicka bekräftelselänken igen + success: Bekräftelselänken har skickats! reset: Återställ reset_password: Återställ lösenord resubscribe: Starta en ny prenumeration @@ -986,6 +988,7 @@ sv: prefix_invited_by_user: "@%{name} bjuder in dig att gå med i en Mastodon-server!" prefix_sign_up: Registrera dig på Mastodon idag! suffix: Med ett konto kommer du att kunna följa personer, göra inlägg och utbyta meddelanden med användare från andra Mastodon-servrar, och ännu mer! + didnt_get_confirmation: Fick du ingen bekräftelselänk? dont_have_your_security_key: Har du inte din säkerhetsnyckel? forgot_password: Glömt ditt lösenord? invalid_reset_password_token: Lösenordsåterställningstoken är ogiltig eller utgått. Vänligen be om en ny. @@ -998,11 +1001,15 @@ sv: migrate_account_html: Om du vill omdirigera detta konto till ett annat, kan du konfigurera det här. or_log_in_with: Eller logga in med privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn + progress: + confirm: Bekräfta e-postadress + details: Dina uppgifter providers: cas: CAS saml: SAML register: Registrera registration_closed: "%{instance} accepterar inte nya medlemmar" + resend_confirmation: Skicka bekräftelselänken igen reset_password: Återställ lösenord rules: accept: Godkänn @@ -1011,6 +1018,8 @@ sv: title: Några grundregler. security: Säkerhet set_new_password: Skriv in nytt lösenord + setup: + link_not_received: Fick du ingen länk? sign_in: preamble_html: Logga in med dina användaruppgifter på %{domain}. Om ditt konto finns på en annan server kommer du inte att kunna logga in här. title: Logga in på %{domain} diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 642d6e551e..92a90e52c1 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -983,11 +983,17 @@ vi: migrate_account_html: Nếu bạn muốn bỏ tài khoản này để dùng một tài khoản khác, bạn có thể thiết lập tại đây. or_log_in_with: Hoặc đăng nhập bằng privacy_policy_agreement_html: Tôi đã đọc và đồng ý chính sách bảo mật + progress: + confirm: Xác minh email + details: Thông tin của bạn + review: Đợi duyệt + rules: Đọc nội quy providers: cas: CAS saml: SAML register: Đăng ký registration_closed: "%{instance} tạm ngưng đăng ký mới" + resend_confirmation: Gửi lại email xác nhận reset_password: Đặt lại mật khẩu rules: accept: Chấp nhận @@ -996,10 +1002,17 @@ vi: title: Nội quy máy chủ. security: Bảo mật set_new_password: Đặt mật khẩu mới + setup: + email_below_hint_html: Kiểm tra thư rác của bạn hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai. + email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn. + link_not_received: Không nhận được mã? + new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác nhận sau vài phút! + title: Kiểm tra hộp thư của bạn sign_in: preamble_html: Đăng nhập bằng tài khoản %{domain}. Nếu tài khoản của bạn được lưu trữ trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây. title: Đăng nhập %{domain} sign_up: + manual_review: Đăng ký trên %{domain} cần duyệt thủ công. Để giúp chúng tôi xử lý nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}. preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu. title: Cho phép bạn đăng ký trên %{domain}. status: From 89c01383f9aadc39bbe2738cdb7c51ff9c743d53 Mon Sep 17 00:00:00 2001 From: Josh McKinney Date: Sun, 30 Apr 2023 01:03:28 -0700 Subject: [PATCH 25/43] fix: remove port 80 mapping in devcontainer (#24658) --- .devcontainer/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 73fe22f3aa..4eebb74d13 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -26,7 +26,6 @@ services: ports: - '127.0.0.1:3000:3000' - '127.0.0.1:4000:4000' - - '127.0.0.1:80:3000' networks: - external_network - internal_network From 6b95aaaa657db6a6676a8e4d4108e79612b2b446 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Sun, 30 Apr 2023 04:04:15 -0400 Subject: [PATCH 26/43] Remove empty HTTP error translations (#24210) --- config/locales/af.yml | 6 ------ config/locales/bn.yml | 8 -------- config/locales/br.yml | 8 -------- config/locales/bs.yml | 8 -------- config/locales/ga.yml | 8 -------- config/locales/hi.yml | 8 -------- config/locales/hr.yml | 8 -------- config/locales/hy.yml | 5 ----- config/locales/ig.yml | 8 -------- config/locales/ka.yml | 3 --- config/locales/kn.yml | 8 -------- config/locales/kw.yml | 8 -------- config/locales/lt.yml | 3 --- config/locales/mk.yml | 8 -------- config/locales/ml.yml | 8 -------- config/locales/mr.yml | 8 -------- config/locales/oc.yml | 2 -- config/locales/ro.yml | 3 --- config/locales/sa.yml | 8 -------- config/locales/szl.yml | 8 -------- config/locales/ta.yml | 8 -------- config/locales/te.yml | 8 -------- config/locales/tt.yml | 8 -------- config/locales/ug.yml | 8 -------- config/locales/ur.yml | 8 -------- config/locales/uz.yml | 8 -------- config/locales/zgh.yml | 8 -------- crowdin.yml | 2 ++ 28 files changed, 2 insertions(+), 190 deletions(-) diff --git a/config/locales/af.yml b/config/locales/af.yml index ed86619911..1dbf99afe9 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -91,13 +91,7 @@ af: approve_appeal: Aanvaar appèl reject_appeal: Verwerp appèl errors: - '400': The request you submitted was invalid or malformed. '403': Jy het nie toestemming om hierdie bladsy te sien nie. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: bookmarks: Boekmerke lists: Lyste diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 84eb59a08e..24b85f13f7 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -224,13 +224,5 @@ bn: report_notes: created_msg: রিপোর্ট নোট সফলভাবে তৈরি করা হয়েছে! destroyed_msg: রিপোর্ট নোট সফলভাবে মোছা হয়েছে! - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. verification: verification: সত্যতা নির্ধারণ diff --git a/config/locales/br.yml b/config/locales/br.yml index fc4e3d9825..3ab23a4a1e 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -334,14 +334,6 @@ br: created_at: Deiziad title_actions: none: Diwall - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Deiziad diff --git a/config/locales/bs.yml b/config/locales/bs.yml index 2709636c9f..b7817c17fe 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -1,10 +1,2 @@ --- bs: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 551071b8e9..65da86372b 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -363,14 +363,6 @@ ga: title_actions: none: Rabhadh your_appeal_pending: Chuir tú achomharc isteach - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Dáta diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 809e425d83..8870fb8f92 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -7,14 +7,6 @@ hi: upload_check_privacy_error_object_storage: action: अधिक जानकारी हेतु यहां क्लिक करें। message_html: " आपके वेब सर्वर का कन्फिगरेशन सही नहीं है। उपयोगकर्ताओं की निजता खतरे में है। " - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. relationships: follow_failure: चुने हुए अकाउंट्स में से कुछ को फ़ॉलो नहीं किया जा सकता sessions: diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 44f408d304..dda7b22197 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -73,14 +73,6 @@ hr: less_than_x_seconds: Upravo sada over_x_years: "%{count}god" x_months: "%{count}mj" - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Datum diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 540ef36167..658b982f08 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -529,15 +529,10 @@ hy: domain_validator: invalid_domain: անվաւէր տիրոյթի անուն errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. '404': Էջը, որը փնտրում ես գոյութիւն չունի։ - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. '429': Չափազանց շատ հարցումներ '500': title: Էջը ճիշտ չէ - '503': The page could not be served due to a temporary server failure. existing_username_validator: not_found: չյաջողուեց գտնել այս ծածկագրով լոկալ օգտատիրոջ not_found_multiple: չյաջողուեց գտնել %{usernames} diff --git a/config/locales/ig.yml b/config/locales/ig.yml index 6459396380..f52e594c83 100644 --- a/config/locales/ig.yml +++ b/config/locales/ig.yml @@ -1,10 +1,2 @@ --- ig: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 6766b160f9..a232623667 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -263,10 +263,8 @@ ka: proceed: ანგარიშის გაუქმება success_msg: თქვენი ანგარიში წარმატებით გაუქმდა errors: - '400': The request you submitted was invalid or malformed. '403': ამ გვერდის ხილვის უფლება არ გაქვთ. '404': გვერდი რომელსაც ეძებთ არ არსებობს. - '406': This page is not available in the requested format. '410': გვერდი რომელსაც ეძებდით აღარ არსებობს. '422': content: უსაფრთხოების ვერიფიკაცია ვერ მოხერხდა. ბლოკავთ ქუქის? @@ -275,7 +273,6 @@ ka: '500': content: ბოდიში, ჩვენ მხარეს რაღაც არია. title: გვერდი არაა სწორი - '503': The page could not be served due to a temporary server failure. noscript_html: მასტოდონ ვებ-აპლიკაციის გამოყენებისთვის, გთხოვთ ჩართოთ ჯავასკრიპტი. სხვა შემთხვევაში, მასტოდონის თქვენი პატფორმისთვის სცადეთ გამოიყენოთ ერთ-ერთი მშობლიური აპლიკაცია. exports: archive_takeout: diff --git a/config/locales/kn.yml b/config/locales/kn.yml index 998f613ef7..8806816165 100644 --- a/config/locales/kn.yml +++ b/config/locales/kn.yml @@ -1,10 +1,2 @@ --- kn: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/kw.yml b/config/locales/kw.yml index 4085046cf6..b7731ca1a3 100644 --- a/config/locales/kw.yml +++ b/config/locales/kw.yml @@ -5,13 +5,5 @@ kw: email: Ebost followers: Holyoryon title: Akontow - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. settings: account: Akont diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 2a4acb8312..ab31b3989e 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -298,10 +298,8 @@ lt: proceed: Ištrinti paskyrą success_msg: Jūsų paskyra sėkmingai ištrinta errors: - '400': The request you submitted was invalid or malformed. '403': Jūs neturie prieigos matyti šiam puslapiui. '404': Puslapis nerastas. - '406': This page is not available in the requested format. '410': Puslapis neegzistuoja. '422': content: Apsaugos patvirtinmas klaidingas. Ar jūs blokuojate sausainius? @@ -310,7 +308,6 @@ lt: '500': content: Atsiprašome, tačiau mūsų pusėje įvyko klaida. title: Netinkamas puslapis - '503': The page could not be served due to a temporary server failure. noscript_html: Kad naudotumėtės Mastodon web aplikacija, prašome įsijungti JavaScript. Alternatyviai, pabandykite viena iš vietinių aplikacijų Mastodon savo platformai. exports: archive_takeout: diff --git a/config/locales/mk.yml b/config/locales/mk.yml index 9504dc972e..de46b2f73b 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -1,10 +1,2 @@ --- mk: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 6db786ad98..9a3471d1a0 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -78,14 +78,6 @@ ml: all: എല്ലാം authorize_follow: following: 'വിജയകരം! നിങ്ങൾ ഇപ്പോൾ പിന്തുടരുന്നു:' - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. filters: contexts: notifications: അറിയിപ്പുകൾ diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 161e5e5717..de65b2f4a2 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -1,10 +1,2 @@ --- mr: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/oc.yml b/config/locales/oc.yml index d6c3140a4b..8affb7745d 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -560,7 +560,6 @@ oc: domain_validator: invalid_domain: es pas un nom de domeni valid errors: - '400': The request you submitted was invalid or malformed. '403': Avètz pas l’autorizacion de veire aquesta pagina. '404': La pagina que cercatz existís pas aquí. '406': La pagina es pas disponibla dins lo format demandat. @@ -572,7 +571,6 @@ oc: '500': content: Un quicomet a pas foncionat coma caliá. title: Aquesta pagina es pas corrècta - '503': The page could not be served due to a temporary server failure. noscript_html: Per utilizar l’aplicacion web de Mastodon, mercés d’activar JavaScript. O podètz utilizar una aplicacion per vòstra plataforma coma alernativa. existing_username_validator: not_found: impossible de trobar un utilizaire local amb aqueste nom d’utilizaire diff --git a/config/locales/ro.yml b/config/locales/ro.yml index bc1a1d223b..a751669ca0 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -492,10 +492,8 @@ ro: email_change_html: Puteți schimba adresa de e-mail fără a șterge contul dvs email_contact_html: Dacă tot nu ajunge, puteți trimite e-mail la %{email} pentru ajutor errors: - '400': The request you submitted was invalid or malformed. '403': Nu ai permisiunea să vizitezi această pagină. '404': Pagina pe care o cauți nu există. - '406': This page is not available in the requested format. '410': Pagina pe care o cauți nu mai există. '422': content: Verificarea securității a eșuat. Ai blocat cookiurile? @@ -504,7 +502,6 @@ ro: '500': content: Ne pare rău, dar ceva a funcționat greșit. Încercați din nou!? title: Această pagină nu este corectă - '503': The page could not be served due to a temporary server failure. noscript_html: Pentru a utiliza o aplicație web Mastodon, te rog activează JavaScript. Alternativ, încearcă una din aplicațiile native Mastodon pentru platforma ta. exports: archive_takeout: diff --git a/config/locales/sa.yml b/config/locales/sa.yml index f8c64a7854..84df86ceb9 100644 --- a/config/locales/sa.yml +++ b/config/locales/sa.yml @@ -1,10 +1,2 @@ --- sa: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/szl.yml b/config/locales/szl.yml index 2e059c51ac..bfcf2a6add 100644 --- a/config/locales/szl.yml +++ b/config/locales/szl.yml @@ -1,10 +1,2 @@ --- szl: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ta.yml b/config/locales/ta.yml index 2d2bce86ad..6386301bb1 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -197,14 +197,6 @@ ta: errors: invalid_key: ஒரு முறையான Ed25519 அல்லது Curve25519 key அல்ல invalid_signature: ஒரு முறையான Ed25519 அடையாளம் அல்ல - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. filters: index: empty: தடுப்புகள் ஏதும் இல்லை. diff --git a/config/locales/te.yml b/config/locales/te.yml index e3b3f97ab6..a5eb8d7794 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -70,11 +70,3 @@ te: moderation_notes: మోడరేషన్ నోట్స్ most_recent_activity: ఇటీవల యాక్టివిటీ most_recent_ip: ఇటీవలి IP - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/tt.yml b/config/locales/tt.yml index d260e8be20..642ef8233c 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -140,14 +140,6 @@ tt: x_minutes: "%{count}м" x_months: "%{count}ай" x_seconds: "%{count}сек" - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Көне diff --git a/config/locales/ug.yml b/config/locales/ug.yml index ea5bdb5c88..48684f9ebe 100644 --- a/config/locales/ug.yml +++ b/config/locales/ug.yml @@ -1,10 +1,2 @@ --- ug: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/ur.yml b/config/locales/ur.yml index a5ae83fd42..79c5de2dfb 100644 --- a/config/locales/ur.yml +++ b/config/locales/ur.yml @@ -1,10 +1,2 @@ --- ur: - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/uz.yml b/config/locales/uz.yml index caed654ec7..403ffd33cf 100644 --- a/config/locales/uz.yml +++ b/config/locales/uz.yml @@ -39,11 +39,3 @@ uz: most_recent_ip: Eng oxirgi IP perform_full_suspension: To'xtatilgan reject: Rad etish - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 4750a6cee5..3cbd31de59 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -83,14 +83,6 @@ zgh: title: ⴹⴼⵕ %{acct} deletes: proceed: ⴽⴽⵙ ⴰⵎⵉⴹⴰⵏ - errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests - '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: ⴰⵣⵎⵣ diff --git a/crowdin.yml b/crowdin.yml index 6d84ab0a10..7cb74c4010 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,6 @@ commit_message: '[ci skip]' +skip_untranslated_strings: true + files: - source: /app/javascript/mastodon/locales/en.json translation: /app/javascript/mastodon/locales/%two_letters_code%.json From af824db3989eb422dfa43dde4171796d803f0029 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 08:06:53 -0400 Subject: [PATCH 27/43] Fix Rails/InverseOf cop (#24732) --- .rubocop_todo.yml | 13 ------------- app/models/appeal.rb | 2 +- app/models/concerns/account_interactions.rb | 18 ++++++++++++------ app/models/custom_emoji.rb | 3 ++- app/models/domain_block.rb | 2 +- app/models/follow_recommendation.rb | 2 +- app/models/instance.rb | 10 ++++++---- app/models/notification.rb | 16 +++++++++------- app/models/status.rb | 2 +- 9 files changed, 33 insertions(+), 35 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 5d21adfbf5..fe22385a7f 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1348,19 +1348,6 @@ Rails/I18nLocaleTexts: - 'lib/tasks/mastodon.rake' - 'spec/helpers/flashes_helper_spec.rb' -# Configuration parameters: IgnoreScopes, Include. -# Include: app/models/**/*.rb -Rails/InverseOf: - Exclude: - - 'app/models/appeal.rb' - - 'app/models/concerns/account_interactions.rb' - - 'app/models/custom_emoji.rb' - - 'app/models/domain_block.rb' - - 'app/models/follow_recommendation.rb' - - 'app/models/instance.rb' - - 'app/models/notification.rb' - - 'app/models/status.rb' - # Configuration parameters: Include. # Include: app/controllers/**/*.rb, app/mailers/**/*.rb Rails/LexicallyScopedActionFilter: diff --git a/app/models/appeal.rb b/app/models/appeal.rb index 6fbf60b39e..f1290ad01a 100644 --- a/app/models/appeal.rb +++ b/app/models/appeal.rb @@ -19,7 +19,7 @@ class Appeal < ApplicationRecord MAX_STRIKE_AGE = 20.days belongs_to :account - belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id' + belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id', inverse_of: :appeal belongs_to :approved_by_account, class_name: 'Account', optional: true belongs_to :rejected_by_account, class_name: 'Account', optional: true diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 48ab1349dd..b2ccddef32 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -81,8 +81,10 @@ module AccountInteractions # Follow relations has_many :follow_requests, dependent: :destroy - has_many :active_relationships, class_name: 'Follow', foreign_key: 'account_id', dependent: :destroy - has_many :passive_relationships, class_name: 'Follow', foreign_key: 'target_account_id', dependent: :destroy + with_options class_name: 'Follow', dependent: :destroy do + has_many :active_relationships, foreign_key: 'account_id', inverse_of: :account + has_many :passive_relationships, foreign_key: 'target_account_id', inverse_of: :target_account + end has_many :following, -> { order('follows.id desc') }, through: :active_relationships, source: :target_account has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account @@ -91,15 +93,19 @@ module AccountInteractions has_many :account_notes, dependent: :destroy # Block relationships - has_many :block_relationships, class_name: 'Block', foreign_key: 'account_id', dependent: :destroy + with_options class_name: 'Block', dependent: :destroy do + has_many :block_relationships, foreign_key: 'account_id', inverse_of: :account + has_many :blocked_by_relationships, foreign_key: :target_account_id, inverse_of: :target_account + end has_many :blocking, -> { order('blocks.id desc') }, through: :block_relationships, source: :target_account - has_many :blocked_by_relationships, class_name: 'Block', foreign_key: :target_account_id, dependent: :destroy has_many :blocked_by, -> { order('blocks.id desc') }, through: :blocked_by_relationships, source: :account # Mute relationships - has_many :mute_relationships, class_name: 'Mute', foreign_key: 'account_id', dependent: :destroy + with_options class_name: 'Mute', dependent: :destroy do + has_many :mute_relationships, foreign_key: 'account_id', inverse_of: :account + has_many :muted_by_relationships, foreign_key: :target_account_id, inverse_of: :target_account + end has_many :muting, -> { order('mutes.id desc') }, through: :mute_relationships, source: :target_account - has_many :muted_by_relationships, class_name: 'Mute', foreign_key: :target_account_id, dependent: :destroy has_many :muted_by, -> { order('mutes.id desc') }, through: :muted_by_relationships, source: :account has_many :conversation_mutes, dependent: :destroy has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 3d7900226d..f66353fadd 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -36,7 +36,8 @@ class CustomEmoji < ApplicationRecord IMAGE_MIME_TYPES = %w(image/png image/gif image/webp).freeze belongs_to :category, class_name: 'CustomEmojiCategory', optional: true - has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode + + has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode, inverse_of: false has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index fbb045416c..06d35d8bee 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -25,7 +25,7 @@ class DomainBlock < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true - has_many :accounts, foreign_key: :domain, primary_key: :domain + has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false delegate :count, to: :accounts, prefix: true scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 602d329858..123570b124 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -12,7 +12,7 @@ class FollowRecommendation < ApplicationRecord self.primary_key = :account_id - belongs_to :account_summary, foreign_key: :account_id + belongs_to :account_summary, foreign_key: :account_id, inverse_of: false belongs_to :account scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) } diff --git a/app/models/instance.rb b/app/models/instance.rb index 1f96d37286..95231c52a7 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -13,11 +13,13 @@ class Instance < ApplicationRecord attr_accessor :failure_days - has_many :accounts, foreign_key: :domain, primary_key: :domain + has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false - belongs_to :domain_block, foreign_key: :domain, primary_key: :domain - belongs_to :domain_allow, foreign_key: :domain, primary_key: :domain - belongs_to :unavailable_domain, foreign_key: :domain, primary_key: :domain # skipcq: RB-RL1031 + with_options foreign_key: :domain, primary_key: :domain, inverse_of: false do + belongs_to :domain_block + belongs_to :domain_allow + belongs_to :unavailable_domain # skipcq: RB-RL1031 + end scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } diff --git a/app/models/notification.rb b/app/models/notification.rb index 3eaf557b08..8ba506fa1b 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -55,13 +55,15 @@ class Notification < ApplicationRecord belongs_to :from_account, class_name: 'Account', optional: true belongs_to :activity, polymorphic: true, optional: true - belongs_to :mention, foreign_key: 'activity_id', optional: true - belongs_to :status, foreign_key: 'activity_id', optional: true - belongs_to :follow, foreign_key: 'activity_id', optional: true - belongs_to :follow_request, foreign_key: 'activity_id', optional: true - belongs_to :favourite, foreign_key: 'activity_id', optional: true - belongs_to :poll, foreign_key: 'activity_id', optional: true - belongs_to :report, foreign_key: 'activity_id', optional: true + with_options foreign_key: 'activity_id', optional: true do + belongs_to :mention, inverse_of: :notification + belongs_to :status, inverse_of: :notification + belongs_to :follow, inverse_of: :notification + belongs_to :follow_request, inverse_of: :notification + belongs_to :favourite, inverse_of: :notification + belongs_to :poll, inverse_of: false + belongs_to :report, inverse_of: false + end validates :type, inclusion: { in: TYPES } diff --git a/app/models/status.rb b/app/models/status.rb index 302049e20e..990d0fc29e 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -56,7 +56,7 @@ class Status < ApplicationRecord belongs_to :account, inverse_of: :statuses belongs_to :in_reply_to_account, class_name: 'Account', optional: true belongs_to :conversation, optional: true - belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true + belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true, inverse_of: false belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true From d00e45a7d369790a69effd49a067977da18cddd9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 08:07:03 -0400 Subject: [PATCH 28/43] Fix Rails/I18nLocaleAssignment cop (#24693) --- .rubocop_todo.yml | 8 ------ .../auth/registrations_controller_spec.rb | 6 ++--- spec/helpers/application_helper_spec.rb | 26 +++++++++---------- spec/requests/localization_spec.rb | 6 +++-- 4 files changed, 19 insertions(+), 27 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index fe22385a7f..171a11a0a1 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1335,14 +1335,6 @@ Rails/HasManyOrHasOneDependent: - 'app/models/user.rb' - 'app/models/web/push_subscription.rb' -# Configuration parameters: Include. -# Include: spec/**/*.rb, test/**/*.rb -Rails/I18nLocaleAssignment: - Exclude: - - 'spec/controllers/auth/registrations_controller_spec.rb' - - 'spec/helpers/application_helper_spec.rb' - - 'spec/requests/localization_spec.rb' - Rails/I18nLocaleTexts: Exclude: - 'lib/tasks/mastodon.rake' diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index fffa7e06d7..5c422bdffc 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -104,9 +104,9 @@ RSpec.describe Auth::RegistrationsController, type: :controller do end around do |example| - current_locale = I18n.locale - example.run - I18n.locale = current_locale + I18n.with_locale(I18n.locale) do + example.run + end end before { request.env['devise.mapping'] = Devise.mappings[:user] } diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 88751548fc..220eb2c80b 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -44,30 +44,28 @@ describe ApplicationHelper do end describe 'locale_direction' do - around do |example| - current_locale = I18n.locale - example.run - I18n.locale = current_locale - end - it 'adds rtl body class if locale is Arabic' do - I18n.locale = :ar - expect(helper.locale_direction).to eq 'rtl' + I18n.with_locale(:ar) do + expect(helper.locale_direction).to eq 'rtl' + end end it 'adds rtl body class if locale is Farsi' do - I18n.locale = :fa - expect(helper.locale_direction).to eq 'rtl' + I18n.with_locale(:fa) do + expect(helper.locale_direction).to eq 'rtl' + end end it 'adds rtl if locale is Hebrew' do - I18n.locale = :he - expect(helper.locale_direction).to eq 'rtl' + I18n.with_locale(:he) do + expect(helper.locale_direction).to eq 'rtl' + end end it 'does not add rtl if locale is Thai' do - I18n.locale = :th - expect(helper.locale_direction).to_not eq 'rtl' + I18n.with_locale(:th) do + expect(helper.locale_direction).to_not eq 'rtl' + end end end diff --git a/spec/requests/localization_spec.rb b/spec/requests/localization_spec.rb index 39eeee5f01..b7fb53ed8d 100644 --- a/spec/requests/localization_spec.rb +++ b/spec/requests/localization_spec.rb @@ -3,8 +3,10 @@ require 'rails_helper' describe 'Localization' do - after(:all) do - I18n.locale = I18n.default_locale + around do |example| + I18n.with_locale(I18n.locale) do + example.run + end end it 'uses a specific region when provided' do From d902a707a31686947b13c75e8152ab75328fd41e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 08:07:21 -0400 Subject: [PATCH 29/43] Fix Rails/CompactBlank cop (#24690) --- .rubocop_todo.yml | 10 ---------- app/helpers/application_helper.rb | 2 +- app/helpers/statuses_helper.rb | 4 ++-- app/models/concerns/attachmentable.rb | 2 +- app/models/poll.rb | 2 +- app/models/user.rb | 1 - app/services/import_service.rb | 2 +- config/initializers/paperclip.rb | 2 +- 8 files changed, 7 insertions(+), 18 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 171a11a0a1..d5770dc569 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1203,16 +1203,6 @@ Rails/BulkChangeTable: - 'db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb' - 'db/migrate/20220824164433_add_human_identifier_to_admin_action_logs.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -Rails/CompactBlank: - Exclude: - - 'app/helpers/application_helper.rb' - - 'app/helpers/statuses_helper.rb' - - 'app/models/concerns/attachmentable.rb' - - 'app/models/poll.rb' - - 'app/services/import_service.rb' - - 'config/initializers/paperclip.rb' - # Configuration parameters: Include. # Include: db/migrate/*.rb Rails/CreateTableWithTimestamps: diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8de89a181c..e2963328a2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -161,7 +161,7 @@ module ApplicationHelper output << 'system-font' if current_account&.user&.setting_system_font_ui output << (current_account&.user&.setting_reduce_motion ? 'reduce-motion' : 'no-reduce-motion') output << 'rtl' if locale_direction == 'rtl' - output.reject(&:blank?).join(' ') + output.compact_blank.join(' ') end def cdn_host diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index 9f87593674..f1f1ea872e 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -51,14 +51,14 @@ module StatusesHelper end def status_description(status) - components = [[media_summary(status), status_text_summary(status)].reject(&:blank?).join(' · ')] + components = [[media_summary(status), status_text_summary(status)].compact_blank.join(' · ')] if status.spoiler_text.blank? components << status.text components << poll_summary(status) end - components.reject(&:blank?).join("\n\n") + components.compact_blank.join("\n\n") end def stream_link_target diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb index d44c224381..9cafedc209 100644 --- a/app/models/concerns/attachmentable.rb +++ b/app/models/concerns/attachmentable.rb @@ -46,7 +46,7 @@ module Attachmentable def set_file_extension(attachment) # rubocop:disable Naming/AccessorMethodName return if attachment.blank? - attachment.instance_write :file_name, [Paperclip::Interpolations.basename(attachment, :original), appropriate_extension(attachment)].delete_if(&:blank?).join('.') + attachment.instance_write :file_name, [Paperclip::Interpolations.basename(attachment, :original), appropriate_extension(attachment)].compact_blank!.join('.') end def check_image_dimension(attachment) diff --git a/app/models/poll.rb b/app/models/poll.rb index dd35e953b8..74a77978b9 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -101,7 +101,7 @@ class Poll < ApplicationRecord end def prepare_options - self.options = options.map(&:strip).reject(&:blank?) + self.options = options.map(&:strip).compact_blank end def reset_parent_cache diff --git a/app/models/user.rb b/app/models/user.rb index 9b225d75f1..b903344be9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -445,7 +445,6 @@ class User < ApplicationRecord return if chosen_languages.nil? chosen_languages.compact_blank! - self.chosen_languages = nil if chosen_languages.empty? end diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 56f191c1fe..f6c94cbb6f 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -132,7 +132,7 @@ class ImportService < BaseService def parse_import_data!(default_headers) data = CSV.parse(import_data, headers: true) data = CSV.parse(import_data, headers: default_headers) unless data.headers&.first&.strip&.include?(' ') - @data = data.reject(&:blank?) + @data = data.compact_blank end def import_data diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index bd37f67093..b72cbe1927 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -7,7 +7,7 @@ Paperclip.interpolates :filename do |attachment, style| if style == :original attachment.original_filename else - [basename(attachment, style), extension(attachment, style)].delete_if(&:blank?).join('.') + [basename(attachment, style), extension(attachment, style)].compact_blank!.join('.') end end From c53fe9b753a8eb2c7f3830587d099a7e772319fc Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 30 Apr 2023 15:16:08 -0400 Subject: [PATCH 30/43] Fix RSpec/BeforeAfterAll cop (#24737) --- .rubocop_todo.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index d5770dc569..dec4f38528 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -425,10 +425,6 @@ RSpec/AnyInstance: - 'spec/workers/activitypub/delivery_worker_spec.rb' - 'spec/workers/web/push_notification_worker_spec.rb' -RSpec/BeforeAfterAll: - Exclude: - - 'spec/requests/localization_spec.rb' - # Configuration parameters: Prefixes, AllowedPatterns. # Prefixes: when, with, without RSpec/ContextWording: From 81f75b1e0ecaa3c7a13f75188497be8b0f716dea Mon Sep 17 00:00:00 2001 From: fusagiko / takayamaki <24884114+takayamaki@users.noreply.github.com> Date: Mon, 1 May 2023 07:51:00 +0900 Subject: [PATCH 31/43] Rewrite Icon and IconWithBadge with typescript (#24747) --- app/javascript/mastodon/components/icon.jsx | 21 ------------------ app/javascript/mastodon/components/icon.tsx | 14 ++++++++++++ .../mastodon/components/icon_with_badge.jsx | 22 ------------------- .../mastodon/components/icon_with_badge.tsx | 20 +++++++++++++++++ 4 files changed, 34 insertions(+), 43 deletions(-) delete mode 100644 app/javascript/mastodon/components/icon.jsx create mode 100644 app/javascript/mastodon/components/icon.tsx delete mode 100644 app/javascript/mastodon/components/icon_with_badge.jsx create mode 100644 app/javascript/mastodon/components/icon_with_badge.tsx diff --git a/app/javascript/mastodon/components/icon.jsx b/app/javascript/mastodon/components/icon.jsx deleted file mode 100644 index d3d7c591d6..0000000000 --- a/app/javascript/mastodon/components/icon.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; - -export default class Icon extends React.PureComponent { - - static propTypes = { - id: PropTypes.string.isRequired, - className: PropTypes.string, - fixedWidth: PropTypes.bool, - }; - - render () { - const { id, className, fixedWidth, ...other } = this.props; - - return ( - - ); - } - -} diff --git a/app/javascript/mastodon/components/icon.tsx b/app/javascript/mastodon/components/icon.tsx new file mode 100644 index 0000000000..d85fff6ef6 --- /dev/null +++ b/app/javascript/mastodon/components/icon.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import classNames from 'classnames'; + +type Props = { + id: string; + className?: string; + fixedWidth?: boolean; + children?: never; + [key: string]: any; +} +export const Icon: React.FC = ({ id, className, fixedWidth, ...other }) => + ; + +export default Icon; diff --git a/app/javascript/mastodon/components/icon_with_badge.jsx b/app/javascript/mastodon/components/icon_with_badge.jsx deleted file mode 100644 index 4214eccfde..0000000000 --- a/app/javascript/mastodon/components/icon_with_badge.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Icon from 'mastodon/components/icon'; - -const formatNumber = num => num > 40 ? '40+' : num; - -const IconWithBadge = ({ id, count, issueBadge, className }) => ( - - - {count > 0 && {formatNumber(count)}} - {issueBadge && } - -); - -IconWithBadge.propTypes = { - id: PropTypes.string.isRequired, - count: PropTypes.number.isRequired, - issueBadge: PropTypes.bool, - className: PropTypes.string, -}; - -export default IconWithBadge; diff --git a/app/javascript/mastodon/components/icon_with_badge.tsx b/app/javascript/mastodon/components/icon_with_badge.tsx new file mode 100644 index 0000000000..487bf326ad --- /dev/null +++ b/app/javascript/mastodon/components/icon_with_badge.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Icon } from './icon'; + +const formatNumber = (num: number): number | string => num > 40 ? '40+' : num; + +type Props = { + id: string; + count: number; + issueBadge: boolean; + className: string; +} +const IconWithBadge: React.FC = ({ id, count, issueBadge, className }) => ( + + + {count > 0 && {formatNumber(count)}} + {issueBadge && } + +); + +export default IconWithBadge; From 15fd712464dc6404e520aa302db0fba26cd630f3 Mon Sep 17 00:00:00 2001 From: fusagiko / takayamaki <24884114+takayamaki@users.noreply.github.com> Date: Mon, 1 May 2023 07:51:31 +0900 Subject: [PATCH 32/43] Add type annotation for RelativeTimestamp component (#24749) --- ...e_timestamp.jsx => relative_timestamp.tsx} | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) rename app/javascript/mastodon/components/{relative_timestamp.jsx => relative_timestamp.tsx} (85%) diff --git a/app/javascript/mastodon/components/relative_timestamp.jsx b/app/javascript/mastodon/components/relative_timestamp.tsx similarity index 85% rename from app/javascript/mastodon/components/relative_timestamp.jsx rename to app/javascript/mastodon/components/relative_timestamp.tsx index e6c3e08805..89cad06658 100644 --- a/app/javascript/mastodon/components/relative_timestamp.jsx +++ b/app/javascript/mastodon/components/relative_timestamp.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { injectIntl, defineMessages } from 'react-intl'; -import PropTypes from 'prop-types'; +import { injectIntl, defineMessages, InjectedIntl } from 'react-intl'; const messages = defineMessages({ today: { id: 'relative_time.today', defaultMessage: 'today' }, @@ -28,12 +27,12 @@ const dateFormatOptions = { day: '2-digit', hour: '2-digit', minute: '2-digit', -}; +} as const; const shortDateFormatOptions = { month: 'short', day: 'numeric', -}; +} as const; const SECOND = 1000; const MINUTE = 1000 * 60; @@ -42,7 +41,7 @@ const DAY = 1000 * 60 * 60 * 24; const MAX_DELAY = 2147483647; -const selectUnits = delta => { +const selectUnits = (delta: number) => { const absDelta = Math.abs(delta); if (absDelta < MINUTE) { @@ -56,7 +55,7 @@ const selectUnits = delta => { return 'day'; }; -const getUnitDelay = units => { +const getUnitDelay = (units: string) => { switch (units) { case 'second': return SECOND; @@ -71,7 +70,7 @@ const getUnitDelay = units => { } }; -export const timeAgoString = (intl, date, now, year, timeGiven, short) => { +export const timeAgoString = (intl: InjectedIntl, date: Date, now: number, year: number, timeGiven: boolean, short?: boolean) => { const delta = now - date.getTime(); let relativeTime; @@ -99,7 +98,7 @@ export const timeAgoString = (intl, date, now, year, timeGiven, short) => { return relativeTime; }; -const timeRemainingString = (intl, date, now, timeGiven = true) => { +const timeRemainingString = (intl: InjectedIntl, date: Date, now: number, timeGiven = true) => { const delta = date.getTime() - now; let relativeTime; @@ -121,15 +120,17 @@ const timeRemainingString = (intl, date, now, timeGiven = true) => { return relativeTime; }; -class RelativeTimestamp extends React.Component { - - static propTypes = { - intl: PropTypes.object.isRequired, - timestamp: PropTypes.string.isRequired, - year: PropTypes.number.isRequired, - futureDate: PropTypes.bool, - short: PropTypes.bool, - }; +type Props = { + intl: InjectedIntl; + timestamp: string; + year: number; + futureDate?: boolean; + short?: boolean; +} +type States = { + now: number; +} +class RelativeTimestamp extends React.Component { state = { now: this.props.intl.now(), @@ -140,7 +141,9 @@ class RelativeTimestamp extends React.Component { short: true, }; - shouldComponentUpdate (nextProps, nextState) { + _timer: number | undefined; + + shouldComponentUpdate (nextProps: Props, nextState: States) { // As of right now the locale doesn't change without a new page load, // but we might as well check in case that ever changes. return this.props.timestamp !== nextProps.timestamp || @@ -148,7 +151,7 @@ class RelativeTimestamp extends React.Component { this.state.now !== nextState.now; } - componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps (nextProps: Props) { if (this.props.timestamp !== nextProps.timestamp) { this.setState({ now: this.props.intl.now() }); } @@ -158,16 +161,16 @@ class RelativeTimestamp extends React.Component { this._scheduleNextUpdate(this.props, this.state); } - componentWillUpdate (nextProps, nextState) { + UNSAFE_componentWillUpdate (nextProps: Props, nextState: States) { this._scheduleNextUpdate(nextProps, nextState); } componentWillUnmount () { - clearTimeout(this._timer); + window.clearTimeout(this._timer); } - _scheduleNextUpdate (props, state) { - clearTimeout(this._timer); + _scheduleNextUpdate (props: Props, state: States) { + window.clearTimeout(this._timer); const { timestamp } = props; const delta = (new Date(timestamp)).getTime() - state.now; @@ -176,7 +179,7 @@ class RelativeTimestamp extends React.Component { const updateInterval = 1000 * 10; const delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder); - this._timer = setTimeout(() => { + this._timer = window.setTimeout(() => { this.setState({ now: this.props.intl.now() }); }, delay); } From fc56eda94bc9f20f17894cadf2034774d353f98e Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Mon, 1 May 2023 05:23:57 -0400 Subject: [PATCH 33/43] Bump stylelint-config-standard-scss from 7.0.1 to 9.0.0 (#24755) Co-authored-by: Yamagishi Kazutoshi --- app/javascript/styles/mailer.scss | 2 +- app/javascript/styles/mastodon/accounts.scss | 4 +- app/javascript/styles/mastodon/admin.scss | 4 +- .../styles/mastodon/components.scss | 54 +++++++------- .../styles/mastodon/containers.scss | 6 +- app/javascript/styles/mastodon/dashboard.scss | 2 +- app/javascript/styles/mastodon/forms.scss | 2 +- app/javascript/styles/mastodon/modal.scss | 2 +- app/javascript/styles/mastodon/statuses.scss | 2 +- app/javascript/styles/mastodon/tables.scss | 2 +- package.json | 2 +- yarn.lock | 71 +++++++++---------- 12 files changed, 76 insertions(+), 77 deletions(-) diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index 18fe522eb2..a12f74fc02 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -547,7 +547,7 @@ ul.rules-list { } } -@media (max-width: 697px) { +@media (width <= 697px) { .email-container, .col-1, .col-2, diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index 853d7f70d1..8b7b634071 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -33,7 +33,7 @@ border-radius: 4px 4px 0 0; } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { height: 200px; } } @@ -158,7 +158,7 @@ color: lighten($inverted-text-color, 10%); } - @media screen and (max-width: 700px) { + @media screen and (width <= 700px) { padding: 30px 20px; .page { diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index c92191ea21..c4ecb42549 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1355,7 +1355,7 @@ a.sparkline { } } - @media screen and (max-width: 930px) { + @media screen and (width <= 930px) { grid-template-columns: minmax(0, 1fr); } } @@ -1641,7 +1641,7 @@ a.sparkline { } } - @media screen and (max-width: 800px) { + @media screen and (width <= 800px) { border: 0; &__item { diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index b9f27edcca..df33303160 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -514,7 +514,7 @@ body > [data-popper-placement] { outline: 0; } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { font-size: 16px; } } @@ -535,7 +535,7 @@ body > [data-popper-placement] { all: unset; } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { height: 100px !important; // Prevent auto-resize textarea resize: vertical; } @@ -2414,7 +2414,7 @@ $ui-header-height: 55px; display: none; } - @media screen and (min-width: 320px) { + @media screen and (width >= 320px) { .logo--wordmark { display: block; } @@ -2526,7 +2526,7 @@ $ui-header-height: 55px; overflow: hidden; } -@media screen and (min-width: 631px) { +@media screen and (width >= 631px) { .columns-area { padding: 0; } @@ -2586,7 +2586,7 @@ $ui-header-height: 55px; &:hover, &:focus, &:active { - @media screen and (min-width: 631px) { + @media screen and (width >= 631px) { background: lighten($ui-base-color, 14%); border-bottom-color: lighten($ui-base-color, 14%); } @@ -2603,7 +2603,7 @@ $ui-header-height: 55px; } } -@media screen and (min-width: 600px) { +@media screen and (width >= 600px) { .tabs-bar__link { span { display: inline; @@ -2826,7 +2826,7 @@ $ui-header-height: 55px; color: $darker-text-color; } - @media screen and (min-width: 600px) { + @media screen and (width >= 600px) { padding: 40px; } } @@ -2936,7 +2936,7 @@ $ui-header-height: 55px; height: 36px; color: $dark-text-color; - @media screen and (min-width: 600px) { + @media screen and (width >= 600px) { display: flex; } } @@ -2988,7 +2988,7 @@ $ui-header-height: 55px; position: sticky; background: $ui-base-color; - @media screen and (min-width: 600) { + @media screen and (width >= 600) { padding: 0 40px; } @@ -3256,7 +3256,7 @@ $ui-header-height: 55px; user-select: none; } - @media screen and (min-height: 640px) { + @media screen and (height >= 640px) { display: block; } } @@ -3605,19 +3605,19 @@ $ui-header-height: 55px; } } - @media screen and (max-height: 810px) { + @media screen and (height <= 810px) { .trends__item:nth-of-type(3) { display: none; } } - @media screen and (max-height: 720px) { + @media screen and (height <= 720px) { .trends__item:nth-of-type(2) { display: none; } } - @media screen and (max-height: 670px) { + @media screen and (height <= 670px) { display: none; } @@ -3701,7 +3701,7 @@ $ui-header-height: 55px; margin-bottom: 20px; } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { font-size: 16px; } } @@ -4497,7 +4497,7 @@ a.status-card.compact:hover { background: lighten($ui-base-color, 4%); } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { font-size: 16px; } } @@ -5832,7 +5832,7 @@ a.status-card.compact:hover { font-weight: 700; margin-bottom: 15px; - @media screen and (max-height: 800px) { + @media screen and (height <= 800px) { font-size: 22px; } } @@ -6019,7 +6019,7 @@ a.status-card.compact:hover { display: flex; border-top: 1px solid $ui-secondary-color; - @media screen and (max-width: 480px) { + @media screen and (width <= 480px) { flex-wrap: wrap; overflow-y: auto; } @@ -6030,7 +6030,7 @@ a.status-card.compact:hover { box-sizing: border-box; width: 50%; - @media screen and (max-width: 480px) { + @media screen and (width <= 480px) { width: 100%; } } @@ -6052,13 +6052,13 @@ a.status-card.compact:hover { color: $inverted-text-color; } - @media screen and (max-width: 480px) { + @media screen and (width <= 480px) { max-height: 10vh; } } .focal-point-modal__content { - @media screen and (max-width: 480px) { + @media screen and (width <= 480px) { max-height: 40vh; } } @@ -6109,7 +6109,7 @@ a.status-card.compact:hover { } } - @media screen and (max-width: 480px) { + @media screen and (width <= 480px) { padding: 10px; max-width: 100%; order: 2; @@ -7138,7 +7138,7 @@ noscript { } } -@media screen and (max-width: 630px) and (max-height: 400px) { +@media screen and (width <= 630px) and (height <= 400px) { $duration: 400ms; $delay: 100ms; @@ -7268,7 +7268,7 @@ noscript { background: lighten($ui-base-color, 4%); } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { font-size: 16px; } } @@ -7359,7 +7359,7 @@ noscript { width: 380px; overflow: hidden; - @media screen and (max-width: 420px) { + @media screen and (width <= 420px) { width: 90%; } @@ -7414,7 +7414,7 @@ noscript { width: 380px; overflow: hidden; - @media screen and (max-width: 420px) { + @media screen and (width <= 420px) { width: 90%; } @@ -7513,7 +7513,7 @@ noscript { } } - @media screen and (max-width: 480px) { + @media screen and (width <= 480px) { img, video { max-height: 100%; @@ -9070,7 +9070,7 @@ noscript { margin-bottom: 20px; } - @media screen and (max-width: 600px) { + @media screen and (width <= 600px) { display: block; h4 { diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index fb71ad034a..3d646da239 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -2,7 +2,7 @@ width: 700px; margin: 0 auto; - @media screen and (max-width: 740px) { + @media screen and (width <= 740px) { width: 100%; margin: 0; } @@ -44,7 +44,7 @@ margin-top: 40px; box-sizing: border-box; - @media screen and (max-width: 400px) { + @media screen and (width <= 400px) { width: 100%; margin-top: 0; padding: 20px; @@ -64,7 +64,7 @@ margin-bottom: 10px; border-bottom: 1px solid $ui-base-color; - @media screen and (max-width: 440px) { + @media screen and (width <= 440px) { width: 100%; margin: 0; padding: 20px; diff --git a/app/javascript/styles/mastodon/dashboard.scss b/app/javascript/styles/mastodon/dashboard.scss index f25765d1da..bc34c6ec0a 100644 --- a/app/javascript/styles/mastodon/dashboard.scss +++ b/app/javascript/styles/mastodon/dashboard.scss @@ -59,7 +59,7 @@ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); grid-gap: 10px; - @media screen and (max-width: 1350px) { + @media screen and (width <= 1350px) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index dc52bcd87d..03e06c1000 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -722,7 +722,7 @@ code { } } - @media screen and (max-width: 740px) and (min-width: 441px) { + @media screen and (440px < width <= 740px) { margin-top: 40px; } diff --git a/app/javascript/styles/mastodon/modal.scss b/app/javascript/styles/mastodon/modal.scss index 29b1f162b4..0b7220b21d 100644 --- a/app/javascript/styles/mastodon/modal.scss +++ b/app/javascript/styles/mastodon/modal.scss @@ -30,7 +30,7 @@ } } -@media screen and (max-width: 600px) { +@media screen and (width <= 600px) { .account-header { margin-top: 0; } diff --git a/app/javascript/styles/mastodon/statuses.scss b/app/javascript/styles/mastodon/statuses.scss index 6c9ea916a2..590d03fb8d 100644 --- a/app/javascript/styles/mastodon/statuses.scss +++ b/app/javascript/styles/mastodon/statuses.scss @@ -63,7 +63,7 @@ } } - @media screen and (max-width: 740px) { + @media screen and (width <= 740px) { .detailed-status, .status, .load-more { diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 49e5bbf9fc..38cfc87271 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -361,7 +361,7 @@ a.table-action-link { } } - @media screen and (max-width: 870px) { + @media screen and (width <= 870px) { .accounts-table tbody td.optional { display: none; } diff --git a/package.json b/package.json index e146a3f4a0..3f8899c024 100644 --- a/package.json +++ b/package.json @@ -197,7 +197,7 @@ "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", "stylelint": "^15.6.0", - "stylelint-config-standard-scss": "^7.0.1", + "stylelint-config-standard-scss": "^9.0.0", "typescript": "^5.0.4", "webpack-dev-server": "^3.11.3", "yargs": "^17.7.1" diff --git a/yarn.lock b/yarn.lock index 2237808626..3c0fb85bfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8965,7 +8965,7 @@ postcss-loader@^4.3.0: postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== postcss-merge-longhand@^6.0.0: version "6.0.0" @@ -9133,19 +9133,19 @@ postcss-reduce-transforms@^6.0.0: postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-safe-parser@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== -postcss-scss@^4.0.2: +postcss-scss@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.6.tgz#5d62a574b950a6ae12f2aa89b60d63d9e4432bfd" integrity sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ== -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -10895,45 +10895,44 @@ stylehacks@^6.0.0: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylelint-config-recommended-scss@^9.0.0: +stylelint-config-recommended-scss@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-11.0.0.tgz#7b933ecac99cd3b52d14d1746e3ecd36f421b4b6" + integrity sha512-EDghTDU7aOv2LTsRZvcT1w8mcjUaMhuy+t38iV5I/0Qiu6ixdkRwhLEMul3K/fnB2v9Nwqvb3xpvJfPH+HduDw== + dependencies: + postcss-scss "^4.0.6" + stylelint-config-recommended "^12.0.0" + stylelint-scss "^4.6.0" + +stylelint-config-recommended@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz#d0993232fca017065fd5acfcb52dd8a188784ef4" + integrity sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ== + +stylelint-config-standard-scss@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-9.0.0.tgz#e755cf3654f3a3a6d7bdf84fe0a814595754a386" - integrity sha512-5e9pn3Ztfncd8s9OqvvCW7tZpYe+vGmPi7VEXX7XEp+Kj38PnKCrvFCBL+hQ7rkD4d5QzjB3BxlFEyo/30UWUw== + resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-9.0.0.tgz#70c66e1179612519fdf6ca1dbff23c804def1b6b" + integrity sha512-yPKpJsrZn4ybuQZx/DkEHuCjw7pJginErE/47dFhCnrvD48IJ4UYec8tSiCuJWMA3HRjbIa3nh5ZeSauDGuVAg== dependencies: - postcss-scss "^4.0.2" - stylelint-config-recommended "^10.0.1" - stylelint-scss "^4.4.0" + stylelint-config-recommended-scss "^11.0.0" + stylelint-config-standard "^33.0.0" -stylelint-config-recommended@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-10.0.1.tgz#25a8828acf6cde87dac6db2950c8c4ed82a69ae1" - integrity sha512-TQ4xQ48tW4QSlODcti7pgSRqBZcUaBzuh0jPpfiMhwJKBPkqzTIAU+IrSWL/7BgXlOM90DjB7YaNgFpx8QWhuA== - -stylelint-config-standard-scss@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-7.0.1.tgz#4ba83fa19e1508937f7e02674e085cf94fc1a145" - integrity sha512-m5sRdtsB1F5fnC1Ozla7ryftU47wVpO+HWd+JQTqeoG0g/oPh5EfbWfcVHbNCEtuoHfALIySiUWS20pz2hX6jA== +stylelint-config-standard@^33.0.0: + version "33.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-33.0.0.tgz#1f7bb299153a53874073e93829e37a475842f0f9" + integrity sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg== dependencies: - stylelint-config-recommended-scss "^9.0.0" - stylelint-config-standard "^30.0.1" + stylelint-config-recommended "^12.0.0" -stylelint-config-standard@^30.0.1: - version "30.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-30.0.1.tgz#a84d57c240c37f7db47023ab9d2e64c49090e1eb" - integrity sha512-NbeHOmpRQhjZh5XB1B/S4MLRWvz4xxAxeDBjzl0tY2xEcayNhLbaRGF0ZQzq+DQZLCcPpOHeS2Ru1ydbkhkmLg== +stylelint-scss@^4.6.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.7.0.tgz#f986bf8c5a4b93eae2b67d3a3562eef822657908" + integrity sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg== dependencies: - stylelint-config-recommended "^10.0.1" - -stylelint-scss@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.4.0.tgz#87ce9d049eff1ce67cce788780fbfda63099017e" - integrity sha512-Qy66a+/30aylFhPmUArHhVsHOun1qrO93LGT15uzLuLjWS7hKDfpFm34mYo1ndR4MCo8W4bEZM1+AlJRJORaaw== - dependencies: - lodash "^4.17.21" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" - postcss-selector-parser "^6.0.6" - postcss-value-parser "^4.1.0" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" stylelint@^15.6.0: version "15.6.0" @@ -11613,7 +11612,7 @@ utf-8-validate@^6.0.3: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@0.10.3: version "0.10.3" From f1c1fa1411d213a353467e3e8f396b0203474e6f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 1 May 2023 17:45:18 +0200 Subject: [PATCH 34/43] Fix transaction around settings migration (#24761) --- db/migrate/20230215074423_move_user_settings.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/db/migrate/20230215074423_move_user_settings.rb b/db/migrate/20230215074423_move_user_settings.rb index 8dbca9ecd2..dd230b3e84 100644 --- a/db/migrate/20230215074423_move_user_settings.rb +++ b/db/migrate/20230215074423_move_user_settings.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class MoveUserSettings < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + class User < ApplicationRecord; end MAPPING = { From 0ad2413b35287958f59073a5b63aecc659a64d98 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 2 May 2023 10:26:39 +0200 Subject: [PATCH 35/43] Fix n+1 query in settings migration (#24783) --- .../20230215074423_move_user_settings.rb | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/db/migrate/20230215074423_move_user_settings.rb b/db/migrate/20230215074423_move_user_settings.rb index dd230b3e84..2fac886bd6 100644 --- a/db/migrate/20230215074423_move_user_settings.rb +++ b/db/migrate/20230215074423_move_user_settings.rb @@ -59,26 +59,29 @@ class MoveUserSettings < ActiveRecord::Migration[6.1] end def up - User.find_each do |user| - previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var) + User.find_in_batches do |users| + previous_settings_for_batch = LegacySetting.where(thing_type: 'User', thing_id: users.map(&:id)).group_by(&:thing_id) - user_settings = {} + users.each do |user| + previous_settings = previous_settings_for_batch[user.id]&.index_by(&:var) || {} + user_settings = {} - MAPPING.each do |legacy_key, new_key| - value = previous_settings[legacy_key]&.value + MAPPING.each do |legacy_key, new_key| + value = previous_settings[legacy_key]&.value - next if value.blank? + next if value.blank? - if value.is_a?(Hash) - value.each do |nested_key, nested_value| - user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + if value.is_a?(Hash) + value.each do |nested_key, nested_value| + user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + end + else + user_settings[new_key] = value end - else - user_settings[new_key] = value end - end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + end end end From 09054f54854688a27c347a6618a3209ccdfc840a Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Sun, 30 Apr 2023 02:29:24 +0200 Subject: [PATCH 36/43] [Glitch] Fix media description not being cleared Port bfeccf67486d105d4c2a07719fdf4772652bad74 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/actions/compose.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 9c0ef83df5..f0d50ccf13 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -441,16 +441,12 @@ export function changeUploadCompose(id, params) { // Editing already-attached media is deferred to editing the post itself. // For simplicity's sake, fake an API reply. if (media && !media.get('unattached')) { - let { description, focus } = params; - const data = media.toJS(); - - if (description) { - data.description = description; - } + const { focus, ...other } = params; + const data = { ...media.toJS(), ...other }; if (focus) { - focus = focus.split(','); - data.meta = { focus: { x: parseFloat(focus[0]), y: parseFloat(focus[1]) } }; + const [x, y] = focus.split(','); + data.meta = { focus: { x: parseFloat(x), y: parseFloat(y) } }; } dispatch(changeUploadComposeSuccess(data, true)); From 51479f5c28a83a79d17b6661271d0ce429257859 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Sat, 29 Apr 2023 20:29:54 -0400 Subject: [PATCH 37/43] [Glitch] Add eslint-plugin-jsdoc Port f22b4e556c0e66465b87c57a2d5cf48452ead259 to glitch-soc Signed-off-by: Claire --- .../glitch/actions/picture_in_picture.js | 2 +- .../flavours/glitch/actions/streaming.js | 16 +++++----- .../flavours/glitch/components/blurhash.jsx | 3 +- .../glitch/components/common_counter.jsx | 1 - .../flavours/glitch/components/hashtag.jsx | 1 - .../glitch/components/short_number.jsx | 2 -- .../features/ui/components/doodle_modal.jsx | 30 ++++++++++--------- app/javascript/flavours/glitch/stream.js | 14 ++++----- .../flavours/glitch/utils/scrollbar.js | 4 +-- 9 files changed, 35 insertions(+), 38 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/picture_in_picture.js b/app/javascript/flavours/glitch/actions/picture_in_picture.js index 6b9ff7709e..898375abeb 100644 --- a/app/javascript/flavours/glitch/actions/picture_in_picture.js +++ b/app/javascript/flavours/glitch/actions/picture_in_picture.js @@ -20,7 +20,7 @@ export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; * @param {string} accountId * @param {string} playerType * @param {MediaProps} props - * @return {object} + * @returns {object} */ export const deployPictureInPicture = (statusId, accountId, playerType, props) => { // @ts-expect-error diff --git a/app/javascript/flavours/glitch/actions/streaming.js b/app/javascript/flavours/glitch/actions/streaming.js index 8c161ea83c..dbf668ccbd 100644 --- a/app/javascript/flavours/glitch/actions/streaming.js +++ b/app/javascript/flavours/glitch/actions/streaming.js @@ -27,7 +27,7 @@ const { messages } = getLocale(); /** * @param {number} max - * @return {number} + * @returns {number} */ const randomUpTo = max => Math.floor(Math.random() * Math.floor(max)); @@ -40,7 +40,7 @@ const randomUpTo = max => * @param {function(Function, Function): void} [options.fallback] * @param {function(): void} [options.fillGaps] * @param {function(object): boolean} [options.accept] - * @return {function(): void} + * @returns {function(): void} */ export const connectTimelineStream = (timelineId, channelName, params = {}, options = {}) => connectStream(channelName, params, (dispatch, getState) => { @@ -132,7 +132,7 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => { }; /** - * @return {function(): void} + * @returns {function(): void} */ export const connectUserStream = () => // @ts-expect-error @@ -141,7 +141,7 @@ export const connectUserStream = () => /** * @param {Object} options * @param {boolean} [options.onlyMedia] - * @return {function(): void} + * @returns {function(): void} */ export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => (fillCommunityTimelineGaps({ onlyMedia })) }); @@ -151,7 +151,7 @@ export const connectCommunityStream = ({ onlyMedia } = {}) => * @param {boolean} [options.onlyMedia] * @param {boolean} [options.onlyRemote] * @param {boolean} [options.allowLocalOnly] - * @return {function(): void} + * @returns {function(): void} */ export const connectPublicStream = ({ onlyMedia, onlyRemote, allowLocalOnly } = {}) => connectTimelineStream(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, {}, { fillGaps: () => fillPublicTimelineGaps({ onlyMedia, onlyRemote, allowLocalOnly }) }); @@ -161,20 +161,20 @@ export const connectPublicStream = ({ onlyMedia, onlyRemote, allowLocalOnly } = * @param {string} tagName * @param {boolean} onlyLocal * @param {function(object): boolean} accept - * @return {function(): void} + * @returns {function(): void} */ export const connectHashtagStream = (columnId, tagName, onlyLocal, accept) => connectTimelineStream(`hashtag:${columnId}${onlyLocal ? ':local' : ''}`, `hashtag${onlyLocal ? ':local' : ''}`, { tag: tagName }, { accept }); /** - * @return {function(): void} + * @returns {function(): void} */ export const connectDirectStream = () => connectTimelineStream('direct', 'direct'); /** * @param {string} listId - * @return {function(): void} + * @returns {function(): void} */ export const connectListStream = listId => connectTimelineStream(`list:${listId}`, 'list', { list: listId }, { fillGaps: () => fillListTimelineGaps(listId) }); diff --git a/app/javascript/flavours/glitch/components/blurhash.jsx b/app/javascript/flavours/glitch/components/blurhash.jsx index 07cd31b6ca..f5c58e04ef 100644 --- a/app/javascript/flavours/glitch/components/blurhash.jsx +++ b/app/javascript/flavours/glitch/components/blurhash.jsx @@ -20,9 +20,8 @@ import PropTypes from 'prop-types'; /** * Component that is used to render blurred of blurhash string - * * @param {BlurhashProps} param1 Props of the component - * @returns Canvas which will render blurred region element to embed + * @returns {JSX.Element} Canvas which will render blurred region element to embed */ function Blurhash({ hash, diff --git a/app/javascript/flavours/glitch/components/common_counter.jsx b/app/javascript/flavours/glitch/components/common_counter.jsx index dd9b62de9b..9964be5166 100644 --- a/app/javascript/flavours/glitch/components/common_counter.jsx +++ b/app/javascript/flavours/glitch/components/common_counter.jsx @@ -4,7 +4,6 @@ import { FormattedMessage } from 'react-intl'; /** * Returns custom renderer for one of the common counter types - * * @param {"statuses" | "following" | "followers"} counterType * Type of the counter * @param {boolean} isBold Whether display number must be displayed in bold diff --git a/app/javascript/flavours/glitch/components/hashtag.jsx b/app/javascript/flavours/glitch/components/hashtag.jsx index c4701055c7..235aaeb3c1 100644 --- a/app/javascript/flavours/glitch/components/hashtag.jsx +++ b/app/javascript/flavours/glitch/components/hashtag.jsx @@ -35,7 +35,6 @@ class SilentErrorBoundary extends React.Component { /** * Used to render counter of how much people are talking about hashtag - * * @type {(displayNumber: JSX.Element, pluralReady: number) => JSX.Element} */ export const accountsCountRenderer = (displayNumber, pluralReady) => ( diff --git a/app/javascript/flavours/glitch/components/short_number.jsx b/app/javascript/flavours/glitch/components/short_number.jsx index 861d0bc589..0c40941c0d 100644 --- a/app/javascript/flavours/glitch/components/short_number.jsx +++ b/app/javascript/flavours/glitch/components/short_number.jsx @@ -24,7 +24,6 @@ import { FormattedMessage, FormattedNumber } from 'react-intl'; /** * Component that renders short big number to a shorter version - * * @param {ShortNumberProps} param0 Props for the component * @returns {JSX.Element} Rendered number */ @@ -58,7 +57,6 @@ ShortNumber.propTypes = { /** * Renders short number into corresponding localizable react fragment - * * @param {ShortNumberCounterProps} param0 Props for the component * @returns {JSX.Element} FormattedMessage ready to be embedded in code */ diff --git a/app/javascript/flavours/glitch/features/ui/components/doodle_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/doodle_modal.jsx index 162957ad89..0b66ad09d2 100644 --- a/app/javascript/flavours/glitch/features/ui/components/doodle_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/doodle_modal.jsx @@ -125,9 +125,15 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = dispatch => ({ - /** Set options in the redux store */ + /** + * Set options in the redux store + * @param opts + */ setOpt: (opts) => dispatch(doodleSet(opts)), - /** Submit doodle for upload */ + /** + * Submit doodle for upload + * @param file + */ submit: (file) => dispatch(uploadCompose([file])), }); @@ -230,7 +236,10 @@ class DoodleModal extends ImmutablePureComponent { //endregion - /** Key up handler */ + /** + * Key up handler + * @param e + */ handleKeyUp = (e) => { if (e.target.nodeName === 'INPUT') return; @@ -256,7 +265,10 @@ class DoodleModal extends ImmutablePureComponent { } }; - /** Key down handler */ + /** + * Key down handler + * @param e + */ handleKeyDown = (e) => { if (e.key === 'Control' || e.key === 'Meta') { this.controlHeld = true; @@ -292,7 +304,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Set reference to the canvas element. * This is called during component init - * * @param elem - canvas element */ setCanvasRef = (elem) => { @@ -334,7 +345,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Set up the sketcher instance - * * @param canvas - canvas element. Null if we're just resizing */ initSketcher (canvas = null) { @@ -433,7 +443,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Palette left click. * Selects Fg color (or Bg, if Control/Meta is held) - * * @param e - event */ onPaletteClick = (e) => { @@ -452,7 +461,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Palette right click. * Selects Bg color - * * @param e - event */ onPaletteRClick = (e) => { @@ -463,7 +471,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on the Draw mode button - * * @param e - event */ setModeDraw = (e) => { @@ -473,7 +480,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on the Fill mode button - * * @param e - event */ setModeFill = (e) => { @@ -483,7 +489,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on Smooth checkbox - * * @param e - event */ tglSmooth = (e) => { @@ -493,7 +498,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle click on Adaptive checkbox - * * @param e - event */ tglAdaptive = (e) => { @@ -503,7 +507,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Handle change of the Weight input field - * * @param e - event */ setWeight = (e) => { @@ -512,7 +515,6 @@ class DoodleModal extends ImmutablePureComponent { /** * Set size - clalback from the select box - * * @param e - event */ changeSize = (e) => { diff --git a/app/javascript/flavours/glitch/stream.js b/app/javascript/flavours/glitch/stream.js index 8a60f12b48..66d249f6cd 100644 --- a/app/javascript/flavours/glitch/stream.js +++ b/app/javascript/flavours/glitch/stream.js @@ -17,10 +17,10 @@ let sharedConnection; */ /** - * @typedef StreamEvent - * @property {string} event - * @property {object} payload - */ + * @typedef StreamEvent + * @property {string} event + * @property {object} payload + */ /** * @type {Array.} @@ -126,7 +126,7 @@ const sharedCallbacks = { /** * @param {string} channelName * @param {Object.} params - * @return {string} + * @returns {string} */ const channelNameWithInlineParams = (channelName, params) => { if (Object.keys(params).length === 0) { @@ -140,7 +140,7 @@ const channelNameWithInlineParams = (channelName, params) => { * @param {string} channelName * @param {Object.} params * @param {function(Function, Function): { onConnect: (function(): void), onReceive: (function(StreamEvent): void), onDisconnect: (function(): void) }} callbacks - * @return {function(): void} + * @returns {function(): void} */ // @ts-expect-error export const connectStream = (channelName, params, callbacks) => (dispatch, getState) => { @@ -227,7 +227,7 @@ const handleEventSourceMessage = (e, received) => { * @param {string} accessToken * @param {string} channelName * @param {{ connected: Function, received: function(StreamEvent): void, disconnected: Function, reconnected: Function }} callbacks - * @return {WebSocketClient | EventSource} + * @returns {WebSocketClient | EventSource} */ const createConnection = (streamingAPIBaseURL, accessToken, channelName, { connected, received, disconnected, reconnected }) => { const params = channelName.split('&'); diff --git a/app/javascript/flavours/glitch/utils/scrollbar.js b/app/javascript/flavours/glitch/utils/scrollbar.js index 929b036d66..b3f543ffb3 100644 --- a/app/javascript/flavours/glitch/utils/scrollbar.js +++ b/app/javascript/flavours/glitch/utils/scrollbar.js @@ -2,7 +2,7 @@ let cachedScrollbarWidth = null; /** - * @return {number} + * @returns {number} */ const getActualScrollbarWidth = () => { const outer = document.createElement('div'); @@ -20,7 +20,7 @@ const getActualScrollbarWidth = () => { }; /** - * @return {number} + * @returns {number} */ export const getScrollbarWidth = () => { if (cachedScrollbarWidth !== null) { From e9eab013e71c2de28622fed18e645356d10806f4 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 30 Apr 2023 06:42:22 +0200 Subject: [PATCH 38/43] [Glitch] Fix audio player width in thread view Port cf1bc4bb93f93c3056434f694f7ce31ce7f03158 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/features/audio/index.jsx | 2 +- app/javascript/flavours/glitch/styles/components/media.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/features/audio/index.jsx b/app/javascript/flavours/glitch/features/audio/index.jsx index ba88427915..f5bffb9738 100644 --- a/app/javascript/flavours/glitch/features/audio/index.jsx +++ b/app/javascript/flavours/glitch/features/audio/index.jsx @@ -476,7 +476,7 @@ class Audio extends React.PureComponent { } return ( -
+
Date: Mon, 14 Nov 2022 00:38:56 +0100 Subject: [PATCH 39/43] [Glitch] Fix icons having an image role Port 24b2c60beb73ff932b9539587e162283e99fd35d to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/components/icon.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/components/icon.jsx b/app/javascript/flavours/glitch/components/icon.jsx index d8a17722fe..d3d7c591d6 100644 --- a/app/javascript/flavours/glitch/components/icon.jsx +++ b/app/javascript/flavours/glitch/components/icon.jsx @@ -14,7 +14,7 @@ export default class Icon extends React.PureComponent { const { id, className, fixedWidth, ...other } = this.props; return ( - + ); } From a49707dacb9ceba552dc50f3d9f64b5dc81d501e Mon Sep 17 00:00:00 2001 From: fusagiko / takayamaki <24884114+takayamaki@users.noreply.github.com> Date: Mon, 1 May 2023 07:51:00 +0900 Subject: [PATCH 40/43] [Glitch] Rewrite Icon and IconWithBadge with typescript Port 81f75b1e0ecaa3c7a13f75188497be8b0f716dea to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/icon.jsx | 21 ------------------ .../flavours/glitch/components/icon.tsx | 14 ++++++++++++ .../glitch/components/icon_with_badge.jsx | 22 ------------------- .../glitch/components/icon_with_badge.tsx | 20 +++++++++++++++++ 4 files changed, 34 insertions(+), 43 deletions(-) delete mode 100644 app/javascript/flavours/glitch/components/icon.jsx create mode 100644 app/javascript/flavours/glitch/components/icon.tsx delete mode 100644 app/javascript/flavours/glitch/components/icon_with_badge.jsx create mode 100644 app/javascript/flavours/glitch/components/icon_with_badge.tsx diff --git a/app/javascript/flavours/glitch/components/icon.jsx b/app/javascript/flavours/glitch/components/icon.jsx deleted file mode 100644 index d3d7c591d6..0000000000 --- a/app/javascript/flavours/glitch/components/icon.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; - -export default class Icon extends React.PureComponent { - - static propTypes = { - id: PropTypes.string.isRequired, - className: PropTypes.string, - fixedWidth: PropTypes.bool, - }; - - render () { - const { id, className, fixedWidth, ...other } = this.props; - - return ( - - ); - } - -} diff --git a/app/javascript/flavours/glitch/components/icon.tsx b/app/javascript/flavours/glitch/components/icon.tsx new file mode 100644 index 0000000000..d85fff6ef6 --- /dev/null +++ b/app/javascript/flavours/glitch/components/icon.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import classNames from 'classnames'; + +type Props = { + id: string; + className?: string; + fixedWidth?: boolean; + children?: never; + [key: string]: any; +} +export const Icon: React.FC = ({ id, className, fixedWidth, ...other }) => + ; + +export default Icon; diff --git a/app/javascript/flavours/glitch/components/icon_with_badge.jsx b/app/javascript/flavours/glitch/components/icon_with_badge.jsx deleted file mode 100644 index a42ba45892..0000000000 --- a/app/javascript/flavours/glitch/components/icon_with_badge.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Icon from 'flavours/glitch/components/icon'; - -const formatNumber = num => num > 40 ? '40+' : num; - -const IconWithBadge = ({ id, count, issueBadge, className }) => ( - - - {count > 0 && {formatNumber(count)}} - {issueBadge && } - -); - -IconWithBadge.propTypes = { - id: PropTypes.string.isRequired, - count: PropTypes.number.isRequired, - issueBadge: PropTypes.bool, - className: PropTypes.string, -}; - -export default IconWithBadge; diff --git a/app/javascript/flavours/glitch/components/icon_with_badge.tsx b/app/javascript/flavours/glitch/components/icon_with_badge.tsx new file mode 100644 index 0000000000..487bf326ad --- /dev/null +++ b/app/javascript/flavours/glitch/components/icon_with_badge.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Icon } from './icon'; + +const formatNumber = (num: number): number | string => num > 40 ? '40+' : num; + +type Props = { + id: string; + count: number; + issueBadge: boolean; + className: string; +} +const IconWithBadge: React.FC = ({ id, count, issueBadge, className }) => ( + + + {count > 0 && {formatNumber(count)}} + {issueBadge && } + +); + +export default IconWithBadge; From aff2d55b80f5b29861224ffec545cdb412dedb80 Mon Sep 17 00:00:00 2001 From: fusagiko / takayamaki <24884114+takayamaki@users.noreply.github.com> Date: Mon, 1 May 2023 07:51:31 +0900 Subject: [PATCH 41/43] [Glitch] Add type annotation for RelativeTimestamp component Port 15fd712464dc6404e520aa302db0fba26cd630f3 to glitch-soc Signed-off-by: Claire --- ...e_timestamp.jsx => relative_timestamp.tsx} | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) rename app/javascript/flavours/glitch/components/{relative_timestamp.jsx => relative_timestamp.tsx} (85%) diff --git a/app/javascript/flavours/glitch/components/relative_timestamp.jsx b/app/javascript/flavours/glitch/components/relative_timestamp.tsx similarity index 85% rename from app/javascript/flavours/glitch/components/relative_timestamp.jsx rename to app/javascript/flavours/glitch/components/relative_timestamp.tsx index e6c3e08805..89cad06658 100644 --- a/app/javascript/flavours/glitch/components/relative_timestamp.jsx +++ b/app/javascript/flavours/glitch/components/relative_timestamp.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { injectIntl, defineMessages } from 'react-intl'; -import PropTypes from 'prop-types'; +import { injectIntl, defineMessages, InjectedIntl } from 'react-intl'; const messages = defineMessages({ today: { id: 'relative_time.today', defaultMessage: 'today' }, @@ -28,12 +27,12 @@ const dateFormatOptions = { day: '2-digit', hour: '2-digit', minute: '2-digit', -}; +} as const; const shortDateFormatOptions = { month: 'short', day: 'numeric', -}; +} as const; const SECOND = 1000; const MINUTE = 1000 * 60; @@ -42,7 +41,7 @@ const DAY = 1000 * 60 * 60 * 24; const MAX_DELAY = 2147483647; -const selectUnits = delta => { +const selectUnits = (delta: number) => { const absDelta = Math.abs(delta); if (absDelta < MINUTE) { @@ -56,7 +55,7 @@ const selectUnits = delta => { return 'day'; }; -const getUnitDelay = units => { +const getUnitDelay = (units: string) => { switch (units) { case 'second': return SECOND; @@ -71,7 +70,7 @@ const getUnitDelay = units => { } }; -export const timeAgoString = (intl, date, now, year, timeGiven, short) => { +export const timeAgoString = (intl: InjectedIntl, date: Date, now: number, year: number, timeGiven: boolean, short?: boolean) => { const delta = now - date.getTime(); let relativeTime; @@ -99,7 +98,7 @@ export const timeAgoString = (intl, date, now, year, timeGiven, short) => { return relativeTime; }; -const timeRemainingString = (intl, date, now, timeGiven = true) => { +const timeRemainingString = (intl: InjectedIntl, date: Date, now: number, timeGiven = true) => { const delta = date.getTime() - now; let relativeTime; @@ -121,15 +120,17 @@ const timeRemainingString = (intl, date, now, timeGiven = true) => { return relativeTime; }; -class RelativeTimestamp extends React.Component { - - static propTypes = { - intl: PropTypes.object.isRequired, - timestamp: PropTypes.string.isRequired, - year: PropTypes.number.isRequired, - futureDate: PropTypes.bool, - short: PropTypes.bool, - }; +type Props = { + intl: InjectedIntl; + timestamp: string; + year: number; + futureDate?: boolean; + short?: boolean; +} +type States = { + now: number; +} +class RelativeTimestamp extends React.Component { state = { now: this.props.intl.now(), @@ -140,7 +141,9 @@ class RelativeTimestamp extends React.Component { short: true, }; - shouldComponentUpdate (nextProps, nextState) { + _timer: number | undefined; + + shouldComponentUpdate (nextProps: Props, nextState: States) { // As of right now the locale doesn't change without a new page load, // but we might as well check in case that ever changes. return this.props.timestamp !== nextProps.timestamp || @@ -148,7 +151,7 @@ class RelativeTimestamp extends React.Component { this.state.now !== nextState.now; } - componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps (nextProps: Props) { if (this.props.timestamp !== nextProps.timestamp) { this.setState({ now: this.props.intl.now() }); } @@ -158,16 +161,16 @@ class RelativeTimestamp extends React.Component { this._scheduleNextUpdate(this.props, this.state); } - componentWillUpdate (nextProps, nextState) { + UNSAFE_componentWillUpdate (nextProps: Props, nextState: States) { this._scheduleNextUpdate(nextProps, nextState); } componentWillUnmount () { - clearTimeout(this._timer); + window.clearTimeout(this._timer); } - _scheduleNextUpdate (props, state) { - clearTimeout(this._timer); + _scheduleNextUpdate (props: Props, state: States) { + window.clearTimeout(this._timer); const { timestamp } = props; const delta = (new Date(timestamp)).getTime() - state.now; @@ -176,7 +179,7 @@ class RelativeTimestamp extends React.Component { const updateInterval = 1000 * 10; const delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder); - this._timer = setTimeout(() => { + this._timer = window.setTimeout(() => { this.setState({ now: this.props.intl.now() }); }, delay); } From 75e28731a55e61a4fc8928175473ccd071030841 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 1 May 2023 17:45:18 +0200 Subject: [PATCH 42/43] [Glitch] Fix transaction around settings migration Port f1c1fa1411d213a353467e3e8f396b0203474e6f to glitch-soc Signed-off-by: Claire --- db/migrate/20230215074424_move_glitch_user_settings.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb index 76fafdd761..83711597b7 100644 --- a/db/migrate/20230215074424_move_glitch_user_settings.rb +++ b/db/migrate/20230215074424_move_glitch_user_settings.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + class User < ApplicationRecord; end MAPPING = { From 8bf9bd5ac8497b26b18434643b72ca2203e732a3 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 2 May 2023 10:26:39 +0200 Subject: [PATCH 43/43] [Glitch] Fix n+1 query in settings migration Port 0ad2413b35287958f59073a5b63aecc659a64d98 to glitch-soc Signed-off-by: Claire --- ...0230215074424_move_glitch_user_settings.rb | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb index 83711597b7..e47a84ebce 100644 --- a/db/migrate/20230215074424_move_glitch_user_settings.rb +++ b/db/migrate/20230215074424_move_glitch_user_settings.rb @@ -31,27 +31,30 @@ class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] end def up - User.find_each do |user| - previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var) + User.find_in_batches do |users| + previous_settings_for_batch = LegacySetting.where(thing_type: 'User', thing_id: users.map(&:id)).group_by(&:thing_id) - user_settings = Oj.load(user.settings || '{}') - user_settings.delete('theme') + users.each do |user| + previous_settings = previous_settings_for_batch[user.id]&.index_by(&:var) || {} + user_settings = Oj.load(user.settings || '{}') + user_settings.delete('theme') - MAPPING.each do |legacy_key, new_key| - value = previous_settings[legacy_key]&.value + MAPPING.each do |legacy_key, new_key| + value = previous_settings[legacy_key]&.value - next if value.blank? + next if value.blank? - if value.is_a?(Hash) - value.each do |nested_key, nested_value| - user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + if value.is_a?(Hash) + value.each do |nested_key, nested_value| + user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + end + else + user_settings[new_key] = value end - else - user_settings[new_key] = value end - end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + end end end