diff --git a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDefaultDestinations.ts b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDefaultDestinations.ts index 6483c38b5..63f0e34e2 100644 --- a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDefaultDestinations.ts +++ b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDefaultDestinations.ts @@ -29,7 +29,7 @@ interface ForwardOriginChannel { interface BuildForwardDefaultDestinationsRequest { readonly frequentIds: ReadonlyArray; readonly history: ReadonlyArray; - readonly isValid: (row: ForwardRowIdentity) => boolean; + readonly accepts: (row: ForwardRowIdentity) => boolean; readonly mode: ForwardResultType | null; readonly origin: ForwardDestination | null; readonly pinned: ReadonlyArray; @@ -51,7 +51,7 @@ export function resolveForwardOrigin( export function buildForwardDefaultDestinations({ frequentIds, history, - isValid, + accepts, mode, origin, pinned, @@ -64,7 +64,7 @@ export function buildForwardDefaultDestinations({ ...history.slice(0, HISTORY_LIMIT).map((channelId) => resolveChannel(channelId)), ...frequentIds.slice(0, FREQUENT_LIMIT).map((channelId) => resolveChannel(channelId)), ]; - const rows = candidates.filter((row): row is ForwardRowIdentity => row != null && isValid(row)); + const rows = candidates.filter((row): row is ForwardRowIdentity => row != null && accepts(row)); const originSelected = origin != null && selected.some((destination) => destination.type === origin.type && destination.id === origin.id); const hiddenIds = origin == null || originSelected ? [] : [origin.id]; @@ -79,10 +79,10 @@ export function buildForwardDefaultDestinations({ export function filterForwardSearchRows( results: ReadonlyArray, - isValid: (row: ForwardRowIdentity) => boolean, + accepts: (row: ForwardRowIdentity) => boolean, ): ReadonlyArray { return dedupeRows( - results.filter((result) => isValid(result)), + results.filter((result) => accepts(result)), [], ); } diff --git a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationQuery.ts b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationQuery.ts index d1f759488..c4072c4bd 100644 --- a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationQuery.ts +++ b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationQuery.ts @@ -5,7 +5,7 @@ export type ForwardResultType = 'user' | 'text_channel' | 'voice_channel' | 'gro export interface ForwardDestinationQuery { readonly mode: ForwardResultType | null; readonly query: string; - readonly resultTypes: ReadonlyArray; + readonly kinds: ReadonlyArray; } const FORWARD_RESULT_TYPES: ReadonlyArray = Object.freeze([ @@ -24,10 +24,10 @@ const SIGIL_PATTERN = /^@|#|!|\*|\$/; export function parseForwardDestinationQuery(text: string): ForwardDestinationQuery { if (text.startsWith(GLOBAL_USER_SIGIL)) { - return Object.freeze({mode: null, query: text.slice(GLOBAL_USER_SIGIL.length), resultTypes: FORWARD_RESULT_TYPES}); + return Object.freeze({mode: null, query: text.slice(GLOBAL_USER_SIGIL.length), kinds: FORWARD_RESULT_TYPES}); } const query = text.replace(SIGIL_PATTERN, ''); const mode = SIGIL_RESULT_TYPES.get(text.charAt(0)); - if (mode === undefined) return Object.freeze({mode: null, query, resultTypes: FORWARD_RESULT_TYPES}); - return Object.freeze({mode, query, resultTypes: Object.freeze([mode])}); + if (mode === undefined) return Object.freeze({mode: null, query, kinds: FORWARD_RESULT_TYPES}); + return Object.freeze({mode, query, kinds: Object.freeze([mode])}); } diff --git a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSearch.ts b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSearch.ts index dbca08970..cc996b431 100644 --- a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSearch.ts +++ b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSearch.ts @@ -21,11 +21,12 @@ const CHANNEL_CONTEXT_SCORE_CAP = 6; const VOICE_IN_TEXT_SEARCH_PENALTY = 1; const VOICE_IN_TEXT_SEARCH_FLOOR = 0.5; const CHANNEL_FRECENCY_BONUS = 3; +const SNOWFLAKE_SCORE = 10; -type ForwardChannelKind = 'text' | 'voice'; +export type ForwardChannelKind = 'text' | 'voice'; export interface ForwardUserCandidate { - readonly friendNickname: string | null; + readonly friendAlias: string | null; readonly globalName: string | null; readonly id: string; readonly nicknames: ReadonlyArray; @@ -48,69 +49,79 @@ export interface ForwardChannelCandidate { readonly parentName: string | null; } +export interface ForwardGuildCandidate { + readonly id: string; + readonly name: string; +} + export interface ForwardFrequentItem { readonly id: string; - readonly kind: 'dm' | 'group_dm' | 'text' | 'voice' | 'other'; + readonly kind: 'dm' | 'group_dm' | 'guild' | 'text' | 'voice' | 'other'; readonly recipientId?: string | null; readonly score: number; } -export interface ForwardSearchBoosters { +export interface ForwardSearchWeights { readonly groupDMs: ReadonlyMap; - readonly textChannels: ReadonlyMap; + readonly guilds: ReadonlyMap; + readonly textChannel: ReadonlyMap; readonly users: ReadonlyMap; - readonly voiceChannels: ReadonlyMap; + readonly voiceChannel: ReadonlyMap; } export interface ForwardSearchResult { - readonly comparator: string; + readonly matchedText: string; readonly id: string; readonly score: number; readonly type: ForwardResultType; } -interface BuildForwardSearchBoostersRequest { +interface BuildForwardSearchWeightsRequest { readonly dmUserIds: Iterable; readonly frequent: ReadonlyArray; readonly friendIds: Iterable; } interface SearchForwardDestinationsRequest { - readonly blacklist: ReadonlySet; - readonly boosters: ForwardSearchBoosters; + readonly excludedIds: ReadonlySet; + readonly weights: ForwardSearchWeights; readonly channels: ReadonlyArray; readonly confusables: ReadonlyMap; readonly groupDMs: ReadonlyArray; readonly limit: number; readonly query: string; - readonly resultTypes: ReadonlyArray; + readonly kinds: ReadonlyArray; readonly users: ReadonlyArray; } -export function buildForwardSearchBoosters({ +export function buildForwardSearchWeights({ dmUserIds, frequent, friendIds, -}: BuildForwardSearchBoostersRequest): ForwardSearchBoosters { +}: BuildForwardSearchWeightsRequest): ForwardSearchWeights { const maxScore = frequent.reduce((max, item) => Math.max(max, item.score), 0); const users = new Map(); const groupDMs = new Map(); - const textChannels = new Map(); - const voiceChannels = new Map(); + const guilds = new Map(); + const textChannel = new Map(); + const voiceChannel = new Map(); for (const item of frequent) { - const boost = maxScore > 0 ? 1 + item.score / maxScore : 1; + const weight = maxScore > 0 ? 1 + item.score / maxScore : 1; switch (item.kind) { case 'dm': - if (item.recipientId != null) users.set(item.recipientId, boost); + if (item.recipientId != null) users.set(item.recipientId, weight); break; case 'group_dm': - groupDMs.set(item.id, boost); + groupDMs.set(item.id, weight); + break; + case 'guild': + guilds.set(item.id, weight); break; case 'text': - textChannels.set(item.id, boost); + textChannel.set(item.id, weight); break; case 'voice': - voiceChannels.set(item.id, boost); + voiceChannel.set(item.id, weight); break; case 'other': break; @@ -118,31 +129,27 @@ export function buildForwardSearchBoosters({ } for (const friendId of friendIds) users.set(friendId, (users.get(friendId) ?? 1) + FRIEND_BOOST); for (const userId of dmUserIds) users.set(userId, (users.get(userId) ?? 1) + OPEN_DM_BOOST); - return Object.freeze({groupDMs, textChannels, users, voiceChannels}); + return Object.freeze({groupDMs, guilds, textChannel, users, voiceChannel}); } export function searchForwardDestinations( request: SearchForwardDestinationsRequest, ): ReadonlyArray { - const {boosters, channels, confusables, limit, query, resultTypes} = request; + const {weights, channels, confusables, limit, query, kinds} = request; if (query.trim() === '') return []; const results = [ - ...(resultTypes.includes('user') - ? searchUsers(query, request.users, boosters.users, request.blacklist, confusables, limit) + ...(kinds.includes('user') + ? searchUsers(query, request.users, weights.users, request.excludedIds, confusables, limit) : []), - ...(resultTypes.includes('group_dm') - ? searchGroupDMs(query, request.groupDMs, boosters.groupDMs, confusables, limit) - : []), - ...(resultTypes.includes('text_channel') - ? searchChannels(query, channels, 'text', boosters.textChannels, limit) - : []), - ...(resultTypes.includes('voice_channel') - ? searchChannels(query, channels, 'voice', boosters.voiceChannels, limit) + ...(kinds.includes('group_dm') + ? searchGroupDMs(query, request.groupDMs, weights.groupDMs, confusables, limit) : []), + ...(kinds.includes('text_channel') ? searchChannels(query, channels, 'text', weights.textChannel, limit) : []), + ...(kinds.includes('voice_channel') ? searchChannels(query, channels, 'voice', weights.voiceChannel, limit) : []), ]; const seenKeys = new Set(); const merged = results.filter((result) => { - const key = `${result.type}-${result.id}`; + const key = `${result.type}|${result.id}`; if (seenKeys.has(key)) return false; seenKeys.add(key); return true; @@ -150,10 +157,10 @@ export function searchForwardDestinations( return merged.sort(compareSearchResults); } -function compareSearchResults(left: ForwardSearchResult, right: ForwardSearchResult): number { +export function compareSearchResults(left: ForwardSearchResult, right: ForwardSearchResult): number { if (left.score === right.score && left.type === 'user') { - const leftName = left.comparator.toLocaleLowerCase(); - const rightName = right.comparator.toLocaleLowerCase(); + const leftName = left.matchedText.toLocaleLowerCase(); + const rightName = right.matchedText.toLocaleLowerCase(); if (leftName < rightName) return -1; if (leftName > rightName) return 1; } @@ -164,69 +171,69 @@ function sortAndLimit(results: Array, limit: number): Array return results.sort(compareSearchResults).slice(0, limit); } -function searchUsers( +export function searchUsers( query: string, users: ReadonlyArray, - boosters: ReadonlyMap, - blacklist: ReadonlySet, + weights: ReadonlyMap, + excludedIds: ReadonlySet, confusables: ReadonlyMap, limit: number, ): Array { const escapedQuery = escapeSearchPattern(query); const prefixQuery = new RegExp(`^${escapedQuery}`, 'i'); - const containQuery = new RegExp(escapedQuery, 'i'); - const queryLower = query.toLocaleLowerCase(); - const querySkeleton = toConfusableSkeleton(queryLower, confusables); + const substringPattern = new RegExp(escapedQuery, 'i'); + const loweredText = query.toLocaleLowerCase(); + const querySkeleton = toConfusableSkeleton(loweredText, confusables); const scoreField = (field: string): number => { if (prefixQuery.test(field)) return 10; - if (containQuery.test(field)) return 5; + if (substringPattern.test(field)) return 5; const stripped = stripCombiningMarks(field.toLocaleLowerCase()); - if (fuzzySearch(queryLower, stripped)) return 1; + if (fuzzySearch(loweredText, stripped)) return 1; if (fuzzySearch(querySkeleton, toConfusableSkeleton(stripped, confusables))) return 1; return 0; }; const matches: Array = []; for (const user of users) { - if (blacklist.has(user.id)) continue; - const booster = boosters.get(user.id) ?? 1; + if (excludedIds.has(user.id)) continue; + const booster = weights.get(user.id) ?? 1; if (user.id === query) { - matches.push({comparator: user.id, id: user.id, score: 10 * booster, type: 'user'}); + matches.push({matchedText: user.id, id: user.id, score: 10 * booster, type: 'user'}); continue; } let best: ForwardSearchResult | null = null; - for (const field of [user.username, user.friendNickname, user.globalName, ...user.nicknames]) { + for (const field of [user.username, user.friendAlias, user.globalName, ...user.nicknames]) { if (field == null) continue; const score = scoreField(field) * booster; if (score === 0 || (best != null && best.score >= score)) continue; - best = {comparator: field, id: user.id, score, type: 'user'}; + best = {matchedText: field, id: user.id, score, type: 'user'}; } if (best != null) matches.push(best); } return sortAndLimit(matches, limit).map((match) => Object.freeze({...match, score: SCORE_SCALE * match.score})); } -function searchGroupDMs( +export function searchGroupDMs( query: string, groupDMs: ReadonlyArray, - boosters: ReadonlyMap, + weights: ReadonlyMap, confusables: ReadonlyMap, limit: number, ): Array { - const normalize = (text: string): string => + const foldText = (text: string): string => stripCombiningMarks(toConfusableSkeleton(text.toLocaleLowerCase(), confusables)); - const term = createSearchTerm(normalize(query)); + const term = createSearchTerm(foldText(query)); const results: Array = []; for (const groupDM of groupDMs) { - let score = scoreSearchTerm(normalize(groupDM.name), term); + let score = scoreSearchTerm(foldText(groupDM.name), term); for (const field of groupDM.memberFields) { - score = Math.max(score, Math.min(GROUP_DM_MEMBER_SCORE_CAP, scoreSearchTerm(normalize(field), term))); + score = Math.max(score, Math.min(GROUP_DM_MEMBER_SCORE_CAP, scoreSearchTerm(foldText(field), term))); } if (score === 0) continue; results.push( Object.freeze({ - comparator: groupDM.name, + matchedText: groupDM.name, id: groupDM.id, - score: SCORE_SCALE * score * (boosters.get(groupDM.id) ?? 1), + score: SCORE_SCALE * score * (weights.get(groupDM.id) ?? 1), type: 'group_dm', }), ); @@ -234,12 +241,13 @@ function searchGroupDMs( return sortAndLimit(results, limit); } -function searchChannels( +export function searchChannels( query: string, channels: ReadonlyArray, searchKind: ForwardChannelKind, - boosters: ReadonlyMap, + weights: ReadonlyMap, limit: number, + matchExactIds = false, ): Array { const terms = buildChannelSearchTerms(query); const results: Array = []; @@ -247,29 +255,64 @@ function searchChannels( if (searchKind === 'voice' && channel.kind !== 'voice') continue; if (!channel.canAccess) continue; const remainingTerms = [...terms]; - let score = consumeBestSearchTerm(channel.name.toLocaleLowerCase(), remainingTerms, true); + const isSnowflakeMatch = matchExactIds && channel.id === query; + let score = isSnowflakeMatch + ? SNOWFLAKE_SCORE + : consumeBestSearchTerm(channel.name.toLocaleLowerCase(), remainingTerms, true); if (score === 0) continue; - if (remainingTerms.length > 0) { + if (!isSnowflakeMatch && remainingTerms.length > 0) { for (const context of [channel.guildName, channel.parentName]) { if (context == null || context === '') continue; score += CHANNEL_CONTEXT_WEIGHT * consumeBestSearchTerm(context.toLocaleLowerCase(), remainingTerms, false); } score = Math.min(CHANNEL_CONTEXT_SCORE_CAP, score); } - if (remainingTerms.length > 1) continue; - if (remainingTerms.length === 1 && !remainingTerms[0].isFullMatch) continue; + if (!isSnowflakeMatch && remainingTerms.length > 1) continue; + if (!isSnowflakeMatch && remainingTerms.length === 1 && !remainingTerms[0].spansWholeQuery) continue; if (searchKind === 'text' && channel.kind === 'voice') { score = Math.max(score - VOICE_IN_TEXT_SEARCH_PENALTY, VOICE_IN_TEXT_SEARCH_FLOOR); } score = Math.min(score + (channel.hasFrecency ? CHANNEL_FRECENCY_BONUS : 0), score >= 7 ? 10 : 7); results.push( Object.freeze({ - comparator: channel.name, + matchedText: channel.name, id: channel.id, - score: SCORE_SCALE * score * (boosters.get(channel.id) ?? 1), + score: SCORE_SCALE * score * (weights.get(channel.id) ?? 1), type: channel.kind === 'voice' ? 'voice_channel' : 'text_channel', }), ); } return sortAndLimit(results, limit); } + +export interface GuildSearchResult { + readonly matchedText: string; + readonly id: string; + readonly score: number; +} + +export function searchGuilds( + query: string, + guilds: ReadonlyArray, + weights: ReadonlyMap, + excludedIds: ReadonlySet, + limit: number, + matchExactIds = false, +): Array { + const term = createSearchTerm(query.toLocaleLowerCase()); + const results: Array = []; + for (const guild of guilds) { + if (excludedIds.has(guild.id)) continue; + const score = + matchExactIds && guild.id === query ? SNOWFLAKE_SCORE : scoreSearchTerm(guild.name.toLocaleLowerCase(), term); + if (score === 0) continue; + results.push( + Object.freeze({ + matchedText: guild.name, + id: guild.id, + score: SCORE_SCALE * score * (weights.get(guild.id) ?? 1), + }), + ); + } + return results.sort((left, right) => right.score - left.score).slice(0, limit); +} diff --git a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSelection.ts b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSelection.ts index 5bb022422..349842066 100644 --- a/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSelection.ts +++ b/fluxer_app/src/features/app/components/dialogs/shared/ForwardDestinationSelection.ts @@ -10,7 +10,7 @@ export interface ForwardPinnedDestinations { } export function forwardDestinationKey(destination: ForwardDestination): string { - return `${destination.type}:${destination.id}`; + return `${destination.type}/${destination.id}`; } export function toggleForwardDestination( diff --git a/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts b/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts index 46f0ef57e..695cab9a2 100644 --- a/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts +++ b/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts @@ -9,13 +9,7 @@ import { } from '@app/features/app/components/dialogs/shared/ForwardDefaultDestinations'; import {parseForwardDestinationQuery} from '@app/features/app/components/dialogs/shared/ForwardDestinationQuery'; import { - buildForwardSearchBoosters, - type ForwardChannelCandidate, - type ForwardFrequentItem, - type ForwardGroupDMCandidate, - type ForwardSearchBoosters, type ForwardSearchResult, - type ForwardUserCandidate, searchForwardDestinations, } from '@app/features/app/components/dialogs/shared/ForwardDestinationSearch'; import { @@ -33,7 +27,6 @@ import * as ChannelUtils from '@app/features/channel/utils/ChannelUtils'; import DeveloperOptions from '@app/features/devtools/state/DeveloperOptions'; import type {Guild} from '@app/features/guild/models/Guild'; import Guilds from '@app/features/guild/state/Guilds'; -import {PERSONAL_NOTES_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors'; import GuildMembers from '@app/features/member/state/GuildMembers'; import type {ForwardMediaSelection} from '@app/features/messaging/commands/MessageCommands'; import type {Message} from '@app/features/messaging/models/MessagingMessage'; @@ -41,7 +34,7 @@ import SelectedChannel from '@app/features/navigation/state/SelectedChannel'; import Permission from '@app/features/permissions/state/Permission'; import {formatPermissionLabel} from '@app/features/permissions/utils/PermissionUtils'; import {Logger} from '@app/features/platform/utils/AppLogger'; -import Relationships from '@app/features/relationship/state/Relationships'; +import {createForwardSearchCandidates} from '@app/features/search/utils/DestinationSearchSources'; import {getLoadedUnicodeConfusables, loadUnicodeConfusables} from '@app/features/search/utils/SearchTextMatching'; import Slowmode from '@app/features/slowmode/state/Slowmode'; import {useNow} from '@app/features/ui/state/Tick'; @@ -51,13 +44,11 @@ import * as NicknameUtils from '@app/features/user/utils/NicknameUtils'; import {ChannelTypes, Permissions} from '@fluxer/constants/src/ChannelConstants'; import {GuildNSFWLevel, GuildOperations} from '@fluxer/constants/src/GuildConstants'; import {CHANNEL_RATE_LIMIT_PER_USER_MAX} from '@fluxer/constants/src/LimitConstants'; -import {RelationshipTypes} from '@fluxer/constants/src/UserConstants'; import type {MessageEmbed} from '@fluxer/schema/src/domains/message/EmbedSchemas'; import type {MessageAttachment} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; import type {I18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; import {useLingui} from '@lingui/react/macro'; -import {compareStructural, computed, type IComputedValue} from 'mobx'; import {useEffect, useMemo, useState} from 'react'; const GUILD_MESSAGES_DISABLED_DESCRIPTOR = msg({ @@ -110,13 +101,6 @@ interface ForwardMediaNeeds { readonly hasEmbeds: boolean; } -interface ForwardSearchCandidates { - readonly boosters: ForwardSearchBoosters; - readonly channels: ReadonlyArray; - readonly groupDMs: ReadonlyArray; - readonly users: ReadonlyArray; -} - export interface ForwardDestinationOption { readonly channel: Channel | null; readonly destination: ForwardDestination; @@ -137,10 +121,10 @@ interface UseForwardDestinationsOptions { interface ForwardDestinationsState { readonly composerChannel: Channel | null; readonly options: ReadonlyArray; - readonly searchQuery: string; + readonly filterText: string; readonly selected: ReadonlyArray; readonly selectedKeys: ReadonlySet; - readonly setSearchQuery: (query: string) => void; + readonly setFilterText: (query: string) => void; readonly slowmodeActiveSelectedOptions: ReadonlyArray; readonly slowmodeEnabledSelectedOptions: ReadonlyArray; readonly toggleDestination: (destination: ForwardDestination) => void; @@ -197,144 +181,6 @@ function isForwardRowValid(row: ForwardRowIdentity): boolean { } } -function collectGuildNicknames(): ReadonlyMap> { - const nicknames = new Map>(); - for (const guild of Guilds.getGuilds()) { - for (const member of GuildMembers.getMembers(guild.id)) { - if (member.nick == null) continue; - const userNicknames = nicknames.get(member.user.id); - if (userNicknames === undefined) { - nicknames.set(member.user.id, [member.nick]); - } else { - userNicknames.push(member.nick); - } - } - } - return nicknames; -} - -function buildForwardUserCandidates(): ReadonlyArray { - const nicknames = collectGuildNicknames(); - const candidates: Array = []; - for (const user of Users.getUsers()) { - const relationship = Relationships.getRelationship(user.id); - if (relationship?.type === RelationshipTypes.BLOCKED) continue; - let friendNickname: string | null = null; - if (relationship?.type === RelationshipTypes.FRIEND) friendNickname = relationship.nickname; - candidates.push( - Object.freeze({ - friendNickname, - globalName: user.globalName, - id: user.id, - nicknames: nicknames.get(user.id) ?? NO_STRINGS, - username: user.discriminator === '0' ? user.username : `${user.username}#${user.discriminator}`, - }), - ); - } - return Object.freeze(candidates); -} - -function collectRecipientSearchFields(recipientIds: ReadonlyArray): ReadonlyArray { - const fields: Array = []; - for (const recipientId of recipientIds) { - const recipient = Users.getUser(recipientId); - if (recipient == null) continue; - fields.push(recipient.username); - if (recipient.globalName != null) fields.push(recipient.globalName); - const relationshipNickname = Relationships.getRelationship(recipientId)?.nickname; - if (relationshipNickname != null) fields.push(relationshipNickname); - } - return Object.freeze(fields); -} - -function buildForwardGroupDMCandidates(i18n: I18n): ReadonlyArray { - const candidates: Array = []; - for (const channel of Channels.getPrivateChannels()) { - if (channel.type !== ChannelTypes.GROUP_DM) continue; - candidates.push( - Object.freeze({ - id: channel.id, - memberFields: collectRecipientSearchFields(channel.recipientIds), - name: ChannelUtils.getDMDisplayName(channel), - }), - ); - } - const currentUserId = Users.currentUserId; - const personalNotes = currentUserId == null ? undefined : Channels.getChannel(currentUserId); - if (personalNotes?.type === ChannelTypes.DM_PERSONAL_NOTES) { - candidates.push( - Object.freeze({id: personalNotes.id, memberFields: NO_STRINGS, name: i18n._(PERSONAL_NOTES_DESCRIPTOR)}), - ); - } - return Object.freeze(candidates); -} - -function buildForwardChannelCandidates(): ReadonlyArray { - const candidates: Array = []; - for (const channel of Channels.allChannels) { - if (channel.type !== ChannelTypes.GUILD_TEXT && channel.type !== ChannelTypes.GUILD_VOICE) continue; - const isVoice = channel.type === ChannelTypes.GUILD_VOICE; - const accessPermissions = isVoice ? Permissions.VIEW_CHANNEL | Permissions.CONNECT : Permissions.VIEW_CHANNEL; - candidates.push( - Object.freeze({ - canAccess: Permission.can(accessPermissions, channel), - guildName: channel.guildId == null ? null : (Guilds.getGuild(channel.guildId)?.name ?? null), - hasFrecency: ChannelFrecency.getScore(channel.id) > 0, - id: channel.id, - kind: isVoice ? 'voice' : 'text', - name: channel.name ?? '', - parentName: channel.parentId == null ? null : (Channels.getChannel(channel.parentId)?.name ?? null), - }), - ); - } - return Object.freeze(candidates); -} - -function resolveForwardFrequentItem(id: string): ForwardFrequentItem { - const score = ChannelFrecency.getScore(id); - const channel = Guilds.getGuild(id) == null ? Channels.getChannel(id) : undefined; - switch (channel?.type) { - case ChannelTypes.DM: - return {id, kind: 'dm', recipientId: channel.recipientIds.length > 0 ? channel.recipientIds[0] : null, score}; - case ChannelTypes.GROUP_DM: - case ChannelTypes.DM_PERSONAL_NOTES: - return {id, kind: 'group_dm', score}; - case ChannelTypes.GUILD_TEXT: - return {id, kind: 'text', score}; - case ChannelTypes.GUILD_VOICE: - return {id, kind: 'voice', score}; - default: - return {id, kind: 'other', score}; - } -} - -function buildForwardSearchBoostersFromStores(): ForwardSearchBoosters { - const friendIds: Array = []; - for (const relationship of Relationships.getRelationships()) { - if (relationship.type === RelationshipTypes.FRIEND) friendIds.push(relationship.userId); - } - const dmUserIds: Array = []; - for (const channel of Channels.getPrivateChannels()) { - if (channel.type === ChannelTypes.DM && channel.recipientIds.length > 0) dmUserIds.push(channel.recipientIds[0]); - } - return buildForwardSearchBoosters({ - dmUserIds, - frequent: ChannelFrecency.frequentIds.map(resolveForwardFrequentItem), - friendIds, - }); -} - -function createForwardSearchCandidates(i18n: I18n): IComputedValue { - const options = {equals: compareStructural}; - const users = computed(buildForwardUserCandidates, options); - const groupDMs = computed(() => buildForwardGroupDMCandidates(i18n), options); - const channels = computed(buildForwardChannelCandidates, options); - const boosters = computed(buildForwardSearchBoostersFromStores, options); - return computed(() => - Object.freeze({boosters: boosters.get(), channels: channels.get(), groupDMs: groupDMs.get(), users: users.get()}), - ); -} - function selectForwardedAttachments( message: Message, mediaSelection: ForwardMediaSelection | undefined, @@ -531,16 +377,16 @@ export function useForwardDestinations({ message, }: UseForwardDestinationsOptions): ForwardDestinationsState { const {i18n} = useLingui(); - const [searchQuery, setSearchQuery] = useState(''); + const [filterText, setFilterText] = useState(''); const [selected, setSelected] = useState(NO_DESTINATIONS); - const [pinnedDestinations, setPinnedDestinations] = useState(INITIAL_PINNED_DESTINATIONS); + const [stickyPicks, setStickyPicks] = useState(INITIAL_PINNED_DESTINATIONS); const [confusables, setConfusables] = useState(() => getLoadedUnicodeConfusables() ?? NO_CONFUSABLES); const searchCandidates = useMemo(() => createForwardSearchCandidates(i18n), [i18n, i18n.locale]); const mediaNeeds = useMemo(() => resolveForwardMediaNeeds(message, mediaSelection), [message, mediaSelection]); - const parsedQuery = useMemo(() => parseForwardDestinationQuery(searchQuery), [searchQuery]); + const parsedQuery = useMemo(() => parseForwardDestinationQuery(filterText), [filterText]); const engineQuery = parsedQuery.query.trim() === '' ? '' : parsedQuery.query; - const currentPinned = pinForwardDestinations(pinnedDestinations, engineQuery, selected); - if (currentPinned !== pinnedDestinations) setPinnedDestinations(currentPinned); + const currentPinned = pinForwardDestinations(stickyPicks, engineQuery, selected); + if (currentPinned !== stickyPicks) setStickyPicks(currentPinned); useEffect(() => { let isMounted = true; loadUnicodeConfusables().then( @@ -559,11 +405,11 @@ export function useForwardDestinations({ if (candidates == null) return NO_SEARCH_RESULTS; return searchForwardDestinations({ ...candidates, - blacklist: new Set(currentUserId == null ? NO_STRINGS : [currentUserId]), + excludedIds: new Set(currentUserId == null ? NO_STRINGS : [currentUserId]), confusables, - limit: parsedQuery.resultTypes.length === 1 ? SINGLE_TYPE_SEARCH_LIMIT : SEARCH_LIMIT, + limit: parsedQuery.kinds.length === 1 ? SINGLE_TYPE_SEARCH_LIMIT : SEARCH_LIMIT, query: engineQuery, - resultTypes: parsedQuery.resultTypes, + kinds: parsedQuery.kinds, }); }, [candidates, confusables, currentUserId, engineQuery, parsedQuery]); const rows = @@ -571,7 +417,7 @@ export function useForwardDestinations({ ? buildForwardDefaultDestinations({ frequentIds: ChannelFrecency.frequentIds, history: [...new Set(SelectedChannel.sortedRecentVisits.map((visit) => visit.channelId))], - isValid: isForwardRowValid, + accepts: isForwardRowValid, mode: parsedQuery.mode, origin: resolveForwardOrigin(message.channelId, Channels.getChannel(message.channelId)), pinned: currentPinned.pinned, @@ -590,16 +436,16 @@ export function useForwardDestinations({ const toggleDestination = (destination: ForwardDestination) => { const next = toggleForwardDestination(selected, destination); if (next === selected) return; - if (next.length > selected.length) setSearchQuery(''); + if (next.length > selected.length) setFilterText(''); setSelected(next); }; return { composerChannel: resolveForwardComposerChannel(selected), options, - searchQuery, + filterText, selected, selectedKeys: new Set(selected.map(forwardDestinationKey)), - setSearchQuery, + setFilterText, slowmodeActiveSelectedOptions: selectedOptions.filter(isSlowmodeActive), slowmodeEnabledSelectedOptions: selectedOptions.filter((option) => option.slowmodeEnabled), toggleDestination, diff --git a/fluxer_app/src/features/channel/components/ChannelOriginIcon.module.css b/fluxer_app/src/features/channel/components/ChannelOriginIcon.module.css new file mode 100644 index 000000000..8816affd1 --- /dev/null +++ b/fluxer_app/src/features/channel/components/ChannelOriginIcon.module.css @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: AGPL-3.0-or-later */ + +.frame { + --origin-badge-size: calc(var(--origin-icon-size) * 0.5625); + --origin-badge-offset: calc(var(--origin-icon-size) * -0.09375); + --origin-badge-gap: calc(var(--origin-icon-size) * 0.0625); + --origin-badge-center: calc(var(--origin-icon-size) - var(--origin-badge-size) / 2 - var(--origin-badge-offset)); + --origin-badge-cutout: calc(var(--origin-badge-size) / 2 + var(--origin-badge-gap)); + position: relative; + display: flex; + flex-shrink: 0; + width: var(--origin-icon-size); + height: var(--origin-icon-size); +} + +.cutout { + display: flex; + width: 100%; + height: 100%; + mask-image: radial-gradient( + circle at var(--origin-badge-center) var(--origin-badge-center), + transparent var(--origin-badge-cutout), + #000 calc(var(--origin-badge-cutout) + 0.03125rem) + ); +} + +.badge { + position: absolute; + right: var(--origin-badge-offset); + bottom: var(--origin-badge-offset); + display: flex; + align-items: center; + justify-content: center; + width: var(--origin-badge-size); + height: var(--origin-badge-size); + border-radius: 50%; + background-color: var(--background-tertiary); + color: var(--text-primary-muted); +} + +.badgeHighlighted { + color: var(--text-primary); +} + +.badgeIcon { + width: calc(var(--origin-icon-size) * 0.375); + height: calc(var(--origin-icon-size) * 0.375); +} + +.fallbackIcon { + width: var(--origin-icon-size); + height: var(--origin-icon-size); + flex-shrink: 0; + color: var(--text-primary-muted); +} + +.fallbackIconHighlighted { + color: var(--text-primary); +} diff --git a/fluxer_app/src/features/channel/components/ChannelOriginIcon.tsx b/fluxer_app/src/features/channel/components/ChannelOriginIcon.tsx new file mode 100644 index 000000000..717170e90 --- /dev/null +++ b/fluxer_app/src/features/channel/components/ChannelOriginIcon.tsx @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import styles from '@app/features/channel/components/ChannelOriginIcon.module.css'; +import type {Channel} from '@app/features/channel/models/Channel'; +import * as ChannelUtils from '@app/features/channel/utils/ChannelUtils'; +import {GuildIcon} from '@app/features/guild/components/popouts/GuildIcon'; +import Guilds from '@app/features/guild/state/Guilds'; +import {remFromPx} from '@app/features/theme/layout/RemFromPx'; +import {clsx} from 'clsx'; +import {observer} from 'mobx-react-lite'; +import type {CSSProperties, ReactNode} from 'react'; + +type OriginIconStyle = CSSProperties & {'--origin-icon-size': string}; + +interface ChannelBadgedIconProps { + channel: Channel; + children: ReactNode; + highlighted?: boolean; + size: number; +} + +interface ChannelOriginIconProps { + channel: Channel; + highlighted?: boolean; + size: number; +} + +function originIconStyle(size: number): OriginIconStyle { + return {'--origin-icon-size': remFromPx(size)}; +} + +export function ChannelBadgedIcon({channel, children, highlighted = false, size}: ChannelBadgedIconProps) { + return ( +
+
+ {children} +
+
+ {ChannelUtils.getIcon(channel, {className: styles.badgeIcon, weight: 'bold'})} +
+
+ ); +} + +export const ChannelOriginIcon = observer(function ChannelOriginIcon({ + channel, + highlighted = false, + size, +}: ChannelOriginIconProps) { + const guild = channel.guildId == null ? undefined : Guilds.getGuild(channel.guildId); + if (guild == null) { + return ( + + {ChannelUtils.getIcon(channel, { + className: clsx(styles.fallbackIcon, highlighted && styles.fallbackIconHighlighted), + weight: 'bold', + })} + + ); + } + return ( + + + + ); +}); diff --git a/fluxer_app/src/features/channel/state/ChannelFrecency.ts b/fluxer_app/src/features/channel/state/ChannelFrecency.ts index 3b6bee53d..28a4f8d26 100644 --- a/fluxer_app/src/features/channel/state/ChannelFrecency.ts +++ b/fluxer_app/src/features/channel/state/ChannelFrecency.ts @@ -46,10 +46,10 @@ function resolveFrecencyRecordId(key: string): string | null { } class ChannelFrecency { - usageHistory = new Map(); + useLog = new Map(); constructor() { - makeAutoObservable(this, {usageHistory: observableShallow}, {autoBind: true}); + makeAutoObservable(this, {useLog: observableShallow}, {autoBind: true}); void this.initPersistence(); } @@ -57,11 +57,11 @@ class ChannelFrecency { await makeSyncedField(this, { field: 'channelFrecency', schema: ChannelFrecencyStateSchema, - persist: ['usageHistory'], + persist: ['useLog'], debounceMs: FRECENCY_SYNC_DEBOUNCE_MS, - toMessage: (store) => ({usage: channelFrecencyHistoryToWire(store.usageHistory)}), + toMessage: (store) => ({usage: channelFrecencyHistoryToWire(store.useLog)}), applyMessage: (store, message) => { - store.usageHistory = channelFrecencyHistoryFromWire(message.usage, Date.now()); + store.useLog = channelFrecencyHistoryFromWire(message.usage, Date.now()); }, mergeRemote: (local, incoming) => ({ usage: mergeChannelFrecencyWireUsage(local.usage, incoming.usage, Date.now()), @@ -85,17 +85,17 @@ class ChannelFrecency { } get frequentIds(): ReadonlyArray { - return rankFrequentChannelIds(this.usageHistory, resolveFrecencyRecordId); + return rankFrequentChannelIds(this.useLog, resolveFrecencyRecordId); } - getScore(id: string): number { - return this.usageHistory.get(id)?.frecency ?? 0; + scoreFor(id: string): number { + return this.useLog.get(id)?.heat ?? 0; } - track(key: string, timestamp?: number): void { - trackChannelUse(this.usageHistory, key, timestamp); - capChannelFrecencyHistory(this.usageHistory); - computeChannelFrecency(this.usageHistory, Date.now()); + recordUse(key: string, timestamp?: number): void { + trackChannelUse(this.useLog, key, timestamp); + capChannelFrecencyHistory(this.useLog); + computeChannelFrecency(this.useLog, Date.now()); } recordSelection(guildId: string | null, channelId: string | null): void { @@ -103,21 +103,21 @@ class ChannelFrecency { if (channelId !== lastChannelId) { lastChannelId = channelId; if (isTrackableId(channelId)) { - this.track(channelId); + this.recordUse(channelId); } } if (selectedGuildId !== lastGuildId) { lastGuildId = selectedGuildId; if (isTrackableId(selectedGuildId)) { - this.track(selectedGuildId); + this.recordUse(selectedGuildId); } } } private refreshHistory(): void { - const current: unknown = this.usageHistory; + const current: unknown = this.useLog; if (!isObservableMap(current)) return; - this.usageHistory = restoreChannelFrecencyHistory(current.entries(), Date.now()); + this.useLog = restoreChannelFrecencyHistory(current.entries(), Date.now()); } } diff --git a/fluxer_app/src/features/channel/utils/ChannelFrecencyCalculator.ts b/fluxer_app/src/features/channel/utils/ChannelFrecencyCalculator.ts index 241901d36..37e431be0 100644 --- a/fluxer_app/src/features/channel/utils/ChannelFrecencyCalculator.ts +++ b/fluxer_app/src/features/channel/utils/ChannelFrecencyCalculator.ts @@ -1,9 +1,9 @@ // SPDX-License-Identifier: AGPL-3.0-or-later export interface ChannelFrecencyEntry { - readonly totalUses: number; - readonly recentUses: ReadonlyArray; - readonly frecency: number; + readonly hitCount: number; + readonly recentHits: ReadonlyArray; + readonly heat: number; readonly score: number; } @@ -11,7 +11,7 @@ export type ChannelFrecencyHistory = Map; interface RankedChannelFrecency { readonly id: string; - readonly frecency: number; + readonly heat: number; } const CHANNEL_FRECENCY_MAX_ITEMS = 100; @@ -22,12 +22,12 @@ const DAY_MS = 86_400_000; const MINUTE_MS = 60_000; function createEntry( - totalUses: number, - recentUses: ReadonlyArray, - frecency: number, + hitCount: number, + recentHits: ReadonlyArray, + heat: number, score: number, ): ChannelFrecencyEntry { - return Object.freeze({totalUses, recentUses: Object.freeze(recentUses), frecency, score}); + return Object.freeze({hitCount, recentHits: Object.freeze(recentHits), heat, score}); } function utcOffsetMinutes(timestamp: number): number { @@ -52,11 +52,11 @@ export function channelFrecencyWeight(dayDiff: number): number { return 1; } -function scoreRecentUses(recentUses: ReadonlyArray, now: number): number { - const sampleCount = Math.min(recentUses.length, CHANNEL_FRECENCY_MAX_SAMPLES); +function scoreRecentUses(recentHits: ReadonlyArray, now: number): number { + const sampleCount = Math.min(recentHits.length, CHANNEL_FRECENCY_MAX_SAMPLES); let score = 0; for (let index = 0; index < sampleCount; index++) { - score += channelFrecencyWeight(channelFrecencyDayDiff(now, recentUses[index])); + score += channelFrecencyWeight(channelFrecencyDayDiff(now, recentHits[index])); } return score; } @@ -68,15 +68,15 @@ export function trackChannelUse(history: ChannelFrecencyHistory, key: string, ti history.set(key, createEntry(1, [use], CHANNEL_FRECENCY_UNCOMPUTED, 0)); return; } - const recentUses = [...entry.recentUses, use]; + const recentHits = [...entry.recentHits, use]; if (timestamp !== undefined) { - recentUses.sort(compareAscending); + recentHits.sort(compareAscending); } history.set( key, createEntry( - entry.totalUses + 1, - recentUses.slice(-CHANNEL_FRECENCY_MAX_SAMPLES), + entry.hitCount + 1, + recentHits.slice(-CHANNEL_FRECENCY_MAX_SAMPLES), CHANNEL_FRECENCY_UNCOMPUTED, entry.score, ), @@ -85,11 +85,11 @@ export function trackChannelUse(history: ChannelFrecencyHistory, key: string, ti export function computeChannelFrecency(history: ChannelFrecencyHistory, now: number): void { for (const [key, entry] of history) { - if (entry.frecency !== CHANNEL_FRECENCY_UNCOMPUTED) continue; - const score = scoreRecentUses(entry.recentUses, now); + if (entry.heat !== CHANNEL_FRECENCY_UNCOMPUTED) continue; + const score = scoreRecentUses(entry.recentHits, now); if (score > 0) { - const frecency = Math.ceil(entry.totalUses * (score / entry.recentUses.length)); - history.set(key, createEntry(entry.totalUses, entry.recentUses, frecency, score)); + const heat = Math.ceil(entry.hitCount * (score / entry.recentHits.length)); + history.set(key, createEntry(entry.hitCount, entry.recentHits, heat, score)); } else { history.delete(key); } @@ -100,7 +100,7 @@ function findOldestLastUseKey(history: ReadonlyMap let oldestKey: string | null = null; let oldestLastUse = Number.POSITIVE_INFINITY; for (const [key, entry] of history) { - const lastUse = entry.recentUses.at(-1); + const lastUse = entry.recentHits.at(-1); if (lastUse !== undefined && lastUse < oldestLastUse) { oldestKey = key; oldestLastUse = lastUse; @@ -125,10 +125,10 @@ export function rankFrequentChannelIds( for (const [key, entry] of history) { const id = resolveRecordId(key); if (id !== null) { - ranked.push({id, frecency: entry.frecency}); + ranked.push({id, heat: entry.heat}); } } - ranked.sort((a, b) => b.frecency - a.frecency); + ranked.sort((a, b) => b.heat - a.heat); return Object.freeze(ranked.slice(0, CHANNEL_FRECENCY_MAX_ITEMS).map((item) => item.id)); } @@ -142,7 +142,7 @@ export type ChannelFrecencyWireUsage = Record>; function entryToWire(entry: ChannelFrecencyEntry): {totalUses: number; recentUsesMs: Array} { - return {totalUses: entry.totalUses, recentUsesMs: entry.recentUses.map((use) => BigInt(use))}; + return {totalUses: entry.hitCount, recentUsesMs: entry.recentHits.map((use) => BigInt(use))}; } export function channelFrecencyHistoryToWire( @@ -164,11 +164,11 @@ export function channelFrecencyHistoryFromWire( usage: ChannelFrecencyWireUsageInput, now: number, ): ChannelFrecencyHistory { - const persisted: Array = []; + const revived: Array = []; for (const [key, entry] of Object.entries(usage)) { - persisted.push([key, {totalUses: entry?.totalUses, recentUses: readWireUses(entry)}]); + revived.push([key, {hitCount: entry?.totalUses, recentHits: readWireUses(entry)}]); } - return restoreChannelFrecencyHistory(persisted, now); + return restoreChannelFrecencyHistory(revived, now); } export function mergeChannelFrecencyWireUsage( @@ -199,17 +199,17 @@ function isUseTimestamp(value: unknown): value is number { function readPersistedEntry(value: unknown): ChannelFrecencyEntry | null { if (typeof value !== 'object' || value === null) return null; - const {totalUses, recentUses} = value as {readonly totalUses?: unknown; readonly recentUses?: unknown}; - if (typeof totalUses !== 'number' || !Number.isFinite(totalUses) || !Array.isArray(recentUses)) return null; - return createEntry(totalUses, recentUses.filter(isUseTimestamp), CHANNEL_FRECENCY_UNCOMPUTED, 0); + const {hitCount, recentHits} = value as {readonly hitCount?: unknown; readonly recentHits?: unknown}; + if (typeof hitCount !== 'number' || !Number.isFinite(hitCount) || !Array.isArray(recentHits)) return null; + return createEntry(hitCount, recentHits.filter(isUseTimestamp), CHANNEL_FRECENCY_UNCOMPUTED, 0); } export function restoreChannelFrecencyHistory( - persisted: Iterable, + revived: Iterable, now: number, ): ChannelFrecencyHistory { const history: ChannelFrecencyHistory = new Map(); - for (const [key, value] of persisted) { + for (const [key, value] of revived) { if (typeof key !== 'string') continue; const entry = readPersistedEntry(value); if (entry !== null) { diff --git a/fluxer_app/src/features/i18n/locales/ar/messages.po b/fluxer_app/src/features/i18n/locales/ar/messages.po index ba948f1e1..6c5eac5a5 100644 --- a/fluxer_app/src/features/i18n/locales/ar/messages.po +++ b/fluxer_app/src/features/i18n/locales/ar/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, zero {لا رسائل جديدة} one {رسالة جديدة واحدة} two {رسالتان جديدتان} few {# رسائل جديدة} many {# رسالة جديدة} other {# رسالة جديدة}} منذ {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, zero {لا رسائل غير مقروءة} one {رسالة واحدة غير مقروءة} two {رسالتان غير مقروءتين} few {# رسائل غير مقروءة} many {# رسالة غير مقروءة} other {# رسالة غير مقروءة}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "ساعة واحدة" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "إشارة واحدة" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "القناة" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "القناة {id}" @@ -15755,7 +15755,7 @@ msgstr "بوت يقبل الصداقة" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "الانتقال إلى الشاشة الرئيسية" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "الانتقال إلى الرسالة" @@ -16612,11 +16612,6 @@ msgstr "دعوات المجموعة" msgid "Group message" msgstr "محادثة جماعية" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "المحادثات الجماعية" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "بنسلفانيا" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "الأشخاص" @@ -25430,6 +25423,11 @@ msgstr "آخر 7 أيام" msgid "Previous attachment" msgstr "المرفق السابق" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "القنوات السابقة" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "معاينة التمرير في الفيديو" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "بحث…" msgid "Searching" msgstr "جارٍ البحث" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "جارٍ البحث في جميع المستخدمين" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "جارٍ البحث عن المجتمعات" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "جارٍ البحث" msgid "Searching for people..." msgstr "جارٍ البحث عن أشخاص..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "البحث عن الأصدقاء والأعضاء في {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "البحث في قنوات النص" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "جارٍ البحث في قنوات الصوت" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "إرسال برامج ضارة أو روابط خطيرة" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "تم تعطيل إرسال الرسائل في هذا المجتمع" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "الوضع البطيء" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "الوضع البطيء · انتظر {remaining}" @@ -31723,7 +31746,7 @@ msgstr "البدء من جديد" msgid "Start recording" msgstr "بدء التسجيل" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "ابدأ عمليات البحث بـ <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} لتضييق نطاق النتائج." @@ -32963,10 +32986,8 @@ msgstr "قناة نصية" msgid "Text channel names" msgstr "أسماء القنوات النصية" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "القنوات النصية" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "لم يعد هذا العضو متصلًا بالقناة الصوتية." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "لا يمكن إعادة توجيه هذه الرسالة إلا إلى القنوات المخصصة للبالغين" @@ -35988,6 +36009,11 @@ msgstr "تخصيص شارات الرسائل غير المقروءة" msgid "Unread badges" msgstr "شارات الرسائل غير المقروءة" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "القنوات غير المقروءة" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "القناة الصوتية ممتلئة" msgid "Voice channel join behavior" msgstr "سلوك الانضمام إلى القناة الصوتية" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "القنوات الصوتية" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "تحتاج إلى الوصول إلى بريدك الإلكتروني الحالي لتغييره من هنا. استخدم التحقق عبر الهاتف إذا كان متاحًا أو اتصل بالدعم." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "أنت بحاجة إلى إذن \"{attachFilesPermissionLabel}\" لإرفاق الملفات في هذه القناة" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "أنت بحاجة إلى إذن \"{embedLinksPermissionLabel}\" لتضمين الروابط في هذه القناة" diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index 1d904f172..69bf20d47 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -2349,6 +2349,9 @@ { "msgid": "Previous 6 days" }, + { + "msgid": "Previous channels" + }, { "msgid": "Product name" }, @@ -2607,6 +2610,21 @@ { "msgid": "Search for {query}" }, + { + "msgid": "Searching all users" + }, + { + "msgid": "Searching communities" + }, + { + "msgid": "Searching friends and members of {communityName}" + }, + { + "msgid": "Searching text channels" + }, + { + "msgid": "Searching voice channels" + }, { "msgid": "Second factor" }, @@ -3171,6 +3189,9 @@ { "msgid": "Unavailable" }, + { + "msgid": "Unread channels" + }, { "msgid": "Upload files and media in messages." }, diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index 8cb87a7e7..5d52e194c 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# ново} other {# нови}} от {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# непрочетено} other {# непрочетени}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 час" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 споменаване" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Канал" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Канал {id}" @@ -15755,7 +15755,7 @@ msgstr "Приятелски бот" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Към начало" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Към съобщението" @@ -16612,11 +16612,6 @@ msgstr "Покани за група" msgid "Group message" msgstr "Групово съобщение" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Групови съобщения" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Пенсилвания" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Хора" @@ -25430,6 +25423,11 @@ msgstr "Последните 7 дни" msgid "Previous attachment" msgstr "Предишен прикачен файл" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Предишни канали" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Преглед при превъртане" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Търсене…" msgid "Searching" msgstr "Търсене" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Търсене във всички потребители" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Търсене в общности" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Търсене" msgid "Searching for people..." msgstr "Търсене на хора..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Търсене на приятели и членове на {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Търсене на текстови канали" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Търсене на гласови канали" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Изпращане на злонамерен софтуер или опасни линкове" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Изпращането на съобщения е деактивирано в тази общност" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Бавен режим" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Бавен режим · изчакай {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Започване отначало" msgid "Start recording" msgstr "Започване на запис" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Започни търсенето с <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}, за да стесниш резултатите." @@ -32963,10 +32986,8 @@ msgstr "Текстов канал" msgid "Text channel names" msgstr "Имена на текстови канали" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Текстови канали" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Този член вече не е свързан с гласов канал." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Това съобщение може да бъде препратено само към канали с ограничена възраст" @@ -35988,6 +36009,11 @@ msgstr "Персонализиране на значките за непроче msgid "Unread badges" msgstr "Значки за непрочетени" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Непрочетени канали" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Гласовият канал е пълен" msgid "Voice channel join behavior" msgstr "Поведение при присъединяване към гласов канал" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Гласови канали" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "За да смениш имейла си оттук, трябва да имаш достъп до текущия. Използвай потвърждение по телефона, ако е налично, или се свържи с поддръжката." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Нужно е разрешението „{attachFilesPermissionLabel}“, за да прикачваш файлове в този канал" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Нужно е разрешението „{embedLinksPermissionLabel}“, за да вграждаш линкове в този канал" diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index cb472e626..ec33097a7 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nová} few {# nové} many {# nové} other {# nových}} od {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# nepřečtená} few {# nepřečtené} many {# nepřečtené} other {# nepřečtených}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 hodina" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 zmínka" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanál" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanál {id}" @@ -15755,7 +15755,7 @@ msgstr "Přátelský bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Přejít na domovskou stránku" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Přejít na zprávu" @@ -16612,11 +16612,6 @@ msgstr "Pozvánky do skupiny" msgid "Group message" msgstr "Skupinová zpráva" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Zprávy ve skupině" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensylvánie" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Lidé" @@ -25430,6 +25423,11 @@ msgstr "Posledních 7 dní" msgid "Previous attachment" msgstr "Předchozí příloha" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Předchozí kanály" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Náhled při posouvání v záznamu" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Hledat…" msgid "Searching" msgstr "Vyhledávání" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Hledám všechny uživatele" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Hledám komunity" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Vyhledávání" msgid "Searching for people..." msgstr "Hledání lidí..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Hledání přátel a členů komunity {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Hledání textových kanálů" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Hledám hlasové kanály" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Odesílání malwaru nebo nebezpečných odkazů" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "V této komunitě je odesílání zpráv zakázáno" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Pomalý režim" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Pomalý režim · čekejte {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Začít znovu" msgid "Start recording" msgstr "Spustit nahrávání" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Pro zúžení výsledků začněte hledání jednou z předpon <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}." @@ -32963,10 +32986,8 @@ msgstr "Textový kanál" msgid "Text channel names" msgstr "Názvy textových kanálů" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Textové kanály" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Tento člen už není připojen k hlasovému chatu." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Tuto zprávu lze přeposlat pouze do kanálů s omezeným věkem" @@ -35988,6 +36009,11 @@ msgstr "Přizpůsobení odznaku nepřečtených zpráv" msgid "Unread badges" msgstr "Odznaky nepřečtených zpráv" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Nepřečtené kanály" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Hlasový kanál je plný" msgid "Voice channel join behavior" msgstr "Chování při připojení k hlasovému kanálu" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Hlasové kanály" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Pro změnu e-mailu potřebujete přístup k tomu stávajícímu. Použijte ověření telefonem, pokud je k dispozici, nebo kontaktujte podporu." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "K připojení souborů v tomto kanálu potřebujete oprávnění \"{attachFilesPermissionLabel}\"" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "K zobrazování vložených náhledů odkazů v tomto kanálu potřebujete oprávnění „{embedLinksPermissionLabel}“" diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 8763226e4..bb4031f2e 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# ny} other {# nye}} siden {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# ulæst} other {# ulæste}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 time" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 omtale" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanal {id}" @@ -15755,7 +15755,7 @@ msgstr "Venlig bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Gå til startside" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Gå til besked" @@ -16612,11 +16612,6 @@ msgstr "Gruppeinvitationer" msgid "Group message" msgstr "Gruppebesked" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Gruppebeskeder" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personer" @@ -25430,6 +25423,11 @@ msgstr "Seneste 7 dage" msgid "Previous attachment" msgstr "Forrige vedhæftede fil" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Tidligere kanaler" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Forhåndsvisning ved spoling" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Søg…" msgid "Searching" msgstr "Søger" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Søger efter alle brugere" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Søger i communities" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Søger" msgid "Searching for people..." msgstr "Søger efter personer ..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Søger efter venner og medlemmer af {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Søger i tekstkanaler" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Søger i stemmekanaler" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Sender malware eller farlige links" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Afsendelse af beskeder er deaktiveret i dette fællesskab" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Langsom tilstand" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Langsom tilstand · vent {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Start forfra" msgid "Start recording" msgstr "Start optagelse" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Start søgninger med <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} for at indsnævre resultaterne." @@ -32963,10 +32986,8 @@ msgstr "Tekstkanal" msgid "Text channel names" msgstr "Navne på tekstkanaler" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Tekstkanaler" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Dette medlem er ikke længere i taleopkaldet." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Denne besked kan kun videresendes til kanaler med aldersbegrænsning" @@ -35988,6 +36009,11 @@ msgstr "Tilpasning af badges for ulæste beskeder" msgid "Unread badges" msgstr "Badges for ulæste beskeder" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Uolæste kanaler" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Talekanalen er fuld" msgid "Voice channel join behavior" msgstr "Indstillinger for deltagelse i talekanal" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Talekanaler" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Du skal have adgang til din nuværende e-mail for at ændre den herfra. Brug telefonbekræftelse, hvis det er muligt, eller kontakt support." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Du skal have tilladelsen \"{attachFilesPermissionLabel}\" for at vedhæfte filer i denne kanal" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Du skal have tilladelsen \"{embedLinksPermissionLabel}\" for at kunne indlejre links i denne kanal" diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 6969909e2..ffdea18bb 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# neue} other {# neue}} seit {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# ungelesene Nachricht} other {# ungelesene Nachrichten}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 Stunde" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 Erwähnung" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanal {id}" @@ -15755,7 +15755,7 @@ msgstr "Freundlicher Bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Zur Startseite" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Zur Nachricht" @@ -16612,11 +16612,6 @@ msgstr "Gruppeneinladungen" msgid "Group message" msgstr "Gruppennachricht" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Gruppennachrichten" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personen" @@ -25430,6 +25423,11 @@ msgstr "Letzte 7 Tage" msgid "Previous attachment" msgstr "Vorheriger Anhang" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Zuletzt besuchte Kanäle" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Vorschau beim Spulen" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Suchen …" msgid "Searching" msgstr "Suchen" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Alle Nutzer durchsuchen" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Communities durchsuchen" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Suchen" msgid "Searching for people..." msgstr "Personen suchen ..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Freunde und Mitglieder von {communityName} suchen" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Textkanäle durchsuchen" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Sprachkanäle durchsuchen" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Malware oder gefährliche Links senden" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Das Senden von Nachrichten ist in dieser Community deaktiviert" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Slow-Modus" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Slow-Modus · warte {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Neu beginnen" msgid "Start recording" msgstr "Aufnahme starten" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Beginne Suchvorgänge mit <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}, um die Ergebnisse einzugrenzen." @@ -32963,10 +32986,8 @@ msgstr "Textkanal" msgid "Text channel names" msgstr "Textkanalnamen" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Textkanäle" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Dieses Mitglied ist nicht mehr mit dem Sprachkanal verbunden." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Diese Nachricht kann nur an Kanäle mit Altersbeschränkung weitergeleitet werden" @@ -35988,6 +36009,11 @@ msgstr "Anpassung der Anzeige für ungelesene Nachrichten" msgid "Unread badges" msgstr "Ungelesen-Badges" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Ungelesene Kanäle" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Sprachkanal voll" msgid "Voice channel join behavior" msgstr "Verhalten beim Beitreten von Sprachkanälen" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Sprachkanäle" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Du benötigst Zugriff auf deine aktuelle E-Mail-Adresse, um sie hier zu ändern. Nutze, falls verfügbar, die Telefonverifizierung oder kontaktiere den Support." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Du benötigst die Berechtigung \"{attachFilesPermissionLabel}\", um Dateien in diesem Kanal anzuhängen" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Du benötigst die Berechtigung \"{embedLinksPermissionLabel}\", um Links in diesem Kanal einzubetten" diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index 033189908..5b3e91752 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# νέο} other {# νέα}} από {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# μη αναγνωσμένο} other {# μη αναγνωσμένα}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 ώρα" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 αναφορά" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Κανάλι" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Κανάλι {id}" @@ -15755,7 +15755,7 @@ msgstr "Φιλικό bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Μετάβαση στην αρχική" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Μετάβαση στο μήνυμα" @@ -16612,11 +16612,6 @@ msgstr "Προσκλήσεις ομάδας" msgid "Group message" msgstr "Ομαδικό μήνυμα" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Ομαδικά μηνύματα" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Πενσιλβάνια" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Άτομα" @@ -25430,6 +25423,11 @@ msgstr "Τελευταίες 7 ημέρες" msgid "Previous attachment" msgstr "Προηγούμενο συνημμένο" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Προηγούμενα κανάλια" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Προεπισκόπηση μετακίνησης" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Αναζήτηση…" msgid "Searching" msgstr "Αναζήτηση" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Αναζήτηση όλων των χρηστών" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Αναζήτηση κοινοτήτων" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Αναζήτηση" msgid "Searching for people..." msgstr "Αναζήτηση ατόμων..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Αναζήτηση φίλων και μελών του {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Αναζήτηση καναλιών κειμένου" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Αναζήτηση καναλιών φωνής" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Αποστολή κακόβουλου λογισμικού ή επικίνδυνων συνδέσμων" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Η αποστολή μηνυμάτων έχει απενεργοποιηθεί σε αυτήν την κοινότητα" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Αργή λειτουργία" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Αργή λειτουργία · αναμονή {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Από την αρχή" msgid "Start recording" msgstr "Έναρξη εγγραφής" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Ξεκινήστε τις αναζητήσεις με <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} για να περιορίσετε τα αποτελέσματα." @@ -32963,10 +32986,8 @@ msgstr "Κανάλι κειμένου" msgid "Text channel names" msgstr "Ονόματα καναλιών κειμένου" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Κανάλια κειμένου" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Αυτό το μέλος δεν είναι πλέον συνδεδεμένο στη φωνητική συνομιλία." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Αυτό το μήνυμα μπορεί να προωθηθεί μόνο σε κανάλια με περιορισμό ηλικίας" @@ -35988,6 +36009,11 @@ msgstr "Προσαρμογή σήματος μη αναγνωσμένων μην msgid "Unread badges" msgstr "Σήματα μη αναγνωσμένων" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Μη αναγνωσμένα κανάλια" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Το φωνητικό κανάλι είναι πλήρες" msgid "Voice channel join behavior" msgstr "Συμπεριφορά εισόδου σε φωνητικό κανάλι" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Φωνητικά κανάλια" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Για να αλλάξετε το email σας από εδώ, πρέπει να έχετε πρόσβαση στο τρέχον email σας. Χρησιμοποιήστε την επαλήθευση μέσω τηλεφώνου, αν είναι διαθέσιμη, ή επικοινωνήστε με την υποστήριξη." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Χρειάζεστε το δικαίωμα «{attachFilesPermissionLabel}» για να επισυνάψετε αρχεία σε αυτό το κανάλι" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Χρειάζεστε το δικαίωμα «{embedLinksPermissionLabel}» για να ενσωματώσετε συνδέσμους σε αυτό το κανάλι" diff --git a/fluxer_app/src/features/i18n/locales/en-GB/messages.po b/fluxer_app/src/features/i18n/locales/en-GB/messages.po index 26cf7adfc..6b3c1790f 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# unread} other {# unread}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 hour" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 mention" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Channel" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Channel {id}" @@ -15755,7 +15755,7 @@ msgstr "Friendly bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Go to home" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Go to message" @@ -16612,11 +16612,6 @@ msgstr "Group invites" msgid "Group message" msgstr "Group message" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Group messages" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -23962,7 +23957,6 @@ msgstr "Open your browser, sign in, then enter the code below to link your accou msgid "Open your messages" msgstr "Open your messages" -# auto-i18n: reviewed unchanged #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:129 msgid "Open your old {PRODUCT_NAME} app and choose Link a new device, then enter the code below." msgstr "Open your old {PRODUCT_NAME} app and choose Link a new device, then enter the code below." @@ -24557,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "People" @@ -25431,6 +25423,11 @@ msgstr "Previous 7 days" msgid "Previous attachment" msgstr "Previous attachment" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Previous channels" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28646,7 +28643,7 @@ msgstr "Scrub preview" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28922,6 +28919,16 @@ msgstr "Search…" msgid "Searching" msgstr "Searching" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Searching all users" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Searching communities" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28929,6 +28936,21 @@ msgstr "Searching" msgid "Searching for people..." msgstr "Searching for people..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Searching friends and members of {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Searching text channels" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Searching voice channels" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29497,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Sending malware or dangerous links" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Sending messages is disabled in this community" @@ -30600,7 +30622,6 @@ msgstr "Sign in via browser" msgid "Sign in with a passkey" msgstr "Sign in with a passkey" -# auto-i18n: reviewed unchanged #. Sign-in option and modal title on fluxer.com that pairs a newly installed app with the old installed app still signed in on the previous domain. productName is the app name. #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:27 msgid "Sign in with your old {productName} app" @@ -30942,7 +30963,7 @@ msgid "Slowmode" msgstr "Slowmode" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Slowmode · wait {remaining}" @@ -31725,7 +31746,7 @@ msgstr "Start over" msgid "Start recording" msgstr "Start recording" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." @@ -32965,10 +32986,8 @@ msgstr "Text channel" msgid "Text channel names" msgstr "Text channel names" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Text channels" @@ -34059,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "This member isn't connected to voice anymore." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "This message can only be forwarded to age-restricted channels" @@ -35990,6 +36009,12 @@ msgstr "Unread badge customisation" msgid "Unread badges" msgstr "Unread badges" +# auto-i18n: reviewed unchanged +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Unread channels" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37882,10 +37907,8 @@ msgstr "Voice channel full" msgid "Voice channel join behavior" msgstr "Voice channel join behaviour" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Voice channels" @@ -39415,12 +39438,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "You need access to your current email to change it from here. Use phone verification if available or contact support." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" diff --git a/fluxer_app/src/features/i18n/locales/en-US/messages.po b/fluxer_app/src/features/i18n/locales/en-US/messages.po index dec7ad965..fc186ae06 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# unread} other {# unread}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 hour" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 mention" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Channel" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Channel {id}" @@ -15755,7 +15755,7 @@ msgstr "Friendly bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Go to home" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Go to message" @@ -16612,11 +16612,6 @@ msgstr "Group invites" msgid "Group message" msgstr "Group message" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Group messages" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "People" @@ -25430,6 +25423,11 @@ msgstr "Previous 7 days" msgid "Previous attachment" msgstr "Previous attachment" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Previous channels" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Scrub preview" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Search…" msgid "Searching" msgstr "Searching" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Searching all users" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Searching communities" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Searching" msgid "Searching for people..." msgstr "Searching for people..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Searching friends and members of {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Searching text channels" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Searching voice channels" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Sending malware or dangerous links" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Sending messages is disabled in this community" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Slowmode" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Slowmode · wait {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Start over" msgid "Start recording" msgstr "Start recording" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." @@ -32963,10 +32986,8 @@ msgstr "Text channel" msgid "Text channel names" msgstr "Text channel names" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Text channels" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "This member isn't connected to voice anymore." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "This message can only be forwarded to age-restricted channels" @@ -35988,6 +36009,11 @@ msgstr "Unread badge customization" msgid "Unread badges" msgstr "Unread badges" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Unread channels" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Voice channel full" msgid "Voice channel join behavior" msgstr "Voice channel join behavior" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Voice channels" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "You need access to your current email to change it from here. Use phone verification if available or contact support." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" diff --git a/fluxer_app/src/features/i18n/locales/es-419/messages.po b/fluxer_app/src/features/i18n/locales/es-419/messages.po index ee8153b06..9d1577e8e 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nuevo} many {# nuevos} other {# nuevos}} desde {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# sin leer} many {# sin leer} other {# sin leer}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 hora" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 mención" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Canal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Canal {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot amigable" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ir a inicio" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Ir al mensaje" @@ -16612,11 +16612,6 @@ msgstr "Invitaciones al grupo" msgid "Group message" msgstr "Mensaje grupal" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Mensajes de grupo" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensilvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personas" @@ -25430,6 +25423,11 @@ msgstr "Últimos 7 días" msgid "Previous attachment" msgstr "Adjunto anterior" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Canales anteriores" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Vista previa al recorrer el video" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Buscar…" msgid "Searching" msgstr "Buscando" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Buscando todos los usuarios" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Buscando comunidades" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Buscando" msgid "Searching for people..." msgstr "Buscando personas..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Buscando amigos y miembros de {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Buscando canales de texto" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Buscando canales de voz" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Enviar malware o enlaces peligrosos" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "No se pueden enviar mensajes en esta comunidad" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Modo lento" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Modo lento · espera {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Volver a empezar" msgid "Start recording" msgstr "Iniciar grabación" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Comienza las búsquedas con <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} para reducir los resultados." @@ -32963,10 +32986,8 @@ msgstr "Canal de texto" msgid "Text channel names" msgstr "Nombres de canales de texto" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Canales de texto" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Este miembro ya no está conectado al chat de voz." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Este mensaje solo se puede reenviar a canales con restricción de edad" @@ -35988,6 +36009,11 @@ msgstr "Personalización de la insignia de mensajes no leídos" msgid "Unread badges" msgstr "Insignias de mensajes sin leer" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Canales no leídos" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Canal de voz lleno" msgid "Voice channel join behavior" msgstr "Comportamiento al unirse a canales de voz" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Canales de voz" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Necesitas acceso a tu correo electrónico actual para cambiarlo desde aquí. Usa la verificación por teléfono si está disponible o contacta a soporte." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Necesitas el permiso \"{attachFilesPermissionLabel}\" para adjuntar archivos en este canal" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Necesitas el permiso \"{embedLinksPermissionLabel}\" para incrustar enlaces en este canal" diff --git a/fluxer_app/src/features/i18n/locales/es-ES/messages.po b/fluxer_app/src/features/i18n/locales/es-ES/messages.po index e65bcbeba..1b21873d0 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nuevo} many {# nuevos} other {# nuevos}} desde {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# sin leer} many {# sin leer} other {# sin leer}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 hora" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 mención" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Canal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Canal {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot amistoso" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ir a inicio" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Ir al mensaje" @@ -16612,11 +16612,6 @@ msgstr "Invitaciones a grupos" msgid "Group message" msgstr "Mensaje de grupo" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Mensajes de grupo" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensilvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personas" @@ -25430,6 +25423,11 @@ msgstr "Últimos 7 días" msgid "Previous attachment" msgstr "Adjunto anterior" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Canales anteriores" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Vista previa al recorrer el vídeo" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Buscar…" msgid "Searching" msgstr "Buscando" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Buscando en todos los usuarios" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Buscando comunidades" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Buscando" msgid "Searching for people..." msgstr "Buscando personas..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Buscando amigos y miembros de {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Buscando canales de texto" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Buscando canales de voz" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Enviar malware o enlaces peligrosos" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "El envío de mensajes está deshabilitado en esta comunidad" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Modo lento" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Modo lento · espera {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Empezar de nuevo" msgid "Start recording" msgstr "Iniciar grabación" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Comienza las búsquedas con <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} para reducir los resultados." @@ -32963,10 +32986,8 @@ msgstr "Canal de texto" msgid "Text channel names" msgstr "Nombres de los canales de texto" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Canales de texto" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Este miembro ya no está conectado al chat de voz." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Este mensaje solo se puede reenviar a canales con restricción de edad" @@ -35988,6 +36009,11 @@ msgstr "Personalización de la insignia de mensajes no leídos" msgid "Unread badges" msgstr "Insignias de mensajes sin leer" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Canales sin leer" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Canal de voz lleno" msgid "Voice channel join behavior" msgstr "Comportamiento al unirse a un canal de voz" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Canales de voz" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Necesitas acceder a tu correo electrónico actual para cambiarlo desde aquí. Usa la verificación por teléfono si está disponible o contacta con soporte." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Necesitas el permiso \"{attachFilesPermissionLabel}\" para adjuntar archivos en este canal" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Necesitas el permiso \"{embedLinksPermissionLabel}\" para incrustar enlaces en este canal" diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index 876a740cf..5f22267b5 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# uusi viesti} other {# uutta viestiä}} {shortTime} alkaen" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# lukematon} other {# lukematonta}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 tunti" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 maininta" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanava" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanava {id}" @@ -15755,7 +15755,7 @@ msgstr "Ystävällinen botti" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Siirry etusivulle" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Siirry viestiin" @@ -16612,11 +16612,6 @@ msgstr "Ryhmäkutsut" msgid "Group message" msgstr "Ryhmäviesti" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Ryhmäviestit" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Ihmiset" @@ -25430,6 +25423,11 @@ msgstr "Edelliset 7 päivää" msgid "Previous attachment" msgstr "Edellinen liite" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Aiemmat kanavat" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Kelauksen esikatselu" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Hae…" msgid "Searching" msgstr "Haetaan" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Kaikkien käyttäjien haku" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Etsitään yhteisöjä" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Haetaan" msgid "Searching for people..." msgstr "Etsitään henkilöitä..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Etsitään ystäviä ja jäseniä yhteisöstä {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Tekstikanavien haku" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Äänikanavien haku" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Haittaohjelmien tai vaarallisten linkkien lähettäminen" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Viestien lähettäminen on poistettu käytöstä tässä yhteisössä" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Hidas tila" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Hidas tila · odota {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Aloita alusta" msgid "Start recording" msgstr "Aloita nauhoitus" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Aloita haut käyttämällä <0>{peoplePrefix}, <1>{textChannelPrefix}, <2>{voiceChannelPrefix} ja <3>{communityPrefix}, jotta voit rajata hakutuloksia." @@ -32963,10 +32986,8 @@ msgstr "Tekstikanava" msgid "Text channel names" msgstr "Tekstikanavien nimet" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Tekstikanavat" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Tämä jäsen ei ole enää äänikanavalla." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Tämä viesti voidaan välittää vain ikärajoitettuihin kanaviin" @@ -35988,6 +36009,11 @@ msgstr "Lukemattomien viestien merkkien mukautus" msgid "Unread badges" msgstr "Lukemattomien viestien merkit" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Lukemattomat kanavat" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Äänikanava täynnä" msgid "Voice channel join behavior" msgstr "Äänikanavalle liittymisen toiminta" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Äänikanavat" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Jotta voit vaihtaa sähköpostiosoitteesi täältä, tarvitset pääsyn nykyiseen sähköpostiisi. Käytä puhelinvarmennusta, jos se on saatavilla, tai ota yhteyttä tukeen." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Tarvitset \"{attachFilesPermissionLabel}\" -käyttöoikeuden liittääksesi tiedostoja tällä kanavalla" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Tarvitset \"{embedLinksPermissionLabel}\" -käyttöoikeuden upottaaksesi linkkejä tällä kanavalla" diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index 04f3874ef..271d9ca24 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nouveau} many {# nouveaux} other {# nouveaux}} depuis {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# non lu} many {# non lus} other {# non lus}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 heure" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 mention" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Salon" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Salon {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot convivial" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Aller à l'accueil" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Aller au message" @@ -16612,11 +16612,6 @@ msgstr "Invitations de groupe" msgid "Group message" msgstr "Message de groupe" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Messages de groupe" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvanie" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personnes" @@ -25430,6 +25423,11 @@ msgstr "7 derniers jours" msgid "Previous attachment" msgstr "Pièce jointe précédente" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Canaux précédents" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Aperçu lors du déplacement dans la vidéo" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Rechercher…" msgid "Searching" msgstr "Recherche en cours" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Recherche de tous les utilisateurs" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Recherche de communautés" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Recherche en cours" msgid "Searching for people..." msgstr "Recherche de personnes..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Recherche d'amis et de membres de {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Recherche des salons textuels" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Recherche des canaux vocaux" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Envoi de logiciels malveillants ou de liens dangereux" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "L'envoi de messages est désactivé dans cette communauté" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Mode lent" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Mode lent · attendez {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Recommencer" msgid "Start recording" msgstr "Démarrer l’enregistrement" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Commencez vos recherches avec <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} pour affiner les résultats." @@ -32963,10 +32986,8 @@ msgstr "Salon textuel" msgid "Text channel names" msgstr "Noms des salons textuels" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Salons textuels" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Ce membre n’est plus connecté à la discussion vocale." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Ce message ne peut être transféré qu'aux chaînes soumises à restriction d'âge." @@ -35988,6 +36009,11 @@ msgstr "Personnalisation des badges d’éléments non lus" msgid "Unread badges" msgstr "Badges de messages non lus" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Canaux non lus" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Salon vocal plein" msgid "Voice channel join behavior" msgstr "Comportement lors de la connexion aux salons vocaux" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Salons vocaux" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Vous devez avoir accès à votre adresse e-mail actuelle pour la modifier d'ici. Utilisez la vérification par téléphone si disponible ou contactez l'assistance." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Vous devez disposer de la permission « {attachFilesPermissionLabel} » pour joindre des fichiers dans ce salon" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Vous devez disposer de la permission « {embedLinksPermissionLabel} » pour intégrer des liens dans ce salon" diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index e7fa2c07a..daf20653b 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {הודעה חדשה אחת} two {# הודעות חדשות} other {# הודעות חדשות}} מאז {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {הודעה אחת שלא נקראה} two {# הודעות שלא נקראו} other {# הודעות שלא נקראו}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "שעה אחת" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "אזכור אחד" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "ערוץ" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "ערוץ {id}" @@ -15755,7 +15755,7 @@ msgstr "בוט ידידותי" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "עבור לדף הבית" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "מעבר להודעה" @@ -16612,11 +16612,6 @@ msgstr "הזמנות לקבוצה" msgid "Group message" msgstr "צ'אט קבוצתי" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "צ'אטים קבוצתיים" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "פנסילבניה" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "אנשים" @@ -25430,6 +25423,11 @@ msgstr "7 הימים האחרונים" msgid "Previous attachment" msgstr "קובץ מצורף קודם" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "ערוצים קודמים" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "תצוגה מקדימה בגלילה" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "חיפוש…" msgid "Searching" msgstr "מחפש" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "מחפש את כל המשתמשים" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "חיפוש קהילות" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "מחפש" msgid "Searching for people..." msgstr "מחפש אנשים..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "מחפש חברים וחברים ב-{communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "חיפוש ערוצי טקסט" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "מחפש ערוצי קול" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "שליחת תוכנות זדוניות או קישורים מסוכנים" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "שליחת הודעות מושבתת בקהילה זו" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "מצב איטי" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "מצב איטי · המתן {remaining}" @@ -31723,7 +31746,7 @@ msgstr "התחל מחדש" msgid "Start recording" msgstr "התחל להקליט" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "התחל חיפושים עם <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} כדי לצמצם את התוצאות." @@ -32963,10 +32986,8 @@ msgstr "ערוץ טקסט" msgid "Text channel names" msgstr "שמות ערוצי טקסט" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "ערוצי טקסט" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "החבר הזה כבר לא מחובר לערוץ הקולי." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "לא ניתן להעביר הודעה זו אלא לערוצים המיועדים לגיל מסוים" @@ -35988,6 +36009,11 @@ msgstr "התאמה אישית של תג ההודעות שלא נקראו" msgid "Unread badges" msgstr "תגי הודעות שלא נקראו" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "ערוצים שלא נקראו" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "הערוץ הקולי מלא" msgid "Voice channel join behavior" msgstr "התנהגות הצטרפות לערוץ קולי" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "ערוצי קול" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "כדי לשנות את כתובת האימייל שלך מכאן, עליך לגשת לאימייל הנוכחי שלך. השתמש באימות טלפוני אם זמין, או פנה לתמיכה." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "דרושה לך ההרשאה \"{attachFilesPermissionLabel}\" כדי לצרף קבצים בערוץ זה" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "דרושה לך ההרשאה \"{embedLinksPermissionLabel}\" כדי להטמיע קישורים בערוץ זה" diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index a119d0808..7091fe419 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{shortTime} से {unreadCount, plural, one {# नया मैसेज} other {# नए मैसेज}}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# अपठित मैसेज} other {# अपठित मैसेज}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 घंटा" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 मेंशन" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "चैनल" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "चैनल {id}" @@ -15755,7 +15755,7 @@ msgstr "फ्रेंडली बॉट" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "होम पर जाएं" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "मैसेज पर जाएं" @@ -16612,11 +16612,6 @@ msgstr "ग्रुप इनवाइट" msgid "Group message" msgstr "ग्रुप मैसेज" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "ग्रुप मैसेज" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "पेंसिल्वेनिया" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "लोग" @@ -25430,6 +25423,11 @@ msgstr "पिछले 7 दिन" msgid "Previous attachment" msgstr "पिछला अटैचमेंट" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "पिछले चैनल" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "स्क्रब प्रीव्यू" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "खोजें…" msgid "Searching" msgstr "खोजा जा रहा है" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "सभी उपयोगकर्ताओं को खोजें" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "समुदायों की खोज की जा रही है" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "खोजा जा रहा है" msgid "Searching for people..." msgstr "लोगों को खोजा जा रहा है..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "{communityName} के दोस्तों और सदस्यों को खोज रहे हैं" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "टेक्स्ट चैनल खोज रहे हैं" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "वॉइस चैनल खोज रहे हैं" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "मैलवेयर या खतरनाक लिंक भेजना" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "इस कम्युनिटी में मैसेज भेजना बंद है" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "स्लोमोड" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "स्लोमोड · {remaining} इंतज़ार करें" @@ -31723,7 +31746,7 @@ msgstr "फिर से शुरू करें" msgid "Start recording" msgstr "रिकॉर्डिंग शुरू करें" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "परिणाम सीमित करने के लिए खोज <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} से शुरू करें।" @@ -32963,10 +32986,8 @@ msgstr "टेक्स्ट चैनल" msgid "Text channel names" msgstr "टेक्स्ट चैनल के नाम" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "टेक्स्ट चैनल" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "यह सदस्य अब वॉइस से कनेक्टेड नहीं है।" #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "यह संदेश केवल आयु-प्रतिबंधित चैनलों पर ही अग्रेषित किया जा सकता है" @@ -35988,6 +36009,11 @@ msgstr "न पढ़े गए बैज का कस्टमाइज़े msgid "Unread badges" msgstr "न पढ़े गए बैज" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "अनपढ़े चैनल" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "वॉइस चैनल भरा हुआ है" msgid "Voice channel join behavior" msgstr "वॉइस चैनल में शामिल होने का तरीका" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "वॉइस चैनल" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "इसे यहां से बदलने के लिए आपको अपने मौजूदा ईमेल का एक्सेस चाहिए। अगर उपलब्ध हो, तो फ़ोन वेरिफ़िकेशन का इस्तेमाल करें या सहायता से संपर्क करें।" #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "इस चैनल में फ़ाइलें अटैच करने के लिए आपको \"{attachFilesPermissionLabel}\" अनुमति चाहिए" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "इस चैनल में लिंक एम्बेड करने के लिए आपको \"{embedLinksPermissionLabel}\" अनुमति चाहिए" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index b7afec655..128ef14cd 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nova} few {# nove} other {# novih}} od {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# nepročitana} few {# nepročitane} other {# nepročitanih}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 sat" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 spominjanje" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanal {id}" @@ -15755,7 +15755,7 @@ msgstr "Prijateljski bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Idi na početnu" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Idi na poruku" @@ -16612,11 +16612,6 @@ msgstr "Pozivnice za grupu" msgid "Group message" msgstr "Grupna poruka" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Grupne poruke" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Osobe" @@ -25430,6 +25423,11 @@ msgstr "Prethodnih 7 dana" msgid "Previous attachment" msgstr "Prethodni privitak" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Prethodni kanali" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Pregled pri pomicanju" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Pretraži…" msgid "Searching" msgstr "Pretraživanje" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Pretraživanje svih korisnika" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Pretraživanje zajednica" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Pretraživanje" msgid "Searching for people..." msgstr "Traženje osoba..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Pretraživanje prijatelja i članova zajednice {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Pretraživanje tekstualnih kanala" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Pretraživanje glasovnih kanala" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Slanje zlonamjernog softvera ili opasnih poveznica" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Slanje poruka onemogućeno je u ovoj zajednici" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Usporeni način rada" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Usporeni način rada · čekajte {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Počni ispočetka" msgid "Start recording" msgstr "Započni snimanje" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Započnite pretraživanje s <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} kako biste suzili rezultate." @@ -32963,10 +32986,8 @@ msgstr "Tekstualni kanal" msgid "Text channel names" msgstr "Nazivi tekstualnih kanala" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Tekstualni kanali" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Ovaj član više nije povezan s glasovnim kanalom." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Ovu poruku možete proslijediti samo u kanale s ograničenim pristupom prema dobi" @@ -35988,6 +36009,11 @@ msgstr "Prilagodba značke za nepročitane poruke" msgid "Unread badges" msgstr "Značke za nepročitano" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Nepročitani kanali" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Glasovni kanal je pun" msgid "Voice channel join behavior" msgstr "Ponašanje pri pridruživanju glasovnom kanalu" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Glasovni kanali" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Za promjenu e-pošte ovdje morate imati pristup svojoj trenutačnoj adresi e-pošte. Upotrijebite provjeru telefonom ako je dostupna ili se obratite podršci." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Potrebno vam je dopuštenje \"{attachFilesPermissionLabel}\" za prilaganje datoteka u ovom kanalu" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Potrebno vam je dopuštenje \"{embedLinksPermissionLabel}\" za ugrađivanje poveznica u ovom kanalu" diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index fba8dfbf0..dd84f7b52 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# új üzenet} other {# új üzenet}} {shortTime} óta" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# olvasatlan} other {# olvasatlan}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 óra" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 említés" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Csatorna" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Csatorna {id}" @@ -15755,7 +15755,7 @@ msgstr "Barátságos bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ugrás a kezdőoldalra" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Ugrás az üzenetre" @@ -16612,11 +16612,6 @@ msgstr "Csoportmeghívók" msgid "Group message" msgstr "Csoportüzenet" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Csoportüzenetek" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Személyek" @@ -25430,6 +25423,11 @@ msgstr "Előző 7 nap" msgid "Previous attachment" msgstr "Előző melléklet" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Korábbi csatornák" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Előnézet tekerés közben" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Keresés…" msgid "Searching" msgstr "Keresés" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Összes felhasználó keresése" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Közösségek keresése" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Keresés" msgid "Searching for people..." msgstr "Személyek keresése..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Tagok és barátok keresése itt: {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Csatornák keresése" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Hangcsatornák keresése" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Kártevő vagy veszélyes linkek küldése" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Az üzenetküldés le van tiltva ebben a közösségben" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Lassú mód" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Lassú mód · hátralévő várakozás: {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Újrakezdés" msgid "Start recording" msgstr "Felvétel indítása" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Kezdd a kereséseket az alábbiak szerint: <0>{peoplePrefix}, <1>{textChannelPrefix}, <2>{voiceChannelPrefix}, <3>{communityPrefix}, hogy szűkítsd az eredményeket." @@ -32963,10 +32986,8 @@ msgstr "Szöveges csatorna" msgid "Text channel names" msgstr "Szöveges csatornák nevei" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Szöveges csatornák" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Ez a tag már nincs hanghívásban." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Ez az üzenet csak korlátozottan megtekinthető csatornákra továbbítható" @@ -35988,6 +36009,11 @@ msgstr "Olvasatlan jelzés testreszabása" msgid "Unread badges" msgstr "Olvasatlan jelvények" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Olvasatlan csatornák" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "A hangcsatorna megtelt" msgid "Voice channel join behavior" msgstr "Csatlakozási viselkedés hangcsatornán" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Hangcsatornák" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Az e-mail-címed megváltoztatásához hozzá kell férned a jelenlegi címedhez. Használj telefonos ellenőrzést, ha elérhető, vagy vedd fel a kapcsolatot az ügyfélszolgálattal." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Fájlok csatolásához a(z) „{attachFilesPermissionLabel}” jogosultságra van szükséged ebben a csatornában" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Linkek beágyazásához a(z) „{embedLinksPermissionLabel}” jogosultságra van szükséged ebben a csatornában" diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index 06e102ca5..99d0d8efa 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, other {# baru}} sejak {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {# belum dibaca}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 jam" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 sebutan" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Saluran" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Saluran {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot ramah" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ke beranda" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Buka pesan" @@ -16612,11 +16612,6 @@ msgstr "Undangan grup" msgid "Group message" msgstr "Pesan grup" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Pesan grup" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Orang" @@ -25430,6 +25423,11 @@ msgstr "7 hari terakhir" msgid "Previous attachment" msgstr "Lampiran sebelumnya" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Saluran sebelumnya" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Pratinjau geser video" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Cari…" msgid "Searching" msgstr "Mencari" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Mencari semua pengguna" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Mencari komunitas" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Mencari" msgid "Searching for people..." msgstr "Mencari orang..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Mencari teman dan anggota {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Mencari kanal teks" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Mencari saluran suara" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Mengirim malware atau tautan berbahaya" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Pengiriman pesan dinonaktifkan di komunitas ini" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Mode lambat" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Mode lambat · tunggu {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Mulai lagi" msgid "Start recording" msgstr "Mulai merekam" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Mulai pencarian dengan <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} untuk mempersempit hasil." @@ -32963,10 +32986,8 @@ msgstr "Saluran teks" msgid "Text channel names" msgstr "Nama saluran teks" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Saluran teks" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Anggota ini sudah tidak terhubung ke suara." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Pesan ini hanya dapat diteruskan ke channel yang dibatasi usia" @@ -35988,6 +36009,11 @@ msgstr "Kustomisasi lencana belum dibaca" msgid "Unread badges" msgstr "Lencana belum dibaca" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Saluran belum dibaca" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Saluran suara penuh" msgid "Voice channel join behavior" msgstr "Perilaku bergabung ke saluran suara" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Saluran suara" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Kamu perlu akses ke email saat ini untuk mengubahnya dari sini. Gunakan verifikasi telepon jika tersedia atau hubungi dukungan." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Kamu memerlukan izin \"{attachFilesPermissionLabel}\" untuk melampirkan file di saluran ini" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Kamu memerlukan izin \"{embedLinksPermissionLabel}\" untuk menyematkan tautan di saluran ini" diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index fe41a91d2..67a2302bc 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nuovo} many {# nuovi} other {# nuovi}} da {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# non letto} many {# non letti} other {# non letti}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 ora" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 menzione" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Canale" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Canale {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot amico" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Vai alla Home" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Vai al messaggio" @@ -16612,11 +16612,6 @@ msgstr "Inviti di gruppo" msgid "Group message" msgstr "Messaggio di gruppo" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Messaggi di gruppo" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Persone" @@ -25430,6 +25423,11 @@ msgstr "Ultimi 7 giorni" msgid "Previous attachment" msgstr "Allegato precedente" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Canali precedenti" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Anteprima durante lo scorrimento del video" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Cerca…" msgid "Searching" msgstr "Ricerca in corso" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Ricerca di tutti gli utenti" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Ricerca community" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Ricerca in corso" msgid "Searching for people..." msgstr "Ricerca persone..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Ricerca amici e membri di {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Ricerca canali di testo" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Ricerca canali vocali" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Invio di malware o link pericolosi" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "L'invio di messaggi è disabilitato in questa community" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Modalità lenta" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Modalità lenta · attendi {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Ricomincia" msgid "Start recording" msgstr "Avvia registrazione" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Inizia le ricerche con <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} per restringere i risultati." @@ -32963,10 +32986,8 @@ msgstr "Canale testuale" msgid "Text channel names" msgstr "Nomi dei canali testuali" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Canali testuali" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Questo membro non è più connesso alla chat vocale." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Questo messaggio può essere inoltrato solo a canali con restrizioni d'età" @@ -35988,6 +36009,11 @@ msgstr "Personalizzazione del badge dei messaggi non letti" msgid "Unread badges" msgstr "Badge messaggi non letti" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Canali non letti" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Canale vocale pieno" msgid "Voice channel join behavior" msgstr "Comportamento di accesso ai canali vocali" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Canali vocali" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Per modificare l'email da qui, devi avere accesso a quella attuale. Usa la verifica telefonica se disponibile o contatta il supporto." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Per allegare file in questo canale, devi avere il permesso \"{attachFilesPermissionLabel}\"" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Per incorporare link in questo canale, ti serve l'autorizzazione \"{embedLinksPermissionLabel}\"" diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index bda870578..344f6708d 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, other {新着#件}}({shortTime}以降)" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {未読#件}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1時間" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1件のメンション" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "チャンネル" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "チャンネル {id}" @@ -15755,7 +15755,7 @@ msgstr "友達になれるボット" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "ホームへ" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "メッセージへ移動" @@ -16612,11 +16612,6 @@ msgstr "グループへの招待" msgid "Group message" msgstr "グループメッセージ" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "グループメッセージ" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "ペンシルベニア州" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "ユーザー" @@ -25430,6 +25423,11 @@ msgstr "過去7日間" msgid "Previous attachment" msgstr "前の添付ファイル" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "最近利用したチャンネル" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "スクラブプレビュー" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "検索…" msgid "Searching" msgstr "検索中" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "ユーザーを検索中" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "コミュニティを検索中" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "検索中" msgid "Searching for people..." msgstr "ユーザーを検索中…" +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "{communityName} の友達やメンバーを検索中" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "テキストチャンネルを検索中" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "ボイスチャンネルを検索中" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "マルウェアや危険なリンクの送信" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "このコミュニティではメッセージを送信できません" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "スローモード" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "スローモード · 残り{remaining}" @@ -31723,7 +31746,7 @@ msgstr "最初からやり直す" msgid "Start recording" msgstr "録音を開始" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "検索の先頭に <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} を付けると、結果を絞り込めます。" @@ -32963,10 +32986,8 @@ msgstr "テキストチャンネル" msgid "Text channel names" msgstr "テキストチャンネル名" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "テキストチャンネル" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "このメンバーはすでにボイスチャンネルに接続していません。" #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "このメッセージは年齢制限のあるチャンネルにのみ転送できます" @@ -35988,6 +36009,11 @@ msgstr "未読バッジのカスタマイズ" msgid "Unread badges" msgstr "未読バッジ" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "未読チャンネル" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "ボイスチャンネルの定員がいっぱいです" msgid "Voice channel join behavior" msgstr "ボイスチャンネル参加時の動作" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "ボイスチャンネル" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "メールアドレスを変更するには、現在のメールアドレスにアクセスできる必要があります。電話番号認証を利用するか、サポートにお問い合わせください。" #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "このチャンネルでファイルを添付するには、「{attachFilesPermissionLabel}」の権限が必要です" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "このチャンネルにリンクを埋め込むには、「{embedLinksPermissionLabel}」の権限が必要です" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index a35171ec9..85bb97c73 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{shortTime} 이후 {unreadCount, plural, other {새 메시지 #개}}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {읽지 않은 메시지 #개}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1시간" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "멘션 1개" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "채널" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "채널 {id}" @@ -15755,7 +15755,7 @@ msgstr "친구 추가 가능 봇" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "홈으로 이동" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "메시지로 이동" @@ -16612,11 +16612,6 @@ msgstr "그룹 초대" msgid "Group message" msgstr "그룹 메시지" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "그룹 메시지" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "펜실베이니아" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "사람" @@ -25430,6 +25423,11 @@ msgstr "지난 7일" msgid "Previous attachment" msgstr "이전 첨부 파일" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "최근 채널" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "스크러빙 미리보기" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "검색…" msgid "Searching" msgstr "검색 중" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "모든 사용자 검색 중" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "커뮤니티 검색 중" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "검색 중" msgid "Searching for people..." msgstr "사람 검색 중..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "{communityName}의 친구 및 멤버 검색" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "텍스트 채널 검색 중" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "음성 채널 검색 중" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "악성 코드 또는 위험한 링크 전송" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "이 커뮤니티에서는 메시지 전송이 비활성화되어 있습니다" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "슬로우 모드" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "슬로우 모드 · {remaining} 대기" @@ -31723,7 +31746,7 @@ msgstr "다시 시작" msgid "Start recording" msgstr "녹음 시작" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "검색어 앞에 <0>{peoplePrefix}, <1>{textChannelPrefix}, <2>{voiceChannelPrefix}, <3>{communityPrefix} 기호를 붙이면 검색 범위를 좁힐 수 있습니다." @@ -32963,10 +32986,8 @@ msgstr "텍스트 채널" msgid "Text channel names" msgstr "텍스트 채널 이름" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "텍스트 채널" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "이 멤버는 더 이상 음성 채팅에 연결되어 있지 않습니다." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "이 메시지는 연령 제한 채널로만 전달할 수 있습니다." @@ -35988,6 +36009,11 @@ msgstr "읽지 않은 메시지 배지 사용자 지정" msgid "Unread badges" msgstr "읽지 않은 메시지 배지" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "읽지 않은 채널" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "음성 채널 정원 초과" msgid "Voice channel join behavior" msgstr "음성 채널 참여 방식" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "음성 채널" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "이메일을 변경하려면 현재 이메일에 액세스해야 합니다. 가능한 경우 전화 인증을 사용하거나 고객지원팀에 문의하세요." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "이 채널에 파일을 첨부하려면 \"{attachFilesPermissionLabel}\" 권한이 필요합니다" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "이 채널에 링크를 임베드하려면 \"{embedLinksPermissionLabel}\" 권한이 필요합니다" diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index 5d6bcf16f..2465a684d 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nauja} few {# naujos} many {# naujos} other {# naujų}} nuo {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# neperskaityta žinutė} few {# neperskaitytos žinutės} many {# neperskaitytos žinutės} other {# neperskaitytų žinučių}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 valanda" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 paminėjimas" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanalas" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanalas „{id}“" @@ -15755,7 +15755,7 @@ msgstr "Draugiškas botas" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Eiti į pradžią" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Eiti į žinutę" @@ -16612,11 +16612,6 @@ msgstr "Grupės kvietimai" msgid "Group message" msgstr "Grupės žinutė" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Grupės žinutės" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensilvanija" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Žmonės" @@ -25430,6 +25423,11 @@ msgstr "Paskutinės 7 dienos" msgid "Previous attachment" msgstr "Ankstesnis priedas" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Ankstesni kanalai" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Prasukimo peržiūra" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Ieškoti…" msgid "Searching" msgstr "Ieškoma" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Visų vartotojų paieška" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Ieškoma bendruomenių" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Ieškoma" msgid "Searching for people..." msgstr "Ieškoma žmonių..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Ieškoma draugų ir narių iš {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Ieškoma tekstinių kanalų" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Ieškoma balsinių kanalų" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Kenksmingų programų ar pavojingų nuorodų siuntimas" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Šioje bendruomenėje žinučių siuntimas išjungtas" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Lėtasis režimas" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Lėtasis režimas · palaukite {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Pradėti iš naujo" msgid "Start recording" msgstr "Pradėti įrašymą" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Pradėkite paiešką nuo <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}, kad susiaurintumėte rezultatus." @@ -32963,10 +32986,8 @@ msgstr "Teksto kanalas" msgid "Text channel names" msgstr "Teksto kanalų pavadinimai" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Tekstiniai kanalai" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Šis narys nebėra prisijungęs prie balso pokalbio." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Šią žinutę galima persiųsti tik į amžiaus apribojimų turinčius kanalus" @@ -35988,6 +36009,11 @@ msgstr "Neskaitytų žinučių ženklelių tinkinimas" msgid "Unread badges" msgstr "Neskaitytų žinučių ženkleliai" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Neperskaityti kanalai" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Balso kanalas pilnas" msgid "Voice channel join behavior" msgstr "Prisijungimo prie balso kanalo veiksena" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Balso kanalai" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Kad galėtumėte pakeisti el. pašto adresą, turite turėti prieigą prie dabartinio. Jei įmanoma, naudokite telefono patvirtinimą arba susisiekite su palaikymo komanda." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Norėdami pridėti failus šiame kanale, turite turėti leidimą „{attachFilesPermissionLabel}“" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Norėdami įterpti nuorodas šiame kanale, turite turėti leidimą „{embedLinksPermissionLabel}“" diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 3f4a1982d..ac9c2af58 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nieuw} other {# nieuw}} sinds {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# ongelezen} other {# ongelezen}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 uur" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 vermelding" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanaal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanaal {id}" @@ -15755,7 +15755,7 @@ msgstr "Vriendelijke bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ga naar startpagina" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Ga naar bericht" @@ -16612,11 +16612,6 @@ msgstr "Groepsuitnodigingen" msgid "Group message" msgstr "Groepsbericht" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Groepsberichten" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Mensen" @@ -25430,6 +25423,11 @@ msgstr "Afgelopen 7 dagen" msgid "Previous attachment" msgstr "Vorige bijlage" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Eerdere kanalen" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Voorbeeld bij spoelen" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Zoeken…" msgid "Searching" msgstr "Zoeken" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Gebruikers zoeken" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Communities zoeken" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Zoeken" msgid "Searching for people..." msgstr "Personen zoeken..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Vrienden en leden zoeken in {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Tekstkanalen zoeken" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Kanalen zoeken" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Malware of gevaarlijke links versturen" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Berichten versturen is uitgeschakeld in deze community" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Slowmodus" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Slowmodus · wacht {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Opnieuw beginnen" msgid "Start recording" msgstr "Opname starten" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Begin zoekopdrachten met <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} om de resultaten te verfijnen." @@ -32963,10 +32986,8 @@ msgstr "Tekstkanaal" msgid "Text channel names" msgstr "Namen van tekstkanalen" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Tekstkanalen" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Dit lid is niet meer verbonden met een spraakkanaal." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Dit bericht kan alleen worden doorgestuurd naar kanalen met leeftijdsbeperking" @@ -35988,6 +36009,11 @@ msgstr "Aanpassing van ongelezen badges" msgid "Unread badges" msgstr "Ongelezen-badges" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Ongelezen kanalen" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Spraakkanaal vol" msgid "Voice channel join behavior" msgstr "Gedrag bij deelnemen aan spraakkanaal" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Spraakkanalen" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Je hebt toegang nodig tot je huidige e-mailadres om het hier te wijzigen. Gebruik telefoonverificatie indien beschikbaar of neem contact op met de ondersteuning." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Je hebt de machtiging \"{attachFilesPermissionLabel}\" nodig om bestanden in dit kanaal bij te voegen" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Je hebt de machtiging \"{embedLinksPermissionLabel}\" nodig om links in dit kanaal in te sluiten" diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index 23ba76ef4..2a2131904 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# ny} other {# nye}} siden {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# ulest} other {# uleste}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 time" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 omtale" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanal {id}" @@ -15755,7 +15755,7 @@ msgstr "Vennlig bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Gå til startsiden" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Gå til melding" @@ -16612,11 +16612,6 @@ msgstr "Gruppeinvitasjoner" msgid "Group message" msgstr "Gruppemelding" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Gruppemeldinger" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personer" @@ -25430,6 +25423,11 @@ msgstr "Siste 7 dager" msgid "Previous attachment" msgstr "Forrige vedlegg" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Tidligere kanaler" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Forhåndsvisning ved spoling" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Søk …" msgid "Searching" msgstr "Søker" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Søker etter alle brukere" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Søker i lokalsamfunn" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Søker" msgid "Searching for people..." msgstr "Søker etter personer …" +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Søker etter venner og medlemmer av {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Søker i tekstkanaler" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Søker i stemmekanaler" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Sender skadelig programvare eller farlige lenker" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Sending av meldinger er deaktivert i dette fellesskapet" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Sakte modus" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Sakte modus · vent {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Start på nytt" msgid "Start recording" msgstr "Start opptak" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Start søk med <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} for å begrense resultatene." @@ -32963,10 +32986,8 @@ msgstr "Tekstkanal" msgid "Text channel names" msgstr "Tekstkanalnavn" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Tekstkanaler" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Dette medlemmet er ikke lenger koblet til tale." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Denne meldingen kan bare videresendes til kanaler med aldersbegrensning" @@ -35988,6 +36009,11 @@ msgstr "Tilpasning av merker for uleste" msgid "Unread badges" msgstr "Merker for uleste" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Ulest kanaler" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Talekanalen er full" msgid "Voice channel join behavior" msgstr "Atferd ved deltakelse i talekanal" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Talekanaler" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Du må ha tilgang til den nåværende e-postadressen din for å endre den herfra. Bruk bekreftelse via telefon hvis det er tilgjengelig, eller kontakt kundestøtte." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Du trenger tillatelsen «{attachFilesPermissionLabel}» for å legge ved filer i denne kanalen" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Du trenger tillatelsen «{embedLinksPermissionLabel}» for å bygge inn lenker i denne kanalen" diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index e999f1c2f..68190bdaa 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nowa} few {# nowe} many {# nowych} other {# nowej}} od {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# nieprzeczytana wiadomość} few {# nieprzeczytane wiadomości} many {# nieprzeczytanych wiadomości} other {# nieprzeczytanej wiadomości}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 godzina" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 wzmianka" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanał" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanał {id}" @@ -15755,7 +15755,7 @@ msgstr "Przyjazny bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Przejdź do strony głównej" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Przejdź do wiadomości" @@ -16612,11 +16612,6 @@ msgstr "Zaproszenia do grupy" msgid "Group message" msgstr "Wiadomość grupowa" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Wiadomości grupowe" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensylwania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Osoby" @@ -25430,6 +25423,11 @@ msgstr "Poprzednie 7 dni" msgid "Previous attachment" msgstr "Poprzedni załącznik" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Poprzednie kanały" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Podgląd podczas przewijania" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Szukaj…" msgid "Searching" msgstr "Wyszukiwanie" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Wyszukiwanie wszystkich użytkowników" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Szukanie społeczności" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Wyszukiwanie" msgid "Searching for people..." msgstr "Wyszukiwanie osób..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Szukanie znajomych i członków {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Wyszukiwanie kanałów tekstowych" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Wyszukiwanie kanałów głosowych" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Wysyłanie złośliwego oprogramowania lub niebezpiecznych linków" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Wysyłanie wiadomości jest wyłączone w tej społeczności" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Tryb wolny" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Tryb wolny · czekaj {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Zacznij od nowa" msgid "Start recording" msgstr "Rozpocznij nagrywanie" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Zacznij wyszukiwanie od <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}, aby zawęzić wyniki." @@ -32963,10 +32986,8 @@ msgstr "Kanał tekstowy" msgid "Text channel names" msgstr "Nazwy kanałów tekstowych" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Kanały tekstowe" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Ten użytkownik nie jest już połączony z czatem głosowym." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Tę wiadomość można przesłać dalej tylko do kanałów z ograniczeniami wiekowymi" @@ -35988,6 +36009,11 @@ msgstr "Dostosowanie znaczników nieprzeczytanych wiadomości" msgid "Unread badges" msgstr "Znaczniki nieprzeczytanych wiadomości" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Nieprzeczytane kanały" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Kanał głosowy pełny" msgid "Voice channel join behavior" msgstr "Zachowanie podczas dołączania do kanału głosowego" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Kanały głosowe" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Aby zmienić adres e-mail, musisz mieć dostęp do obecnego. Jeśli to możliwe, użyj weryfikacji telefonicznej lub skontaktuj się z pomocą." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Potrzebujesz uprawnienia „{attachFilesPermissionLabel}”, aby załączać pliki na tym kanale" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Potrzebujesz uprawnienia „{embedLinksPermissionLabel}”, aby osadzać linki w tym kanale" diff --git a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po index 6ebaf5e8b..2f38ea0dc 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nova} many {# novas} other {# novas}} desde {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# não lida} many {# não lidas} other {# não lidas}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 hora" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 menção" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Canal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Canal {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot amigável" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ir para a página inicial" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Ir para a mensagem" @@ -16612,11 +16612,6 @@ msgstr "Convites para o grupo" msgid "Group message" msgstr "Mensagem de grupo" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Mensagens de grupo" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensilvânia" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Pessoas" @@ -25430,6 +25423,11 @@ msgstr "Últimos 7 dias" msgid "Previous attachment" msgstr "Anexo anterior" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Canais anteriores" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Prévia ao percorrer o vídeo" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Pesquisar…" msgid "Searching" msgstr "Pesquisando" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Buscando todos os usuários" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Buscando comunidades" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Pesquisando" msgid "Searching for people..." msgstr "Procurando pessoas..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Procurando amigos e membros de {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Buscando canais de texto" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Buscando canais de voz" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Enviando malware ou links perigosos" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "O envio de mensagens está desativado nesta comunidade" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Modo lento" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Modo lento · aguarde {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Começar de novo" msgid "Start recording" msgstr "Iniciar gravação" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Comece as pesquisas com <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} para refinar os resultados." @@ -32963,10 +32986,8 @@ msgstr "Canal de texto" msgid "Text channel names" msgstr "Nomes dos canais de texto" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Canais de texto" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Este membro não está mais conectado ao chat de voz." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Esta mensagem só pode ser encaminhada para canais com restrição de idade" @@ -35988,6 +36009,11 @@ msgstr "Personalização do selo de mensagens não lidas" msgid "Unread badges" msgstr "Contadores de não lidas" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Canais não lidos" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Canal de voz cheio" msgid "Voice channel join behavior" msgstr "Comportamento ao entrar no canal de voz" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Canais de voz" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Você precisa ter acesso ao seu e-mail atual para alterá-lo por aqui. Use a verificação por telefone, se disponível, ou entre em contato com o suporte." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Você precisa da permissão \"{attachFilesPermissionLabel}\" para anexar arquivos neste canal" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Você precisa da permissão \"{embedLinksPermissionLabel}\" para incorporar links neste canal" diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index a0d72befc..a76e9482b 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# mesaj nou} few {# mesaje noi} other {# de mesaje noi}} de la {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# mesaj necitit} few {# mesaje necitite} other {# de mesaje necitite}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 oră" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 mențiune" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Canal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Canal {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot prietenos" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Mergi la pagina principală" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Mergi la mesaj" @@ -16612,11 +16612,6 @@ msgstr "Invitații de grup" msgid "Group message" msgstr "Mesaj de grup" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Mesaje de grup" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Persoane" @@ -25430,6 +25423,11 @@ msgstr "Ultimele 7 zile" msgid "Previous attachment" msgstr "Atașamentul anterior" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Canale anterioare" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Previzualizare la glisare" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Căutare…" msgid "Searching" msgstr "Se caută" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Căutare în toți utilizatorii" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Căutare comunități" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Se caută" msgid "Searching for people..." msgstr "Se caută persoane..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Căutare prieteni și membri din {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Căutare canale text" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Căutare canale vocale" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Trimiterea de malware sau linkuri periculoase" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Trimiterea mesajelor este dezactivată în această comunitate" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Mod lent" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Mod lent · așteaptă {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Ia-o de la capăt" msgid "Start recording" msgstr "Începe înregistrarea" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Începe căutările cu <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} pentru a restrânge rezultatele." @@ -32963,10 +32986,8 @@ msgstr "Canal text" msgid "Text channel names" msgstr "Numele canalelor text" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Canale text" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Acest membru nu mai este conectat la canalul vocal." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Acest mesaj poate fi trimis doar către canale cu restricție de vârstă" @@ -35988,6 +36009,11 @@ msgstr "Personalizarea insignelor pentru mesajele necitite" msgid "Unread badges" msgstr "Insigne de mesaje necitite" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Canale necitite" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Canal vocal plin" msgid "Voice channel join behavior" msgstr "Comportamentul la intrarea în canalul vocal" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Canale vocale" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Ai nevoie de acces la adresa de e-mail actuală pentru a o schimba de aici. Folosește verificarea prin telefon, dacă este disponibilă, sau contactează asistența." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Ai nevoie de permisiunea „{attachFilesPermissionLabel}” pentru a atașa fișiere pe acest canal" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Ai nevoie de permisiunea „{embedLinksPermissionLabel}” pentru a încorpora linkuri în acest canal" diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index 9ffd9df6d..f1aee8481 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# новое} few {# новых} many {# новых} other {# нового}} с {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# непрочитанное} few {# непрочитанных} many {# непрочитанных} other {# непрочитанного}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 час" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 упоминание" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Канал" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Канал {id}" @@ -15755,7 +15755,7 @@ msgstr "Дружелюбный бот" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "На главную" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Перейти к сообщению" @@ -16612,11 +16612,6 @@ msgstr "Приглашения в группу" msgid "Group message" msgstr "Групповой чат" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Групповые чаты" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Пенсильвания" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Люди" @@ -25430,6 +25423,11 @@ msgstr "За последние 7 дней" msgid "Previous attachment" msgstr "Предыдущее вложение" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Предыдущие каналы" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Предпросмотр при перемотке" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Поиск…" msgid "Searching" msgstr "Идет поиск" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Поиск всех пользователей" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Поиск сообществ" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Идет поиск" msgid "Searching for people..." msgstr "Поиск людей..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Поиск друзей и участников {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Поиск текстовых каналов" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Поиск голосовых каналов" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Отправка вредоносных программ или опасных ссылок" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Отправка сообщений в этом сообществе отключена" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Медленный режим" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Медленный режим · ждать {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Начать сначала" msgid "Start recording" msgstr "Начать запись" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Начните поиск с <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}, чтобы сузить область поиска." @@ -32963,10 +32986,8 @@ msgstr "Текстовый канал" msgid "Text channel names" msgstr "Названия текстовых каналов" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Текстовые каналы" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Этот участник больше не подключен к голосовому каналу." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Это сообщение можно переслать только в каналы с возрастным ограничением" @@ -35988,6 +36009,11 @@ msgstr "Настройка значков непрочитанных" msgid "Unread badges" msgstr "Значки непрочитанных" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Непрочитанные каналы" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Голосовой канал заполнен" msgid "Voice channel join behavior" msgstr "Как присоединяться к голосовым каналам" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Голосовые каналы" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Чтобы изменить почту, вам нужен доступ к текущему адресу. Используйте подтверждение по телефону, если доступно, или обратитесь в поддержку." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Чтобы прикреплять файлы в этом канале, вам нужно разрешение «{attachFilesPermissionLabel}»" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Чтобы встраивать ссылки в этом канале, вам нужно разрешение «{embedLinksPermissionLabel}»" diff --git a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po index 0022dbdab..7c46a3007 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# nytt} other {# nya}} sedan {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# oläst} other {# olästa}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 timme" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 omnämnande" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanal {id}" @@ -15755,7 +15755,7 @@ msgstr "Vänlig bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Gå till startsidan" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Gå till meddelande" @@ -16612,11 +16612,6 @@ msgstr "Gruppinbjudningar" msgid "Group message" msgstr "Gruppmeddelande" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Gruppmeddelanden" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Personer" @@ -25430,6 +25423,11 @@ msgstr "Senaste 7 dagarna" msgid "Previous attachment" msgstr "Föregående bilaga" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Tidigare kanaler" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Förhandsvisning vid spolning" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Sök…" msgid "Searching" msgstr "Söker" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Söker bland alla användare" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Söker i communities" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Söker" msgid "Searching for people..." msgstr "Söker personer..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Söker bland vänner och medlemmar i {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Söker i textkanaler" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Söker i röstkanaler" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Skickar skadlig programvara eller farliga länkar" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Det går inte att skicka meddelanden i den här communityn" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Långsamt läge" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Långsamt läge · vänta {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Börja om" msgid "Start recording" msgstr "Starta inspelning" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Börja sökningar med <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} för att begränsa resultaten." @@ -32963,10 +32986,8 @@ msgstr "Textkanal" msgid "Text channel names" msgstr "Textkanalnamn" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Textkanaler" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Den här medlemmen är inte längre ansluten till röstkanalen." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Det här meddelandet kan bara skickas till kanaler med åldersgräns" @@ -35988,6 +36009,11 @@ msgstr "Anpassning av märken för olästa meddelanden" msgid "Unread badges" msgstr "Märken för olästa meddelanden" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Olästa kanaler" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Röstkanalen är full" msgid "Voice channel join behavior" msgstr "Beteende vid anslutning till röstkanal" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Röstkanaler" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Du behöver åtkomst till din nuvarande e-postadress för att ändra den härifrån. Använd telefonverifiering om det finns tillgängligt eller kontakta supporten." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Du behöver behörigheten \"{attachFilesPermissionLabel}\" för att bifoga filer i den här kanalen" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Du behöver behörigheten \"{embedLinksPermissionLabel}\" för att kunna bädda in länkar i den här kanalen" diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index d6728c9c5..602eff2f1 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, other {ใหม่ # ข้อความ}} ตั้งแต่ {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {ยังไม่ได้อ่าน # ข้อความ}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 ชั่วโมง" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 การกล่าวถึง" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "ช่อง" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "ช่อง {id}" @@ -15755,7 +15755,7 @@ msgstr "บอทเป็นกันเอง" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "กลับหน้าหลัก" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "ไปที่ข้อความ" @@ -16612,11 +16612,6 @@ msgstr "คำเชิญกลุ่ม" msgid "Group message" msgstr "ข้อความกลุ่ม" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "ข้อความกลุ่ม" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "เพนซิลเวเนีย" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "ผู้คน" @@ -25430,6 +25423,11 @@ msgstr "7 วันที่ผ่านมา" msgid "Previous attachment" msgstr "ไฟล์แนบก่อนหน้า" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "ช่องทางล่าสุด" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "ตัวอย่างขณะเลื่อนวิดีโอ" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "ค้นหา…" msgid "Searching" msgstr "กำลังค้นหา" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "กำลังค้นหาผู้ใช้ทั้งหมด" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "กำลังค้นหาชุมชน" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "กำลังค้นหา" msgid "Searching for people..." msgstr "กำลังค้นหาผู้คน..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "ค้นหาเพื่อนและสมาชิกของ {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "กำลังค้นหาช่องข้อความ" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "กำลังค้นหาช่องเสียง" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "ส่งมัลแวร์หรือลิงก์อันตราย" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "การส่งข้อความในคอมมูนิตี้นี้ถูกปิดอยู่" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "โหมดจำกัดเวลา" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "โหมดจำกัดเวลา · รอ {remaining}" @@ -31723,7 +31746,7 @@ msgstr "เริ่มใหม่" msgid "Start recording" msgstr "เริ่มบันทึก" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "เริ่มค้นหาด้วย <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} เพื่อจำกัดผลลัพธ์ให้แคบลง" @@ -32963,10 +32986,8 @@ msgstr "ช่องข้อความ" msgid "Text channel names" msgstr "ชื่อช่องข้อความ" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "ช่องข้อความ" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "สมาชิกรายนี้ไม่ได้อยู่ในช่องเสียงแล้ว" #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "ข้อความนี้สามารถส่งต่อไปยังช่องที่มีการจำกัดอายุเท่านั้น" @@ -35988,6 +36009,11 @@ msgstr "การปรับแต่งป้ายข้อความที msgid "Unread badges" msgstr "ป้ายข้อความที่ยังไม่ได้อ่าน" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "ช่องที่ยังไม่ได้อ่าน" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "ช่องเสียงเต็ม" msgid "Voice channel join behavior" msgstr "ลักษณะการเข้าร่วมช่องเสียง" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "ช่องเสียง" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "คุณต้องเข้าถึงอีเมลปัจจุบันได้จึงจะเปลี่ยนอีเมลจากตรงนี้ได้ ให้ใช้การยืนยันด้วยเบอร์โทรศัพท์หากมี หรือติดต่อฝ่ายสนับสนุน" #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "คุณต้องมีสิทธิ์ \"{attachFilesPermissionLabel}\" เพื่อแนบไฟล์ในช่องนี้" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "คุณต้องมีสิทธิ์ \"{embedLinksPermissionLabel}\" เพื่อฝังลิงก์ในช่องนี้" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index 5f2c9c6d0..4da99b4c2 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{shortTime} itibarıyla {unreadCount, plural, one {# yeni mesaj} other {# yeni mesaj}}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# okunmamış} other {# okunmamış}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 saat" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 bahsetme" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kanal" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kanal {id}" @@ -15755,7 +15755,7 @@ msgstr "Arkadaş canlısı bot" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Ana sayfaya git" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Mesaja git" @@ -16612,11 +16612,6 @@ msgstr "Grup davetleri" msgid "Group message" msgstr "Grup mesajı" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Grup mesajları" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pensilvanya" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Kişiler" @@ -25430,6 +25423,11 @@ msgstr "Son 7 gün" msgid "Previous attachment" msgstr "Önceki ek" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Önceki kanallar" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Sarma önizlemesi" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Ara…" msgid "Searching" msgstr "Aranıyor" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Tüm kullanıcılar aranıyor" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Topluluklar aranıyor" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Aranıyor" msgid "Searching for people..." msgstr "Kişiler aranıyor..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "{communityName} topluluğundaki arkadaşları ve üyeleri ara" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Metin kanalları aranıyor" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Sesli kanallarda aranıyor" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Kötü amaçlı yazılım veya tehlikeli bağlantılar gönderme" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Bu toplulukta mesaj gönderme devre dışı bırakıldı" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Yavaş mod" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Yavaş mod · {remaining} bekleyin" @@ -31723,7 +31746,7 @@ msgstr "Baştan başla" msgid "Start recording" msgstr "Kaydı başlat" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Aramalara <0>{peoplePrefix}, <1>{textChannelPrefix}, <2>{voiceChannelPrefix} ve <3>{communityPrefix} ile başlayarak sonuçları daraltın." @@ -32963,10 +32986,8 @@ msgstr "Metin kanalı" msgid "Text channel names" msgstr "Metin kanalı adları" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Metin kanalları" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Bu üye artık sesli sohbete bağlı değil." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Bu mesaj yalnızca yaş kısıtlaması olan kanallara iletilebilir" @@ -35988,6 +36009,11 @@ msgstr "Okunmamış rozet özelleştirmesi" msgid "Unread badges" msgstr "Okunmamış rozetleri" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Okunmayan kanallar" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Sesli kanal dolu" msgid "Voice channel join behavior" msgstr "Sesli kanala katılma davranışı" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Sesli kanallar" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "E-posta adresinizi buradan değiştirmek için mevcut e-postanıza erişmeniz gerekir. Mümkünse telefon doğrulamayı kullanın veya destekle iletişime geçin." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Bu kanala dosya eklemek için \"{attachFilesPermissionLabel}\" iznine sahip olmanız gerekir" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Bu kanalda bağlantı yerleştirmek için \"{embedLinksPermissionLabel}\" iznine sahip olmanız gerekir" diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index 0c6589acb..fa6ad5eb9 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, one {# нове} few {# нові} many {# нових} other {# нового}} з {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, one {# непрочитане} few {# непрочитані} many {# непрочитаних} other {# непрочитаного}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 година" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 згадка" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Канал" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Канал {id}" @@ -15755,7 +15755,7 @@ msgstr "Дружній бот" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "На головну" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Перейти до повідомлення" @@ -16612,11 +16612,6 @@ msgstr "Запрошення в групу" msgid "Group message" msgstr "Групове повідомлення" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Групові повідомлення" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Пенсільванія" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Люди" @@ -25430,6 +25423,11 @@ msgstr "За останні 7 днів" msgid "Previous attachment" msgstr "Попереднє вкладення" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Попередні канали" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Перегляд під час перемотування" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Пошук…" msgid "Searching" msgstr "Пошук" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Пошук усіх користувачів" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Пошук спільнот" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Пошук" msgid "Searching for people..." msgstr "Пошук людей..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Пошук друзів і учасників {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Пошук текстових каналів" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Пошук голосових каналів" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Надсилання шкідливих програм або небезпечних посилань" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Надсилання повідомлень у цій спільноті вимкнено" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Повільний режим" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Повільний режим · зачекайте {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Почати спочатку" msgid "Start recording" msgstr "Почати запис" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Почніть пошук з <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix}, щоб звузити результати." @@ -32963,10 +32986,8 @@ msgstr "Текстовий канал" msgid "Text channel names" msgstr "Назви текстових каналів" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Текстові канали" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Цей учасник більше не підключений до голосового чату." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Це повідомлення можна пересилати лише на канали з обмеженим доступом за віком" @@ -35988,6 +36009,11 @@ msgstr "Налаштування значків непрочитаних" msgid "Unread badges" msgstr "Значки непрочитаних" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Непрочитані канали" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Голосовий канал заповнено" msgid "Voice channel join behavior" msgstr "Поведінка під час приєднання до голосового каналу" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Голосові канали" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Щоб змінити електронну пошту тут, вам потрібен доступ до поточної. Скористайтеся підтвердженням за телефоном, якщо доступно, або зверніться до служби підтримки." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Щоб прикріплювати файли в цьому каналі, вам потрібен дозвіл «{attachFilesPermissionLabel}»" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Вам потрібен дозвіл «{embedLinksPermissionLabel}», щоб вбудовувати посилання в цьому каналі" diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index d65894809..e8e37924b 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{unreadCount, plural, other {# tin nhắn mới}} từ {shortTime}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {# tin chưa đọc}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 giờ" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 lượt nhắc đến" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "Kênh" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "Kênh {id}" @@ -15755,7 +15755,7 @@ msgstr "Bot thân thiện" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "Về trang chủ" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "Đi đến tin nhắn" @@ -16612,11 +16612,6 @@ msgstr "Lời mời nhóm" msgid "Group message" msgstr "Tin nhắn nhóm" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "Tin nhắn nhóm" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "Pennsylvania" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "Mọi người" @@ -25430,6 +25423,11 @@ msgstr "7 ngày qua" msgid "Previous attachment" msgstr "Tệp đính kèm trước" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "Kênh trước đó" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "Xem trước khi tua" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "Tìm kiếm…" msgid "Searching" msgstr "Đang tìm kiếm" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "Tìm kiếm tất cả người dùng" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "Tìm kiếm cộng đồng" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "Đang tìm kiếm" msgid "Searching for people..." msgstr "Đang tìm người..." +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "Tìm kiếm bạn bè và thành viên của {communityName}" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "Tìm kiếm kênh văn bản" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "Đang tìm kênh thoại" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "Gửi phần mềm độc hại hoặc liên kết nguy hiểm" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "Đã tắt tính năng gửi tin nhắn trong cộng đồng này" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "Chế độ chậm" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "Chế độ chậm · chờ {remaining}" @@ -31723,7 +31746,7 @@ msgstr "Bắt đầu lại" msgid "Start recording" msgstr "Bắt đầu ghi âm" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "Bắt đầu tìm kiếm bằng <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} để thu hẹp kết quả." @@ -32963,10 +32986,8 @@ msgstr "Kênh văn bản" msgid "Text channel names" msgstr "Tên kênh văn bản" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "Kênh văn bản" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "Thành viên này không còn kết nối với kênh thoại nữa." #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "Tin nhắn này chỉ có thể được chuyển tiếp đến các kênh có giới hạn độ tuổi" @@ -35988,6 +36009,11 @@ msgstr "Tùy chỉnh huy hiệu chưa đọc" msgid "Unread badges" msgstr "Huy hiệu chưa đọc" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "Kênh chưa đọc" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "Kênh thoại đã đầy" msgid "Voice channel join behavior" msgstr "Hành vi khi tham gia kênh thoại" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "Kênh thoại" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "Bạn cần truy cập email hiện tại để thay đổi email từ đây. Hãy dùng xác minh qua điện thoại (nếu có) hoặc liên hệ bộ phận hỗ trợ." #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "Bạn cần quyền \"{attachFilesPermissionLabel}\" để đính kèm tệp trong kênh này" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "Bạn cần quyền \"{embedLinksPermissionLabel}\" để nhúng liên kết vào kênh này" diff --git a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po index b657dd705..ba06d41ec 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "{shortTime} 以来有 {unreadCount, plural, other {# 条新消息}}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {# 条未读}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 小时" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 条提及" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "频道" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "频道 {id}" @@ -15755,7 +15755,7 @@ msgstr "友好机器人" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "前往首页" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "前往消息" @@ -16612,11 +16612,6 @@ msgstr "群邀请" msgid "Group message" msgstr "群聊" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "群聊" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "宾夕法尼亚州" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "用户" @@ -25430,6 +25423,11 @@ msgstr "过去 7 天" msgid "Previous attachment" msgstr "上一个附件" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "最近使用的频道" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "拖动预览" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "搜索…" msgid "Searching" msgstr "正在搜索" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "搜索所有用户" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "搜索社群" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "正在搜索" msgid "Searching for people..." msgstr "正在搜索用户…" +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "在 {communityName} 中搜索好友和成员" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "搜索文本频道" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "搜索语音频道" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "发送恶意软件或危险链接" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "此社区已禁用发送消息" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "慢速模式" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "慢速模式 · 等待 {remaining}" @@ -31723,7 +31746,7 @@ msgstr "重新开始" msgid "Start recording" msgstr "开始录音" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "搜索时以 <0>{peoplePrefix}、<1>{textChannelPrefix}、<2>{voiceChannelPrefix} 或 <3>{communityPrefix} 开头可缩小结果范围。" @@ -32963,10 +32986,8 @@ msgstr "文字频道" msgid "Text channel names" msgstr "文字频道名称" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "文字频道" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "该成员已不在语音频道中。" #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "此消息只能转发到已设年龄限制的频道" @@ -35988,6 +36009,11 @@ msgstr "未读角标自定义" msgid "Unread badges" msgstr "未读角标" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "未读频道" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "语音频道已满" msgid "Voice channel join behavior" msgstr "语音频道加入行为" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "语音频道" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "你需要能访问当前邮箱才能在此更改。如果可用,请使用手机验证,或联系支持团队。" #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "你需要“{attachFilesPermissionLabel}”权限才能在此频道中附加文件" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "你需要“{embedLinksPermissionLabel}”权限才能在此频道中嵌入链接" diff --git a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po index 3f583399b..e59cc1233 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -1977,7 +1977,7 @@ msgid "{unreadCount, plural, one {# new} other {# new}} since {shortTime}" msgstr "自 {shortTime} 起有 {unreadCount, plural, other {# 則新訊息}}" #. Badge text on a quick switcher row when the channel has unread messages. unreadCount is the integer count. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:69 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:70 msgid "{unreadCount, plural, one {# unread} other {# unread}}" msgstr "{unreadCount, plural, other {# 則未讀訊息}}" @@ -2144,7 +2144,7 @@ msgid "1 hour" msgstr "1 小時" #. Badge text on a quick switcher row when the channel has exactly one mention. -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:65 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:66 msgid "1 mention" msgstr "1 則提及" @@ -7053,7 +7053,7 @@ msgid "Channel" msgstr "頻道" #. Fallback name for an unnamed channel in the forward modal destination list. Preserve {id}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:87 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:78 msgid "Channel {id}" msgstr "頻道 {id}" @@ -15755,7 +15755,7 @@ msgstr "友善的機器人" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/channel/components/direct_message/DirectMessageList.tsx:555 #: src/features/connection/components/modals/EditConnectionModal.tsx:86 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:49 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:50 #: src/features/user/components/modals/tabs/my_profile_tab/TimezoneProfileSettings.tsx:63 #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:89 msgid "Friends" @@ -16404,7 +16404,7 @@ msgid "Go to home" msgstr "回首頁" #. Short label in the quick switcher state. Keep it concise. -#: src/features/search/state/QuickSwitcher.tsx:39 +#: src/features/search/state/QuickSwitcher.tsx:45 msgid "Go to message" msgstr "前往訊息" @@ -16612,11 +16612,6 @@ msgstr "群組邀請" msgid "Group message" msgstr "群組訊息" -#. Quick switcher section header for group DM results. -#: src/features/search/state/QuickSwitcherResultConverters.ts:26 -msgid "Group messages" -msgstr "群組訊息" - #. Field label for the group name input in the mobile edit group sheet. #. Short label in the edit group modal. Keep it concise. #: src/features/channel/components/modals/EditGroupBottomSheet.tsx:80 @@ -24556,12 +24551,10 @@ msgid "Pennsylvania" msgstr "賓夕法尼亞州" #. Community settings sidebar category grouping members, invites, and bans. -#. Quick switcher section header for user results. #. Quick switcher section header listing user candidates. #. Unicode emoji category label. #: src/features/expressions/utils/UnicodeEmojis.ts:22 -#: src/features/search/state/QuickSwitcherResultConverters.ts:22 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:53 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:54 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:261 msgid "People" msgstr "人物" @@ -25430,6 +25423,11 @@ msgstr "過去 7 天" msgid "Previous attachment" msgstr "上一個附件" +#. Quick switcher section header above the channels the user visited most recently. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:50 +msgid "Previous channels" +msgstr "最近使用的頻道" + #. Message-history-deletion option when banning a member. Deletes the member's messages from the last hour. #: src/features/moderation/constants/BanDeleteMessageOptions.ts:21 msgid "Previous hour" @@ -28645,7 +28643,7 @@ msgstr "拖曳預覽" #: src/features/channel/components/shared/PickerSearchInput.tsx:21 #: src/features/messaging/components/modals/ForwardModal.tsx:87 #: src/features/search/components/modals/SearchProviderPickerModal.tsx:43 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:45 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:46 #: src/features/theme_studio/ui/StudioSearchInput.tsx:16 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:38 msgid "Search" @@ -28921,6 +28919,16 @@ msgstr "搜尋…" msgid "Searching" msgstr "正在搜尋" +#. Quick switcher header shown while the query starts with @ outside a community, or with @@. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:70 +msgid "Searching all users" +msgstr "搜尋所有使用者" + +#. Quick switcher header shown while the query starts with * and only communities are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:66 +msgid "Searching communities" +msgstr "搜尋社群" + #. Loading state in the desktop quick switcher while fetching people results. Trailing ellipsis is intentional. #. Loading state shown while the quick switcher fetches matching people. Trailing ellipsis is intentional. #: src/features/search/components/bottomsheets/QuickSwitcherBottomSheet.tsx:44 @@ -28928,6 +28936,21 @@ msgstr "正在搜尋" msgid "Searching for people..." msgstr "正在搜尋使用者…" +#. Quick switcher header shown while the query starts with @ inside a community. communityName is the community name. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:74 +msgid "Searching friends and members of {communityName}" +msgstr "在「{communityName}」中搜尋朋友和成員" + +#. Quick switcher header shown while the query starts with # and only text channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:58 +msgid "Searching text channels" +msgstr "搜尋文字頻道" + +#. Quick switcher header shown while the query starts with ! and only voice channels are searched. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:62 +msgid "Searching voice channels" +msgstr "正在搜尋語音頻道" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:142 msgid "Second factor" @@ -29496,7 +29519,7 @@ msgid "Sending malware or dangerous links" msgstr "傳送惡意軟體或危險連結" #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:54 msgid "Sending messages is disabled in this community" msgstr "此社群已停用訊息傳送功能" @@ -30940,7 +30963,7 @@ msgid "Slowmode" msgstr "慢速模式" #. Short label under a destination row in the forward modal while slowmode blocks sending. Preserve {remaining}; it is inserted by code. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:82 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:73 msgid "Slowmode · wait {remaining}" msgstr "慢速模式 · 等待 {remaining}" @@ -31723,7 +31746,7 @@ msgstr "重新開始" msgid "Start recording" msgstr "開始錄音" -#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586 +#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:592 msgid "Start searches with <0>{peoplePrefix} <1>{textChannelPrefix} <2>{voiceChannelPrefix} <3>{communityPrefix} to narrow down results." msgstr "搜尋時以 <0>{peoplePrefix}、<1>{textChannelPrefix}、<2>{voiceChannelPrefix} 或 <3>{communityPrefix} 開頭,即可縮小結果範圍。" @@ -32963,10 +32986,8 @@ msgstr "文字頻道" msgid "Text channel names" msgstr "文字頻道名稱" -#. Quick switcher section header for text channel results. #. Quick switcher section header listing text channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:30 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:57 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:58 msgid "Text channels" msgstr "文字頻道" @@ -34057,7 +34078,7 @@ msgid "This member isn't connected to voice anymore." msgstr "此成員已不在語音連線中。" #. Forward dialog error shown when the forwarded message contains age-restricted media and the target channel is not age-restricted. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:77 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:68 msgid "This message can only be forwarded to age-restricted channels" msgstr "此訊息只能轉發至設有年齡限制的頻道" @@ -35988,6 +36009,11 @@ msgstr "未讀標記自訂功能" msgid "Unread badges" msgstr "未讀標記" +#. Quick switcher section header above the unread channels of the current community. +#: src/features/search/state/QuickSwitcherResultGenerators.ts:54 +msgid "Unread channels" +msgstr "未讀頻道" + #. Short label in the visual tab. Keep it concise. #: src/features/user/components/modals/tabs/accessibility_tab/VisualTab.tsx:29 msgid "Unread DMs only" @@ -37880,10 +37906,8 @@ msgstr "語音頻道已滿" msgid "Voice channel join behavior" msgstr "語音頻道加入行為" -#. Quick switcher section header for voice channel results. #. Quick switcher section header listing voice channel candidates. -#: src/features/search/state/QuickSwitcherResultConverters.ts:34 -#: src/features/search/utils/QuickSwitcherModalUtils.tsx:61 +#: src/features/search/utils/QuickSwitcherModalUtils.tsx:62 msgid "Voice channels" msgstr "語音頻道" @@ -39413,12 +39437,12 @@ msgid "You need access to your current email to change it from here. Use phone v msgstr "您需要存取目前的電子郵件,才能從這裡變更。如果可以,請使用電話驗證,或聯絡客服。" #. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:72 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:63 msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel" msgstr "您需要「{attachFilesPermissionLabel}」權限才能在此頻道中附加檔案" #. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel. -#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:67 +#: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:58 msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel" msgstr "您需要有「{embedLinksPermissionLabel}」權限才能在這個頻道中嵌入連結" diff --git a/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.module.css b/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.module.css deleted file mode 100644 index 77a6bec55..000000000 --- a/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.module.css +++ /dev/null @@ -1,52 +0,0 @@ -/* SPDX-License-Identifier: AGPL-3.0-or-later */ - -.frame { - --forward-icon-size: 2rem; - --forward-badge-size: 1.125rem; - --forward-badge-offset: -0.1875rem; - --forward-badge-gap: 0.125rem; - --forward-badge-center: calc(var(--forward-icon-size) - var(--forward-badge-size) / 2 - var(--forward-badge-offset)); - --forward-badge-cutout: calc(var(--forward-badge-size) / 2 + var(--forward-badge-gap)); - position: relative; - display: flex; - flex-shrink: 0; - width: var(--forward-icon-size); - height: var(--forward-icon-size); -} - -.cutout { - display: flex; - width: 100%; - height: 100%; - mask-image: radial-gradient( - circle at var(--forward-badge-center) var(--forward-badge-center), - transparent var(--forward-badge-cutout), - #000 calc(var(--forward-badge-cutout) + 0.03125rem) - ); -} - -.badge { - position: absolute; - right: var(--forward-badge-offset); - bottom: var(--forward-badge-offset); - display: flex; - align-items: center; - justify-content: center; - width: var(--forward-badge-size); - height: var(--forward-badge-size); - border-radius: 50%; - background-color: var(--background-tertiary); - color: var(--text-primary-muted); -} - -.badgeIcon { - width: 0.75rem; - height: 0.75rem; -} - -.fallbackIcon { - width: 2rem; - height: 2rem; - flex-shrink: 0; - color: var(--text-primary-muted); -} diff --git a/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.tsx b/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.tsx index 520f6c880..02e93fd41 100644 --- a/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.tsx +++ b/fluxer_app/src/features/messaging/components/modals/ForwardDestinationIcon.tsx @@ -2,79 +2,40 @@ import type {ForwardDestinationOption} from '@app/features/app/components/dialogs/shared/UseForwardDestinations'; import {GroupDMAvatar} from '@app/features/app/components/shared/GroupDMAvatar'; +import {ChannelBadgedIcon, ChannelOriginIcon} from '@app/features/channel/components/ChannelOriginIcon'; import type {Channel} from '@app/features/channel/models/Channel'; -import * as ChannelUtils from '@app/features/channel/utils/ChannelUtils'; -import {GuildIcon} from '@app/features/guild/components/popouts/GuildIcon'; -import Guilds from '@app/features/guild/state/Guilds'; -import styles from '@app/features/messaging/components/modals/ForwardDestinationIcon.module.css'; import {Avatar} from '@app/features/ui/components/Avatar'; import {StatusAwareAvatar} from '@app/features/ui/components/StatusAwareAvatar'; import Users from '@app/features/user/state/Users'; import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; import {observer} from 'mobx-react-lite'; -import type {ReactNode} from 'react'; const DESTINATION_ICON_SIZE = 32; -function BadgedIcon({badge, children}: {badge: ReactNode; children: ReactNode}) { - return ( -
-
- {children} -
-
- {badge} -
-
- ); -} - -function renderChannelBadge(channel: Channel) { - return ChannelUtils.getIcon(channel, {className: styles.badgeIcon, weight: 'bold'}); -} - -function renderFallbackIcon(channel: Channel) { - return ChannelUtils.getIcon(channel, {className: styles.fallbackIcon, weight: 'bold'}); -} - -function renderGuildChannelIcon(channel: Channel) { - const guild = channel.guildId == null ? undefined : Guilds.getGuild(channel.guildId); - if (guild == null) { - return renderFallbackIcon(channel); - } - return ( - - - - ); -} - function renderPersonalNotesIcon(channel: Channel) { const currentUser = Users.currentUser; if (currentUser == null) { - return renderFallbackIcon(channel); + return ( + + ); } return ( - - + ); } @@ -85,13 +46,11 @@ export const ForwardDestinationIcon = observer(function ForwardDestinationIcon({ }) { if (option.user != null) { return ( -
- -
+ ); } const channel = option.channel; @@ -99,17 +58,21 @@ export const ForwardDestinationIcon = observer(function ForwardDestinationIcon({ switch (channel.type) { case ChannelTypes.GROUP_DM: return ( -
- -
+ ); case ChannelTypes.DM_PERSONAL_NOTES: return renderPersonalNotesIcon(channel); default: - return renderGuildChannelIcon(channel); + return ( + + ); } }); diff --git a/fluxer_app/src/features/messaging/components/modals/ForwardModal.tsx b/fluxer_app/src/features/messaging/components/modals/ForwardModal.tsx index f21ef24cd..86c4fc18f 100644 --- a/fluxer_app/src/features/messaging/components/modals/ForwardModal.tsx +++ b/fluxer_app/src/features/messaging/components/modals/ForwardModal.tsx @@ -208,10 +208,10 @@ export const ForwardModal = observer( const { composerChannel, options, - searchQuery, + filterText, selected, selectedKeys, - setSearchQuery, + setFilterText, slowmodeActiveSelectedOptions, slowmodeEnabledSelectedOptions, toggleDestination, @@ -232,11 +232,11 @@ export const ForwardModal = observer( const isMobileLayout = MobileLayout.enabled; const shouldFocusSearch = !shouldDisableAutofocusOnMobile(); useEffect(() => { - if (searchQuery !== '' || shouldDisableAutofocusOnMobile()) { + if (filterText !== '' || shouldDisableAutofocusOnMobile()) { return; } searchInputRef.current?.focus(); - }, [searchQuery]); + }, [filterText]); const handleOptionalMessageExceedsLimit = useCallback(() => { showMessagingErrorModal({ title: i18n._(MESSAGE_IS_TOO_LONG_DESCRIPTOR), @@ -349,8 +349,8 @@ export const ForwardModal = observer( setSearchQuery(event.target.value)} + value={filterText} + onChange={(event) => setFilterText(event.target.value)} placeholder={i18n._(SEARCH_DESCRIPTOR)} aria-label={i18n._(SEARCH_DESCRIPTOR)} maxLength={100} diff --git a/fluxer_app/src/features/read_state/state/ReadStates.ts b/fluxer_app/src/features/read_state/state/ReadStates.ts index 4ff435136..b39c94dc5 100644 --- a/fluxer_app/src/features/read_state/state/ReadStates.ts +++ b/fluxer_app/src/features/read_state/state/ReadStates.ts @@ -136,6 +136,7 @@ class ReadStates { } private setMentionCount(state: ReadStateEntry, mentionCount: number): void { + if (mentionCount > state.mentionCount) this.mentionChannels.delete(state.channelId as ChannelId); state.mentionCount = mentionCount; this.refreshMentionChannel(state.channelId); } diff --git a/fluxer_app/src/features/search/commands/QuickSwitcherCommands.tsx b/fluxer_app/src/features/search/commands/QuickSwitcherCommands.tsx index 05ee08c83..43e971628 100644 --- a/fluxer_app/src/features/search/commands/QuickSwitcherCommands.tsx +++ b/fluxer_app/src/features/search/commands/QuickSwitcherCommands.tsx @@ -15,7 +15,7 @@ import {UserSettingsModal} from '@app/features/user/components/modals/UserSettin import {FAVORITES_GUILD_ID, ME} from '@fluxer/constants/src/AppConstants'; import {QuickSwitcherResultTypes} from '@fluxer/constants/src/QuickSwitcherConstants'; -const QUICK_SWITCHER_MODAL_KEY = 'nav_quick_switcher'; +const QUICK_SWITCHER_OVERLAY_ID = 'nav_quick_switcher'; export function hide(): void { QuickSwitcher.hide(); @@ -124,5 +124,5 @@ export async function switchTo(result: QuickSwitcherExecutableResult): Promise { return; } setIsKeyboardNavigating(true); + if (event.ctrlKey && !event.altKey && !event.metaKey && (event.key === 'n' || event.key === 'p')) { + event.preventDefault(); + event.stopPropagation(); + QuickSwitcherCommands.moveSelection(event.key === 'n' ? 'down' : 'up'); + return; + } switch (event.key) { case 'ArrowDown': case 'ArrowUp': diff --git a/fluxer_app/src/features/search/state/QuickSwitcher.tsx b/fluxer_app/src/features/search/state/QuickSwitcher.tsx index ebe613985..2af44d950 100644 --- a/fluxer_app/src/features/search/state/QuickSwitcher.tsx +++ b/fluxer_app/src/features/search/state/QuickSwitcher.tsx @@ -1,12 +1,11 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import Channels from '@app/features/channel/state/Channels'; import Guilds from '@app/features/guild/state/Guilds'; import {onLocaleChange} from '@app/features/i18n/utils/LocaleChangeListener'; import type {GuildMember} from '@app/features/member/models/GuildMember'; import GuildMembers from '@app/features/member/state/GuildMembers'; import MemberSearch, {type SearchContext, type TransformedMember} from '@app/features/member/state/MemberSearch'; -import SelectedChannel from '@app/features/navigation/state/SelectedChannel'; +import SelectedGuild from '@app/features/navigation/state/SelectedGuild'; import {parseChannelUrl} from '@app/features/navigation/utils/DeepLinkUtils'; import {Logger} from '@app/features/platform/utils/AppLogger'; import {loadLazyModule} from '@app/features/platform/utils/LazyModuleLoader'; @@ -16,6 +15,8 @@ import { generateDefaultResults, generateGeneralResults, generateQueryModeResults, + type QuickSwitcherModeVariant, + type QuickSwitcherSearchContext, resolveTransformedMember, } from '@app/features/search/state/QuickSwitcherResultGenerators'; import {hasSameResultIdentity, resolveRecomputedSelectedIndex} from '@app/features/search/state/QuickSwitcherSelection'; @@ -27,7 +28,12 @@ import type { QuickSwitcherQueryMode, QuickSwitcherResult, } from '@app/features/search/state/QuickSwitcherTypes'; -import {MEMBER_SEARCH_LIMIT, QUICK_SWITCHER_MODAL_KEY} from '@app/features/search/state/QuickSwitcherTypes'; +import {MEMBER_SEARCH_LIMIT, QUICK_SWITCHER_OVERLAY_ID} from '@app/features/search/state/QuickSwitcherTypes'; +import { + createForwardSearchCandidates, + type ForwardSearchCandidates, +} from '@app/features/search/utils/DestinationSearchSources'; +import {getLoadedUnicodeConfusables, loadUnicodeConfusables} from '@app/features/search/utils/SearchTextMatching'; import * as ModalCommands from '@app/features/ui/commands/ModalCommands'; import {modal} from '@app/features/ui/commands/ModalCommands'; import MobileLayout from '@app/features/ui/state/MobileLayout'; @@ -40,20 +46,48 @@ const GO_TO_MESSAGE_DESCRIPTOR = msg({ message: 'Go to message', comment: 'Short label in the quick switcher state. Keep it concise.', }); +const PREFIX_MODES: ReadonlyMap = new Map([ + ['@', QuickSwitcherResultTypes.USER], + ['#', QuickSwitcherResultTypes.TEXT_CHANNEL], + ['!', QuickSwitcherResultTypes.VOICE_CHANNEL], + ['*', QuickSwitcherResultTypes.GUILD], +]); +const ALL_USERS_PREFIX = '@@'; +const NO_CONFUSABLES: ReadonlyMap = new Map(); const QUICK_SWITCHER_I18N_MISSING_ERROR = 'QuickSwitcher i18n has not been set'; +interface ParsedPrefix { + readonly mode: QuickSwitcherQueryMode | null; + readonly search: string; + readonly variant: QuickSwitcherModeVariant; +} + +function parsePrefix(query: string): ParsedPrefix { + if (query.startsWith(ALL_USERS_PREFIX)) { + return { + mode: QuickSwitcherResultTypes.USER, + search: query.slice(ALL_USERS_PREFIX.length).trim(), + variant: 'all_users', + }; + } + const mode = PREFIX_MODES.get(query.charAt(0)) ?? null; + return {mode, search: (mode == null ? query : query.slice(1)).trim(), variant: null}; +} + type QuickSwitcherModalModule = typeof import('@app/features/search/components/quick_switcher/QuickSwitcherModal'); class QuickSwitcher { private logger = new Logger('QuickSwitcher'); private candidateSets: CandidateSets | null = null; + private searchSources: ForwardSearchCandidates | null = null; + private confusables: ReadonlyMap = getLoadedUnicodeConfusables() ?? NO_CONFUSABLES; private candidateWarmupCancel: (() => void) | null = null; private defaultResults: Array | null = null; private modalPreloadPromise: Promise | null = null; private modalPreloadCancel: (() => void) | null = null; isOpen = false; query = ''; - queryMode: QuickSwitcherQueryMode | null = null; + prefixMode: QuickSwitcherQueryMode | null = null; results: Array = []; selectedIndex = -1; private memberSearchContext: SearchContext | null = null; @@ -66,6 +100,8 @@ class QuickSwitcher { makeAutoObservable< this, | 'candidateSets' + | 'searchSources' + | 'confusables' | 'candidateWarmupCancel' | 'defaultResults' | 'logger' @@ -75,6 +111,8 @@ class QuickSwitcher { this, { candidateSets: false, + searchSources: false, + confusables: false, candidateWarmupCancel: false, defaultResults: false, logger: false, @@ -136,7 +174,7 @@ class QuickSwitcher { get isLoadingMemberResults(): boolean { return ( - this.queryMode === QuickSwitcherResultTypes.USER && + this.prefixMode === QuickSwitcherResultTypes.USER && this.query['slice'](1).trim().length > 0 && (this.memberFetchDebounceTimer !== null || this.isFetchingMembersInBackground) ); @@ -164,7 +202,7 @@ class QuickSwitcher { this.defaultResults = null; this.isOpen = true; this.query = ''; - this.queryMode = null; + this.prefixMode = null; if (!MobileLayout.isMobileLayout()) { void this.pushModal(); } @@ -181,6 +219,18 @@ class QuickSwitcher { this.selectedIndex = -1; } this.scheduleCandidateWarmup(); + this.ensureConfusables(); + } + + private ensureConfusables(): void { + if (this.confusables !== NO_CONFUSABLES) return; + loadUnicodeConfusables().then( + (loaded) => { + this.confusables = loaded; + this.recomputeIfOpen({invalidateCandidates: false}); + }, + (error: unknown) => this.logger.warn('Failed to load Unicode confusables', error), + ); } private loadModal(): Promise { @@ -210,7 +260,7 @@ class QuickSwitcher { const {QuickSwitcherModal} = modalModule; ModalCommands.pushWithKey( modal(() => ), - QUICK_SWITCHER_MODAL_KEY, + QUICK_SWITCHER_OVERLAY_ID, ); } @@ -221,9 +271,10 @@ class QuickSwitcher { this.cancelCandidateWarmup(); this.isOpen = false; this.candidateSets = null; + this.searchSources = null; this.defaultResults = null; this.query = ''; - this.queryMode = null; + this.prefixMode = null; this.results = []; this.selectedIndex = -1; if (this.memberSearchContext) { @@ -237,13 +288,14 @@ class QuickSwitcher { this.isFetchingMembersInBackground = false; this.memberSearchResults = []; if (!MobileLayout.isMobileLayout()) { - ModalCommands.popWithKey(QUICK_SWITCHER_MODAL_KEY); + ModalCommands.popWithKey(QUICK_SWITCHER_OVERLAY_ID); } } private invalidateCandidateSets(): void { this.cancelCandidateWarmup(); this.candidateSets = null; + this.searchSources = null; if (this.isOpen) { this.scheduleCandidateWarmup(); } @@ -255,6 +307,12 @@ class QuickSwitcher { return this.candidateSets; } + private getSearchContext(i18n: I18n): QuickSwitcherSearchContext { + const sets = this.getCandidateSets(i18n); + this.searchSources ??= createForwardSearchCandidates(i18n).get(); + return {confusables: this.confusables, sets, sources: this.searchSources}; + } + private scheduleCandidateWarmup(): void { if (this.candidateSets || this.candidateWarmupCancel) { return; @@ -294,16 +352,16 @@ class QuickSwitcher { return; } this.defaultResults = null; - const {queryMode, results, selectedIndex} = this.computeResultsForQuery(query); + const {prefixMode, results, selectedIndex} = this.computeResultsForQuery(query); this.query = query; - this.queryMode = queryMode; + this.prefixMode = prefixMode; this.results = results; this.selectedIndex = selectedIndex; - this.triggerMemberSearchIfNeeded(query, queryMode); + this.triggerMemberSearchIfNeeded(query, prefixMode); } - private triggerMemberSearchIfNeeded(query: string, queryMode: QuickSwitcherQueryMode | null): void { - if (queryMode !== QuickSwitcherResultTypes.USER) { + private triggerMemberSearchIfNeeded(query: string, prefixMode: QuickSwitcherQueryMode | null): void { + if (prefixMode !== QuickSwitcherResultTypes.USER || query.startsWith(ALL_USERS_PREFIX)) { if (this.memberSearchContext) { this.memberSearchContext.destroy(); this.memberSearchContext = null; @@ -336,7 +394,7 @@ class QuickSwitcher { .filter((member): member is GuildMember => member !== null); runInAction(() => { this.memberSearchResults = guildMemberRecords; - if (this.isOpen && this.queryMode === QuickSwitcherResultTypes.USER) { + if (this.isOpen && this.prefixMode === QuickSwitcherResultTypes.USER) { this.recomputeIfOpen({invalidateCandidates: false}); } }); @@ -346,13 +404,9 @@ class QuickSwitcher { if (this.memberFetchDebounceTimer) { clearTimeout(this.memberFetchDebounceTimer); } - const currentChannelId = SelectedChannel.currentChannelId; - const currentChannel = currentChannelId ? Channels.getChannel(currentChannelId) : null; - const guildId = currentChannel?.guildId ?? null; - const allGuilds = Guilds.getGuilds(); - const guildsToFetch = allGuilds - .filter((guild) => !GuildMembers.isGuildFullyLoaded(guild.id)) - .map((guild) => guild.id); + const selectedGuildId = SelectedGuild.selectedGuildId; + const guildId = selectedGuildId != null && Guilds.getGuild(selectedGuildId) != null ? selectedGuildId : null; + const guildsToFetch = guildId != null && !GuildMembers.isGuildFullyLoaded(guildId) ? [guildId] : []; if (guildsToFetch.length === 0) { this.memberFetchDebounceTimer = null; this.isFetchingMembersInBackground = false; @@ -396,11 +450,11 @@ class QuickSwitcher { this.invalidateCandidateSets(); } const previous = this.results[this.selectedIndex]; - const {queryMode, results, selectedIndex} = this.computeResultsForQuery(this.query); - if (!options.force && this.queryMode === queryMode && hasSameResultIdentity(this.results, results)) { + const {prefixMode, results, selectedIndex} = this.computeResultsForQuery(this.query); + if (!options.force && this.prefixMode === prefixMode && hasSameResultIdentity(this.results, results)) { return; } - this.queryMode = queryMode; + this.prefixMode = prefixMode; this.results = results; this.selectedIndex = resolveRecomputedSelectedIndex(previous, results, selectedIndex); } @@ -415,6 +469,7 @@ class QuickSwitcher { private computeResultsForQuery(query: string): ComputeResultsForQueryResult { const i18n = this.getI18n(); const channelPath = parseChannelUrl(query); + const linkResults: Array = []; if (channelPath) { const linkResult: LinkResult = { type: QuickSwitcherResultTypes.LINK, @@ -423,54 +478,30 @@ class QuickSwitcher { subtitle: query, path: channelPath, }; - return { - queryMode: null, - results: [linkResult], - selectedIndex: 0, - }; + linkResults.push(linkResult); } - if (query['trim']().length === 0) { - const defaultResults = this.getDefaultResults(i18n); - return { - queryMode: null, - results: defaultResults, - selectedIndex: getFirstSelectableIndex(defaultResults), - }; - } - const queryMode = this.getQueryMode(query); - const rawSearch = queryMode ? query['slice'](1) : query; - const trimmedSearch = rawSearch.trim(); + const {mode, search, variant} = parsePrefix(query); let results: Array; - if (queryMode) { - const sets = this.getCandidateSets(i18n); - results = generateQueryModeResults(queryMode, trimmedSearch, sets, i18n, this.memberSearchResults); - } else if (trimmedSearch.length === 0) { + if (mode != null) { + results = generateQueryModeResults( + mode, + variant, + search, + this.getSearchContext(i18n), + i18n, + this.memberSearchResults, + ); + } else if (search.length === 0) { results = this.getDefaultResults(i18n); } else { - const sets = this.getCandidateSets(i18n); - results = generateGeneralResults(trimmedSearch, sets, i18n); + results = [...linkResults, ...generateGeneralResults(search, this.getSearchContext(i18n), i18n)]; } return { - queryMode, + prefixMode: mode, results, selectedIndex: getFirstSelectableIndex(results), }; } - - private getQueryMode(query: string): QuickSwitcherQueryMode | null { - switch (query.charAt(0)) { - case '@': - return QuickSwitcherResultTypes.USER; - case '#': - return QuickSwitcherResultTypes.TEXT_CHANNEL; - case '!': - return QuickSwitcherResultTypes.VOICE_CHANNEL; - case '*': - return QuickSwitcherResultTypes.GUILD; - default: - return null; - } - } } export default new QuickSwitcher(); diff --git a/fluxer_app/src/features/search/state/QuickSwitcherResultConverters.ts b/fluxer_app/src/features/search/state/QuickSwitcherResultConverters.ts index 0b14226ce..b80d121b9 100644 --- a/fluxer_app/src/features/search/state/QuickSwitcherResultConverters.ts +++ b/fluxer_app/src/features/search/state/QuickSwitcherResultConverters.ts @@ -1,49 +1,15 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {Channel} from '@app/features/channel/models/Channel'; -import { - COMMUNITIES_DESCRIPTOR, - FAVORITES_DESCRIPTOR, - SETTINGS_DESCRIPTOR, -} from '@app/features/i18n/utils/CommonMessageDescriptors'; +import {FAVORITES_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors'; import type { Candidate, - CandidateSets, HeaderResult, QuickSwitcherExecutableResult, QuickSwitcherResult, } from '@app/features/search/state/QuickSwitcherTypes'; import {FAVORITES_GUILD_ID} from '@fluxer/constants/src/AppConstants'; -import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; import {QuickSwitcherResultTypes} from '@fluxer/constants/src/QuickSwitcherConstants'; import type {I18n} from '@lingui/core'; -import {msg} from '@lingui/core/macro'; - -const PEOPLE_DESCRIPTOR = msg({ - message: 'People', - comment: 'Quick switcher section header for user results.', -}); -const GROUP_MESSAGES_DESCRIPTOR = msg({ - message: 'Group messages', - comment: 'Quick switcher section header for group DM results.', -}); -const TEXT_CHANNELS_DESCRIPTOR = msg({ - message: 'Text channels', - comment: 'Quick switcher section header for text channel results.', -}); -const VOICE_CHANNELS_DESCRIPTOR = msg({ - message: 'Voice channels', - comment: 'Quick switcher section header for voice channel results.', -}); - -export type HeaderTitleType = - | typeof QuickSwitcherResultTypes.USER - | typeof QuickSwitcherResultTypes.GROUP_DM - | typeof QuickSwitcherResultTypes.TEXT_CHANNEL - | typeof QuickSwitcherResultTypes.VOICE_CHANNEL - | typeof QuickSwitcherResultTypes.GUILD - | typeof QuickSwitcherResultTypes.VIRTUAL_GUILD - | typeof QuickSwitcherResultTypes.SETTINGS; function assertNever(value: never): never { throw new Error(`Unexpected quick switcher type: ${String(value)}`); @@ -127,61 +93,6 @@ function getCandidateSubtitle(subtitle: string | undefined, i18n: I18n, viewCont return subtitle; } -export function getHeaderTitle(type: HeaderTitleType, i18n: I18n): string { - switch (type) { - case QuickSwitcherResultTypes.USER: - return i18n._(PEOPLE_DESCRIPTOR); - case QuickSwitcherResultTypes.GROUP_DM: - return i18n._(GROUP_MESSAGES_DESCRIPTOR); - case QuickSwitcherResultTypes.TEXT_CHANNEL: - return i18n._(TEXT_CHANNELS_DESCRIPTOR); - case QuickSwitcherResultTypes.VOICE_CHANNEL: - return i18n._(VOICE_CHANNELS_DESCRIPTOR); - case QuickSwitcherResultTypes.GUILD: - case QuickSwitcherResultTypes.VIRTUAL_GUILD: - return i18n._(COMMUNITIES_DESCRIPTOR); - case QuickSwitcherResultTypes.SETTINGS: - return i18n._(SETTINGS_DESCRIPTOR); - default: - return assertNever(type); - } -} - -export function createResultFromChannel( - channel: Channel, - sets: CandidateSets, - i18n: I18n, - viewContext?: string, -): QuickSwitcherExecutableResult | null { - switch (channel.type) { - case ChannelTypes.DM: - case ChannelTypes.DM_PERSONAL_NOTES: { - const candidate = sets.userByChannelId.get(channel.id); - return candidate ? candidateToResult(candidate, i18n, viewContext) : null; - } - case ChannelTypes.GROUP_DM: { - const candidate = sets.groupDMByChannelId.get(channel.id); - return candidate ? candidateToResult(candidate, i18n, viewContext) : null; - } - case ChannelTypes.GUILD_TEXT: { - const candidate = sets.channelById.get(channel.id); - if (candidate && candidate.type === QuickSwitcherResultTypes.TEXT_CHANNEL) { - return candidateToResult(candidate, i18n, viewContext); - } - return null; - } - case ChannelTypes.GUILD_VOICE: { - const candidate = sets.channelById.get(channel.id); - if (candidate && candidate.type === QuickSwitcherResultTypes.VOICE_CHANNEL) { - return candidateToResult(candidate, i18n, viewContext); - } - return null; - } - default: - return null; - } -} - export function getFirstSelectableIndex(results: ReadonlyArray): number { for (let i = 0; i < results.length; i += 1) { if (results[i].type !== QuickSwitcherResultTypes.HEADER) { diff --git a/fluxer_app/src/features/search/state/QuickSwitcherResultGenerators.ts b/fluxer_app/src/features/search/state/QuickSwitcherResultGenerators.ts index d2ee2dce1..c7fc063c5 100644 --- a/fluxer_app/src/features/search/state/QuickSwitcherResultGenerators.ts +++ b/fluxer_app/src/features/search/state/QuickSwitcherResultGenerators.ts @@ -1,20 +1,31 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import { + compareSearchResults, + type ForwardChannelCandidate, + type ForwardSearchResult, + type ForwardUserCandidate, + searchChannels, + searchGroupDMs, + searchGuilds, + searchUsers, +} from '@app/features/app/components/dialogs/shared/ForwardDestinationSearch'; import type {Channel} from '@app/features/channel/models/Channel'; import Channels from '@app/features/channel/state/Channels'; +import {compareChannels} from '@app/features/channel/utils/ChannelUtils'; import Guilds from '@app/features/guild/state/Guilds'; +import {MENTIONS_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors'; import type {GuildMember} from '@app/features/member/models/GuildMember'; import GuildMembers from '@app/features/member/state/GuildMembers'; +import Messages from '@app/features/messaging/state/MessagingMessages'; import Navigation from '@app/features/navigation/state/Navigation'; import SelectedChannel from '@app/features/navigation/state/SelectedChannel'; +import SelectedGuild from '@app/features/navigation/state/SelectedGuild'; +import Permission from '@app/features/permissions/state/Permission'; import ReadStates from '@app/features/read_state/state/ReadStates'; +import Relationships from '@app/features/relationship/state/Relationships'; import {buildChannelCandidate} from '@app/features/search/state/QuickSwitcherCandidateBuilder'; -import { - candidateToResult, - createHeaderResult, - getHeaderTitle, - type HeaderTitleType, -} from '@app/features/search/state/QuickSwitcherResultConverters'; +import {candidateToResult, createHeaderResult} from '@app/features/search/state/QuickSwitcherResultConverters'; import type { Candidate, CandidateSets, @@ -23,235 +34,467 @@ import type { QuickSwitcherResult, UserCandidate, } from '@app/features/search/state/QuickSwitcherTypes'; -import { - MAX_GENERAL_RESULTS, - MAX_QUERY_MODE_RESULTS, - MAX_RECENT_RESULTS, - MAX_UNREAD_RESULTS, -} from '@app/features/search/state/QuickSwitcherTypes'; +import type {ForwardSearchCandidates} from '@app/features/search/utils/DestinationSearchSources'; +import {createSearchTerm, scoreSearchTerm} from '@app/features/search/utils/SearchTextMatching'; +import UserGuildSettings from '@app/features/user/state/UserGuildSettings'; import Users from '@app/features/user/state/Users'; import * as NicknameUtils from '@app/features/user/utils/NicknameUtils'; +import {ME} from '@fluxer/constants/src/AppConstants'; +import {ChannelTypes, Permissions} from '@fluxer/constants/src/ChannelConstants'; +import {MessageNotifications} from '@fluxer/constants/src/NotificationConstants'; import {QuickSwitcherResultTypes} from '@fluxer/constants/src/QuickSwitcherConstants'; -import * as SnowflakeUtils from '@fluxer/snowflake/src/SnowflakeUtils'; +import {RelationshipTypes} from '@fluxer/constants/src/UserConstants'; import type {I18n} from '@lingui/core'; -import {matchSorter, rankings} from 'match-sorter'; +import {msg} from '@lingui/core/macro'; -function getChannelRecency(channel: {id: string; lastMessageId: string | null}): number { - if (channel.lastMessageId) { - return SnowflakeUtils.extractTimestamp(channel.lastMessageId); - } - return SnowflakeUtils.extractTimestamp(channel.id); +const PREVIOUS_CHANNELS_DESCRIPTOR = msg({ + message: 'Previous channels', + comment: 'Quick switcher section header above the channels the user visited most recently.', +}); +const UNREAD_CHANNELS_DESCRIPTOR = msg({ + message: 'Unread channels', + comment: 'Quick switcher section header above the unread channels of the current community.', +}); +const SEARCHING_TEXT_CHANNELS_DESCRIPTOR = msg({ + message: 'Searching text channels', + comment: 'Quick switcher header shown while the query starts with # and only text channels are searched.', +}); +const SEARCHING_VOICE_CHANNELS_DESCRIPTOR = msg({ + message: 'Searching voice channels', + comment: 'Quick switcher header shown while the query starts with ! and only voice channels are searched.', +}); +const SEARCHING_COMMUNITIES_DESCRIPTOR = msg({ + message: 'Searching communities', + comment: 'Quick switcher header shown while the query starts with * and only communities are searched.', +}); +const SEARCHING_ALL_USERS_DESCRIPTOR = msg({ + message: 'Searching all users', + comment: 'Quick switcher header shown while the query starts with @ outside a community, or with @@.', +}); +const SEARCHING_USERS_IN_COMMUNITY_DESCRIPTOR = msg({ + message: 'Searching friends and members of {communityName}', + comment: + 'Quick switcher header shown while the query starts with @ inside a community. communityName is the community name.', +}); + +const HISTORY_LIMIT = 8; +const PREVIOUS_CHANNELS_WITH_SECTIONS = 3; +const PREVIOUS_CHANNELS_ALONE = 7; +const HISTORY_HIDDEN_FROM_SECTIONS = 3; +const CATEGORY_LIMIT = 5; +const MODE_LIMIT = 100; +const RECENT_AUTHOR_LIMIT = 100; +const SCORE_SCALE = 1000; +const LISTING_TEXT_SCORE = 7; +const LISTING_VOICE_IN_TEXT_SCORE = 6; +const LISTING_FRECENCY_BONUS = 3; + +export type QuickSwitcherModeVariant = 'all_users' | null; + +interface RankedCandidate { + readonly candidate: Candidate; + readonly matchedText: string; + readonly score: number; } -function getExcludedChannelIds(): Set { - const excluded = new Set(); - const currentChannelId = Navigation.channelId ?? SelectedChannel.currentChannelId; - if (!currentChannelId) return excluded; - excluded.add(currentChannelId); - const currentChannel = Channels.getChannel(currentChannelId); - if (currentChannel?.parentId) { - excluded.add(currentChannel.parentId); - } - return excluded; +interface SearchContext { + readonly confusables: ReadonlyMap; + readonly sets: CandidateSets; + readonly sources: ForwardSearchCandidates; } -function matchCandidates(candidates: Array, search: string, limit: number): Array { - if (candidates.length === 0) { - return []; - } - if (search.length === 0) { - return sortCandidatesByWeight(candidates).slice(0, limit); - } - const results = matchSorter(candidates, search, { - keys: [ - 'title', - {minRanking: rankings.CONTAINS, key: 'subtitle'}, - {minRanking: rankings.CONTAINS, key: (item) => item.searchValues}, - ], - }); - return results.slice(0, limit); +function getCurrentChannelId(): string | null { + return Navigation.channelId ?? SelectedChannel.currentChannelId ?? null; } -function sortCandidatesByWeight(candidates: Array): Array { - return [...candidates].sort((a, b) => { - if (b.sortWeight !== a.sortWeight) { - return b.sortWeight - a.sortWeight; - } - return a.title.localeCompare(b.title); - }); +function getCurrentGuildId(): string | null { + const guildId = SelectedGuild.selectedGuildId; + if (guildId == null || guildId === ME || Guilds.getGuild(guildId) == null) return null; + return guildId; } -function createDefaultResultFromChannel( - channel: Channel, - i18n: I18n, - viewContext?: string, -): QuickSwitcherExecutableResult | null { +function isChannelVisible(channel: Channel): boolean { + if (channel.guildId == null) return true; + return Permission.can(Permissions.VIEW_CHANNEL, channel); +} + +function channelResult(channel: Channel, i18n: I18n): QuickSwitcherExecutableResult | null { const candidate = buildChannelCandidate(channel, i18n); - return candidate ? candidateToResult(candidate, i18n, viewContext) : null; + return candidate == null ? null : candidateToResult(candidate, i18n); +} + +function collectChannelResults( + channelIds: ReadonlyArray, + i18n: I18n, + seen: Set, +): Array { + const results: Array = []; + for (const channelId of channelIds) { + if (seen.has(channelId)) continue; + const channel = Channels.getChannel(channelId); + if (channel == null || !isChannelVisible(channel)) continue; + const result = channelResult(channel, i18n); + if (result == null) continue; + seen.add(channelId); + results.push(result); + } + return results; +} + +function isUnreadInCurrentCommunity(channel: Channel): boolean { + if (channel.type !== ChannelTypes.GUILD_TEXT || !isChannelVisible(channel)) return false; + if (UserGuildSettings.isMutedAtAnyLevel(channel.guildId ?? null, channel.id)) return false; + if (!ReadStates.hasUnread(channel.id)) return false; + const unreadLevel = UserGuildSettings.resolvedGuildUnreadBadgesLevel({ + id: channel.id, + guildId: channel.guildId ?? undefined, + parentId: channel.parentId ?? undefined, + type: channel.type, + }); + return unreadLevel === MessageNotifications.ALL_MESSAGES; } export function generateDefaultResults(i18n: I18n): Array { - const recentVisits = SelectedChannel.recentChannelVisits; - const excludedIds = getExcludedChannelIds(); - const recentEntries: Array<{ - channelId: string; - result: QuickSwitcherExecutableResult; - }> = []; - for (const visit of recentVisits) { - if (excludedIds.has(visit.channelId)) continue; - const channel = Channels.getChannel(visit.channelId); - if (!channel) continue; - const result = createDefaultResultFromChannel(channel, i18n, visit.guildId); - if (result) { - recentEntries.push({channelId: visit.channelId, result}); + const currentChannelId = getCurrentChannelId(); + const history = [...new Set(SelectedChannel.sortedRecentVisits.map((visit) => visit.channelId))] + .filter((channelId) => channelId !== currentChannelId) + .slice(0, HISTORY_LIMIT - 1); + const previous = collectChannelResults(history, i18n, new Set()); + const seen = new Set(previous.slice(0, HISTORY_HIDDEN_FROM_SECTIONS).map((result) => resultChannelId(result))); + if (currentChannelId != null) seen.add(currentChannelId); + const sections: Array = []; + const mentions = collectChannelResults([...ReadStates.mentionChannelIds].reverse(), i18n, seen); + if (mentions.length > 0) { + sections.push(createHeaderResult('section-mentions', i18n._(MENTIONS_DESCRIPTOR)), ...mentions); + } + const guildId = getCurrentGuildId(); + if (guildId != null) { + const unreadIds = [...Channels.getGuildChannels(guildId)] + .filter(isUnreadInCurrentCommunity) + .sort(compareChannels) + .map((channel) => channel.id); + const unread = collectChannelResults(unreadIds, i18n, seen); + if (unread.length > 0) { + sections.push(createHeaderResult('section-unread', i18n._(UNREAD_CHANNELS_DESCRIPTOR)), ...unread); } } - const recentSlicedEntries = recentEntries.slice(0, MAX_RECENT_RESULTS); - const recentSliced = recentSlicedEntries.map(({result}) => result); - const recentChannelIds = new Set(recentSlicedEntries.map(({channelId}) => channelId)); - const unreadResults = generateUnreadResults(i18n, recentChannelIds); - return [...recentSliced, ...unreadResults]; + const previousCap = sections.length > 0 ? PREVIOUS_CHANNELS_WITH_SECTIONS : PREVIOUS_CHANNELS_ALONE; + const shownPrevious = previous.slice(0, previousCap); + if (shownPrevious.length === 0) return sections; + return [createHeaderResult('section-previous', i18n._(PREVIOUS_CHANNELS_DESCRIPTOR)), ...shownPrevious, ...sections]; } -function generateUnreadResults( +function resultChannelId(result: QuickSwitcherExecutableResult): string { + if (result.type === QuickSwitcherResultTypes.USER) return result.dmChannelId ?? result.id; + return result.id; +} + +function getModeHeader( + prefixMode: QuickSwitcherQueryMode, + variant: QuickSwitcherModeVariant, i18n: I18n, - additionalExcludedChannelIds: ReadonlySet, -): Array { - const excludedIds = getExcludedChannelIds(); - const unreadChannels = ReadStates.getChannelIds() - .filter((channelId) => { - if (excludedIds.has(channelId) || additionalExcludedChannelIds.has(channelId)) { - return false; - } - return ReadStates.isUnreadOrMentioned(channelId); - }) - .map((channelId) => Channels.getChannel(channelId)) - .filter((channel): channel is Channel => channel != null) - .sort((a, b) => getChannelRecency(b) - getChannelRecency(a)) - .slice(0, MAX_UNREAD_RESULTS); - const results: Array = []; - for (const channel of unreadChannels) { - const result = createDefaultResultFromChannel(channel, i18n); - if (result) { - results.push(result); +): QuickSwitcherResult { + switch (prefixMode) { + case QuickSwitcherResultTypes.USER: { + const guild = variant === 'all_users' ? null : getCurrentGuildId(); + const title = + guild == null + ? i18n._(SEARCHING_ALL_USERS_DESCRIPTOR) + : i18n._(SEARCHING_USERS_IN_COMMUNITY_DESCRIPTOR, {communityName: Guilds.getGuild(guild)?.name ?? ''}); + return createHeaderResult(`query-${prefixMode}`, title); } + case QuickSwitcherResultTypes.TEXT_CHANNEL: + return createHeaderResult(`query-${prefixMode}`, i18n._(SEARCHING_TEXT_CHANNELS_DESCRIPTOR)); + case QuickSwitcherResultTypes.VOICE_CHANNEL: + return createHeaderResult(`query-${prefixMode}`, i18n._(SEARCHING_VOICE_CHANNELS_DESCRIPTOR)); + default: + return createHeaderResult(`query-${prefixMode}`, i18n._(SEARCHING_COMMUNITIES_DESCRIPTOR)); } - return results; +} + +function buildUserCandidate(userId: string, sets: CandidateSets): UserCandidate | null { + const existing = sets.users.find((candidate) => candidate.id === userId); + if (existing != null) return existing; + const user = Users.getUser(userId); + if (user == null) return null; + const title = NicknameUtils.getNickname(user, null); + const subtitle = NicknameUtils.formatUserTagForStreamerMode(user); + return { + type: QuickSwitcherResultTypes.USER, + id: user.id, + title, + subtitle, + user, + dmChannelId: null, + searchValues: [title, subtitle], + sortWeight: 0, + }; +} + +function resolveSearchCandidate(result: ForwardSearchResult, sets: CandidateSets): Candidate | null { + switch (result.type) { + case 'user': + return buildUserCandidate(result.id, sets); + case 'group_dm': + return sets.groupDMByChannelId.get(result.id) ?? sets.userByChannelId.get(result.id) ?? null; + default: + return sets.channelById.get(result.id) ?? null; + } +} + +function toRanked(results: ReadonlyArray, sets: CandidateSets): Array { + const ranked: Array = []; + for (const result of results) { + const candidate = resolveSearchCandidate(result, sets); + if (candidate != null) ranked.push({candidate, matchedText: result.matchedText, score: result.score}); + } + return ranked; +} + +function compareRanked(left: RankedCandidate, right: RankedCandidate): number { + return compareSearchResults( + {matchedText: left.matchedText, id: left.candidate.id, score: left.score, type: rankedType(left)}, + {matchedText: right.matchedText, id: right.candidate.id, score: right.score, type: rankedType(right)}, + ); +} + +function rankedType(ranked: RankedCandidate): ForwardSearchResult['type'] { + return ranked.candidate.type === QuickSwitcherResultTypes.USER ? 'user' : 'text_channel'; +} + +function rankedToResult(ranked: RankedCandidate, i18n: I18n): QuickSwitcherExecutableResult { + const result = candidateToResult(ranked.candidate, i18n); + if (result.type !== QuickSwitcherResultTypes.USER) return result; + const {user} = result; + const tag = NicknameUtils.formatUserTagForStreamerMode(user); + const matched = ranked.matchedText; + if (matched === '' || matched === user.username || matched === user.id || matched === tag) return result; + return {...result, title: NicknameUtils.formatNicknameForStreamerMode(matched)}; +} + +function currentUserBlacklist(): ReadonlySet { + const currentUserId = Users.currentUserId; + return new Set(currentUserId == null ? [] : [currentUserId]); +} + +function mergeMemberSearchUsers( + users: ReadonlyArray, + memberSearchResults: ReadonlyArray, +): ReadonlyArray { + if (memberSearchResults.length === 0) return users; + const known = new Set(users.map((user) => user.id)); + const extra: Array = []; + for (const member of memberSearchResults) { + if (known.has(member.user.id)) continue; + known.add(member.user.id); + extra.push({ + friendAlias: null, + globalName: member.user.globalName, + id: member.user.id, + nicknames: member.nick == null ? [] : [member.nick], + username: member.user.username, + }); + } + return [...users, ...extra]; +} + +function filterUsersToCommunity( + users: ReadonlyArray, + guildId: string, +): ReadonlyArray { + return users.filter((user) => { + if (Relationships.getRelationship(user.id)?.type === RelationshipTypes.FRIEND) return true; + return GuildMembers.getMember(guildId, user.id) != null; + }); +} + +function scoreNavigationCandidates(query: string, candidates: ReadonlyArray, limit: number) { + const term = createSearchTerm(query.toLocaleLowerCase()); + const ranked: Array = []; + for (const candidate of candidates) { + const score = scoreSearchTerm(candidate.title.toLocaleLowerCase(), term); + if (score > 0) ranked.push({candidate, matchedText: candidate.title, score: SCORE_SCALE * score}); + } + return ranked.sort((left, right) => right.score - left.score).slice(0, limit); +} + +function searchGuildCandidates( + query: string, + context: SearchContext, + limit: number, + excludedIds: ReadonlySet, +): Array { + const guildById = new Map(context.sets.guilds.map((candidate) => [candidate.id, candidate])); + const ranked: Array = []; + for (const result of searchGuilds( + query, + context.sources.guilds, + context.sources.weights.guilds, + excludedIds, + limit, + true, + )) { + const candidate = guildById.get(result.id); + if (candidate != null) ranked.push({candidate, matchedText: result.matchedText, score: result.score}); + } + return ranked; +} + +function currentGuildBlacklist(): ReadonlySet { + const guildId = getCurrentGuildId(); + return new Set(guildId == null ? [] : [guildId]); +} + +export function generateGeneralResults(search: string, context: SearchContext, i18n: I18n): Array { + const {confusables, sets, sources} = context; + const runCategories = (limit: number): Array> => [ + toRanked( + searchUsers(search, sources.users, sources.weights.users, currentUserBlacklist(), confusables, limit), + sets, + ), + toRanked(searchGroupDMs(search, sources.groupDMs, sources.weights.groupDMs, confusables, limit), sets), + toRanked(searchChannels(search, sources.channels, 'text', sources.weights.textChannel, limit, true), sets), + searchGuildCandidates(search, context, limit, currentGuildBlacklist()), + scoreNavigationCandidates(search, sets.virtualGuilds, limit), + scoreNavigationCandidates(search, sets.settings, limit), + ]; + let categories = runCategories(CATEGORY_LIMIT); + if (categories.filter((category) => category.length > 0).length === 1) { + const index = categories.findIndex((category) => category.length > 0); + categories = categories.map((category, categoryIndex) => + categoryIndex === index ? runCategories(MODE_LIMIT)[index] : category, + ); + } + const seen = new Set(); + return categories + .flat() + .filter((ranked) => { + const key = `${ranked.candidate.type}|${ranked.candidate.id}`; + if (seen.has(key)) return false; + seen.add(key); + return true; + }) + .sort(compareRanked) + .map((ranked) => rankedToResult(ranked, i18n)); +} + +function listRecentAuthors(sets: CandidateSets): Array { + const channelId = getCurrentChannelId(); + if (channelId == null) return []; + const channel = Channels.getChannel(channelId); + const currentUserId = Users.currentUserId; + const authors: Array = []; + const seen = new Set(); + Messages.getCachedMessages(channelId)?.searchFromNewest((message) => { + const author = message.author; + if (author.id === currentUserId || author.bot || seen.has(author.id)) return false; + if (channel?.guildId != null && GuildMembers.getMember(channel.guildId, author.id) == null) return false; + seen.add(author.id); + const candidate = buildUserCandidate(author.id, sets); + if (candidate != null) authors.push(candidate); + return authors.length >= RECENT_AUTHOR_LIMIT; + }); + return authors; +} + +function listChannels(kind: 'text' | 'voice', context: SearchContext): Array { + const guildId = getCurrentGuildId(); + const guildOrder = new Map(Guilds.getGuilds().map((guild, index) => [guild.id, index])); + const pool: Array = context.sources.channels.filter((channel) => { + if (!channel.canAccess) return false; + if (kind === 'voice' && channel.kind !== 'voice') return false; + if (kind === 'text' && channel.kind === 'voice' && guildId != null) return false; + if (guildId == null) return true; + return Channels.getChannel(channel.id)?.guildId === guildId; + }); + const scoreOf = (channel: ForwardChannelCandidate): number => { + const base = kind === 'text' && channel.kind === 'voice' ? LISTING_VOICE_IN_TEXT_SCORE : LISTING_TEXT_SCORE; + return channel.hasFrecency ? Math.min(base + LISTING_FRECENCY_BONUS, base >= 7 ? 10 : 7) : base; + }; + const channelOf = (id: string): Channel | undefined => Channels.getChannel(id); + return pool + .map((channel) => ({channel, model: channelOf(channel.id), score: scoreOf(channel)})) + .filter((entry): entry is {channel: ForwardChannelCandidate; model: Channel; score: number} => entry.model != null) + .sort((left, right) => { + if (left.score !== right.score) return right.score - left.score; + const leftGuild = guildOrder.get(left.model.guildId ?? '') ?? 0; + const rightGuild = guildOrder.get(right.model.guildId ?? '') ?? 0; + if (leftGuild !== rightGuild) return leftGuild - rightGuild; + return compareChannels(left.model, right.model); + }) + .slice(0, MODE_LIMIT) + .map((entry) => context.sets.channelById.get(entry.channel.id)) + .filter((candidate): candidate is NonNullable => candidate != null); +} + +function searchModeUsers( + search: string, + variant: QuickSwitcherModeVariant, + context: SearchContext, + memberSearchResults: ReadonlyArray, +): Array { + const guildId = variant === 'all_users' ? null : getCurrentGuildId(); + let users = mergeMemberSearchUsers(context.sources.users, memberSearchResults); + if (guildId != null) users = filterUsersToCommunity(users, guildId); + return toRanked( + searchUsers(search, users, context.sources.weights.users, currentUserBlacklist(), context.confusables, MODE_LIMIT), + context.sets, + ); } export function generateQueryModeResults( - queryMode: QuickSwitcherQueryMode, + prefixMode: QuickSwitcherQueryMode, + variant: QuickSwitcherModeVariant, search: string, - sets: CandidateSets, + context: SearchContext, i18n: I18n, - memberSearchResults: Array, + memberSearchResults: ReadonlyArray, ): Array { - let candidates: Array; - switch (queryMode) { + const header = getModeHeader(prefixMode, variant, i18n); + const {sets, sources} = context; + if (search.length === 0) { + let listed: Array; + switch (prefixMode) { + case QuickSwitcherResultTypes.USER: + listed = listRecentAuthors(sets); + break; + case QuickSwitcherResultTypes.TEXT_CHANNEL: + listed = listChannels('text', context); + break; + case QuickSwitcherResultTypes.VOICE_CHANNEL: + listed = listChannels('voice', context); + break; + default: + listed = [...sets.guilds, ...sets.virtualGuilds]; + break; + } + return [header, ...listed.map((candidate) => candidateToResult(candidate, i18n))]; + } + let ranked: Array; + switch (prefixMode) { case QuickSwitcherResultTypes.USER: - candidates = buildUserCandidatesWithMemberSearch(sets.users, memberSearchResults); + ranked = searchModeUsers(search, variant, context, memberSearchResults); break; case QuickSwitcherResultTypes.TEXT_CHANNEL: - candidates = sets.textChannels; + ranked = toRanked( + searchChannels(search, sources.channels, 'text', sources.weights.textChannel, MODE_LIMIT, true), + sets, + ); break; case QuickSwitcherResultTypes.VOICE_CHANNEL: - candidates = sets.voiceChannels; - break; - case QuickSwitcherResultTypes.GUILD: - candidates = [...sets.guilds, ...sets.virtualGuilds]; - break; - case QuickSwitcherResultTypes.VIRTUAL_GUILD: - candidates = sets.virtualGuilds; - break; - case QuickSwitcherResultTypes.SETTINGS: - candidates = sets.settings; + ranked = toRanked( + searchChannels(search, sources.channels, 'voice', sources.weights.voiceChannel, MODE_LIMIT, true), + sets, + ); break; default: - candidates = []; + ranked = [ + ...searchGuildCandidates(search, context, MODE_LIMIT, currentGuildBlacklist()), + ...scoreNavigationCandidates(search, sets.virtualGuilds, MODE_LIMIT), + ].sort(compareRanked); + break; } - if ( - search.length === 0 && - (queryMode === QuickSwitcherResultTypes.TEXT_CHANNEL || queryMode === QuickSwitcherResultTypes.VOICE_CHANNEL) - ) { - const excludedIds = getExcludedChannelIds(); - candidates = candidates.filter((c) => !excludedIds.has(c.id)); - } - const matches = matchCandidates(candidates, search, MAX_QUERY_MODE_RESULTS); - if (matches.length === 0) { - return []; - } - return [ - createHeaderResult(`query-${queryMode}`, getHeaderTitle(queryMode, i18n)), - ...matches.map((c) => candidateToResult(c, i18n)), - ]; -} - -export function generateGeneralResults(search: string, sets: CandidateSets, i18n: I18n): Array { - const sections: Array<{ - type: HeaderTitleType; - headerId: string; - candidates: Array; - }> = [ - {type: QuickSwitcherResultTypes.USER, headerId: 'people', candidates: sets.users}, - {type: QuickSwitcherResultTypes.GROUP_DM, headerId: 'group-dm', candidates: sets.groupDMs}, - {type: QuickSwitcherResultTypes.TEXT_CHANNEL, headerId: 'text-channels', candidates: sets.textChannels}, - {type: QuickSwitcherResultTypes.VOICE_CHANNEL, headerId: 'voice-channels', candidates: sets.voiceChannels}, - {type: QuickSwitcherResultTypes.GUILD, headerId: 'guilds', candidates: [...sets.guilds, ...sets.virtualGuilds]}, - {type: QuickSwitcherResultTypes.SETTINGS, headerId: 'settings', candidates: sets.settings}, - ]; - const results: Array = []; - for (const section of sections) { - const matches = matchCandidates(section.candidates, search, MAX_GENERAL_RESULTS); - if (matches.length === 0) continue; - results.push(createHeaderResult(`section-${section.headerId}`, getHeaderTitle(section.type, i18n))); - results.push(...matches.map((candidate) => candidateToResult(candidate, i18n))); - } - return results; -} - -function buildUserCandidatesWithMemberSearch( - baseCandidates: Array, - memberSearchResults: Array, -): Array { - if (memberSearchResults.length === 0) { - return baseCandidates; - } - const candidateMap = new Map(); - for (const candidate of baseCandidates) { - candidateMap.set(candidate.user.id, candidate); - } - const currentUserId = Users.getCurrentUser()?.id ?? null; - for (const member of memberSearchResults) { - const userId = member.user.id; - if (currentUserId && userId === currentUserId) { - continue; - } - if (candidateMap.has(userId)) { - continue; - } - candidateMap.set(userId, createUserCandidateFromMember(member)); - } - return Array.from(candidateMap.values()); -} - -function createUserCandidateFromMember(member: GuildMember): UserCandidate { - const title = member.nick - ? NicknameUtils.formatNicknameForStreamerMode(member.nick) - : NicknameUtils.getNickname(member.user, member.guildId); - const subtitle = NicknameUtils.formatUserTagForStreamerMode(member.user); - const searchValues = [title, subtitle, member.user.username, member.user.id, member.nick].filter( - Boolean, - ) as Array; - return { - type: QuickSwitcherResultTypes.USER, - id: member.user.id, - title, - subtitle, - user: member.user, - dmChannelId: null, - searchValues, - sortWeight: member.joinedAt ? member.joinedAt.getTime() : 0, - }; + return [header, ...ranked.map((entry) => rankedToResult(entry, i18n))]; } export function resolveTransformedMember(member: {id: string; guildIds?: Array}): GuildMember | null { @@ -270,3 +513,5 @@ export function resolveTransformedMember(member: {id: string; guildIds?: Array; selectedIndex: number; } diff --git a/fluxer_app/src/features/search/utils/DestinationSearchSources.ts b/fluxer_app/src/features/search/utils/DestinationSearchSources.ts new file mode 100644 index 000000000..f1054514d --- /dev/null +++ b/fluxer_app/src/features/search/utils/DestinationSearchSources.ts @@ -0,0 +1,184 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import { + buildForwardSearchWeights, + type ForwardChannelCandidate, + type ForwardFrequentItem, + type ForwardGroupDMCandidate, + type ForwardGuildCandidate, + type ForwardSearchWeights, + type ForwardUserCandidate, +} from '@app/features/app/components/dialogs/shared/ForwardDestinationSearch'; +import ChannelFrecency from '@app/features/channel/state/ChannelFrecency'; +import Channels from '@app/features/channel/state/Channels'; +import * as ChannelUtils from '@app/features/channel/utils/ChannelUtils'; +import Guilds from '@app/features/guild/state/Guilds'; +import {PERSONAL_NOTES_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors'; +import GuildMembers from '@app/features/member/state/GuildMembers'; +import Permission from '@app/features/permissions/state/Permission'; +import Relationships from '@app/features/relationship/state/Relationships'; +import Users from '@app/features/user/state/Users'; +import {ChannelTypes, Permissions} from '@fluxer/constants/src/ChannelConstants'; +import {RelationshipTypes} from '@fluxer/constants/src/UserConstants'; +import type {I18n} from '@lingui/core'; +import {compareStructural, computed, type IComputedValue} from 'mobx'; + +const NO_STRINGS: ReadonlyArray = Object.freeze([]); + +export interface ForwardSearchCandidates { + readonly weights: ForwardSearchWeights; + readonly channels: ReadonlyArray; + readonly groupDMs: ReadonlyArray; + readonly guilds: ReadonlyArray; + readonly users: ReadonlyArray; +} + +function collectGuildNicknames(): ReadonlyMap> { + const nicknames = new Map>(); + for (const guild of Guilds.getGuilds()) { + for (const member of GuildMembers.getMembers(guild.id)) { + if (member.nick == null) continue; + const userNicknames = nicknames.get(member.user.id); + if (userNicknames === undefined) { + nicknames.set(member.user.id, [member.nick]); + } else { + userNicknames.push(member.nick); + } + } + } + return nicknames; +} + +function buildForwardUserCandidates(): ReadonlyArray { + const nicknames = collectGuildNicknames(); + const candidates: Array = []; + for (const user of Users.getUsers()) { + const relationship = Relationships.getRelationship(user.id); + if (relationship?.type === RelationshipTypes.BLOCKED) continue; + let friendAlias: string | null = null; + if (relationship?.type === RelationshipTypes.FRIEND) friendAlias = relationship.nickname; + candidates.push( + Object.freeze({ + friendAlias, + globalName: user.globalName, + id: user.id, + nicknames: nicknames.get(user.id) ?? NO_STRINGS, + username: user.discriminator === '0' ? user.username : `${user.username}#${user.discriminator}`, + }), + ); + } + return Object.freeze(candidates); +} + +function collectRecipientSearchFields(recipientIds: ReadonlyArray): ReadonlyArray { + const fields: Array = []; + for (const recipientId of recipientIds) { + const recipient = Users.getUser(recipientId); + if (recipient == null) continue; + fields.push(recipient.username); + if (recipient.globalName != null) fields.push(recipient.globalName); + const relationshipNickname = Relationships.getRelationship(recipientId)?.nickname; + if (relationshipNickname != null) fields.push(relationshipNickname); + } + return Object.freeze(fields); +} + +function buildForwardGroupDMCandidates(i18n: I18n): ReadonlyArray { + const candidates: Array = []; + for (const channel of Channels.getPrivateChannels()) { + if (channel.type !== ChannelTypes.GROUP_DM) continue; + candidates.push( + Object.freeze({ + id: channel.id, + memberFields: collectRecipientSearchFields(channel.recipientIds), + name: ChannelUtils.getDMDisplayName(channel), + }), + ); + } + const currentUserId = Users.currentUserId; + const personalNotes = currentUserId == null ? undefined : Channels.getChannel(currentUserId); + if (personalNotes?.type === ChannelTypes.DM_PERSONAL_NOTES) { + candidates.push( + Object.freeze({id: personalNotes.id, memberFields: NO_STRINGS, name: i18n._(PERSONAL_NOTES_DESCRIPTOR)}), + ); + } + return Object.freeze(candidates); +} + +function buildForwardChannelCandidates(): ReadonlyArray { + const candidates: Array = []; + for (const channel of Channels.allChannels) { + if (channel.type !== ChannelTypes.GUILD_TEXT && channel.type !== ChannelTypes.GUILD_VOICE) continue; + const isVoice = channel.type === ChannelTypes.GUILD_VOICE; + const requiredPermissions = isVoice ? Permissions.VIEW_CHANNEL | Permissions.CONNECT : Permissions.VIEW_CHANNEL; + candidates.push( + Object.freeze({ + canAccess: Permission.can(requiredPermissions, channel), + guildName: channel.guildId == null ? null : (Guilds.getGuild(channel.guildId)?.name ?? null), + hasFrecency: ChannelFrecency.scoreFor(channel.id) > 0, + id: channel.id, + kind: isVoice ? 'voice' : 'text', + name: channel.name ?? '', + parentName: channel.parentId == null ? null : (Channels.getChannel(channel.parentId)?.name ?? null), + }), + ); + } + return Object.freeze(candidates); +} + +function resolveForwardFrequentItem(id: string): ForwardFrequentItem { + const score = ChannelFrecency.scoreFor(id); + if (Guilds.getGuild(id) != null) return {id, kind: 'guild', score}; + const channel = Channels.getChannel(id); + switch (channel?.type) { + case ChannelTypes.DM: + return {id, kind: 'dm', recipientId: channel.recipientIds.length > 0 ? channel.recipientIds[0] : null, score}; + case ChannelTypes.GROUP_DM: + case ChannelTypes.DM_PERSONAL_NOTES: + return {id, kind: 'group_dm', score}; + case ChannelTypes.GUILD_TEXT: + return {id, kind: 'text', score}; + case ChannelTypes.GUILD_VOICE: + return {id, kind: 'voice', score}; + default: + return {id, kind: 'other', score}; + } +} + +function buildForwardSearchWeightsFromStores(): ForwardSearchWeights { + const friendIds: Array = []; + for (const relationship of Relationships.getRelationships()) { + if (relationship.type === RelationshipTypes.FRIEND) friendIds.push(relationship.userId); + } + const dmUserIds: Array = []; + for (const channel of Channels.getPrivateChannels()) { + if (channel.type === ChannelTypes.DM && channel.recipientIds.length > 0) dmUserIds.push(channel.recipientIds[0]); + } + return buildForwardSearchWeights({ + dmUserIds, + frequent: ChannelFrecency.frequentIds.map(resolveForwardFrequentItem), + friendIds, + }); +} + +function buildForwardGuildCandidates(): ReadonlyArray { + return Object.freeze(Guilds.getGuilds().map((guild) => Object.freeze({id: guild.id, name: guild.name}))); +} + +export function createForwardSearchCandidates(i18n: I18n): IComputedValue { + const options = {equals: compareStructural}; + const users = computed(buildForwardUserCandidates, options); + const groupDMs = computed(() => buildForwardGroupDMCandidates(i18n), options); + const channels = computed(buildForwardChannelCandidates, options); + const guilds = computed(buildForwardGuildCandidates, options); + const weights = computed(buildForwardSearchWeightsFromStores, options); + return computed(() => + Object.freeze({ + weights: weights.get(), + channels: channels.get(), + groupDMs: groupDMs.get(), + guilds: guilds.get(), + users: users.get(), + }), + ); +} diff --git a/fluxer_app/src/features/search/utils/QuickSwitcherModalUtils.tsx b/fluxer_app/src/features/search/utils/QuickSwitcherModalUtils.tsx index e75dcea03..21c0076ba 100644 --- a/fluxer_app/src/features/search/utils/QuickSwitcherModalUtils.tsx +++ b/fluxer_app/src/features/search/utils/QuickSwitcherModalUtils.tsx @@ -1,6 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {GroupDMAvatar} from '@app/features/app/components/shared/GroupDMAvatar'; +import {ChannelOriginIcon} from '@app/features/channel/components/ChannelOriginIcon'; import Channels from '@app/features/channel/state/Channels'; import {GuildIcon} from '@app/features/guild/components/popouts/GuildIcon'; import {COMMUNITIES_DESCRIPTOR, MENTION_COUNT_ARIA_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors'; @@ -37,7 +38,7 @@ import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; import {QuickSwitcherResultTypes} from '@fluxer/constants/src/QuickSwitcherConstants'; import type {I18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; -import {ArrowRightIcon, HashIcon, HouseIcon, SpeakerHighIcon, StarIcon, UsersIcon} from '@phosphor-icons/react'; +import {ArrowRightIcon, HouseIcon, StarIcon, UsersIcon} from '@phosphor-icons/react'; import {clsx} from 'clsx'; import type React from 'react'; import {useEffect, useLayoutEffect, useRef} from 'react'; @@ -131,6 +132,8 @@ export function getViewContext(result: QuickSwitcherExecutableResult): string | return undefined; } +const QUICK_SWITCHER_ICON_SIZE = 24; + export function renderIcon( result: QuickSwitcherExecutableResult, isHighlight: boolean, @@ -146,7 +149,7 @@ export function renderIcon( content: ( ), @@ -159,34 +162,27 @@ export function renderIcon( content: ( ), }; } case QuickSwitcherResultTypes.TEXT_CHANNEL: + case QuickSwitcherResultTypes.VOICE_CHANNEL: { + const channelResult = result as TextChannelResult | VoiceChannelResult; return { - type: 'icon' as const, + type: 'avatar' as const, content: ( - - ), - }; - case QuickSwitcherResultTypes.VOICE_CHANNEL: - return { - type: 'icon' as const, - content: ( - ), }; + } case QuickSwitcherResultTypes.GUILD: { const guildResult = result as GuildResult; return { @@ -196,7 +192,7 @@ export function renderIcon( id={guildResult.guild.id} name={guildResult.guild.name} icon={guildResult.guild.icon} - sizePx={24} + sizePx={QUICK_SWITCHER_ICON_SIZE} data-flx="search.quick-switcher-modal-utils.render-icon.guild-icon" /> ), diff --git a/fluxer_app/src/features/search/utils/SearchTextMatching.ts b/fluxer_app/src/features/search/utils/SearchTextMatching.ts index 4716f0d83..ffc21b618 100644 --- a/fluxer_app/src/features/search/utils/SearchTextMatching.ts +++ b/fluxer_app/src/features/search/utils/SearchTextMatching.ts @@ -5,10 +5,10 @@ const COMBINING_MARKS = /[\u{300}-\u{36f}]/gu; const QUERY_WORD_SEPARATORS = /[, ]+/; interface SearchTerm { - readonly containQuery: RegExp; - readonly exactQuery: RegExp; - readonly isFullMatch: boolean; - readonly queryLower: string; + readonly substringPattern: RegExp; + readonly prefixPattern: RegExp; + readonly spansWholeQuery: boolean; + readonly loweredText: string; } let loadedUnicodeConfusables: ReadonlyMap | null = null; @@ -42,11 +42,11 @@ export function fuzzySearch(needle: string, haystack: string): boolean { } export function scoreSearchTerm(value: string, term: SearchTerm, fuzzy = true): number { - if (term.exactQuery.test(value)) return value.toLocaleLowerCase() === term.queryLower ? 10 : 7; - if (term.containQuery.test(value)) return 5; - const words = term.queryLower.split(QUERY_WORD_SEPARATORS); + if (term.prefixPattern.test(value)) return value.toLocaleLowerCase() === term.loweredText ? 10 : 7; + if (term.substringPattern.test(value)) return 5; + const words = term.loweredText.split(QUERY_WORD_SEPARATORS); if (words.every((word) => new RegExp(escapeSearchPattern(word), 'i').test(value))) return 3; - if (fuzzy && fuzzySearch(term.queryLower, value)) return 1; + if (fuzzy && fuzzySearch(term.loweredText, value)) return 1; return 0; } @@ -60,7 +60,7 @@ export function consumeBestSearchTerm(value: string, terms: Array, f bestIndex = index; } if (bestIndex === -1) return 0; - if (terms[bestIndex].isFullMatch) { + if (terms[bestIndex].spansWholeQuery) { terms.length = 0; } else { terms.splice(bestIndex, 1); @@ -68,17 +68,17 @@ export function consumeBestSearchTerm(value: string, terms: Array, f return bestScore; } -function buildSearchTerm(queryLower: string, pattern: string, isFullMatch: boolean): SearchTerm { +function buildSearchTerm(loweredText: string, pattern: string, spansWholeQuery: boolean): SearchTerm { return Object.freeze({ - containQuery: new RegExp(pattern, 'i'), - exactQuery: new RegExp(`^${pattern}`, 'i'), - isFullMatch, - queryLower, + substringPattern: new RegExp(pattern, 'i'), + prefixPattern: new RegExp(`^${pattern}`, 'i'), + spansWholeQuery, + loweredText, }); } -export function createSearchTerm(queryLower: string): SearchTerm { - return buildSearchTerm(queryLower, escapeSearchPattern(queryLower), false); +export function createSearchTerm(loweredText: string): SearchTerm { + return buildSearchTerm(loweredText, escapeSearchPattern(loweredText), false); } export function buildChannelSearchTerms(query: string): ReadonlyArray { @@ -87,8 +87,8 @@ export function buildChannelSearchTerms(query: string): ReadonlyArray token !== '') .map((token) => createSearchTerm(token.toLocaleLowerCase())); if (query.includes(' ')) { - const queryLower = query.toLocaleLowerCase(); - terms.unshift(buildSearchTerm(queryLower, escapeSearchPattern(queryLower).replace(' ', '( |-)'), true)); + const loweredText = query.toLocaleLowerCase(); + terms.unshift(buildSearchTerm(loweredText, escapeSearchPattern(loweredText).replace(' ', '( |-)'), true)); } return terms; }