Page MenuHomePhorge

No OneTemporary

Size
603 KB
Referenced Files
None
Subscribers
None
This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1a88ea6e8f..eebc7115ad 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,131 +1,138 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
### Added
- New option to optimize timeline rendering to make the site more responsive (enabled by default)
## [Unreleased patch]
+### Changed
+- Polls will be hidden with status content if "Collapse posts with subjects" is enabled and the post is collapsed.
+
+### Fixed
+- Autocomplete won't stop at the second @, so it'll still work with "@lain@l" and not start over.
+- Fixed weird autocomplete behavior when you write ":custom_emoji: ?"
+
## [2.1.0] - 2020-08-28
### Added
- Autocomplete domains from list of known instances
- 'Bot' settings option and badge
- Added profile meta data fields that can be set in profile settings
- Added option to reset avatar/banner in profile settings
- Descriptions can be set on uploaded files before posting
- Added status preview option to preview your statuses before posting
- When a post is a reply to an unavailable post, the 'Reply to'-text has a strike-through style
- Added ability to see all favoriting or repeating users when hovering the number on highlighted statuses
- Bookmarks
### Changed
- Change heart to thumbs up in reaction picker
- Close the media modal on navigation events
- Add colons to the emoji alt text, to make them copyable
- Add better visual indication for drag-and-drop for files
- When disabling attachments, the placeholder links now show an icon and the description instead of just IMAGE or VIDEO etc
- Remove unnecessary options for 'automatic loading when loading older' and 'reply previews'
- Greentext now has separate color slot for it
- Removed the use of with_move parameters when fetching notifications
- Push notifications now are the same as normal notfication, and are localized.
- Updated Notification Settings to match new BE API
### Fixed
- Custom Emoji will display in poll options now.
- Status ellipsis menu closes properly when selecting certain options
- Cropped images look correct in Chrome
- Newlines in the muted words settings work again
- Clicking on non-latin hashtags won't open a new window
- Uploading and drag-dropping multiple files works correctly now.
- Subject field now appears disabled when posting
- Fix status ellipsis menu being cut off in notifications column
- Fixed autocomplete sometimes not returning the right user when there's already some results
- Videos and audio and misc files show description as alt/title properly now
- Clicking on non-image/video files no longer opens an empty modal
- Audio files can now be played back in the frontend with hidden attachments
- Videos are not cropped awkwardly in the uploads section anymore
- Reply filtering options in Settings -> Filtering now work again using filtering on server
- Don't show just blank-screen when cookies are disabled
- Add status idempotency to prevent accidental double posting when posting returns an error
- Weird bug related to post being sent seemingly after pasting with keyboard (hopefully)
- Multiple issues with muted statuses/notifications
## [2.0.5] - 2020-05-12
### Added
- Added private notifications option for push notifications
- 'Copy link' button for statuses (in the ellipsis menu)
### Changed
- Registration page no longer requires email if the server is configured not to require it
### Fixed
- Status ellipsis menu closes properly when selecting certain options
## [2.0.3] - 2020-05-02
### Fixed
- Show more/less works correctly with auto-collapsed subjects and long posts
- RTL characters won't look messed up in notifications
### Changed
- Emoji autocomplete will match any part of the word and not just start, for example :drool will now helpfully suggest :blobcatdrool: and :blobcatdroolreach:
### Added
- Follow request notification support
## [2.0.2] - 2020-04-08
### Fixed
- Favorite/Repeat avatars not showing up on private instances/non-public posts
- Autocorrect getting triggered in the captcha field
- Overflow on long domains in follow/move notifications
### Changed
- Polish translation updated
## [2.0.0] - 2020-02-28
### Added
- Tons of color slots including ones for hover/pressed/toggled buttons
- Experimental `--variable[,mod]` syntax support for color slots in themes. the `mod` makes color brighter/darker depending on background color (makes darker color brighter/darker depending on background color)
- Paper theme by Shpuld
- Icons in nav panel
- Private mode support
- Support for 'Move' type notifications
- Pleroma AMOLED dark theme
- User level domain mutes, under User Settings -> Mutes
- Emoji reactions for statuses
- MRF keyword policy disclosure
### Changed
- Updated Pleroma default themes
- theme engine update to 3 (themes v2.1 introduction)
- massive internal changes in theme engine - slowly away from "generate things separately with spaghetti code" towards "feed all data into single 'generateTheme' function and declare slot inheritance and all in a separate file"
- Breezy theme updates to make it closer to actual Breeze in some aspects
- when using `--variable` in shadows it no longer uses the actual CSS3 variable, instead it generates color from other slots
- theme doesn't get saved to local storage when opening FE anonymously
- Captcha now resets on failed registrations
- Notifications column now cleans itself up to optimize performance when tab is left open for a long time
- 403 messaging
### Fixed
- Fixed loader-spinner not disappearing when a status preview fails to load
- anon viewers won't get theme data saved to local storage, so admin changing default theme will have an effect for users coming back to instance.
- Single notifications left unread when hitting read on another device/tab
- Registration fixed
- Deactivation of remote accounts from frontend
- Fixed NSFW unhiding not working with videos when using one-click unhiding/displaying
- Improved performance of anything that uses popovers (most notably statuses)
## [1.1.7 and earlier] - 2019-12-14
### Added
- Ability to hide/show repeats from user
- User profile button clutter organized into a menu
- Emoji picker
- Started changelog anew
- Ability to change user's email
- About page
- Added remote user redirect
- Bookmarks
### Changed
- changed the way fading effects for user profile/long statuses works, now uses css-mask instead of gradient background hacks which weren't exactly compatible with semi-transparent themes
### Fixed
- improved hotkey behavior on autocomplete popup
diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js
index 9c4e5b0554..803abf6988 100644
--- a/src/components/chat/chat.js
+++ b/src/components/chat/chat.js
@@ -1,333 +1,337 @@
import _ from 'lodash'
import { WSConnectionStatus } from '../../services/api/api.service.js'
import { mapGetters, mapState } from 'vuex'
import ChatMessage from '../chat_message/chat_message.vue'
import PostStatusForm from '../post_status_form/post_status_form.vue'
import ChatTitle from '../chat_title/chat_title.vue'
import chatService from '../../services/chat_service/chat_service.js'
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight } from './chat_layout_utils.js'
const BOTTOMED_OUT_OFFSET = 10
const JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET = 150
const SAFE_RESIZE_TIME_OFFSET = 100
const Chat = {
components: {
ChatMessage,
ChatTitle,
PostStatusForm
},
data () {
return {
jumpToBottomButtonVisible: false,
hoveredMessageChainId: undefined,
lastScrollPosition: {},
scrollableContainerHeight: '100%',
errorLoadingChat: false
}
},
created () {
this.startFetching()
window.addEventListener('resize', this.handleLayoutChange)
},
mounted () {
window.addEventListener('scroll', this.handleScroll)
if (typeof document.hidden !== 'undefined') {
document.addEventListener('visibilitychange', this.handleVisibilityChange, false)
}
this.$nextTick(() => {
this.updateScrollableContainerHeight()
this.handleResize()
})
this.setChatLayout()
},
destroyed () {
window.removeEventListener('scroll', this.handleScroll)
window.removeEventListener('resize', this.handleLayoutChange)
this.unsetChatLayout()
if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)
this.$store.dispatch('clearCurrentChat')
},
computed: {
recipient () {
return this.currentChat && this.currentChat.account
},
recipientId () {
return this.$route.params.recipient_id
},
formPlaceholder () {
if (this.recipient) {
return this.$t('chats.message_user', { nickname: this.recipient.screen_name })
} else {
return ''
}
},
chatViewItems () {
return chatService.getView(this.currentChatMessageService)
},
newMessageCount () {
return this.currentChatMessageService && this.currentChatMessageService.newMessageCount
},
streamingEnabled () {
return this.mergedConfig.useStreamingApi && this.mastoUserSocketStatus === WSConnectionStatus.JOINED
},
...mapGetters([
'currentChat',
'currentChatMessageService',
'findOpenedChatByRecipientId',
'mergedConfig'
]),
...mapState({
backendInteractor: state => state.api.backendInteractor,
mastoUserSocketStatus: state => state.api.mastoUserSocketStatus,
mobileLayout: state => state.interface.mobileLayout,
layoutHeight: state => state.interface.layoutHeight,
currentUser: state => state.users.currentUser
})
},
watch: {
chatViewItems () {
// We don't want to scroll to the bottom on a new message when the user is viewing older messages.
// Therefore we need to know whether the scroll position was at the bottom before the DOM update.
const bottomedOutBeforeUpdate = this.bottomedOut(BOTTOMED_OUT_OFFSET)
this.$nextTick(() => {
if (bottomedOutBeforeUpdate) {
this.scrollDown({ forceRead: !document.hidden })
}
})
},
'$route': function () {
this.startFetching()
},
layoutHeight () {
this.handleResize({ expand: true })
},
mastoUserSocketStatus (newValue) {
if (newValue === WSConnectionStatus.JOINED) {
this.fetchChat({ isFirstFetch: true })
}
}
},
methods: {
// Used to animate the avatar near the first message of the message chain when any message belonging to the chain is hovered
onMessageHover ({ isHovered, messageChainId }) {
this.hoveredMessageChainId = isHovered ? messageChainId : undefined
},
onFilesDropped () {
this.$nextTick(() => {
this.handleResize()
this.updateScrollableContainerHeight()
})
},
handleVisibilityChange () {
this.$nextTick(() => {
if (!document.hidden && this.bottomedOut(BOTTOMED_OUT_OFFSET)) {
this.scrollDown({ forceRead: true })
}
})
},
setChatLayout () {
// This is a hacky way to adjust the global layout to the mobile chat (without modifying the rest of the app).
// This layout prevents empty spaces from being visible at the bottom
// of the chat on iOS Safari (`safe-area-inset`) when
// - the on-screen keyboard appears and the user starts typing
// - the user selects the text inside the input area
// - the user selects and deletes the text that is multiple lines long
// TODO: unify the chat layout with the global layout.
let html = document.querySelector('html')
if (html) {
html.classList.add('chat-layout')
}
this.$nextTick(() => {
this.updateScrollableContainerHeight()
})
},
unsetChatLayout () {
let html = document.querySelector('html')
if (html) {
html.classList.remove('chat-layout')
}
},
handleLayoutChange () {
this.$nextTick(() => {
this.updateScrollableContainerHeight()
this.scrollDown()
})
},
// Ensures the proper position of the posting form in the mobile layout (the mobile browser panel does not overlap or hide it)
updateScrollableContainerHeight () {
const header = this.$refs.header
const footer = this.$refs.footer
const inner = this.mobileLayout ? window.document.body : this.$refs.inner
this.scrollableContainerHeight = scrollableContainerHeight(inner, header, footer) + 'px'
},
// Preserves the scroll position when OSK appears or the posting form changes its height.
handleResize (opts = {}) {
const { expand = false, delayed = false } = opts
if (delayed) {
setTimeout(() => {
this.handleResize({ ...opts, delayed: false })
}, SAFE_RESIZE_TIME_OFFSET)
return
}
this.$nextTick(() => {
this.updateScrollableContainerHeight()
const { offsetHeight = undefined } = this.lastScrollPosition
this.lastScrollPosition = getScrollPosition(this.$refs.scrollable)
const diff = this.lastScrollPosition.offsetHeight - offsetHeight
if (diff < 0 || (!this.bottomedOut() && expand)) {
this.$nextTick(() => {
this.updateScrollableContainerHeight()
this.$refs.scrollable.scrollTo({
top: this.$refs.scrollable.scrollTop - diff,
left: 0
})
})
}
})
},
scrollDown (options = {}) {
const { behavior = 'auto', forceRead = false } = options
const scrollable = this.$refs.scrollable
if (!scrollable) { return }
this.$nextTick(() => {
scrollable.scrollTo({ top: scrollable.scrollHeight, left: 0, behavior })
})
if (forceRead || this.newMessageCount > 0) {
this.readChat()
}
},
readChat () {
- if (!(this.currentChatMessageService && this.currentChatMessageService.lastMessage)) { return }
+ if (!(this.currentChatMessageService && this.currentChatMessageService.maxId)) { return }
if (document.hidden) { return }
- const lastReadId = this.currentChatMessageService.lastMessage.id
+ const lastReadId = this.currentChatMessageService.maxId
this.$store.dispatch('readChat', { id: this.currentChat.id, lastReadId })
},
bottomedOut (offset) {
return isBottomedOut(this.$refs.scrollable, offset)
},
reachedTop () {
const scrollable = this.$refs.scrollable
return scrollable && scrollable.scrollTop <= 0
},
handleScroll: _.throttle(function () {
if (!this.currentChat) { return }
if (this.reachedTop()) {
this.fetchChat({ maxId: this.currentChatMessageService.minId })
} else if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {
this.jumpToBottomButtonVisible = false
if (this.newMessageCount > 0) {
this.readChat()
}
} else {
this.jumpToBottomButtonVisible = true
}
}, 100),
handleScrollUp (positionBeforeLoading) {
const positionAfterLoading = getScrollPosition(this.$refs.scrollable)
this.$refs.scrollable.scrollTo({
top: getNewTopPosition(positionBeforeLoading, positionAfterLoading),
left: 0
})
},
fetchChat ({ isFirstFetch = false, fetchLatest = false, maxId }) {
const chatMessageService = this.currentChatMessageService
if (!chatMessageService) { return }
if (fetchLatest && this.streamingEnabled) { return }
const chatId = chatMessageService.chatId
const fetchOlderMessages = !!maxId
- const sinceId = fetchLatest && chatMessageService.lastMessage && chatMessageService.lastMessage.id
+ const sinceId = fetchLatest && chatMessageService.maxId
this.backendInteractor.chatMessages({ id: chatId, maxId, sinceId })
.then((messages) => {
// Clear the current chat in case we're recovering from a ws connection loss.
if (isFirstFetch) {
chatService.clear(chatMessageService)
}
const positionBeforeUpdate = getScrollPosition(this.$refs.scrollable)
this.$store.dispatch('addChatMessages', { chatId, messages }).then(() => {
this.$nextTick(() => {
if (fetchOlderMessages) {
this.handleScrollUp(positionBeforeUpdate)
}
if (isFirstFetch) {
this.updateScrollableContainerHeight()
}
})
})
})
},
async startFetching () {
let chat = this.findOpenedChatByRecipientId(this.recipientId)
if (!chat) {
try {
chat = await this.backendInteractor.getOrCreateChat({ accountId: this.recipientId })
} catch (e) {
console.error('Error creating or getting a chat', e)
this.errorLoadingChat = true
}
}
if (chat) {
this.$nextTick(() => {
this.scrollDown({ forceRead: true })
})
this.$store.dispatch('addOpenedChat', { chat })
this.doStartFetching()
}
},
doStartFetching () {
this.$store.dispatch('startFetchingCurrentChat', {
fetcher: () => setInterval(() => this.fetchChat({ fetchLatest: true }), 5000)
})
this.fetchChat({ isFirstFetch: true })
},
sendMessage ({ status, media }) {
const params = {
id: this.currentChat.id,
content: status
}
if (media[0]) {
params.mediaId = media[0].id
}
return this.backendInteractor.sendChatMessage(params)
.then(data => {
- this.$store.dispatch('addChatMessages', { chatId: this.currentChat.id, messages: [data] }).then(() => {
+ this.$store.dispatch('addChatMessages', {
+ chatId: this.currentChat.id,
+ messages: [data],
+ updateMaxId: false
+ }).then(() => {
this.$nextTick(() => {
this.handleResize()
// When the posting form size changes because of a media attachment, we need an extra resize
// to account for the potential delay in the DOM update.
setTimeout(() => {
this.updateScrollableContainerHeight()
}, SAFE_RESIZE_TIME_OFFSET)
this.scrollDown({ forceRead: true })
})
})
return data
})
.catch(error => {
console.error('Error sending message', error)
return {
error: this.$t('chats.error_sending_message')
}
})
},
goBack () {
this.$router.push({ name: 'chats', params: { username: this.currentUser.screen_name } })
}
}
}
export default Chat
diff --git a/src/components/contrast_ratio/contrast_ratio.vue b/src/components/contrast_ratio/contrast_ratio.vue
index ba92bc170b..9dc871b6bf 100644
--- a/src/components/contrast_ratio/contrast_ratio.vue
+++ b/src/components/contrast_ratio/contrast_ratio.vue
@@ -1,87 +1,90 @@
<template>
<span
v-if="contrast"
class="contrast-ratio"
>
<span
:title="hint"
class="rating"
>
<span v-if="contrast.aaa">
<i class="icon-thumbs-up-alt" />
</span>
<span v-if="!contrast.aaa && contrast.aa">
<i class="icon-adjust" />
</span>
<span v-if="!contrast.aaa && !contrast.aa">
<i class="icon-attention" />
</span>
</span>
<span
v-if="contrast && large"
class="rating"
:title="hint_18pt"
>
<span v-if="contrast.laaa">
<i class="icon-thumbs-up-alt" />
</span>
<span v-if="!contrast.laaa && contrast.laa">
<i class="icon-adjust" />
</span>
<span v-if="!contrast.laaa && !contrast.laa">
<i class="icon-attention" />
</span>
</span>
</span>
</template>
<script>
export default {
props: {
large: {
- required: false
+ required: false,
+ type: Boolean,
+ default: false
},
// TODO: Make theme switcher compute theme initially so that contrast
// component won't be called without contrast data
contrast: {
required: false,
- type: Object
+ type: Object,
+ default: () => ({})
}
},
computed: {
hint () {
const levelVal = this.contrast.aaa ? 'aaa' : (this.contrast.aa ? 'aa' : 'bad')
const level = this.$t(`settings.style.common.contrast.level.${levelVal}`)
const context = this.$t('settings.style.common.contrast.context.text')
const ratio = this.contrast.text
return this.$t('settings.style.common.contrast.hint', { level, context, ratio })
},
hint_18pt () {
const levelVal = this.contrast.laaa ? 'aaa' : (this.contrast.laa ? 'aa' : 'bad')
const level = this.$t(`settings.style.common.contrast.level.${levelVal}`)
const context = this.$t('settings.style.common.contrast.context.18pt')
const ratio = this.contrast.text
return this.$t('settings.style.common.contrast.hint', { level, context, ratio })
}
}
}
</script>
<style lang="scss">
.contrast-ratio {
display: flex;
justify-content: flex-end;
margin-top: -4px;
margin-bottom: 5px;
.label {
margin-right: 1em;
}
.rating {
display: inline-block;
text-align: center;
}
}
</style>
diff --git a/src/components/password_reset/password_reset.js b/src/components/password_reset/password_reset.js
index 62e74e30f2..5d21d72054 100644
--- a/src/components/password_reset/password_reset.js
+++ b/src/components/password_reset/password_reset.js
@@ -1,68 +1,63 @@
import { mapState } from 'vuex'
import passwordResetApi from '../../services/new_api/password_reset.js'
const passwordReset = {
data: () => ({
user: {
email: ''
},
isPending: false,
success: false,
throttled: false,
error: null
}),
computed: {
...mapState({
signedIn: (state) => !!state.users.currentUser,
instance: state => state.instance
}),
mailerEnabled () {
return this.instance.mailerEnabled
}
},
created () {
if (this.signedIn) {
this.$router.push({ name: 'root' })
}
},
props: {
passwordResetRequested: {
default: false,
type: Boolean
}
},
methods: {
dismissError () {
this.error = null
},
submit () {
this.isPending = true
const email = this.user.email
const instance = this.instance.server
passwordResetApi({ instance, email }).then(({ status }) => {
this.isPending = false
this.user.email = ''
if (status === 204) {
this.success = true
this.error = null
- } else if (status === 404 || status === 400) {
- this.error = this.$t('password_reset.not_found')
- this.$nextTick(() => {
- this.$refs.email.focus()
- })
} else if (status === 429) {
this.throttled = true
this.error = this.$t('password_reset.too_many_requests')
}
}).catch(() => {
this.isPending = false
this.user.email = ''
this.error = this.$t('general.generic_error')
})
}
}
}
export default passwordReset
diff --git a/src/components/poll/poll.vue b/src/components/poll/poll.vue
index 1858f3e194..5f54b41616 100644
--- a/src/components/poll/poll.vue
+++ b/src/components/poll/poll.vue
@@ -1,137 +1,138 @@
<template>
<div
class="poll"
:class="containerClass"
>
<div
v-for="(option, index) in options"
:key="index"
class="poll-option"
>
<div
v-if="showResults"
:title="resultTitle(option)"
class="option-result"
>
<div class="option-result-label">
<span class="result-percentage">
{{ percentageForOption(option.votes_count) }}%
</span>
+ <!-- eslint-disable-next-line vue/no-v-html -->
<span v-html="option.title_html" />
</div>
<div
class="result-fill"
:style="{ 'width': `${percentageForOption(option.votes_count)}%` }"
/>
</div>
<div
v-else
@click="activateOption(index)"
>
<input
v-if="poll.multiple"
type="checkbox"
:disabled="loading"
:value="index"
>
<input
v-else
type="radio"
:disabled="loading"
:value="index"
>
<label class="option-vote">
<div>{{ option.title }}</div>
</label>
</div>
</div>
<div class="footer faint">
<button
v-if="!showResults"
class="btn btn-default poll-vote-button"
type="button"
:disabled="isDisabled"
@click="vote"
>
{{ $t('polls.vote') }}
</button>
<div class="total">
{{ totalVotesCount }} {{ $t("polls.votes") }}&nbsp;·&nbsp;
</div>
<i18n :path="expired ? 'polls.expired' : 'polls.expires_in'">
<Timeago
:time="expiresAt"
:auto-update="60"
:now-threshold="0"
/>
</i18n>
</div>
</div>
</template>
<script src="./poll.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.poll {
.votes {
display: flex;
flex-direction: column;
margin: 0 0 0.5em;
}
.poll-option {
margin: 0.75em 0.5em;
}
.option-result {
height: 100%;
display: flex;
flex-direction: row;
position: relative;
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
}
.option-result-label {
display: flex;
align-items: center;
padding: 0.1em 0.25em;
z-index: 1;
word-break: break-word;
}
.result-percentage {
width: 3.5em;
flex-shrink: 0;
}
.result-fill {
height: 100%;
position: absolute;
color: $fallback--text;
color: var(--pollText, $fallback--text);
background-color: $fallback--lightBg;
background-color: var(--poll, $fallback--lightBg);
border-radius: $fallback--panelRadius;
border-radius: var(--panelRadius, $fallback--panelRadius);
top: 0;
left: 0;
transition: width 0.5s;
}
.option-vote {
display: flex;
align-items: center;
}
input {
width: 3.5em;
}
.footer {
display: flex;
align-items: center;
}
&.loading * {
cursor: progress;
}
.poll-vote-button {
padding: 0 0.5em;
margin-right: 0.5em;
}
}
</style>
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index e7094bec94..ad149506ee 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -1,562 +1,565 @@
import statusPoster from '../../services/status_poster/status_poster.service.js'
import MediaUpload from '../media_upload/media_upload.vue'
import ScopeSelector from '../scope_selector/scope_selector.vue'
import EmojiInput from '../emoji_input/emoji_input.vue'
import PollForm from '../poll/poll_form.vue'
import Attachment from '../attachment/attachment.vue'
import StatusContent from '../status_content/status_content.vue'
import fileTypeService from '../../services/file_type/file_type.service.js'
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
import { reject, map, uniqBy, debounce } from 'lodash'
import suggestor from '../emoji_input/suggestor.js'
import { mapGetters, mapState } from 'vuex'
import Checkbox from '../checkbox/checkbox.vue'
const buildMentionsString = ({ user, attentions = [] }, currentUser) => {
let allAttentions = [...attentions]
allAttentions.unshift(user)
allAttentions = uniqBy(allAttentions, 'id')
allAttentions = reject(allAttentions, { id: currentUser.id })
let mentions = map(allAttentions, (attention) => {
return `@${attention.screen_name}`
})
return mentions.length > 0 ? mentions.join(' ') + ' ' : ''
}
// Converts a string with px to a number like '2px' -> 2
const pxStringToNumber = (str) => {
return Number(str.substring(0, str.length - 2))
}
const PostStatusForm = {
props: [
'replyTo',
'repliedUser',
'attentions',
'copyMessageScope',
'subject',
'disableSubject',
'disableScopeSelector',
'disableNotice',
'disableLockWarning',
'disablePolls',
'disableSensitivityCheckbox',
'disableSubmit',
'disablePreview',
'placeholder',
'maxHeight',
'postHandler',
'preserveFocus',
'autoFocus',
'fileLimit',
'submitOnEnter',
'emojiPickerPlacement'
],
components: {
MediaUpload,
EmojiInput,
PollForm,
ScopeSelector,
Checkbox,
Attachment,
StatusContent
},
mounted () {
this.updateIdempotencyKey()
this.resize(this.$refs.textarea)
if (this.replyTo) {
const textLength = this.$refs.textarea.value.length
this.$refs.textarea.setSelectionRange(textLength, textLength)
}
if (this.replyTo || this.autoFocus) {
this.$refs.textarea.focus()
}
},
data () {
const preset = this.$route.query.message
let statusText = preset || ''
const { scopeCopy } = this.$store.getters.mergedConfig
if (this.replyTo) {
const currentUser = this.$store.state.users.currentUser
statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
}
const scope = ((this.copyMessageScope && scopeCopy) || this.copyMessageScope === 'direct')
? this.copyMessageScope
: this.$store.state.users.currentUser.default_scope
const { postContentType: contentType } = this.$store.getters.mergedConfig
return {
dropFiles: [],
uploadingFiles: false,
error: null,
posting: false,
highlighted: 0,
newStatus: {
spoilerText: this.subject || '',
status: statusText,
nsfw: false,
files: [],
poll: {},
mediaDescriptions: {},
visibility: scope,
contentType
},
caret: 0,
pollFormVisible: false,
showDropIcon: 'hide',
dropStopTimeout: null,
preview: null,
previewLoading: false,
emojiInputShown: false,
idempotencyKey: ''
}
},
computed: {
users () {
return this.$store.state.users.users
},
userDefaultScope () {
return this.$store.state.users.currentUser.default_scope
},
showAllScopes () {
return !this.mergedConfig.minimalScopesMode
},
emojiUserSuggestor () {
return suggestor({
emoji: [
...this.$store.state.instance.emoji,
...this.$store.state.instance.customEmoji
],
users: this.$store.state.users.users,
updateUsersList: (query) => this.$store.dispatch('searchUsers', { query })
})
},
emojiSuggestor () {
return suggestor({
emoji: [
...this.$store.state.instance.emoji,
...this.$store.state.instance.customEmoji
]
})
},
emoji () {
return this.$store.state.instance.emoji || []
},
customEmoji () {
return this.$store.state.instance.customEmoji || []
},
statusLength () {
return this.newStatus.status.length
},
spoilerTextLength () {
return this.newStatus.spoilerText.length
},
statusLengthLimit () {
return this.$store.state.instance.textlimit
},
hasStatusLengthLimit () {
return this.statusLengthLimit > 0
},
charactersLeft () {
return this.statusLengthLimit - (this.statusLength + this.spoilerTextLength)
},
isOverLengthLimit () {
return this.hasStatusLengthLimit && (this.charactersLeft < 0)
},
minimalScopesMode () {
return this.$store.state.instance.minimalScopesMode
},
alwaysShowSubject () {
return this.mergedConfig.alwaysShowSubjectInput
},
postFormats () {
return this.$store.state.instance.postFormats || []
},
safeDMEnabled () {
return this.$store.state.instance.safeDM
},
pollsAvailable () {
return this.$store.state.instance.pollsAvailable &&
this.$store.state.instance.pollLimits.max_options >= 2 &&
this.disablePolls !== true
},
hideScopeNotice () {
return this.disableNotice || this.$store.getters.mergedConfig.hideScopeNotice
},
pollContentError () {
return this.pollFormVisible &&
this.newStatus.poll &&
this.newStatus.poll.error
},
showPreview () {
return !this.disablePreview && (!!this.preview || this.previewLoading)
},
emptyStatus () {
return this.newStatus.status.trim() === '' && this.newStatus.files.length === 0
},
uploadFileLimitReached () {
return this.newStatus.files.length >= this.fileLimit
},
...mapGetters(['mergedConfig']),
...mapState({
mobileLayout: state => state.interface.mobileLayout
})
},
watch: {
'newStatus': {
deep: true,
handler () {
this.statusChanged()
}
}
},
methods: {
statusChanged () {
this.autoPreview()
this.updateIdempotencyKey()
},
clearStatus () {
const newStatus = this.newStatus
this.newStatus = {
status: '',
spoilerText: '',
files: [],
visibility: newStatus.visibility,
contentType: newStatus.contentType,
poll: {},
mediaDescriptions: {}
}
this.pollFormVisible = false
this.$refs.mediaUpload && this.$refs.mediaUpload.clearFile()
this.clearPollForm()
if (this.preserveFocus) {
this.$nextTick(() => {
this.$refs.textarea.focus()
})
}
let el = this.$el.querySelector('textarea')
el.style.height = 'auto'
el.style.height = undefined
this.error = null
if (this.preview) this.previewStatus()
},
async postStatus (event, newStatus, opts = {}) {
if (this.posting) { return }
if (this.disableSubmit) { return }
if (this.emojiInputShown) { return }
if (this.submitOnEnter) {
event.stopPropagation()
event.preventDefault()
}
if (this.emptyStatus) {
this.error = this.$t('post_status.empty_status_error')
return
}
const poll = this.pollFormVisible ? this.newStatus.poll : {}
if (this.pollContentError) {
this.error = this.pollContentError
return
}
this.posting = true
try {
await this.setAllMediaDescriptions()
} catch (e) {
this.error = this.$t('post_status.media_description_error')
this.posting = false
return
}
const postingOptions = {
status: newStatus.status,
spoilerText: newStatus.spoilerText || null,
visibility: newStatus.visibility,
sensitive: newStatus.nsfw,
media: newStatus.files,
store: this.$store,
inReplyToStatusId: this.replyTo,
contentType: newStatus.contentType,
poll,
idempotencyKey: this.idempotencyKey
}
const postHandler = this.postHandler ? this.postHandler : statusPoster.postStatus
postHandler(postingOptions).then((data) => {
if (!data.error) {
this.clearStatus()
this.$emit('posted', data)
} else {
this.error = data.error
}
this.posting = false
})
},
previewStatus () {
if (this.emptyStatus && this.newStatus.spoilerText.trim() === '') {
this.preview = { error: this.$t('post_status.preview_empty') }
this.previewLoading = false
return
}
const newStatus = this.newStatus
this.previewLoading = true
statusPoster.postStatus({
status: newStatus.status,
spoilerText: newStatus.spoilerText || null,
visibility: newStatus.visibility,
sensitive: newStatus.nsfw,
media: [],
store: this.$store,
inReplyToStatusId: this.replyTo,
contentType: newStatus.contentType,
poll: {},
preview: true
}).then((data) => {
// Don't apply preview if not loading, because it means
// user has closed the preview manually.
if (!this.previewLoading) return
if (!data.error) {
this.preview = data
} else {
this.preview = { error: data.error }
}
}).catch((error) => {
this.preview = { error }
}).finally(() => {
this.previewLoading = false
})
},
debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),
autoPreview () {
if (!this.preview) return
this.previewLoading = true
this.debouncePreviewStatus()
},
closePreview () {
this.preview = null
this.previewLoading = false
},
togglePreview () {
if (this.showPreview) {
this.closePreview()
} else {
this.previewStatus()
}
},
addMediaFile (fileInfo) {
this.newStatus.files.push(fileInfo)
this.$emit('resize', { delayed: true })
},
removeMediaFile (fileInfo) {
let index = this.newStatus.files.indexOf(fileInfo)
this.newStatus.files.splice(index, 1)
this.$emit('resize')
},
uploadFailed (errString, templateArgs) {
templateArgs = templateArgs || {}
this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)
},
startedUploadingFiles () {
this.uploadingFiles = true
},
finishedUploadingFiles () {
this.$emit('resize')
this.uploadingFiles = false
},
type (fileInfo) {
return fileTypeService.fileType(fileInfo.mimetype)
},
paste (e) {
this.autoPreview()
this.resize(e)
if (e.clipboardData.files.length > 0) {
// prevent pasting of file as text
e.preventDefault()
// Strangely, files property gets emptied after event propagation
// Trying to wrap it in array doesn't work. Plus I doubt it's possible
// to hold more than one file in clipboard.
this.dropFiles = [e.clipboardData.files[0]]
}
},
fileDrop (e) {
if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {
e.preventDefault() // allow dropping text like before
this.dropFiles = e.dataTransfer.files
clearTimeout(this.dropStopTimeout)
this.showDropIcon = 'hide'
}
},
fileDragStop (e) {
// The false-setting is done with delay because just using leave-events
// directly caused unwanted flickering, this is not perfect either but
// much less noticable.
clearTimeout(this.dropStopTimeout)
this.showDropIcon = 'fade'
this.dropStopTimeout = setTimeout(() => (this.showDropIcon = 'hide'), 500)
},
fileDrag (e) {
e.dataTransfer.dropEffect = this.uploadFileLimitReached ? 'none' : 'copy'
if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {
clearTimeout(this.dropStopTimeout)
this.showDropIcon = 'show'
}
},
onEmojiInputInput (e) {
this.$nextTick(() => {
this.resize(this.$refs['textarea'])
})
},
resize (e) {
const target = e.target || e
if (!(target instanceof window.Element)) { return }
// Reset to default height for empty form, nothing else to do here.
if (target.value === '') {
target.style.height = null
this.$emit('resize')
this.$refs['emoji-input'].resize()
return
}
const formRef = this.$refs['form']
const bottomRef = this.$refs['bottom']
/* Scroller is either `window` (replies in TL), sidebar (main post form,
* replies in notifs) or mobile post form. Note that getting and setting
* scroll is different for `Window` and `Element`s
*/
const bottomBottomPaddingStr = window.getComputedStyle(bottomRef)['padding-bottom']
const bottomBottomPadding = pxStringToNumber(bottomBottomPaddingStr)
const scrollerRef = this.$el.closest('.sidebar-scroller') ||
this.$el.closest('.post-form-modal-view') ||
window
// Getting info about padding we have to account for, removing 'px' part
const topPaddingStr = window.getComputedStyle(target)['padding-top']
const bottomPaddingStr = window.getComputedStyle(target)['padding-bottom']
const topPadding = pxStringToNumber(topPaddingStr)
const bottomPadding = pxStringToNumber(bottomPaddingStr)
const vertPadding = topPadding + bottomPadding
const oldHeight = pxStringToNumber(target.style.height)
/* Explanation:
*
* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight
* scrollHeight returns element's scrollable content height, i.e. visible
* element + overscrolled parts of it. We use it to determine when text
* inside the textarea exceeded its height, so we can set height to prevent
* overscroll, i.e. make textarea grow with the text. HOWEVER, since we
* explicitly set new height, scrollHeight won't go below that, so we can't
* SHRINK the textarea when there's extra space. To workaround that we set
* height to 'auto' which makes textarea tiny again, so that scrollHeight
* will match text height again. HOWEVER, shrinking textarea can screw with
* the scroll since there might be not enough padding around form-bottom to even
* warrant a scroll, so it will jump to 0 and refuse to move anywhere,
* so we check current scroll position before shrinking and then restore it
* with needed delta.
*/
// this part has to be BEFORE the content size update
const currentScroll = scrollerRef === window
? scrollerRef.scrollY
: scrollerRef.scrollTop
const scrollerHeight = scrollerRef === window
? scrollerRef.innerHeight
: scrollerRef.offsetHeight
const scrollerBottomBorder = currentScroll + scrollerHeight
// BEGIN content size update
target.style.height = 'auto'
const heightWithoutPadding = Math.floor(target.scrollHeight - vertPadding)
let newHeight = this.maxHeight ? Math.min(heightWithoutPadding, this.maxHeight) : heightWithoutPadding
// This is a bit of a hack to combat target.scrollHeight being different on every other input
// on some browsers for whatever reason. Don't change the height if difference is 1px or less.
if (Math.abs(newHeight - oldHeight) <= 1) {
newHeight = oldHeight
}
target.style.height = `${newHeight}px`
this.$emit('resize', newHeight)
// END content size update
// We check where the bottom border of form-bottom element is, this uses findOffset
// to find offset relative to scrollable container (scroller)
const bottomBottomBorder = bottomRef.offsetHeight + findOffset(bottomRef, scrollerRef).top + bottomBottomPadding
const isBottomObstructed = scrollerBottomBorder < bottomBottomBorder
const isFormBiggerThanScroller = scrollerHeight < formRef.offsetHeight
const bottomChangeDelta = bottomBottomBorder - scrollerBottomBorder
// The intention is basically this;
// Keep form-bottom always visible so that submit button is in view EXCEPT
// if form element bigger than scroller and caret isn't at the end, so that
// if you scroll up and edit middle of text you won't get scrolled back to bottom
const shouldScrollToBottom = isBottomObstructed &&
!(isFormBiggerThanScroller &&
this.$refs.textarea.selectionStart !== this.$refs.textarea.value.length)
const totalDelta = shouldScrollToBottom ? bottomChangeDelta : 0
const targetScroll = currentScroll + totalDelta
if (scrollerRef === window) {
scrollerRef.scroll(0, targetScroll)
} else {
scrollerRef.scrollTop = targetScroll
}
this.$refs['emoji-input'].resize()
},
showEmojiPicker () {
this.$refs['textarea'].focus()
this.$refs['emoji-input'].triggerShowPicker()
},
clearError () {
this.error = null
},
changeVis (visibility) {
this.newStatus.visibility = visibility
},
togglePollForm () {
this.pollFormVisible = !this.pollFormVisible
},
setPoll (poll) {
this.newStatus.poll = poll
},
clearPollForm () {
if (this.$refs.pollForm) {
this.$refs.pollForm.clear()
}
},
dismissScopeNotice () {
this.$store.dispatch('setOption', { name: 'hideScopeNotice', value: true })
},
setMediaDescription (id) {
const description = this.newStatus.mediaDescriptions[id]
if (!description || description.trim() === '') return
return statusPoster.setMediaDescription({ store: this.$store, id, description })
},
setAllMediaDescriptions () {
const ids = this.newStatus.files.map(file => file.id)
return Promise.all(ids.map(id => this.setMediaDescription(id)))
},
handleEmojiInputShow (value) {
this.emojiInputShown = value
},
updateIdempotencyKey () {
this.idempotencyKey = Date.now().toString()
+ },
+ openProfileTab () {
+ this.$store.dispatch('openSettingsModalTab', 'profile')
}
}
}
export default PostStatusForm
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 520c03ea1e..d67d9ae9c6 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -1,654 +1,657 @@
<template>
<div
ref="form"
class="post-status-form"
>
<form
autocomplete="off"
@submit.prevent
@dragover.prevent="fileDrag"
>
<div
v-show="showDropIcon !== 'hide'"
:style="{ animation: showDropIcon === 'show' ? 'fade-in 0.25s' : 'fade-out 0.5s' }"
class="drop-indicator"
:class="[uploadFileLimitReached ? 'icon-block' : 'icon-upload']"
@dragleave="fileDragStop"
@drop.stop="fileDrop"
/>
<div class="form-group">
<i18n
v-if="!$store.state.users.currentUser.locked && newStatus.visibility == 'private' && !disableLockWarning"
path="post_status.account_not_locked_warning"
tag="p"
class="visibility-notice"
>
- <router-link :to="{ name: 'user-settings' }">
+ <a
+ href="#"
+ @click="openProfileTab"
+ >
{{ $t('post_status.account_not_locked_warning_link') }}
- </router-link>
+ </a>
</i18n>
<p
v-if="!hideScopeNotice && newStatus.visibility === 'public'"
class="visibility-notice notice-dismissible"
>
<span>{{ $t('post_status.scope_notice.public') }}</span>
<a
class="button-icon dismiss"
@click.prevent="dismissScopeNotice()"
>
<i class="icon-cancel" />
</a>
</p>
<p
v-else-if="!hideScopeNotice && newStatus.visibility === 'unlisted'"
class="visibility-notice notice-dismissible"
>
<span>{{ $t('post_status.scope_notice.unlisted') }}</span>
<a
class="button-icon dismiss"
@click.prevent="dismissScopeNotice()"
>
<i class="icon-cancel" />
</a>
</p>
<p
v-else-if="!hideScopeNotice && newStatus.visibility === 'private' && $store.state.users.currentUser.locked"
class="visibility-notice notice-dismissible"
>
<span>{{ $t('post_status.scope_notice.private') }}</span>
<a
class="button-icon dismiss"
@click.prevent="dismissScopeNotice()"
>
<i class="icon-cancel" />
</a>
</p>
<p
v-else-if="newStatus.visibility === 'direct'"
class="visibility-notice"
>
<span v-if="safeDMEnabled">{{ $t('post_status.direct_warning_to_first_only') }}</span>
<span v-else>{{ $t('post_status.direct_warning_to_all') }}</span>
</p>
<div
v-if="!disablePreview"
class="preview-heading faint"
>
<a
class="preview-toggle faint"
@click.stop.prevent="togglePreview"
>
{{ $t('post_status.preview') }}
<i :class="showPreview ? 'icon-left-open' : 'icon-right-open'" />
</a>
<i
v-show="previewLoading"
class="icon-spin3 animate-spin"
/>
</div>
<div
v-if="showPreview"
class="preview-container"
>
<div
v-if="!preview"
class="preview-status"
>
{{ $t('general.loading') }}
</div>
<div
v-else-if="preview.error"
class="preview-status preview-error"
>
{{ preview.error }}
</div>
<StatusContent
v-else
:status="preview"
class="preview-status"
/>
</div>
<EmojiInput
v-if="!disableSubject && (newStatus.spoilerText || alwaysShowSubject)"
v-model="newStatus.spoilerText"
enable-emoji-picker
:suggest="emojiSuggestor"
class="form-control"
>
<input
v-model="newStatus.spoilerText"
type="text"
:placeholder="$t('post_status.content_warning')"
:disabled="posting"
class="form-post-subject"
>
</EmojiInput>
<EmojiInput
ref="emoji-input"
v-model="newStatus.status"
:suggest="emojiUserSuggestor"
:placement="emojiPickerPlacement"
class="form-control main-input"
enable-emoji-picker
hide-emoji-button
:newline-on-ctrl-enter="submitOnEnter"
enable-sticker-picker
@input="onEmojiInputInput"
@sticker-uploaded="addMediaFile"
@sticker-upload-failed="uploadFailed"
@shown="handleEmojiInputShow"
>
<textarea
ref="textarea"
v-model="newStatus.status"
:placeholder="placeholder || $t('post_status.default')"
rows="1"
cols="1"
:disabled="posting"
class="form-post-body"
:class="{ 'scrollable-form': !!maxHeight }"
@keydown.exact.enter="submitOnEnter && postStatus($event, newStatus)"
@keydown.meta.enter="postStatus($event, newStatus)"
@keydown.ctrl.enter="!submitOnEnter && postStatus($event, newStatus)"
@input="resize"
@compositionupdate="resize"
@paste="paste"
/>
<p
v-if="hasStatusLengthLimit"
class="character-counter faint"
:class="{ error: isOverLengthLimit }"
>
{{ charactersLeft }}
</p>
</EmojiInput>
<div
v-if="!disableScopeSelector"
class="visibility-tray"
>
<scope-selector
:show-all="showAllScopes"
:user-default="userDefaultScope"
:original-scope="copyMessageScope"
:initial-scope="newStatus.visibility"
:on-scope-change="changeVis"
/>
<div
v-if="postFormats.length > 1"
class="text-format"
>
<label
for="post-content-type"
class="select"
>
<select
id="post-content-type"
v-model="newStatus.contentType"
class="form-control"
>
<option
v-for="postFormat in postFormats"
:key="postFormat"
:value="postFormat"
>
{{ $t(`post_status.content_type["${postFormat}"]`) }}
</option>
</select>
<i class="icon-down-open" />
</label>
</div>
<div
v-if="postFormats.length === 1 && postFormats[0] !== 'text/plain'"
class="text-format"
>
<span class="only-format">
{{ $t(`post_status.content_type["${postFormats[0]}"]`) }}
</span>
</div>
</div>
</div>
<poll-form
v-if="pollsAvailable"
ref="pollForm"
:visible="pollFormVisible"
@update-poll="setPoll"
/>
<div
ref="bottom"
class="form-bottom"
>
<div class="form-bottom-left">
<media-upload
ref="mediaUpload"
class="media-upload-icon"
:drop-files="dropFiles"
:disabled="uploadFileLimitReached"
@uploading="startedUploadingFiles"
@uploaded="addMediaFile"
@upload-failed="uploadFailed"
@all-uploaded="finishedUploadingFiles"
/>
<div
class="emoji-icon"
>
<i
:title="$t('emoji.add_emoji')"
class="icon-smile btn btn-default"
@click="showEmojiPicker"
/>
</div>
<div
v-if="pollsAvailable"
class="poll-icon"
:class="{ selected: pollFormVisible }"
>
<i
:title="$t('polls.add_poll')"
class="icon-chart-bar btn btn-default"
@click="togglePollForm"
/>
</div>
</div>
<button
v-if="posting"
disabled
class="btn btn-default"
>
{{ $t('post_status.posting') }}
</button>
<button
v-else-if="isOverLengthLimit"
disabled
class="btn btn-default"
>
{{ $t('general.submit') }}
</button>
<!-- touchstart is used to keep the OSK at the same position after a message send -->
<button
v-else
:disabled="uploadingFiles || disableSubmit"
class="btn btn-default"
@touchstart.stop.prevent="postStatus($event, newStatus)"
@click.stop.prevent="postStatus($event, newStatus)"
>
{{ $t('general.submit') }}
</button>
</div>
<div
v-if="error"
class="alert error"
>
Error: {{ error }}
<i
class="button-icon icon-cancel"
@click="clearError"
/>
</div>
<div class="attachments">
<div
v-for="file in newStatus.files"
:key="file.url"
class="media-upload-wrapper"
>
<i
class="fa button-icon icon-cancel"
@click="removeMediaFile(file)"
/>
<attachment
:attachment="file"
:set-media="() => $store.dispatch('setMedia', newStatus.files)"
size="small"
allow-play="false"
/>
<input
v-model="newStatus.mediaDescriptions[file.id]"
type="text"
:placeholder="$t('post_status.media_description')"
@keydown.enter.prevent=""
>
</div>
</div>
<div
v-if="newStatus.files.length > 0 && !disableSensitivityCheckbox"
class="upload_settings"
>
<Checkbox v-model="newStatus.nsfw">
{{ $t('post_status.attachments_sensitive') }}
</Checkbox>
</div>
</form>
</div>
</template>
<script src="./post_status_form.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.tribute-container {
ul {
padding: 0px;
li {
display: flex;
align-items: center;
}
}
img {
padding: 3px;
width: 16px;
height: 16px;
border-radius: $fallback--avatarAltRadius;
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
}
}
.post-status-form {
position: relative;
.form-bottom {
display: flex;
justify-content: space-between;
padding: 0.5em;
height: 32px;
button {
width: 10em;
}
p {
margin: 0.35em;
padding: 0.35em;
display: flex;
}
}
.form-bottom-left {
display: flex;
flex: 1;
padding-right: 7px;
margin-right: 7px;
max-width: 10em;
}
.preview-heading {
padding-left: 0.5em;
display: flex;
width: 100%;
.icon-spin3 {
margin-left: auto;
}
}
.preview-toggle {
display: flex;
cursor: pointer;
user-select: none;
&:hover {
text-decoration: underline;
}
i {
margin-left: 0.2em;
font-size: 0.8em;
transform: rotate(90deg);
}
}
.preview-container {
margin-bottom: 1em;
}
.preview-error {
font-style: italic;
color: $fallback--faint;
color: var(--faint, $fallback--faint);
}
.preview-status {
border: 1px solid $fallback--border;
border: 1px solid var(--border, $fallback--border);
border-radius: $fallback--tooltipRadius;
border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
padding: 0.5em;
margin: 0;
line-height: 1.4em;
}
.text-format {
.only-format {
color: $fallback--faint;
color: var(--faint, $fallback--faint);
}
}
.visibility-tray {
display: flex;
justify-content: space-between;
padding-top: 5px;
}
.media-upload-icon, .poll-icon, .emoji-icon {
font-size: 26px;
flex: 1;
&.selected, &:hover {
// needs to be specific to override icon default color
i, label {
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
}
}
&.disabled {
i {
cursor: not-allowed;
color: $fallback--icon;
color: var(--btnDisabledText, $fallback--icon);
&:hover {
color: $fallback--icon;
color: var(--btnDisabledText, $fallback--icon);
}
}
}
}
// Order is not necessary but a good indicator
.media-upload-icon {
order: 1;
text-align: left;
}
.emoji-icon {
order: 2;
text-align: center;
}
.poll-icon {
order: 3;
text-align: right;
}
.icon-chart-bar {
cursor: pointer;
}
.error {
text-align: center;
}
.media-upload-wrapper {
margin-right: .2em;
margin-bottom: .5em;
width: 18em;
.icon-cancel {
display: inline-block;
position: static;
margin: 0;
padding-bottom: 0;
margin-left: $fallback--attachmentRadius;
margin-left: var(--attachmentRadius, $fallback--attachmentRadius);
background-color: $fallback--fg;
background-color: var(--btn, $fallback--fg);
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
img, video {
object-fit: contain;
max-height: 10em;
}
.video {
max-height: 10em;
}
input {
flex: 1;
width: 100%;
}
}
.status-input-wrapper {
display: flex;
position: relative;
width: 100%;
flex-direction: column;
}
.media-upload-wrapper .attachments {
padding: 0 0.5em;
.attachment {
margin: 0;
padding: 0;
position: relative;
}
i {
position: absolute;
margin: 10px;
padding: 5px;
background: rgba(230,230,230,0.6);
border-radius: $fallback--attachmentRadius;
border-radius: var(--attachmentRadius, $fallback--attachmentRadius);
font-weight: bold;
}
}
.btn {
cursor: pointer;
}
.btn[disabled] {
cursor: not-allowed;
}
form {
display: flex;
flex-direction: column;
margin: 0.6em;
position: relative;
}
.form-group {
display: flex;
flex-direction: column;
padding: 0.25em 0.5em 0.5em;
line-height:24px;
}
form textarea.form-cw {
line-height:16px;
resize: none;
overflow: hidden;
transition: min-height 200ms 100ms;
min-height: 1px;
}
.form-post-body {
height: 16px; // Only affects the empty-height
line-height: 16px;
resize: none;
overflow: hidden;
transition: min-height 200ms 100ms;
padding-bottom: 1.75em;
min-height: 1px;
box-sizing: content-box;
&.scrollable-form {
overflow-y: auto;
}
}
.main-input {
position: relative;
}
.character-counter {
position: absolute;
bottom: 0;
right: 0;
padding: 0;
margin: 0 0.5em;
&.error {
color: $fallback--cRed;
color: var(--cRed, $fallback--cRed);
}
}
.btn {
cursor: pointer;
}
.btn[disabled] {
cursor: not-allowed;
}
.icon-cancel {
cursor: pointer;
z-index: 4;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 0.6; }
}
@keyframes fade-out {
from { opacity: 0.6; }
to { opacity: 0; }
}
.drop-indicator {
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
font-size: 5em;
display: flex;
align-items: center;
justify-content: center;
opacity: 0.6;
color: $fallback--text;
color: var(--text, $fallback--text);
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
border-radius: $fallback--tooltipRadius;
border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
border: 2px dashed $fallback--text;
border: 2px dashed var(--text, $fallback--text);
}
}
// todo: unify with attachment.vue (otherwise the uploaded images are not minified unless a status with an attachment was displayed before)
img.media-upload, .media-upload-container > video {
line-height: 0;
max-height: 200px;
max-width: 100%;
}
</style>
diff --git a/src/components/settings_modal/settings_modal_content.js b/src/components/settings_modal/settings_modal_content.js
index 48101a9069..ef1a5ffa02 100644
--- a/src/components/settings_modal/settings_modal_content.js
+++ b/src/components/settings_modal/settings_modal_content.js
@@ -1,34 +1,62 @@
import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'
import DataImportExportTab from './tabs/data_import_export_tab.vue'
import MutesAndBlocksTab from './tabs/mutes_and_blocks_tab.vue'
import NotificationsTab from './tabs/notifications_tab.vue'
import FilteringTab from './tabs/filtering_tab.vue'
import SecurityTab from './tabs/security_tab/security_tab.vue'
import ProfileTab from './tabs/profile_tab.vue'
import GeneralTab from './tabs/general_tab.vue'
import VersionTab from './tabs/version_tab.vue'
import ThemeTab from './tabs/theme_tab/theme_tab.vue'
const SettingsModalContent = {
components: {
TabSwitcher,
DataImportExportTab,
MutesAndBlocksTab,
NotificationsTab,
FilteringTab,
SecurityTab,
ProfileTab,
GeneralTab,
VersionTab,
ThemeTab
},
computed: {
isLoggedIn () {
return !!this.$store.state.users.currentUser
+ },
+ open () {
+ return this.$store.state.interface.settingsModalState !== 'hidden'
+ }
+ },
+ methods: {
+ onOpen () {
+ const targetTab = this.$store.state.interface.settingsModalTargetTab
+ // We're being told to open in specific tab
+ if (targetTab) {
+ const tabIndex = this.$refs.tabSwitcher.$slots.default.findIndex(elm => {
+ return elm.data && elm.data.attrs['data-tab-name'] === targetTab
+ })
+ if (tabIndex >= 0) {
+ this.$refs.tabSwitcher.setTab(tabIndex)
+ }
+ }
+ // Clear the state of target tab, so that next time settings is opened
+ // it doesn't force it.
+ this.$store.dispatch('clearSettingsModalTargetTab')
+ }
+ },
+ mounted () {
+ this.onOpen()
+ },
+ watch: {
+ open: function (value) {
+ if (value) this.onOpen()
}
}
}
export default SettingsModalContent
diff --git a/src/components/settings_modal/settings_modal_content.vue b/src/components/settings_modal/settings_modal_content.vue
index 2156844f28..bc30a0ff7d 100644
--- a/src/components/settings_modal/settings_modal_content.vue
+++ b/src/components/settings_modal/settings_modal_content.vue
@@ -1,73 +1,82 @@
<template>
<tab-switcher
ref="tabSwitcher"
class="settings_tab-switcher"
:side-tab-bar="true"
:scrollable-tabs="true"
>
<div
:label="$t('settings.general')"
icon="wrench"
+ data-tab-name="general"
>
<GeneralTab />
</div>
<div
v-if="isLoggedIn"
:label="$t('settings.profile_tab')"
icon="user"
+ data-tab-name="profile"
>
<ProfileTab />
</div>
<div
v-if="isLoggedIn"
:label="$t('settings.security_tab')"
icon="lock"
+ data-tab-name="security"
>
<SecurityTab />
</div>
<div
:label="$t('settings.filtering')"
icon="filter"
+ data-tab-name="filtering"
>
<FilteringTab />
</div>
<div
:label="$t('settings.theme')"
icon="brush"
+ data-tab-name="theme"
>
<ThemeTab />
</div>
<div
v-if="isLoggedIn"
:label="$t('settings.notifications')"
icon="bell-ringing-o"
+ data-tab-name="notifications"
>
<NotificationsTab />
</div>
<div
v-if="isLoggedIn"
:label="$t('settings.data_import_export_tab')"
icon="download"
+ data-tab-name="dataImportExport"
>
<DataImportExportTab />
</div>
<div
v-if="isLoggedIn"
:label="$t('settings.mutes_and_blocks')"
:fullHeight="true"
icon="eye-off"
+ data-tab-name="mutesAndBlocks"
>
<MutesAndBlocksTab />
</div>
<div
:label="$t('settings.version.title')"
icon="info-circled"
+ data-tab-name="version"
>
<VersionTab />
</div>
</tab-switcher>
</template>
<script src="./settings_modal_content.js"></script>
<style src="./settings_modal_content.scss" lang="scss"></style>
diff --git a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
index d57894dedb..5328c35088 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
@@ -1,1032 +1,1032 @@
<template>
<div class="theme-tab">
<div class="presets-container">
<div class="save-load">
<div
v-if="themeWarning"
class="theme-warning"
>
<div class="alert warning">
{{ themeWarningHelp }}
</div>
<div class="buttons">
<template v-if="themeWarning.type === 'snapshot_source_mismatch'">
<button
class="btn"
@click="forceLoad"
>
{{ $t('settings.style.switcher.use_source') }}
</button>
<button
class="btn"
@click="forceSnapshot"
>
{{ $t('settings.style.switcher.use_snapshot') }}
</button>
</template>
<template v-else-if="themeWarning.noActionsPossible">
<button
class="btn"
@click="dismissWarning"
>
{{ $t('general.dismiss') }}
</button>
</template>
<template v-else>
<button
class="btn"
@click="forceLoad"
>
{{ $t('settings.style.switcher.load_theme') }}
</button>
<button
class="btn"
@click="dismissWarning"
>
{{ $t('settings.style.switcher.keep_as_is') }}
</button>
</template>
</div>
</div>
<ExportImport
:export-object="exportedTheme"
:export-label="$t(&quot;settings.export_theme&quot;)"
:import-label="$t(&quot;settings.import_theme&quot;)"
:import-failed-text="$t(&quot;settings.invalid_theme_imported&quot;)"
:on-import="onImport"
:validator="importValidator"
>
<template slot="before">
<div class="presets">
{{ $t('settings.presets') }}
<label
for="preset-switcher"
class="select"
>
<select
id="preset-switcher"
v-model="selected"
class="preset-switcher"
>
<option
v-for="style in availableStyles"
:key="style.name"
:value="style"
:style="{
backgroundColor: style[1] || (style.theme || style.source).colors.bg,
color: style[3] || (style.theme || style.source).colors.text
}"
>
{{ style[0] || style.name }}
</option>
</select>
<i class="icon-down-open" />
</label>
</div>
</template>
</ExportImport>
</div>
<div class="save-load-options">
<span class="keep-option">
<Checkbox v-model="keepColor">
{{ $t('settings.style.switcher.keep_color') }}
</Checkbox>
</span>
<span class="keep-option">
<Checkbox v-model="keepShadows">
{{ $t('settings.style.switcher.keep_shadows') }}
</Checkbox>
</span>
<span class="keep-option">
<Checkbox v-model="keepOpacity">
{{ $t('settings.style.switcher.keep_opacity') }}
</Checkbox>
</span>
<span class="keep-option">
<Checkbox v-model="keepRoundness">
{{ $t('settings.style.switcher.keep_roundness') }}
</Checkbox>
</span>
<span class="keep-option">
<Checkbox v-model="keepFonts">
{{ $t('settings.style.switcher.keep_fonts') }}
</Checkbox>
</span>
<p>{{ $t('settings.style.switcher.save_load_hint') }}</p>
</div>
</div>
<preview :style="previewRules" />
<keep-alive>
<tab-switcher key="style-tweak">
<div
:label="$t('settings.style.common_colors._tab_label')"
class="color-container"
>
<div class="tab-header">
<p>{{ $t('settings.theme_help') }}</p>
<div class="tab-header-buttons">
<button
class="btn"
@click="clearOpacity"
>
{{ $t('settings.style.switcher.clear_opacity') }}
</button>
<button
class="btn"
@click="clearV1"
>
{{ $t('settings.style.switcher.clear_all') }}
</button>
</div>
</div>
<p>{{ $t('settings.theme_help_v2_1') }}</p>
<h4>{{ $t('settings.style.common_colors.main') }}</h4>
<div class="color-item">
<ColorInput
v-model="bgColorLocal"
name="bgColor"
:label="$t('settings.background')"
/>
<OpacityInput
v-model="bgOpacityLocal"
name="bgOpacity"
:fallback="previewTheme.opacity.bg"
/>
<ColorInput
v-model="textColorLocal"
name="textColor"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.bgText" />
<ColorInput
v-model="accentColorLocal"
name="accentColor"
:fallback="previewTheme.colors.link"
:label="$t('settings.accent')"
:show-optional-tickbox="typeof linkColorLocal !== 'undefined'"
/>
<ColorInput
v-model="linkColorLocal"
name="linkColor"
:fallback="previewTheme.colors.accent"
:label="$t('settings.links')"
:show-optional-tickbox="typeof accentColorLocal !== 'undefined'"
/>
<ContrastRatio :contrast="previewContrast.bgLink" />
</div>
<div class="color-item">
<ColorInput
v-model="fgColorLocal"
name="fgColor"
:label="$t('settings.foreground')"
/>
<ColorInput
v-model="fgTextColorLocal"
name="fgTextColor"
:label="$t('settings.text')"
:fallback="previewTheme.colors.fgText"
/>
<ColorInput
v-model="fgLinkColorLocal"
name="fgLinkColor"
:label="$t('settings.links')"
:fallback="previewTheme.colors.fgLink"
/>
<p>{{ $t('settings.style.common_colors.foreground_hint') }}</p>
</div>
<h4>{{ $t('settings.style.common_colors.rgbo') }}</h4>
<div class="color-item">
<ColorInput
v-model="cRedColorLocal"
name="cRedColor"
:label="$t('settings.cRed')"
/>
<ContrastRatio :contrast="previewContrast.bgCRed" />
<ColorInput
v-model="cBlueColorLocal"
name="cBlueColor"
:label="$t('settings.cBlue')"
/>
<ContrastRatio :contrast="previewContrast.bgCBlue" />
</div>
<div class="color-item">
<ColorInput
v-model="cGreenColorLocal"
name="cGreenColor"
:label="$t('settings.cGreen')"
/>
<ContrastRatio :contrast="previewContrast.bgCGreen" />
<ColorInput
v-model="cOrangeColorLocal"
name="cOrangeColor"
:label="$t('settings.cOrange')"
/>
<ContrastRatio :contrast="previewContrast.bgCOrange" />
</div>
<p>{{ $t('settings.theme_help_v2_2') }}</p>
</div>
<div
:label="$t('settings.style.advanced_colors._tab_label')"
class="color-container"
>
<div class="tab-header">
<p>{{ $t('settings.theme_help') }}</p>
<button
class="btn"
@click="clearOpacity"
>
{{ $t('settings.style.switcher.clear_opacity') }}
</button>
<button
class="btn"
@click="clearV1"
>
{{ $t('settings.style.switcher.clear_all') }}
</button>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.post') }}</h4>
<ColorInput
v-model="postLinkColorLocal"
name="postLinkColor"
:fallback="previewTheme.colors.accent"
:label="$t('settings.links')"
/>
<ContrastRatio :contrast="previewContrast.postLink" />
<ColorInput
v-model="postGreentextColorLocal"
name="postGreentextColor"
:fallback="previewTheme.colors.cGreen"
:label="$t('settings.greentext')"
/>
<ContrastRatio :contrast="previewContrast.postGreentext" />
<h4>{{ $t('settings.style.advanced_colors.alert') }}</h4>
<ColorInput
v-model="alertErrorColorLocal"
name="alertError"
:label="$t('settings.style.advanced_colors.alert_error')"
:fallback="previewTheme.colors.alertError"
/>
<ColorInput
v-model="alertErrorTextColorLocal"
name="alertErrorText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.alertErrorText"
/>
<ContrastRatio
:contrast="previewContrast.alertErrorText"
- large="true"
+ large
/>
<ColorInput
v-model="alertWarningColorLocal"
name="alertWarning"
:label="$t('settings.style.advanced_colors.alert_warning')"
:fallback="previewTheme.colors.alertWarning"
/>
<ColorInput
v-model="alertWarningTextColorLocal"
name="alertWarningText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.alertWarningText"
/>
<ContrastRatio
:contrast="previewContrast.alertWarningText"
- large="true"
+ large
/>
<ColorInput
v-model="alertNeutralColorLocal"
name="alertNeutral"
:label="$t('settings.style.advanced_colors.alert_neutral')"
:fallback="previewTheme.colors.alertNeutral"
/>
<ColorInput
v-model="alertNeutralTextColorLocal"
name="alertNeutralText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.alertNeutralText"
/>
<ContrastRatio
:contrast="previewContrast.alertNeutralText"
- large="true"
+ large
/>
<OpacityInput
v-model="alertOpacityLocal"
name="alertOpacity"
:fallback="previewTheme.opacity.alert"
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.badge') }}</h4>
<ColorInput
v-model="badgeNotificationColorLocal"
name="badgeNotification"
:label="$t('settings.style.advanced_colors.badge_notification')"
:fallback="previewTheme.colors.badgeNotification"
/>
<ColorInput
v-model="badgeNotificationTextColorLocal"
name="badgeNotificationText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.badgeNotificationText"
/>
<ContrastRatio
:contrast="previewContrast.badgeNotificationText"
- large="true"
+ large
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.panel_header') }}</h4>
<ColorInput
v-model="panelColorLocal"
name="panelColor"
:fallback="previewTheme.colors.panel"
:label="$t('settings.background')"
/>
<OpacityInput
v-model="panelOpacityLocal"
name="panelOpacity"
:fallback="previewTheme.opacity.panel"
:disabled="panelColorLocal === 'transparent'"
/>
<ColorInput
v-model="panelTextColorLocal"
name="panelTextColor"
:fallback="previewTheme.colors.panelText"
:label="$t('settings.text')"
/>
<ContrastRatio
:contrast="previewContrast.panelText"
- large="true"
+ large
/>
<ColorInput
v-model="panelLinkColorLocal"
name="panelLinkColor"
:fallback="previewTheme.colors.panelLink"
:label="$t('settings.links')"
/>
<ContrastRatio
:contrast="previewContrast.panelLink"
- large="true"
+ large
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.top_bar') }}</h4>
<ColorInput
v-model="topBarColorLocal"
name="topBarColor"
:fallback="previewTheme.colors.topBar"
:label="$t('settings.background')"
/>
<ColorInput
v-model="topBarTextColorLocal"
name="topBarTextColor"
:fallback="previewTheme.colors.topBarText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.topBarText" />
<ColorInput
v-model="topBarLinkColorLocal"
name="topBarLinkColor"
:fallback="previewTheme.colors.topBarLink"
:label="$t('settings.links')"
/>
<ContrastRatio :contrast="previewContrast.topBarLink" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.inputs') }}</h4>
<ColorInput
v-model="inputColorLocal"
name="inputColor"
:fallback="previewTheme.colors.input"
:label="$t('settings.background')"
/>
<OpacityInput
v-model="inputOpacityLocal"
name="inputOpacity"
:fallback="previewTheme.opacity.input"
:disabled="inputColorLocal === 'transparent'"
/>
<ColorInput
v-model="inputTextColorLocal"
name="inputTextColor"
:fallback="previewTheme.colors.inputText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.inputText" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.buttons') }}</h4>
<ColorInput
v-model="btnColorLocal"
name="btnColor"
:fallback="previewTheme.colors.btn"
:label="$t('settings.background')"
/>
<OpacityInput
v-model="btnOpacityLocal"
name="btnOpacity"
:fallback="previewTheme.opacity.btn"
:disabled="btnColorLocal === 'transparent'"
/>
<ColorInput
v-model="btnTextColorLocal"
name="btnTextColor"
:fallback="previewTheme.colors.btnText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.btnText" />
<ColorInput
v-model="btnPanelTextColorLocal"
name="btnPanelTextColor"
:fallback="previewTheme.colors.btnPanelText"
:label="$t('settings.style.advanced_colors.panel_header')"
/>
<ContrastRatio :contrast="previewContrast.btnPanelText" />
<ColorInput
v-model="btnTopBarTextColorLocal"
name="btnTopBarTextColor"
:fallback="previewTheme.colors.btnTopBarText"
:label="$t('settings.style.advanced_colors.top_bar')"
/>
<ContrastRatio :contrast="previewContrast.btnTopBarText" />
<h5>{{ $t('settings.style.advanced_colors.pressed') }}</h5>
<ColorInput
v-model="btnPressedColorLocal"
name="btnPressedColor"
:fallback="previewTheme.colors.btnPressed"
:label="$t('settings.background')"
/>
<ColorInput
v-model="btnPressedTextColorLocal"
name="btnPressedTextColor"
:fallback="previewTheme.colors.btnPressedText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.btnPressedText" />
<ColorInput
v-model="btnPressedPanelTextColorLocal"
name="btnPressedPanelTextColor"
:fallback="previewTheme.colors.btnPressedPanelText"
:label="$t('settings.style.advanced_colors.panel_header')"
/>
<ContrastRatio :contrast="previewContrast.btnPressedPanelText" />
<ColorInput
v-model="btnPressedTopBarTextColorLocal"
name="btnPressedTopBarTextColor"
:fallback="previewTheme.colors.btnPressedTopBarText"
:label="$t('settings.style.advanced_colors.top_bar')"
/>
<ContrastRatio :contrast="previewContrast.btnPressedTopBarText" />
<h5>{{ $t('settings.style.advanced_colors.disabled') }}</h5>
<ColorInput
v-model="btnDisabledColorLocal"
name="btnDisabledColor"
:fallback="previewTheme.colors.btnDisabled"
:label="$t('settings.background')"
/>
<ColorInput
v-model="btnDisabledTextColorLocal"
name="btnDisabledTextColor"
:fallback="previewTheme.colors.btnDisabledText"
:label="$t('settings.text')"
/>
<ColorInput
v-model="btnDisabledPanelTextColorLocal"
name="btnDisabledPanelTextColor"
:fallback="previewTheme.colors.btnDisabledPanelText"
:label="$t('settings.style.advanced_colors.panel_header')"
/>
<ColorInput
v-model="btnDisabledTopBarTextColorLocal"
name="btnDisabledTopBarTextColor"
:fallback="previewTheme.colors.btnDisabledTopBarText"
:label="$t('settings.style.advanced_colors.top_bar')"
/>
<h5>{{ $t('settings.style.advanced_colors.toggled') }}</h5>
<ColorInput
v-model="btnToggledColorLocal"
name="btnToggledColor"
:fallback="previewTheme.colors.btnToggled"
:label="$t('settings.background')"
/>
<ColorInput
v-model="btnToggledTextColorLocal"
name="btnToggledTextColor"
:fallback="previewTheme.colors.btnToggledText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.btnToggledText" />
<ColorInput
v-model="btnToggledPanelTextColorLocal"
name="btnToggledPanelTextColor"
:fallback="previewTheme.colors.btnToggledPanelText"
:label="$t('settings.style.advanced_colors.panel_header')"
/>
<ContrastRatio :contrast="previewContrast.btnToggledPanelText" />
<ColorInput
v-model="btnToggledTopBarTextColorLocal"
name="btnToggledTopBarTextColor"
:fallback="previewTheme.colors.btnToggledTopBarText"
:label="$t('settings.style.advanced_colors.top_bar')"
/>
<ContrastRatio :contrast="previewContrast.btnToggledTopBarText" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.tabs') }}</h4>
<ColorInput
v-model="tabColorLocal"
name="tabColor"
:fallback="previewTheme.colors.tab"
:label="$t('settings.background')"
/>
<ColorInput
v-model="tabTextColorLocal"
name="tabTextColor"
:fallback="previewTheme.colors.tabText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.tabText" />
<ColorInput
v-model="tabActiveTextColorLocal"
name="tabActiveTextColor"
:fallback="previewTheme.colors.tabActiveText"
:label="$t('settings.text')"
/>
<ContrastRatio :contrast="previewContrast.tabActiveText" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.borders') }}</h4>
<ColorInput
v-model="borderColorLocal"
name="borderColor"
:fallback="previewTheme.colors.border"
:label="$t('settings.style.common.color')"
/>
<OpacityInput
v-model="borderOpacityLocal"
name="borderOpacity"
:fallback="previewTheme.opacity.border"
:disabled="borderColorLocal === 'transparent'"
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.faint_text') }}</h4>
<ColorInput
v-model="faintColorLocal"
name="faintColor"
:fallback="previewTheme.colors.faint"
:label="$t('settings.text')"
/>
<ColorInput
v-model="faintLinkColorLocal"
name="faintLinkColor"
:fallback="previewTheme.colors.faintLink"
:label="$t('settings.links')"
/>
<ColorInput
v-model="panelFaintColorLocal"
name="panelFaintColor"
:fallback="previewTheme.colors.panelFaint"
:label="$t('settings.style.advanced_colors.panel_header')"
/>
<OpacityInput
v-model="faintOpacityLocal"
name="faintOpacity"
:fallback="previewTheme.opacity.faint"
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.underlay') }}</h4>
<ColorInput
v-model="underlayColorLocal"
name="underlay"
:label="$t('settings.style.advanced_colors.underlay')"
:fallback="previewTheme.colors.underlay"
/>
<OpacityInput
v-model="underlayOpacityLocal"
name="underlayOpacity"
:fallback="previewTheme.opacity.underlay"
:disabled="underlayOpacityLocal === 'transparent'"
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.poll') }}</h4>
<ColorInput
v-model="pollColorLocal"
name="poll"
:label="$t('settings.background')"
:fallback="previewTheme.colors.poll"
/>
<ColorInput
v-model="pollTextColorLocal"
name="pollText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.pollText"
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.icons') }}</h4>
<ColorInput
v-model="iconColorLocal"
name="icon"
:label="$t('settings.style.advanced_colors.icons')"
:fallback="previewTheme.colors.icon"
/>
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.highlight') }}</h4>
<ColorInput
v-model="highlightColorLocal"
name="highlight"
:label="$t('settings.background')"
:fallback="previewTheme.colors.highlight"
/>
<ColorInput
v-model="highlightTextColorLocal"
name="highlightText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.highlightText"
/>
<ContrastRatio :contrast="previewContrast.highlightText" />
<ColorInput
v-model="highlightLinkColorLocal"
name="highlightLink"
:label="$t('settings.links')"
:fallback="previewTheme.colors.highlightLink"
/>
<ContrastRatio :contrast="previewContrast.highlightLink" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.popover') }}</h4>
<ColorInput
v-model="popoverColorLocal"
name="popover"
:label="$t('settings.background')"
:fallback="previewTheme.colors.popover"
/>
<OpacityInput
v-model="popoverOpacityLocal"
name="popoverOpacity"
:fallback="previewTheme.opacity.popover"
:disabled="popoverOpacityLocal === 'transparent'"
/>
<ColorInput
v-model="popoverTextColorLocal"
name="popoverText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.popoverText"
/>
<ContrastRatio :contrast="previewContrast.popoverText" />
<ColorInput
v-model="popoverLinkColorLocal"
name="popoverLink"
:label="$t('settings.links')"
:fallback="previewTheme.colors.popoverLink"
/>
<ContrastRatio :contrast="previewContrast.popoverLink" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.selectedPost') }}</h4>
<ColorInput
v-model="selectedPostColorLocal"
name="selectedPost"
:label="$t('settings.background')"
:fallback="previewTheme.colors.selectedPost"
/>
<ColorInput
v-model="selectedPostTextColorLocal"
name="selectedPostText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.selectedPostText"
/>
<ContrastRatio :contrast="previewContrast.selectedPostText" />
<ColorInput
v-model="selectedPostLinkColorLocal"
name="selectedPostLink"
:label="$t('settings.links')"
:fallback="previewTheme.colors.selectedPostLink"
/>
<ContrastRatio :contrast="previewContrast.selectedPostLink" />
</div>
<div class="color-item">
<h4>{{ $t('settings.style.advanced_colors.selectedMenu') }}</h4>
<ColorInput
v-model="selectedMenuColorLocal"
name="selectedMenu"
:label="$t('settings.background')"
:fallback="previewTheme.colors.selectedMenu"
/>
<ColorInput
v-model="selectedMenuTextColorLocal"
name="selectedMenuText"
:label="$t('settings.text')"
:fallback="previewTheme.colors.selectedMenuText"
/>
<ContrastRatio :contrast="previewContrast.selectedMenuText" />
<ColorInput
v-model="selectedMenuLinkColorLocal"
name="selectedMenuLink"
:label="$t('settings.links')"
:fallback="previewTheme.colors.selectedMenuLink"
/>
<ContrastRatio :contrast="previewContrast.selectedMenuLink" />
</div>
<div class="color-item">
<h4>{{ $t('chats.chats') }}</h4>
<ColorInput
v-model="chatBgColorLocal"
name="chatBgColor"
- :fallback="previewTheme.colors.bg || 1"
+ :fallback="previewTheme.colors.bg"
:label="$t('settings.background')"
/>
<h5>{{ $t('settings.style.advanced_colors.chat.incoming') }}</h5>
<ColorInput
v-model="chatMessageIncomingBgColorLocal"
name="chatMessageIncomingBgColor"
- :fallback="previewTheme.colors.bg || 1"
+ :fallback="previewTheme.colors.bg"
:label="$t('settings.background')"
/>
<ColorInput
v-model="chatMessageIncomingTextColorLocal"
name="chatMessageIncomingTextColor"
- :fallback="previewTheme.colors.text || 1"
+ :fallback="previewTheme.colors.text"
:label="$t('settings.text')"
/>
<ColorInput
v-model="chatMessageIncomingLinkColorLocal"
name="chatMessageIncomingLinkColor"
- :fallback="previewTheme.colors.link || 1"
+ :fallback="previewTheme.colors.link"
:label="$t('settings.links')"
/>
<ColorInput
v-model="chatMessageIncomingBorderColorLocal"
name="chatMessageIncomingBorderLinkColor"
- :fallback="previewTheme.colors.fg || 1"
+ :fallback="previewTheme.colors.fg"
:label="$t('settings.style.advanced_colors.chat.border')"
/>
<h5>{{ $t('settings.style.advanced_colors.chat.outgoing') }}</h5>
<ColorInput
v-model="chatMessageOutgoingBgColorLocal"
name="chatMessageOutgoingBgColor"
- :fallback="previewTheme.colors.bg || 1"
+ :fallback="previewTheme.colors.bg"
:label="$t('settings.background')"
/>
<ColorInput
v-model="chatMessageOutgoingTextColorLocal"
name="chatMessageOutgoingTextColor"
- :fallback="previewTheme.colors.text || 1"
+ :fallback="previewTheme.colors.text"
:label="$t('settings.text')"
/>
<ColorInput
v-model="chatMessageOutgoingLinkColorLocal"
name="chatMessageOutgoingLinkColor"
- :fallback="previewTheme.colors.link || 1"
+ :fallback="previewTheme.colors.link"
:label="$t('settings.links')"
/>
<ColorInput
v-model="chatMessageOutgoingBorderColorLocal"
name="chatMessageOutgoingBorderLinkColor"
- :fallback="previewTheme.colors.bg || 1"
+ :fallback="previewTheme.colors.bg"
:label="$t('settings.style.advanced_colors.chat.border')"
/>
</div>
</div>
<div
:label="$t('settings.style.radii._tab_label')"
class="radius-container"
>
<div class="tab-header">
<p>{{ $t('settings.radii_help') }}</p>
<button
class="btn"
@click="clearRoundness"
>
{{ $t('settings.style.switcher.clear_all') }}
</button>
</div>
<RangeInput
v-model="btnRadiusLocal"
name="btnRadius"
:label="$t('settings.btnRadius')"
:fallback="previewTheme.radii.btn"
max="16"
hard-min="0"
/>
<RangeInput
v-model="inputRadiusLocal"
name="inputRadius"
:label="$t('settings.inputRadius')"
:fallback="previewTheme.radii.input"
max="9"
hard-min="0"
/>
<RangeInput
v-model="checkboxRadiusLocal"
name="checkboxRadius"
:label="$t('settings.checkboxRadius')"
:fallback="previewTheme.radii.checkbox"
max="16"
hard-min="0"
/>
<RangeInput
v-model="panelRadiusLocal"
name="panelRadius"
:label="$t('settings.panelRadius')"
:fallback="previewTheme.radii.panel"
max="50"
hard-min="0"
/>
<RangeInput
v-model="avatarRadiusLocal"
name="avatarRadius"
:label="$t('settings.avatarRadius')"
:fallback="previewTheme.radii.avatar"
max="28"
hard-min="0"
/>
<RangeInput
v-model="avatarAltRadiusLocal"
name="avatarAltRadius"
:label="$t('settings.avatarAltRadius')"
:fallback="previewTheme.radii.avatarAlt"
max="28"
hard-min="0"
/>
<RangeInput
v-model="attachmentRadiusLocal"
name="attachmentRadius"
:label="$t('settings.attachmentRadius')"
:fallback="previewTheme.radii.attachment"
max="50"
hard-min="0"
/>
<RangeInput
v-model="tooltipRadiusLocal"
name="tooltipRadius"
:label="$t('settings.tooltipRadius')"
:fallback="previewTheme.radii.tooltip"
max="50"
hard-min="0"
/>
<RangeInput
v-model="chatMessageRadiusLocal"
name="chatMessageRadius"
:label="$t('settings.chatMessageRadius')"
:fallback="previewTheme.radii.chatMessage || 2"
max="50"
hard-min="0"
/>
</div>
<div
:label="$t('settings.style.shadows._tab_label')"
class="shadow-container"
>
<div class="tab-header shadow-selector">
<div class="select-container">
{{ $t('settings.style.shadows.component') }}
<label
for="shadow-switcher"
class="select"
>
<select
id="shadow-switcher"
v-model="shadowSelected"
class="shadow-switcher"
>
<option
v-for="shadow in shadowsAvailable"
:key="shadow"
:value="shadow"
>
{{ $t('settings.style.shadows.components.' + shadow) }}
</option>
</select>
<i class="icon-down-open" />
</label>
</div>
<div class="override">
<label
for="override"
class="label"
>
{{ $t('settings.style.shadows.override') }}
</label>
<input
id="override"
v-model="currentShadowOverriden"
name="override"
class="input-override"
type="checkbox"
>
<label
class="checkbox-label"
for="override"
/>
</div>
<button
class="btn"
@click="clearShadows"
>
{{ $t('settings.style.switcher.clear_all') }}
</button>
</div>
<ShadowControl
v-model="currentShadow"
:ready="!!currentShadowFallback"
:fallback="currentShadowFallback"
/>
<div v-if="shadowSelected === 'avatar' || shadowSelected === 'avatarStatus'">
<i18n
path="settings.style.shadows.filter_hint.always_drop_shadow"
tag="p"
>
<code>filter: drop-shadow()</code>
</i18n>
<p>{{ $t('settings.style.shadows.filter_hint.avatar_inset') }}</p>
<i18n
path="settings.style.shadows.filter_hint.drop_shadow_syntax"
tag="p"
>
<code>drop-shadow</code>
<code>spread-radius</code>
<code>inset</code>
</i18n>
<i18n
path="settings.style.shadows.filter_hint.inset_classic"
tag="p"
>
<code>box-shadow</code>
</i18n>
<p>{{ $t('settings.style.shadows.filter_hint.spread_zero') }}</p>
</div>
</div>
<div
:label="$t('settings.style.fonts._tab_label')"
class="fonts-container"
>
<div class="tab-header">
<p>{{ $t('settings.style.fonts.help') }}</p>
<button
class="btn"
@click="clearFonts"
>
{{ $t('settings.style.switcher.clear_all') }}
</button>
</div>
<FontControl
v-model="fontsLocal.interface"
name="ui"
:label="$t('settings.style.fonts.components.interface')"
:fallback="previewTheme.fonts.interface"
no-inherit="1"
/>
<FontControl
v-model="fontsLocal.input"
name="input"
:label="$t('settings.style.fonts.components.input')"
:fallback="previewTheme.fonts.input"
/>
<FontControl
v-model="fontsLocal.post"
name="post"
:label="$t('settings.style.fonts.components.post')"
:fallback="previewTheme.fonts.post"
/>
<FontControl
v-model="fontsLocal.postCode"
name="postCode"
:label="$t('settings.style.fonts.components.postCode')"
:fallback="previewTheme.fonts.postCode"
/>
</div>
</tab-switcher>
</keep-alive>
<div class="apply-container">
<button
class="btn submit"
:disabled="!themeValid"
@click="setCustomTheme"
>
{{ $t('general.apply') }}
</button>
<button
class="btn"
@click="clearAll"
>
{{ $t('settings.style.switcher.reset') }}
</button>
</div>
</div>
</template>
<script src="./theme_tab.js"></script>
<style src="./theme_tab.scss" lang="scss"></style>
diff --git a/src/components/status_content/status_content.vue b/src/components/status_content/status_content.vue
index dc9e0af7c8..f7fb5ee23f 100644
--- a/src/components/status_content/status_content.vue
+++ b/src/components/status_content/status_content.vue
@@ -1,289 +1,293 @@
<template>
<!-- eslint-disable vue/no-v-html -->
<div class="StatusContent">
<slot name="header" />
<div
v-if="status.summary_html"
class="summary-wrapper"
:class="{ 'tall-subject': (longSubject && !showingLongSubject) }"
>
<div
class="media-body summary"
@click.prevent="linkClicked"
v-html="status.summary_html"
/>
<a
v-if="longSubject && showingLongSubject"
href="#"
class="tall-subject-hider"
@click.prevent="showingLongSubject=false"
>{{ $t("status.hide_full_subject") }}</a>
<a
v-else-if="longSubject"
class="tall-subject-hider"
:class="{ 'tall-subject-hider_focused': focused }"
href="#"
@click.prevent="showingLongSubject=true"
>
{{ $t("status.show_full_subject") }}
</a>
</div>
<div
:class="{'tall-status': hideTallStatus}"
class="status-content-wrapper"
>
<a
v-if="hideTallStatus"
class="tall-status-hider"
:class="{ 'tall-status-hider_focused': focused }"
href="#"
@click.prevent="toggleShowMore"
>
{{ $t("general.show_more") }}
</a>
<div
v-if="!hideSubjectStatus"
:class="{ 'single-line': singleLine }"
class="status-content media-body"
@click.prevent="linkClicked"
v-html="postBodyHtml"
/>
<a
v-if="hideSubjectStatus"
href="#"
class="cw-status-hider"
@click.prevent="toggleShowMore"
>
{{ $t("status.show_content") }}
<span
v-if="attachmentTypes.includes('image')"
class="icon-picture"
/>
<span
v-if="attachmentTypes.includes('video')"
class="icon-video"
/>
<span
v-if="attachmentTypes.includes('audio')"
class="icon-music"
/>
<span
v-if="attachmentTypes.includes('unknown')"
class="icon-doc"
/>
+ <span
+ v-if="status.poll && status.poll.options"
+ class="icon-chart-bar"
+ />
<span
v-if="status.card"
class="icon-link"
/>
</a>
<a
v-if="showingMore && !fullContent"
href="#"
class="status-unhider"
@click.prevent="toggleShowMore"
>
{{ tallStatus ? $t("general.show_less") : $t("status.hide_content") }}
</a>
</div>
- <div v-if="status.poll && status.poll.options">
+ <div v-if="status.poll && status.poll.options && !hideSubjectStatus">
<poll :base-poll="status.poll" />
</div>
<div
v-if="status.attachments.length !== 0 && (!hideSubjectStatus || showingLongSubject)"
class="attachments media-body"
>
<attachment
v-for="attachment in nonGalleryAttachments"
:key="attachment.id"
class="non-gallery"
:size="attachmentSize"
:nsfw="nsfwClickthrough"
:attachment="attachment"
:allow-play="true"
:set-media="setMedia()"
@play="$emit('mediaplay', attachment.id)"
@pause="$emit('mediapause', attachment.id)"
/>
<gallery
v-if="galleryAttachments.length > 0"
:nsfw="nsfwClickthrough"
:attachments="galleryAttachments"
:set-media="setMedia()"
/>
</div>
<div
v-if="status.card && !hideSubjectStatus && !noHeading"
class="link-preview media-body"
>
<link-preview
:card="status.card"
:size="attachmentSize"
:nsfw="nsfwClickthrough"
/>
</div>
<slot name="footer" />
</div>
<!-- eslint-enable vue/no-v-html -->
</template>
<script src="./status_content.js" ></script>
<style lang="scss">
@import '../../_variables.scss';
$status-margin: 0.75em;
.StatusContent {
flex: 1;
min-width: 0;
.status-content-wrapper {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
}
.tall-status {
position: relative;
height: 220px;
overflow-x: hidden;
overflow-y: hidden;
z-index: 1;
.status-content {
min-height: 0;
mask: linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat,
linear-gradient(to top, white, white);
/* Autoprefixed seem to ignore this one, and also syntax is different */
-webkit-mask-composite: xor;
mask-composite: exclude;
}
}
.tall-status-hider {
display: inline-block;
word-break: break-all;
position: absolute;
height: 70px;
margin-top: 150px;
width: 100%;
text-align: center;
line-height: 110px;
z-index: 2;
}
.status-unhider, .cw-status-hider {
width: 100%;
text-align: center;
display: inline-block;
word-break: break-all;
}
img, video {
max-width: 100%;
max-height: 400px;
vertical-align: middle;
object-fit: contain;
&.emoji {
width: 32px;
height: 32px;
}
}
.summary-wrapper {
margin-bottom: 0.5em;
border-style: solid;
border-width: 0 0 1px 0;
border-color: var(--border, $fallback--border);
flex-grow: 0;
}
.summary {
font-style: italic;
padding-bottom: 0.5em;
}
.tall-subject {
position: relative;
.summary {
max-height: 2em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.tall-subject-hider {
display: inline-block;
word-break: break-all;
// position: absolute;
width: 100%;
text-align: center;
padding-bottom: 0.5em;
}
.status-content {
font-family: var(--postFont, sans-serif);
line-height: 1.4em;
white-space: pre-wrap;
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
blockquote {
margin: 0.2em 0 0.2em 2em;
font-style: italic;
}
pre {
overflow: auto;
}
code, samp, kbd, var, pre {
font-family: var(--postCodeFont, monospace);
}
p {
margin: 0 0 1em 0;
}
p:last-child {
margin: 0 0 0 0;
}
h1 {
font-size: 1.1em;
line-height: 1.2em;
margin: 1.4em 0;
}
h2 {
font-size: 1.1em;
margin: 1.0em 0;
}
h3 {
font-size: 1em;
margin: 1.2em 0;
}
h4 {
margin: 1.1em 0;
}
&.single-line {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
height: 1.4em;
}
}
}
.greentext {
color: $fallback--cGreen;
color: var(--postGreentext, $fallback--cGreen);
}
</style>
diff --git a/src/components/tab_switcher/tab_switcher.js b/src/components/tab_switcher/tab_switcher.js
index 40b5b3ca15..9c1da35451 100644
--- a/src/components/tab_switcher/tab_switcher.js
+++ b/src/components/tab_switcher/tab_switcher.js
@@ -1,150 +1,153 @@
import Vue from 'vue'
import { mapState } from 'vuex'
import './tab_switcher.scss'
export default Vue.component('tab-switcher', {
name: 'TabSwitcher',
props: {
renderOnlyFocused: {
required: false,
type: Boolean,
default: false
},
onSwitch: {
required: false,
type: Function,
default: undefined
},
activeTab: {
required: false,
type: String,
default: undefined
},
scrollableTabs: {
required: false,
type: Boolean,
default: false
},
sideTabBar: {
required: false,
type: Boolean,
default: false
}
},
data () {
return {
active: this.$slots.default.findIndex(_ => _.tag)
}
},
computed: {
activeIndex () {
// In case of controlled component
if (this.activeTab) {
return this.$slots.default.findIndex(slot => this.activeTab === slot.key)
} else {
return this.active
}
},
settingsModalVisible () {
return this.settingsModalState === 'visible'
},
...mapState({
settingsModalState: state => state.interface.settingsModalState
})
},
beforeUpdate () {
const currentSlot = this.$slots.default[this.active]
if (!currentSlot.tag) {
this.active = this.$slots.default.findIndex(_ => _.tag)
}
},
methods: {
- activateTab (index) {
+ clickTab (index) {
return (e) => {
e.preventDefault()
- if (typeof this.onSwitch === 'function') {
- this.onSwitch.call(null, this.$slots.default[index].key)
- }
- this.active = index
- if (this.scrollableTabs) {
- this.$refs.contents.scrollTop = 0
- }
+ this.setTab(index)
+ }
+ },
+ setTab (index) {
+ if (typeof this.onSwitch === 'function') {
+ this.onSwitch.call(null, this.$slots.default[index].key)
+ }
+ this.active = index
+ if (this.scrollableTabs) {
+ this.$refs.contents.scrollTop = 0
}
}
},
render (h) {
const tabs = this.$slots.default
.map((slot, index) => {
if (!slot.tag) return
const classesTab = ['tab']
const classesWrapper = ['tab-wrapper']
if (this.activeIndex === index) {
classesTab.push('active')
classesWrapper.push('active')
}
if (slot.data.attrs.image) {
return (
<div class={classesWrapper.join(' ')}>
<button
disabled={slot.data.attrs.disabled}
- onClick={this.activateTab(index)}
+ onClick={this.clickTab(index)}
class={classesTab.join(' ')}>
<img src={slot.data.attrs.image} title={slot.data.attrs['image-tooltip']}/>
{slot.data.attrs.label ? '' : slot.data.attrs.label}
</button>
</div>
)
}
return (
<div class={classesWrapper.join(' ')}>
<button
disabled={slot.data.attrs.disabled}
- onClick={this.activateTab(index)}
+ onClick={this.clickTab(index)}
class={classesTab.join(' ')}
type="button"
>
{!slot.data.attrs.icon ? '' : (<i class={'tab-icon icon-' + slot.data.attrs.icon}/>)}
<span class="text">
{slot.data.attrs.label}
</span>
</button>
</div>
)
})
const contents = this.$slots.default.map((slot, index) => {
if (!slot.tag) return
const active = this.activeIndex === index
const classes = [ active ? 'active' : 'hidden' ]
if (slot.data.attrs.fullHeight) {
classes.push('full-height')
}
const renderSlot = (!this.renderOnlyFocused || active)
? slot
: ''
return (
<div class={classes}>
{
this.sideTabBar
? <h1 class="mobile-label">{slot.data.attrs.label}</h1>
: ''
}
{renderSlot}
</div>
)
})
return (
<div class={'tab-switcher ' + (this.sideTabBar ? 'side-tabs' : 'top-tabs')}>
<div class="tabs">
{tabs}
</div>
<div ref="contents" class={'contents' + (this.scrollableTabs ? ' scrollable-tabs' : '')} v-body-scroll-lock={this.settingsModalVisible}>
{contents}
</div>
</div>
)
}
})
diff --git a/src/i18n/de.json b/src/i18n/de.json
index 3014b87042..6fe6ab2c07 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -1,580 +1,579 @@
{
"chat": {
"title": "Chat"
},
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Medienproxy",
"scope_options": "Reichweitenoptionen",
"text_limit": "Zeichenlimit",
"title": "Funktionen",
"who_to_follow": "Wem folgen?"
},
"finder": {
"error_fetching_user": "Fehler beim Suchen des Benutzers",
"find_user": "Finde Benutzer"
},
"general": {
"apply": "Anwenden",
"submit": "Absenden",
"more": "Mehr",
"generic_error": "Ein Fehler ist aufgetreten",
"optional": "Optional",
"show_more": "Zeige mehr",
"show_less": "Zeige weniger",
"dismiss": "Ablehnen",
"cancel": "Abbrechen",
"disable": "Deaktivieren",
"enable": "Aktivieren",
"confirm": "Bestätigen",
"verify": "Verifizieren"
},
"login": {
"login": "Anmelden",
"description": "Mit OAuth anmelden",
"logout": "Abmelden",
"password": "Passwort",
"placeholder": "z.B. lain",
"register": "Registrieren",
"username": "Benutzername",
"authentication_code": "Authentifizierungscode",
"enter_recovery_code": "Gebe einen Wiederherstellungscode ein",
"recovery_code": "Wiederherstellungscode",
"heading": {
"totp": "Zwei-Faktor Authentifizierung",
"recovery": "Zwei-Faktor Wiederherstellung"
},
"hint": "Anmelden um an der Diskussion teilzunehmen",
"enter_two_factor_code": "Gebe einen Zwei-Faktor-Code ein"
},
"nav": {
"about": "Über",
"back": "Zurück",
"chat": "Lokaler Chat",
"friend_requests": "Followanfragen",
"mentions": "Erwähnungen",
"interactions": "Interaktionen",
"dms": "Direktnachrichten",
"public_tl": "Öffentliche Zeitleiste",
"timeline": "Zeitleiste",
"twkn": "Bekannte Netzwerk",
"user_search": "Benutzersuche",
"search": "Suche",
"preferences": "Voreinstellungen",
"administration": "Administration",
"who_to_follow": "Wem folgen"
},
"notifications": {
"broken_favorite": "Unbekannte Nachricht, suche danach…",
"favorited_you": "favorisierte deine Nachricht",
"followed_you": "folgt dir",
"load_older": "Ältere Benachrichtigungen laden",
"notifications": "Benachrichtigungen",
"read": "Gelesen!",
"repeated_you": "wiederholte deine Nachricht",
"follow_request": "möchte dir folgen",
"migrated_to": "migrierte zu",
"reacted_with": "reagierte mit {0}",
"no_more_notifications": "Keine Benachrichtigungen mehr"
},
"post_status": {
"new_status": "Neuen Status veröffentlichen",
"account_not_locked_warning": "Dein Profil ist nicht {0}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.",
"account_not_locked_warning_link": "gesperrt",
"attachments_sensitive": "Anhänge als heikel markieren",
"content_type": {
"text/plain": "Nur Text",
"text/bbcode": "BBCode",
"text/markdown": "Markdown",
"text/html": "HTML"
},
"content_warning": "Betreff (optional)",
"default": "Sitze gerade im Hofbräuhaus.",
"direct_warning": "Dieser Beitrag wird nur für die erwähnten Nutzer sichtbar sein.",
"posting": "Veröffentlichen",
"scope": {
"direct": "Direkt - Beitrag nur an erwähnte Profile",
"private": "Nur Follower - Beitrag nur für Follower sichtbar",
"public": "Öffentlich - Beitrag an öffentliche Zeitleisten",
"unlisted": "Nicht gelistet - Nicht in öffentlichen Zeitleisten anzeigen"
},
"direct_warning_to_all": "Dieser Beitrag wird für alle erwähnten Benutzer sichtbar sein.",
"direct_warning_to_first_only": "Dieser Beitrag wird für alle Benutzer, die am Anfang der Nachricht erwähnt wurden, sichtbar sein.",
"scope_notice": {
"public": "Dieser Beitrag wird für alle sichtbar sein",
"private": "Dieser Beitrag wird nur für deine Follower sichtbar sein",
"unlisted": "Dieser Beitrag wird weder in der öffentlichen Zeitleiste noch im gesamten bekannten Netzwerk sichtbar sein"
}
},
"registration": {
"bio": "Bio",
"email": "Email",
"fullname": "Angezeigter Name",
"password_confirm": "Passwort bestätigen",
"registration": "Registrierung",
"token": "Einladungsschlüssel",
"captcha": "CAPTCHA",
"new_captcha": "Zum Erstellen eines neuen Captcha auf das Bild klicken",
"validations": {
"username_required": "darf nicht leer sein",
"fullname_required": "darf nicht leer sein",
"email_required": "darf nicht leer sein",
"password_required": "darf nicht leer sein",
"password_confirmation_required": "darf nicht leer sein",
"password_confirmation_match": "sollte mit dem Passwort identisch sein"
},
"bio_placeholder": "z.B.\nHallo, ich bin Lain.\nIch bin ein Anime Mödchen aus dem vorstädtischen Japan. Du kennst mich vielleicht vom Wired.",
"fullname_placeholder": "z.B. Lain Iwakura",
"username_placeholder": "z.B. lain"
},
"settings": {
"attachmentRadius": "Anhänge",
"attachments": "Anhänge",
"avatar": "Avatar",
"avatarAltRadius": "Avatare (Benachrichtigungen)",
"avatarRadius": "Avatare",
"background": "Hintergrund",
"bio": "Bio",
"btnRadius": "Buttons",
"cBlue": "Blau (Antworten, folgt dir)",
"cGreen": "Grün (Retweet)",
"cOrange": "Orange (Favorisieren)",
"cRed": "Rot (Abbrechen)",
"change_password": "Passwort ändern",
"change_password_error": "Es gab ein Problem bei der Änderung des Passworts.",
"changed_password": "Passwort erfolgreich geändert!",
"collapse_subject": "Beiträge mit Betreff einklappen",
"composing": "Verfassen",
"confirm_new_password": "Neues Passwort bestätigen",
"current_avatar": "Dein derzeitiger Avatar",
"current_password": "Aktuelles Passwort",
"current_profile_banner": "Der derzeitige Banner deines Profils",
"data_import_export_tab": "Datenimport/-export",
"default_vis": "Standard-Sichtbarkeitsumfang",
"delete_account": "Account löschen",
"delete_account_description": "Lösche deine Daten und deaktiviere deinen Account unwiderruflich.",
"delete_account_error": "Es ist ein Fehler beim Löschen deines Accounts aufgetreten. Tritt dies weiterhin auf, wende dich an den Administrator der Instanz.",
"delete_account_instructions": "Tippe dein Passwort unten in das Feld ein, um die Löschung deines Accounts zu bestätigen.",
"discoverable": "Erlaube, dass dieser Account in Suchergebnissen auftaucht",
"avatar_size_instruction": "Die empfohlene minimale Größe für Avatare ist 150x150 Pixel.",
"pad_emoji": "Emojis mit Leerzeichen umrahmen",
"export_theme": "Farbschema speichern",
"filtering": "Filtern",
"filtering_explanation": "Alle Beiträge, welche diese Wörter enthalten, werden ausgeblendet. Ein Wort pro Zeile",
"follow_export": "Follower exportieren",
"follow_export_button": "Exportiere deine Follows in eine csv-Datei",
"follow_export_processing": "In Bearbeitung. Die Liste steht gleich zum herunterladen bereit.",
"follow_import": "Follower importieren",
"follow_import_error": "Fehler beim Importieren der Follower",
"follows_imported": "Follower importiert! Die Bearbeitung kann einen Moment dauern.",
"foreground": "Vordergrund",
"general": "Allgemein",
"hide_attachments_in_convo": "Anhänge in Unterhaltungen ausblenden",
"hide_attachments_in_tl": "Anhänge in der Zeitleiste ausblenden",
"hide_muted_posts": "Verberge Beiträge stummgeschalteter Nutzer",
"max_thumbnails": "Maximale Anzahl von Vorschaubildern pro Beitrag",
"hide_isp": "Instanz-spezifisches Panel ausblenden",
"preload_images": "Bilder vorausladen",
"use_one_click_nsfw": "Heikle Anhänge mit nur einem Klick öffnen",
"hide_post_stats": "Beitragsstatistiken verbergen (z.B. die Anzahl der Favoriten)",
"hide_user_stats": "Benutzerstatistiken verbergen (z.B. die Anzahl der Follower)",
"hide_filtered_statuses": "Gefilterte Beiträge verbergen",
"import_followers_from_a_csv_file": "Importiere Follower aus einer CSV-Datei",
"import_theme": "Farbschema laden",
"inputRadius": "Eingabefelder",
"checkboxRadius": "Auswahlfelder",
"instance_default": "(Standard: {value})",
"instance_default_simple": "(Standard)",
"interface": "Oberfläche",
"interfaceLanguage": "Sprache der Oberfläche",
"invalid_theme_imported": "Die ausgewählte Datei ist kein unterstütztes Pleroma-Theme. Keine Änderungen wurden vorgenommen.",
"limited_availability": "In deinem Browser nicht verfügbar",
"links": "Links",
"lock_account_description": "Sperre deinen Account, um neue Follower zu genehmigen oder abzulehnen",
"loop_video": "Videos wiederholen",
"loop_video_silent_only": "Nur Videos ohne Ton wiederholen (z.B. Mastodons \"gifs\")",
"mutes_tab": "Stummschaltungen",
"play_videos_in_modal": "Videos in größerem Medienfenster abspielen",
"use_contain_fit": "Vorschaubilder nicht zuschneiden",
"name": "Name",
"name_bio": "Name & Bio",
"new_password": "Neues Passwort",
"notification_visibility": "Benachrichtigungstypen, die angezeigt werden sollen",
"notification_visibility_follows": "Follows",
"notification_visibility_likes": "Favoriten",
"notification_visibility_mentions": "Erwähnungen",
"notification_visibility_repeats": "Wiederholungen",
"no_rich_text_description": "Rich-Text Formatierungen von allen Beiträgen entfernen",
"hide_follows_description": "Zeige nicht, wem ich folge",
"hide_followers_description": "Zeige nicht, wer mir folgt",
"hide_follows_count_description": "Verberge die Anzahl deiner Gefolgten",
"hide_followers_count_description": "Verberge die Anzahl deiner Folgenden",
"nsfw_clickthrough": "Aktiviere ausblendbares Overlay für Anhänge, die als NSFW markiert sind",
"oauth_tokens": "OAuth-Token",
"token": "Zeichen",
"refresh_token": "Token aktualisieren",
"valid_until": "Gültig bis",
"revoke_token": "Widerrufen",
"panelRadius": "Panel",
"pause_on_unfocused": "Streaming pausieren, wenn das Tab nicht fokussiert ist",
"presets": "Voreinstellungen",
"profile_background": "Profilhintergrund",
"profile_banner": "Profilbanner",
"profile_tab": "Profil",
"radii_help": "Kantenrundung (in Pixel) der Oberfläche anpassen",
"replies_in_timeline": "Antworten in der Zeitleiste",
"reply_visibility_all": "Alle Antworten zeigen",
"reply_visibility_following": "Zeige nur Antworten an mich oder an Benutzer, denen ich folge",
"reply_visibility_self": "Nur Antworten an mich anzeigen",
"autohide_floating_post_button": "Automatisches Verbergen des Knopfs für neue Beiträge (mobil)",
"saving_err": "Fehler beim Speichern der Einstellungen",
"saving_ok": "Einstellungen gespeichert",
"security_tab": "Sicherheit",
"scope_copy": "Reichweite beim Antworten übernehmen (Direktnachrichten werden immer kopiert)",
"minimal_scopes_mode": "Minimiere Reichweitenoptionen",
"set_new_avatar": "Setze einen neuen Avatar",
"set_new_profile_background": "Setze einen neuen Hintergrund für dein Profil",
"set_new_profile_banner": "Setze einen neuen Banner für dein Profil",
"settings": "Einstellungen",
"subject_input_always_show": "Betreff-Feld immer anzeigen",
"subject_line_behavior": "Betreff beim Antworten kopieren",
"subject_line_email": "Wie Email: \"re: Betreff\"",
"subject_line_mastodon": "Wie Mastodon: unverändert kopieren",
"subject_line_noop": "Nicht kopieren",
"post_status_content_type": "Beitragsart",
"stop_gifs": "Animationen nur beim Darüberfahren abspielen",
"streaming": "Aktiviere automatisches Laden (Streaming) von neuen Beiträgen",
"text": "Text",
"theme": "Farbschema",
"theme_help": "Benutze HTML-Farbcodes (#rrggbb) um dein Farbschema anzupassen.",
"theme_help_v2_1": "Du kannst auch die Farben und die Deckkraft bestimmter Komponenten überschreiben, indem du das Kontrollkästchen umschaltest. Verwende die Schaltfläche \"Alle löschen\", um alle Überschreibungen zurückzusetzen.",
"theme_help_v2_2": "Unter einigen Einträgen befinden sich Symbole für Hintergrund-/Textkontrastindikatoren, für detaillierte Informationen fahre mit der Maus darüber. Bitte beachte, dass bei der Verwendung von Transparenz Kontrastindikatoren den schlechtest möglichen Fall darstellen.",
"tooltipRadius": "Tooltips/Warnungen",
"user_settings": "Benutzereinstellungen",
"values": {
"false": "nein",
"true": "Ja"
},
"notifications": "Benachrichtigungen",
"enable_web_push_notifications": "Web-Pushbenachrichtigungen aktivieren",
"style": {
"switcher": {
"keep_color": "Farben beibehalten",
"keep_shadows": "Schatten beibehalten",
"keep_opacity": "Deckkraft beibehalten",
"keep_roundness": "Abrundungen beibehalten",
"keep_fonts": "Schriften beibehalten",
"save_load_hint": "Die \"Beibehalten\"-Optionen behalten die aktuell eingestellten Optionen beim Auswählen oder Laden von Designs bei, sie speichern diese Optionen auch beim Exportieren eines Designs. Wenn alle Kontrollkästchen deaktiviert sind, wird beim Exportieren des Designs alles gespeichert.",
"reset": "Zurücksetzen",
"clear_all": "Alles leeren",
"clear_opacity": "Deckkraft leeren"
},
"common": {
"color": "Farbe",
"opacity": "Deckkraft",
"contrast": {
"hint": "Das Kontrastverhältnis ist {ratio}, es {level} {context}",
"level": {
"aa": "entspricht Level AA Richtlinie (minimum)",
"aaa": "entspricht Level AAA Richtlinie (empfohlen)",
"bad": "entspricht keiner Richtlinien zur Barrierefreiheit"
},
"context": {
"18pt": "für großen (18pt+) Text",
"text": "für Text"
}
}
},
"common_colors": {
"_tab_label": "Allgemein",
"main": "Allgemeine Farben",
"foreground_hint": "Siehe Reiter \"Erweitert\" für eine detailliertere Einstellungen",
"rgbo": "Symbole, Betonungen, Kennzeichnungen"
},
"advanced_colors": {
"_tab_label": "Erweitert",
"alert": "Warnhinweis-Hintergrund",
"alert_error": "Fehler",
"badge": "Kennzeichnungs-Hintergrund",
"badge_notification": "Benachrichtigung",
"panel_header": "Panel-Kopf",
"top_bar": "Obere Leiste",
"borders": "Rahmen",
"buttons": "Schaltflächen",
"inputs": "Eingabefelder",
"faint_text": "Verblasster Text"
},
"radii": {
"_tab_label": "Abrundungen"
},
"shadows": {
"_tab_label": "Schatten und Beleuchtung",
"component": "Komponente",
"override": "Überschreiben",
"shadow_id": "Schatten #{value}",
"blur": "Unschärfe",
"spread": "Streuung",
"inset": "Einsatz",
"hint": "Für Schatten kannst du auch --variable als Farbwert verwenden, um CSS3-Variablen zu verwenden. Bitte beachte, dass die Einstellung der Deckkraft in diesem Fall nicht funktioniert.",
"filter_hint": {
"always_drop_shadow": "Achtung, dieser Schatten verwendet immer {0}, wenn der Browser dies unterstützt.",
"drop_shadow_syntax": "{0} unterstützt Parameter {1} und Schlüsselwort {2} nicht.",
"avatar_inset": "Bitte beachte, dass die Kombination von eingesetzten und nicht eingesetzten Schatten auf Avataren zu unerwarteten Ergebnissen bei transparenten Avataren führen kann.",
"spread_zero": "Schatten mit einer Streuung > 0 erscheinen so, als ob sie auf Null gesetzt wären",
"inset_classic": "Eingesetzte Schatten werden mit {0} verwendet"
},
"components": {
"panel": "Panel",
"panelHeader": "Panel-Kopf",
"topBar": "Obere Leiste",
"avatar": "Benutzer-Avatar (in der Profilansicht)",
"avatarStatus": "Benutzer-Avatar (in der Beitragsanzeige)",
"popup": "Dialogfenster und Hinweistexte",
"button": "Schaltfläche",
"buttonHover": "Schaltfläche (hover)",
"buttonPressed": "Schaltfläche (gedrückt)",
"buttonPressedHover": "Schaltfläche (gedrückt+hover)",
"input": "Input field"
}
},
"fonts": {
"_tab_label": "Schriften",
"help": "Wähl die Schriftart, die für Elemente der Benutzeroberfläche verwendet werden soll. Für \" Benutzerdefiniert\" musst du den genauen Schriftnamen eingeben, wie er im System angezeigt wird.",
"components": {
"interface": "Oberfläche",
"input": "Eingabefelder",
"post": "Beitragstext",
"postCode": "Dicktengleicher Text in einem Beitrag (Rich-Text)"
},
"family": "Schriftname",
"size": "Größe (in px)",
"weight": "Gewicht (Dicke)",
"custom": "Benutzerdefiniert"
},
"preview": {
"header": "Vorschau",
"content": "Inhalt",
"error": "Beispielfehler",
"button": "Schaltfläche",
"text": "Ein Haufen mehr von {0} und {1}",
"mono": "Inhalt",
"input": "Sitze gerade im Hofbräuhaus.",
"faint_link": "Hilfreiche Anleitung",
"fine_print": "Lies unser {0}, um nichts Nützliches zu lernen!",
"header_faint": "Das ist in Ordnung",
"checkbox": "Ich habe die Allgemeinen Geschäftsbedingungen überflogen",
"link": "ein netter kleiner Link"
}
},
"app_name": "Anwendungsname",
"mfa": {
"otp": "OTP",
"recovery_codes_warning": "Schreibe dir die Codes auf oder speichere sie an einem sicheren Ort - ansonsten wirst du sie nicht wiederfinden. Wenn du den Zugriff zu deiner 2FA App und die Wiederherstellungs-Codes verlierst, wirst du aus deinem Account ausgeschlossen sein.",
"recovery_codes": "Wiederherstellungs-Codes.",
"warning_of_generate_new_codes": "Wenn du neue Wiederherstellungs-Codes generierst, werden die alten Codes nicht mehr funktionieren.",
"generate_new_recovery_codes": "Generiere neue Wiederherstellungs-Codes",
"title": "Zwei-Faktor Authentifizierung",
"waiting_a_recovery_codes": "Erhalte Wiederherstellungscodes…",
"authentication_methods": "Authentifizierungsmethoden",
"scan": {
"title": "Scan",
"secret_code": "Schlüssel",
"desc": "Wenn du deine 2FA App verwendest, scanne diesen QR Code oder gebe den Schlüssel ein:"
},
"verify": {
"desc": "Um 2FA zu aktivieren, gib den Code von deiner 2FA-App ein:"
}
},
"enter_current_password_to_confirm": "Gib dein aktuelles Passwort ein, um deine Identität zu bestätigen",
"security": "Sicherheit",
"allow_following_move": "Erlaube automatisches Folgen, sobald ein gefolgter Nutzer umzieht",
"blocks_imported": "Blocks importiert! Die Verarbeitung wird einen Moment brauchen.",
"block_import_error": "Fehler beim Importieren der Blocks",
"block_import": "Block Import",
"block_export_button": "Exportiere deine Blocks in eine csv Datei",
"block_export": "Block Export",
"emoji_reactions_on_timeline": "Zeige Emoji-Reaktionen auf der Zeitleiste",
"domain_mutes": "Domains",
"changed_email": "Email Adresse erfolgreich geändert!",
"change_email_error": "Es trat ein Problem auf beim Versuch, deine Email Adresse zu ändern.",
"change_email": "Ändere Email",
"import_blocks_from_a_csv_file": "Importiere Blocks von einer CSV Datei",
"accent": "Akzent"
},
"timeline": {
"collapse": "Einklappen",
"conversation": "Unterhaltung",
"error_fetching": "Fehler beim Laden",
"load_older": "Lade ältere Beiträge",
"no_retweet_hint": "Der Beitrag ist als nur-für-Follower oder als Direktnachricht markiert und kann nicht wiederholt werden",
"repeated": "wiederholte",
"show_new": "Zeige Neuere",
"up_to_date": "Aktuell"
},
"user_card": {
"approve": "Genehmigen",
"block": "Blockieren",
"blocked": "Blockiert!",
"deny": "Ablehnen",
"follow": "Folgen",
"follow_sent": "Anfrage gesendet!",
"follow_progress": "Anfragen…",
"follow_again": "Anfrage erneut senden?",
"follow_unfollow": "Folgen beenden",
"followees": "Folgt",
"followers": "Folgende",
"following": "Folgst du!",
"follows_you": "Folgt dir!",
"its_you": "Das bist du!",
"mute": "Stummschalten",
"muted": "Stummgeschaltet",
"per_day": "pro Tag",
"remote_follow": "Folgen",
"statuses": "Beiträge",
"admin_menu": {
"sandbox": "Erzwinge Beiträge nur für Follower sichtbar zu sein"
}
},
"user_profile": {
"timeline_title": "Beiträge"
},
"who_to_follow": {
"more": "Mehr",
"who_to_follow": "Wem soll ich folgen"
},
"tool_tip": {
"media_upload": "Medien hochladen",
"repeat": "Wiederholen",
"reply": "Antworten",
"favorite": "Favorisieren",
"user_settings": "Benutzereinstellungen"
},
"upload": {
"error": {
"base": "Hochladen fehlgeschlagen.",
"file_too_big": "Datei ist zu groß [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Bitte versuche es später erneut"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "Leute",
"hashtags": "Hashtags",
"person_talking": "{count} Person spricht darüber",
"people_talking": "{count} Leute sprechen darüber",
"no_results": "Keine Ergebnisse"
},
"password_reset": {
"forgot_password": "Passwort vergessen?",
"password_reset": "Password zurücksetzen",
"instruction": "Wenn du hier deinen Benutznamen oder die zugehörige E-Mail-Adresse eingibst, kann dir der Server einen Link zum Passwortzurücksetzen zuschicken.",
"placeholder": "Dein Benutzername oder die zugehörige E-Mail-Adresse",
"check_email": "Im E-Mail-Posteingang des angebenen Kontos müsste sich jetzt (oder zumindest in Kürze) die E-Mail mit dem Link zum Passwortzurücksetzen befinden.",
"return_home": "Zurück zur Heimseite",
- "not_found": "Benutzername/E-Mail-Adresse nicht gefunden. Vertippt?",
"too_many_requests": "Kurze Pause. Zu viele Versuche. Bitte, später nochmal probieren.",
"password_reset_disabled": "Passwortzurücksetzen deaktiviert. Bitte Administrator kontaktieren.",
"password_reset_required": "Passwortzurücksetzen erforderlich.",
"password_reset_required_but_mailer_is_disabled": "Passwortzurücksetzen wäre erforderlich, ist aber deaktiviert. Bitte Administrator kontaktieren."
},
"about": {
"mrf": {
"federation": "Föderation",
"mrf_policies": "Aktivierte MRF Richtlinien",
"simple": {
"simple_policies": "Instanzspezifische Richtlinien",
"accept": "Akzeptieren",
"reject": "Ablehnen",
"reject_desc": "Diese Instanz akzeptiert keine Nachrichten der folgenden Instanzen:",
"quarantine": "Quarantäne",
"ftl_removal": "Von der Zeitleiste \"Das gesamte bekannte Netzwerk\" entfernen",
"media_removal": "Medienentfernung",
"media_removal_desc": "Diese Instanz entfernt Medien von den Beiträgen der folgenden Instanzen:",
"media_nsfw": "Erzwingen Medien als heikel zu makieren",
"media_nsfw_desc": "Diese Instanz makiert die Medien in Beiträgen der folgenden Instanzen als heikel:",
"accept_desc": "Diese Instanz akzeptiert nur Nachrichten von den folgenden Instanzen:",
"quarantine_desc": "Diese Instanz sendet nur öffentliche Beiträge zu den folgenden Instanzen:",
"ftl_removal_desc": "Dieser Instanz entfernt folgende Instanzen von der \"Das gesamte bekannte Netzwerk\" Zeitleiste:"
},
"keyword": {
"keyword_policies": "Keyword Richtlinien",
"reject": "Ablehnen",
"replace": "Ersetzen",
"is_replaced_by": "→",
"ftl_removal": "Von der Zeitleiste \"Das gesamte bekannte Netzwerk\" entfernen"
},
"mrf_policies_desc": "MRF Richtlinien manipulieren das Föderationsverhalten dieser Instanz. Die folgenden Richtlinien sind aktiv:"
},
"staff": "Mitarbeiter"
},
"domain_mute_card": {
"mute": "Stummschalten",
"mute_progress": "Wird stummgeschaltet…",
"unmute": "Stummschaltung aufheben",
"unmute_progress": "Stummschaltung wird aufgehoben…"
},
"exporter": {
"export": "Exportieren",
"processing": "Verarbeitung läuft, bald wird Du dazu aufgefordert, deine Datei herunterzuladen"
},
"image_cropper": {
"crop_picture": "Bild zuschneiden",
"save": "Speichern",
"cancel": "Abbrechen",
"save_without_cropping": "Ohne Zuschneiden speichern"
},
"importer": {
"submit": "Absenden",
"success": "Erfolgreich importiert.",
"error": "Ein Fehler ist beim Verabeiten der Datei aufgetreten."
},
"media_modal": {
"previous": "Zurück",
"next": "Weiter"
},
"polls": {
"add_poll": "Umfrage hinzufügen",
"add_option": "Option hinzufügen",
"option": "Option",
"votes": "Stimmen",
"vote": "Abstimmen",
"type": "Umfragetyp",
"multiple_choices": "Mehrere Auswahlmöglichkeiten",
"single_choice": "Eine Auswahlmöglichkeit",
"expiry": "Alter der Umfrage",
"expired": "Die Umfrage endete vor {0}",
"not_enough_options": "Zu wenig einzigartige Auswahlmöglichkeiten in der Umfrage",
"expires_in": "Die Umfrage endet in {0}"
},
"emoji": {
"stickers": "Sticker",
"emoji": "Emoji",
"search_emoji": "Nach einem Emoji suchen",
"custom": "Benutzerdefinierter Emoji",
"keep_open": "Auswahlfenster offen halten",
"add_emoji": "Emoji einfügen",
"load_all": "Lade alle {emojiAmount} Emoji",
"load_all_hint": "Erfolgreich erste {saneAmount} Emoji geladen, alle Emojis zu laden würde Leistungsprobleme hervorrufen.",
"unicode": "Unicode Emoji"
},
"interactions": {
"load_older": "Lade ältere Interaktionen",
"follows": "Neue Follows",
"favs_repeats": "Wiederholungen und Favoriten",
"moves": "Benutzer migriert zu"
},
"selectable_list": {
"select_all": "Wähle alle"
},
"remote_user_resolver": {
"searching_for": "Suche nach",
"error": "Nicht gefunden."
}
}
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 7f0820d5f4..8d831e3dd3 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -1,806 +1,805 @@
{
"about": {
"mrf": {
"federation": "Federation",
"keyword": {
"keyword_policies": "Keyword Policies",
"ftl_removal": "Removal from \"The Whole Known Network\" Timeline",
"reject": "Reject",
"replace": "Replace",
"is_replaced_by": "→"
},
"mrf_policies": "Enabled MRF Policies",
"mrf_policies_desc": "MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:",
"simple": {
"simple_policies": "Instance-specific Policies",
"accept": "Accept",
"accept_desc": "This instance only accepts messages from the following instances:",
"reject": "Reject",
"reject_desc": "This instance will not accept messages from the following instances:",
"quarantine": "Quarantine",
"quarantine_desc": "This instance will send only public posts to the following instances:",
"ftl_removal": "Removal from \"The Whole Known Network\" Timeline",
"ftl_removal_desc": "This instance removes these instances from \"The Whole Known Network\" timeline:",
"media_removal": "Media Removal",
"media_removal_desc": "This instance removes media from posts on the following instances:",
"media_nsfw": "Media Force-set As Sensitive",
"media_nsfw_desc": "This instance forces media to be set sensitive in posts on the following instances:"
}
},
"staff": "Staff"
},
"shoutbox": {
"title": "Shoutbox"
},
"domain_mute_card": {
"mute": "Mute",
"mute_progress": "Muting…",
"unmute": "Unmute",
"unmute_progress": "Unmuting…"
},
"exporter": {
"export": "Export",
"processing": "Processing, you'll soon be asked to download your file"
},
"features_panel": {
"chat": "Chat",
"pleroma_chat_messages": "Pleroma Chat",
"gopher": "Gopher",
"media_proxy": "Media proxy",
"scope_options": "Scope options",
"text_limit": "Text limit",
"title": "Features",
"who_to_follow": "Who to follow"
},
"finder": {
"error_fetching_user": "Error fetching user",
"find_user": "Find user"
},
"general": {
"apply": "Apply",
"submit": "Submit",
"more": "More",
"loading": "Loading…",
"generic_error": "An error occured",
"error_retry": "Please try again",
"retry": "Try again",
"optional": "optional",
"show_more": "Show more",
"show_less": "Show less",
"dismiss": "Dismiss",
"cancel": "Cancel",
"disable": "Disable",
"enable": "Enable",
"confirm": "Confirm",
"verify": "Verify",
"close": "Close",
"peek": "Peek"
},
"image_cropper": {
"crop_picture": "Crop picture",
"save": "Save",
"save_without_cropping": "Save without cropping",
"cancel": "Cancel"
},
"importer": {
"submit": "Submit",
"success": "Imported successfully.",
"error": "An error occured while importing this file."
},
"login": {
"login": "Log in",
"description": "Log in with OAuth",
"logout": "Log out",
"password": "Password",
"placeholder": "e.g. lain",
"register": "Register",
"username": "Username",
"hint": "Log in to join the discussion",
"authentication_code": "Authentication code",
"enter_recovery_code": "Enter a recovery code",
"enter_two_factor_code": "Enter a two-factor code",
"recovery_code": "Recovery code",
"heading": {
"totp": "Two-factor authentication",
"recovery": "Two-factor recovery"
}
},
"media_modal": {
"previous": "Previous",
"next": "Next"
},
"nav": {
"about": "About",
"administration": "Administration",
"back": "Back",
"chat": "Local Chat",
"friend_requests": "Follow Requests",
"mentions": "Mentions",
"interactions": "Interactions",
"dms": "Direct Messages",
"public_tl": "Public Timeline",
"timeline": "Timeline",
"twkn": "Known Network",
"bookmarks": "Bookmarks",
"user_search": "User Search",
"search": "Search",
"who_to_follow": "Who to follow",
"preferences": "Preferences",
"timelines": "Timelines",
"chats": "Chats"
},
"notifications": {
"broken_favorite": "Unknown status, searching for it…",
"favorited_you": "favorited your status",
"followed_you": "followed you",
"follow_request": "wants to follow you",
"load_older": "Load older notifications",
"notifications": "Notifications",
"read": "Read!",
"repeated_you": "repeated your status",
"no_more_notifications": "No more notifications",
"migrated_to": "migrated to",
"reacted_with": "reacted with {0}"
},
"polls": {
"add_poll": "Add Poll",
"add_option": "Add Option",
"option": "Option",
"votes": "votes",
"vote": "Vote",
"type": "Poll type",
"single_choice": "Single choice",
"multiple_choices": "Multiple choices",
"expiry": "Poll age",
"expires_in": "Poll ends in {0}",
"expired": "Poll ended {0} ago",
"not_enough_options": "Too few unique options in poll"
},
"emoji": {
"stickers": "Stickers",
"emoji": "Emoji",
"keep_open": "Keep picker open",
"search_emoji": "Search for an emoji",
"add_emoji": "Insert emoji",
"custom": "Custom emoji",
"unicode": "Unicode emoji",
"load_all_hint": "Loaded first {saneAmount} emoji, loading all emoji may cause performance issues.",
"load_all": "Loading all {emojiAmount} emoji"
},
"errors": {
"storage_unavailable": "Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies."
},
"interactions": {
"favs_repeats": "Repeats and Favorites",
"follows": "New follows",
"moves": "User migrates",
"load_older": "Load older interactions"
},
"post_status": {
"new_status": "Post new status",
"account_not_locked_warning": "Your account is not {0}. Anyone can follow you to view your follower-only posts.",
"account_not_locked_warning_link": "locked",
"attachments_sensitive": "Mark attachments as sensitive",
"media_description": "Media description",
"content_type": {
"text/plain": "Plain text",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Subject (optional)",
"default": "Just landed in L.A.",
"direct_warning_to_all": "This post will be visible to all the mentioned users.",
"direct_warning_to_first_only": "This post will only be visible to the mentioned users at the beginning of the message.",
"posting": "Posting",
"preview": "Preview",
"preview_empty": "Empty",
"empty_status_error": "Can't post an empty status with no files",
"media_description_error": "Failed to update media, try again",
"scope_notice": {
"public": "This post will be visible to everyone",
"private": "This post will be visible to your followers only",
"unlisted": "This post will not be visible in Public Timeline and The Whole Known Network"
},
"scope": {
"direct": "Direct - Post to mentioned users only",
"private": "Followers-only - Post to followers only",
"public": "Public - Post to public timelines",
"unlisted": "Unlisted - Do not post to public timelines"
}
},
"registration": {
"bio": "Bio",
"email": "Email",
"fullname": "Display name",
"password_confirm": "Password confirmation",
"registration": "Registration",
"token": "Invite token",
"captcha": "CAPTCHA",
"new_captcha": "Click the image to get a new captcha",
"username_placeholder": "e.g. lain",
"fullname_placeholder": "e.g. Lain Iwakura",
"bio_placeholder": "e.g.\nHi, I'm Lain.\nI’m an anime girl living in suburban Japan. You may know me from the Wired.",
"validations": {
"username_required": "cannot be left blank",
"fullname_required": "cannot be left blank",
"email_required": "cannot be left blank",
"password_required": "cannot be left blank",
"password_confirmation_required": "cannot be left blank",
"password_confirmation_match": "should be the same as password"
}
},
"remote_user_resolver": {
"remote_user_resolver": "Remote user resolver",
"searching_for": "Searching for",
"error": "Not found."
},
"selectable_list": {
"select_all": "Select all"
},
"settings": {
"app_name": "App name",
"security": "Security",
"enter_current_password_to_confirm": "Enter your current password to confirm your identity",
"mfa": {
"otp": "OTP",
"setup_otp": "Setup OTP",
"wait_pre_setup_otp": "presetting OTP",
"confirm_and_enable": "Confirm & enable OTP",
"title": "Two-factor Authentication",
"generate_new_recovery_codes": "Generate new recovery codes",
"warning_of_generate_new_codes": "When you generate new recovery codes, your old codes won’t work anymore.",
"recovery_codes": "Recovery codes.",
"waiting_a_recovery_codes": "Receiving backup codes…",
"recovery_codes_warning": "Write the codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account.",
"authentication_methods": "Authentication methods",
"scan": {
"title": "Scan",
"desc": "Using your two-factor app, scan this QR code or enter text key:",
"secret_code": "Key"
},
"verify": {
"desc": "To enable two-factor authentication, enter the code from your two-factor app:"
}
},
"allow_following_move": "Allow auto-follow when following account moves",
"attachmentRadius": "Attachments",
"attachments": "Attachments",
"avatar": "Avatar",
"avatarAltRadius": "Avatars (Notifications)",
"avatarRadius": "Avatars",
"background": "Background",
"bio": "Bio",
"block_export": "Block export",
"block_export_button": "Export your blocks to a csv file",
"block_import": "Block import",
"block_import_error": "Error importing blocks",
"blocks_imported": "Blocks imported! Processing them will take a while.",
"blocks_tab": "Blocks",
"bot": "This is a bot account",
"btnRadius": "Buttons",
"cBlue": "Blue (Reply, follow)",
"cGreen": "Green (Retweet)",
"cOrange": "Orange (Favorite)",
"cRed": "Red (Cancel)",
"change_email": "Change Email",
"change_email_error": "There was an issue changing your email.",
"changed_email": "Email changed successfully!",
"change_password": "Change Password",
"change_password_error": "There was an issue changing your password.",
"changed_password": "Password changed successfully!",
"chatMessageRadius": "Chat message",
"collapse_subject": "Collapse posts with subjects",
"composing": "Composing",
"confirm_new_password": "Confirm new password",
"current_password": "Current password",
"mutes_and_blocks": "Mutes and Blocks",
"data_import_export_tab": "Data Import / Export",
"default_vis": "Default visibility scope",
"delete_account": "Delete Account",
"delete_account_description": "Permanently delete your data and deactivate your account.",
"delete_account_error": "There was an issue deleting your account. If this persists please contact your instance administrator.",
"delete_account_instructions": "Type your password in the input below to confirm account deletion.",
"discoverable": "Allow discovery of this account in search results and other services",
"domain_mutes": "Domains",
"avatar_size_instruction": "The recommended minimum size for avatar images is 150x150 pixels.",
"pad_emoji": "Pad emoji with spaces when adding from picker",
"emoji_reactions_on_timeline": "Show emoji reactions on timeline",
"export_theme": "Save preset",
"filtering": "Filtering",
"filtering_explanation": "All statuses containing these words will be muted, one per line",
"follow_export": "Follow export",
"follow_export_button": "Export your follows to a csv file",
"follow_import": "Follow import",
"follow_import_error": "Error importing followers",
"follows_imported": "Follows imported! Processing them will take a while.",
"accent": "Accent",
"foreground": "Foreground",
"general": "General",
"hide_attachments_in_convo": "Hide attachments in conversations",
"hide_attachments_in_tl": "Hide attachments in timeline",
"hide_muted_posts": "Hide posts of muted users",
"max_thumbnails": "Maximum amount of thumbnails per post",
"hide_isp": "Hide instance-specific panel",
"preload_images": "Preload images",
"use_one_click_nsfw": "Open NSFW attachments with just one click",
"hide_post_stats": "Hide post statistics (e.g. the number of favorites)",
"hide_user_stats": "Hide user statistics (e.g. the number of followers)",
"hide_filtered_statuses": "Hide filtered statuses",
"import_blocks_from_a_csv_file": "Import blocks from a csv file",
"import_followers_from_a_csv_file": "Import follows from a csv file",
"import_theme": "Load preset",
"inputRadius": "Input fields",
"checkboxRadius": "Checkboxes",
"instance_default": "(default: {value})",
"instance_default_simple": "(default)",
"interface": "Interface",
"interfaceLanguage": "Interface language",
"invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.",
"limited_availability": "Unavailable in your browser",
"links": "Links",
"lock_account_description": "Restrict your account to approved followers only",
"loop_video": "Loop videos",
"loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")",
"mutes_tab": "Mutes",
"play_videos_in_modal": "Play videos in a popup frame",
"profile_fields": {
"label": "Profile metadata",
"add_field": "Add Field",
"name": "Label",
"value": "Content"
},
"use_contain_fit": "Don't crop the attachment in thumbnails",
"name": "Name",
"name_bio": "Name & Bio",
"new_email": "New Email",
"new_password": "New password",
"notification_visibility": "Types of notifications to show",
"notification_visibility_follows": "Follows",
"notification_visibility_likes": "Likes",
"notification_visibility_mentions": "Mentions",
"notification_visibility_repeats": "Repeats",
"notification_visibility_moves": "User Migrates",
"notification_visibility_emoji_reactions": "Reactions",
"no_rich_text_description": "Strip rich text formatting from all posts",
"no_blocks": "No blocks",
"no_mutes": "No mutes",
"hide_follows_description": "Don't show who I'm following",
"hide_followers_description": "Don't show who's following me",
"hide_follows_count_description": "Don't show follow count",
"hide_followers_count_description": "Don't show follower count",
"show_admin_badge": "Show Admin badge in my profile",
"show_moderator_badge": "Show Moderator badge in my profile",
"nsfw_clickthrough": "Enable clickthrough NSFW attachment hiding",
"oauth_tokens": "OAuth tokens",
"token": "Token",
"refresh_token": "Refresh Token",
"valid_until": "Valid Until",
"revoke_token": "Revoke",
"panelRadius": "Panels",
"pause_on_unfocused": "Pause streaming when tab is not focused",
"presets": "Presets",
"profile_background": "Profile Background",
"profile_banner": "Profile Banner",
"profile_tab": "Profile",
"radii_help": "Set up interface edge rounding (in pixels)",
"replies_in_timeline": "Replies in timeline",
"reply_visibility_all": "Show all replies",
"reply_visibility_following": "Only show replies directed at me or users I'm following",
"reply_visibility_self": "Only show replies directed at me",
"autohide_floating_post_button": "Automatically hide New Post button (mobile)",
"saving_err": "Error saving settings",
"saving_ok": "Settings saved",
"search_user_to_block": "Search whom you want to block",
"search_user_to_mute": "Search whom you want to mute",
"security_tab": "Security",
"scope_copy": "Copy scope when replying (DMs are always copied)",
"minimal_scopes_mode": "Minimize post scope selection options",
"set_new_avatar": "Set new avatar",
"set_new_profile_background": "Set new profile background",
"set_new_profile_banner": "Set new profile banner",
"reset_avatar": "Reset avatar",
"reset_profile_background": "Reset profile background",
"reset_profile_banner": "Reset profile banner",
"reset_avatar_confirm": "Do you really want to reset the avatar?",
"reset_banner_confirm": "Do you really want to reset the banner?",
"reset_background_confirm": "Do you really want to reset the background?",
"settings": "Settings",
"subject_input_always_show": "Always show subject field",
"subject_line_behavior": "Copy subject when replying",
"subject_line_email": "Like email: \"re: subject\"",
"subject_line_mastodon": "Like mastodon: copy as is",
"subject_line_noop": "Do not copy",
"post_status_content_type": "Post status content type",
"stop_gifs": "Play-on-hover GIFs",
"streaming": "Enable automatic streaming of new posts when scrolled to the top",
"user_mutes": "Users",
"useStreamingApi": "Receive posts and notifications real-time",
"useStreamingApiWarning": "(Not recommended, experimental, known to skip posts)",
"text": "Text",
"theme": "Theme",
"theme_help": "Use hex color codes (#rrggbb) to customize your color theme.",
"theme_help_v2_1": "You can also override certain component's colors and opacity by toggling the checkbox, use \"Clear all\" button to clear all overrides.",
"theme_help_v2_2": "Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.",
"tooltipRadius": "Tooltips/alerts",
"type_domains_to_mute": "Search domains to mute",
"upload_a_photo": "Upload a photo",
"user_settings": "User Settings",
"values": {
"false": "no",
"true": "yes"
},
"virtual_scrolling": "Optimize timeline rendering",
"fun": "Fun",
"greentext": "Meme arrows",
"notifications": "Notifications",
"notification_setting_filters": "Filters",
"notification_setting_block_from_strangers": "Block notifications from users who you do not follow",
"notification_setting_privacy": "Privacy",
"notification_setting_hide_notification_contents": "Hide the sender and contents of push notifications",
"notification_mutes": "To stop receiving notifications from a specific user, use a mute.",
"notification_blocks": "Blocking a user stops all notifications as well as unsubscribes them.",
"enable_web_push_notifications": "Enable web push notifications",
"style": {
"switcher": {
"keep_color": "Keep colors",
"keep_shadows": "Keep shadows",
"keep_opacity": "Keep opacity",
"keep_roundness": "Keep roundness",
"keep_fonts": "Keep fonts",
"save_load_hint": "\"Keep\" options preserve currently set options when selecting or loading themes, it also stores said options when exporting a theme. When all checkboxes unset, exporting theme will save everything.",
"reset": "Reset",
"clear_all": "Clear all",
"clear_opacity": "Clear opacity",
"load_theme": "Load theme",
"keep_as_is": "Keep as is",
"use_snapshot": "Old version",
"use_source": "New version",
"help": {
"upgraded_from_v2": "PleromaFE has been upgraded, theme could look a little bit different than you remember.",
"v2_imported": "File you imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies.",
"future_version_imported": "File you imported was made in newer version of FE.",
"older_version_imported": "File you imported was made in older version of FE.",
"snapshot_present": "Theme snapshot is loaded, so all values are overriden. You can load theme's actual data instead.",
"snapshot_missing": "No theme snapshot was in the file so it could look different than originally envisioned.",
"fe_upgraded": "PleromaFE's theme engine upgraded after version update.",
"fe_downgraded": "PleromaFE's version rolled back.",
"migration_snapshot_ok": "Just to be safe, theme snapshot loaded. You can try loading theme data.",
"migration_napshot_gone": "For whatever reason snapshot was missing, some stuff could look different than you remember.",
"snapshot_source_mismatch": "Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version."
}
},
"common": {
"color": "Color",
"opacity": "Opacity",
"contrast": {
"hint": "Contrast ratio is {ratio}, it {level} {context}",
"level": {
"aa": "meets Level AA guideline (minimal)",
"aaa": "meets Level AAA guideline (recommended)",
"bad": "doesn't meet any accessibility guidelines"
},
"context": {
"18pt": "for large (18pt+) text",
"text": "for text"
}
}
},
"common_colors": {
"_tab_label": "Common",
"main": "Common colors",
"foreground_hint": "See \"Advanced\" tab for more detailed control",
"rgbo": "Icons, accents, badges"
},
"advanced_colors": {
"_tab_label": "Advanced",
"alert": "Alert background",
"alert_error": "Error",
"alert_warning": "Warning",
"alert_neutral": "Neutral",
"post": "Posts/User bios",
"badge": "Badge background",
"popover": "Tooltips, menus, popovers",
"badge_notification": "Notification",
"panel_header": "Panel header",
"top_bar": "Top bar",
"borders": "Borders",
"buttons": "Buttons",
"inputs": "Input fields",
"faint_text": "Faded text",
"underlay": "Underlay",
"poll": "Poll graph",
"icons": "Icons",
"highlight": "Highlighted elements",
"pressed": "Pressed",
"selectedPost": "Selected post",
"selectedMenu": "Selected menu item",
"disabled": "Disabled",
"toggled": "Toggled",
"tabs": "Tabs",
"chat": {
"incoming": "Incoming",
"outgoing": "Outgoing",
"border": "Border"
}
},
"radii": {
"_tab_label": "Roundness"
},
"shadows": {
"_tab_label": "Shadow and lighting",
"component": "Component",
"override": "Override",
"shadow_id": "Shadow #{value}",
"blur": "Blur",
"spread": "Spread",
"inset": "Inset",
"hintV3": "For shadows you can also use the {0} notation to use other color slot.",
"filter_hint": {
"always_drop_shadow": "Warning, this shadow always uses {0} when browser supports it.",
"drop_shadow_syntax": "{0} does not support {1} parameter and {2} keyword.",
"avatar_inset": "Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.",
"spread_zero": "Shadows with spread > 0 will appear as if it was set to zero",
"inset_classic": "Inset shadows will be using {0}"
},
"components": {
"panel": "Panel",
"panelHeader": "Panel header",
"topBar": "Top bar",
"avatar": "User avatar (in profile view)",
"avatarStatus": "User avatar (in post display)",
"popup": "Popups and tooltips",
"button": "Button",
"buttonHover": "Button (hover)",
"buttonPressed": "Button (pressed)",
"buttonPressedHover": "Button (pressed+hover)",
"input": "Input field"
}
},
"fonts": {
"_tab_label": "Fonts",
"help": "Select font to use for elements of UI. For \"custom\" you have to enter exact font name as it appears in system.",
"components": {
"interface": "Interface",
"input": "Input fields",
"post": "Post text",
"postCode": "Monospaced text in a post (rich text)"
},
"family": "Font name",
"size": "Size (in px)",
"weight": "Weight (boldness)",
"custom": "Custom"
},
"preview": {
"header": "Preview",
"content": "Content",
"error": "Example error",
"button": "Button",
"text": "A bunch of more {0} and {1}",
"mono": "content",
"input": "Just landed in L.A.",
"faint_link": "helpful manual",
"fine_print": "Read our {0} to learn nothing useful!",
"header_faint": "This is fine",
"checkbox": "I have skimmed over terms and conditions",
"link": "a nice lil' link"
}
},
"version": {
"title": "Version",
"backend_version": "Backend Version",
"frontend_version": "Frontend Version"
}
},
"time": {
"day": "{0} day",
"days": "{0} days",
"day_short": "{0}d",
"days_short": "{0}d",
"hour": "{0} hour",
"hours": "{0} hours",
"hour_short": "{0}h",
"hours_short": "{0}h",
"in_future": "in {0}",
"in_past": "{0} ago",
"minute": "{0} minute",
"minutes": "{0} minutes",
"minute_short": "{0}min",
"minutes_short": "{0}min",
"month": "{0} month",
"months": "{0} months",
"month_short": "{0}mo",
"months_short": "{0}mo",
"now": "just now",
"now_short": "now",
"second": "{0} second",
"seconds": "{0} seconds",
"second_short": "{0}s",
"seconds_short": "{0}s",
"week": "{0} week",
"weeks": "{0} weeks",
"week_short": "{0}w",
"weeks_short": "{0}w",
"year": "{0} year",
"years": "{0} years",
"year_short": "{0}y",
"years_short": "{0}y"
},
"timeline": {
"collapse": "Collapse",
"conversation": "Conversation",
"error_fetching": "Error fetching updates",
"load_older": "Load older statuses",
"no_retweet_hint": "Post is marked as followers-only or direct and cannot be repeated",
"repeated": "repeated",
"show_new": "Show new",
"reload": "Reload",
"up_to_date": "Up-to-date",
"no_more_statuses": "No more statuses",
"no_statuses": "No statuses"
},
"status": {
"favorites": "Favorites",
"repeats": "Repeats",
"delete": "Delete status",
"pin": "Pin on profile",
"unpin": "Unpin from profile",
"pinned": "Pinned",
"bookmark": "Bookmark",
"unbookmark": "Unbookmark",
"delete_confirm": "Do you really want to delete this status?",
"reply_to": "Reply to",
"replies_list": "Replies:",
"mute_conversation": "Mute conversation",
"unmute_conversation": "Unmute conversation",
"status_unavailable": "Status unavailable",
"copy_link": "Copy link to status",
"thread_muted": "Thread muted",
"thread_muted_and_words": ", has words:",
"show_full_subject": "Show full subject",
"hide_full_subject": "Hide full subject",
"show_content": "Show content",
"hide_content": "Hide content"
},
"user_card": {
"approve": "Approve",
"block": "Block",
"blocked": "Blocked!",
"deny": "Deny",
"favorites": "Favorites",
"follow": "Follow",
"follow_sent": "Request sent!",
"follow_progress": "Requesting…",
"follow_again": "Send request again?",
"follow_unfollow": "Unfollow",
"followees": "Following",
"followers": "Followers",
"following": "Following!",
"follows_you": "Follows you!",
"hidden": "Hidden",
"its_you": "It's you!",
"media": "Media",
"mention": "Mention",
"message": "Message",
"mute": "Mute",
"muted": "Muted",
"per_day": "per day",
"remote_follow": "Remote follow",
"report": "Report",
"statuses": "Statuses",
"subscribe": "Subscribe",
"unsubscribe": "Unsubscribe",
"unblock": "Unblock",
"unblock_progress": "Unblocking…",
"block_progress": "Blocking…",
"unmute": "Unmute",
"unmute_progress": "Unmuting…",
"mute_progress": "Muting…",
"hide_repeats": "Hide repeats",
"show_repeats": "Show repeats",
"admin_menu": {
"moderation": "Moderation",
"grant_admin": "Grant Admin",
"revoke_admin": "Revoke Admin",
"grant_moderator": "Grant Moderator",
"revoke_moderator": "Revoke Moderator",
"activate_account": "Activate account",
"deactivate_account": "Deactivate account",
"delete_account": "Delete account",
"force_nsfw": "Mark all posts as NSFW",
"strip_media": "Remove media from posts",
"force_unlisted": "Force posts to be unlisted",
"sandbox": "Force posts to be followers-only",
"disable_remote_subscription": "Disallow following user from remote instances",
"disable_any_subscription": "Disallow following user at all",
"quarantine": "Disallow user posts from federating",
"delete_user": "Delete user",
"delete_user_confirmation": "Are you absolutely sure? This action cannot be undone."
}
},
"user_profile": {
"timeline_title": "User Timeline",
"profile_does_not_exist": "Sorry, this profile does not exist.",
"profile_loading_error": "Sorry, there was an error loading this profile."
},
"user_reporting": {
"title": "Reporting {0}",
"add_comment_description": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
"additional_comments": "Additional comments",
"forward_description": "The account is from another server. Send a copy of the report there as well?",
"forward_to": "Forward to {0}",
"submit": "Submit",
"generic_error": "An error occurred while processing your request."
},
"who_to_follow": {
"more": "More",
"who_to_follow": "Who to follow"
},
"tool_tip": {
"media_upload": "Upload Media",
"repeat": "Repeat",
"reply": "Reply",
"favorite": "Favorite",
"add_reaction": "Add Reaction",
"user_settings": "User Settings",
"accept_follow_request": "Accept follow request",
"reject_follow_request": "Reject follow request",
"bookmark": "Bookmark"
},
"upload": {
"error": {
"base": "Upload failed.",
"file_too_big": "File too big [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Try again later"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "People",
"hashtags": "Hashtags",
"person_talking": "{count} person talking",
"people_talking": "{count} people talking",
"no_results": "No results"
},
"password_reset": {
"forgot_password": "Forgot password?",
"password_reset": "Password reset",
"instruction": "Enter your email address or username. We will send you a link to reset your password.",
"placeholder": "Your email or username",
"check_email": "Check your email for a link to reset your password.",
"return_home": "Return to the home page",
- "not_found": "We couldn't find that email or username.",
"too_many_requests": "You have reached the limit of attempts, try again later.",
"password_reset_disabled": "Password reset is disabled. Please contact your instance administrator.",
"password_reset_required": "You must reset your password to log in.",
"password_reset_required_but_mailer_is_disabled": "You must reset your password, but password reset is disabled. Please contact your instance administrator."
},
"chats": {
"you": "You:",
"message_user": "Message {nickname}",
"delete": "Delete",
"chats": "Chats",
"new": "New Chat",
"empty_message_error": "Cannot post empty message",
"more": "More",
"delete_confirm": "Do you really want to delete this message?",
"error_loading_chat": "Something went wrong when loading the chat.",
"error_sending_message": "Something went wrong when sending the message.",
"empty_chat_list_placeholder": "You don't have any chats yet. Start a new chat!"
},
"file_type": {
"audio": "Audio",
"video": "Video",
"image": "Image",
"file": "File"
},
"display_date": {
"today": "Today"
}
}
diff --git a/src/i18n/eo.json b/src/i18n/eo.json
index b66f557a6a..e73ac2f8ec 100644
--- a/src/i18n/eo.json
+++ b/src/i18n/eo.json
@@ -1,796 +1,795 @@
{
"chat": {
"title": "Babilejo"
},
"features_panel": {
"chat": "Babilejo",
"gopher": "Gopher",
"media_proxy": "Vidaŭdaĵa prokurilo",
"scope_options": "Agordoj de amplekso",
"text_limit": "Limo de teksto",
"title": "Funkcioj",
"who_to_follow": "Kiun aboni",
"pleroma_chat_messages": "Babilejo de Pleroma"
},
"finder": {
"error_fetching_user": "Eraris alporto de uzanto",
"find_user": "Trovi uzanton"
},
"general": {
"apply": "Apliki",
"submit": "Sendi",
"more": "Pli",
"generic_error": "Eraro okazis",
"optional": "malnepra",
"close": "Fermi",
"verify": "Kontroli",
"confirm": "Konfirmi",
"enable": "Ŝalti",
"disable": "Malŝalti",
"cancel": "Nuligi",
"dismiss": "Forlasi",
"show_less": "Montri malplion",
"show_more": "Montri plion",
"retry": "Reprovi",
"error_retry": "Bonvolu reprovi",
"loading": "Enlegante…"
},
"image_cropper": {
"crop_picture": "Tondi bildon",
"save": "Konservi",
"cancel": "Nuligi",
"save_without_cropping": "Konservi sen tondado"
},
"login": {
"login": "Saluti",
"description": "Saluti per OAuth",
"logout": "Adiaŭi",
"password": "Pasvorto",
"placeholder": "ekz. lain",
"register": "Registriĝi",
"username": "Uzantonomo",
"hint": "Salutu por partopreni la diskutadon",
"heading": {
"recovery": "Rehavo de duobla aŭtentikigo",
"totp": "Duobla aŭtentikigo"
},
"recovery_code": "Rehava kodo",
"enter_two_factor_code": "Enigu kodon de duobla aŭtentikigo",
"enter_recovery_code": "Enigu rehavan kodon",
"authentication_code": "Aŭtentikiga kodo"
},
"media_modal": {
"previous": "Antaŭa",
"next": "Sekva"
},
"nav": {
"about": "Pri",
"back": "Reen",
"chat": "Loka babilejo",
"friend_requests": "Petoj pri abono",
"mentions": "Mencioj",
"dms": "Rektaj mesaĝoj",
"public_tl": "Publika tempolinio",
"timeline": "Tempolinio",
"twkn": "La tuta konata reto",
"user_search": "Serĉi uzantojn",
"who_to_follow": "Kiun aboni",
"preferences": "Agordoj",
"chats": "Babiloj",
"search": "Serĉi",
"interactions": "Interagoj",
"administration": "Administrado",
"bookmarks": "Legosignoj"
},
"notifications": {
"broken_favorite": "Nekonata stato, serĉante ĝin…",
"favorited_you": "ŝatis vian staton",
"followed_you": "ekabonis vin",
"load_older": "Enlegi pli malnovajn sciigojn",
"notifications": "Sciigoj",
"read": "Legite!",
"repeated_you": "ripetis vian staton",
"no_more_notifications": "Neniuj pliaj sciigoj",
"reacted_with": "reagis per {0}",
"migrated_to": "migris al",
"follow_request": "volas vin aboni"
},
"post_status": {
"new_status": "Afiŝi novan staton",
"account_not_locked_warning": "Via konto ne estas {0}. Iu ajn povas vin aboni por vidi eĉ viajn afiŝoj nur por abonantoj.",
"account_not_locked_warning_link": "ŝlosita",
"attachments_sensitive": "Marki kunsendaĵojn konsternaj",
"content_type": {
"text/plain": "Plata teksto",
"text/bbcode": "BBCode",
"text/markdown": "Markdown",
"text/html": "HTML"
},
"content_warning": "Temo (malnepra)",
"default": "Ĵus alvenis al la Universala Kongreso!",
"direct_warning": "Ĉi tiu afiŝo estos videbla nur por ĉiuj menciitaj uzantoj.",
"posting": "Afiŝante",
"scope": {
"direct": "Rekta – Afiŝi nur al menciitaj uzantoj",
"private": "Nur abonantoj – Afiŝi nur al abonantoj",
"public": "Publika – Afiŝi al publikaj tempolinioj",
"unlisted": "Nelistigita – Ne afiŝi al publikaj tempolinioj"
},
"scope_notice": {
"unlisted": "Ĉi tiu afiŝo ne estos videbla en la Publika historio kaj La tuta konata reto",
"private": "Ĉi tiu afiŝo estos videbla nur al viaj abonantoj",
"public": "Ĉi tiu afiŝo estos videbla al ĉiuj"
},
"media_description_error": "Malsukcesis afiŝo de vidaŭdaĵoj; reprovu",
"empty_status_error": "Ne povas afiŝi malplenan staton sen dosieroj",
"preview_empty": "Malplena",
"preview": "Antaŭrigardo",
"direct_warning_to_first_only": "Ĉi tiu afiŝo estas nur videbla al uzantoj menciitaj je la komenco de la mesaĝo.",
"direct_warning_to_all": "Ĉi tiu afiŝo estos videbla al ĉiuj menciitaj uzantoj.",
"media_description": "Priskribo de vidaŭdaĵo"
},
"registration": {
"bio": "Priskribo",
"email": "Retpoŝtadreso",
"fullname": "Vidiga nomo",
"password_confirm": "Konfirmo de pasvorto",
"registration": "Registriĝo",
"token": "Invita ĵetono",
"captcha": "TESTO DE HOMECO",
"new_captcha": "Klaku la bildon por akiri novan teston",
"username_placeholder": "ekz. lain",
"fullname_placeholder": "ekz. Lain Iwakura",
"bio_placeholder": "ekz.\nSaluton, mi estas Lain.\nMi estas animea knabino vivanta en Japanujo. Eble vi konas min pro la retejo « Wired ».",
"validations": {
"username_required": "ne povas resti malplena",
"fullname_required": "ne povas resti malplena",
"email_required": "ne povas resti malplena",
"password_required": "ne povas resti malplena",
"password_confirmation_required": "ne povas resti malplena",
"password_confirmation_match": "samu la pasvorton"
}
},
"settings": {
"app_name": "Nomo de aplikaĵo",
"attachmentRadius": "Kunsendaĵoj",
"attachments": "Kunsendaĵoj",
"avatar": "Profilbildo",
"avatarAltRadius": "Profilbildoj (sciigoj)",
"avatarRadius": "Profilbildoj",
"background": "Fono",
"bio": "Priskribo",
"blocks_tab": "Blokitoj",
"btnRadius": "Butonoj",
"cBlue": "Blua (respondi, aboni)",
"cGreen": "Verda (kunhavigi)",
"cOrange": "Oranĝa (ŝati)",
"cRed": "Ruĝa (nuligi)",
"change_password": "Ŝanĝi pasvorton",
"change_password_error": "Eraris ŝanĝo de via pasvorto.",
"changed_password": "Pasvorto sukcese ŝanĝiĝis!",
"collapse_subject": "Maletendi afiŝojn kun temoj",
"composing": "Verkado",
"confirm_new_password": "Konfirmu novan pasvorton",
"current_avatar": "Via nuna profilbildo",
"current_password": "Nuna pasvorto",
"current_profile_banner": "Via nuna profila rubando",
"data_import_export_tab": "Enporto / Elporto de datumoj",
"default_vis": "Implicita amplekso de vidibleco",
"delete_account": "Forigi konton",
"delete_account_description": "Por ĉiam forigi viajn datumojn kaj malaktivigi vian konton.",
"delete_account_error": "Eraris forigo de via kanto. Se tio daŭre ripetiĝos, bonvolu kontakti la administranton de via nodo.",
"delete_account_instructions": "Entajpu sube vian pasvorton por konfirmi forigon de konto.",
"avatar_size_instruction": "La rekomendata minimuma grando de profilbildoj estas 150×150 bilderoj.",
"export_theme": "Konservi antaŭagordon",
"filtering": "Filtrado",
"filtering_explanation": "Ĉiuj statoj kun tiuj ĉi vortoj silentiĝos; skribu po unu linie",
"follow_export": "Elporto de abonoj",
"follow_export_button": "Elporti viajn abonojn al CSV-dosiero",
"follow_export_processing": "Traktante; baldaŭ vi ricevos peton elŝuti la dosieron",
"follow_import": "Enporto de abonoj",
"follow_import_error": "Eraro enportante abonojn",
"follows_imported": "Abonoj enportiĝis! Traktado daŭros iom da tempo.",
"foreground": "Malfono",
"general": "Ĝenerala",
"hide_attachments_in_convo": "Kaŝi kunsendaĵojn en interparoloj",
"hide_attachments_in_tl": "Kaŝi kunsendaĵojn en tempolinio",
"max_thumbnails": "Maksimuma nombro da bildetoj en afiŝo",
"hide_isp": "Kaŝi breton propran al nodo",
"preload_images": "Antaŭ-enlegi bildojn",
"use_one_click_nsfw": "Malfermi konsternajn kunsendaĵojn per nur unu klako",
"hide_post_stats": "Kaŝi statistikon de afiŝoj (ekz. nombron de ŝatoj)",
"hide_user_stats": "Kaŝi statistikon de uzantoj (ekz. nombron de abonantoj)",
"hide_filtered_statuses": "Kaŝi filtritajn statojn",
"import_followers_from_a_csv_file": "Enporti abonojn el CSV-dosiero",
"import_theme": "Enlegi antaŭagordojn",
"inputRadius": "Enigaj kampoj",
"checkboxRadius": "Markbutonoj",
"instance_default": "(implicita: {value})",
"instance_default_simple": "(implicita)",
"interface": "Fasado",
"interfaceLanguage": "Lingvo de fasado",
"invalid_theme_imported": "La elektita dosiero ne estas subtenata haŭto de Pleromo. Neniuj ŝanĝoj al via haŭto okazis.",
"limited_availability": "Nehavebla en via foliumilo",
"links": "Ligiloj",
"lock_account_description": "Limigi vian konton al nur abonantoj aprobitaj",
"loop_video": "Ripetadi filmojn",
"loop_video_silent_only": "Ripetadi nur filmojn sen sono (ekz. la «GIF-ojn» de Mastodon)",
"mutes_tab": "Silentigoj",
"play_videos_in_modal": "Ludi filmojn en ŝpruca kadro",
"use_contain_fit": "Ne tondi la kunsendaĵon en bildetoj",
"name": "Nomo",
"name_bio": "Nomo kaj priskribo",
"new_password": "Nova pasvorto",
"notification_visibility": "Montrotaj specoj de sciigoj",
"notification_visibility_follows": "Abonoj",
"notification_visibility_likes": "Ŝatoj",
"notification_visibility_mentions": "Mencioj",
"notification_visibility_repeats": "Ripetoj",
"no_rich_text_description": "Forigi riĉtekstajn formojn de ĉiuj afiŝoj",
"no_blocks": "Neniuj blokitoj",
"no_mutes": "Neniuj silentigoj",
"hide_follows_description": "Ne montri kiun mi sekvas",
"hide_followers_description": "Ne montri kiu min sekvas",
"show_admin_badge": "Montri la insignon de administranto en mia profilo",
"show_moderator_badge": "Montri la insignon de reguligisto en mia profilo",
"nsfw_clickthrough": "Ŝalti traklakan kaŝadon de konsternaj kunsendaĵoj",
"oauth_tokens": "Ĵetonoj de OAuth",
"token": "Ĵetono",
"refresh_token": "Ĵetono de aktualigo",
"valid_until": "Valida ĝis",
"revoke_token": "Senvalidigi",
"panelRadius": "Bretoj",
"pause_on_unfocused": "Paŭzigi elsendfluon kiam langeto ne estas fokusata",
"presets": "Antaŭagordoj",
"profile_background": "Fono de profilo",
"profile_banner": "Rubando de profilo",
"profile_tab": "Profilo",
"radii_help": "Agordi fasadan rondigon de randoj (bildere)",
"replies_in_timeline": "Respondoj en tempolinio",
"reply_visibility_all": "Montri ĉiujn respondojn",
"reply_visibility_following": "Montri nur respondojn por mi aŭ miaj abonatoj",
"reply_visibility_self": "Montri nur respondojn por mi",
"saving_err": "Eraris konservado de agordoj",
"saving_ok": "Agordoj konserviĝis",
"security_tab": "Sekureco",
"scope_copy": "Kopii amplekson por respondo (rektaj mesaĝoj ĉiam kopiiĝas)",
"set_new_avatar": "Agordi novan profilbildon",
"set_new_profile_background": "Agordi novan fonon de profilo",
"set_new_profile_banner": "Agordi novan rubandon de profilo",
"settings": "Agordoj",
"subject_input_always_show": "Ĉiam montri kampon de temo",
"subject_line_behavior": "Kopii temon dum respondado",
"subject_line_email": "Kiel retpoŝto: «re: temo»",
"subject_line_mastodon": "Kiel Mastodon: kopii senŝanĝe",
"subject_line_noop": "Ne kopii",
"post_status_content_type": "Afiŝi specon de la enhavo de la stato",
"stop_gifs": "Movi GIF-bildojn dum ŝvebo de muso",
"streaming": "Ŝalti memagan fluigon de novaj afiŝoj kiam vi vidas la supron de la paĝo",
"text": "Teksto",
"theme": "Haŭto",
"theme_help": "Uzu deksesumajn kolorkodojn (#rrvvbb) por adapti vian koloran haŭton.",
"theme_help_v2_1": "Vi ankaŭ povas superagordi la kolorojn kaj travideblecon de kelkaj eroj per marko de la markbutono; uzu la butonon «Vakigi ĉion» por forigi ĉîujn superagordojn.",
"theme_help_v2_2": "Bildsimboloj sub kelkaj eroj estas indikiloj de kontrasto inter fono kaj teksto; ŝvebigu muson por detalaj informoj. Bonvolu memori, ke la indikilo montras la plej malbonan okazeblon dum sia uzo.",
"tooltipRadius": "Ŝpruchelpiloj/avertoj",
"upload_a_photo": "Alŝuti foton",
"user_settings": "Agordoj de uzanto",
"values": {
"false": "ne",
"true": "jes"
},
"notifications": "Sciigoj",
"enable_web_push_notifications": "Ŝalti retajn pasivajn sciigojn",
"style": {
"switcher": {
"keep_color": "Konservi kolorojn",
"keep_shadows": "Konservi ombrojn",
"keep_opacity": "Konservi maltravideblecon",
"keep_roundness": "Konservi rondecon",
"keep_fonts": "Konservi tiparojn",
"save_load_hint": "Elektebloj de «konservi» konservas la nuntempajn agordojn dum elektado aŭ enlegado de haŭtoj. Ĝi ankaŭ konservas tiujn agordojn dum elportado de haŭto. Kun ĉiuj markbutonoj nemarkitaj, elporto de la haŭto ĉion konservos.",
"reset": "Restarigi",
"clear_all": "Vakigi ĉion",
"clear_opacity": "Vakigi maltravideblecon",
"help": {
"fe_downgraded": "Versio de PleromaFE reen iris.",
"fe_upgraded": "La motoro de haŭtoj de PleromaFE ĝisdatiĝis post ĝisdatigo de la versio.",
"older_version_imported": "La enportita dosiero estis farita per pli malnova versio de PleromaFE.",
"future_version_imported": "La enportita dosiero estis farita per pli nova versio de PleromaFE.",
"v2_imported": "La dosiero, kiun vi enportis, estis farita por malnova versio de PleromaFE. Ni provas maksimumigi interkonformecon, sed tamen eble montriĝos misoj.",
"upgraded_from_v2": "PleromaFE estis ĝisdatigita; la haŭto eble aspektos malsame ol kiel vi ĝin memoras."
},
"use_source": "Nova versio",
"use_snapshot": "Malnova versio",
"keep_as_is": "Teni senŝanĝa",
"load_theme": "Enlegi haŭton"
},
"common": {
"color": "Koloro",
"opacity": "Maltravidebleco",
"contrast": {
"hint": "Proporcio de kontrasto estas {ratio}, ĝi {level} {context}",
"level": {
"aa": "plenumas la gvidilon je nivelo AA (minimuma)",
"aaa": "plenumas la gvidilon je nivela AAA (rekomendita)",
"bad": "plenumas neniujn faciluzajn gvidilojn"
},
"context": {
"18pt": "por granda (18pt+) teksto",
"text": "por teksto"
}
}
},
"common_colors": {
"_tab_label": "Komunaj",
"main": "Komunaj koloroj",
"foreground_hint": "Vidu langeton «Specialaj» por pli detalaj agordoj",
"rgbo": "Bildsimboloj, emfazoj, insignoj"
},
"advanced_colors": {
"_tab_label": "Specialaj",
"alert": "Fono de averto",
"alert_error": "Eraro",
"badge": "Fono de insigno",
"badge_notification": "Sciigo",
"panel_header": "Kapo de breto",
"top_bar": "Supra breto",
"borders": "Limoj",
"buttons": "Butonoj",
"inputs": "Enigaj kampoj",
"faint_text": "Malvigla teksto",
"chat": {
"border": "Limo",
"outgoing": "Eliraj",
"incoming": "Envenaj"
},
"tabs": "Langetoj",
"disabled": "Malŝaltita",
"selectedMenu": "Elektita menuero",
"selectedPost": "Elektita afiŝo",
"pressed": "Premita",
"highlight": "Emfazitaj eroj",
"icons": "Bildsimboloj",
"poll": "Grafo de enketo",
"underlay": "Subtavolo",
"popover": "Ŝpruchelpiloj, menuoj",
"post": "Afiŝoj/Priskriboj de uzantoj",
"alert_neutral": "Neŭtrala",
"alert_warning": "Averto"
},
"radii": {
"_tab_label": "Rondeco"
},
"shadows": {
"_tab_label": "Ombro kaj lumo",
"component": "Ero",
"override": "Transpasi",
"shadow_id": "Ombro #{value}",
"blur": "Malklarigo",
"spread": "Vastigo",
"inset": "Internigo",
"hint": "Por ombroj vi ankaŭ povas uzi --variable kiel koloran valoron, por uzi variantojn de CSS3. Bonvolu rimarki, ke tiuokaze agordoj de maltravidebleco ne funkcios.",
"filter_hint": {
"always_drop_shadow": "Averto: ĉi tiu ombro ĉiam uzas {0} kiam la foliumilo tion subtenas.",
"drop_shadow_syntax": "{0} ne subtenas parametron {1} kaj ŝlosilvorton {2}.",
"avatar_inset": "Bonvolu rimarki, ke agordi ambaŭ internajn kaj eksterajn ombrojn por profilbildoj povas redoni neatenditajn rezultojn ĉe profilbildoj travideblaj.",
"spread_zero": "Ombroj kun vastigo > 0 aperos kvazaŭ ĝi estus fakte nulo",
"inset_classic": "Internaj ombroj uzos {0}"
},
"components": {
"panel": "Breto",
"panelHeader": "Kapo de breto",
"topBar": "Supra breto",
"avatar": "Profilbildo de uzanto (en profila vido)",
"avatarStatus": "Profilbildo de uzanto (en afiŝa vido)",
"popup": "Ŝprucaĵoj",
"button": "Butono",
"buttonHover": "Butono (je ŝvebo)",
"buttonPressed": "Butono (premita)",
"buttonPressedHover": "Butono (premita kaj je ŝvebo)",
"input": "Eniga kampo"
}
},
"fonts": {
"_tab_label": "Tiparoj",
"help": "Elektu tiparon uzotan por eroj de la fasado. Por «propra» vi devas enigi la precizan nomon de tiparo tiel, kiel ĝi aperas en la sistemo.",
"components": {
"interface": "Fasado",
"input": "Enigaj kampoj",
"post": "Teksto de afiŝo",
"postCode": "Egallarĝa teksto en afiŝo (riĉteksto)"
},
"family": "Nomo de tiparo",
"size": "Grando (en bilderoj)",
"weight": "Pezo (graseco)",
"custom": "Propra"
},
"preview": {
"header": "Antaŭrigardo",
"content": "Enhavo",
"error": "Ekzempla eraro",
"button": "Butono",
"text": "Kelko da pliaj {0} kaj {1}",
"mono": "enhavo",
"input": "Ĵus alvenis al la Universala Kongreso!",
"faint_link": "helpan manlibron",
"fine_print": "Legu nian {0} por nenion utilan ekscii!",
"header_faint": "Tio estas en ordo",
"checkbox": "Mi legetis la kondiĉojn de uzado",
"link": "bela eta ligil’"
}
},
"discoverable": "Permesi trovon de ĉi tiu konto en serĉrezultoj kaj aliaj servoj",
"mutes_and_blocks": "Silentigitoj kaj blokitoj",
"chatMessageRadius": "Babileja mesaĝo",
"changed_email": "Retpoŝtadreso sukcese ŝanĝiĝis!",
"change_email_error": "Eraris ŝanĝo de via retpoŝtadreso.",
"change_email": "Ŝanĝi retpoŝtadreson",
"bot": "Ĉi tio estas robota konto",
"blocks_imported": "Blokitoj enportiĝis! Traktado daŭros iom da tempo.",
"block_import_error": "Eraris enporto de blokitoj",
"block_export": "Elporto de blokitoj",
"block_import": "Enporto de blokitoj",
"block_export_button": "Elporti viajn blokitojn al CSV-dosiero",
"allow_following_move": "Permesi memagan abonadon kiam abonata konto migras",
"mfa": {
"verify": {
"desc": "Por ŝalti duoblan aŭtentikigon, enigu la kodon el via aplikaĵo por duobla aŭtentikigo:"
},
"scan": {
"secret_code": "Ŝlosilo",
"desc": "Uzante vian aplikaĵon por duobla aŭtentikigo, skanu ĉi tiun rapidrespondan kodon aŭ enigu tekstan ŝlosilon:",
"title": "Skani"
},
"authentication_methods": "Metodoj de aŭtentikigo",
"recovery_codes_warning": "Notu la kodojn aŭ konservu ilin en sekura loko – alie vi ne revidos ilin. Se vi perdos aliron al via aplikaĵo por duobla aŭtentikigo kaj al la rehavaj kodoj, vi ne povos aliri vian konton.",
"waiting_a_recovery_codes": "Ricevante savkopiajn kodojn…",
"recovery_codes": "Rehavaj kodoj.",
"warning_of_generate_new_codes": "Kiam vi estigos novajn rehavajn kodojn, viaj malnovaj ne plu funkcios.",
"generate_new_recovery_codes": "Estigi novajn rehavajn kodojn",
"title": "Duobla aŭtentikigo",
"otp": "OTP"
},
"enter_current_password_to_confirm": "Enigu vian pasvorton por konfirmi vian identecon",
"security": "Sekureco",
"fun": "Amuzo",
"type_domains_to_mute": "Serĉu silentigotajn retnomojn",
"useStreamingApiWarning": "(Nerekomendate, eksperimente, povas preterpasi afiŝojn)",
"useStreamingApi": "Ricevi afiŝojn kaj sciigojn realtempe",
"user_mutes": "Uzantoj",
"reset_background_confirm": "Ĉu vi certe volas restarigi la fonon?",
"reset_banner_confirm": "Ĉu vi certe volas restarigi la rubandon?",
"reset_avatar_confirm": "Ĉu vi certe volas restarigi la profilbildon?",
"reset_profile_banner": "Restarigi rubandon de profilo",
"reset_profile_background": "Restarigi fonon de profilo",
"reset_avatar": "Restarigi profilbildon",
"minimal_scopes_mode": "Minimumigi elekteblojn pri amplekso de afiŝoj",
"search_user_to_block": "Serĉu, kiun vi volas bloki",
"search_user_to_mute": "Serĉu, kiun vi volas silentigi",
"autohide_floating_post_button": "Memage kaŝi la butonon por Nova afiŝo (poŝtelefone)",
"hide_followers_count_description": "Ne montri nombron de abonantoj",
"hide_follows_count_description": "Ne montri nombron de abonoj",
"notification_visibility_emoji_reactions": "Reagoj",
"notification_visibility_moves": "Migroj",
"new_email": "Nova retpoŝtadreso",
"profile_fields": {
"value": "Enhavo",
"name": "Etikedo",
"add_field": "Aldoni kampon",
"label": "Pridatumoj de profilo"
},
"import_blocks_from_a_csv_file": "Enporti blokitojn el CSV-dosiero",
"hide_muted_posts": "Kaŝi afiŝojn de silentigitaj uzantoj",
"emoji_reactions_on_timeline": "Montri bildosignajn reagojn en la tempolinio",
"pad_emoji": "Meti spacetojn ĉirkaŭ bildosigno post ties elekto",
"domain_mutes": "Retnomoj",
"notification_blocks": "Blokinte uzanton vi malabonos ĝin kaj haltigos ĉiujn sciigojn.",
"notification_mutes": "Por ne plu ricevi sciigojn de certa uzanto, silentigu.",
"notification_setting_hide_notification_contents": "Kaŝi la sendinton kaj la enhavojn de pasivaj sciigoj",
"notification_setting_privacy": "Privateco",
"notification_setting_block_from_strangers": "Bloki sciigojn de uzantoj, kiujn vi ne abonas",
"notification_setting_filters": "Filtriloj",
"greentext": "Memecitaĵoj",
"version": {
"frontend_version": "Versio de fasado",
"backend_version": "Versio de internaĵo",
"title": "Versio"
},
"accent": "Emfazo"
},
"timeline": {
"collapse": "Maletendi",
"conversation": "Interparolo",
"error_fetching": "Eraris ĝisdatigo",
"load_older": "Montri pli malnovajn statojn",
"no_retweet_hint": "Afiŝo estas markita kiel rekta aŭ nur por abonantoj, kaj ne eblas ĝin ripeti",
"repeated": "ripetita",
"show_new": "Montri novajn",
"up_to_date": "Ĝisdata",
"no_more_statuses": "Neniuj pliaj statoj",
"no_statuses": "Neniuj statoj",
"reload": "Enlegi ree"
},
"user_card": {
"approve": "Aprobi",
"block": "Bloki",
"blocked": "Blokita!",
"deny": "Rifuzi",
"favorites": "Ŝatataj",
"follow": "Aboni",
"follow_sent": "Peto sendiĝis!",
"follow_progress": "Petante…",
"follow_again": "Ĉu sendi peton ree?",
"follow_unfollow": "Malaboni",
"followees": "Abonatoj",
"followers": "Abonantoj",
"following": "Abonata!",
"follows_you": "Abonas vin!",
"its_you": "Tio estas vi!",
"media": "Vidaŭdaĵoj",
"mute": "Silentigi",
"muted": "Silentigita",
"per_day": "tage",
"remote_follow": "Fore aboni",
"statuses": "Statoj",
"unblock": "Malbloki",
"unblock_progress": "Malblokante…",
"block_progress": "Blokante…",
"unmute": "Malsilentigi",
"unmute_progress": "Malsilentigante…",
"mute_progress": "Silentigante…",
"report": "Raporti",
"message": "Mesaĝo",
"mention": "Mencio",
"hidden": "Kaŝita",
"admin_menu": {
"delete_user_confirmation": "Ĉu vi tute certas? Ĉi tiu ago ne estas malfarebla.",
"delete_user": "Forigi uzanton",
"quarantine": "Malpermesi federadon de afiŝoj de uzanto",
"disable_any_subscription": "Malpermesi ĉian abonadon al uzanto",
"disable_remote_subscription": "Malpermesi abonadon al uzanto el foraj nodoj",
"sandbox": "Devigi afiŝojn esti nur por abonantoj",
"force_unlisted": "Devigi afiŝojn nelistiĝi",
"strip_media": "Forigi vidaŭdaĵojn de afiŝoj",
"force_nsfw": "Marki ĉiujn afiŝojn konsternaj",
"delete_account": "Forigi konton",
"deactivate_account": "Malaktivigi konton",
"activate_account": "Aktivigi konton",
"revoke_moderator": "Malnomumi reguligiston",
"grant_moderator": "Nomumi reguligiston",
"revoke_admin": "Malnomumi administranton",
"grant_admin": "Nomumi administranton",
"moderation": "Reguligado"
},
"show_repeats": "Montri ripetojn",
"hide_repeats": "Kaŝi ripetojn",
"unsubscribe": "Ne ricevi sciigojn",
"subscribe": "Ricevi sciigojn"
},
"user_profile": {
"timeline_title": "Historio de uzanto",
"profile_does_not_exist": "Pardonu, ĉi tiu profilo ne ekzistas.",
"profile_loading_error": "Pardonu, eraris enlego de ĉi tiu profilo."
},
"who_to_follow": {
"more": "Pli",
"who_to_follow": "Kiun aboni"
},
"tool_tip": {
"media_upload": "Alŝuti vidaŭdaĵon",
"repeat": "Ripeti",
"reply": "Respondi",
"favorite": "Ŝati",
"user_settings": "Agordoj de uzanto",
"bookmark": "Legosigno",
"reject_follow_request": "Rifuzi abonpeton",
"accept_follow_request": "Akcepti abonpeton",
"add_reaction": "Aldoni reagon"
},
"upload": {
"error": {
"base": "Alŝuto malsukcesis.",
"file_too_big": "Dosiero estas tro granda [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Reprovu pli poste"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"emoji": {
"search_emoji": "Serĉi bildosignon",
"keep_open": "Teni elektilon malfermita",
"emoji": "Bildsignoj",
"stickers": "Glumarkoj",
"add_emoji": "Enigi bildosignon",
"load_all": "Enlegante ĉiujn {emojiAmount} bildosignojn",
"load_all_hint": "Enlegis la {saneAmount} unuajn bildosignojn; enlego de ĉiuj povus kaŭzi problemojn pri efikeco.",
"unicode": "Unikoda bildosigno",
"custom": "Propra bildosigno"
},
"polls": {
"not_enough_options": "Tro malmultaj unikaj elektebloj en la enketo",
"expired": "Enketo finiĝis antaŭ {0}",
"expires_in": "Enketo finiĝas je {0}",
"expiry": "Aĝo de enketo",
"multiple_choices": "Pluraj elektoj",
"single_choice": "Unu elekto",
"type": "Speco de enketo",
"vote": "Voĉi",
"votes": "voĉoj",
"option": "Elekteblo",
"add_option": "Aldoni elekteblon",
"add_poll": "Aldoni enketon"
},
"importer": {
"error": "Eraris enporto de ĉi tiu dosiero.",
"success": "Enportita sukcese.",
"submit": "Sendi"
},
"exporter": {
"processing": "Traktante; baldaŭ vi ricevos peton elŝuti vian dosieron",
"export": "Elporti"
},
"domain_mute_card": {
"unmute_progress": "Malsilentigante…",
"unmute": "Malsilentigi",
"mute_progress": "Silentigante…",
"mute": "Silentigi"
},
"about": {
"staff": "Skipo",
"mrf": {
"simple": {
"media_nsfw_desc": "Ĉi tiu nodo devigas vidaŭdaĵojn esti markitaj kiel konsternaj en afiŝoj el la jenaj nodoj:",
"media_nsfw": "Devige marki vidaŭdaĵojn konsternaj",
"media_removal_desc": "Ĉi tiu nodo forigas vidaŭdaĵojn de afiŝoj el la jenaj nodoj:",
"media_removal": "Forigo de vidaŭdaĵoj",
"ftl_removal": "Forigo de la historio de «La tuta konata reto»",
"quarantine_desc": "Ĉi tiu nodo sendos nur publikajn afiŝojn al la jenaj nodoj:",
"quarantine": "Kvaranteno",
"reject_desc": "Ĉi tiu nodo ne akceptos mesaĝojn de la jenaj nodoj:",
"reject": "Rifuzi",
"accept_desc": "Ĉi tiu nodo nur akceptas mesaĝojn de la jenaj nodoj:",
"accept": "Akcepti",
"simple_policies": "Specialaj politikoj de la nodo"
},
"mrf_policies": "Ŝaltis politikon de Mesaĝa ŝanĝilaro (MRF)",
"keyword": {
"is_replaced_by": "→",
"replace": "Anstataŭigi",
"reject": "Rifuzi",
"ftl_removal": "Forigo de la historio de «La tuta konata reto»",
"keyword_policies": "Politiko pri ŝlosilvortoj"
},
"federation": "Federado",
"mrf_policies_desc": "Politikoj de Mesaĝa ŝanĝilaro (MRF) efikas sur federa konduto de la nodo. La sekvaj politikoj estas ŝaltitaj:"
}
},
"selectable_list": {
"select_all": "Elekti ĉion"
},
"remote_user_resolver": {
"error": "Netrovinte.",
"searching_for": "Serĉante",
"remote_user_resolver": "Trovilo de foraj uzantoj"
},
"interactions": {
"load_older": "Enlegi pli malnovajn interagojn",
"moves": "Migrado de uzantoj",
"follows": "Novaj abonoj",
"favs_repeats": "Ripetoj kaj ŝatoj"
},
"errors": {
"storage_unavailable": "Pleroma ne povis aliri deponejon de la foliumilo. Via saluto kaj viaj lokaj agordoj ne estos konservitaj, kaj vi eble renkontos neatenditajn problemojn. Provu permesi kuketojn."
},
"status": {
"hide_content": "Kaŝi enhavon",
"show_content": "Montri enhavon",
"hide_full_subject": "Kaŝi plenan temon",
"show_full_subject": "Montri plenan temon",
"thread_muted_and_words": ", enhavas vortojn:",
"thread_muted": "Fadeno silentigita",
"copy_link": "Kopii ligilon al stato",
"status_unavailable": "Stato ne estas disponebla",
"unmute_conversation": "Malsilentigi interparolon",
"mute_conversation": "Silentigi interparolon",
"replies_list": "Respondoj:",
"reply_to": "Responde al",
"delete_confirm": "Ĉu vi certe volas forigi ĉi tiun staton?",
"unbookmark": "Senlegosigni",
"bookmark": "Legosigni",
"pinned": "Fiksita",
"unpin": "Malfiksi de profilo",
"pin": "Fiksi al profilo",
"delete": "Forigi staton",
"repeats": "Ripetoj",
"favorites": "Ŝatataj"
},
"time": {
"years_short": "{0}j",
"year_short": "{0}j",
"years": "{0} jaroj",
"year": "{0} jaro",
"weeks_short": "{0}s",
"week_short": "{0}s",
"weeks": "{0} semajnoj",
"week": "{0} semajno",
"seconds_short": "{0}s",
"second_short": "{0}s",
"seconds": "{0} sekundoj",
"second": "{0} sekundo",
"now_short": "nun",
"now": "ĵus",
"months_short": "{0}m",
"month_short": "{0}m",
"months": "{0} monatoj",
"month": "{0} monato",
"minutes_short": "{0}m",
"minute_short": "{0}m",
"minutes": "{0} minutoj",
"minute": "{0} minuto",
"in_past": "antaŭ {0}",
"in_future": "post {0}",
"hours_short": "{0}h",
"hour_short": "{0}h",
"hours": "{0} horoj",
"hour": "{0} horo",
"days_short": "{0}t",
"day_short": "{0}t",
"days": "{0} tagoj",
"day": "{0} tago"
},
"search": {
"people": "Personoj",
"no_results": "Neniuj rezultoj",
"people_talking": "{count} personoj parolas",
"person_talking": "{count} persono parolas",
"hashtags": "Kradvortoj"
},
"display_date": {
"today": "Hodiaŭ"
},
"file_type": {
"file": "Dosiero",
"image": "Bildo",
"video": "Filmo",
"audio": "Sono"
},
"chats": {
"empty_chat_list_placeholder": "Vi ankoraŭ havas neniun babilon. Komencu novan babilon!",
"error_sending_message": "Io misokazis dum sendado de la mesaĝo.",
"error_loading_chat": "Io misokazis dum enlego de la babilo.",
"delete_confirm": "Ĉu vi certe volas forigi ĉi tiun mesaĝon?",
"more": "Pli",
"empty_message_error": "Ne povas sendi malplenan mesaĝon",
"new": "Nova babilo",
"chats": "Babiloj",
"delete": "Forigi",
"you": "Vi:"
},
"password_reset": {
"password_reset_required_but_mailer_is_disabled": "Vi devas restarigi vian pasvorton, sed restarigado de pasvortoj estas malŝaltita. Bonvolu kontakti la administranton de via nodo.",
"password_reset_required": "Vi devas restarigi vian pasvorton por saluti.",
"password_reset_disabled": "Restarigado de pasvortoj estas malŝaltita. Bonvolu kontakti la administranton de via nodo.",
"too_many_requests": "Vi atingis la limon de provoj, reprovu pli poste.",
- "not_found": "Ni ne trovis tiun retpoŝtadreson aŭ uzantonomon.",
"return_home": "Reiri al la hejmpaĝo",
"check_email": "Kontrolu vian retpoŝton pro ligilo por restarigi vian pasvorton.",
"placeholder": "Via retpoŝtadreso aŭ uzantonomo",
"instruction": "Enigu vian retpoŝtadreson aŭ uzantonomon. Ni sendos al vi ligilon por restarigi vian pasvorton.",
"password_reset": "Restarigi pasvorton",
"forgot_password": "Ĉu vi forgesis pasvorton?"
},
"user_reporting": {
"generic_error": "Eraris traktado de via peto.",
"submit": "Sendi",
"forward_to": "Plusendi al {0}",
"forward_description": "La konto venas de alia servilo. Ĉu kopio de la raporto sendiĝu ankaŭ tien?",
"additional_comments": "Aldonaj komentoj",
"add_comment_description": "Ĉi tiu raporto sendiĝos al reguligistoj de via nodo. Vi povas komprenigi kial vi raportas ĉi tiun konton sube:",
"title": "Raportante {0}"
}
}
diff --git a/src/i18n/es.json b/src/i18n/es.json
index 3f313eb329..718d9040f5 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -1,631 +1,813 @@
{
"chat": {
"title": "Chat"
},
"exporter": {
"export": "Exportar",
"processing": "Procesando. Pronto se te pedirá que descargues tu archivo"
},
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Proxy de medios",
"scope_options": "Opciones del alcance de la visibilidad",
"text_limit": "Límite de caracteres",
"title": "Características",
- "who_to_follow": "A quién seguir"
+ "who_to_follow": "A quién seguir",
+ "pleroma_chat_messages": "Chat de Pleroma"
},
"finder": {
"error_fetching_user": "Error al buscar usuario",
"find_user": "Encontrar usuario"
},
"general": {
"apply": "Aplicar",
"submit": "Enviar",
"more": "Más",
"generic_error": "Ha ocurrido un error",
"optional": "opcional",
"show_more": "Mostrar más",
"show_less": "Mostrar menos",
"cancel": "Cancelar",
"disable": "Inhabilitar",
"enable": "Habilitar",
"confirm": "Confirmar",
- "verify": "Verificar"
+ "verify": "Verificar",
+ "peek": "Ojear",
+ "close": "Cerrar",
+ "dismiss": "Descartar",
+ "retry": "Inténtalo de nuevo",
+ "error_retry": "Por favor, inténtalo de nuevo",
+ "loading": "Cargando…"
},
"image_cropper": {
"crop_picture": "Recortar la foto",
"save": "Guardar",
"save_without_cropping": "Guardar sin recortar",
"cancel": "Cancelar"
},
"importer": {
"submit": "Enviar",
- "success": "Importado con éxito",
+ "success": "Importado con éxito.",
"error": "Se ha producido un error al importar el archivo."
},
"login": {
"login": "Identificarse",
"description": "Identificarse con OAuth",
"logout": "Cerrar sesión",
"password": "Contraseña",
"placeholder": "p.ej. lain",
"register": "Registrarse",
"username": "Usuario",
"hint": "Inicia sesión para unirte a la discusión",
"authentication_code": "Código de autenticación",
"enter_recovery_code": "Inserta el código de recuperación",
"enter_two_factor_code": "Inserta el código de dos factores",
"recovery_code": "Código de recuperación",
"heading": {
"totp": "Autenticación de dos factores",
"recovery": "Recuperación de dos factores"
}
},
"media_modal": {
"previous": "Anterior",
"next": "Siguiente"
},
"nav": {
"about": "Acerca de",
"administration": "Administración",
"back": "Volver",
"chat": "Chat Local",
"friend_requests": "Solicitudes de seguimiento",
"mentions": "Menciones",
"interactions": "Interacciones",
"dms": "Mensajes Directos",
"public_tl": "Línea Temporal Pública",
"timeline": "Línea Temporal",
- "twkn": "Toda La Red Conocida",
+ "twkn": "Red Conocida",
"user_search": "Búsqueda de Usuarios",
"search": "Buscar",
"who_to_follow": "A quién seguir",
- "preferences": "Preferencias"
+ "preferences": "Preferencias",
+ "chats": "Chats",
+ "timelines": "Líneas de Tiempo",
+ "bookmarks": "Marcadores"
},
"notifications": {
- "broken_favorite": "Estado desconocido, buscándolo...",
+ "broken_favorite": "Estado desconocido, buscándolo…",
"favorited_you": "le gusta tu estado",
"followed_you": "empezó a seguirte",
"load_older": "Cargar notificaciones antiguas",
"notifications": "Notificaciones",
"read": "¡Leído!",
"repeated_you": "repitió tu estado",
- "no_more_notifications": "No hay más notificaciones"
+ "no_more_notifications": "No hay más notificaciones",
+ "reacted_with": "reaccionó con {0}",
+ "migrated_to": "migrado a",
+ "follow_request": "quiere seguirte"
},
"polls": {
"add_poll": "Añadir encuesta",
"add_option": "Añadir opción",
"option": "Opción",
"votes": "votos",
"vote": "Votar",
"type": "Tipo de encuesta",
"single_choice": "Elección única",
"multiple_choices": "Elección múltiple",
"expiry": "Tiempo de vida de la encuesta",
"expires_in": "La encuesta termina en {0}",
"expired": "La encuesta terminó hace {0}",
"not_enough_options": "Muy pocas opciones únicas en la encuesta"
},
"emoji": {
"stickers": "Pegatinas",
"emoji": "Emoji",
"keep_open": "Mantener el selector abierto",
"search_emoji": "Buscar un emoji",
"add_emoji": "Insertar un emoji",
"custom": "Emojis personalizados",
- "unicode": "Emojis unicode"
+ "unicode": "Emojis unicode",
+ "load_all": "Cargando todos los {emojiAmount} emoji",
+ "load_all_hint": "Cargado el primer emoji {saneAmount}, cargar todos los emoji puede causar problemas de rendimiento."
},
"stickers": {
"add_sticker": "Añadir Pegatina"
},
"interactions": {
"favs_repeats": "Favoritos y Repetidos",
"follows": "Nuevos seguidores",
- "load_older": "Cargar interacciones más antiguas"
+ "load_older": "Cargar interacciones más antiguas",
+ "moves": "Usuario Migrado"
},
"post_status": {
"new_status": "Publicar un nuevo estado",
"account_not_locked_warning": "Tu cuenta no está {0}. Cualquiera puede seguirte y leer las entradas para Solo-Seguidores.",
"account_not_locked_warning_link": "bloqueada",
"attachments_sensitive": "Contenido sensible",
"content_type": {
"text/plain": "Texto Plano",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Tema (opcional)",
"default": "Acabo de aterrizar en L.A.",
"direct_warning_to_all": "Esta publicación será visible para todos los usuarios mencionados.",
"direct_warning_to_first_only": "Esta publicación solo será visible para los usuarios mencionados al comienzo del mensaje.",
"posting": "Publicando",
"scope_notice": {
"public": "Esta publicación será visible para todo el mundo",
- "private": "Esta publicación solo será visible para tus seguidores.",
+ "private": "Esta publicación solo será visible para tus seguidores",
"unlisted": "Esta publicación no será visible en la Línea Temporal Pública ni en Toda La Red Conocida"
},
"scope": {
"direct": "Directo - Solo para los usuarios mencionados",
"private": "Solo-seguidores - Solo tus seguidores leerán la publicación",
"public": "Público - Entradas visibles en las Líneas Temporales Públicas",
"unlisted": "Sin listar - Entradas no visibles en las Líneas Temporales Públicas"
- }
+ },
+ "media_description_error": "Error al actualizar el archivo, inténtalo de nuevo",
+ "empty_status_error": "No se puede publicar un estado vacío y sin archivos adjuntos",
+ "preview_empty": "Vacío",
+ "preview": "Vista previa",
+ "media_description": "Descripción multimedia"
},
"registration": {
"bio": "Biografía",
"email": "Correo electrónico",
"fullname": "Nombre a mostrar",
"password_confirm": "Confirmar contraseña",
"registration": "Registro",
"token": "Token de invitación",
"captcha": "CAPTCHA",
"new_captcha": "Haz click en la imagen para obtener un nuevo captcha",
"username_placeholder": "p.ej. lain",
"fullname_placeholder": "p.ej. Lain Iwakura",
"bio_placeholder": "e.g.\nHola, soy un ejemplo.\nAquí puedes poner algo representativo tuyo... o no.",
"validations": {
"username_required": "no puede estar vacío",
"fullname_required": "no puede estar vacío",
"email_required": "no puede estar vacío",
"password_required": "no puede estar vacío",
"password_confirmation_required": "no puede estar vacío",
"password_confirmation_match": "la contraseña no coincide"
}
},
"selectable_list": {
"select_all": "Seleccionar todo"
},
"settings": {
"app_name": "Nombre de la aplicación",
"security": "Seguridad",
"enter_current_password_to_confirm": "Introduce la contraseña actual para confirmar tu identidad",
"mfa": {
"otp": "OTP",
"setup_otp": "Configurar OTP",
"wait_pre_setup_otp": "preconfiguración OTP",
"confirm_and_enable": "Confirmar y habilitar OTP",
"title": "Autentificación de dos factores",
"generate_new_recovery_codes": "Generar códigos de recuperación nuevos",
"warning_of_generate_new_codes": "Cuando generas nuevos códigos de recuperación, los antiguos dejarán de funcionar.",
"recovery_codes": "Códigos de recuperación.",
- "waiting_a_recovery_codes": "Recibiendo códigos de respaldo",
+ "waiting_a_recovery_codes": "Recibiendo códigos de respaldo…",
"recovery_codes_warning": "Anote los códigos o guárdelos en un lugar seguro, de lo contrario no los volverá a ver. Si pierde el acceso a su aplicación 2FA y los códigos de recuperación, su cuenta quedará bloqueada.",
"authentication_methods": "Métodos de autentificación",
"scan": {
"title": "Escanear",
"desc": "Usando su aplicación de dos factores, escanee este código QR o ingrese la clave de texto:",
"secret_code": "Clave"
},
"verify": {
"desc": "Para habilitar la autenticación de dos factores, ingrese el código de su aplicación 2FA:"
}
},
"attachmentRadius": "Adjuntos",
"attachments": "Adjuntos",
"avatar": "Avatar",
"avatarAltRadius": "Avatares (Notificaciones)",
"avatarRadius": "Avatares",
"background": "Fondo",
"bio": "Biografía",
"block_export": "Exportar usuarios bloqueados",
"block_export_button": "Exporta la lista de tus usuarios bloqueados a un archivo csv",
"block_import": "Importar usuarios bloqueados",
"block_import_error": "Error importando la lista de usuarios bloqueados",
"blocks_imported": "¡Lista de usuarios bloqueados importada! El procesado puede tardar un poco.",
"blocks_tab": "Bloqueados",
"btnRadius": "Botones",
"cBlue": "Azul (Responder, seguir)",
"cGreen": "Verde (Retweet)",
"cOrange": "Naranja (Favorito)",
"cRed": "Rojo (Cancelar)",
"change_password": "Cambiar contraseña",
"change_password_error": "Hubo un problema cambiando la contraseña.",
"changed_password": "¡Contraseña cambiada correctamente!",
"collapse_subject": "Colapsar entradas con tema",
"composing": "Redactando",
"confirm_new_password": "Confirmar la nueva contraseña",
"current_avatar": "Tu avatar actual",
"current_password": "Contraseña actual",
"current_profile_banner": "Tu cabecera actual",
"data_import_export_tab": "Importar / Exportar Datos",
"default_vis": "Alcance de visibilidad por defecto",
"delete_account": "Eliminar la cuenta",
"discoverable": "Permitir la aparición de esta cuenta en los resultados de búsqueda y otros servicios",
- "delete_account_description": "Eliminar para siempre la cuenta y todos los mensajes.",
+ "delete_account_description": "Eliminar para siempre los datos y desactivar la cuenta.",
"pad_emoji": "Rellenar con espacios al agregar emojis desde el selector",
"delete_account_error": "Hubo un error al eliminar tu cuenta. Si el fallo persiste, ponte en contacto con el administrador de tu instancia.",
"delete_account_instructions": "Escribe tu contraseña para confirmar la eliminación de tu cuenta.",
"avatar_size_instruction": "El tamaño mínimo recomendado para el avatar es de 150X150 píxeles.",
"export_theme": "Exportar tema",
"filtering": "Filtrado",
"filtering_explanation": "Todos los estados que contengan estas palabras serán silenciados, una por línea",
"follow_export": "Exportar personas que tú sigues",
"follow_export_button": "Exporta tus seguidores a un fichero csv",
"follow_import": "Importar personas que tú sigues",
"follow_import_error": "Error al importar el fichero",
"follows_imported": "¡Importado! Procesarlos llevará tiempo.",
"foreground": "Primer plano",
"general": "General",
"hide_attachments_in_convo": "Ocultar adjuntos en las conversaciones",
"hide_attachments_in_tl": "Ocultar adjuntos en la línea temporal",
"hide_muted_posts": "Ocultar las publicaciones de los usuarios silenciados",
"max_thumbnails": "Cantidad máxima de miniaturas por publicación",
"hide_isp": "Ocultar el panel específico de la instancia",
"preload_images": "Precargar las imágenes",
- "use_one_click_nsfw": "Abrir los adjuntos NSFW con un solo click.",
+ "use_one_click_nsfw": "Abrir los adjuntos NSFW con un solo click",
"hide_post_stats": "Ocultar las estadísticas de las entradas (p.ej. el número de favoritos)",
"hide_user_stats": "Ocultar las estadísticas del usuario (p.ej. el número de seguidores)",
"hide_filtered_statuses": "Ocultar estados filtrados",
"import_blocks_from_a_csv_file": "Importar lista de usuarios bloqueados dese un archivo csv",
"import_followers_from_a_csv_file": "Importar personas que tú sigues a partir de un archivo csv",
"import_theme": "Importar tema",
"inputRadius": "Campos de entrada",
"checkboxRadius": "Casillas de verificación",
"instance_default": "(por defecto: {value})",
"instance_default_simple": "(por defecto)",
"interface": "Interfaz",
"interfaceLanguage": "Idioma",
"invalid_theme_imported": "El archivo importado no es un tema válido de Pleroma. No se han realizado cambios.",
"limited_availability": "No disponible en tu navegador",
"links": "Enlaces",
"lock_account_description": "Restringir el acceso a tu cuenta solo a seguidores admitidos",
"loop_video": "Vídeos en bucle",
"loop_video_silent_only": "Bucle solo en vídeos sin sonido (p.ej. \"gifs\" de Mastodon)",
"mutes_tab": "Silenciados",
"play_videos_in_modal": "Reproducir los vídeos en un marco emergente",
"use_contain_fit": "No recortar los adjuntos en miniaturas",
"name": "Nombre",
"name_bio": "Nombre y Biografía",
"new_password": "Nueva contraseña",
"notification_visibility": "Tipos de notificaciones a mostrar",
"notification_visibility_follows": "Nuevos seguidores",
"notification_visibility_likes": "Me gustan (Likes)",
"notification_visibility_mentions": "Menciones",
"notification_visibility_repeats": "Repeticiones (Repeats)",
"no_rich_text_description": "Eliminar el formato de texto enriquecido de todas las entradas",
"no_blocks": "No hay usuarios bloqueados",
"no_mutes": "No hay usuarios silenciados",
"hide_follows_description": "No mostrar a quién sigo",
"hide_followers_description": "No mostrar quién me sigue",
"hide_follows_count_description": "No mostrar el número de cuentas que sigo",
"hide_followers_count_description": "No mostrar el número de cuentas que me siguen",
"show_admin_badge": "Mostrar la insignia de Administrador en mi perfil",
"show_moderator_badge": "Mostrar la insignia de Moderador en mi perfil",
"nsfw_clickthrough": "Activar el clic para ocultar los adjuntos NSFW",
"oauth_tokens": "Tokens de OAuth",
"token": "Token",
"refresh_token": "Actualizar el token",
"valid_until": "Válido hasta",
"revoke_token": "Revocar",
"panelRadius": "Paneles",
- "pause_on_unfocused": "Parar la transmisión cuando no estés en foco.",
+ "pause_on_unfocused": "Parar la transmisión cuando no estés en foco",
"presets": "Por defecto",
"profile_background": "Fondo del Perfil",
"profile_banner": "Cabecera del Perfil",
"profile_tab": "Perfil",
"radii_help": "Establezca el redondeo de las esquinas de la interfaz (en píxeles)",
"replies_in_timeline": "Réplicas en la línea temporal",
"reply_visibility_all": "Mostrar todas las réplicas",
"reply_visibility_following": "Solo mostrar réplicas para mí o usuarios a los que sigo",
"reply_visibility_self": "Solo mostrar réplicas para mí",
"autohide_floating_post_button": "Ocultar automáticamente el botón 'Nueva Publicación' (para móviles)",
"saving_err": "Error al guardar los ajustes",
"saving_ok": "Ajustes guardados",
"search_user_to_block": "Buscar usuarios a bloquear",
"search_user_to_mute": "Buscar usuarios a silenciar",
"security_tab": "Seguridad",
"scope_copy": "Copiar la visibilidad de la publicación cuando contestamos (En los mensajes directos (MDs) siempre se copia)",
"minimal_scopes_mode": "Minimizar las opciones de publicación",
"set_new_avatar": "Cambiar avatar",
"set_new_profile_background": "Cambiar el fondo del perfil",
"set_new_profile_banner": "Cambiar la cabecera del perfil",
"settings": "Ajustes",
"subject_input_always_show": "Mostrar siempre el campo del tema",
"subject_line_behavior": "Copiar el tema en las respuestas",
"subject_line_email": "Como email: \"re: tema\"",
"subject_line_mastodon": "Como mastodon: copiar como es",
"subject_line_noop": "No copiar",
"post_status_content_type": "Formato de publicación",
"stop_gifs": "Iniciar GIFs al pasar el ratón",
"streaming": "Habilitar la transmisión automática de nuevas publicaciones cuando se desplaza hacia la parte superior",
"text": "Texto",
"theme": "Tema",
"theme_help": "Use códigos de color hexadecimales (#rrggbb) para personalizar su tema de colores.",
"theme_help_v2_1": "También puede invalidar los colores y la opacidad de ciertos componentes si activa la casilla de verificación. Use el botón \"Borrar todo\" para deshacer los cambios.",
"theme_help_v2_2": "Los iconos debajo de algunas entradas son indicadores de contraste de fondo/texto, desplace el ratón por encima para obtener información más detallada. Tenga en cuenta que cuando se utilizan indicadores de contraste de transparencia se muestra el peor caso posible.",
"tooltipRadius": "Información/alertas",
"upload_a_photo": "Subir una foto",
"user_settings": "Ajustes del Usuario",
"values": {
"false": "no",
"true": "sí"
},
"notifications": "Notificaciones",
"notification_mutes": "Para dejar de recibir notificaciones de un usuario específico, siléncialo.",
"notification_blocks": "El bloqueo de un usuario detiene todas las notificaciones y también las cancela.",
"enable_web_push_notifications": "Habilitar las notificiaciones en el navegador",
"style": {
"switcher": {
"keep_color": "Mantener colores",
"keep_shadows": "Mantener sombras",
"keep_opacity": "Mantener opacidad",
"keep_roundness": "Mantener redondeces",
"keep_fonts": "Mantener fuentes",
"save_load_hint": "Las opciones \"Mantener\" conservan las opciones configuradas actualmente al seleccionar o cargar temas, también almacena dichas opciones al exportar un tema. Cuando se desactiven todas las casillas de verificación, el tema de exportación lo guardará todo.",
"reset": "Reiniciar",
"clear_all": "Limpiar todo",
- "clear_opacity": "Limpiar opacidad"
+ "clear_opacity": "Limpiar opacidad",
+ "help": {
+ "snapshot_source_mismatch": "Conflicto de versiones: lo más probable es que el frontend se haya revertido y actualizado nuevamente, si cambió el tema con una versión anterior del frontend, lo más probable es que desee usar la versión anterior; de lo contrario, use la nueva versión.",
+ "migration_napshot_gone": "Por alguna razón, faltaba la instantánea, algunas cosas podrían verse diferentes de lo que recuerdas.",
+ "migration_snapshot_ok": "Solo para estar seguro, se cargó la instantánea del tema. Puede intentar cargar los datos del tema.",
+ "fe_downgraded": "Versión de PleromaFE revertida.",
+ "fe_upgraded": "El creador de temas de PleromaFE se actualizó después de la actualización de la versión.",
+ "snapshot_missing": "No había ninguna instantánea del tema en el archivo, por lo que podría verse diferente de lo previsto originalmente.",
+ "snapshot_present": "Se ha cargado una instantánea del tema, por lo que todos los valores se sobrescriben. De lo contrario, puede cargar el tema por completo.",
+ "older_version_imported": "El archivo que ha importado se creó en una versión anterior del frontend actual.",
+ "v2_imported": "El archivo que ha importado fue creado para un frontend más antiguo. Intentamos maximizar la compatibilidad, pero aún podría haber inconsistencias.",
+ "future_version_imported": "El archivo que ha importado se creó para una versión más reciente del frontend.",
+ "upgraded_from_v2": "PleromaFE se ha actualizado, el tema podría verse un poco diferente de lo que recuerdas."
+ },
+ "use_source": "Nueva versión",
+ "use_snapshot": "Versión antigua",
+ "keep_as_is": "Mantener como está",
+ "load_theme": "Cargar tema"
},
"common": {
"color": "Color",
"opacity": "Opacidad",
"contrast": {
"hint": "El ratio de contraste es {ratio}. {level} {context}",
"level": {
"aa": "Cumple con la pauta de nivel AA (mínimo)",
"aaa": "Cumple con la pauta de nivel AAA (recomendado)",
"bad": "No cumple con las pautas de accesibilidad"
},
"context": {
"18pt": "para textos grandes (+18pt)",
"text": "para textos"
}
}
},
"common_colors": {
"_tab_label": "Común",
"main": "Colores comunes",
"foreground_hint": "Vea la pestaña \"Avanzado\" para un control más detallado",
"rgbo": "Iconos, acentos, insignias"
},
"advanced_colors": {
"_tab_label": "Avanzado",
"alert": "Fondo de Alertas",
"alert_error": "Error",
"badge": "Fondo de Insignias",
"badge_notification": "Notificaciones",
"panel_header": "Cabecera del panel",
"top_bar": "Barra superior",
"borders": "Bordes",
"buttons": "Botones",
"inputs": "Campos de entrada",
- "faint_text": "Texto desvanecido"
+ "faint_text": "Texto desvanecido",
+ "alert_neutral": "Neutral",
+ "chat": {
+ "border": "Borde",
+ "outgoing": "Salientes",
+ "incoming": "Entrantes"
+ },
+ "tabs": "Pestañas",
+ "toggled": "Intercambiado",
+ "disabled": "Deshabilitado",
+ "selectedMenu": "Elemento del menú seleccionado",
+ "selectedPost": "Publicación seleccionada",
+ "pressed": "Presionado",
+ "highlight": "Elementos destacados",
+ "icons": "Iconos",
+ "poll": "Gráfico de la encuesta",
+ "underlay": "Subrayado",
+ "popover": "Sugerencias, menús, superposiciones",
+ "post": "Publicaciones/Biografías de Usuarios",
+ "alert_warning": "Precaución"
},
"radii": {
"_tab_label": "Redondez"
},
"shadows": {
"_tab_label": "Sombra e iluminación",
"component": "Componente",
"override": "Sobreescribir",
"shadow_id": "Sombra #{value}",
"blur": "Difuminar",
"spread": "Cantidad",
"inset": "Sombra interior",
"hint": "Para las sombras, también puede usar --variable como un valor de color para usar las variables CSS3. Tenga en cuenta que establecer la opacidad no funcionará en este caso.",
"filter_hint": {
"always_drop_shadow": "Advertencia, esta sombra siempre usa {0} cuando el navegador lo soporta.",
"drop_shadow_syntax": "{0} no soporta el parámetro {1} y la palabra clave {2}.",
"avatar_inset": "Tenga en cuenta que la combinación de sombras interiores como no-interiores en los avatares, puede dar resultados inesperados con los avatares transparentes.",
"spread_zero": "Sombras con una cantidad > 0 aparecerá como si estuviera puesto a cero",
"inset_classic": "Las sombras interiores estarán usando {0}"
},
"components": {
"panel": "Panel",
"panelHeader": "Cabecera del panel",
"topBar": "Barra superior",
"avatar": "Avatar del usuario (en la vista del perfil)",
"avatarStatus": "Avatar del usuario (en la vista de la entrada)",
"popup": "Ventanas y textos emergentes (popups & tooltips)",
"button": "Botones",
"buttonHover": "Botón (encima)",
"buttonPressed": "Botón (presionado)",
"buttonPressedHover": "Botón (presionado+encima)",
"input": "Campo de entrada"
- }
+ },
+ "hintV3": "Para las sombras, también puede usar la notación {0} para usar otro espacio de color."
},
"fonts": {
"_tab_label": "Fuentes",
"help": "Seleccione la fuente a utilizar para los elementos de la interfaz de usuario. Para \"personalizar\", debe ingresar el nombre exacto de la fuente tal como aparece en el sistema.",
"components": {
"interface": "Interfaz",
"input": "Campos de entrada",
"post": "Texto de publicaciones",
"postCode": "Texto monoespaciado en publicación (texto enriquecido)"
},
"family": "Nombre de la fuente",
"size": "Tamaño (en px)",
"weight": "Peso (negrita)",
"custom": "Personalizado"
},
"preview": {
"header": "Vista previa",
"content": "Contenido",
"error": "Ejemplo de error",
"button": "Botón",
"text": "Un montón de {0} y {1}",
"mono": "contenido",
"input": "Acaba de aterrizar en L.A.",
"faint_link": "manual útil",
"fine_print": "¡Lea nuestro {0} para aprender nada útil!",
"header_faint": "Esto está bien",
"checkbox": "He revisado los términos y condiciones",
"link": "un bonito enlace"
}
},
"version": {
"title": "Versión",
"backend_version": "Versión del Backend",
"frontend_version": "Versión del Frontend"
- }
+ },
+ "notification_visibility_moves": "Usuario Migrado",
+ "greentext": "Texto verde (meme arrows)",
+ "notification_setting_hide_notification_contents": "Ocultar el remitente y el contenido de las notificaciones push",
+ "notification_setting_privacy": "Privacidad",
+ "notification_setting_block_from_strangers": "Bloquea las notificaciones de los usuarios que no sigues",
+ "notification_setting_filters": "Filtros",
+ "fun": "Divertido",
+ "type_domains_to_mute": "Buscar dominios para silenciar",
+ "useStreamingApiWarning": "(no recomendado, experimental, puede omitir publicaciones)",
+ "useStreamingApi": "Recibir entradas y notificaciones en tiempo real",
+ "user_mutes": "Usuarios",
+ "reset_profile_background": "Restablecer el fondo de pantalla",
+ "reset_background_confirm": "¿Estás seguro de restablecer el fondo de pantalla?",
+ "reset_banner_confirm": "¿Estás seguro de restablecer la imagen del banner?",
+ "reset_avatar_confirm": "¿Estás seguro de restablecer la imagen de avatar?",
+ "reset_profile_banner": "Restabler imagen del banner del perfil",
+ "reset_avatar": "Restablecer avatar",
+ "notification_visibility_emoji_reactions": "Reacciones",
+ "new_email": "Nuevo correo electrónico",
+ "profile_fields": {
+ "value": "Contenido",
+ "name": "Etiqueta",
+ "add_field": "Añadir un campo",
+ "label": "Metadatos del perfil"
+ },
+ "accent": "Acento",
+ "emoji_reactions_on_timeline": "Mostrar las reacciones de emoji en la línea de tiempo",
+ "domain_mutes": "Dominios",
+ "mutes_and_blocks": "Silenciado y Bloqueados",
+ "chatMessageRadius": "Mensaje de chat",
+ "changed_email": "¡Correo electrónico modificado correctamente!",
+ "change_email_error": "Ha ocurrido un error al intentar modificar tu correo electrónico.",
+ "change_email": "Modificar el correo electrónico",
+ "bot": "Esta cuenta es un bot",
+ "allow_following_move": "Permitir el seguimiento automático, cuando la cuenta que sigues se traslada a otra instancia"
},
"time": {
"day": "{0} día",
"days": "{0} días",
"day_short": "{0}d",
"days_short": "{0}d",
"hour": "{0} hora",
"hours": "{0} horas",
"hour_short": "{0}h",
"hours_short": "{0}h",
"in_future": "en {0}",
"in_past": "hace {0}",
"minute": "{0} minuto",
"minutes": "{0} minutos",
"minute_short": "{0}min",
"minutes_short": "{0}min",
"month": "{0} mes",
"months": "{0} meses",
"month_short": "{0}m",
"months_short": "{0}m",
"now": "justo ahora",
"now_short": "ahora",
"second": "{0} segundo",
"seconds": "{0} segundos",
"second_short": "{0}s",
"seconds_short": "{0}s",
"week": "{0} semana",
"weeks": "{0} semanas",
"week_short": "{0}sem",
"weeks_short": "{0}sem",
"year": "{0} año",
"years": "{0} años",
"year_short": "{0}a",
"years_short": "{0}a"
},
"timeline": {
"collapse": "Colapsar",
"conversation": "Conversación",
"error_fetching": "Error al cargar las actualizaciones",
"load_older": "Cargar actualizaciones anteriores",
"no_retweet_hint": "La publicación está marcada como solo para seguidores o directa y no se puede repetir",
"repeated": "repetida",
"show_new": "Mostrar lo nuevo",
"up_to_date": "Actualizado",
"no_more_statuses": "No hay más estados",
- "no_statuses": "Sin estados"
+ "no_statuses": "Sin estados",
+ "reload": "Recargar"
},
"status": {
"favorites": "Favoritos",
"repeats": "Repetidos",
"delete": "Eliminar publicación",
"pin": "Fijar en tu perfil",
"unpin": "Desclavar de tu perfil",
"pinned": "Fijado",
"delete_confirm": "¿Realmente quieres borrar la publicación?",
"reply_to": "Respondiendo a",
"replies_list": "Respuestas:",
"mute_conversation": "Silenciar la conversación",
- "unmute_conversation": "Mostrar la conversación"
+ "unmute_conversation": "Mostrar la conversación",
+ "hide_content": "Ocultar el contenido",
+ "show_content": "Mostrar el contenido",
+ "hide_full_subject": "Ocultar el tema completo",
+ "show_full_subject": "Mostrar el tema completo",
+ "thread_muted_and_words": ", contiene:",
+ "thread_muted": "Conversación silenciada",
+ "copy_link": "Copiar el enlace al estado",
+ "status_unavailable": "Estado no disponible",
+ "bookmark": "Marcar",
+ "unbookmark": "Desmarcar"
},
"user_card": {
"approve": "Aprobar",
"block": "Bloquear",
"blocked": "¡Bloqueado!",
"deny": "Denegar",
"favorites": "Favoritos",
"follow": "Seguir",
"follow_sent": "¡Solicitud enviada!",
"follow_progress": "Solicitando…",
"follow_again": "¿Enviar solicitud de nuevo?",
"follow_unfollow": "Dejar de seguir",
"followees": "Siguiendo",
"followers": "Seguidores",
"following": "¡Siguiendo!",
"follows_you": "¡Te sigue!",
"its_you": "¡Eres tú!",
"media": "Media",
"mention": "Mencionar",
"mute": "Silenciar",
"muted": "Silenciado",
"per_day": "por día",
"remote_follow": "Seguir",
"report": "Reportar",
"statuses": "Estados",
"subscribe": "Suscribirse",
"unsubscribe": "Desuscribirse",
"unblock": "Desbloquear",
- "unblock_progress": "Desbloqueando...",
- "block_progress": "Bloqueando...",
- "unmute": "Quitar silencio",
- "unmute_progress": "Quitando silencio...",
- "mute_progress": "Silenciando...",
+ "unblock_progress": "Desbloqueando…",
+ "block_progress": "Bloqueando…",
+ "unmute": "Dejar de silenciar",
+ "unmute_progress": "Quitando silencio…",
+ "mute_progress": "Silenciando…",
"admin_menu": {
"moderation": "Moderación",
"grant_admin": "Conceder permisos de Administrador",
"revoke_admin": "Revocar permisos de Administrador",
"grant_moderator": "Conceder permisos de Moderador",
"revoke_moderator": "Revocar permisos de Moderador",
"activate_account": "Activar cuenta",
"deactivate_account": "Desactivar cuenta",
"delete_account": "Eliminar cuenta",
"force_nsfw": "Marcar todas las publicaciones como NSFW (no es seguro/apropiado para el trabajo)",
"strip_media": "Eliminar archivos multimedia de las publicaciones",
"force_unlisted": "Forzar que se publique en el modo -Sin Listar-",
"sandbox": "Forzar que se publique solo para tus seguidores",
- "disable_remote_subscription": "No permitir que usuarios de instancias remotas te siga.",
+ "disable_remote_subscription": "No permitir que usuarios de instancias remotas te siga",
"disable_any_subscription": "No permitir que ningún usuario te siga",
"quarantine": "No permitir publicaciones de usuarios de instancias remotas",
"delete_user": "Eliminar usuario",
"delete_user_confirmation": "¿Estás completamente seguro? Esta acción no se puede deshacer."
- }
+ },
+ "show_repeats": "Mostrar repetidos",
+ "hide_repeats": "Ocultar repetidos",
+ "message": "Mensaje",
+ "hidden": "Oculto"
},
"user_profile": {
"timeline_title": "Linea Temporal del Usuario",
"profile_does_not_exist": "Lo sentimos, este perfil no existe.",
"profile_loading_error": "Lo sentimos, hubo un error al cargar este perfil."
},
"user_reporting": {
"title": "Reportando a {0}",
"add_comment_description": "El informe será enviado a los moderadores de su instancia. Puedes proporcionar una explicación de por qué estás reportando esta cuenta a continuación:",
"additional_comments": "Comentarios adicionales",
"forward_description": "La cuenta es de otro servidor. ¿Enviar una copia del informe allí también?",
"forward_to": "Reenviar a {0}",
"submit": "Enviar",
"generic_error": "Se produjo un error al procesar la solicitud."
},
"who_to_follow": {
"more": "Más",
"who_to_follow": "A quién seguir"
},
"tool_tip": {
"media_upload": "Subir Medios",
"repeat": "Repetir",
"reply": "Contestar",
"favorite": "Favorito",
- "user_settings": "Ajustes de usuario"
+ "user_settings": "Ajustes de usuario",
+ "bookmark": "Marcador",
+ "reject_follow_request": "Rechazar la solicitud de seguimiento",
+ "accept_follow_request": "Aceptar la solicitud de seguimiento",
+ "add_reaction": "Añadir Reacción"
},
"upload": {
"error": {
"base": "Subida fallida.",
"file_too_big": "Archivo demasiado grande [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Inténtalo más tarde"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "Personas",
"hashtags": "Etiquetas",
"person_talking": "{count} personas hablando",
"people_talking": "{count} gente hablando",
"no_results": "Sin resultados"
},
"password_reset": {
"forgot_password": "¿Contraseña olvidada?",
"password_reset": "Restablecer la contraseña",
"instruction": "Ingrese su dirección de correo electrónico o nombre de usuario. Le enviaremos un enlace para restablecer su contraseña.",
"placeholder": "Su correo electrónico o nombre de usuario",
"check_email": "Revise su correo electrónico para obtener un enlace para restablecer su contraseña.",
"return_home": "Volver a la página de inicio",
- "not_found": "No pudimos encontrar ese correo electrónico o nombre de usuario.",
"too_many_requests": "Has alcanzado el límite de intentos, vuelve a intentarlo más tarde.",
- "password_reset_disabled": "El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia."
+ "password_reset_disabled": "El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia.",
+ "password_reset_required_but_mailer_is_disabled": "Debes restablecer la contraseña, pero el restablecimiento de contraseñas está deshabilitado. Por favor contacta con el administrador de la instancia.",
+ "password_reset_required": "Debes restablecer la contraseña para iniciar sesión."
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma no pudo acceder al almacenamiento del navegador. Su inicio de sesión o su configuración local no se guardarán y puede encontrar problemas inesperados. Intente habilitar las cookies."
+ },
+ "domain_mute_card": {
+ "unmute_progress": "Quitando silencio…",
+ "unmute": "Dejar de silenciar",
+ "mute_progress": "Silenciando…",
+ "mute": "Silenciar"
+ },
+ "about": {
+ "mrf": {
+ "simple": {
+ "accept_desc": "Esta instancia solo acepta mensajes de las siguientes instancias:",
+ "media_nsfw_desc": "Esta instancia obliga a que los archivos multimedia se establezcan como sensibles en las publicaciones de las siguientes instancias:",
+ "media_nsfw": "Forzar Multimedia Como Sensible",
+ "media_removal_desc": "Esta instancia elimina los archivos multimedia de las publicaciones de las siguientes instancias:",
+ "media_removal": "Eliminar Multimedia",
+ "quarantine": "Cuarentena",
+ "ftl_removal_desc": "Esta instancia elimina las siguientes instancias de la línea de tiempo \"Toda la red conocida\":",
+ "ftl_removal": "Eliminar de la línea de tiempo \"Toda La Red Conocida\"",
+ "quarantine_desc": "Esta instancia enviará solo publicaciones públicas a las siguientes instancias:",
+ "simple_policies": "Políticas sobre instancias específicas",
+ "reject_desc": "Esta instancia no aceptará mensajes de las siguientes instancias:",
+ "reject": "Rechazar",
+ "accept": "Aceptar"
+ },
+ "mrf_policies_desc": "Las políticas MRF manipulan la federación de esta instancia con el resto del fediverso. Las siguientes políticas están habilitadas:",
+ "mrf_policies": "Habilitar políticas MRF",
+ "keyword": {
+ "ftl_removal": "Eliminar de la línea de tiempo \"Toda La Red Conocida\"",
+ "keyword_policies": "Política de Palabras Clave",
+ "is_replaced_by": "→",
+ "replace": "Reemplazar",
+ "reject": "Rechazar"
+ },
+ "federation": "Federación"
+ },
+ "staff": "Equipo"
+ },
+ "shoutbox": {
+ "title": "Jaula de Grillos"
+ },
+ "remote_user_resolver": {
+ "remote_user_resolver": "Resolución de usuario remoto",
+ "error": "No encontrado.",
+ "searching_for": "Buscando"
+ },
+ "chats": {
+ "chats": "Chats",
+ "empty_chat_list_placeholder": "Aún no tienes ninguna conversación. ¡Inicia una nueva conversación!",
+ "error_sending_message": "Algo salió mal al enviar el mensaje.",
+ "error_loading_chat": "Algo salió mal al cargar el chat.",
+ "delete_confirm": "¿Realmente quieres borrar este mensaje?",
+ "more": "Más",
+ "empty_message_error": "No puedes publicar un mensaje vacío",
+ "new": "Nueva conversación",
+ "delete": "Borrar",
+ "message_user": "Mensaje de {nickname}",
+ "you": "Tú:"
+ },
+ "display_date": {
+ "today": "Hoy"
+ },
+ "file_type": {
+ "file": "Archivo",
+ "image": "Imagen",
+ "video": "Vídeo",
+ "audio": "Audio"
}
}
diff --git a/src/i18n/eu.json b/src/i18n/eu.json
index f04203f0ce..fdca6b95bb 100644
--- a/src/i18n/eu.json
+++ b/src/i18n/eu.json
@@ -1,635 +1,642 @@
{
"chat": {
"title": "Txata"
},
"exporter": {
"export": "Esportatu",
"processing": "Prozesatzen, zure fitxategia deskargatzeko eskatuko zaizu laster"
},
"features_panel": {
"chat": "Txata",
"gopher": "Ghoper",
"media_proxy": "Media proxy",
"scope_options": "Ikusgaitasun aukerak",
"text_limit": "Testu limitea",
"title": "Ezaugarriak",
"who_to_follow": "Nori jarraitu"
},
"finder": {
"error_fetching_user": "Errorea erabiltzailea eskuratzen",
"find_user": "Bilatu erabiltzailea"
},
"general": {
"apply": "Aplikatu",
"submit": "Bidali",
"more": "Gehiago",
"generic_error": "Errore bat gertatu da",
"optional": "Hautazkoa",
"show_more": "Gehiago erakutsi",
"show_less": "Gutxiago erakutsi",
"cancel": "Ezeztatu",
"disable": "Ezgaitu",
"enable": "Gaitu",
"confirm": "Baieztatu",
"verify": "Egiaztatu"
},
"image_cropper": {
"crop_picture": "Moztu argazkia",
"save": "Gorde",
"save_without_cropping": "Gorde moztu gabe",
"cancel": "Ezeztatu"
},
"importer": {
"submit": "Bidali",
"success": "Ondo inportatu da.",
"error": "Errore bat gertatu da fitxategi hau inportatzerakoan."
},
"login": {
"login": "Saioa hasi",
"description": "OAuth-ekin saioa hasi",
"logout": "Saioa itxi",
"password": "Pasahitza",
"placeholder": "adibidez Lain",
"register": "Erregistratu",
"username": "Erabiltzaile-izena",
"hint": "Hasi saioa eztabaidan parte-hartzeko",
"authentication_code": "Autentifikazio kodea",
"enter_recovery_code": "Sartu berreskuratze kodea",
"enter_two_factor_code": "Sartu bi-faktore kodea",
"recovery_code": "Berreskuratze kodea",
"heading": {
"totp": "Bi-faktore autentifikazioa",
"recovery": "Bi-faktore berreskuratzea"
}
},
"media_modal": {
"previous": "Aurrekoa",
"next": "Hurrengoa"
},
"nav": {
"about": "Honi buruz",
"administration": "Administrazioa",
"back": "Atzera",
"chat": "Txat lokala",
"friend_requests": "Jarraitzeko eskaerak",
"mentions": "Aipamenak",
"interactions": "Interakzioak",
"dms": "Zuzeneko Mezuak",
"public_tl": "Denbora-lerro Publikoa",
"timeline": "Denbora-lerroa",
"twkn": "Ezagutzen den Sarea",
"user_search": "Erabiltzailea Bilatu",
"search": "Bilatu",
"who_to_follow": "Nori jarraitu",
"preferences": "Hobespenak"
},
"notifications": {
"broken_favorite": "Egoera ezezaguna, bilatzen…",
"favorited_you": "zure mezua gogoko du",
"followed_you": "Zu jarraitzen zaitu",
"load_older": "Kargatu jakinarazpen zaharragoak",
"notifications": "Jakinarazpenak",
"read": "Irakurrita!",
"repeated_you": "zure mezua errepikatu du",
"no_more_notifications": "Ez dago jakinarazpen gehiago"
},
"polls": {
"add_poll": "Inkesta gehitu",
"add_option": "Gehitu aukera",
"option": "Aukera",
"votes": "Bozkak",
"vote": "Bozka",
"type": "Inkesta mota",
"single_choice": "Aukera bakarra",
"multiple_choices": "Aukera anizkoitza",
"expiry": "Inkestaren iraupena",
"expires_in": "Inkesta {0} bukatzen da",
"expired": "Inkesta {0} bukatu zen",
"not_enough_options": "Aukera gutxiegi inkestan"
},
"emoji": {
"stickers": "Pegatinak",
"emoji": "Emoji",
"keep_open": "Mantendu hautatzailea zabalik",
"search_emoji": "Bilatu emoji bat",
"add_emoji": "Emoji bat gehitu",
"custom": "Ohiko emojiak",
"unicode": "Unicode emojiak"
},
"stickers": {
"add_sticker": "Pegatina gehitu"
},
"interactions": {
"favs_repeats": "Errepikapen eta gogokoak",
"follows": "Jarraitzaile berriak",
"load_older": "Kargatu elkarrekintza zaharragoak"
},
"post_status": {
"new_status": "Mezu berri bat idatzi",
"account_not_locked_warning": "Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur ditzake.",
"account_not_locked_warning_link": "Blokeatuta",
"attachments_sensitive": "Nabarmendu eranskinak hunkigarri gisa",
"content_type": {
"text/plain": "Testu arrunta",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Gaia (hautazkoa)",
"default": "Iadanik Los Angeles-en",
"direct_warning_to_all": "Mezu hau aipatutako erabiltzaile guztientzat ikusgai egongo da.",
"direct_warning_to_first_only": "Mezu hau ikusgai egongo da bakarrik hasieran aipatzen diren erabiltzaileei.",
"posting": "Argitaratzen",
"scope_notice": {
"public": "Mezu hau guztiontzat ikusgai izango da",
"private": "Mezu hau zure jarraitzaileek soilik ikusiko dute",
"unlisted": "Mezu hau ez da argitaratuko Denbora-lerro Publikoan ezta Ezagutzen den Sarean"
},
"scope": {
"direct": "Zuzena: Bidali aipatutako erabiltzaileei besterik ez",
"private": "Jarraitzaileentzako bakarrik: Bidali jarraitzaileentzat bakarrik",
"public": "Publikoa: Bistaratu denbora-lerro publikoetan",
"unlisted": "Zerrendatu gabea: ez bidali denbora-lerro publikoetara"
}
},
"registration": {
"bio": "Biografia",
"email": "E-posta",
"fullname": "Erakutsi izena",
"password_confirm": "Pasahitza berretsi",
"registration": "Izena ematea",
"token": "Gonbidapen txartela",
"captcha": "CAPTCHA",
"new_captcha": "Klikatu irudia captcha berri bat lortzeko",
"username_placeholder": "Adibidez lain",
"fullname_placeholder": "Adibidez Lain Iwakura",
"bio_placeholder": "Adidibez.\nKaixo, Lain naiz.\nFedibertsoa gustokoa dut eta euskeraz hitzegiten dut.",
"validations": {
"username_required": "Ezin da hutsik utzi",
"fullname_required": "Ezin da hutsik utzi",
"email_required": "Ezin da hutsik utzi",
"password_required": "Ezin da hutsik utzi",
"password_confirmation_required": "Ezin da hutsik utzi",
"password_confirmation_match": "Pasahitzaren berdina izan behar du"
}
},
"selectable_list": {
"select_all": "Hautatu denak"
},
"settings": {
"app_name": "App izena",
"security": "Segurtasuna",
"enter_current_password_to_confirm": "Sar ezazu zure egungo pasahitza zure identitatea baieztatzeko",
"mfa": {
"otp": "OTP",
"setup_otp": "OTP konfiguratu",
"wait_pre_setup_otp": "OTP aurredoitzen",
"confirm_and_enable": "Baieztatu eta gaitu OTP",
"title": "Bi-faktore autentifikazioa",
"generate_new_recovery_codes": "Sortu berreskuratze kode berriak",
"warning_of_generate_new_codes": "Berreskuratze kode berriak sortzean, zure berreskuratze kode zaharrak ez dute balioko.",
"recovery_codes": "Berreskuratze kodea",
"waiting_a_recovery_codes": "Babes-kopia kodeak jasotzen…",
"recovery_codes_warning": "Idatzi edo gorde kodeak leku seguruan - bestela ez dituzu berriro ikusiko. Zure 2FA aplikaziorako sarbidea eta berreskuratze kodeak galduz gero, zure kontutik blokeatuta egongo zara.",
"authentication_methods": "Autentifikazio metodoa",
"scan": {
"title": "Eskaneatu",
"desc": "Zure bi-faktore aplikazioa erabiliz, eskaneatu QR kode hau edo idatzi testu-gakoa:",
"secret_code": "Giltza"
},
"verify": {
"desc": "Bi-faktore autentifikazioa gaitzeko, sar ezazu bi-faktore kodea zure app-tik:"
}
},
"attachmentRadius": "Eranskinak",
"attachments": "Eranskinak",
"avatar": "Avatarra",
"avatarAltRadius": "Avatarra (Aipamenak)",
"avatarRadius": "Avatarrak",
"background": "Atzeko planoa",
"bio": "Biografia",
"block_export": "Blokeatu dituzunak esportatu",
"block_export_button": "Esportatu blokeatutakoak csv fitxategi batera",
"block_import": "Blokeatu dituzunak inportatu",
"block_import_error": "Errorea blokeatutakoak inportatzen",
"blocks_imported": "Blokeatutakoak inportaturik! Hauek prozesatzeak denbora hartuko du.",
"blocks_tab": "Blokeatutakoak",
"btnRadius": "Botoiak",
"cBlue": "Urdina (erantzun, jarraitu)",
"cGreen": "Berdea (Bertxiotu)",
"cOrange": "Laranja (Gogokoa)",
"cRed": "Gorria (ezeztatu)",
"change_password": "Pasahitza aldatu",
"change_password_error": "Arazao bat egon da zure pasahitza aldatzean.",
"changed_password": "Pasahitza ondo aldatu da!",
"collapse_subject": "Bildu gaia daukaten mezuak",
"composing": "Idazten",
"confirm_new_password": "Baieztatu pasahitz berria",
"current_avatar": "Zure uneko avatarra",
"current_password": "Indarrean den pasahitza",
"current_profile_banner": "Zure profilaren banner-a",
"data_import_export_tab": "Datuak Inportatu / Esportatu",
"default_vis": "Lehenetsitako ikusgaitasunak",
"delete_account": "Ezabatu kontua",
"discoverable": "Baimendu zure kontua kanpo bilaketa-emaitzetan eta bestelako zerbitzuetan agertzea",
- "delete_account_description": "Betirako ezabatu zure kontua eta zure mezu guztiak",
+ "delete_account_description": "Betirako ezabatu zure datuak eta desaktibatu kontua.",
"pad_emoji": "Zuriuneak gehitu emoji bat aukeratzen denean",
"delete_account_error": "Arazo bat gertatu da zure kontua ezabatzerakoan. Arazoa jarraitu eskero, administratzailearekin harremanetan jarri.",
"delete_account_instructions": "Idatzi zure pasahitza kontua ezabatzeko.",
"avatar_size_instruction": "Avatar irudien gomendatutako gutxieneko tamaina 150x150 pixel dira.",
"export_theme": "Gorde aurre-ezarpena",
"filtering": "Iragazten",
"filtering_explanation": "Hitz hauek dituzten mezu guztiak isilduak izango dira. Lerro bakoitzeko bat",
"follow_export": "Jarraitzen dituzunak esportatu",
"follow_export_button": "Esportatu zure jarraitzaileak csv fitxategi batean",
"follow_import": "Jarraitzen dituzunak inportatu",
"follow_import_error": "Errorea jarraitzaileak inportatzerakoan",
"follows_imported": "Jarraitzaileak inportatuta! Prozesatzeak denbora pixka bat iraungo du.",
"foreground": "Aurreko planoa",
"general": "Orokorra",
"hide_attachments_in_convo": "Ezkutatu eranskinak elkarrizketatan",
"hide_attachments_in_tl": "Ezkutatu eranskinak donbora-lerroan",
"hide_muted_posts": "Ezkutatu mutututako erabiltzaileen mezuak",
"max_thumbnails": "Mezu bakoitzeko argazki-miniatura kopuru maximoa",
"hide_isp": "Instantziari buruzko panela ezkutatu",
"preload_images": "Argazkiak aurrekargatu",
"use_one_click_nsfw": "Ireki eduki hunkigarria duten eranskinak klik batekin",
"hide_post_stats": "Ezkutatu mezuaren estatistikak (adibidez faborito kopurua)",
"hide_user_stats": "Ezkutatu erabiltzaile estatistikak (adibidez jarraitzaile kopurua)",
"hide_filtered_statuses": "Ezkutatu iragazitako mezuak",
"import_blocks_from_a_csv_file": "Blokeatutakoak inportatu CSV fitxategi batetik",
"import_followers_from_a_csv_file": "Inportatu jarraitzaileak csv fitxategi batetik",
"import_theme": "Kargatu aurre-ezarpena",
"inputRadius": "Sarrera eremuak",
"checkboxRadius": "Kuadrotxoak",
"instance_default": "(lehenetsia: {value})",
"instance_default_simple": "(lehenetsia)",
"interface": "Interfazea",
"interfaceLanguage": "Interfazearen hizkuntza",
"invalid_theme_imported": "Hautatutako fitxategia ez da onartutako Pleroma gaia. Ez da zure gaian aldaketarik burutu.",
"limited_availability": "Ez dago erabilgarri zure nabigatzailean",
"links": "Estekak",
"lock_account_description": "Mugatu zure kontua soilik onartutako jarraitzaileei",
"loop_video": "Begizta bideoak",
"loop_video_silent_only": "Soinu gabeko bideoak begiztatu bakarrik (adibidez Mastodon-eko gif-ak)",
"mutes_tab": "Mututuak",
"play_videos_in_modal": "Erreproduzitu bideoak zuzenean multimedia erreproduzigailuan",
"use_contain_fit": "Eranskinak ez moztu miniaturetan",
"name": "Izena",
"name_bio": "Izena eta biografia",
"new_password": "Pasahitz berria",
"notification_visibility": "Erakusteko jakinarazpen motak",
"notification_visibility_follows": "Jarraitzaileak",
"notification_visibility_likes": "Gogokoak",
"notification_visibility_mentions": "Aipamenak",
"notification_visibility_repeats": "Errepikapenak",
"no_rich_text_description": "Kendu testu-formatu aberastuak mezu guztietatik",
"no_blocks": "Ez daude erabiltzaile blokeatutak",
"no_mutes": "Ez daude erabiltzaile mututuak",
"hide_follows_description": "Ez erakutsi nor jarraitzen ari naizen",
"hide_followers_description": "Ez erakutsi nor ari den ni jarraitzen",
"hide_follows_count_description": "Ez erakutsi jarraitzen ari naizen kontuen kopurua",
"hide_followers_count_description": "Ez erakutsi nire jarraitzaileen kontuen kopurua",
"show_admin_badge": "Erakutsi Administratzaile etiketa nire profilan",
"show_moderator_badge": "Erakutsi Moderatzaile etiketa nire profilan",
"nsfw_clickthrough": "Gaitu klika hunkigarri eranskinak ezkutatzeko",
"oauth_tokens": "OAuth tokenak",
"token": "Tokena",
"refresh_token": "Berrgin Tokena",
"valid_until": "Baliozkoa Arte",
"revoke_token": "Ezeztatu",
"panelRadius": "Panelak",
"pause_on_unfocused": "Eguneraketa automatikoa gelditu fitxatik kanpo",
"presets": "Aurrezarpenak",
"profile_background": "Profilaren atzeko planoa",
"profile_banner": "Profilaren Banner-a",
"profile_tab": "Profila",
"radii_help": "Konfiguratu interfazearen ertzen biribiltzea (pixeletan)",
"replies_in_timeline": "Denbora-lerroko erantzunak",
"reply_visibility_all": "Erakutsi erantzun guztiak",
"reply_visibility_following": "Erakutsi bakarrik niri zuzendutako edo nik jarraitutako erabiltzaileen erantzunak",
"reply_visibility_self": "Erakutsi bakarrik niri zuzendutako erantzunak",
"autohide_floating_post_button": "Automatikoki ezkutatu Mezu Berriaren botoia (sakelako)",
"saving_err": "Errorea ezarpenak gordetzean",
"saving_ok": "Ezarpenak gordeta",
"search_user_to_block": "Bilatu zein blokeatu nahi duzun",
"search_user_to_mute": "Bilatu zein isilarazi nahi duzun",
"security_tab": "Segurtasuna",
"scope_copy": "Ikusgaitasun aukerak kopiatu mezua erantzuterakoan (Zuzeneko Mezuak beti kopiatzen dute)",
"minimal_scopes_mode": "Bildu ikusgaitasun aukerak",
"set_new_avatar": "Ezarri avatar berria",
"set_new_profile_background": "Ezarri atzeko plano berria",
"set_new_profile_banner": "Ezarri profil banner berria",
"settings": "Ezarpenak",
"subject_input_always_show": "Erakutsi beti gaiaren eremua",
"subject_line_behavior": "Gaia kopiatu erantzuterakoan",
"subject_line_email": "E-maila bezala: \"re: gaia\"",
"subject_line_mastodon": "Mastodon bezala: kopiatu den bezala",
"subject_line_noop": "Ez kopiatu",
"post_status_content_type": "Argitarapen formatua",
"stop_gifs": "GIF-a iniziatu arratoia gainean jarrita",
"streaming": "Gaitu mezu berrien karga goraino mugitzean",
"text": "Testua",
"theme": "Gaia",
"theme_help": "Erabili hex-kolore kodeak (#rrggbb) gaiaren koloreak pertsonalizatzeko.",
"theme_help_v2_1": "Zenbait osagaien koloreak eta opakutasuna ezeztatu ditzakezu kontrol-laukia aktibatuz, \"Garbitu dena\" botoia erabili aldaketak deusezteko.",
"theme_help_v2_2": "Sarreren batzuen azpian dauden ikonoak atzeko planoaren eta testuaren arteko kontrastearen adierazleak dira, kokatu arratoia gainean informazio zehatza eskuratzeko. Kontuan izan gardentasun kontrasteen adierazleek erabiltzen direnean, kasurik okerrena erakusten dutela.",
"tooltipRadius": "Argibideak/alertak",
"upload_a_photo": "Argazkia kargatu",
"user_settings": "Erabiltzaile Ezarpenak",
"values": {
"false": "ez",
"true": "bai"
},
"notifications": "Jakinarazpenak",
"notification_mutes": "Erabiltzaile jakin baten jakinarazpenak jasotzeari uzteko, isilarazi ezazu.",
"notification_blocks": "Erabiltzaile bat blokeatzeak jakinarazpen guztiak gelditzen ditu eta harpidetza ezeztatu.",
"enable_web_push_notifications": "Gaitu web jakinarazpenak",
"style": {
"switcher": {
"keep_color": "Mantendu koloreak",
"keep_shadows": "Mantendu itzalak",
"keep_opacity": "Mantendu opakotasuna",
"keep_roundness": "Mantendu biribiltasuna",
"keep_fonts": "Mantendu iturriak",
"save_load_hint": "\"Mantendu\" aukerak uneko konfiguratutako aukerak gordetzen ditu gaiak hautatzerakoan edo kargatzean, gai hauek esportatze garaian ere gordetzen ditu. Kontrol-lauki guztiak garbitzen direnean, esportazio-gaiak dena gordeko du.",
"reset": "Berrezarri",
"clear_all": "Garbitu dena",
"clear_opacity": "Garbitu opakotasuna"
},
"common": {
"color": "Kolorea",
"opacity": "Opakotasuna",
"contrast": {
"hint": "Kontrastearen erlazioa {ratio} da, {level} {context}",
"level": {
"aa": "AA Mailako gidaliburua betetzen du (gutxienezkoa)",
"aaa": "AAA Mailako gidaliburua betetzen du (gomendatua)",
"bad": "ez ditu irisgarritasun arauak betetzen"
},
"context": {
"18pt": "testu handientzat (+18pt)",
"text": "testuentzat"
}
}
},
"common_colors": {
"_tab_label": "Ohikoa",
"main": "Ohiko koloreak",
"foreground_hint": "Ikusi \"Aurreratua\" fitxa kontrol zehatzagoa lortzeko",
"rgbo": "Ikono, azentu eta etiketak"
},
"advanced_colors": {
"_tab_label": "Aurreratua",
"alert": "Alerten atzeko planoa",
"alert_error": "Errorea",
"badge": "Etiketen atzeko planoa",
"badge_notification": "Jakinarazpenak",
"panel_header": "Panelaren goiburua",
"top_bar": "Goiko barra",
"borders": "Ertzak",
"buttons": "Botoiak",
"inputs": "Sarrera eremuak",
"faint_text": "Testu itzalita"
},
"radii": {
"_tab_label": "Biribiltasuna"
},
"shadows": {
"_tab_label": "Itzal eta argiak",
"component": "Atala",
"override": "Berridatzi",
"shadow_id": "Itzala #{value}",
"blur": "Lausotu",
"spread": "Hedapena",
"inset": "Barrutik",
"hint": "Itzaletarako ere erabil dezakezu --aldagarri kolore balio gisa CSS3 aldagaiak erabiltzeko. Kontuan izan opakutasuna ezartzeak ez duela kasu honetan funtzionatuko.",
"filter_hint": {
"always_drop_shadow": "Kontuz, itzal honek beti erabiltzen du {0} nabigatzaileak onartzen duenean.",
"drop_shadow_syntax": "{0} ez du onartzen {1} parametroa eta {2} gako-hitza.",
"avatar_inset": "Kontuan izan behar da barruko eta kanpoko itzal konbinazioak, ez esparotako emaitzak ager daitezkeela atzeko plano gardena duten Avatarretan.",
"spread_zero": "Hedapena > 0 duten itzalak zero izango balitz bezala agertuko dira",
"inset_classic": "Barruko itzalak {0} erabiliko dute"
},
"components": {
"panel": "Panela",
"panelHeader": "Panel goiburua",
"topBar": "Goiko barra",
"avatar": "Erabiltzailearen avatarra (profilan)",
"avatarStatus": "Erabiltzailearen avatarra (mezuetan)",
"popup": "Popup-ak eta argibideak",
"button": "Botoia",
"buttonHover": "Botoia (gainean)",
"buttonPressed": "Botoai (sakatuta)",
"buttonPressedHover": "Botoia (sakatuta+gainean)",
"input": "Sarrera eremuak"
}
},
"fonts": {
"_tab_label": "Letra-tipoak",
"help": "Aukeratu letra-tipoak erabiltzailearen interfazean erabiltzeko. \"Pertsonalizatua\" letra-tipoan, sisteman agertzen den izen berdinarekin idatzi behar duzu.",
"components": {
"interface": "Interfazea",
"input": "Sarrera eremuak",
"post": "Mezuen testua",
"postCode": "Tarte-bakarreko testua mezuetan (testu-formatu aberastuak)"
},
"family": "Letra-tipoaren izena",
"size": "Tamaina (px)",
"weight": "Pisua (lodiera)",
"custom": "Pertsonalizatua"
},
"preview": {
"header": "Aurrebista",
"content": "Edukia",
"error": "Adibide errorea",
"button": "Botoia",
"text": "Hamaika {0} eta {1}",
"mono": "edukia",
"input": "Jadanik Los Angeles-en",
"faint_link": "laguntza",
"fine_print": "Irakurri gure {0} ezer erabilgarria ikasteko!",
"header_faint": "Ondo dago",
"checkbox": "Baldintzak berrikusi ditut",
"link": "esteka polita"
}
},
"version": {
"title": "Bertsioa",
"backend_version": "Backend Bertsioa",
"frontend_version": "Frontend Bertsioa"
}
},
"time": {
"day": "{0} egun",
"days": "{0} egun",
"day_short": "{0}e",
"days_short": "{0}e",
"hour": "{0} ordu",
"hours": "{0} ordu",
"hour_short": "{0}o",
"hours_short": "{0}o",
"in_future": "{0} barru",
"in_past": "duela {0}",
"minute": "{0} minutu",
"minutes": "{0} minutu",
"minute_short": "{0}min",
"minutes_short": "{0}min",
"month": "{0} hilabete",
"months": "{0} hilabete",
"month_short": "{0}h",
"months_short": "{0}h",
"now": "oraintxe bertan",
"now_short": "orain",
"second": "{0} segundu",
"seconds": "{0} segundu",
"second_short": "{0}s",
"seconds_short": "{0}s",
"week": "{0} aste",
"weeks": "{0} aste",
"week_short": "{0}a",
"weeks_short": "{0}a",
"year": "{0} urte",
"years": "{0} urte",
"year_short": "{0}u",
"years_short": "{0}u"
},
"timeline": {
"collapse": "Bildu",
"conversation": "Elkarrizketa",
"error_fetching": "Errorea eguneraketak eskuratzen",
"load_older": "Kargatu mezu zaharragoak",
"no_retweet_hint": "Mezu hau jarraitzailentzako bakarrik markatuta dago eta ezin da errepikatu",
"repeated": "Errepikatuta",
"show_new": "Berriena erakutsi",
"up_to_date": "Eguneratuta",
"no_more_statuses": "Ez daude mezu gehiago",
"no_statuses": "Mezurik gabe"
},
"status": {
"favorites": "Gogokoak",
"repeats": "Errepikapenak",
"delete": "Mezua ezabatu",
"pin": "Profilan ainguratu",
"unpin": "Aingura ezeztatu profilatik",
"pinned": "Ainguratuta",
"delete_confirm": "Mezu hau benetan ezabatu nahi duzu?",
"reply_to": "Erantzuten",
"replies_list": "Erantzunak:",
"mute_conversation": "Elkarrizketa isilarazi",
"unmute_conversation": "Elkarrizketa aktibatu"
},
"user_card": {
"approve": "Onartu",
"block": "Blokeatu",
"blocked": "Blokeatuta!",
"deny": "Ukatu",
"favorites": "Gogokoak",
"follow": "Jarraitu",
"follow_sent": "Eskaera bidalita!",
"follow_progress": "Eskatzen…",
"follow_again": "Eskaera berriro bidali?",
"follow_unfollow": "Jarraitzeari utzi",
"followees": "Jarraitzen",
"followers": "Jarraitzaileak",
"following": "Jarraitzen!",
"follows_you": "Jarraitzen dizu!",
"its_you": "Zu zara!",
"media": "Multimedia",
"mention": "Aipatu",
"mute": "Isilarazi",
"muted": "Isilduta",
"per_day": "eguneko",
"remote_follow": "Jarraitu",
"report": "Berri eman",
"statuses": "Mezuak",
"subscribe": "Harpidetu",
"unsubscribe": "Harpidetza ezeztatu",
"unblock": "Blokeoa kendu",
"unblock_progress": "Blokeoa ezeztatzen…",
"block_progress": "Blokeatzen…",
"unmute": "Isiltasuna kendu",
"unmute_progress": "Isiltasuna kentzen…",
"mute_progress": "Isiltzen…",
"hide_repeats": "Ezkutatu errepikapenak",
"show_repeats": "Erakutsi errpekiapenak",
"admin_menu": {
"moderation": "Moderazioa",
"grant_admin": "Administratzaile baimena",
"revoke_admin": "Ezeztatu administratzaile baimena",
"grant_moderator": "Moderatzaile baimena",
"revoke_moderator": "Ezeztatu moderatzaile baimena",
"activate_account": "Aktibatu kontua",
"deactivate_account": "Desaktibatu kontua",
"delete_account": "Ezabatu kontua",
"force_nsfw": "Markatu mezu guztiak hunkigarri gisa",
"strip_media": "Kendu multimedia mezuetatik",
"force_unlisted": "Behartu mezuak listatu gabekoak izatea",
"sandbox": "Behartu zure jarraitzaileentzako bakarrik argitaratzera",
"disable_remote_subscription": "Ez utzi istantzia kanpoko erabiltzaileak zuri jarraitzea",
"disable_any_subscription": "Ez utzi beste erabiltzaileak zuri jarraitzea",
"quarantine": "Ez onartu mezuak beste instantzietatik",
"delete_user": "Erabiltzailea ezabatu",
"delete_user_confirmation": "Erabat ziur zaude? Ekintza hau ezin da desegin."
}
},
"user_profile": {
"timeline_title": "Erabiltzailearen denbora-lerroa",
"profile_does_not_exist": "Barkatu, profil hau ez da existitzen.",
"profile_loading_error": "Barkatu, errore bat gertatu da profila kargatzean."
},
"user_reporting": {
"title": "{0}-ri buruz berri ematen",
"add_comment_description": "Zure kexa moderatzaileei bidaliko da. Nahi baduzu zure kexaren zergatia idatz dezakezu:",
"additional_comments": "Iruzkin gehiago",
"forward_description": "Kontu hau beste instantzia batekoa da. Nahi duzu txostenaren kopia bat bidali ere?",
"forward_to": "{0}-ri birbidali",
"submit": "Bidali",
"generic_error": "Errore bat gertatu da zure eskaera prozesatzerakoan."
},
"who_to_follow": {
"more": "Gehiago",
"who_to_follow": "Nori jarraitu"
},
"tool_tip": {
"media_upload": "Multimedia igo",
"repeat": "Errepikatu",
"reply": "Erantzun",
"favorite": "Gogokoa",
"user_settings": "Erabiltzaile ezarpenak"
},
"upload": {
"error": {
"base": "Igoerak huts egin du.",
"file_too_big": "Artxiboa haundiegia [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Saiatu berriro geroago"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "Erabiltzaileak",
"hashtags": "Traolak",
"person_talking": "{count} pertsona hitzegiten",
"people_talking": "{count} jende hitzegiten",
"no_results": "Emaitzarik ez"
},
"password_reset": {
"forgot_password": "Pasahitza ahaztua?",
"password_reset": "Pasahitza berrezarri",
"instruction": "Idatzi zure helbide elektronikoa edo erabiltzaile izena. Pasahitza berrezartzeko esteka bidaliko dizugu.",
"placeholder": "Zure e-posta edo erabiltzaile izena",
"check_email": "Begiratu zure posta elektronikoa pasahitza berrezarri ahal izateko.",
"return_home": "Itzuli hasierara",
- "not_found": "Ezin izan dugu helbide elektroniko edo erabiltzaile hori aurkitu.",
"too_many_requests": "Saiakera gehiegi burutu ditzu, saiatu berriro geroxeago.",
"password_reset_disabled": "Pasahitza berrezartzea debekatuta dago. Mesedez, jarri harremanetan instantzia administratzailearekin.",
"password_reset_required": "Pasahitza berrezarri behar duzu saioa hasteko.",
"password_reset_required_but_mailer_is_disabled": "Pasahitza berrezarri behar duzu, baina pasahitza berrezartzeko aukera desgaituta dago. Mesedez, jarri harremanetan instantziaren administratzailearekin."
+ },
+ "about": {
+ "mrf": {
+ "keyword": {
+ "keyword_policies": "Gako-hitz politika"
+ },
+ "federation": "Federazioa"
+ }
}
}
diff --git a/src/i18n/fi.json b/src/i18n/fi.json
index 510b22343b..3832dcaa88 100644
--- a/src/i18n/fi.json
+++ b/src/i18n/fi.json
@@ -1,778 +1,777 @@
{
"chat": {
"title": "Chat"
},
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Media-välityspalvelin",
"scope_options": "Näkyvyyden rajaus",
"text_limit": "Tekstin pituusraja",
"title": "Ominaisuudet",
"who_to_follow": "Seurausehdotukset"
},
"finder": {
"error_fetching_user": "Virhe hakiessa käyttäjää",
"find_user": "Hae käyttäjä"
},
"general": {
"apply": "Aseta",
"submit": "Lähetä",
"more": "Lisää",
"generic_error": "Virhe tapahtui",
"optional": "valinnainen",
"show_more": "Näytä lisää",
"show_less": "Näytä vähemmän",
"dismiss": "Sulje",
"cancel": "Peruuta",
"disable": "Poista käytöstä",
"confirm": "Hyväksy",
"verify": "Varmenna",
"enable": "Ota käyttöön",
"loading": "Ladataan…",
"error_retry": "Yritä uudelleen",
"retry": "Yritä uudelleen",
"close": "Sulje",
"peek": "Kurkkaa"
},
"login": {
"login": "Kirjaudu sisään",
"description": "Kirjaudu sisään OAuthilla",
"logout": "Kirjaudu ulos",
"password": "Salasana",
"placeholder": "esim. Seppo",
"register": "Rekisteröidy",
"username": "Käyttäjänimi",
"hint": "Kirjaudu sisään liittyäksesi keskusteluun",
"authentication_code": "Todennuskoodi",
"enter_recovery_code": "Syötä palautuskoodi",
"recovery_code": "Palautuskoodi",
"heading": {
"totp": "Monivaihetodennus",
"recovery": "Monivaihepalautus"
},
"enter_two_factor_code": "Syötä monivaihetodennuskoodi"
},
"nav": {
"about": "Tietoja",
"back": "Takaisin",
"chat": "Paikallinen Chat",
"friend_requests": "Seurauspyynnöt",
"mentions": "Maininnat",
"interactions": "Interaktiot",
"dms": "Yksityisviestit",
"public_tl": "Julkinen Aikajana",
"timeline": "Aikajana",
"twkn": "Tunnettu Verkosto",
"user_search": "Käyttäjähaku",
"who_to_follow": "Seurausehdotukset",
"preferences": "Asetukset",
"administration": "Ylläpito",
"search": "Haku",
"bookmarks": "Kirjanmerkit"
},
"notifications": {
"broken_favorite": "Viestiä ei löydetty…",
"favorited_you": "tykkäsi viestistäsi",
"followed_you": "seuraa sinua",
"load_older": "Lataa vanhempia ilmoituksia",
"notifications": "Ilmoitukset",
"read": "Lue!",
"repeated_you": "toisti viestisi",
"no_more_notifications": "Ei enempää ilmoituksia",
"reacted_with": "lisäsi reaktion {0}",
"migrated_to": "siirtyi sivulle",
"follow_request": "haluaa seurata sinua"
},
"polls": {
"add_poll": "Lisää äänestys",
"add_option": "Lisää vaihtoehto",
"option": "Vaihtoehto",
"votes": "ääntä",
"vote": "Äänestä",
"type": "Äänestyksen tyyppi",
"single_choice": "Yksi valinta",
"multiple_choices": "Monivalinta",
"expiry": "Äänestyksen kesto",
"expires_in": "Päättyy {0} päästä",
"expired": "Päättyi {0} sitten",
"not_enough_option": "Liian vähän uniikkeja vaihtoehtoja äänestyksessä",
"not_enough_options": "Liian vähän ainutkertaisia vaihtoehtoja"
},
"interactions": {
"favs_repeats": "Toistot ja tykkäykset",
"follows": "Uudet seuraukset",
"load_older": "Lataa vanhempia interaktioita",
"moves": "Käyttäjien siirtymiset"
},
"post_status": {
"new_status": "Uusi viesti",
"account_not_locked_warning": "Tilisi ei ole {0}. Kuka vain voi seurata sinua nähdäksesi 'vain-seuraajille' -viestisi.",
"account_not_locked_warning_link": "lukittu",
"attachments_sensitive": "Merkkaa liitteet arkaluonteisiksi",
"content_type": {
"text/plain": "Tavallinen teksti",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Aihe (valinnainen)",
"default": "Tulin juuri saunasta.",
"direct_warning": "Tämä viesti näkyy vain mainituille käyttäjille.",
"posting": "Lähetetään",
"scope": {
"direct": "Yksityisviesti - Näkyy vain mainituille käyttäjille",
"private": "Vain-seuraajille - Näkyy vain seuraajillesi",
"public": "Julkinen - Näkyy julkisilla aikajanoilla",
"unlisted": "Listaamaton - Ei näy julkisilla aikajanoilla"
},
"direct_warning_to_all": "Tämä viesti näkyy vain viestissä mainituille käyttäjille.",
"direct_warning_to_first_only": "Tämä viesti näkyy vain viestin alussa mainituille käyttäjille.",
"scope_notice": {
"public": "Tämä viesti näkyy kaikille",
"private": "Tämä viesti näkyy vain sinun seuraajillesi",
"unlisted": "Tämä viesti ei näy Julkisella Aikajanalla tai Koko Tunnettu Verkosto -aikajanalla"
},
"preview": "Esikatselu",
"preview_empty": "Tyhjä",
"empty_status_error": "Tyhjää viestiä ilman tiedostoja ei voi lähettää",
"media_description": "Tiedoston kuvaus",
"media_description_error": "Tiedostojen päivitys epäonnistui, yritä uudelleen"
},
"registration": {
"bio": "Kuvaus",
"email": "Sähköposti",
"fullname": "Koko nimi",
"password_confirm": "Salasanan vahvistaminen",
"registration": "Rekisteröityminen",
"token": "Kutsuvaltuus",
"captcha": "Varmenne",
"new_captcha": "Paina kuvaa saadaksesi uuden varmenteen",
"validations": {
"username_required": "ei voi olla tyhjä",
"fullname_required": "ei voi olla tyhjä",
"email_required": "ei voi olla tyhjä",
"password_required": "ei voi olla tyhjä",
"password_confirmation_required": "ei voi olla tyhjä",
"password_confirmation_match": "pitää vastata salasanaa"
},
"username_placeholder": "esim. peke",
"fullname_placeholder": "esim. Pekka Postaaja",
"bio_placeholder": "esim.\nHei, olen Pekka.\nOlen esimerkkikäyttäjä tässä verkostossa."
},
"settings": {
"attachmentRadius": "Liitteet",
"attachments": "Liitteet",
"avatar": "Profiilikuva",
"avatarAltRadius": "Profiilikuvat (ilmoitukset)",
"avatarRadius": "Profiilikuvat",
"background": "Tausta",
"bio": "Kuvaus",
"btnRadius": "Napit",
"cBlue": "Sininen (Vastaukset, seuraukset)",
"cGreen": "Vihreä (Toistot)",
"cOrange": "Oranssi (Tykkäykset)",
"cRed": "Punainen (Peruminen)",
"change_password": "Vaihda salasana",
"change_password_error": "Virhe vaihtaessa salasanaa.",
"changed_password": "Salasana vaihdettu!",
"collapse_subject": "Minimoi viestit, joille on asetettu aihe",
"composing": "Viestien laatiminen",
"confirm_new_password": "Vahvista uusi salasana",
"current_avatar": "Nykyinen profiilikuvasi",
"current_password": "Nykyinen salasana",
"current_profile_banner": "Nykyinen julisteesi",
"data_import_export_tab": "Tietojen tuonti / vienti",
"default_vis": "Oletusnäkyvyysrajaus",
"delete_account": "Poista tili",
"delete_account_description": "Poista tietosi ja lukitse tili pysyvästi.",
"delete_account_error": "Virhe poistaessa tiliäsi. Jos virhe jatkuu, ota yhteyttä palvelimesi ylläpitoon.",
"delete_account_instructions": "Syötä salasanasi vahvistaaksesi tilin poiston.",
"emoji_reactions_on_timeline": "Näytä emojireaktiot aikajanalla",
"export_theme": "Tallenna teema",
"filtering": "Suodatus",
"filtering_explanation": "Kaikki viestit, jotka sisältävät näitä sanoja, suodatetaan. Yksi sana per rivi.",
"follow_export": "Seurausten vienti",
"follow_export_button": "Vie seurauksesi CSV-tiedostoon",
"follow_export_processing": "Käsitellään, sinua pyydetään lataamaan tiedosto hetken päästä",
"follow_import": "Seurausten tuonti",
"follow_import_error": "Virhe tuodessa seuraksia",
"follows_imported": "Seuraukset tuotu! Niiden käsittely vie hetken.",
"foreground": "Etuala",
"general": "Yleinen",
"hide_attachments_in_convo": "Piilota liitteet keskusteluissa",
"hide_attachments_in_tl": "Piilota liitteet aikajanalla",
"max_thumbnails": "Suurin sallittu määrä liitteitä esikatselussa",
"hide_isp": "Piilota palvelimenkohtainen ruutu",
"preload_images": "Esilataa kuvat",
"use_one_click_nsfw": "Avaa NSFW-liitteet yhdellä painalluksella",
"hide_post_stats": "Piilota viestien statistiikka (esim. tykkäysten määrä)",
"hide_user_stats": "Piilota käyttäjien statistiikka (esim. seuraajien määrä)",
"import_followers_from_a_csv_file": "Tuo seuraukset CSV-tiedostosta",
"import_theme": "Tuo tallennettu teema",
"inputRadius": "Syöttökentät",
"checkboxRadius": "Valintalaatikot",
"instance_default": "(oletus: {value})",
"instance_default_simple": "(oletus)",
"interface": "Käyttöliittymä",
"interfaceLanguage": "Käyttöliittymän kieli",
"invalid_theme_imported": "Tuotu tallennettu teema on epäkelpo, muutoksia ei tehty nykyiseen teemaasi.",
"limited_availability": "Ei saatavilla selaimessasi",
"links": "Linkit",
"lock_account_description": "Vain erikseen hyväksytyt käyttäjät voivat seurata tiliäsi",
"loop_video": "Uudelleentoista videot",
"loop_video_silent_only": "Uudelleentoista ainoastaan äänettömät videot (Video-\"giffit\")",
"play_videos_in_modal": "Toista videot modaalissa",
"use_contain_fit": "Älä rajaa liitteitä esikatselussa",
"name": "Nimi",
"name_bio": "Nimi ja kuvaus",
"new_password": "Uusi salasana",
"notification_visibility": "Ilmoitusten näkyvyys",
"notification_visibility_follows": "Seuraukset",
"notification_visibility_likes": "Tykkäykset",
"notification_visibility_mentions": "Maininnat",
"notification_visibility_repeats": "Toistot",
"notification_visibility_emoji_reactions": "Reaktiot",
"no_rich_text_description": "Älä näytä tekstin muotoilua",
"hide_network_description": "Älä näytä seurauksiani tai seuraajiani",
"nsfw_clickthrough": "Piilota NSFW liitteet klikkauksen taakse",
"oauth_tokens": "OAuth-merkit",
"token": "Token",
"refresh_token": "Päivitä token",
"valid_until": "Voimassa asti",
"revoke_token": "Peruuta",
"panelRadius": "Ruudut",
"pause_on_unfocused": "Pysäytä automaattinen viestien näyttö välilehden ollessa pois fokuksesta",
"presets": "Valmiit teemat",
"profile_background": "Taustakuva",
"profile_banner": "Juliste",
"profile_tab": "Profiili",
"radii_help": "Aseta reunojen pyöristys (pikseleinä)",
"replies_in_timeline": "Keskustelut aikajanalla",
"reply_visibility_all": "Näytä kaikki vastaukset",
"reply_visibility_following": "Näytä vain vastaukset minulle tai seuraamilleni käyttäjille",
"reply_visibility_self": "Näytä vain vastaukset minulle",
"saving_err": "Virhe tallentaessa asetuksia",
"saving_ok": "Asetukset tallennettu",
"security_tab": "Tietoturva",
"scope_copy": "Kopioi näkyvyysrajaus vastatessa (Yksityisviestit aina kopioivat)",
"set_new_avatar": "Aseta uusi profiilikuva",
"set_new_profile_background": "Aseta uusi taustakuva",
"set_new_profile_banner": "Aseta uusi juliste",
"settings": "Asetukset",
"subject_input_always_show": "Näytä aihe-kenttä",
"subject_line_behavior": "Aihe-kentän kopiointi",
"subject_line_email": "Kuten sähköposti: \"re: aihe\"",
"subject_line_mastodon": "Kopioi sellaisenaan",
"subject_line_noop": "Älä kopioi",
"stop_gifs": "Toista giffit vain kohdistaessa",
"streaming": "Näytä uudet viestit automaattisesti ollessasi ruudun huipulla",
"text": "Teksti",
"theme": "Teema",
"theme_help": "Käytä heksadesimaalivärejä muokataksesi väriteemaasi.",
"theme_help_v2_1": "Voit asettaa tiettyjen osien värin tai läpinäkyvyyden täyttämällä valintalaatikon, käytä \"Tyhjennä kaikki\"-nappia tyhjentääksesi kaiken.",
"theme_help_v2_2": "Ikonit kenttien alla ovat kontrasti-indikaattoreita, lisätietoa kohdistamalla. Käyttäessä läpinäkyvyyttä ne näyttävät pahimman skenaarion.",
"tooltipRadius": "Ohje- tai huomioviestit",
"user_settings": "Käyttäjän asetukset",
"values": {
"false": "pois päältä",
"true": "päällä"
},
"hide_follows_description": "Älä näytä ketä seuraan",
"show_moderator_badge": "Näytä Moderaattori-merkki profiilissani",
"useStreamingApi": "Vastaanota viestiejä ja ilmoituksia reaaliajassa",
"notification_setting_filters": "Suodattimet",
"notification_setting_privacy_option": "Piilota lähettäjä ja sisältö sovelluksen ulkopuolisista ilmoituksista",
"enable_web_push_notifications": "Ota käyttöön sovelluksen ulkopuoliset ilmoitukset",
"app_name": "Sovelluksen nimi",
"security": "Turvallisuus",
"mfa": {
"otp": "OTP",
"setup_otp": "OTP-asetukset",
"wait_pre_setup_otp": "esiasetetaan OTP:ta",
"confirm_and_enable": "Hyväksy ja käytä OTP",
"title": "Monivaihetodennus",
"generate_new_recovery_codes": "Luo uudet palautuskoodit",
"authentication_methods": "Todennus",
"warning_of_generate_new_codes": "Luodessasi uudet palautuskoodit, vanhat koodisi lakkaavat toimimasta.",
"recovery_codes": "Palautuskoodit.",
"waiting_a_recovery_codes": "Odotetaan palautuskoodeja…",
"recovery_codes_warning": "Kirjoita koodit ylös tai tallenna ne turvallisesti, muuten et näe niitä uudestaan. Jos et voi käyttää monivaihetodennusta ja sinulla ei ole palautuskoodeja, et voi enää kirjautua sisään tilillesi.",
"scan": {
"title": "Skannaa",
"secret_code": "Avain",
"desc": "Käytä monivaihetodennus-sovellusta skannakksesi tämän QR-kooding, tai syötä avain:"
},
"verify": {
"desc": "Kytkeäksesi päälle monivaihetodennuksen, syötä koodi monivaihetodennussovellksesta:"
}
},
"allow_following_move": "Salli automaattinen seuraaminen kun käyttäjä siirtää tilinsä",
"block_export": "Estojen vienti",
"block_export_button": "Vie estosi CSV-tiedostoon",
"block_import": "Estojen tuonti",
"block_import_error": "Virhe tuodessa estoja",
"blocks_imported": "Estot tuotu! Käsittely vie hetken.",
"blocks_tab": "Estot",
"change_email": "Vaihda sähköpostiosoite",
"change_email_error": "Virhe vaihtaessa sähköpostiosoitetta.",
"changed_email": "Sähköpostiosoite vaihdettu!",
"domain_mutes": "Sivut",
"avatar_size_instruction": "Suositeltu vähimmäiskoko profiilikuville on 150x150 pikseliä.",
"accent": "Korostus",
"hide_muted_posts": "Piilota mykistettyjen käyttäjien viestit",
"hide_filtered_statuses": "Piilota mykistetyt viestit",
"import_blocks_from_a_csv_file": "Tuo estot CSV-tiedostosta",
"no_blocks": "Ei estoja",
"no_mutes": "Ei mykistyksiä",
"notification_visibility_moves": "Käyttäjien siirtymiset",
"hide_followers_description": "Älä näytä ketkä seuraavat minua",
"hide_follows_count_description": "Älä näytä seurauksien määrää",
"hide_followers_count_description": "Älä näytä seuraajien määrää",
"show_admin_badge": "Näytä Ylläpitäjä-merkki proofilissani",
"autohide_floating_post_button": "Piilota Uusi Viesti -nappi automaattisesti (mobiili)",
"search_user_to_block": "Hae estettäviä käyttäjiä",
"search_user_to_mute": "Hae mykistettäviä käyttäjiä",
"minimal_scopes_mode": "Yksinkertaista näkyvyydenrajauksen vaihtoehdot",
"post_status_content_type": "Uuden viestin sisällön muoto",
"user_mutes": "Käyttäjät",
"useStreamingApiWarning": "(Kokeellinen)",
"type_domains_to_mute": "Etsi mykistettäviä sivustoja",
"upload_a_photo": "Lataa kuva",
"fun": "Hupi",
"greentext": "Meeminuolet",
"notifications": "Ilmoitukset",
"style": {
"switcher": {
"save_load_hint": "\"Säilytä\" asetukset säilyttävät tällä hetkellä asetetut asetukset valittaessa tai ladatessa teemaa, se myös tallentaa kyseiset asetukset viedessä teemaa. Kun kaikki laatikot ovat tyhjänä, viety teema tallentaa kaiken.",
"help": {
"older_version_imported": "Tuomasi tiedosto on luotu vanhemmalla versiolla.",
"fe_upgraded": "PleromaFE:n teemaus päivitetty versiopäivityksen yhteydessä.",
"migration_snapshot_ok": "Varmuuden vuoksi teeman kaappaus ladattu. Voit koittaa ladata teeman sisällön.",
"migration_napshot_gone": "Jostain syystä teeman kaappaus puuttuu, kaikki asiat eivät välttämättä näytä oikealta.",
"snapshot_source_mismatch": "Versiot eivät täsmää: todennäköisesti versio vaihdettu vanhempaan ja päivitetty uudestaan, jos vaihdoit teemaa vanhalla versiolla, sinun tulisi käyttää vanhaa versiota, muutoin uutta.",
"upgraded_from_v2": "PleromaFE on päivitetty, teemasi saattaa näyttää erilaiselta kuin muistat.",
"v2_imported": "Tuomasi tiedosto on luotu vanhemmalla versiolla. Yhteensopivuus ei välttämättä ole täydellinen.",
"future_version_imported": "Tuomasi tiedosto on luotu uudemmalla versiolla.",
"snapshot_present": "Teeman kaappaus ladattu, joten kaikki arvot ovat ylikirjoitettu. Voit sen sijaan ladata teeman sisällön.",
"snapshot_missing": "Teeman kaappausta ei tiedostossa, joten se voi näyttää erilaiselta kuin suunniteltu.",
"fe_downgraded": "PleromaFE:n versio vaihtunut vanhempaan."
},
"keep_color": "Säilytä värit",
"keep_shadows": "Säilytä varjot",
"keep_opacity": "Säilytä läpinäkyvyys",
"keep_roundness": "Säilytä pyöristys",
"keep_fonts": "Säilytä fontit",
"reset": "Palauta",
"clear_all": "Tyhjennä kaikki",
"clear_opacity": "Tyhjennä läpinäkyvyys",
"load_theme": "Lataa teema",
"keep_as_is": "Pidä sellaisenaan",
"use_snapshot": "Vanha",
"use_source": "Uusi"
},
"advanced_colors": {
"selectedPost": "Valittu viesti",
"_tab_label": "Edistynyt",
"alert": "Varoituksen tausta",
"alert_error": "Virhe",
"alert_warning": "Varoitus",
"alert_neutral": "Neutraali",
"post": "Viestit/Käyttäjien kuvaukset",
"badge": "Merkin tausta",
"badge_notification": "Ilmoitus",
"panel_header": "Ruudun otsikko",
"top_bar": "Yläpalkki",
"borders": "Reunat",
"buttons": "Napit",
"inputs": "Syöttökentät",
"faint_text": "Häivytetty teksti",
"underlay": "Taustapeite",
"poll": "Äänestyksen kuvaaja",
"icons": "Ikonit",
"highlight": "Korostetut elementit",
"pressed": "Painettu",
"selectedMenu": "Valikon valinta",
"disabled": "Pois käytöstä",
"toggled": "Kytketty",
"tabs": "Välilehdet",
"popover": "Työkaluvinkit, valikot, ponnahdusviestit"
},
"common": {
"color": "Väri",
"opacity": "Läpinäkyvyys",
"contrast": {
"level": {
"aaa": "saavuttaa AAA-tason (suositeltu)",
"aa": "saavuttaa AA-tason (minimi)",
"bad": "ei saavuta mitään helppokäyttöisyyssuosituksia"
},
"hint": "Kontrastisuhde on {ratio}, se {level} {context}",
"context": {
"18pt": "suurella (18pt+) tekstillä",
"text": "tekstillä"
}
}
},
"common_colors": {
"_tab_label": "Yleinen",
"main": "Yleiset värit",
"foreground_hint": "Löydät \"Edistynyt\"-välilehdeltä tarkemmat asetukset",
"rgbo": "Ikonit, korostukset, merkit"
},
"shadows": {
"filter_hint": {
"always_drop_shadow": "Varoitus, tämä varjo käyttää aina {0} kun selain tukee sitä.",
"avatar_inset": "Huom. sisennettyjen ja ei-sisennettyjen varjojen yhdistelmät saattavat luoda ei-odotettuja lopputuloksia läpinäkyvillä profiilikuvilla.",
"drop_shadow_syntax": "{0} ei tue {1} parametria ja {2} avainsanaa.",
"spread_zero": "Varjot joiden levitys > 0 näyttävät samalta kuin se olisi nolla",
"inset_classic": "Sisennetyt varjot käyttävät {0}"
},
"components": {
"buttonPressedHover": "Nappi (painettu ja kohdistettu)",
"panel": "Ruutu",
"panelHeader": "Ruudun otsikko",
"topBar": "Yläpalkki",
"avatar": "Profiilikuva (profiilinäkymässä)",
"avatarStatus": "Profiilikuva (viestin yhtyedessä)",
"popup": "Ponnahdusviestit ja työkaluvinkit",
"button": "Nappi",
"buttonHover": "Nappi (kohdistus)",
"buttonPressed": "Nappi (painettu)",
"input": "Syöttökenttä"
},
"hintV3": "Voit käyttää {0} merkintää varjoille käyttääksesi väriä toisesta asetuksesta.",
"_tab_label": "Valo ja varjostus",
"component": "Komponentti",
"override": "Ylikirjoita",
"shadow_id": "Varjo #{value}",
"blur": "Sumennus",
"spread": "Levitys",
"inset": "Sisennys"
},
"fonts": {
"help": "Valitse fontti käyttöliittymälle. \"Oma\"-vaihtohdolle on syötettävä fontin nimi tarkalleen samana kuin se on järjestelmässäsi.",
"_tab_label": "Fontit",
"components": {
"interface": "Käyttöliittymä",
"input": "Syöttökentät",
"post": "Viestin teksti",
"postCode": "Tasavälistetty teksti viestissä"
},
"family": "Fontin nimi",
"size": "Koko (pikseleissä)",
"weight": "Painostus (paksuus)",
"custom": "Oma"
},
"preview": {
"input": "Tulin juuri saunasta.",
"header": "Esikatselu",
"content": "Sisältö",
"error": "Esimerkkivirhe",
"button": "Nappi",
"text": "Vähän lisää {0} ja {1}",
"mono": "sisältöä",
"faint_link": "manuaali",
"fine_print": "Lue meidän {0} vaikka huvin vuoksi!",
"header_faint": "Tämä on OK",
"checkbox": "Olen silmäillyt käyttöehdot",
"link": "kiva linkki"
},
"radii": {
"_tab_label": "Pyöristys"
}
},
"enter_current_password_to_confirm": "Syötä nykyinen salasanasi todentaaksesi henkilöllisyytesi",
"discoverable": "Salli tilisi näkyvyys hakukoneisiin ja muihin palveluihin",
"pad_emoji": "Välistä emojit välilyönneillä lisätessäsi niitä valitsimesta",
"mutes_tab": "Mykistykset",
"new_email": "Uusi sähköpostiosoite",
"notification_setting_privacy": "Yksityisyys",
"notification_mutes": "Jos et halua ilmoituksia joltain käyttäjältä, käytä mykistystä.",
"notification_blocks": "Estäminen pysäyttää kaikki ilmoitukset käyttäjältä ja poistaa seurauksen.",
"version": {
"title": "Versio",
"backend_version": "Palvelimen versio",
"frontend_version": "Käyttöliittymän versio"
},
"reset_profile_background": "Nollaa taustakuva",
"reset_background_confirm": "Haluatko todella nollata taustakuvan?",
"mutes_and_blocks": "Mykistykset ja Estot",
"bot": "Tämä on bottitili",
"profile_fields": {
"label": "Profiilin metatiedot",
"add_field": "Lisää kenttä",
"name": "Nimi",
"value": "Sisältö"
},
"reset_avatar": "Nollaa profiilikuva",
"reset_profile_banner": "Nollaa profiilin tausta",
"reset_avatar_confirm": "Haluatko todella nollata profiilikuvan?",
"reset_banner_confirm": "Haluatko todella nollata profiilin taustan?"
},
"time": {
"day": "{0} päivä",
"days": "{0} päivää",
"day_short": "{0}pv",
"days_short": "{0}pv",
"hour": "{0} tunti",
"hours": "{0} tuntia",
"hour_short": "{0}t",
"hours_short": "{0}t",
"in_future": "{0} tulevaisuudessa",
"in_past": "{0} sitten",
"minute": "{0} minuutti",
"minutes": "{0} minuuttia",
"minute_short": "{0}min",
"minutes_short": "{0}min",
"month": "{0} kuukausi",
"months": "{0} kuukautta",
"month_short": "{0}kk",
"months_short": "{0}kk",
"now": "juuri nyt",
"now_short": "nyt",
"second": "{0} sekunti",
"seconds": "{0} sekuntia",
"second_short": "{0}s",
"seconds_short": "{0}s",
"week": "{0} viikko",
"weeks": "{0} viikkoa",
"week_short": "{0}vk",
"weeks_short": "{0}vk",
"year": "{0} vuosi",
"years": "{0} vuotta",
"year_short": "{0}v",
"years_short": "{0}v"
},
"timeline": {
"collapse": "Sulje",
"conversation": "Keskustelu",
"error_fetching": "Virhe ladatessa viestejä",
"load_older": "Lataa vanhempia viestejä",
"no_retweet_hint": "Viesti ei ole julkinen, eikä sitä voi toistaa",
"repeated": "toisti",
"show_new": "Näytä uudet",
"up_to_date": "Ajantasalla",
"no_more_statuses": "Ei enempää viestejä",
"no_statuses": "Ei viestejä",
"reload": "Päivitä"
},
"status": {
"favorites": "Tykkäykset",
"repeats": "Toistot",
"delete": "Poista",
"pin": "Kiinnitä profiiliisi",
"unpin": "Poista kiinnitys",
"pinned": "Kiinnitetty",
"delete_confirm": "Haluatko varmasti postaa viestin?",
"reply_to": "Vastaus",
"replies_list": "Vastaukset:",
"mute_conversation": "Mykistä keskustelu",
"unmute_conversation": "Poista mykistys",
"status_unavailable": "Viesti ei saatavissa",
"copy_link": "Kopioi linkki",
"bookmark": "Lisää kirjanmerkkeihin",
"unbookmark": "Poista kirjanmerkeistä",
"thread_muted": "Keskustelu mykistetty",
"thread_muted_and_words": ", sisältää sanat:",
"show_full_subject": "Näytä koko otsikko",
"hide_full_subject": "Piilota koko otsikko",
"show_content": "Näytä sisältö",
"hide_content": "Piilota sisältö"
},
"user_card": {
"approve": "Hyväksy",
"block": "Estä",
"blocked": "Estetty!",
"deny": "Älä hyväksy",
"follow": "Seuraa",
"follow_sent": "Pyyntö lähetetty!",
"follow_progress": "Pyydetään…",
"follow_again": "Lähetä pyyntö uudestaan?",
"follow_unfollow": "Älä seuraa",
"followees": "Seuraa",
"followers": "Seuraajat",
"following": "Seuraat!",
"follows_you": "Seuraa sinua!",
"its_you": "Sinun tili!",
"mute": "Mykistä",
"muted": "Mykistetty",
"per_day": "päivässä",
"remote_follow": "Seuraa muualta",
"statuses": "Viestit",
"hidden": "Piilotettu",
"media": "Media",
"block_progress": "Estetään…",
"admin_menu": {
"grant_admin": "Anna Ylläpitöoikeudet",
"force_nsfw": "Merkitse kaikki viestit NSFW:nä",
"disable_any_subscription": "Estä käyttäjän seuraaminen",
"moderation": "Moderaatio",
"revoke_admin": "Poista Ylläpitöoikeudet",
"grant_moderator": "Anna Moderaattorioikeudet",
"revoke_moderator": "Poista Moderaattorioikeudet",
"activate_account": "Aktivoi tili",
"deactivate_account": "Deaktivoi tili",
"delete_account": "Poista tili",
"strip_media": "Poista media viesteistä",
"force_unlisted": "Pakota viestit listaamattomiksi",
"sandbox": "Pakota viestit vain seuraajille",
"disable_remote_subscription": "Estä seuraaminen ulkopuolisilta sivuilta",
"quarantine": "Estä käyttäjän viestin federoituminen",
"delete_user": "Poista käyttäjä",
"delete_user_confirmation": "Oletko aivan varma? Tätä ei voi kumota."
},
"favorites": "Tykkäykset",
"mention": "Mainitse",
"report": "Ilmianna",
"subscribe": "Tilaa",
"unsubscribe": "Poista tilaus",
"unblock": "Poista esto",
"unblock_progress": "Poistetaan estoa…",
"unmute": "Poista mykistys",
"unmute_progress": "Poistetaan mykistystä…",
"mute_progress": "Mykistetään…",
"hide_repeats": "Piilota toistot",
"show_repeats": "Näytä toistot"
},
"user_profile": {
"timeline_title": "Käyttäjän aikajana",
"profile_does_not_exist": "Tätä profiilia ei ole.",
"profile_loading_error": "Virhe ladatessa profiilia."
},
"who_to_follow": {
"more": "Lisää",
"who_to_follow": "Seurausehdotukset"
},
"tool_tip": {
"media_upload": "Lataa tiedosto",
"repeat": "Toista",
"reply": "Vastaa",
"favorite": "Tykkää",
"user_settings": "Käyttäjäasetukset",
"add_reaction": "Lisää Reaktio",
"accept_follow_request": "Hyväksy seurauspyyntö",
"reject_follow_request": "Hylkää seurauspyyntö",
"bookmark": "Kirjanmerkki"
},
"upload": {
"error": {
"base": "Lataus epäonnistui.",
"file_too_big": "Tiedosto liian suuri [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Yritä uudestaan myöhemmin"
},
"file_size_units": {
"B": "tavua",
"KiB": "kt",
"MiB": "Mt",
"GiB": "Gt",
"TiB": "Tt"
}
},
"about": {
"mrf": {
"keyword": {
"keyword_policies": "Avainsanasäännöt",
"ftl_removal": "Poistettu \"Koko Tunnettu Verkosto\" -aikajanalta",
"reject": "Hylkää",
"replace": "Korvaa",
"is_replaced_by": "→"
},
"simple": {
"accept": "Hyväksy",
"reject": "Hylkää",
"quarantine": "Karanteeni",
"ftl_removal": "Poisto \"Koko Tunnettu Verkosto\" -aikajanalta",
"media_removal": "Media-tiedostojen poisto",
"simple_policies": "Palvelinkohtaiset Säännöt",
"accept_desc": "Tämä palvelin hyväksyy viestit vain seuraavilta palvelimilta:",
"reject_desc": "Tämä palvelin ei hyväksy viestejä seuraavilta palvelimilta:",
"quarantine_desc": "Tämä palvelin lähettää vain julkisia viestejä seuraaville palvelimille:",
"ftl_removal_desc": "Tämä palvelin poistaa nämä palvelimet \"Koko Tunnettu Verkosto\"-aikajanalta:",
"media_removal_desc": "Tämä palvelin postaa mediatiedostot viesteistä seuraavilta palvelimilta:",
"media_nsfw": "Pakota Media Arkaluontoiseksi",
"media_nsfw_desc": "Tämä palvelin pakottaa mediatiedostot arkaluonteisiksi seuraavilta palvelimilta:"
},
"federation": "Federaatio",
"mrf_policies": "Aktivoidut MRF-säännöt",
"mrf_policies_desc": "MRF-säännöt muuttavat federaation toimintaa sivulla. Seuraavat säännöt ovat kytketty päälle:"
},
"staff": "Henkilökunta"
},
"domain_mute_card": {
"mute": "Mykistä",
"unmute": "Poista mykistys",
"mute_progress": "Mykistetään…",
"unmute_progress": "Poistetaan mykistystä…"
},
"exporter": {
"export": "Vie",
"processing": "Käsitellään, hetken päästä voit tallentaa tiedoston"
},
"image_cropper": {
"crop_picture": "Rajaa kuva",
"save": "Tallenna",
"save_without_cropping": "Tallenna rajaamatta",
"cancel": "Peruuta"
},
"importer": {
"submit": "Hyväksy",
"error": "Virhe tapahtui tietoja tuodessa.",
"success": "Tuonti onnistui."
},
"media_modal": {
"previous": "Edellinen",
"next": "Seuraava"
},
"emoji": {
"stickers": "Tarrat",
"emoji": "Emoji",
"keep_open": "Pidä valitsin auki",
"search_emoji": "Hae emojia",
"add_emoji": "Lisää emoji",
"custom": "Custom-emoji",
"load_all": "Ladataan kaikkia {emojiAmount} emojia",
"unicode": "Unicode-emoji",
"load_all_hint": "Ensimmäiset {saneAmount} emojia ladattu, kaikkien emojien lataaminen voi aiheuttaa hidastelua."
},
"remote_user_resolver": {
"remote_user_resolver": "Ulkopuolinen käyttäjä",
"searching_for": "Etsitään käyttäjää",
"error": "Ei löytynyt."
},
"selectable_list": {
"select_all": "Valitse kaikki"
},
"password_reset": {
"check_email": "Tarkista sähköpostisi salasanannollausta varten.",
"instruction": "Syötä sähköpostiosoite tai käyttäjänimi. Lähetämme linkin salasanan nollausta varten.",
"password_reset_disabled": "Salasanan nollaus ei käytössä. Ota yhteyttä sivun ylläpitäjään.",
"password_reset_required_but_mailer_is_disabled": "Sinun täytyy vaihtaa salasana, mutta salasanan nollaus on pois käytöstä. Ota yhteyttä sivun ylläpitäjään.",
"forgot_password": "Unohditko salasanan?",
"password_reset": "Salasanan nollaus",
"placeholder": "Sähköpostiosoite tai käyttäjänimi",
"return_home": "Palaa etusivulle",
- "not_found": "Sähköpostiosoitetta tai käyttäjänimeä ei löytynyt.",
"too_many_requests": "Olet käyttänyt kaikki yritykset, yritä uudelleen myöhemmin.",
"password_reset_required": "Sinun täytyy vaihtaa salasana kirjautuaksesi."
},
"user_reporting": {
"add_comment_description": "Tämä raportti lähetetään sivun moderaattoreille. Voit antaa selityksen miksi ilmiannoit tilin:",
"title": "Ilmiannetaan {0}",
"additional_comments": "Lisäkommentit",
"forward_description": "Tämä tili on toiselta palvelimelta. Lähetä kopio ilmiannosta sinnekin?",
"forward_to": "Lähetä eteenpäin: {0}",
"submit": "Lähetä",
"generic_error": "Virhe käsitellessä pyyntöä."
},
"search": {
"people": "Käyttäjät",
"hashtags": "Aihetunnisteet",
"people_talking": "{0} käyttäjää puhuvat",
"person_talking": "{0} käyttäjä puhuu",
"no_results": "Ei tuloksia"
},
"errors": {
"storage_unavailable": "Pleroma ei voinut käyttää selaimen muistia. Kirjautumisesi ja paikalliset asetukset eivät tallennu ja saatat kohdata odottamattomia ongelmia. Yritä sallia evästeet."
}
}
diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index 794ed812c0..3b7eefaf51 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -1,737 +1,736 @@
{
"chat": {
"title": "Chat"
},
"exporter": {
"export": "Exporter",
"processing": "En cours de traitement, vous pourrez bientôt télécharger votre fichier"
},
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Proxy média",
"scope_options": "Options de visibilité",
"text_limit": "Limite de texte",
"title": "Caractéristiques",
"who_to_follow": "Personnes à suivre"
},
"finder": {
"error_fetching_user": "Erreur lors de la recherche de l'utilisateur·ice",
"find_user": "Chercher un-e utilisateur·ice"
},
"general": {
"apply": "Appliquer",
"submit": "Envoyer",
"more": "Plus",
"generic_error": "Une erreur s'est produite",
"optional": "optionnel",
"show_more": "Montrer plus",
"show_less": "Montrer moins",
"cancel": "Annuler",
"disable": "Désactiver",
"enable": "Activer",
"confirm": "Confirmer",
"verify": "Vérifier",
"dismiss": "Rejeter"
},
"image_cropper": {
"crop_picture": "Rogner l'image",
"save": "Sauvegarder",
"save_without_cropping": "Sauvegarder sans rogner",
"cancel": "Annuler"
},
"importer": {
"submit": "Soumettre",
"success": "Importé avec succès.",
"error": "Une erreur est survenue pendant l'import de ce fichier."
},
"login": {
"login": "Connexion",
"description": "Connexion avec OAuth",
"logout": "Déconnexion",
"password": "Mot de passe",
"placeholder": "p.e. lain",
"register": "S'inscrire",
"username": "Identifiant",
"hint": "Connectez-vous pour rejoindre la discussion",
"authentication_code": "Code d'authentification",
"enter_recovery_code": "Entrez un code de récupération",
"enter_two_factor_code": "Entrez un code à double authentification",
"recovery_code": "Code de récupération",
"heading": {
"totp": "Authentification à double authentification",
"recovery": "Récuperation de la double authentification"
}
},
"media_modal": {
"previous": "Précédent",
"next": "Suivant"
},
"nav": {
"about": "À propos",
"back": "Retour",
"chat": "Chat local",
"friend_requests": "Demandes de suivi",
"mentions": "Notifications",
"interactions": "Interactions",
"dms": "Messages directs",
"public_tl": "Fil d'actualité public",
"timeline": "Fil d'actualité",
"twkn": "Ensemble du réseau connu",
"user_search": "Recherche d'utilisateur·ice",
"who_to_follow": "Qui suivre",
"preferences": "Préférences",
"search": "Recherche",
"administration": "Administration"
},
"notifications": {
"broken_favorite": "Chargement d'un message inconnu…",
"favorited_you": "a aimé votre statut",
"followed_you": "a commencé à vous suivre",
"load_older": "Charger les notifications précédentes",
"notifications": "Notifications",
"read": "Lu !",
"repeated_you": "a partagé votre statut",
"no_more_notifications": "Aucune notification supplémentaire",
"migrated_to": "a migré à",
"reacted_with": "a réagi avec {0}",
"follow_request": "veut vous suivre"
},
"interactions": {
"favs_repeats": "Partages et favoris",
"follows": "Nouveaux suivis",
"load_older": "Chargez d'anciennes interactions",
"moves": "Migrations de comptes"
},
"post_status": {
"new_status": "Poster un nouveau statut",
"account_not_locked_warning": "Votre compte n'est pas {0}. N'importe qui peut vous suivre pour voir vos billets en Abonné·e·s uniquement.",
"account_not_locked_warning_link": "verrouillé",
"attachments_sensitive": "Marquer le média comme sensible",
"content_type": {
"text/plain": "Texte brut",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Sujet (optionnel)",
"default": "Écrivez ici votre prochain statut.",
"direct_warning_to_all": "Ce message sera visible pour toutes les personnes mentionnées.",
"direct_warning_to_first_only": "Ce message sera visible uniquement pour personnes mentionnées au début du message.",
"posting": "Envoi en cours",
"scope_notice": {
"public": "Ce statut sera visible par tout le monde",
"private": "Ce statut sera visible par seulement vos abonné⋅e⋅s",
"unlisted": "Ce statut ne sera pas visible dans le Fil d'actualité public et l'Ensemble du réseau connu"
},
"scope": {
"direct": "Direct - N'envoyer qu'aux personnes mentionnées",
"private": "Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos billets",
"public": "Publique - Afficher dans les fils publics",
"unlisted": "Non-Listé - Ne pas afficher dans les fils publics"
}
},
"registration": {
"bio": "Biographie",
"email": "Adresse mail",
"fullname": "Pseudonyme",
"password_confirm": "Confirmation du mot de passe",
"registration": "Inscription",
"token": "Jeton d'invitation",
"captcha": "CAPTCHA",
"new_captcha": "Cliquez sur l'image pour avoir un nouveau captcha",
"username_placeholder": "p.e. lain",
"fullname_placeholder": "p.e. Lain Iwakura",
"bio_placeholder": "p.e.\nSalut, je suis Lain\nJe suis une héroïne d'animé qui vit dans une banlieue japonaise. Vous me connaissez peut-être du Wired.",
"validations": {
"username_required": "ne peut pas être laissé vide",
"fullname_required": "ne peut pas être laissé vide",
"email_required": "ne peut pas être laissé vide",
"password_required": "ne peut pas être laissé vide",
"password_confirmation_required": "ne peut pas être laissé vide",
"password_confirmation_match": "doit être identique au mot de passe"
}
},
"selectable_list": {
"select_all": "Tout selectionner"
},
"settings": {
"app_name": "Nom de l'application",
"security": "Sécurité",
"enter_current_password_to_confirm": "Entrez votre mot de passe actuel pour confirmer votre identité",
"mfa": {
"otp": "OTP",
"setup_otp": "Configurer OTP",
"wait_pre_setup_otp": "préconfiguration OTP",
"confirm_and_enable": "Confirmer & activer OTP",
"title": "Double authentification",
"generate_new_recovery_codes": "Générer de nouveaux codes de récupération",
"warning_of_generate_new_codes": "Quand vous générez de nouveauc codes de récupération, vos anciens codes ne fonctionnerons plus.",
"recovery_codes": "Codes de récupération.",
"waiting_a_recovery_codes": "Réception des codes de récupération…",
"recovery_codes_warning": "Écrivez les codes ou sauvez les quelquepart sécurisé - sinon vous ne les verrez plus jamais. Si vous perdez l'accès à votre application de double authentification et codes de récupération vous serez vérouillé en dehors de votre compte.",
"authentication_methods": "Methodes d'authentification",
"scan": {
"title": "Scanner",
"desc": "En utilisant votre application de double authentification, scannez ce QR code ou entrez la clé textuelle :",
"secret_code": "Clé"
},
"verify": {
"desc": "Pour activer la double authentification, entrez le code depuis votre application :"
}
},
"attachmentRadius": "Pièces jointes",
"attachments": "Pièces jointes",
"avatar": "Avatar",
"avatarAltRadius": "Avatars (Notifications)",
"avatarRadius": "Avatars",
"background": "Arrière-plan",
"bio": "Biographie",
"block_export": "Export des comptes bloqués",
"block_export_button": "Export des comptes bloqués vers un fichier csv",
"block_import": "Import des comptes bloqués",
"block_import_error": "Erreur lors de l'import des comptes bloqués",
"blocks_imported": "Blocks importés ! Le traitement va prendre un moment.",
"blocks_tab": "Bloqué·e·s",
"btnRadius": "Boutons",
"cBlue": "Bleu (répondre, suivre)",
"cGreen": "Vert (partager)",
"cOrange": "Orange (aimer)",
"cRed": "Rouge (annuler)",
"change_password": "Changez votre mot de passe",
"change_password_error": "Il y a eu un problème pour changer votre mot de passe.",
"changed_password": "Mot de passe modifié avec succès !",
"collapse_subject": "Réduire les messages avec des sujets",
"composing": "Composition",
"confirm_new_password": "Confirmation du nouveau mot de passe",
"current_avatar": "Avatar actuel",
"current_password": "Mot de passe actuel",
"current_profile_banner": "Bannière de profil actuelle",
"data_import_export_tab": "Import / Export des Données",
"default_vis": "Visibilité par défaut",
"delete_account": "Supprimer le compte",
"delete_account_description": "Supprimer définitivement vos données et désactiver votre compte.",
"delete_account_error": "Il y a eu un problème lors de la tentative de suppression de votre compte. Si le problème persiste, contactez l'administrateur⋅ice de cette instance.",
"delete_account_instructions": "Indiquez votre mot de passe ci-dessous pour confirmer la suppression de votre compte.",
"avatar_size_instruction": "La taille minimale recommandée pour l'image de l'avatar est de 150x150 pixels.",
"export_theme": "Enregistrer le thème",
"filtering": "Filtre",
"filtering_explanation": "Tous les statuts contenant ces mots seront masqués. Un mot par ligne",
"follow_export": "Exporter les abonnements",
"follow_export_button": "Exporter les abonnements en csv",
"follow_import": "Importer des abonnements",
"follow_import_error": "Erreur lors de l'importation des abonnements",
"follows_imported": "Abonnements importés ! Le traitement peut prendre un moment.",
"foreground": "Premier plan",
"general": "Général",
"hide_attachments_in_convo": "Masquer les pièces jointes dans les conversations",
"hide_attachments_in_tl": "Masquer les pièces jointes dans le journal",
"hide_muted_posts": "Masquer les statuts des utilisateurs masqués",
"max_thumbnails": "Nombre maximum de miniatures par statuts",
"hide_isp": "Masquer le panneau spécifique a l'instance",
"preload_images": "Précharger les images",
"use_one_click_nsfw": "Ouvrir les pièces-jointes NSFW avec un seul clic",
"hide_post_stats": "Masquer les statistiques de publication (le nombre de favoris)",
"hide_user_stats": "Masquer les statistiques de profil (le nombre d'amis)",
"hide_filtered_statuses": "Masquer les statuts filtrés",
"import_blocks_from_a_csv_file": "Importer les blocages depuis un fichier csv",
"import_followers_from_a_csv_file": "Importer des abonnements depuis un fichier csv",
"import_theme": "Charger le thème",
"inputRadius": "Champs de texte",
"checkboxRadius": "Cases à cocher",
"instance_default": "(default : {value})",
"instance_default_simple": "(default)",
"interface": "Interface",
"interfaceLanguage": "Langue de l'interface",
"invalid_theme_imported": "Le fichier sélectionné n'est pas un thème Pleroma pris en charge. Aucun changement n'a été apporté à votre thème.",
"limited_availability": "Non disponible dans votre navigateur",
"links": "Liens",
"lock_account_description": "Limitez votre compte aux abonnés acceptés uniquement",
"loop_video": "Vidéos en boucle",
"loop_video_silent_only": "Boucle uniquement les vidéos sans le son (les « gifs » de Mastodon)",
"mutes_tab": "Comptes silenciés",
"play_videos_in_modal": "Jouer les vidéos directement dans le visionneur de médias",
"use_contain_fit": "Ne pas rogner les miniatures des pièces-jointes",
"name": "Nom",
"name_bio": "Nom & Bio",
"new_password": "Nouveau mot de passe",
"notification_visibility": "Types de notifications à afficher",
"notification_visibility_follows": "Abonnements",
"notification_visibility_likes": "J'aime",
"notification_visibility_mentions": "Mentionnés",
"notification_visibility_repeats": "Partages",
"no_rich_text_description": "Ne formatez pas le texte",
"no_blocks": "Aucun bloqués",
"no_mutes": "Aucun masqués",
"hide_follows_description": "Ne pas afficher à qui je suis abonné",
"hide_followers_description": "Ne pas afficher qui est abonné à moi",
"show_admin_badge": "Afficher le badge d'Administrateur⋅ice sur mon profil",
"show_moderator_badge": "Afficher le badge de Modérateur⋅ice sur mon profil",
"nsfw_clickthrough": "Masquer les images marquées comme contenu adulte ou sensible",
"oauth_tokens": "Jetons OAuth",
"token": "Jeton",
"refresh_token": "Rafraichir le jeton",
"valid_until": "Valable jusque",
"revoke_token": "Révoquer",
"panelRadius": "Fenêtres",
"pause_on_unfocused": "Suspendre le streaming lorsque l'onglet n'est pas actif",
"presets": "Thèmes prédéfinis",
"profile_background": "Image de fond",
"profile_banner": "Bannière de profil",
"profile_tab": "Profil",
"radii_help": "Vous pouvez ici choisir le niveau d'arrondi des angles de l'interface (en pixels)",
"replies_in_timeline": "Réponses au journal",
"reply_visibility_all": "Montrer toutes les réponses",
"reply_visibility_following": "Afficher uniquement les réponses adressées à moi ou aux personnes que je suis",
"reply_visibility_self": "Afficher uniquement les réponses adressées à moi",
"autohide_floating_post_button": "Automatiquement cacher le bouton de Nouveau Statut (sur mobile)",
"saving_err": "Erreur lors de l'enregistrement des paramètres",
"saving_ok": "Paramètres enregistrés",
"search_user_to_block": "Rechercher qui vous voulez bloquer",
"search_user_to_mute": "Rechercher qui vous voulez masquer",
"security_tab": "Sécurité",
"scope_copy": "Garder la même visibilité en répondant (les DMs restent toujours des DMs)",
"minimal_scopes_mode": "Rétrécir les options de séléction de la portée",
"set_new_avatar": "Changer d'avatar",
"set_new_profile_background": "Changer d'image de fond",
"set_new_profile_banner": "Changer de bannière",
"settings": "Paramètres",
"subject_input_always_show": "Toujours copier le champ de sujet",
"subject_line_behavior": "Copier le sujet en répondant",
"subject_line_email": "Similaire au courriel : « re : sujet »",
"subject_line_mastodon": "Comme mastodon : copier tel quel",
"subject_line_noop": "Ne pas copier",
"post_status_content_type": "Type de contenu du statuts",
"stop_gifs": "N'animer les GIFS que lors du survol du curseur de la souris",
"streaming": "Charger automatiquement les nouveaux statuts lorsque vous êtes au haut de la page",
"text": "Texte",
"theme": "Thème",
"theme_help": "Spécifiez des codes couleur hexadécimaux (#rrvvbb) pour personnaliser les couleurs du thème.",
"theme_help_v2_1": "Vous pouvez aussi surcharger certaines couleurs de composants et transparence via la case à cocher, utilisez le bouton « Vider tout » pour effacer toutes les surcharges.",
"theme_help_v2_2": "Les icônes sous certaines des entrées ont un indicateur de contraste du fond/texte, survolez les pour plus d'informations détailles. Veuillez garder a l'esprit que lors de l'utilisation de transparence l'indicateur de contraste indique le pire des cas.",
"tooltipRadius": "Info-bulles/alertes",
"upload_a_photo": "Envoyer une photo",
"user_settings": "Paramètres utilisateur",
"values": {
"false": "non",
"true": "oui"
},
"notifications": "Notifications",
"notification_mutes": "Pour stopper la récéption de notifications d'un utilisateur particulier, utilisez un masquage.",
"notification_blocks": "Bloquer un utilisateur stoppe toute notification et se désabonne de lui.",
"enable_web_push_notifications": "Activer les notifications de push web",
"style": {
"switcher": {
"keep_color": "Garder les couleurs",
"keep_shadows": "Garder les ombres",
"keep_opacity": "Garder la transparence",
"keep_roundness": "Garder la rondeur",
"keep_fonts": "Garder les polices",
"save_load_hint": "L'option « Garder » préserve les options activés en cours lors de la séléction ou chargement des thèmes, il sauve aussi les dites options lors de l'export d'un thème. Quand toutes les cases sont décochés, exporter un thème sauvera tout.",
"reset": "Remise à zéro",
"clear_all": "Tout vider",
"clear_opacity": "Vider la transparence",
"load_theme": "Charger le thème",
"use_snapshot": "Ancienne version",
"help": {
"upgraded_from_v2": "PleromaFE à été mis à jour, le thème peut être un peu différent que dans vos souvenirs.",
"v2_imported": "Le fichier que vous avez importé vient d'un version antérieure. Nous essayons de maximizer la compatibilité mais il peu y avoir quelques incohérences.",
"future_version_imported": "Le fichier importé viens d'une version postérieure de PleromaFE.",
"older_version_imported": "Le fichier importé viens d'une version antérieure de PleromaFE.",
"snapshot_source_mismatch": "Conflict de version : Probablement due à un retour arrière puis remise à jour de la version de PleromaFE, si vous avez charger le thème en utilisant une version antérieure vous voulez probablement utiliser la version antérieure, autrement utiliser la version postérieure.",
"migration_napshot_gone": "Pour une raison inconnue l'instantané est manquant, des parties peuvent rendre différentes que dans vos souvenirs.",
"migration_snapshot_ok": "Pour être sûr un instantanée du thème à été chargé. Vos pouvez essayer de charger ses données.",
"fe_downgraded": "Retour en arrière de la version de PleromaFE.",
"fe_upgraded": "Le moteur de thème PleromaFE à été mis à jour après un changement de version.",
"snapshot_missing": "Aucun instantané du thème à été trouvé dans le fichier, il peut y avoir un rendu différent à la vision originelle.",
"snapshot_present": "Un instantané du thème à été chargé, toutes les valeurs sont dont écrasées. Vous pouvez autrement charger le thème complètement."
},
"keep_as_is": "Garder tel-quel",
"use_source": "Nouvelle version"
},
"common": {
"color": "Couleur",
"opacity": "Transparence",
"contrast": {
"hint": "Le ratio de contraste est {ratio}, il {level} {context}",
"level": {
"aa": "répond aux directives de niveau AA (minimum)",
"aaa": "répond aux directives de niveau AAA (recommandé)",
"bad": "ne réponds à aucune directive d'accessibilité"
},
"context": {
"18pt": "pour texte large (19pt+)",
"text": "pour texte"
}
}
},
"common_colors": {
"_tab_label": "Commun",
"main": "Couleurs communes",
"foreground_hint": "Voir l'onglet « Avancé » pour plus de contrôle détaillé",
"rgbo": "Icônes, accents, badges"
},
"advanced_colors": {
"_tab_label": "Avancé",
"alert": "Fond d'alerte",
"alert_error": "Erreur",
"badge": "Fond de badge",
"badge_notification": "Notification",
"panel_header": "Entête de panneau",
"top_bar": "Barre du haut",
"borders": "Bordures",
"buttons": "Boutons",
"inputs": "Champs de saisie",
"faint_text": "Texte en fondu",
"underlay": "sous-calque",
"pressed": "Appuyé",
"alert_warning": "Avertissement",
"alert_neutral": "Neutre",
"post": "Messages/Bios des comptes",
"poll": "Graphique de Sondage",
"icons": "Icônes",
"selectedPost": "Message sélectionné",
"selectedMenu": "Objet sélectionné du menu",
"disabled": "Désactivé",
"tabs": "Onglets",
"toggled": "(Dés)activé",
"highlight": "Éléments mis en valeur",
"popover": "Infobulles, menus"
},
"radii": {
"_tab_label": "Rondeur"
},
"shadows": {
"_tab_label": "Ombres et éclairage",
"component": "Composant",
"override": "Surcharger",
"shadow_id": "Ombre #{value}",
"blur": "Flou",
"spread": "Dispersion",
"inset": "Interne",
"hint": "Pour les ombres, vous pouvez aussi utiliser --variable comme valeur de couleur en CSS3. Veuillez noter que spécifier la transparence ne fonctionnera pas dans ce cas.",
"filter_hint": {
"always_drop_shadow": "Attention, cette ombre utilise toujours {0} quand le navigateur le supporte.",
"drop_shadow_syntax": "{0} ne supporte pas le paramètre {1} et mot-clé {2}.",
"avatar_inset": "Veuillez noter que combiner a la fois les ombres internes et non-internes sur les avatars peut fournir des résultats innatendus avec la transparence des avatars.",
"spread_zero": "Les ombres avec une dispersion > 0 apparaitrons comme si ils étaient à zéro",
"inset_classic": "L'ombre interne utilisera toujours {0}"
},
"components": {
"panel": "Panneau",
"panelHeader": "En-tête de panneau",
"topBar": "Barre du haut",
"avatar": "Avatar utilisateur⋅ice (dans la vue de profil)",
"avatarStatus": "Avatar utilisateur⋅ice (dans la vue de statuts)",
"popup": "Popups et infobulles",
"button": "Bouton",
"buttonHover": "Bouton (survol)",
"buttonPressed": "Bouton (cliqué)",
"buttonPressedHover": "Bouton (cliqué+survol)",
"input": "Champ de saisie"
},
"hintV3": "Pour les ombres vous pouvez aussi utiliser la notation {0} pour utiliser un autre emplacement de couleur."
},
"fonts": {
"_tab_label": "Polices",
"help": "Sélectionnez la police à utiliser pour les éléments de l'UI. Pour « personnalisé » vous avez à entrer le nom exact de la police comme il apparaît dans le système.",
"components": {
"interface": "Interface",
"input": "Champs de saisie",
"post": "Post text",
"postCode": "Texte à taille fixe dans un article (texte enrichi)"
},
"family": "Nom de la police",
"size": "Taille (en px)",
"weight": "Poid (gras)",
"custom": "Personnalisé"
},
"preview": {
"header": "Prévisualisation",
"content": "Contenu",
"error": "Exemple d'erreur",
"button": "Bouton",
"text": "Un certain nombre de {0} et {1}",
"mono": "contenu",
"input": "Je viens juste d’atterrir à L.A.",
"faint_link": "manuel utile",
"fine_print": "Lisez notre {0} pour n'apprendre rien d'utile !",
"header_faint": "Tout va bien",
"checkbox": "J'ai survolé les conditions d'utilisation",
"link": "un petit lien sympa"
}
},
"version": {
"title": "Version",
"backend_version": "Version du Backend",
"frontend_version": "Version du Frontend"
},
"change_email": "Changer de courriel",
"domain_mutes": "Domaines",
"pad_emoji": "Rajouter un espace autour de l'émoji après l’avoir choisit",
"notification_visibility_emoji_reactions": "Réactions",
"hide_follows_count_description": "Masquer le nombre de suivis",
"useStreamingApiWarning": "(Non recommandé, expérimental, connu pour rater des messages)",
"type_domains_to_mute": "Écrire les domaines à masquer",
"fun": "Rigolo",
"greentext": "greentexting",
"allow_following_move": "Suivre automatiquement quand ce compte migre",
"change_email_error": "Il y a eu un problème pour charger votre courriel.",
"changed_email": "Courriel changé avec succès !",
"discoverable": "Permettre de découvrir ce compte dans les résultats de recherche web et autres services",
"emoji_reactions_on_timeline": "Montrer les émojis-réactions dans le flux",
"new_email": "Nouveau courriel",
"notification_visibility_moves": "Migrations de compte",
"user_mutes": "Comptes",
"useStreamingApi": "Recevoir les messages et notifications en temps réel",
"notification_setting_filters": "Filtres",
"notification_setting_privacy_option": "Masquer l'expéditeur et le contenu des notifications push",
"notification_setting_privacy": "Intimité",
"hide_followers_count_description": "Masquer le nombre d'abonnés",
"accent": "Accent"
},
"timeline": {
"collapse": "Fermer",
"conversation": "Conversation",
"error_fetching": "Erreur en cherchant les mises à jour",
"load_older": "Afficher plus",
"no_retweet_hint": "Le message est marqué en abonnés-seulement ou direct et ne peut pas être partagé",
"repeated": "a partagé",
"show_new": "Afficher plus",
"up_to_date": "À jour",
"no_more_statuses": "Pas plus de statuts",
"no_statuses": "Aucun statuts"
},
"status": {
"favorites": "Favoris",
"repeats": "Partages",
"delete": "Supprimer statuts",
"pin": "Agraffer sur le profil",
"unpin": "Dégraffer du profil",
"pinned": "Agraffé",
"delete_confirm": "Voulez-vous vraiment supprimer ce statuts ?",
"reply_to": "Réponse à",
"replies_list": "Réponses :",
"mute_conversation": "Masquer la conversation",
"unmute_conversation": "Démasquer la conversation",
"status_unavailable": "Status indisponible",
"copy_link": "Copier le lien au status"
},
"user_card": {
"approve": "Accepter",
"block": "Bloquer",
"blocked": "Bloqué !",
"deny": "Rejeter",
"favorites": "Favoris",
"follow": "Suivre",
"follow_sent": "Demande envoyée !",
"follow_progress": "Demande en cours…",
"follow_again": "Renvoyer la demande ?",
"follow_unfollow": "Désabonner",
"followees": "Suivis",
"followers": "Vous suivent",
"following": "Suivi !",
"follows_you": "Vous suit !",
"its_you": "C'est vous !",
"media": "Media",
"mute": "Masquer",
"muted": "Masqué",
"per_day": "par jour",
"remote_follow": "Suivre d'une autre instance",
"report": "Signalement",
"statuses": "Statuts",
"unblock": "Débloquer",
"unblock_progress": "Déblocage…",
"block_progress": "Blocage…",
"unmute": "Démasquer",
"unmute_progress": "Démasquage…",
"mute_progress": "Masquage…",
"admin_menu": {
"moderation": "Moderation",
"grant_admin": "Promouvoir Administrateur⋅ice",
"revoke_admin": "Dégrader Administrateur⋅ice",
"grant_moderator": "Promouvoir Modérateur⋅ice",
"revoke_moderator": "Dégrader Modérateur⋅ice",
"activate_account": "Activer le compte",
"deactivate_account": "Désactiver le compte",
"delete_account": "Supprimer le compte",
"force_nsfw": "Marquer tous les statuts comme NSFW",
"strip_media": "Supprimer les medias des statuts",
"force_unlisted": "Forcer les statuts à être délistés",
"sandbox": "Forcer les statuts à être visibles seuleument pour les abonné⋅e⋅s",
"disable_remote_subscription": "Interdir de s'abonner a l'utilisateur depuis l'instance distante",
"disable_any_subscription": "Interdir de s'abonner à l'utilisateur tout court",
"quarantine": "Interdir les statuts de l'utilisateur à fédérer",
"delete_user": "Supprimer l'utilisateur",
"delete_user_confirmation": "Êtes-vous absolument-sûr⋅e ? Cette action ne peut être annulée."
},
"mention": "Mention",
"hidden": "Caché",
"subscribe": "Abonner",
"unsubscribe": "Désabonner",
"hide_repeats": "Cacher les partages",
"show_repeats": "Montrer les partages"
},
"user_profile": {
"timeline_title": "Journal de l'utilisateur⋅ice",
"profile_does_not_exist": "Désolé, ce profil n'existe pas.",
"profile_loading_error": "Désolé, il y a eu une erreur au chargement du profil."
},
"user_reporting": {
"title": "Signaler {0}",
"add_comment_description": "Ce signalement sera envoyé aux modérateur⋅ice⋅s de votre instance. Vous pouvez fournir une explication de pourquoi vous signalez ce compte ci-dessous :",
"additional_comments": "Commentaires additionnels",
"forward_description": "Le compte vient d'un autre serveur. Envoyer une copie du signalement à celui-ci aussi ?",
"forward_to": "Transmettre à {0}",
"submit": "Envoyer",
"generic_error": "Une erreur est survenue lors du traitement de votre requête."
},
"who_to_follow": {
"more": "Plus",
"who_to_follow": "À qui s'abonner"
},
"tool_tip": {
"media_upload": "Envoyer un media",
"repeat": "Répéter",
"reply": "Répondre",
"favorite": "Favoriser",
"user_settings": "Paramètres utilisateur",
"add_reaction": "Ajouter une réaction",
"accept_follow_request": "Accepter la demande de suivit",
"reject_follow_request": "Rejeter la demande de suivit"
},
"upload": {
"error": {
"base": "L'envoi a échoué.",
"file_too_big": "Fichier trop gros [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Réessayez plus tard"
},
"file_size_units": {
"B": "O",
"KiB": "KiO",
"MiB": "MiO",
"GiB": "GiO",
"TiB": "TiO"
}
},
"about": {
"mrf": {
"keyword": {
"reject": "Rejeté",
"replace": "Remplacer",
"keyword_policies": "Politiques par mot-clés",
"ftl_removal": "Suppression du flux fédéré",
"is_replaced_by": "→"
},
"simple": {
"simple_policies": "Politiques par instances",
"accept": "Accepter",
"accept_desc": "Cette instance accepte des messages seulement depuis ces instances :",
"reject": "Rejeter",
"reject_desc": "Cette instance n'acceptera pas de message de ces instances :",
"quarantine": "Quarantaine",
"quarantine_desc": "Cette instance enverras seulement des messages publics à ces instances :",
"ftl_removal_desc": "Cette instance supprime ces instance du flux fédéré :",
"media_removal": "Suppression multimédia",
"media_removal_desc": "Cette instance supprime le contenu multimédia des instances suivantes :",
"media_nsfw": "Force le contenu multimédia comme sensible",
"ftl_removal": "Suppression du flux fédéré",
"media_nsfw_desc": "Cette instance force le contenu multimédia comme sensible pour les messages des instances suivantes :"
},
"federation": "Fédération",
"mrf_policies": "Politiques MRF activées",
"mrf_policies_desc": "Les politiques MRF modifient la fédération entre les instances. Les politiques suivantes sont activées :"
},
"staff": "Staff"
},
"domain_mute_card": {
"mute": "Muet",
"mute_progress": "Masquage…",
"unmute": "Démasquer",
"unmute_progress": "Démasquage…"
},
"polls": {
"add_poll": "Ajouter un Sondage",
"add_option": "Ajouter une option",
"option": "Option",
"votes": "votes",
"type": "Type de Sondage",
"single_choice": "Choix unique",
"multiple_choices": "Choix multiples",
"expiry": "Age du sondage",
"expires_in": "Fin du sondage dans {0}",
"not_enough_options": "Trop peu d'options unique au sondage",
"vote": "Voter",
"expired": "Sondage terminé il y a {0}"
},
"emoji": {
"emoji": "Émoji",
"search_emoji": "Rechercher un émoji",
"add_emoji": "Insérer un émoji",
"custom": "émoji personnalisé",
"unicode": "émoji unicode",
"load_all": "Charger tout les {emojiAmount} émojis",
"load_all_hint": "{saneAmount} émojis chargé, charger tout les émojis peuvent causer des problèmes de performances.",
"stickers": "Stickers",
"keep_open": "Garder le sélecteur ouvert"
},
"remote_user_resolver": {
"error": "Non trouvé.",
"searching_for": "Rechercher",
"remote_user_resolver": "Résolution de compte distant"
},
"time": {
"minutes_short": "{0}min",
"second_short": "{0}s",
"day": "{0} jour",
"days": "{0} jours",
"months": "{0} mois",
"month_short": "{0}m",
"months_short": "{0}m",
"now": "tout de suite",
"now_short": "maintenant",
"second": "{0} seconde",
"seconds": "{0} secondes",
"seconds_short": "{0}s",
"day_short": "{0}j",
"days_short": "{0}j",
"hour": "{0} heure",
"hours": "{0} heures",
"hour_short": "{0}h",
"hours_short": "{0}h",
"in_future": "dans {0}",
"in_past": "il y a {0}",
"minute": "{0} minute",
"minutes": "{0} minutes",
"minute_short": "{0}min",
"month": "{0} mois",
"week": "{0} semaine",
"weeks": "{0} semaines",
"week_short": "{0}s",
"weeks_short": "{0}s",
"year": "{0} année",
"years": "{0} années",
"year_short": "{0}a",
"years_short": "{0}a"
},
"search": {
"people": "Comptes",
"person_talking": "{count} personnes discutant",
"hashtags": "Mot-dièses",
"people_talking": "{count} personnes discutant",
"no_results": "Aucun résultats"
},
"password_reset": {
"forgot_password": "Mot de passe oublié ?",
"check_email": "Vérifiez vos courriels pour le lien permettant de changer votre mot de passe.",
"password_reset_disabled": "Le changement de mot de passe est désactivé. Veuillez contacter l'administration de votre instance.",
"password_reset_required_but_mailer_is_disabled": "Vous devez changer votre mot de passe mais sont changement est désactivé. Veuillez contacter l’administration de votre instance.",
"password_reset": "Nouveau mot de passe",
"instruction": "Entrer votre address de courriel ou votre nom utilisateur. Nous enverrons un lien pour changer votre mot de passe.",
"placeholder": "Votre email ou nom d'utilisateur",
"return_home": "Retourner à la page d'accueil",
- "not_found": "Email ou nom d'utilisateur inconnu.",
"too_many_requests": "Vos avez atteint la limite d'essais, essayez plus tard.",
"password_reset_required": "Vous devez changer votre mot de passe pour vous authentifier."
}
}
diff --git a/src/i18n/it.json b/src/i18n/it.json
index b88fdd294f..474e7fde70 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -1,813 +1,812 @@
{
"general": {
"submit": "Invia",
"apply": "Applica",
"more": "Altro",
"generic_error": "Errore",
"optional": "facoltativo",
"show_more": "Mostra tutto",
"show_less": "Ripiega",
"dismiss": "Chiudi",
"cancel": "Annulla",
"disable": "Disabilita",
"enable": "Abilita",
"confirm": "Conferma",
"verify": "Verifica",
"peek": "Anteprima",
"close": "Chiudi",
"retry": "Riprova",
"error_retry": "Per favore, riprova",
"loading": "Carico…"
},
"nav": {
"mentions": "Menzioni",
"public_tl": "Sequenza pubblica",
"timeline": "Sequenza personale",
"twkn": "Sequenza globale",
"chat": "Chat della stanza",
"friend_requests": "Vogliono seguirti",
"about": "Informazioni",
"administration": "Amministrazione",
"back": "Indietro",
"interactions": "Interazioni",
"dms": "Messaggi diretti",
"user_search": "Ricerca utenti",
"search": "Ricerca",
"who_to_follow": "Chi seguire",
"preferences": "Preferenze",
"bookmarks": "Segnalibri",
"chats": "Conversazioni",
"timelines": "Sequenze"
},
"notifications": {
"followed_you": "ti segue",
"notifications": "Notifiche",
"read": "Letto!",
"broken_favorite": "Stato sconosciuto, lo sto cercando…",
"favorited_you": "ha gradito il tuo messaggio",
"load_older": "Carica notifiche precedenti",
"repeated_you": "ha condiviso il tuo messaggio",
"follow_request": "vuole seguirti",
"no_more_notifications": "Fine delle notifiche",
"migrated_to": "è migrato verso",
"reacted_with": "ha reagito con {0}"
},
"settings": {
"attachments": "Allegati",
"avatar": "Icona utente",
"bio": "Introduzione",
"current_avatar": "La tua icona attuale",
"current_profile_banner": "Il tuo stendardo attuale",
"filtering": "Filtri",
"filtering_explanation": "Tutti i post contenenti queste parole saranno silenziati, una per riga",
"hide_attachments_in_convo": "Nascondi gli allegati presenti nelle conversazioni",
"hide_attachments_in_tl": "Nascondi gli allegati presenti nelle sequenze",
"name": "Nome",
"name_bio": "Nome ed introduzione",
"nsfw_clickthrough": "Fai click per visualizzare gli allegati offuscati",
"profile_background": "Sfondo della tua pagina",
"profile_banner": "Stendardo del tuo profilo",
"set_new_avatar": "Scegli una nuova icona",
"set_new_profile_background": "Scegli un nuovo sfondo per la tua pagina",
"set_new_profile_banner": "Scegli un nuovo stendardo per il tuo profilo",
"settings": "Impostazioni",
"theme": "Tema",
"user_settings": "Impostazioni Utente",
"attachmentRadius": "Allegati",
"avatarAltRadius": "Icone utente (Notifiche)",
"avatarRadius": "Icone utente",
"background": "Sfondo",
"btnRadius": "Pulsanti",
"cBlue": "Blu (risposte, seguire)",
"cGreen": "Verde (ripeti)",
"cOrange": "Arancione (gradire)",
"cRed": "Rosso (annulla)",
"change_password": "Cambia password",
"change_password_error": "C'è stato un problema durante il cambiamento della password.",
"changed_password": "Password cambiata correttamente!",
"collapse_subject": "Ripiega messaggi con oggetto",
"confirm_new_password": "Conferma la nuova password",
"current_password": "La tua password attuale",
"data_import_export_tab": "Importa o esporta dati",
"default_vis": "Visibilità predefinita dei messaggi",
"delete_account": "Elimina profilo",
"delete_account_description": "Elimina definitivamente i tuoi dati e disattiva il tuo profilo.",
"delete_account_error": "C'è stato un problema durante l'eliminazione del tuo profilo. Se il problema persiste contatta l'amministratore della tua stanza.",
"delete_account_instructions": "Digita la tua password nel campo sottostante per confermare l'eliminazione del tuo profilo.",
"export_theme": "Salva impostazioni",
"follow_export": "Esporta la lista di chi segui",
"follow_export_button": "Esporta la lista di chi segui in un file CSV",
"follow_export_processing": "Sto elaborando, presto ti sarà chiesto di scaricare il tuo file",
"follow_import": "Importa la lista di chi segui",
"follow_import_error": "Errore nell'importazione della lista di chi segui",
"follows_imported": "Importazione riuscita! L'elaborazione richiederà un po' di tempo.",
"foreground": "Primo piano",
"general": "Generale",
"hide_post_stats": "Nascondi statistiche dei messaggi (es. il numero di preferenze)",
"hide_user_stats": "Nascondi statistiche dell'utente (es. il numero dei tuoi seguaci)",
"import_followers_from_a_csv_file": "Importa una lista di chi segui da un file CSV",
"import_theme": "Carica impostazioni",
"inputRadius": "Campi di testo",
"instance_default": "(predefinito: {value})",
"interfaceLanguage": "Lingua dell'interfaccia",
"invalid_theme_imported": "Il file selezionato non è un tema supportato da Pleroma. Il tuo tema non è stato modificato.",
"limited_availability": "Non disponibile nel tuo browser",
"links": "Collegamenti",
"lock_account_description": "Limita il tuo account solo a seguaci approvati",
"loop_video": "Riproduci video in ciclo continuo",
"loop_video_silent_only": "Riproduci solo video senza audio in ciclo continuo (es. le \"gif\" di Mastodon)",
"new_password": "Nuova password",
"notification_visibility": "Tipi di notifiche da mostrare",
"notification_visibility_follows": "Nuove persone ti seguono",
"notification_visibility_likes": "Preferiti",
"notification_visibility_mentions": "Menzioni",
"notification_visibility_repeats": "Condivisioni",
"no_rich_text_description": "Togli la formattazione del testo da tutti i messaggi",
"oauth_tokens": "Token OAuth",
"token": "Token",
"refresh_token": "Aggiorna token",
"valid_until": "Valido fino a",
"revoke_token": "Revoca",
"panelRadius": "Pannelli",
"pause_on_unfocused": "Interrompi l'aggiornamento continuo mentre la scheda è in secondo piano",
"presets": "Valori predefiniti",
"profile_tab": "Profilo",
"radii_help": "Imposta il raggio degli angoli (in pixel)",
"replies_in_timeline": "Risposte nella sequenza personale",
"reply_visibility_all": "Mostra tutte le risposte",
"reply_visibility_following": "Mostra solo le risposte rivolte a me o agli utenti che seguo",
"reply_visibility_self": "Mostra solo risposte rivolte a me",
"saving_err": "Errore nel salvataggio delle impostazioni",
"saving_ok": "Impostazioni salvate",
"security_tab": "Sicurezza",
"stop_gifs": "Riproduci GIF al passaggio del cursore",
"streaming": "Mostra automaticamente i nuovi messaggi quando sei in cima alla pagina",
"text": "Testo",
"theme_help": "Usa codici colore esadecimali (#rrggbb) per personalizzare il tuo schema di colori.",
"tooltipRadius": "Suggerimenti/avvisi",
"values": {
"false": "no",
"true": "sì"
},
"avatar_size_instruction": "La taglia minima per l'icona personale è 150x150 pixel.",
"domain_mutes": "Domini",
"discoverable": "Permetti la scoperta di questo profilo da servizi di ricerca ed altro",
"composing": "Composizione",
"changed_email": "Email cambiata con successo!",
"change_email_error": "C'è stato un problema nel cambiare la tua email.",
"change_email": "Cambia email",
"blocks_tab": "Bloccati",
"blocks_imported": "Blocchi importati! Saranno elaborati a breve.",
"block_import_error": "Errore nell'importazione",
"block_import": "Importa blocchi",
"block_export_button": "Esporta i tuoi blocchi in un file CSV",
"block_export": "Esporta blocchi",
"allow_following_move": "Consenti",
"mfa": {
"verify": {
"desc": "Per abilitare l'autenticazione bifattoriale, inserisci il codice fornito dalla tua applicazione:"
},
"scan": {
"secret_code": "Codice",
"desc": "Con la tua applicazione bifattoriale, acquisisci questo QR o inserisci il codice manualmente:",
"title": "Acquisisci"
},
"authentication_methods": "Metodi di accesso",
"recovery_codes_warning": "Appuntati i codici o salvali in un posto sicuro, altrimenti rischi di non rivederli mai più. Se perderai l'accesso sia alla tua applicazione bifattoriale che ai codici di recupero non potrai più accedere al tuo profilo.",
"waiting_a_recovery_codes": "Ricevo codici di recupero…",
"recovery_codes": "Codici di recupero.",
"warning_of_generate_new_codes": "Alla generazione di nuovi codici di recupero, quelli vecchi saranno disattivati.",
"generate_new_recovery_codes": "Genera nuovi codici di recupero",
"title": "Accesso bifattoriale",
"confirm_and_enable": "Conferma ed abilita OTP",
"wait_pre_setup_otp": "preimposto OTP",
"setup_otp": "Imposta OTP",
"otp": "OTP"
},
"enter_current_password_to_confirm": "Inserisci la tua password per identificarti",
"security": "Sicurezza",
"app_name": "Nome applicazione",
"style": {
"switcher": {
"help": {
"older_version_imported": "Il tema importato è stato creato per una versione precedente dell'interfaccia.",
"future_version_imported": "Il tema importato è stato creato per una versione più recente dell'interfaccia.",
"v2_imported": "Il tema importato è stato creato per una vecchia interfaccia. Non tutto potrebbe essere come prima.",
"upgraded_from_v2": "L'interfaccia è stata aggiornata, il tema potrebbe essere diverso da come lo intendevi.",
"migration_snapshot_ok": "Ho caricato l'anteprima del tema. Puoi provare a caricarne i contenuti.",
"fe_downgraded": "L'interfaccia è stata portata ad una versione precedente.",
"fe_upgraded": "Lo schema dei temi è stato aggiornato insieme all'interfaccia.",
"snapshot_missing": "Il tema non è provvisto di anteprima, quindi potrebbe essere diverso da come appare.",
"snapshot_present": "Tutti i valori sono sostituiti dall'anteprima del tema. Puoi invece caricare i suoi contenuti.",
"snapshot_source_mismatch": "Conflitto di versione: probabilmente l'interfaccia è stata portata ad una versione precedente e poi aggiornata di nuovo. Se hai modificato il tema con una versione precedente dell'interfaccia, usa la vecchia versione del tema, altrimenti puoi usare la nuova.",
"migration_napshot_gone": "Anteprima del tema non trovata, non tutto potrebbe essere come ricordi."
},
"use_source": "Nuova versione",
"use_snapshot": "Versione precedente",
"keep_as_is": "Mantieni tal quale",
"load_theme": "Carica tema",
"clear_opacity": "Rimuovi opacità",
"clear_all": "Azzera tutto",
"reset": "Reimposta",
"save_load_hint": "Le opzioni \"mantieni\" conservano le impostazioni correnti quando selezioni o carichi un tema, e le salvano quando ne esporti uno. Quando nessuna casella è selezionata, tutte le impostazioni correnti saranno salvate nel tema.",
"keep_fonts": "Mantieni font",
"keep_roundness": "Mantieni vertici",
"keep_opacity": "Mantieni opacità",
"keep_shadows": "Mantieni ombre",
"keep_color": "Mantieni colori"
},
"common": {
"opacity": "Opacità",
"color": "Colore",
"contrast": {
"context": {
"text": "per il testo",
"18pt": "per il testo grande (oltre 17pt)"
},
"level": {
"bad": "non soddisfa le linee guida di alcun livello",
"aaa": "soddisfa le linee guida di livello AAA (ottimo)",
"aa": "soddisfa le linee guida di livello AA (sufficiente)"
},
"hint": "Il rapporto di contrasto è {ratio}, e {level} {context}"
}
},
"advanced_colors": {
"badge": "Sfondo medaglie",
"post": "Messaggi / Biografie",
"alert_neutral": "Neutro",
"alert_warning": "Attenzione",
"alert_error": "Errore",
"alert": "Sfondo degli avvertimenti",
"_tab_label": "Avanzate",
"tabs": "Etichette",
"disabled": "Disabilitato",
"selectedMenu": "Voce menù selezionata",
"selectedPost": "Messaggio selezionato",
"pressed": "Premuto",
"highlight": "Elementi evidenziati",
"icons": "Icone",
"poll": "Grafico sondaggi",
"underlay": "Sottostante",
"faint_text": "Testo sbiadito",
"inputs": "Campi d'immissione",
"buttons": "Pulsanti",
"borders": "Bordi",
"top_bar": "Barra superiore",
"panel_header": "Titolo pannello",
"badge_notification": "Notifica",
"popover": "Suggerimenti, menù, sbalzi",
"toggled": "Scambiato",
"chat": {
"border": "Bordo",
"outgoing": "Inviati",
"incoming": "Ricevuti"
}
},
"common_colors": {
"rgbo": "Icone, accenti, medaglie",
"foreground_hint": "Seleziona l'etichetta \"Avanzate\" per controlli più fini",
"main": "Colori comuni",
"_tab_label": "Comuni"
},
"shadows": {
"inset": "Includi",
"spread": "Spandi",
"blur": "Sfoca",
"shadow_id": "Ombra numero {value}",
"override": "Sostituisci",
"component": "Componente",
"_tab_label": "Luci ed ombre",
"components": {
"avatarStatus": "Icona utente (vista messaggio)",
"avatar": "Icona utente (vista profilo)",
"topBar": "Barra superiore",
"panelHeader": "Intestazione pannello",
"panel": "Pannello",
"input": "Campo d'immissione",
"buttonPressedHover": "Pulsante (puntato e premuto)",
"buttonPressed": "Pulsante (premuto)",
"buttonHover": "Pulsante (puntato)",
"button": "Pulsante",
"popup": "Sbalzi e suggerimenti"
},
"filter_hint": {
"inset_classic": "Le ombre incluse usano {0}",
"spread_zero": "Lo spandimento maggiore di zero si azzera sulle ombre",
"avatar_inset": "Tieni presente che combinare ombre (sia incluse che non) sulle icone utente potrebbe dare risultati strani con quelle trasparenti.",
"drop_shadow_syntax": "{0} non supporta il parametro {1} né la keyword {2}.",
"always_drop_shadow": "Attenzione: quest'ombra usa sempre {0} se il tuo browser lo supporta."
},
"hintV3": "Per le ombre puoi anche usare la sintassi {0} per sfruttare il secondo colore."
},
"radii": {
"_tab_label": "Raggio"
},
"fonts": {
"_tab_label": "Font",
"custom": "Personalizzato",
"weight": "Peso (grassettatura)",
"size": "Dimensione (in pixel)",
"family": "Nome font",
"components": {
"postCode": "Font a spaziatura fissa incluso in un messaggio",
"post": "Testo del messaggio",
"input": "Campi d'immissione",
"interface": "Interfaccia"
},
"help": "Seleziona il font da usare per gli elementi dell'interfaccia. Se scegli \"personalizzato\" devi inserire il suo nome di sistema."
},
"preview": {
"link": "un bel collegamentino",
"checkbox": "Ho dato uno sguardo a termini e condizioni",
"header_faint": "Tutto bene",
"fine_print": "Leggi il nostro {0} per imparare un bel niente!",
"faint_link": "utilissimo manuale",
"input": "Sono appena atterrato a Fiumicino.",
"mono": "contenuto",
"text": "Altro {0} e {1}",
"content": "Contenuto",
"button": "Pulsante",
"error": "Errore d'esempio",
"header": "Anteprima"
}
},
"enable_web_push_notifications": "Abilita notifiche web push",
"fun": "Divertimento",
"notification_mutes": "Per non ricevere notifiche da uno specifico utente, zittiscilo.",
"notification_setting_privacy_option": "Nascondi mittente e contenuti delle notifiche push",
"notification_setting_privacy": "Privacy",
"notification_setting_filters": "Filtri",
"notifications": "Notifiche",
"greentext": "Frecce da meme",
"upload_a_photo": "Carica un'immagine",
"type_domains_to_mute": "Cerca domini da zittire",
"theme_help_v2_2": "Le icone dietro alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se si usano delle trasparenze, questi indicatori mostrano il peggior caso possibile.",
"theme_help_v2_1": "Puoi anche forzare colore ed opacità di alcuni elementi selezionando la casella. Usa il pulsante \"Azzera\" per azzerare tutte le forzature.",
"useStreamingApiWarning": "(Sconsigliato, sperimentale, può saltare messaggi)",
"useStreamingApi": "Ricevi messaggi e notifiche in tempo reale",
"user_mutes": "Utenti",
"post_status_content_type": "Tipo di contenuto dei messaggi",
"subject_line_noop": "Non copiare",
"subject_line_mastodon": "Come in Mastodon: copia tal quale",
"subject_line_email": "Come nelle email: \"re: oggetto\"",
"subject_line_behavior": "Copia oggetto quando rispondi",
"subject_input_always_show": "Mostra sempre il campo Oggetto",
"minimal_scopes_mode": "Riduci opzioni di visibilità",
"scope_copy": "Risposte ereditano la visibilità (messaggi privati lo fanno sempre)",
"search_user_to_mute": "Cerca utente da zittire",
"search_user_to_block": "Cerca utente da bloccare",
"autohide_floating_post_button": "Nascondi automaticamente il pulsante di composizione (mobile)",
"show_moderator_badge": "Mostra l'insegna di moderatore sulla mia pagina",
"show_admin_badge": "Mostra l'insegna di amministratore sulla mia pagina",
"hide_followers_count_description": "Non mostrare quanti seguaci ho",
"hide_follows_count_description": "Non mostrare quanti utenti seguo",
"hide_followers_description": "Non mostrare i miei seguaci",
"hide_follows_description": "Non mostrare chi seguo",
"no_mutes": "Nessun utente zittito",
"no_blocks": "Nessun utente bloccato",
"notification_visibility_emoji_reactions": "Reazioni",
"notification_visibility_moves": "Migrazioni utenti",
"new_email": "Nuova email",
"use_contain_fit": "Non ritagliare le anteprime degli allegati",
"play_videos_in_modal": "Riproduci video in un riquadro a sbalzo",
"mutes_tab": "Zittiti",
"interface": "Interfaccia",
"instance_default_simple": "(predefinito)",
"checkboxRadius": "Caselle di selezione",
"import_blocks_from_a_csv_file": "Importa blocchi da un file CSV",
"hide_filtered_statuses": "Nascondi messaggi filtrati",
"use_one_click_nsfw": "Apri media offuscati con un solo click",
"preload_images": "Precarica immagini",
"hide_isp": "Nascondi pannello della stanza",
"max_thumbnails": "Numero massimo di anteprime per messaggio",
"hide_muted_posts": "Nascondi messaggi degli utenti zittiti",
"accent": "Accento",
"emoji_reactions_on_timeline": "Mostra emoji di reazione sulle sequenze",
"pad_emoji": "Affianca spazi agli emoji inseriti tramite selettore",
"notification_blocks": "Bloccando un utente non riceverai più le sue notifiche né lo seguirai più.",
"mutes_and_blocks": "Zittiti e bloccati",
"profile_fields": {
"value": "Contenuto",
"name": "Etichetta",
"add_field": "Aggiungi campo",
"label": "Metadati profilo"
},
"bot": "Questo profilo è di un robot",
"version": {
"frontend_version": "Versione interfaccia",
"backend_version": "Versione backend",
"title": "Versione"
},
"reset_avatar": "Azzera icona",
"reset_profile_background": "Azzera sfondo profilo",
"reset_profile_banner": "Azzera stendardo profilo",
"reset_avatar_confirm": "Vuoi veramente azzerare l'icona?",
"reset_banner_confirm": "Vuoi veramente azzerare lo stendardo?",
"reset_background_confirm": "Vuoi veramente azzerare lo sfondo?",
"chatMessageRadius": "Messaggi istantanei",
"notification_setting_hide_notification_contents": "Nascondi mittente e contenuti delle notifiche push",
"notification_setting_block_from_strangers": "Blocca notifiche da utenti che non segui"
},
"timeline": {
"error_fetching": "Errore nell'aggiornamento",
"load_older": "Carica messaggi più vecchi",
"show_new": "Mostra nuovi",
"up_to_date": "Aggiornato",
"collapse": "Riduci",
"conversation": "Conversazione",
"no_retweet_hint": "Il messaggio è diretto o solo per seguaci e non può essere condiviso",
"repeated": "condiviso",
"no_statuses": "Nessun messaggio",
"no_more_statuses": "Fine dei messaggi",
"reload": "Ricarica"
},
"user_card": {
"follow": "Segui",
"followees": "Chi stai seguendo",
"followers": "Seguaci",
"following": "Seguìto!",
"follows_you": "Ti segue!",
"mute": "Silenzia",
"muted": "Silenziato",
"per_day": "al giorno",
"statuses": "Messaggi",
"approve": "Approva",
"block": "Blocca",
"blocked": "Bloccato!",
"deny": "Nega",
"remote_follow": "Segui da remoto",
"admin_menu": {
"delete_user_confirmation": "Ne sei completamente sicuro? Quest'azione non può essere annullata.",
"delete_user": "Elimina utente",
"quarantine": "I messaggi non arriveranno alle altre stanze",
"disable_any_subscription": "Rendi utente non seguibile",
"disable_remote_subscription": "Blocca i tentativi di seguirlo da altre stanze",
"sandbox": "Rendi tutti i messaggi solo per seguaci",
"force_unlisted": "Rendi tutti i messaggi invisibili",
"strip_media": "Rimuovi ogni allegato ai messaggi",
"force_nsfw": "Oscura tutti i messaggi",
"delete_account": "Elimina profilo",
"deactivate_account": "Disattiva profilo",
"activate_account": "Attiva profilo",
"revoke_moderator": "Divesti Moderatore",
"grant_moderator": "Crea Moderatore",
"revoke_admin": "Divesti Amministratore",
"grant_admin": "Crea Amministratore",
"moderation": "Moderazione"
},
"show_repeats": "Mostra condivisioni",
"hide_repeats": "Nascondi condivisioni",
"mute_progress": "Zittisco…",
"unmute_progress": "Riabilito…",
"unmute": "Riabilita",
"block_progress": "Blocco…",
"unblock_progress": "Sblocco…",
"unblock": "Sblocca",
"unsubscribe": "Disdici",
"subscribe": "Abbònati",
"report": "Segnala",
"mention": "Menzioni",
"media": "Media",
"its_you": "Sei tu!",
"hidden": "Nascosto",
"follow_unfollow": "Disconosci",
"follow_again": "Reinvio richiesta?",
"follow_progress": "Richiedo…",
"follow_sent": "Richiesta inviata!",
"favorites": "Preferiti",
"message": "Contatta"
},
"chat": {
"title": "Chat"
},
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Proxy multimedia",
"scope_options": "Opzioni visibilità",
"text_limit": "Lunghezza massima",
"title": "Caratteristiche",
"who_to_follow": "Chi seguire",
"pleroma_chat_messages": "Chiacchiere"
},
"finder": {
"error_fetching_user": "Errore nel recupero dell'utente",
"find_user": "Trova utente"
},
"login": {
"login": "Accedi",
"logout": "Disconnettiti",
"password": "Password",
"placeholder": "es. Lupo Lucio",
"register": "Registrati",
"username": "Nome utente",
"description": "Accedi con OAuth",
"hint": "Accedi per partecipare alla discussione",
"authentication_code": "Codice di autenticazione",
"enter_recovery_code": "Inserisci un codice di recupero",
"enter_two_factor_code": "Inserisci un codice two-factor",
"recovery_code": "Codice di recupero",
"heading": {
"totp": "Autenticazione two-factor",
"recovery": "Recupero two-factor"
}
},
"post_status": {
"account_not_locked_warning": "Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi riservati ai tuoi seguaci.",
"account_not_locked_warning_link": "protetto",
"attachments_sensitive": "Nascondi gli allegati",
"content_type": {
"text/plain": "Testo normale",
"text/bbcode": "BBCode",
"text/markdown": "Markdown",
"text/html": "HTML"
},
"content_warning": "Oggetto (facoltativo)",
"default": "Sono appena atterrato a Fiumicino.",
"direct_warning": "Questo post sarà visibile solo dagli utenti menzionati.",
"posting": "Sto pubblicando",
"scope": {
"direct": "Diretto - Visibile solo agli utenti menzionati",
"private": "Solo per seguaci - Visibile solo dai tuoi seguaci",
"public": "Pubblico - Visibile sulla sequenza pubblica",
"unlisted": "Non elencato - Non visibile sulla sequenza pubblica"
},
"scope_notice": {
"unlisted": "Questo messaggio non sarà visibile sulla sequenza locale né su quella pubblica",
"private": "Questo messaggio sarà visibile solo ai tuoi seguaci",
"public": "Questo messaggio sarà visibile a tutti"
},
"direct_warning_to_first_only": "Questo messaggio sarà visibile solo agli utenti menzionati all'inizio.",
"direct_warning_to_all": "Questo messaggio sarà visibile a tutti i menzionati.",
"new_status": "Nuovo messaggio",
"empty_status_error": "Non puoi pubblicare messaggi vuoti senza allegati",
"preview_empty": "Vuoto",
"preview": "Anteprima",
"media_description_error": "Allegati non caricati, riprova",
"media_description": "Descrizione allegati"
},
"registration": {
"bio": "Introduzione",
"email": "Email",
"fullname": "Nome visualizzato",
"password_confirm": "Conferma password",
"registration": "Registrazione",
"token": "Codice d'invito",
"validations": {
"password_confirmation_match": "dovrebbe essere uguale alla password",
"password_confirmation_required": "non può essere vuoto",
"password_required": "non può essere vuoto",
"email_required": "non può essere vuoto",
"fullname_required": "non può essere vuoto",
"username_required": "non può essere vuoto"
},
"bio_placeholder": "es.\nCiao, sono Lupo Lucio.\nSono un lupo fantastico che vive nel Fantabosco. Forse mi hai visto alla Melevisione.",
"fullname_placeholder": "es. Lupo Lucio",
"username_placeholder": "es. mister_wolf",
"new_captcha": "Clicca l'immagine per avere un altro captcha",
"captcha": "CAPTCHA"
},
"user_profile": {
"timeline_title": "Sequenza dell'Utente",
"profile_loading_error": "Spiacente, c'è stato un errore nel caricamento del profilo.",
"profile_does_not_exist": "Spiacente, questo profilo non esiste."
},
"who_to_follow": {
"more": "Altro",
"who_to_follow": "Chi seguire"
},
"about": {
"mrf": {
"federation": "Federazione",
"keyword": {
"reject": "Rifiuta",
"replace": "Sostituisci",
"is_replaced_by": "→",
"keyword_policies": "Regole per parole chiave",
"ftl_removal": "Rimozione dalla sequenza globale"
},
"simple": {
"reject": "Rifiuta",
"accept": "Accetta",
"simple_policies": "Regole specifiche alla stanza",
"accept_desc": "Questa stanza accetta messaggi solo dalle seguenti stanze:",
"reject_desc": "Questa stanza non accetterà messaggi dalle stanze seguenti:",
"quarantine": "Quarantena",
"quarantine_desc": "Questa stanza inoltrerà solo messaggi pubblici alle seguenti stanze:",
"ftl_removal": "Rimozione dalla sequenza globale",
"ftl_removal_desc": "Questa stanza rimuove le seguenti stanze dalla sequenza globale:",
"media_removal": "Rimozione multimedia",
"media_removal_desc": "Questa istanza rimuove gli allegati dalle seguenti stanze:",
"media_nsfw": "Allegati oscurati forzatamente",
"media_nsfw_desc": "Questa stanza oscura gli allegati dei messaggi provenienti da queste stanze:"
},
"mrf_policies": "Regole RM abilitate",
"mrf_policies_desc": "Le regole RM cambiano il comportamento federativo della stanza. Vigono le seguenti regole:"
},
"staff": "Equipaggio"
},
"domain_mute_card": {
"mute": "Zittisci",
"mute_progress": "Zittisco…",
"unmute": "Ascolta",
"unmute_progress": "Procedo…"
},
"exporter": {
"export": "Esporta",
"processing": "In elaborazione, il tuo file sarà scaricabile a breve"
},
"image_cropper": {
"crop_picture": "Ritaglia immagine",
"save": "Salva",
"save_without_cropping": "Salva senza ritagliare",
"cancel": "Annulla"
},
"importer": {
"submit": "Invia",
"success": "Importato.",
"error": "L'importazione non è andata a buon fine."
},
"media_modal": {
"previous": "Precedente",
"next": "Prossimo"
},
"polls": {
"add_poll": "Sondaggio",
"add_option": "Alternativa",
"option": "Opzione",
"votes": "voti",
"vote": "Vota",
"type": "Tipo di sondaggio",
"single_choice": "Scelta singola",
"multiple_choices": "Scelta multipla",
"expiry": "Scadenza",
"expires_in": "Scade fra {0}",
"expired": "Scaduto {0} fa",
"not_enough_options": "Aggiungi altre risposte"
},
"interactions": {
"favs_repeats": "Condivisi e preferiti",
"load_older": "Carica vecchie interazioni",
"moves": "Utenti migrati",
"follows": "Nuovi seguìti"
},
"emoji": {
"load_all": "Carico tutti i {emojiAmount} emoji",
"load_all_hint": "Primi {saneAmount} emoji caricati, caricarli tutti potrebbe causare rallentamenti.",
"unicode": "Emoji Unicode",
"custom": "Emoji personale",
"add_emoji": "Inserisci Emoji",
"search_emoji": "Cerca un emoji",
"keep_open": "Tieni aperto il menù",
"emoji": "Emoji",
"stickers": "Adesivi"
},
"selectable_list": {
"select_all": "Seleziona tutto"
},
"remote_user_resolver": {
"error": "Non trovato.",
"searching_for": "Cerco",
"remote_user_resolver": "Cerca utenti remoti"
},
"errors": {
"storage_unavailable": "Pleroma non ha potuto accedere ai dati del tuo browser. Le tue credenziali o le tue impostazioni locali non potranno essere salvate e potresti incontrare strani errori. Prova ad abilitare i cookie."
},
"status": {
"pinned": "Intestato",
"unpin": "De-intesta",
"pin": "Intesta al profilo",
"delete": "Elimina messaggio",
"repeats": "Condivisi",
"favorites": "Preferiti",
"hide_content": "Nascondi contenuti",
"show_content": "Mostra contenuti",
"hide_full_subject": "Nascondi intero oggetto",
"show_full_subject": "Mostra intero oggetto",
"thread_muted_and_words": ", contiene:",
"thread_muted": "Discussione zittita",
"copy_link": "Copia collegamento",
"status_unavailable": "Messaggio non disponibile",
"unmute_conversation": "Riabilita conversazione",
"mute_conversation": "Zittisci conversazione",
"replies_list": "Risposte:",
"reply_to": "Rispondi a",
"delete_confirm": "Vuoi veramente eliminare questo messaggio?",
"unbookmark": "Rimuovi segnalibro",
"bookmark": "Aggiungi segnalibro"
},
"time": {
"years_short": "{0}a",
"year_short": "{0}a",
"years": "{0} anni",
"year": "{0} anno",
"weeks_short": "{0}set",
"week_short": "{0}set",
"seconds_short": "{0}sec",
"second_short": "{0}sec",
"weeks": "{0} settimane",
"week": "{0} settimana",
"seconds": "{0} secondi",
"second": "{0} secondo",
"now_short": "ora",
"now": "adesso",
"months_short": "{0}me",
"month_short": "{0}me",
"months": "{0} mesi",
"month": "{0} mese",
"minutes_short": "{0}min",
"minute_short": "{0}min",
"minutes": "{0} minuti",
"minute": "{0} minuto",
"in_past": "{0} fa",
"in_future": "fra {0}",
"hours_short": "{0}h",
"days_short": "{0}g",
"hour_short": "{0}h",
"hours": "{0} ore",
"hour": "{0} ora",
"day_short": "{0}g",
"days": "{0} giorni",
"day": "{0} giorno"
},
"user_reporting": {
"title": "Segnalo {0}",
"additional_comments": "Osservazioni accessorie",
"generic_error": "C'è stato un errore nell'elaborazione della tua richiesta.",
"submit": "Invia",
"forward_to": "Inoltra a {0}",
"forward_description": "Il profilo appartiene ad un'altra stanza. Inviare la segnalazione anche a quella?",
"add_comment_description": "La segnalazione sarà inviata ai moderatori della tua stanza. Puoi motivarla qui sotto:"
},
"password_reset": {
"password_reset_required_but_mailer_is_disabled": "Devi reimpostare la tua password, ma non puoi farlo. Contatta il tuo amministratore.",
"password_reset_required": "Devi reimpostare la tua password per poter continuare.",
"password_reset_disabled": "Non puoi azzerare la tua password. Contatta il tuo amministratore.",
"too_many_requests": "Hai raggiunto il numero massimo di tentativi, riprova più tardi.",
- "not_found": "Non ho trovato questa email o nome utente.",
"return_home": "Torna alla pagina principale",
"check_email": "Controlla la tua posta elettronica.",
"placeholder": "La tua email o nome utente",
"instruction": "Inserisci il tuo indirizzo email o il tuo nome utente. Ti invieremo un collegamento per reimpostare la tua password.",
"password_reset": "Azzera password",
"forgot_password": "Password dimenticata?"
},
"search": {
"no_results": "Nessun risultato",
"people_talking": "{count} partecipanti",
"person_talking": "{count} partecipante",
"hashtags": "Etichette",
"people": "Utenti"
},
"upload": {
"file_size_units": {
"TiB": "TiB",
"GiB": "GiB",
"MiB": "MiB",
"KiB": "KiB",
"B": "B"
},
"error": {
"default": "Riprova in seguito",
"file_too_big": "File troppo pesante [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"base": "Caricamento fallito."
}
},
"tool_tip": {
"bookmark": "Aggiungi segnalibro",
"reject_follow_request": "Rifiuta seguace",
"accept_follow_request": "Accetta seguace",
"user_settings": "Impostazioni utente",
"add_reaction": "Reagisci",
"favorite": "Gradisci",
"reply": "Rispondi",
"repeat": "Ripeti",
"media_upload": "Carica allegati"
},
"display_date": {
"today": "Oggi"
},
"file_type": {
"file": "File",
"image": "Immagine",
"video": "Video",
"audio": "Audio"
},
"chats": {
"empty_chat_list_placeholder": "Non hai conversazioni. Contatta qualcuno!",
"error_sending_message": "Errore. Il messaggio non è stato inviato.",
"error_loading_chat": "Errore. La conversazione non è stata caricata.",
"delete_confirm": "Vuoi veramente eliminare questo messaggio?",
"more": "Altro",
"empty_message_error": "Non puoi inviare messaggi vuoti",
"new": "Nuova conversazione",
"chats": "Conversazioni",
"delete": "Elimina",
"message_user": "Contatta {nickname}",
"you": "Tu:"
},
"shoutbox": {
"title": "Graffiti"
}
}
diff --git a/src/i18n/ja_easy.json b/src/i18n/ja_easy.json
index 255648e75c..991f3762f2 100644
--- a/src/i18n/ja_easy.json
+++ b/src/i18n/ja_easy.json
@@ -1,675 +1,674 @@
{
"about": {
"mrf": {
"federation": "フェデレーション",
"mrf_policies": "ゆうこうなMRFポリシー",
"mrf_policies_desc": "MRFポリシーは、このインスタンスのフェデレーションのふるまいを、いじります。これらのMRFポリシーがゆうこうになっています:",
"simple": {
"simple_policies": "インスタンスのポリシー",
"accept": "うけいれ",
"accept_desc": "このインスンスは、これらのインスタンスからのメッセージのみをうけいれます:",
"reject": "おことわり",
"reject_desc": "このインスタンスは、これらのインスタンスからのメッセージをうけいれません:",
"quarantine": "けんえき",
"quarantine_desc": "このインスタンスは、これらのインスタンスに、パブリックなとうこうのみを、おくります:",
"ftl_removal": "「つながっているすべてのネットワーク」タイムラインからのぞく",
"ftl_removal_desc": "このインスタンスは、つながっているすべてのネットワーク」タイムラインから、これらのインスタンスを、とりのぞきます:",
"media_removal": "メディアをのぞく",
"media_removal_desc": "このインスタンスは、これらのインスタンスからおくられてきたメディアを、とりのぞきます:",
"media_nsfw": "メディアをすべてセンシティブにする",
"media_nsfw_desc": "このインスタンスは、これらのインスタンスからおくられてきたメディアを、すべて、センシティブにマークします:"
}
},
"staff": "スタッフ"
},
"chat": {
"title": "チャット"
},
"exporter": {
"export": "エクスポート",
"processing": "おまちください。しばらくすると、あなたのファイルをダウンロードするように、メッセージがでます"
},
"features_panel": {
"chat": "チャット",
"gopher": "Gopher",
"media_proxy": "メディアプロクシ",
"scope_options": "こうかいはんいせんたく",
"text_limit": "もじのかず",
"title": "ゆうこうなきのう",
"who_to_follow": "おすすめユーザー"
},
"finder": {
"error_fetching_user": "ユーザーけんさくがエラーになりました",
"find_user": "ユーザーをさがす"
},
"general": {
"apply": "てきよう",
"submit": "そうしん",
"more": "つづき",
"generic_error": "エラーになりました",
"optional": "かかなくてもよい",
"show_more": "つづきをみる",
"show_less": "たたむ",
"cancel": "キャンセル",
"disable": "なし",
"enable": "あり",
"confirm": "たしかめる",
"verify": "たしかめる"
},
"image_cropper": {
"crop_picture": "がぞうをきりぬく",
"save": "セーブ",
"save_without_cropping": "きりぬかずにセーブ",
"cancel": "キャンセル"
},
"importer": {
"submit": "そうしん",
"success": "インポートできました。",
"error": "インポートがエラーになりました。"
},
"login": {
"login": "ログイン",
"description": "OAuthでログイン",
"logout": "ログアウト",
"password": "パスワード",
"placeholder": "れい: lain",
"register": "はじめる",
"username": "ユーザーめい",
"hint": "はなしあいにくわわるには、ログインしてください",
"authentication_code": "にんしょうコード",
"enter_recovery_code": "リカバリーコードをいれてください",
"enter_two_factor_code": "2-ファクターコードをいれてください",
"recovery_code": "リカバリーコード",
"heading": {
"totp": "2-ファクターにんしょう",
"recovery": "2-ファクターリカバリー"
}
},
"media_modal": {
"previous": "まえ",
"next": "つぎ"
},
"nav": {
"about": "これはなに?",
"administration": "アドミニストレーション",
"back": "もどる",
"chat": "ローカルチャット",
"friend_requests": "フォローリクエスト",
"mentions": "メンション",
"interactions": "やりとり",
"dms": "ダイレクトメッセージ",
"public_tl": "パブリックタイムライン",
"timeline": "タイムライン",
"twkn": "つながっているすべてのネットワーク",
"user_search": "ユーザーをさがす",
"search": "さがす",
"who_to_follow": "おすすめユーザー",
"preferences": "せってい"
},
"notifications": {
"broken_favorite": "ステータスがみつかりません。さがしています…",
"favorited_you": "あなたのステータスがおきにいりされました",
"followed_you": "フォローされました",
"load_older": "ふるいつうちをみる",
"notifications": "つうち",
"read": "よんだ!",
"repeated_you": "あなたのステータスがリピートされました",
"no_more_notifications": "つうちはありません"
},
"polls": {
"add_poll": "いれふだをはじめる",
"add_option": "オプションをふやす",
"option": "オプション",
"votes": "いれふだ",
"vote": "ふだをいれる",
"type": "いれふだのかた",
"single_choice": "ひとつえらぶ",
"multiple_choices": "いくつでもえらべる",
"expiry": "いれふだのながさ",
"expires_in": "いれふだは {0} で、おわります",
"expired": "いれふだは {0} まえに、おわりました",
"not_enough_options": "ユニークなオプションが、たりません"
},
"emoji": {
"stickers": "ステッカー",
"emoji": "えもじ",
"keep_open": "ピッカーをあけたままにする",
"search_emoji": "えもじをさがす",
"add_emoji": "えもじをうちこむ",
"custom": "カスタムえもじ",
"unicode": "ユニコードえもじ",
"load_all_hint": "はじめの {saneAmount} このえもじだけがロードされています。すべてのえもじをロードすると、パフォーマンスがわるくなるかもしれません。",
"load_all": "すべてのえもじをロード ({emojiAmount} こあります)"
},
"stickers": {
"add_sticker": "ステッカーをふやす"
},
"interactions": {
"favs_repeats": "リピートとおきにいり",
"follows": "あたらしいフォロー",
"load_older": "ふるいやりとりをみる"
},
"post_status": {
"new_status": "とうこうする",
"account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。",
"account_not_locked_warning_link": "ロックされたアカウント",
"attachments_sensitive": "ファイルをNSFWにする",
"content_type": {
"text/plain": "プレーンテキスト",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "せつめい (かかなくてもよい)",
"default": "はねだくうこうに、つきました。",
"direct_warning_to_all": "このとうこうは、メンションされたすべてのユーザーが、みることができます。",
"direct_warning_to_first_only": "このとうこうは、メッセージのはじめでメンションされたユーザーだけが、みることができます。",
"direct_warning": "このステータスは、メンションされたユーザーだけが、よむことができます。",
"posting": "とうこう",
"scope_notice": {
"public": "このとうこうは、だれでもみることができます",
"private": "このとうこうは、あなたのフォロワーだけが、みることができます",
"unlisted": "このとうこうは、パブリックタイムラインと、つながっているすべてのネットワークでは、みることができません"
},
"scope": {
"direct": "ダイレクト: メンションされたユーザーのみにとどきます",
"private": "フォロワーげんてい: フォロワーのみにとどきます",
"public": "パブリック: パブリックタイムラインにとどきます",
"unlisted": "アンリステッド: パブリックタイムラインにとどきません"
}
},
"registration": {
"bio": "プロフィール",
"email": "Eメール",
"fullname": "スクリーンネーム",
"password_confirm": "パスワードのかくにん",
"registration": "はじめる",
"token": "しょうたいトークン",
"captcha": "CAPTCHA",
"new_captcha": "もじがよめないときは、がぞうをクリックすると、あたらしいがぞうになります",
"username_placeholder": "れい: lain",
"fullname_placeholder": "れい: いわくら れいん",
"bio_placeholder": "れい:\nごきげんよう。わたしはれいん。\nわたしはアニメのおんなのこで、にほんのベッドタウンにすんでいます。ワイヤードで、わたしにあったことが、あるかもしれませんね。",
"validations": {
"username_required": "なにかかいてください",
"fullname_required": "なにかかいてください",
"email_required": "なにかかいてください",
"password_required": "なにかかいてください",
"password_confirmation_required": "なにかかいてください",
"password_confirmation_match": "パスワードがちがいます"
}
},
"remote_user_resolver": {
"remote_user_resolver": "リモートユーザーリゾルバー",
"searching_for": "さがしています:",
"error": "みつかりませんでした。"
},
"selectable_list": {
"select_all": "すべてえらぶ"
},
"settings": {
"app_name": "アプリのなまえ",
"security": "セキュリティ",
"enter_current_password_to_confirm": "あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください",
"mfa": {
"otp": "OTP",
"setup_otp": "OTPをつくる",
"wait_pre_setup_otp": "OTPをよういしています",
"confirm_and_enable": "OTPをたしかめて、ゆうこうにする",
"title": "2-ファクターにんしょう",
"generate_new_recovery_codes": "あたらしいリカバリーコードをつくる",
"warning_of_generate_new_codes": "あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。",
"recovery_codes": "リカバリーコード。",
"waiting_a_recovery_codes": "バックアップコードをうけとっています…",
"recovery_codes_warning": "コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。",
"authentication_methods": "にんしょうメソッド",
"scan": {
"title": "スキャン",
"desc": "あなたの2-ファクターアプリをつかって、このQRコードをスキャンするか、テキストキーをうちこんでください:",
"secret_code": "キー"
},
"verify": {
"desc": "2-ファクターにんしょうをつかうには、あなたの2-ファクターアプリのコードをいれてください:"
}
},
"attachmentRadius": "ファイル",
"attachments": "ファイル",
"avatar": "アバター",
"avatarAltRadius": "つうちのアバター",
"avatarRadius": "アバター",
"background": "バックグラウンド",
"bio": "プロフィール",
"block_export": "ブロックのエクスポート",
"block_export_button": "ブロックをCSVファイルにエクスポート",
"block_import": "ブロックのインポート",
"block_import_error": "ブロックのインポートがエラーになりました",
"blocks_imported": "ブロックをインポートしました! じっさいにブロックするまでには、もうしばらくかかります。",
"blocks_tab": "ブロック",
"btnRadius": "ボタン",
"cBlue": "リプライとフォロー",
"cGreen": "リピート",
"cOrange": "おきにいり",
"cRed": "キャンセル",
"change_email": "メールアドレスをかえる",
"change_email_error": "メールアドレスをかえようとしましたが、なにかがおかしいです。",
"changed_email": "メールアドレスをかえることができました!",
"change_password": "パスワードをかえる",
"change_password_error": "パスワードをかえることが、できなかったかもしれません。",
"changed_password": "パスワードが、かわりました!",
"collapse_subject": "せつめいのあるとうこうをたたむ",
"composing": "とうこう",
"confirm_new_password": "あたらしいパスワードのかくにん",
"current_avatar": "いまのアバター",
"current_password": "いまのパスワード",
"current_profile_banner": "いまのプロフィールバナー",
"data_import_export_tab": "インポートとエクスポート",
"default_vis": "デフォルトのこうかいはんい",
"delete_account": "アカウントをけす",
"delete_account_description": "あなたのアカウントとメッセージが、きえます。",
"delete_account_error": "アカウントをけすことが、できなかったかもしれません。インスタンスのアドミニストレーターに、おといあわせください。",
"delete_account_instructions": "ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。",
"discoverable": "けんさくなどのサービスで、このアカウントをみつけてもよい",
"avatar_size_instruction": "アバターのおおきさは、150×150ピクセルか、それよりもおおきくするといいです。",
"pad_emoji": "えもじをピッカーでえらんだとき、えもじのまわりにスペースをいれる",
"export_theme": "セーブ",
"filtering": "フィルタリング",
"filtering_explanation": "これらのことばをふくむすべてのものがミュートされます。1ぎょうに1つのことばをかいてください",
"follow_export": "フォローのエクスポート",
"follow_export_button": "エクスポート",
"follow_export_processing": "おまちください。まもなくファイルをダウンロードできます。",
"follow_import": "フォローインポート",
"follow_import_error": "フォローのインポートがエラーになりました",
"follows_imported": "フォローがインポートされました! すこしじかんがかかるかもしれません。",
"foreground": "フォアグラウンド",
"general": "ぜんぱん",
"hide_attachments_in_convo": "スレッドのファイルをかくす",
"hide_attachments_in_tl": "タイムラインのファイルをかくす",
"hide_muted_posts": "ミュートしたユーザーのとうこうをかくす",
"max_thumbnails": "ひとつのとうこうにいれられるサムネイルのかず",
"hide_isp": "インスタンススペシフィックパネルをかくす",
"preload_images": "がぞうをさきよみする",
"use_one_click_nsfw": "NSFWなファイルを1クリックでひらく",
"hide_post_stats": "とうこうのとうけいをかくす (れい: おきにいりのかず)",
"hide_user_stats": "ユーザーのとうけいをかくす (れい: フォロワーのかず)",
"hide_filtered_statuses": "フィルターされたとうこうをかくす",
"import_blocks_from_a_csv_file": "CSVファイルからブロックをインポートする",
"import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする",
"import_theme": "ロード",
"inputRadius": "インプットフィールド",
"checkboxRadius": "チェックボックス",
"instance_default": "(デフォルト: {value})",
"instance_default_simple": "(デフォルト)",
"interface": "インターフェース",
"interfaceLanguage": "インターフェースのことば",
"invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマはへんこうされませんでした。",
"limited_availability": "あなたのブラウザではできません",
"links": "リンク",
"lock_account_description": "あなたがみとめたひとだけ、あなたのアカウントをフォローできる",
"loop_video": "ビデオをくりかえす",
"loop_video_silent_only": "おとのないビデオだけくりかえす",
"mutes_tab": "ミュート",
"play_videos_in_modal": "ビデオをメディアビューアーでみる",
"use_contain_fit": "がぞうのサムネイルを、きりぬかない",
"name": "なまえ",
"name_bio": "なまえとプロフィール",
"new_email": "あたらしいメールアドレス",
"new_password": "あたらしいパスワード",
"notification_visibility": "ひょうじするつうち",
"notification_visibility_follows": "フォロー",
"notification_visibility_likes": "おきにいり",
"notification_visibility_mentions": "メンション",
"notification_visibility_repeats": "リピート",
"no_rich_text_description": "リッチテキストをつかわない",
"no_blocks": "ブロックしていません",
"no_mutes": "ミュートしていません",
"hide_follows_description": "フォローしているひとをみせない",
"hide_followers_description": "フォロワーをみせない",
"hide_follows_count_description": "フォローしているひとのかずをみせない",
"hide_followers_count_description": "フォロワーのかずをみせない",
"show_admin_badge": "アドミンのしるしをみせる",
"show_moderator_badge": "モデレーターのしるしをみせる",
"nsfw_clickthrough": "NSFWなファイルをかくす",
"oauth_tokens": "OAuthトークン",
"token": "トークン",
"refresh_token": "トークンをリフレッシュ",
"valid_until": "おわりのとき",
"revoke_token": "とりけす",
"panelRadius": "パネル",
"pause_on_unfocused": "タブにフォーカスがないときストリーミングをとめる",
"presets": "プリセット",
"profile_background": "プロフィールのバックグラウンド",
"profile_banner": "プロフィールバナー",
"profile_tab": "プロフィール",
"radii_help": "インターフェースのまるさをせっていする",
"replies_in_timeline": "タイムラインのリプライ",
"reply_visibility_all": "すべてのリプライをみる",
"reply_visibility_following": "わたしにあてられたリプライと、フォローしているひとからのリプライをみる",
"reply_visibility_self": "わたしにあてられたリプライをみる",
"autohide_floating_post_button": "あたらしいとうこうのボタンを、じどうてきにかくす (モバイル)",
"saving_err": "せっていをセーブできませんでした",
"saving_ok": "せっていをセーブしました",
"search_user_to_block": "ブロックしたいひとを、ここでけんさくできます",
"search_user_to_mute": "ミュートしたいひとを、ここでけんさくできます",
"security_tab": "セキュリティ",
"scope_copy": "リプライするとき、こうかいはんいをコピーする (DMのこうかいはんいは、つねにコピーされます)",
"minimal_scopes_mode": "こうかいはんいせんたくオプションを、ちいさくする",
"set_new_avatar": "あたらしいアバターをせっていする",
"set_new_profile_background": "あたらしいプロフィールのバックグラウンドをせっていする",
"set_new_profile_banner": "あたらしいプロフィールバナーを設定する",
"settings": "せってい",
"subject_input_always_show": "サブジェクトフィールドをいつでもひょうじする",
"subject_line_behavior": "リプライするときサブジェクトをコピーする",
"subject_line_email": "メールふう: \"re: サブジェクト\"",
"subject_line_mastodon": "マストドンふう: そのままコピー",
"subject_line_noop": "コピーしない",
"post_status_content_type": "とうこうのコンテントタイプ",
"stop_gifs": "カーソルをかさねたとき、GIFをうごかす",
"streaming": "うえまでスクロールしたとき、じどうてきにストリーミングする",
"text": "もじ",
"theme": "テーマ",
"theme_help": "カラーテーマをカスタマイズできます。",
"theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、いろと、とうめいどを、オーバーライドできます。「すべてクリア」ボタンをおすと、すべてのオーバーライドを、やめます。",
"theme_help_v2_2": "バックグラウンドとテキストのコントラストをあらわすアイコンがあります。マウスをホバーすると、くわしいせつめいがでます。とうめいないろをつかっているときは、もっともわるいばあいのコントラストがしめされます。",
"upload_a_photo": "がぞうをアップロード",
"tooltipRadius": "ツールチップとアラート",
"user_settings": "ユーザーせってい",
"values": {
"false": "いいえ",
"true": "はい"
},
"fun": "おたのしみ",
"greentext": "ミームやじるし",
"notifications": "つうち",
"notification_mutes": "あるユーザーからのつうちをとめるには、ミュートしてください。",
"notification_blocks": "ブロックしているユーザーからのつうちは、すべてとまります。",
"enable_web_push_notifications": "ウェブプッシュつうちをゆるす",
"style": {
"switcher": {
"keep_color": "いろをのこす",
"keep_shadows": "かげをのこす",
"keep_opacity": "とうめいどをのこす",
"keep_roundness": "まるさをのこす",
"keep_fonts": "フォントをのこす",
"save_load_hint": "「のこす」オプションをONにすると、テーマをえらんだときとロードしたとき、いまのせっていをのこします。また、テーマをエクスポートするとき、これらのオプションをストアします。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべてのせっていをセーブします。",
"reset": "リセット",
"clear_all": "すべてクリア",
"clear_opacity": "とうめいどをクリア"
},
"common": {
"color": "いろ",
"opacity": "とうめいど",
"contrast": {
"hint": "コントラストは {ratio} です。{level}。({context})",
"level": {
"aa": "AAレベルガイドライン (ミニマル) をみたします",
"aaa": "AAAレベルガイドライン (レコメンデッド) をみたします",
"bad": "ガイドラインをみたしません"
},
"context": {
"18pt": "おおきい (18ポイントいじょう) テキスト",
"text": "テキスト"
}
}
},
"common_colors": {
"_tab_label": "きょうつう",
"main": "きょうつうのいろ",
"foreground_hint": "「くわしく」タブで、もっとこまかくせっていできます",
"rgbo": "アイコンとアクセントとバッジ"
},
"advanced_colors": {
"_tab_label": "くわしく",
"alert": "アラートのバックグラウンド",
"alert_error": "エラー",
"alert_warning": "けいこく",
"badge": "バッジのバックグラウンド",
"badge_notification": "つうち",
"panel_header": "パネルヘッダー",
"top_bar": "トップバー",
"borders": "さかいめ",
"buttons": "ボタン",
"inputs": "インプットフィールド",
"faint_text": "うすいテキスト"
},
"radii": {
"_tab_label": "まるさ"
},
"shadows": {
"_tab_label": "ひかりとかげ",
"component": "コンポーネント",
"override": "オーバーライド",
"shadow_id": "かげ #{value}",
"blur": "ぼかし",
"spread": "ひろがり",
"inset": "うちがわ",
"hint": "かげのせっていでは、いろのあたいとして --variable をつかうことができます。これはCSS3へんすうです。ただし、とうめいどのせっていは、きかなくなります。",
"filter_hint": {
"always_drop_shadow": "ブラウザーがサポートしていれば、つねに {0} がつかわれます。",
"drop_shadow_syntax": "{0} は、{1} パラメーターと {2} キーワードをサポートしていません。",
"avatar_inset": "うちがわのかげと、そとがわのかげを、いっしょにつかうと、とうめいなアバターが、へんなみためになります。",
"spread_zero": "ひろがりが 0 よりもおおきなかげは、0 とおなじです",
"inset_classic": "うちがわのかげは {0} をつかいます"
},
"components": {
"panel": "パネル",
"panelHeader": "パネルヘッダー",
"topBar": "トップバー",
"avatar": "ユーザーアバター (プロフィール)",
"avatarStatus": "ユーザーアバター (とうこう)",
"popup": "ポップアップとツールチップ",
"button": "ボタン",
"buttonHover": "ボタン (ホバー)",
"buttonPressed": "ボタン (おされているとき)",
"buttonPressedHover": "ボタン (ホバー、かつ、おされているとき)",
"input": "インプットフィールド"
}
},
"fonts": {
"_tab_label": "フォント",
"help": "「カスタム」をえらんだときは、システムにあるフォントのなまえを、ただしくにゅうりょくしてください。",
"components": {
"interface": "インターフェース",
"input": "インプットフィールド",
"post": "とうこう",
"postCode": "モノスペース (とうこうがリッチテキストであるとき)"
},
"family": "フォントめい",
"size": "おおきさ (px)",
"weight": "ふとさ",
"custom": "カスタム"
},
"preview": {
"header": "プレビュー",
"content": "ほんぶん",
"error": "エラーのれい",
"button": "ボタン",
"text": "これは{0}と{1}のれいです",
"mono": "monospace",
"input": "はねだくうこうに、つきました。",
"faint_link": "とてもたすけになるマニュアル",
"fine_print": "わたしたちの{0}を、よまないでください!",
"header_faint": "エラーではありません",
"checkbox": "りようきやくを、よみました",
"link": "ハイパーリンク"
}
},
"version": {
"title": "バージョン",
"backend_version": "バックエンドのバージョン",
"frontend_version": "フロントエンドのバージョン"
}
},
"time": {
"day": "{0}日",
"days": "{0}日",
"day_short": "{0}日",
"days_short": "{0}日",
"hour": "{0}時間",
"hours": "{0}時間",
"hour_short": "{0}時間",
"hours_short": "{0}時間",
"in_future": "{0}で",
"in_past": "{0}前",
"minute": "{0}分",
"minutes": "{0}分",
"minute_short": "{0}分",
"minutes_short": "{0}分",
"month": "{0}ヶ月前",
"months": "{0}ヶ月前",
"month_short": "{0}ヶ月前",
"months_short": "{0}ヶ月前",
"now": "たった今",
"now_short": "たった今",
"second": "{0}秒",
"seconds": "{0}秒",
"second_short": "{0}秒",
"seconds_short": "{0}秒",
"week": "{0}週間",
"weeks": "{0}週間",
"week_short": "{0}週間",
"weeks_short": "{0}週間",
"year": "{0}年",
"years": "{0}年",
"year_short": "{0}年",
"years_short": "{0}年"
},
"timeline": {
"collapse": "たたむ",
"conversation": "スレッド",
"error_fetching": "よみこみがエラーになりました",
"load_older": "ふるいステータス",
"no_retweet_hint": "とうこうを「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります",
"repeated": "リピート",
"show_new": "よみこみ",
"up_to_date": "さいしん",
"no_more_statuses": "これでおわりです",
"no_statuses": "ありません"
},
"status": {
"favorites": "おきにいり",
"repeats": "リピート",
"delete": "ステータスをけす",
"pin": "プロフィールにピンどめする",
"unpin": "プロフィールにピンどめするのをやめる",
"pinned": "ピンどめ",
"delete_confirm": "ほんとうに、このステータスを、けしてもいいですか?",
"reply_to": "へんしん:",
"replies_list": "へんしん:",
"mute_conversation": "スレッドをミュートする",
"unmute_conversation": "スレッドをミュートするのをやめる"
},
"user_card": {
"approve": "うけいれ",
"block": "ブロック",
"blocked": "ブロックしています!",
"deny": "おことわり",
"favorites": "おきにいり",
"follow": "フォロー",
"follow_sent": "リクエストを、おくりました!",
"follow_progress": "リクエストしています…",
"follow_again": "ふたたびリクエストをおくりますか?",
"follow_unfollow": "フォローをやめる",
"followees": "フォロー",
"followers": "フォロワー",
"following": "フォローしています!",
"follows_you": "フォローされました!",
"hidden": "かくされています",
"its_you": "これはあなたです!",
"media": "メディア",
"mention": "メンション",
"mute": "ミュート",
"muted": "ミュートしています!",
"per_day": "/日",
"remote_follow": "リモートフォロー",
"report": "つうほう",
"statuses": "ステータス",
"subscribe": "サブスクライブ",
"unsubscribe": "サブスクライブをやめる",
"unblock": "ブロックをやめる",
"unblock_progress": "ブロックをとりけしています…",
"block_progress": "ブロックしています…",
"unmute": "ミュートをやめる",
"unmute_progress": "ミュートをとりけしています…",
"mute_progress": "ミュートしています…",
"hide_repeats": "リピートをかくす",
"show_repeats": "リピートをみる",
"admin_menu": {
"moderation": "モデレーション",
"grant_admin": "アドミンにする",
"revoke_admin": "アドミンをやめさせる",
"grant_moderator": "モデレーターにする",
"revoke_moderator": "モデレーターをやめさせる",
"activate_account": "アカウントをアクティブにする",
"deactivate_account": "アカウントをアクティブでなくする",
"delete_account": "アカウントをけす",
"force_nsfw": "すべてのとうこうをNSFWにする",
"strip_media": "とうこうからメディアをなくす",
"force_unlisted": "とうこうをアンリステッドにする",
"sandbox": "とうこうをフォロワーのみにする",
"disable_remote_subscription": "ほかのインスタンスからフォローされないようにする",
"disable_any_subscription": "フォローされないようにする",
"quarantine": "ほかのインスタンスのユーザーのとうこうをとめる",
"delete_user": "ユーザーをけす",
"delete_user_confirmation": "あなたは、ほんとうに、きはたしかですか? これは、とりけすことが、できません。"
}
},
"user_profile": {
"timeline_title": "ユーザータイムライン",
"profile_does_not_exist": "ごめんなさい。このプロフィールは、そんざいしません。",
"profile_loading_error": "ごめんなさい。プロフィールのロードがエラーになりました。"
},
"user_reporting": {
"title": "つうほうする: {0}",
"add_comment_description": "このつうほうは、あなたのインスタンスのモデレーターに、おくられます。このアカウントを、つうほうするりゆうを、せつめいすることができます:",
"additional_comments": "ついかのコメント",
"forward_description": "このアカウントは、ほかのインスタンスのものです。そのインスタンスにも、このつうほうのコピーを、おくりますか?",
"forward_to": "コピーをおくる: {0}",
"submit": "そうしん",
"generic_error": "あなたのリクエストをうけつけようとしましたが、エラーになってしまいました。"
},
"who_to_follow": {
"more": "くわしく",
"who_to_follow": "おすすめユーザー"
},
"tool_tip": {
"media_upload": "メディアをアップロード",
"repeat": "リピート",
"reply": "リプライ",
"favorite": "おきにいり",
"user_settings": "ユーザーせってい"
},
"upload": {
"error": {
"base": "アップロードにしっぱいしました。",
"file_too_big": "ファイルがおおきすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]",
"default": "しばらくしてから、ためしてください"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "ひとびと",
"hashtags": "ハッシュタグ",
"person_talking": "{count} にんが、はなしています",
"people_talking": "{count} にんが、はなしています",
"no_results": "みつかりませんでした"
},
"password_reset": {
"forgot_password": "パスワードを、わすれましたか?",
"password_reset": "パスワードリセット",
"instruction": "あなたのメールアドレスかユーザーめいをいれてください。パスワードをリセットするためのリンクをおくります。",
"placeholder": "あなたのメールアドレスかユーザーめい",
"check_email": "パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。",
"return_home": "ホームページにもどる",
- "not_found": "そのメールアドレスまたはユーザーめいを、みつけることができませんでした。",
"too_many_requests": "パスワードリセットを、ためすことが、おおすぎます。しばらくしてから、ためしてください。",
"password_reset_disabled": "このインスタンスでは、パスワードリセットは、できません。インスタンスのアドミニストレーターに、おといあわせください。",
"password_reset_required": "ログインするには、パスワードをリセットしてください。",
"password_reset_required_but_mailer_is_disabled": "あなたはパスワードのリセットがひつようです。しかし、まずいことに、このインスタンスでは、パスワードのリセットができなくなっています。このインスタンスのアドミニストレーターに、おといあわせください。"
}
}
diff --git a/src/i18n/ja_pedantic.json b/src/i18n/ja_pedantic.json
index 07fea45d51..e2de10669d 100644
--- a/src/i18n/ja_pedantic.json
+++ b/src/i18n/ja_pedantic.json
@@ -1,632 +1,631 @@
{
"chat": {
"title": "チャット"
},
"exporter": {
"export": "エクスポート",
"processing": "処理中です。処理が完了すると、ファイルをダウンロードするよう指示があります。"
},
"features_panel": {
"chat": "チャット",
"gopher": "Gopher",
"media_proxy": "メディアプロクシ",
"scope_options": "公開範囲選択",
"text_limit": "文字の数",
"title": "有効な機能",
"who_to_follow": "おすすめユーザー"
},
"finder": {
"error_fetching_user": "ユーザー検索がエラーになりました。",
"find_user": "ユーザーを探す"
},
"general": {
"apply": "適用",
"submit": "送信",
"more": "続き",
"generic_error": "エラーになりました",
"optional": "省略可",
"show_more": "もっと見る",
"show_less": "たたむ",
"cancel": "キャンセル",
"disable": "無効",
"enable": "有効",
"confirm": "確認",
"verify": "検査"
},
"image_cropper": {
"crop_picture": "画像を切り抜く",
"save": "保存",
"save_without_cropping": "切り抜かずに保存",
"cancel": "キャンセル"
},
"importer": {
"submit": "送信",
"success": "正常にインポートされました。",
"error": "このファイルをインポートするとき、エラーが発生しました。"
},
"login": {
"login": "ログイン",
"description": "OAuthでログイン",
"logout": "ログアウト",
"password": "パスワード",
"placeholder": "例: lain",
"register": "登録",
"username": "ユーザー名",
"hint": "会話に加わるには、ログインしてください",
"authentication_code": "認証コード",
"enter_recovery_code": "リカバリーコードを入力してください",
"enter_two_factor_code": "2段階認証コードを入力してください",
"recovery_code": "リカバリーコード",
"heading" : {
"totp" : "2段階認証",
"recovery" : "2段階リカバリー"
}
},
"media_modal": {
"previous": "前",
"next": "次"
},
"nav": {
"about": "このインスタンスについて",
"back": "戻る",
"chat": "ローカルチャット",
"friend_requests": "フォローリクエスト",
"mentions": "通知",
"interactions": "インタラクション",
"dms": "ダイレクトメッセージ",
"public_tl": "パブリックタイムライン",
"timeline": "タイムライン",
"twkn": "接続しているすべてのネットワーク",
"user_search": "ユーザーを探す",
"search": "検索",
"who_to_follow": "おすすめユーザー",
"preferences": "設定"
},
"notifications": {
"broken_favorite": "ステータスが見つかりません。探しています...",
"favorited_you": "あなたのステータスがお気に入りされました",
"followed_you": "フォローされました",
"load_older": "古い通知をみる",
"notifications": "通知",
"read": "読んだ!",
"repeated_you": "あなたのステータスがリピートされました",
"no_more_notifications": "通知はありません"
},
"polls": {
"add_poll": "投票を追加",
"add_option": "選択肢を追加",
"option": "選択肢",
"votes": "票",
"vote": "投票",
"type": "投票の形式",
"single_choice": "択一式",
"multiple_choices": "複数選択式",
"expiry": "投票期間",
"expires_in": "投票は {0} で終了します",
"expired": "投票は {0} 前に終了しました",
"not_enough_options": "相異なる選択肢が不足しています"
},
"emoji": {
"stickers": "ステッカー",
"emoji": "絵文字",
"keep_open": "ピッカーを開いたままにする",
"search_emoji": "絵文字を検索",
"add_emoji": "絵文字を挿入",
"custom": "カスタム絵文字",
"unicode": "Unicode絵文字"
},
"stickers": {
"add_sticker": "ステッカーを追加"
},
"interactions": {
"favs_repeats": "リピートとお気に入り",
"follows": "新しいフォロワー",
"load_older": "古いインタラクションを見る"
},
"post_status": {
"new_status": "投稿する",
"account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、誰でも、フォロワー限定のステータスを読むことができます。",
"account_not_locked_warning_link": "ロックされたアカウント",
"attachments_sensitive": "ファイルをNSFWにする",
"content_type": {
"text/plain": "プレーンテキスト",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "説明 (省略可)",
"default": "羽田空港に着きました。",
"direct_warning_to_all": "この投稿は、メンションされたすべてのユーザーが、見ることができます。",
"direct_warning_to_first_only": "この投稿は、メッセージの冒頭でメンションされたユーザーだけが、見ることができます。",
"direct_warning": "このステータスは、メンションされたユーザーだけが、読むことができます。",
"posting": "投稿",
"scope_notice": {
"public": "この投稿は、誰でも見ることができます",
"private": "この投稿は、あなたのフォロワーだけが、見ることができます。",
"unlisted": "この投稿は、パブリックタイムラインと、接続しているすべてのネットワークには、表示されません。"
},
"scope": {
"direct": "ダイレクト: メンションされたユーザーのみに届きます。",
"private": "フォロワーげんてい: フォロワーのみに届きます。",
"public": "パブリック: パブリックタイムラインに届きます。",
"unlisted": "アンリステッド: パブリックタイムラインに届きません。"
}
},
"registration": {
"bio": "プロフィール",
"email": "Eメール",
"fullname": "スクリーンネーム",
"password_confirm": "パスワードの確認",
"registration": "登録",
"token": "招待トークン",
"captcha": "CAPTCHA",
"new_captcha": "文字が読めないときは、画像をクリックすると、新しい画像になります",
"username_placeholder": "例: lain",
"fullname_placeholder": "例: 岩倉玲音",
"bio_placeholder": "例:\nこんにちは。私は玲音。\n私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。",
"validations": {
"username_required": "必須",
"fullname_required": "必須",
"email_required": "必須",
"password_required": "必須",
"password_confirmation_required": "必須",
"password_confirmation_match": "パスワードが違います"
}
},
"selectable_list": {
"select_all": "すべて選択"
},
"settings": {
"app_name": "アプリの名称",
"security": "セキュリティ",
"enter_current_password_to_confirm": "あなたのアイデンティティを証明するため、現在のパスワードを入力してください",
"mfa": {
"otp" : "OTP",
"setup_otp" : "OTPのセットアップ",
"wait_pre_setup_otp" : "OTPのプリセット",
"confirm_and_enable" : "OTPの確認と有効化",
"title": "2段階認証",
"generate_new_recovery_codes" : "新しいリカバリーコードを生成",
"warning_of_generate_new_codes" : "新しいリカバリーコードを生成すると、古いコードは使用できなくなります。",
"recovery_codes" : "リカバリーコード。",
"waiting_a_recovery_codes": "バックアップコードを受信しています...",
"recovery_codes_warning" : "コードを紙に書くか、安全な場所に保存してください。そうでなければ、あなたはコードを再び見ることはできません。もし2段階認証アプリのアクセスを喪失し、なおかつ、リカバリーコードもないならば、あなたは自分のアカウントから閉め出されます。",
"authentication_methods" : "認証方法",
"scan": {
"title": "スキャン",
"desc": "あなたの2段階認証アプリを使って、このQRコードをスキャンするか、テキストキーを入力してください:",
"secret_code": "キー"
},
"verify": {
"desc": "2段階認証を有効にするには、あなたの2段階認証アプリのコードを入力してください:"
}
},
"attachmentRadius": "ファイル",
"attachments": "ファイル",
"avatar": "アバター",
"avatarAltRadius": "通知のアバター",
"avatarRadius": "アバター",
"background": "バックグラウンド",
"bio": "プロフィール",
"block_export": "ブロックのエクスポート",
"block_export_button": "ブロックをCSVファイルにエクスポートする",
"block_import": "ブロックのインポート",
"block_import_error": "ブロックのインポートに失敗しました",
"blocks_imported": "ブロックをインポートしました! 実際に処理されるまでに、しばらく時間がかかります。",
"blocks_tab": "ブロック",
"btnRadius": "ボタン",
"cBlue": "返信とフォロー",
"cGreen": "リピート",
"cOrange": "お気に入り",
"cRed": "キャンセル",
"change_password": "パスワードを変える",
"change_password_error": "パスワードを変えることが、できなかったかもしれません。",
"changed_password": "パスワードが、変わりました!",
"collapse_subject": "説明のある投稿をたたむ",
"composing": "投稿",
"confirm_new_password": "新しいパスワードの確認",
"current_avatar": "現在のアバター",
"current_password": "現在のパスワード",
"current_profile_banner": "現在のプロフィールバナー",
"data_import_export_tab": "インポートとエクスポート",
"default_vis": "デフォルトの公開範囲",
"delete_account": "アカウントを消す",
"delete_account_description": "あなたのアカウントとメッセージが、消えます。",
"delete_account_error": "アカウントを消すことが、できなかったかもしれません。インスタンスの管理者に、連絡してください。",
"delete_account_instructions": "本当にアカウントを消してもいいなら、パスワードを入力してください。",
"discoverable": "検索などのサービスでこのアカウントを見つけることを許可する",
"avatar_size_instruction": "アバターの大きさは、150×150ピクセルか、それよりも大きくするといいです。",
"pad_emoji": "ピッカーから絵文字を挿入するとき、絵文字の両側にスペースを入れる",
"export_theme": "保存",
"filtering": "フィルタリング",
"filtering_explanation": "これらの言葉を含むすべてのものがミュートされます。1行に1つの言葉を書いてください。",
"follow_export": "フォローのエクスポート",
"follow_export_button": "エクスポート",
"follow_export_processing": "お待ちください。まもなくファイルをダウンロードできます。",
"follow_import": "フォローのインポート",
"follow_import_error": "フォローのインポートがエラーになりました。",
"follows_imported": "フォローがインポートされました! 少し時間がかかるかもしれません。",
"foreground": "フォアグラウンド",
"general": "全般",
"hide_attachments_in_convo": "スレッドのファイルを隠す",
"hide_attachments_in_tl": "タイムラインのファイルを隠す",
"hide_muted_posts": "ミュートしているユーザーの投稿を隠す",
"max_thumbnails": "投稿に含まれるサムネイルの最大数",
"hide_isp": "インスタンス固有パネルを隠す",
"preload_images": "画像を先読みする",
"use_one_click_nsfw": "NSFWなファイルを1クリックで開く",
"hide_post_stats": "投稿の統計を隠す (例: お気に入りの数)",
"hide_user_stats": "ユーザーの統計を隠す (例: フォロワーの数)",
"hide_filtered_statuses": "フィルターされた投稿を隠す",
"import_blocks_from_a_csv_file": "CSVファイルからブロックをインポートする",
"import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする",
"import_theme": "ロード",
"inputRadius": "インプットフィールド",
"checkboxRadius": "チェックボックス",
"instance_default": "(デフォルト: {value})",
"instance_default_simple": "(デフォルト)",
"interface": "インターフェース",
"interfaceLanguage": "インターフェースの言語",
"invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマは変更されませんでした。",
"limited_availability": "あなたのブラウザではできません",
"links": "リンク",
"lock_account_description": "あなたが認めた人だけ、あなたのアカウントをフォローできる",
"loop_video": "ビデオを繰り返す",
"loop_video_silent_only": "音のないビデオだけ繰り返す",
"mutes_tab": "ミュート",
"play_videos_in_modal": "ビデオをメディアビューアーで見る",
"use_contain_fit": "画像のサムネイルを、切り抜かない",
"name": "名前",
"name_bio": "名前とプロフィール",
"new_password": "新しいパスワード",
"notification_visibility": "表示する通知",
"notification_visibility_follows": "フォロー",
"notification_visibility_likes": "お気に入り",
"notification_visibility_mentions": "メンション",
"notification_visibility_repeats": "リピート",
"no_rich_text_description": "リッチテキストを使わない",
"no_blocks": "ブロックはありません",
"no_mutes": "ミュートはありません",
"hide_follows_description": "フォローしている人を見せない",
"hide_followers_description": "フォロワーを見せない",
"hide_follows_count_description": "フォローしている人の数を見せない",
"hide_followers_count_description": "フォロワーの数を見せない",
"show_admin_badge": "管理者のバッジを見せる",
"show_moderator_badge": "モデレーターのバッジを見せる",
"nsfw_clickthrough": "NSFWなファイルを隠す",
"oauth_tokens": "OAuthトークン",
"token": "トークン",
"refresh_token": "トークンを更新",
"valid_until": "まで有効",
"revoke_token": "取り消す",
"panelRadius": "パネル",
"pause_on_unfocused": "タブにフォーカスがないときストリーミングを止める",
"presets": "プリセット",
"profile_background": "プロフィールのバックグラウンド",
"profile_banner": "プロフィールバナー",
"profile_tab": "プロフィール",
"radii_help": "インターフェースの丸さを設定する。",
"replies_in_timeline": "タイムラインのリプライ",
"reply_visibility_all": "すべてのリプライを見る",
"reply_visibility_following": "私に宛てられたリプライと、フォローしている人からのリプライを見る",
"reply_visibility_self": "私に宛てられたリプライを見る",
"autohide_floating_post_button": "新しい投稿ボタンを自動的に隠す (モバイル)",
"saving_err": "設定を保存できませんでした",
"saving_ok": "設定を保存しました",
"search_user_to_block": "ブロックしたいユーザーを検索",
"search_user_to_mute": "ミュートしたいユーザーを検索",
"security_tab": "セキュリティ",
"scope_copy": "返信するとき、公開範囲をコピーする (DMの公開範囲は、常にコピーされます)",
"minimal_scopes_mode": "公開範囲選択オプションを最小にする",
"set_new_avatar": "新しいアバターを設定する",
"set_new_profile_background": "新しいプロフィールのバックグラウンドを設定する",
"set_new_profile_banner": "新しいプロフィールバナーを設定する",
"settings": "設定",
"subject_input_always_show": "サブジェクトフィールドをいつでも表示する",
"subject_line_behavior": "返信するときサブジェクトをコピーする",
"subject_line_email": "メール風: \"re: サブジェクト\"",
"subject_line_mastodon": "マストドン風: そのままコピー",
"subject_line_noop": "コピーしない",
"post_status_content_type": "投稿のコンテントタイプ",
"stop_gifs": "カーソルを重ねたとき、GIFを動かす",
"streaming": "上までスクロールしたとき、自動的にストリーミングする",
"text": "文字",
"theme": "テーマ",
"theme_help": "カラーテーマをカスタマイズできます",
"theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、色と透明度をオーバーライドできます。「すべてクリア」ボタンを押すと、すべてのオーバーライドをやめます。",
"theme_help_v2_2": "バックグラウンドとテキストのコントラストを表すアイコンがあります。マウスをホバーすると、詳しい説明が出ます。透明な色を使っているときは、最悪の場合のコントラストが示されます。",
"tooltipRadius": "ツールチップとアラート",
"upload_a_photo": "画像をアップロード",
"user_settings": "ユーザー設定",
"values": {
"false": "いいえ",
"true": "はい"
},
"notifications": "通知",
"notification_mutes": "特定のユーザーからの通知を止めるには、ミュートしてください。",
"notification_blocks": "ブロックしているユーザーからの通知は、すべて止まります。",
"enable_web_push_notifications": "ウェブプッシュ通知を許可する",
"style": {
"switcher": {
"keep_color": "色を残す",
"keep_shadows": "影を残す",
"keep_opacity": "透明度を残す",
"keep_roundness": "丸さを残す",
"keep_fonts": "フォントを残す",
"save_load_hint": "「残す」オプションをONにすると、テーマを選んだときとロードしたとき、現在の設定を残します。また、テーマをエクスポートするとき、これらのオプションを維持します。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべての設定を保存します。",
"reset": "リセット",
"clear_all": "すべてクリア",
"clear_opacity": "透明度をクリア"
},
"common": {
"color": "色",
"opacity": "透明度",
"contrast": {
"hint": "コントラストは {ratio} です。{level}。({context})",
"level": {
"aa": "AAレベルガイドライン (ミニマル) を満たします",
"aaa": "AAAレベルガイドライン (レコメンデッド) を満たします。",
"bad": "ガイドラインを満たしません。"
},
"context": {
"18pt": "大きい (18ポイント以上) テキスト",
"text": "テキスト"
}
}
},
"common_colors": {
"_tab_label": "共通",
"main": "共通の色",
"foreground_hint": "「詳細」タブで、もっと細かく設定できます",
"rgbo": "アイコンとアクセントとバッジ"
},
"advanced_colors": {
"_tab_label": "詳細",
"alert": "アラートのバックグラウンド",
"alert_error": "エラー",
"badge": "バッジのバックグラウンド",
"badge_notification": "通知",
"panel_header": "パネルヘッダー",
"top_bar": "トップバー",
"borders": "境界",
"buttons": "ボタン",
"inputs": "インプットフィールド",
"faint_text": "薄いテキスト"
},
"radii": {
"_tab_label": "丸さ"
},
"shadows": {
"_tab_label": "光と影",
"component": "コンポーネント",
"override": "オーバーライド",
"shadow_id": "影 #{value}",
"blur": "ぼかし",
"spread": "広がり",
"inset": "内側",
"hint": "影の設定では、色の値として --variable を使うことができます。これはCSS3変数です。ただし、透明度の設定は、効かなくなります。",
"filter_hint": {
"always_drop_shadow": "ブラウザーがサポートしていれば、常に {0} が使われます。",
"drop_shadow_syntax": "{0} は、{1} パラメーターと {2} キーワードをサポートしていません。",
"avatar_inset": "内側の影と外側の影を同時に使うと、透明なアバターの表示が乱れます。",
"spread_zero": "広がりが 0 よりも大きな影は、0 と同じです。",
"inset_classic": "内側の影は {0} を使います。"
},
"components": {
"panel": "パネル",
"panelHeader": "パネルヘッダー",
"topBar": "トップバー",
"avatar": "ユーザーアバター (プロフィール)",
"avatarStatus": "ユーザーアバター (投稿)",
"popup": "ポップアップとツールチップ",
"button": "ボタン",
"buttonHover": "ボタン (ホバー)",
"buttonPressed": "ボタン (押されているとき)",
"buttonPressedHover": "ボタン (ホバー、かつ、押されているとき)",
"input": "インプットフィールド"
}
},
"fonts": {
"_tab_label": "フォント",
"help": "「カスタム」を選んだときは、システムにあるフォントの名前を、正しく入力してください。",
"components": {
"interface": "インターフェース",
"input": "インプットフィールド",
"post": "投稿",
"postCode": "等幅 (投稿がリッチテキストであるとき)"
},
"family": "フォント名",
"size": "大きさ (px)",
"weight": "太さ",
"custom": "カスタム"
},
"preview": {
"header": "プレビュー",
"content": "本文",
"error": "エラーの例",
"button": "ボタン",
"text": "これは{0}と{1}の例です。",
"mono": "monospace",
"input": "羽田空港に着きました。",
"faint_link": "とても助けになるマニュアル",
"fine_print": "私たちの{0}を、読まないでください!",
"header_faint": "エラーではありません",
"checkbox": "利用規約を読みました",
"link": "ハイパーリンク"
}
},
"version": {
"title": "バージョン",
"backend_version": "バックエンドのバージョン",
"frontend_version": "フロントエンドのバージョン"
}
},
"time": {
"day": "{0}日",
"days": "{0}日",
"day_short": "{0}日",
"days_short": "{0}日",
"hour": "{0}時間",
"hours": "{0}時間",
"hour_short": "{0}時間",
"hours_short": "{0}時間",
"in_future": "{0}で",
"in_past": "{0}前",
"minute": "{0}分",
"minutes": "{0}分",
"minute_short": "{0}分",
"minutes_short": "{0}分",
"month": "{0}ヶ月前",
"months": "{0}ヶ月前",
"month_short": "{0}ヶ月前",
"months_short": "{0}ヶ月前",
"now": "たった今",
"now_short": "たった今",
"second": "{0}秒",
"seconds": "{0}秒",
"second_short": "{0}秒",
"seconds_short": "{0}秒",
"week": "{0}週間",
"weeks": "{0}週間",
"week_short": "{0}週間",
"weeks_short": "{0}週間",
"year": "{0}年",
"years": "{0}年",
"year_short": "{0}年",
"years_short": "{0}年"
},
"timeline": {
"collapse": "たたむ",
"conversation": "スレッド",
"error_fetching": "読み込みがエラーになりました",
"load_older": "古いステータス",
"no_retweet_hint": "投稿を「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります",
"repeated": "リピート",
"show_new": "読み込み",
"up_to_date": "最新",
"no_more_statuses": "これで終わりです",
"no_statuses": "ステータスはありません"
},
"status": {
"favorites": "お気に入り",
"repeats": "リピート",
"delete": "ステータスを削除",
"pin": "プロフィールにピン留め",
"unpin": "プロフィールのピン留めを外す",
"pinned": "ピン留め",
"delete_confirm": "本当にこのステータスを削除してもよろしいですか?",
"reply_to": "返信",
"replies_list": "返信:",
"mute_conversation": "スレッドをミュート",
"unmute_conversation": "スレッドのミュートを解除"
},
"user_card": {
"approve": "受け入れ",
"block": "ブロック",
"blocked": "ブロックしています!",
"deny": "お断り",
"favorites": "お気に入り",
"follow": "フォロー",
"follow_sent": "リクエストを送りました!",
"follow_progress": "リクエストしています…",
"follow_again": "再びリクエストを送りますか?",
"follow_unfollow": "フォローをやめる",
"followees": "フォロー",
"followers": "フォロワー",
"following": "フォローしています!",
"follows_you": "フォローされました!",
"its_you": "これはあなたです!",
"media": "メディア",
"mention": "メンション",
"mute": "ミュート",
"muted": "ミュートしています!",
"per_day": "/日",
"remote_follow": "リモートフォロー",
"report": "通報",
"statuses": "ステータス",
"subscribe": "購読",
"unsubscribe": "購読を解除",
"unblock": "ブロック解除",
"unblock_progress": "ブロックを解除しています...",
"block_progress": "ブロックしています...",
"unmute": "ミュート解除",
"unmute_progress": "ミュートを解除しています...",
"mute_progress": "ミュートしています...",
"admin_menu": {
"moderation": "モデレーション",
"grant_admin": "管理者権限を付与",
"revoke_admin": "管理者権限を解除",
"grant_moderator": "モデレーター権限を付与",
"revoke_moderator": "モデレーター権限を解除",
"activate_account": "アカウントをアクティブにする",
"deactivate_account": "アカウントをアクティブでなくする",
"delete_account": "アカウントを削除",
"force_nsfw": "すべての投稿をNSFWにする",
"strip_media": "投稿からメディアを除去する",
"force_unlisted": "投稿を未収載にする",
"sandbox": "投稿をフォロワーのみにする",
"disable_remote_subscription": "他のインスタンスからフォローされないようにする",
"disable_any_subscription": "フォローされないようにする",
"quarantine": "他のインスタンスからの投稿を止める",
"delete_user": "ユーザーを削除",
"delete_user_confirmation": "あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。"
}
},
"user_profile": {
"timeline_title": "ユーザータイムライン",
"profile_does_not_exist": "申し訳ない。このプロフィールは存在しません。",
"profile_loading_error": "申し訳ない。プロフィールの読み込みがエラーになりました。"
},
"user_reporting": {
"title": "通報する: {0}",
"add_comment_description": "この通報は、あなたのインスタンスのモデレーターに送られます。このアカウントを通報する理由を説明することができます:",
"additional_comments": "追加のコメント",
"forward_description": "このアカウントは他のサーバーに置かれています。この通報のコピーをリモートのサーバーに送りますか?",
"forward_to": "転送する: {0}",
"submit": "送信",
"generic_error": "あなたのリクエストを処理しようとしましたが、エラーになりました。"
},
"who_to_follow": {
"more": "詳細",
"who_to_follow": "おすすめユーザー"
},
"tool_tip": {
"media_upload": "メディアをアップロード",
"repeat": "リピート",
"reply": "返信",
"favorite": "お気に入り",
"user_settings": "ユーザー設定"
},
"upload":{
"error": {
"base": "アップロードに失敗しました。",
"file_too_big": "ファイルが大きすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]",
"default": "しばらくしてから試してください"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "人々",
"hashtags": "ハッシュタグ",
"person_talking": "{count} 人が話しています",
"people_talking": "{count} 人が話しています",
"no_results": "見つかりませんでした"
},
"password_reset": {
"forgot_password": "パスワードを忘れましたか?",
"password_reset": "パスワードリセット",
"instruction": "メールアドレスまたはユーザー名を入力してください。パスワードをリセットするためのリンクを送信します。",
"placeholder": "メールアドレスまたはユーザー名",
"check_email": "パスワードをリセットするためのリンクが記載されたメールが届いているか確認してください。",
"return_home": "ホームページに戻る",
- "not_found": "メールアドレスまたはユーザー名が見つかりませんでした。",
"too_many_requests": "試行回数の制限に達しました。しばらく時間を置いてから再試行してください。",
"password_reset_disabled": "このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。"
}
}
diff --git a/src/i18n/nl.json b/src/i18n/nl.json
index e7509f12fb..a01e57a097 100644
--- a/src/i18n/nl.json
+++ b/src/i18n/nl.json
@@ -1,755 +1,754 @@
{
"chat": {
"title": "Chat"
},
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Media proxy",
"scope_options": "Zichtbaarheidsopties",
"text_limit": "Tekst limiet",
"title": "Kenmerken",
"who_to_follow": "Wie te volgen"
},
"finder": {
"error_fetching_user": "Fout tijdens ophalen gebruiker",
"find_user": "Gebruiker zoeken"
},
"general": {
"apply": "Toepassen",
"submit": "Verzend",
"more": "Meer",
"optional": "optioneel",
"show_more": "Bekijk meer",
"show_less": "Bekijk minder",
"dismiss": "Opheffen",
"cancel": "Annuleren",
"disable": "Uitschakelen",
"enable": "Inschakelen",
"confirm": "Bevestigen",
"verify": "Verifiëren",
"generic_error": "Er is een fout opgetreden",
"peek": "Spiek",
"close": "Sluiten",
"retry": "Opnieuw proberen",
"error_retry": "Probeer het opnieuw",
"loading": "Laden…"
},
"login": {
"login": "Log in",
"description": "Log in met OAuth",
"logout": "Uitloggen",
"password": "Wachtwoord",
"placeholder": "bijv. lain",
"register": "Registreren",
"username": "Gebruikersnaam",
"hint": "Log in om deel te nemen aan de discussie",
"authentication_code": "Authenticatie code",
"enter_recovery_code": "Voer een herstelcode in",
"enter_two_factor_code": "Voer een twee-factor code in",
"recovery_code": "Herstelcode",
"heading": {
"totp": "Twee-factor authenticatie",
"recovery": "Twee-factor herstelling"
}
},
"nav": {
"about": "Over",
"back": "Terug",
"chat": "Lokale Chat",
"friend_requests": "Volgverzoeken",
"mentions": "Vermeldingen",
"dms": "Directe Berichten",
"public_tl": "Publieke Tijdlijn",
"timeline": "Tijdlijn",
"twkn": "Het Geheel Bekende Netwerk",
"user_search": "Gebruiker Zoeken",
"who_to_follow": "Wie te volgen",
"preferences": "Voorkeuren",
"administration": "Administratie",
"search": "Zoeken",
"interactions": "Interacties"
},
"notifications": {
"broken_favorite": "Onbekende status, aan het zoeken…",
"favorited_you": "vond je status leuk",
"followed_you": "volgt jou",
"load_older": "Laad oudere meldingen",
"notifications": "Meldingen",
"read": "Gelezen!",
"repeated_you": "Herhaalde je status",
"no_more_notifications": "Geen meldingen meer",
"migrated_to": "is gemigreerd naar",
"follow_request": "wil je volgen",
"reacted_with": "reageerde met {0}"
},
"post_status": {
"new_status": "Nieuwe status plaatsen",
"account_not_locked_warning": "Je account is niet {0}. Iedereen kan je volgen om je alleen-volgers berichten te lezen.",
"account_not_locked_warning_link": "gesloten",
"attachments_sensitive": "Markeer bijlagen als gevoelig",
"content_type": {
"text/plain": "Platte tekst",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Onderwerp (optioneel)",
"default": "Tijd voor anime!",
"direct_warning": "Deze post zal enkel zichtbaar zijn voor de personen die genoemd zijn.",
"posting": "Plaatsen",
"scope": {
"direct": "Direct - Post enkel naar vermelde gebruikers",
"private": "Enkel volgers - Post enkel naar volgers",
"public": "Publiek - Post op publieke tijdlijnen",
"unlisted": "Niet Vermelden - Niet tonen op publieke tijdlijnen"
},
"direct_warning_to_all": "Dit bericht zal zichtbaar zijn voor alle vermelde gebruikers.",
"direct_warning_to_first_only": "Dit bericht zal alleen zichtbaar zijn voor de vermelde gebruikers aan het begin van het bericht.",
"scope_notice": {
"public": "Dit bericht zal voor iedereen zichtbaar zijn",
"unlisted": "Dit bericht zal niet zichtbaar zijn in de Publieke Tijdlijn en Het Geheel Bekende Netwerk",
"private": "Dit bericht zal voor alleen je volgers zichtbaar zijn"
}
},
"registration": {
"bio": "Bio",
"email": "Email",
"fullname": "Weergave naam",
"password_confirm": "Wachtwoord bevestiging",
"registration": "Registratie",
"token": "Uitnodigings-token",
"captcha": "CAPTCHA",
"new_captcha": "Klik op de afbeelding voor een nieuwe captcha",
"validations": {
"username_required": "moet ingevuld zijn",
"fullname_required": "moet ingevuld zijn",
"email_required": "moet ingevuld zijn",
"password_required": "moet ingevuld zijn",
"password_confirmation_required": "moet ingevuld zijn",
"password_confirmation_match": "komt niet overeen met het wachtwoord"
},
"username_placeholder": "bijv. lain",
"fullname_placeholder": "bijv. Lain Iwakura",
"bio_placeholder": "bijv.\nHallo, ik ben Lain.\nIk ben een anime meisje woonachtig in een buitenwijk in Japan. Je kent me misschien van the Wired."
},
"settings": {
"attachmentRadius": "Bijlages",
"attachments": "Bijlages",
"avatar": "Avatar",
"avatarAltRadius": "Avatars (Meldingen)",
"avatarRadius": "Avatars",
"background": "Achtergrond",
"bio": "Bio",
"btnRadius": "Knoppen",
"cBlue": "Blauw (Beantwoorden, volgen)",
"cGreen": "Groen (Herhalen)",
"cOrange": "Oranje (Favoriet)",
"cRed": "Rood (Annuleren)",
"change_password": "Wachtwoord Wijzigen",
"change_password_error": "Er is een fout opgetreden bij het wijzigen van je wachtwoord.",
"changed_password": "Wachtwoord succesvol gewijzigd!",
"collapse_subject": "Klap berichten met een onderwerp in",
"composing": "Opstellen",
"confirm_new_password": "Nieuw wachtwoord bevestigen",
"current_avatar": "Je huidige avatar",
"current_password": "Huidig wachtwoord",
"current_profile_banner": "Je huidige profiel banner",
"data_import_export_tab": "Data Import / Export",
"default_vis": "Standaard zichtbaarheidsbereik",
"delete_account": "Account Verwijderen",
"delete_account_description": "Permanent je gegevens verwijderen en account deactiveren.",
"delete_account_error": "Er is een fout opgetreden bij het verwijderen van je account. Indien dit probleem zich voor blijft doen, neem dan contact op met de beheerder van deze instantie.",
"delete_account_instructions": "Voer je wachtwoord in het onderstaande invoerveld in om het verwijderen van je account te bevestigen.",
"export_theme": "Preset opslaan",
"filtering": "Filtering",
"filtering_explanation": "Alle statussen die deze woorden bevatten worden genegeerd, één filter per lijn",
"follow_export": "Volgers exporteren",
"follow_export_button": "Exporteer je volgers naar een csv bestand",
"follow_export_processing": "Aan het verwerken, binnen enkele ogenblikken wordt je gevraagd je bestand te downloaden",
"follow_import": "Volgers importeren",
"follow_import_error": "Fout bij importeren volgers",
"follows_imported": "Volgers geïmporteerd! Het kan even duren voordat deze verwerkt zijn.",
"foreground": "Voorgrond",
"general": "Algemeen",
"hide_attachments_in_convo": "Verberg bijlages in conversaties",
"hide_attachments_in_tl": "Verberg bijlages in de tijdlijn",
"hide_isp": "Verberg instantie-specifiek paneel",
"preload_images": "Afbeeldingen vooraf laden",
"hide_post_stats": "Verberg bericht statistieken (bijv. het aantal favorieten)",
"hide_user_stats": "Verberg bericht statistieken (bijv. het aantal volgers)",
"import_followers_from_a_csv_file": "Importeer volgers uit een csv bestand",
"import_theme": "Preset laden",
"inputRadius": "Invoervelden",
"checkboxRadius": "Checkboxen",
"instance_default": "(standaard: {value})",
"instance_default_simple": "(standaard)",
"interface": "Interface",
"interfaceLanguage": "Interface taal",
"invalid_theme_imported": "Het geselecteerde bestand is geen door Pleroma ondersteund thema. Er zijn geen aanpassingen gedaan.",
"limited_availability": "Niet beschikbaar in je browser",
"links": "Links",
"lock_account_description": "Laat volgers enkel toe na expliciete toestemming",
"loop_video": "Herhaal video's",
"loop_video_silent_only": "Herhaal enkel video's zonder geluid (bijv. Mastodon's \"gifs\")",
"name": "Naam",
"name_bio": "Naam & Bio",
"new_password": "Nieuw wachtwoord",
"notification_visibility": "Type meldingen die getoond worden",
"notification_visibility_follows": "Volgingen",
"notification_visibility_likes": "Vind-ik-leuks",
"notification_visibility_mentions": "Vermeldingen",
"notification_visibility_repeats": "Herhalingen",
"no_rich_text_description": "Verwijder rich text formattering van alle berichten",
"hide_network_description": "Toon niet wie mij volgt en wie ik volg.",
"nsfw_clickthrough": "Doorklikbaar verbergen van gevoelige bijlages inschakelen",
"oauth_tokens": "OAuth-tokens",
"token": "Token",
"refresh_token": "Token Vernieuwen",
"valid_until": "Geldig tot",
"revoke_token": "Intrekken",
"panelRadius": "Panelen",
"pause_on_unfocused": "Streamen pauzeren wanneer de tab niet in focus is",
"presets": "Presets",
"profile_background": "Profiel Achtergrond",
"profile_banner": "Profiel Banner",
"profile_tab": "Profiel",
"radii_help": "Stel afronding van hoeken in de interface in (in pixels)",
"replies_in_timeline": "Antwoorden in tijdlijn",
"reply_visibility_all": "Alle antwoorden tonen",
"reply_visibility_following": "Enkel antwoorden tonen die aan mij of gevolgde gebruikers gericht zijn",
"reply_visibility_self": "Enkel antwoorden tonen die aan mij gericht zijn",
"saving_err": "Fout tijdens opslaan van instellingen",
"saving_ok": "Instellingen opgeslagen",
"security_tab": "Beveiliging",
"scope_copy": "Neem bereik over bij beantwoorden (Directe Berichten blijven altijd Direct)",
"set_new_avatar": "Nieuwe avatar instellen",
"set_new_profile_background": "Nieuwe profiel achtergrond instellen",
"set_new_profile_banner": "Nieuwe profiel banner instellen",
"settings": "Instellingen",
"subject_input_always_show": "Altijd onderwerpveld tonen",
"subject_line_behavior": "Onderwerp kopiëren bij antwoorden",
"subject_line_email": "Zoals email: \"re: onderwerp\"",
"subject_line_mastodon": "Zoals mastodon: kopieer zoals het is",
"subject_line_noop": "Niet kopiëren",
"stop_gifs": "GIFs afspelen bij zweven",
"streaming": "Automatisch streamen van nieuwe berichten inschakelen wanneer tot boven gescrold is",
"text": "Tekst",
"theme": "Thema",
"theme_help": "Gebruik hex color codes (#rrggbb) om je kleurschema te wijzigen.",
"theme_help_v2_1": "Je kan ook de kleur en transparantie van bepaalde componenten overschrijven door de checkbox aan te vinken, gebruik de \"Alles wissen\" knop om alle overschrijvingen te annuleren.",
"theme_help_v2_2": "Iconen onder sommige onderdelen zijn achtergrond/tekst contrast indicatoren, zweef er over voor gedetailleerde info. Hou er rekening mee dat bij doorzichtigheid de ergst mogelijke situatie wordt weer gegeven.",
"tooltipRadius": "Tooltips/alarmen",
"user_settings": "Gebruikersinstellingen",
"values": {
"false": "nee",
"true": "ja"
},
"notifications": "Meldingen",
"enable_web_push_notifications": "Web push meldingen inschakelen",
"style": {
"switcher": {
"keep_color": "Kleuren behouden",
"keep_shadows": "Schaduwen behouden",
"keep_opacity": "Transparantie behouden",
"keep_roundness": "Rondingen behouden",
"keep_fonts": "Lettertypes behouden",
"save_load_hint": "\"Behoud\" opties behouden de momenteel ingestelde opties bij het selecteren of laden van thema's, maar slaan ook de genoemde opties op bij het exporteren van een thema. Wanneer alle selectievakjes zijn uitgeschakeld, zal het exporteren van thema's alles opslaan.",
"reset": "Reset",
"clear_all": "Alles wissen",
"clear_opacity": "Transparantie wissen",
"keep_as_is": "Hou zoals het is",
"use_snapshot": "Oude versie",
"use_source": "Nieuwe versie",
"help": {
"future_version_imported": "Het geïmporteerde bestand is gemaakt voor een nieuwere versie van FE.",
"older_version_imported": "Het geïmporteerde bestand is gemaakt voor een oudere versie van FE.",
"upgraded_from_v2": "PleromaFE is bijgewerkt, het thema kan iets anders uitzien dan dat je gewend bent.",
"v2_imported": "Het geïmporteerde bestand is gemaakt voor een oudere FE. We proberen compatibiliteit te maximaliseren, maar het kan toch voorkomen dat er inconsistenties zijn.",
"snapshot_source_mismatch": "Versie conflict: waarschijnlijk was FE terug gerold en opnieuw bijgewerkt, indien je het thema aangepast hebt met de oudere versie van FE wil je waarschijnlijk de oude versie gebruiken, gebruik anders de nieuwe versie.",
"migration_napshot_gone": "Voor een onduidelijke reden mist de momentopname, dus sommige dingen kunnen anders uitzien dan je gewend bent.",
"migration_snapshot_ok": "Voor de zekerheid is een momentopname van het thema geladen. Je kunt proberen om de thema gegevens te laden.",
"fe_downgraded": "PleromaFE's versie is terug gerold.",
"fe_upgraded": "De thema-engine van PleromaFE is bijgewerkt na de versie update.",
"snapshot_missing": "Het bestand bevat geen thema momentopname, dus het thema kan anders uitzien dan je oorspronkelijk bedacht had.",
"snapshot_present": "Thema momentopname is geladen, alle waarden zijn overschreven. Je kunt in plaats daarvan ook de daadwerkelijke data van het thema laden."
},
"load_theme": "Thema laden"
},
"common": {
"color": "Kleur",
"opacity": "Transparantie",
"contrast": {
"hint": "Contrast verhouding is {ratio}, {level} {context}",
"level": {
"aa": "voldoet aan de richtlijn van niveau AA (minimum)",
"aaa": "voldoet aan de richtlijn van niveau AAA (aangeraden)",
"bad": "voldoet aan geen enkele toegankelijkheidsrichtlijn"
},
"context": {
"18pt": "voor grote (18pt+) tekst",
"text": "voor tekst"
}
}
},
"common_colors": {
"_tab_label": "Algemeen",
"main": "Algemene kleuren",
"foreground_hint": "Zie \"Geavanceerd\" tab voor meer gedetailleerde controle",
"rgbo": "Iconen, accenten, badges"
},
"advanced_colors": {
"_tab_label": "Geavanceerd",
"alert": "Alarm achtergrond",
"alert_error": "Fout",
"badge": "Badge achtergrond",
"badge_notification": "Meldingen",
"panel_header": "Paneel koptekst",
"top_bar": "Top balk",
"borders": "Randen",
"buttons": "Knoppen",
"inputs": "Invoervelden",
"faint_text": "Vervaagde tekst",
"tabs": "Tabbladen",
"toggled": "Geschakeld",
"disabled": "Uitgeschakeld",
"selectedMenu": "Geselecteerd menu item",
"selectedPost": "Geselecteerd bericht",
"pressed": "Ingedrukt",
"highlight": "Gemarkeerde elementen",
"icons": "Iconen",
"poll": "Poll grafiek",
"underlay": "Onderlaag",
"popover": "Tooltips, menu's, popovers",
"post": "Berichten / Gebruiker bios",
"alert_neutral": "Neutraal",
"alert_warning": "Waarschuwing"
},
"radii": {
"_tab_label": "Rondheid"
},
"shadows": {
"_tab_label": "Schaduw en belichting",
"component": "Onderdeel",
"override": "Overschrijven",
"shadow_id": "Schaduw #{value}",
"blur": "Vervagen",
"spread": "Spreiding",
"inset": "Inzet",
"hint": "Voor schaduw kan je ook --variable gebruiken als een kleur waarde om CSS3 variabelen te gebruiken. Houd er rekening mee dat het instellen van opaciteit in dit geval niet werkt.",
"filter_hint": {
"always_drop_shadow": "Waarschuwing, deze schaduw gebruikt altijd {0} als de browser dit ondersteund.",
"drop_shadow_syntax": "{0} ondersteund niet de {1} parameter en {2} sleutelwoord.",
"avatar_inset": "Houdt er rekening mee dat het combineren van zowel inzet and niet-inzet schaduwen op transparante avatars onverwachte resultaten kan opleveren.",
"spread_zero": "Schaduw met spreiding > 0 worden weergegeven alsof ze op nul staan",
"inset_classic": "Inzet schaduw zal {0} gebruiken"
},
"components": {
"panel": "Paneel",
"panelHeader": "Paneel koptekst",
"topBar": "Top balk",
"avatar": "Gebruikers avatar (in profiel weergave)",
"avatarStatus": "Gebruikers avatar (in bericht weergave)",
"popup": "Popups en tooltips",
"button": "Knop",
"buttonHover": "Knop (zweven)",
"buttonPressed": "Knop (ingedrukt)",
"buttonPressedHover": "Knop (ingedrukt+zweven)",
"input": "Invoerveld"
},
"hintV3": "Voor schaduwen kun je ook de {0} notatie gebruiken om de andere kleur invoer te gebruiken."
},
"fonts": {
"_tab_label": "Lettertypes",
"help": "Selecteer het lettertype om te gebruiken voor elementen van de UI. Voor \"aangepast\" dien je de exacte naam van het lettertype in te voeren zoals die in het systeem wordt weergegeven.",
"components": {
"interface": "Interface",
"input": "Invoervelden",
"post": "Bericht tekst",
"postCode": "Monospaced tekst in een bericht (rich text)"
},
"family": "Lettertype naam",
"size": "Grootte (in px)",
"weight": "Gewicht (dikgedruktheid)",
"custom": "Aangepast"
},
"preview": {
"header": "Voorvertoning",
"content": "Inhoud",
"error": "Voorbeeld fout",
"button": "Knop",
"text": "Nog een boel andere {0} en {1}",
"mono": "inhoud",
"input": "Tijd voor anime!",
"faint_link": "handige gebruikershandleiding",
"fine_print": "Lees onze {0} om niets nuttig te leren!",
"header_faint": "Alles komt goed",
"checkbox": "Ik heb de gebruikersvoorwaarden gelezen",
"link": "een leuke kleine link"
}
},
"notification_setting_privacy": "Privacy",
"notification_setting_privacy_option": "Verberg de afzender en inhoud van push meldingen",
"notification_mutes": "Om niet langer meldingen te ontvangen van een specifieke gebruiker, kun je deze negeren.",
"app_name": "App naam",
"security": "Beveiliging",
"enter_current_password_to_confirm": "Voer je huidige wachtwoord in om je identiteit te bevestigen",
"mfa": {
"otp": "OTP",
"setup_otp": "OTP instellen",
"wait_pre_setup_otp": "OTP voorinstellen",
"confirm_and_enable": "Bevestig en schakel OTP in",
"title": "Twee-factor Authenticatie",
"generate_new_recovery_codes": "Genereer nieuwe herstelcodes",
"recovery_codes": "Herstelcodes.",
"waiting_a_recovery_codes": "Backup codes ontvangen…",
"authentication_methods": "Authenticatie methodes",
"scan": {
"title": "Scannen",
"desc": "Scan de QR code of voer een sleutel in met je twee-factor applicatie:",
"secret_code": "Sleutel"
},
"verify": {
"desc": "Voer de code van je twee-factor applicatie in om twee-factor authenticatie in te schakelen:"
},
"warning_of_generate_new_codes": "Wanneer je nieuwe herstelcodes genereert, zullen je oude code niet langer werken.",
"recovery_codes_warning": "Schrijf de codes op of sla ze op een veilige locatie op - anders kun je ze niet meer inzien. Als je toegang tot je 2FA app en herstelcodes verliest, zal je buitengesloten zijn uit je account."
},
"allow_following_move": "Automatisch volgen toestaan wanneer een gevolgd account migreert",
"block_export": "Blokkades exporteren",
"block_import": "Blokkades importeren",
"blocks_imported": "Blokkades geïmporteerd! Het kan even duren voordat deze verwerkt zijn.",
"blocks_tab": "Blokkades",
"change_email": "Email wijzigen",
"change_email_error": "Er is een fout opgetreden tijdens het wijzigen van je email.",
"changed_email": "Email succesvol gewijzigd!",
"domain_mutes": "Domeinen",
"avatar_size_instruction": "De aangeraden minimale afmeting voor avatar afbeeldingen is 150x150 pixels.",
"pad_emoji": "Vul emoji aan met spaties wanneer deze met de picker ingevoegd worden",
"emoji_reactions_on_timeline": "Toon emoji reacties op de tijdlijn",
"accent": "Accent",
"hide_muted_posts": "Verberg berichten van genegeerde gebruikers",
"max_thumbnails": "Maximaal aantal miniaturen per bericht",
"use_one_click_nsfw": "Open gevoelige bijlagen met slechts één klik",
"hide_filtered_statuses": "Gefilterde statussen verbergen",
"import_blocks_from_a_csv_file": "Importeer blokkades van een csv bestand",
"mutes_tab": "Negeringen",
"play_videos_in_modal": "Speel video's af in een popup frame",
"new_email": "Nieuwe Email",
"notification_visibility_emoji_reactions": "Reacties",
"no_blocks": "Geen blokkades",
"no_mutes": "Geen negeringen",
"hide_followers_description": "Niet tonen wie mij volgt",
"hide_followers_count_description": "Niet mijn volgers aantal tonen",
"hide_follows_count_description": "Niet mijn gevolgde aantal tonen",
"show_admin_badge": "Beheerders badge tonen in mijn profiel",
"autohide_floating_post_button": "Nieuw Bericht knop automatisch verbergen (mobiel)",
"search_user_to_block": "Zoek wie je wilt blokkeren",
"search_user_to_mute": "Zoek wie je wilt negeren",
"minimal_scopes_mode": "Bericht bereik-opties minimaliseren",
"post_status_content_type": "Bericht status content type",
"user_mutes": "Gebruikers",
"useStreamingApi": "Berichten en meldingen in real-time ontvangen",
"useStreamingApiWarning": "(Afgeraden, experimenteel, kan berichten overslaan)",
"type_domains_to_mute": "Zoek domeinen om te negeren",
"upload_a_photo": "Upload een foto",
"fun": "Plezier",
"greentext": "Meme pijlen",
"block_export_button": "Exporteer je geblokkeerde gebruikers naar een csv bestand",
"block_import_error": "Fout bij importeren blokkades",
"discoverable": "Sta toe dat dit account ontdekt kan worden in zoekresultaten en andere diensten",
"use_contain_fit": "Snij bijlage in miniaturen niet bij",
"notification_visibility_moves": "Gebruiker Migraties",
"hide_follows_description": "Niet tonen wie ik volg",
"show_moderator_badge": "Moderators badge tonen in mijn profiel",
"notification_setting_filters": "Filters",
"notification_blocks": "Door een gebruiker te blokkeren, ontvang je geen meldingen meer van de gebruiker en wordt je abonnement op de gebruiker opgeheven.",
"version": {
"frontend_version": "Frontend Versie",
"backend_version": "Backend Versie",
"title": "Versie"
},
"mutes_and_blocks": "Negeringen en Blokkades",
"profile_fields": {
"value": "Inhoud",
"name": "Label",
"add_field": "Veld Toevoegen",
"label": "Profiel metadata"
},
"bot": "Dit is een bot account"
},
"timeline": {
"collapse": "Inklappen",
"conversation": "Conversatie",
"error_fetching": "Fout bij ophalen van updates",
"load_older": "Oudere statussen laden",
"no_retweet_hint": "Bericht is gemarkeerd als enkel volgers of direct en kan niet worden herhaald",
"repeated": "herhaalde",
"show_new": "Nieuwe tonen",
"up_to_date": "Up-to-date",
"no_statuses": "Geen statussen",
"no_more_statuses": "Geen statussen meer"
},
"user_card": {
"approve": "Goedkeuren",
"block": "Blokkeren",
"blocked": "Geblokkeerd!",
"deny": "Weigeren",
"favorites": "Favorieten",
"follow": "Volgen",
"follow_sent": "Aanvraag verzonden!",
"follow_progress": "Aanvragen…",
"follow_again": "Aanvraag opnieuw zenden?",
"follow_unfollow": "Stop volgen",
"followees": "Aan het volgen",
"followers": "Volgers",
"following": "Aan het volgen!",
"follows_you": "Volgt jou!",
"its_you": "'t is jij!",
"mute": "Negeren",
"muted": "Genegeerd",
"per_day": "per dag",
"remote_follow": "Volg vanop afstand",
"statuses": "Statussen",
"admin_menu": {
"delete_user_confirmation": "Weet je het heel zeker? Deze uitvoering kan niet ongedaan worden gemaakt.",
"delete_user": "Gebruiker verwijderen",
"quarantine": "Federeren van gebruikers berichten verbieden",
"disable_any_subscription": "Volgen van gebruiker in zijn geheel verbieden",
"disable_remote_subscription": "Volgen van gebruiker vanaf andere instanties verbieden",
"sandbox": "Berichten forceren om alleen voor volgers zichtbaar te zijn",
"force_unlisted": "Berichten forceren om niet publiekelijk getoond te worden",
"strip_media": "Media van berichten verwijderen",
"force_nsfw": "Alle berichten als gevoelig markeren",
"delete_account": "Account verwijderen",
"deactivate_account": "Account deactiveren",
"activate_account": "Account activeren",
"revoke_moderator": "Moderatorsrechten intrekken",
"grant_moderator": "Moderatorsrechten toekennen",
"revoke_admin": "Beheerdersrechten intrekken",
"grant_admin": "Beheerdersrechten toekennen",
"moderation": "Moderatie"
},
"show_repeats": "Herhalingen tonen",
"hide_repeats": "Herhalingen verbergen",
"mute_progress": "Negeren…",
"unmute_progress": "Negering opheffen…",
"unmute": "Negering opheffen",
"block_progress": "Blokkeren…",
"unblock_progress": "Blokkade opheffen…",
"unblock": "Blokkade opheffen",
"unsubscribe": "Abonnement opzeggen",
"subscribe": "Abonneren",
"report": "Aangeven",
"mention": "Vermelding",
"media": "Media",
"hidden": "Verborgen"
},
"user_profile": {
"timeline_title": "Gebruikers Tijdlijn",
"profile_loading_error": "Sorry, er is een fout opgetreden bij het laden van dit profiel.",
"profile_does_not_exist": "Sorry, dit profiel bestaat niet."
},
"who_to_follow": {
"more": "Meer",
"who_to_follow": "Wie te volgen"
},
"tool_tip": {
"media_upload": "Media Uploaden",
"repeat": "Herhalen",
"reply": "Beantwoorden",
"favorite": "Favoriet maken",
"user_settings": "Gebruikers Instellingen",
"reject_follow_request": "Volg-verzoek afwijzen",
"accept_follow_request": "Volg-aanvraag accepteren",
"add_reaction": "Reactie toevoegen"
},
"upload": {
"error": {
"base": "Upload mislukt.",
"file_too_big": "Bestand is te groot [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Probeer het later opnieuw"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"about": {
"mrf": {
"federation": "Federatie",
"keyword": {
"reject": "Afwijzen",
"replace": "Vervangen",
"is_replaced_by": "→",
"keyword_policies": "Zoekwoord Beleid",
"ftl_removal": "Verwijdering van \"Het Geheel Bekende Netwerk\" Tijdlijn"
},
"mrf_policies_desc": "MRF regels beïnvloeden het federatie gedrag van de instantie. De volgende regels zijn ingeschakeld:",
"mrf_policies": "Ingeschakelde MRF Regels",
"simple": {
"simple_policies": "Instantie-specifieke Regels",
"accept": "Accepteren",
"accept_desc": "Deze instantie accepteert alleen berichten van de volgende instanties:",
"reject": "Afwijzen",
"reject_desc": "Deze instantie zal geen berichten accepteren van de volgende instanties:",
"quarantine": "Quarantaine",
"quarantine_desc": "Deze instantie zal alleen publieke berichten sturen naar de volgende instanties:",
"ftl_removal_desc": "Deze instantie verwijdert de volgende instanties van \"Het Geheel Bekende Netwerk\" tijdlijn:",
"media_removal_desc": "Deze instantie verwijdert media van berichten van de volgende instanties:",
"media_nsfw_desc": "Deze instantie stelt media in als gevoelig in berichten van de volgende instanties:",
"ftl_removal": "Verwijderen van \"Het Geheel Bekende Netwerk\" Tijdlijn",
"media_removal": "Media Verwijdering",
"media_nsfw": "Forceer Media als Gevoelig"
}
},
"staff": "Personeel"
},
"domain_mute_card": {
"mute": "Negeren",
"mute_progress": "Negeren…",
"unmute": "Negering opheffen",
"unmute_progress": "Negering wordt opgeheven…"
},
"exporter": {
"export": "Exporteren",
"processing": "Verwerken, er wordt zo gevraagd om je bestand te downloaden"
},
"image_cropper": {
"save": "Opslaan",
"save_without_cropping": "Opslaan zonder bijsnijden",
"cancel": "Annuleren",
"crop_picture": "Afbeelding bijsnijden"
},
"importer": {
"submit": "Verzenden",
"success": "Succesvol geïmporteerd.",
"error": "Er is een fout opgetreden bij het importeren van dit bestand."
},
"media_modal": {
"previous": "Vorige",
"next": "Volgende"
},
"polls": {
"add_poll": "Poll Toevoegen",
"add_option": "Optie Toevoegen",
"option": "Optie",
"votes": "stemmen",
"vote": "Stem",
"single_choice": "Enkele keuze",
"multiple_choices": "Meerkeuze",
"expiry": "Poll leeftijd",
"expires_in": "Poll eindigt in {0}",
"expired": "Poll is {0} geleden beëindigd",
"not_enough_options": "Te weinig opties in poll",
"type": "Poll type"
},
"emoji": {
"emoji": "Emoji",
"keep_open": "Picker openhouden",
"search_emoji": "Zoek voor een emoji",
"add_emoji": "Emoji invoegen",
"unicode": "Unicode emoji",
"load_all": "Alle {emojiAmount} emoji worden geladen",
"stickers": "Stickers",
"load_all_hint": "Eerste {saneAmount} emoji geladen, alle emoji tegelijk laden kan problemen veroorzaken met prestaties.",
"custom": "Gepersonaliseerde emoji"
},
"interactions": {
"favs_repeats": "Herhalingen en Favorieten",
"follows": "Nieuwe volgingen",
"moves": "Gebruiker migreert",
"load_older": "Oudere interacties laden"
},
"remote_user_resolver": {
"searching_for": "Zoeken naar",
"error": "Niet gevonden.",
"remote_user_resolver": "Externe gebruikers zoeker"
},
"selectable_list": {
"select_all": "Alles selecteren"
},
"password_reset": {
"password_reset_required_but_mailer_is_disabled": "Je dient je wachtwoord opnieuw in te stellen, maar wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.",
"password_reset_required": "Je dient je wachtwoord opnieuw in te stellen om in te kunnen loggen.",
"password_reset_disabled": "Wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.",
"too_many_requests": "Je hebt het maximaal aantal pogingen bereikt, probeer het later opnieuw.",
- "not_found": "We kunnen die email of gebruikersnaam niet vinden.",
"return_home": "Terugkeren naar de home pagina",
"check_email": "Controleer je email inbox voor een link om je wachtwoord opnieuw in te stellen.",
"placeholder": "Je email of gebruikersnaam",
"instruction": "Voer je email adres of gebruikersnaam in. We sturen je een link om je wachtwoord opnieuw in te stellen.",
"password_reset": "Wachtwoord opnieuw instellen",
"forgot_password": "Wachtwoord vergeten?"
},
"search": {
"no_results": "Geen resultaten",
"people_talking": "{count} personen aan het praten",
"person_talking": "{count} persoon aan het praten",
"hashtags": "Hashtags",
"people": "Personen"
},
"user_reporting": {
"generic_error": "Er is een fout opgetreden tijdens het verwerken van je verzoek.",
"submit": "Verzenden",
"forward_to": "Doorsturen naar {0}",
"forward_description": "Dit account hoort bij een andere server. Wil je een kopie van het rapport ook daarheen sturen?",
"additional_comments": "Aanvullende opmerkingen",
"add_comment_description": "Het rapport zal naar de moderators van de instantie worden verstuurd. Je kunt hieronder uitleg bijvoegen waarom je dit account wilt aangeven:",
"title": "{0} aangeven"
},
"status": {
"copy_link": "Link naar status kopiëren",
"status_unavailable": "Status niet beschikbaar",
"unmute_conversation": "Conversatie niet meer negeren",
"mute_conversation": "Conversatie negeren",
"replies_list": "Antwoorden:",
"reply_to": "Antwoorden aan",
"delete_confirm": "Wil je echt deze status verwijderen?",
"pin": "Aan profiel vastmaken",
"pinned": "Vastgezet",
"unpin": "Van profiel losmaken",
"delete": "Status verwijderen",
"repeats": "Herhalingen",
"favorites": "Favorieten",
"thread_muted_and_words": ", heeft woorden:",
"thread_muted": "Thread genegeerd"
},
"time": {
"years_short": "{0}j",
"year_short": "{0}j",
"years": "{0} jaren",
"year": "{0} jaar",
"weeks_short": "{0}w",
"week_short": "{0}w",
"weeks": "{0} weken",
"week": "{0} week",
"seconds_short": "{0}s",
"second_short": "{0}s",
"seconds": "{0} seconden",
"second": "{0} seconde",
"now_short": "nu",
"now": "zojuist",
"months_short": "{0}ma",
"month_short": "{0}ma",
"months": "{0} maanden",
"month": "{0} maand",
"minutes_short": "{0}min",
"minute_short": "{0}min",
"minutes": "{0} minuten",
"minute": "{0} minuut",
"in_past": "{0} geleden",
"in_future": "over {0}",
"hours_short": "{0}u",
"hour_short": "{0}u",
"hours": "{0} uren",
"hour": "{0} uur",
"days_short": "{0}d",
"day_short": "{0}d",
"days": "{0} dagen",
"day": "{0} dag"
}
}
diff --git a/src/i18n/pl.json b/src/i18n/pl.json
index 5863ba8e28..05a7edf7d5 100644
--- a/src/i18n/pl.json
+++ b/src/i18n/pl.json
@@ -1,782 +1,781 @@
{
"about": {
"mrf": {
"federation": "Federacja",
"keyword": {
"keyword_policies": "Zasady słów kluczowych",
"ftl_removal": "Usunięcie z \"Całej znanej sieci\"",
"reject": "Odrzucanie",
"replace": "Zastąpienie",
"is_replaced_by": "→"
},
"mrf_policies": "Włączone zasady MRF",
"mrf_policies_desc": "Zasady MRF zmieniają zachowanie federowania instancji. Następujące zasady są włączone:",
"simple": {
"simple_policies": "Zasady specyficzne dla instancji",
"accept": "Akceptowanie",
"accept_desc": "Ta instancja akceptuje tylko posty z wymienionych instancji:",
"reject": "Odrzucanie",
"reject_desc": "Ta instancja odrzuca posty z wymienionych instancji:",
"quarantine": "Kwarantanna",
"quarantine_desc": "Ta instancja wysyła tylko publiczne posty do wymienionych instancji:",
"ftl_removal": "Usunięcie z \"Całej znanej sieci\"",
"ftl_removal_desc": "Ta instancja usuwa wymienionych instancje z \"Całej znanej sieci\":",
"media_removal": "Usuwanie multimediów",
"media_removal_desc": "Ta instancja usuwa multimedia z postów od wymienionych instancji:",
"media_nsfw": "Multimedia ustawione jako wrażliwe",
"media_nsfw_desc": "Ta instancja wymusza, by multimedia z wymienionych instancji były ustawione jako wrażliwe:"
}
},
"staff": "Administracja"
},
"chat": {
"title": "Czat"
},
"domain_mute_card": {
"mute": "Wycisz",
"mute_progress": "Wyciszam…",
"unmute": "Odcisz",
"unmute_progress": "Odciszam…"
},
"exporter": {
"export": "Eksportuj",
"processing": "Przetwarzam, za chwilę zostaniesz zapytany(-na) o ściągnięcie pliku"
},
"features_panel": {
"chat": "Czat",
"gopher": "Gopher",
"media_proxy": "Proxy mediów",
"scope_options": "Ustawienia zakresu",
"text_limit": "Limit tekstu",
"title": "Funkcje",
"who_to_follow": "Propozycje obserwacji"
},
"finder": {
"error_fetching_user": "Błąd przy pobieraniu profilu",
"find_user": "Znajdź użytkownika"
},
"general": {
"apply": "Zastosuj",
"submit": "Wyślij",
"more": "Więcej",
"generic_error": "Wystąpił błąd",
"optional": "nieobowiązkowe",
"show_more": "Pokaż więcej",
"show_less": "Pokaż mniej",
"dismiss": "Odrzuć",
"cancel": "Anuluj",
"disable": "Wyłącz",
"enable": "Włącz",
"confirm": "Potwierdź",
"verify": "Zweryfikuj",
"close": "Zamknij",
"loading": "Ładowanie…",
"retry": "Spróbuj ponownie"
},
"image_cropper": {
"crop_picture": "Przytnij obrazek",
"save": "Zapisz",
"save_without_cropping": "Zapisz bez przycinania",
"cancel": "Anuluj"
},
"importer": {
"submit": "Wyślij",
"success": "Zaimportowano pomyślnie.",
"error": "Wystąpił błąd podczas importowania pliku."
},
"login": {
"login": "Zaloguj",
"description": "Zaloguj używając OAuth",
"logout": "Wyloguj",
"password": "Hasło",
"placeholder": "n.p. lain",
"register": "Zarejestruj",
"username": "Użytkownik",
"hint": "Zaloguj się, aby dołączyć do dyskusji",
"authentication_code": "Kod weryfikacyjny",
"enter_recovery_code": "Wprowadź kod zapasowy",
"enter_two_factor_code": "Wprowadź kod weryfikacyjny",
"recovery_code": "Kod zapasowy",
"heading": {
"totp": "Weryfikacja dwuetapowa",
"recovery": "Zapasowa weryfikacja dwuetapowa"
}
},
"media_modal": {
"previous": "Poprzednie",
"next": "Następne"
},
"nav": {
"about": "O nas",
"administration": "Administracja",
"back": "Wróć",
"chat": "Lokalny czat",
"friend_requests": "Prośby o możliwość obserwacji",
"mentions": "Wzmianki",
"interactions": "Interakcje",
"dms": "Wiadomości prywatne",
"public_tl": "Publiczna oś czasu",
"timeline": "Oś czasu",
"twkn": "Cała znana sieć",
"user_search": "Wyszukiwanie użytkowników",
"search": "Wyszukiwanie",
"who_to_follow": "Sugestie obserwacji",
"preferences": "Preferencje",
"bookmarks": "Zakładki"
},
"notifications": {
"broken_favorite": "Nieznany status, szukam go…",
"favorited_you": "dodał(-a) twój status do ulubionych",
"followed_you": "obserwuje cię",
"load_older": "Załaduj starsze powiadomienia",
"notifications": "Powiadomienia",
"read": "Przeczytane!",
"repeated_you": "powtórzył(-a) twój status",
"no_more_notifications": "Nie masz więcej powiadomień",
"migrated_to": "wyemigrował do",
"reacted_with": "zareagował z {0}",
"follow_request": "chce ciebie obserwować"
},
"polls": {
"add_poll": "Dodaj ankietę",
"add_option": "Dodaj opcję",
"option": "Opcja",
"votes": "głosów",
"vote": "Głosuj",
"type": "Typ ankiety",
"single_choice": "jednokrotnego wyboru",
"multiple_choices": "wielokrotnego wyboru",
"expiry": "Czas trwania ankiety",
"expires_in": "Ankieta kończy się za {0}",
"expired": "Ankieta skończyła się {0} temu",
"not_enough_options": "Zbyt mało unikalnych opcji w ankiecie"
},
"emoji": {
"stickers": "Naklejki",
"emoji": "Emoji",
"keep_open": "Zostaw selektor otwarty",
"search_emoji": "Wyszukaj emoji",
"add_emoji": "Wstaw emoji",
"custom": "Niestandardowe emoji",
"unicode": "Emoji unicode",
"load_all_hint": "Załadowano pierwsze {saneAmount} emoji, Załadowanie wszystkich emoji może spowodować problemy z wydajnością.",
"load_all": "Ładuję wszystkie {emojiAmount} emoji"
},
"interactions": {
"favs_repeats": "Powtórzenia i ulubione",
"follows": "Nowi obserwujący",
"moves": "Użytkownik migruje",
"load_older": "Załaduj starsze interakcje"
},
"post_status": {
"new_status": "Dodaj nowy status",
"account_not_locked_warning": "Twoje konto nie jest {0}. Każdy może cię zaobserwować aby zobaczyć wpisy tylko dla obserwujących.",
"account_not_locked_warning_link": "zablokowane",
"attachments_sensitive": "Oznacz załączniki jako wrażliwe",
"content_type": {
"text/plain": "Czysty tekst",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "Temat (nieobowiązkowy)",
"default": "Właśnie wróciłem z kościoła",
"direct_warning_to_all": "Ten wpis zobaczą wszystkie osoby, o których wspomniałeś(-aś).",
"direct_warning_to_first_only": "Ten wpis zobaczą tylko te osoby, o których wspomniałeś(-aś) na początku wiadomości.",
"posting": "Wysyłanie",
"scope_notice": {
"public": "Ten post będzie widoczny dla każdego",
"private": "Ten post będzie widoczny tylko dla twoich obserwujących",
"unlisted": "Ten post nie będzie widoczny na publicznej osi czasu i całej znanej sieci"
},
"scope": {
"direct": "Bezpośredni – Tylko dla wspomnianych użytkowników",
"private": "Tylko dla obserwujących – Umieść dla osób, które cię obserwują",
"public": "Publiczny – Umieść na publicznych osiach czasu",
"unlisted": "Niewidoczny – Nie umieszczaj na publicznych osiach czasu"
},
"preview_empty": "Pusty",
"preview": "Podgląd",
"empty_status_error": "Nie można wysłać pustego wpisu bez plików"
},
"registration": {
"bio": "Bio",
"email": "E-mail",
"fullname": "Wyświetlana nazwa profilu",
"password_confirm": "Potwierdzenie hasła",
"registration": "Rejestracja",
"token": "Token zaproszenia",
"captcha": "CAPTCHA",
"new_captcha": "Naciśnij na obrazek, aby dostać nowy kod captcha",
"username_placeholder": "np. lain",
"fullname_placeholder": "np. Lain Iwakura",
"bio_placeholder": "e.g.\nCześć, jestem Lain.\nJestem dziewczynką z anime żyjącą na peryferiach Japonii. Możesz znać mnie z Wired.",
"validations": {
"username_required": "nie może być pusta",
"fullname_required": "nie może być pusta",
"email_required": "nie może być pusty",
"password_required": "nie może być puste",
"password_confirmation_required": "nie może być puste",
"password_confirmation_match": "musi być takie jak hasło"
}
},
"remote_user_resolver": {
"remote_user_resolver": "Wyszukiwarka użytkowników nietutejszych",
"searching_for": "Szukam",
"error": "Nie znaleziono."
},
"selectable_list": {
"select_all": "Zaznacz wszystko"
},
"settings": {
"app_name": "Nazwa aplikacji",
"security": "Bezpieczeństwo",
"enter_current_password_to_confirm": "Wprowadź obecne hasło, by potwierdzić twoją tożsamość",
"mfa": {
"otp": "OTP",
"setup_otp": "Ustaw OTP",
"wait_pre_setup_otp": "początkowe ustawianie OTP",
"confirm_and_enable": "Potwierdź i włącz OTP",
"title": "Weryfikacja dwuetapowa",
"generate_new_recovery_codes": "Wygeneruj nowe kody zapasowe",
"warning_of_generate_new_codes": "Po tym gdy wygenerujesz nowe kody zapasowe, stare przestaną działać.",
"recovery_codes": "Kody zapasowe.",
"waiting_a_recovery_codes": "Otrzymuję kody zapasowe…",
"recovery_codes_warning": "Spisz kody na kartce papieru, albo zapisz je w bezpiecznym miejscu - inaczej nie zobaczysz ich już nigdy. Jeśli stracisz dostęp do twojej aplikacji 2FA i kodów zapasowych, nie będziesz miał(-a) dostępu do swojego konta.",
"authentication_methods": "Metody weryfikacji",
"scan": {
"title": "Skanuj",
"desc": "Zeskanuj ten kod QR używając twojej aplikacji 2FA albo wpisz ten klucz:",
"secret_code": "Klucz"
},
"verify": {
"desc": "By włączyć weryfikację dwuetapową, wpisz kod z twojej aplikacji 2FA:"
}
},
"allow_following_move": "Zezwalaj na automatyczną obserwację gdy obserwowane konto migruje",
"attachmentRadius": "Załączniki",
"attachments": "Załączniki",
"avatar": "Awatar",
"avatarAltRadius": "Awatary (powiadomienia)",
"avatarRadius": "Awatary",
"background": "Tło",
"bio": "Bio",
"block_export": "Eksport blokad",
"block_export_button": "Eksportuj twoje blokady do pliku .csv",
"block_import": "Import blokad",
"block_import_error": "Wystąpił błąd podczas importowania blokad",
"blocks_imported": "Zaimportowano blokady, przetwarzanie może zająć trochę czasu.",
"blocks_tab": "Bloki",
"btnRadius": "Przyciski",
"cBlue": "Niebieski (odpowiedz, obserwuj)",
"cGreen": "Zielony (powtórzenia)",
"cOrange": "Pomarańczowy (ulubione)",
"cRed": "Czerwony (anuluj)",
"change_email": "Zmień email",
"change_email_error": "Wystąpił problem podczas zmiany emaila.",
"changed_email": "Pomyślnie zmieniono email!",
"change_password": "Zmień hasło",
"change_password_error": "Podczas zmiany hasła wystąpił problem.",
"changed_password": "Pomyślnie zmieniono hasło!",
"collapse_subject": "Zwijaj posty z tematami",
"composing": "Pisanie",
"confirm_new_password": "Potwierdź nowe hasło",
"current_avatar": "Twój obecny awatar",
"current_password": "Obecne hasło",
"current_profile_banner": "Twój obecny banner profilu",
"data_import_export_tab": "Import/eksport danych",
"default_vis": "Domyślny zakres widoczności",
"delete_account": "Usuń konto",
"delete_account_description": "Trwale usuń dane i zdezaktywuj konto.",
"delete_account_error": "Wystąpił problem z usuwaniem twojego konta. Jeżeli problem powtarza się, poinformuj administratora swojej instancji.",
"delete_account_instructions": "Wprowadź swoje hasło w poniższe pole aby potwierdzić usunięcie konta.",
"discoverable": "Zezwól na odkrywanie tego konta w wynikach wyszukiwania i innych usługach",
"domain_mutes": "Domeny",
"avatar_size_instruction": "Zalecany minimalny rozmiar awatarów to 150x150 pikseli.",
"pad_emoji": "Dodaj odstęp z obu stron emoji podczas dodawania selektorem",
"emoji_reactions_on_timeline": "Pokaż reakcje emoji na osi czasu",
"export_theme": "Zapisz motyw",
"filtering": "Filtrowanie",
"filtering_explanation": "Wszystkie statusy zawierające te słowa będą wyciszone. Jedno słowo na linijkę.",
"follow_export": "Eksport obserwowanych",
"follow_export_button": "Eksportuj swoją listę obserwowanych do pliku CSV",
"follow_import": "Import obserwowanych",
"follow_import_error": "Błąd przy importowaniu obserwowanych",
"follows_imported": "Obserwowani zaimportowani! Przetwarzanie może trochę potrwać.",
"accent": "Akcent",
"foreground": "Pierwszy plan",
"general": "Ogólne",
"hide_attachments_in_convo": "Ukrywaj załączniki w rozmowach",
"hide_attachments_in_tl": "Ukrywaj załączniki w osi czasu",
"hide_muted_posts": "Ukrywaj wpisy wyciszonych użytkowników",
"max_thumbnails": "Maksymalna liczba miniatur w poście",
"hide_isp": "Ukryj panel informacji o instancji",
"preload_images": "Ładuj wstępnie obrazy",
"use_one_click_nsfw": "Otwieraj załączniki NSFW jednym kliknięciem",
"hide_post_stats": "Ukrywaj statysyki postów (np. liczbę polubień)",
"hide_user_stats": "Ukrywaj statysyki użytkowników (np. liczbę obserwujących)",
"hide_filtered_statuses": "Ukrywaj filtrowane statusy",
"import_blocks_from_a_csv_file": "Importuj blokady z pliku CSV",
"import_followers_from_a_csv_file": "Importuj obserwowanych z pliku CSV",
"import_theme": "Załaduj motyw",
"inputRadius": "Pola tekstowe",
"checkboxRadius": "Pola wyboru",
"instance_default": "(domyślnie: {value})",
"instance_default_simple": "(domyślne)",
"interface": "Interfejs",
"interfaceLanguage": "Język interfejsu",
"invalid_theme_imported": "Wybrany plik nie jest obsługiwanym motywem Pleromy. Nie dokonano zmian w twoim motywie.",
"limited_availability": "Niedostępne w twojej przeglądarce",
"links": "Łącza",
"lock_account_description": "Spraw, by konto mogli wyświetlać tylko zatwierdzeni obserwujący",
"loop_video": "Zapętlaj filmy",
"loop_video_silent_only": "Zapętlaj tylko filmy bez dźwięku (np. mastodonowe „gify”)",
"mutes_tab": "Wyciszenia",
"play_videos_in_modal": "Odtwarzaj filmy bezpośrednio w przeglądarce mediów",
"use_contain_fit": "Nie przycinaj załączników na miniaturach",
"name": "Imię",
"name_bio": "Imię i bio",
"new_email": "Nowy email",
"new_password": "Nowe hasło",
"notification_visibility": "Rodzaje powiadomień do wyświetlania",
"notification_visibility_follows": "Obserwacje",
"notification_visibility_likes": "Ulubione",
"notification_visibility_mentions": "Wzmianki",
"notification_visibility_repeats": "Powtórzenia",
"notification_visibility_moves": "Użytkownik migruje",
"notification_visibility_emoji_reactions": "Reakcje",
"no_rich_text_description": "Usuwaj formatowanie ze wszystkich postów",
"no_blocks": "Brak blokad",
"no_mutes": "Brak wyciszeń",
"hide_follows_description": "Nie pokazuj kogo obserwuję",
"hide_followers_description": "Nie pokazuj kto mnie obserwuje",
"hide_follows_count_description": "Nie pokazuj licznika obserwowanych",
"hide_followers_count_description": "Nie pokazuj licznika obserwujących",
"show_admin_badge": "Pokazuj odznakę Administrator na moim profilu",
"show_moderator_badge": "Pokazuj odznakę Moderator na moim profilu",
"nsfw_clickthrough": "Włącz domyślne ukrywanie załączników o treści nieprzyzwoitej (NSFW)",
"oauth_tokens": "Tokeny OAuth",
"token": "Token",
"refresh_token": "Odśwież token",
"valid_until": "Ważne do",
"revoke_token": "Odwołać",
"panelRadius": "Panele",
"pause_on_unfocused": "Wstrzymuj strumieniowanie kiedy karta nie jest aktywna",
"presets": "Gotowe motywy",
"profile_background": "Tło profilu",
"profile_banner": "Banner profilu",
"profile_tab": "Profil",
"radii_help": "Ustaw zaokrąglenie krawędzi interfejsu (w pikselach)",
"replies_in_timeline": "Odpowiedzi na osi czasu",
"reply_visibility_all": "Pokazuj wszystkie odpowiedzi",
"reply_visibility_following": "Pokazuj tylko odpowiedzi skierowane do mnie i osób które obserwuję",
"reply_visibility_self": "Pokazuj tylko odpowiedzi skierowane do mnie",
"autohide_floating_post_button": "Ukryj automatycznie przycisk \"Nowy post\" (mobile)",
"saving_err": "Nie udało się zapisać ustawień",
"saving_ok": "Zapisano ustawienia",
"search_user_to_block": "Wyszukaj kogo chcesz zablokować",
"search_user_to_mute": "Wyszukaj kogo chcesz wyciszyć",
"security_tab": "Bezpieczeństwo",
"scope_copy": "Kopiuj zakres podczas odpowiadania (DM-y zawsze są kopiowane)",
"minimal_scopes_mode": "Zminimalizuj opcje wyboru zakresu postów",
"set_new_avatar": "Ustaw nowy awatar",
"set_new_profile_background": "Ustaw nowe tło profilu",
"set_new_profile_banner": "Ustaw nowy banner profilu",
"settings": "Ustawienia",
"subject_input_always_show": "Zawsze pokazuj pole tematu",
"subject_line_behavior": "Kopiuj temat podczas odpowiedzi",
"subject_line_email": "Jak w mailach – „re: temat”",
"subject_line_mastodon": "Jak na Mastodonie – po prostu kopiuj",
"subject_line_noop": "Nie kopiuj",
"post_status_content_type": "Post status content type",
"stop_gifs": "Odtwarzaj GIFy po najechaniu kursorem",
"streaming": "Włącz automatycznie strumieniowanie nowych postów gdy jesteś na początku strony",
"user_mutes": "Użytkownicy",
"useStreamingApi": "Otrzymuj posty i powiadomienia w czasie rzeczywistym",
"useStreamingApiWarning": "(Niezalecane, eksperymentalne, pomija posty)",
"text": "Tekst",
"theme": "Motyw",
"theme_help": "Użyj kolorów w notacji szesnastkowej (#rrggbb), by stworzyć swój motyw.",
"theme_help_v2_1": "Możesz też zastąpić kolory i widoczność poszczególnych komponentów przełączając pola wyboru, użyj „Wyczyść wszystko” aby usunąć wszystkie zastąpienia.",
"theme_help_v2_2": "Ikony pod niektórych wpisami są wskaźnikami kontrastu pomiędzy tłem a tekstem, po najechaniu na nie otrzymasz szczegółowe informacje. Zapamiętaj, że jeżeli używasz przezroczystości, wskaźniki pokazują najgorszy możliwy przypadek.",
"tooltipRadius": "Etykiety/alerty",
"type_domains_to_mute": "Wpisz domeny, które chcesz wyciszyć",
"upload_a_photo": "Wyślij zdjęcie",
"user_settings": "Ustawienia użytkownika",
"values": {
"false": "nie",
"true": "tak"
},
"fun": "Zabawa",
"greentext": "Memiczne strzałki",
"notifications": "Powiadomienia",
"notification_mutes": "By przestać otrzymywać powiadomienia od jednego użytkownika, wycisz go.",
"notification_blocks": "Blokowanie uzytkownika zatrzymuje wszystkie powiadomienia i odsubskrybowuje go.",
"enable_web_push_notifications": "Włącz powiadomienia push",
"style": {
"switcher": {
"keep_color": "Zachowaj kolory",
"keep_shadows": "Zachowaj cienie",
"keep_opacity": "Zachowaj widoczność",
"keep_roundness": "Zachowaj zaokrąglenie",
"keep_fonts": "Zachowaj czcionki",
"save_load_hint": "Opcje „zachowaj” pozwalają na pozostanie przy obecnych opcjach po wybraniu lub załadowaniu motywu, jak i przechowywanie ich podczas eksportowania motywu. Jeżeli wszystkie opcje są odznaczone, eksportowanie motywu spowoduje zapisanie wszystkiego.",
"reset": "Wyzeruj",
"clear_all": "Wyczyść wszystko",
"clear_opacity": "Wyczyść widoczność",
"load_theme": "Załaduj motyw",
"keep_as_is": "Zostaw po staremu",
"use_snapshot": "Stara wersja",
"use_source": "Nowa wersja",
"help": {
"upgraded_from_v2": "PleromaFE zostało zaaktualizowane, motyw może wyglądać nieco inaczej niż zapamiętałeś(-aś).",
"v2_imported": "Plik który zaimportowałeś(-aś) został stworzony dla starszego FE. Próbujemy zwiększyć kompatybilność, lecz wciąż mogą występować rozbieżności.",
"future_version_imported": "Plik który zaimportowałeś(-aś) został stworzony w nowszej wersji FE.",
"older_version_imported": "Plik który zaimportowałeś(-aś) został stworzony w starszej wersji FE.",
"snapshot_present": "Migawka motywu jest załadowana, więc wszystkie wartości zostały nadpisane. Zamiast tego możesz załadować właściwe dane motywu.",
"snapshot_missing": "Nie znaleziono migawki motywu w pliku, więc motyw może wyglądać inaczej niż pierwotnie zaplanowano.",
"fe_upgraded": "Silnik motywów PleromaFE został zaaktualizowany.",
"fe_downgraded": "Wersja PleromaFE została cofnięta.",
"migration_snapshot_ok": "Żeby być bezpiecznym, migawka motywu została załadowana. Możesz spróbować załadować dane motywu.",
"migration_napshot_gone": "Z jakiegoś powodu migawka zniknęła, niektóre rzeczy mogą wyglądać inaczej niż zapamiętałeś(-aś).",
"snapshot_source_mismatch": "Konflikt wersji: najprawdopodobniej FE zostało cofnięte do poprzedniej wersji i zaktualizowane ponownie, jeśli zmieniłeś(-aś) motyw używając starszej wersji FE, najprawdopodobniej chcesz używać starszej wersji, w przeciwnym razie użyj nowej wersji."
}
},
"common": {
"color": "Kolor",
"opacity": "Widoczność",
"contrast": {
"hint": "Współczynnik kontrastu wynosi {ratio}, {level} {context}",
"level": {
"aa": "spełnia wymogi poziomu AA (minimalne)",
"aaa": "spełnia wymogi poziomu AAA (zalecane)",
"bad": "nie spełnia żadnych wymogów dostępności"
},
"context": {
"18pt": "dla dużego tekstu (18pt+)",
"text": "dla tekstu"
}
}
},
"common_colors": {
"_tab_label": "Ogólne",
"main": "Ogólne kolory",
"foreground_hint": "Zajrzyj do karty „Zaawansowane”, aby uzyskać dokładniejszą kontrolę",
"rgbo": "Ikony, wyróżnienia, odznaki"
},
"advanced_colors": {
"_tab_label": "Zaawansowane",
"alert": "Tło alertu",
"alert_error": "Błąd",
"alert_warning": "Ostrzeżenie",
"alert_neutral": "Neutralne",
"post": "Posty/Bio użytkowników",
"badge": "Tło odznaki",
"popover": "Etykiety, menu, popovery",
"badge_notification": "Powiadomienie",
"panel_header": "Nagłówek panelu",
"top_bar": "Górny pasek",
"borders": "Granice",
"buttons": "Przyciski",
"inputs": "Pola wejścia",
"faint_text": "Zanikający tekst",
"underlay": "Podkład",
"poll": "Wykres ankiety",
"icons": "Ikony",
"highlight": "Podświetlone elementy",
"pressed": "Naciśnięte",
"selectedPost": "Wybrany post",
"selectedMenu": "Wybrany element menu",
"disabled": "Wyłączone",
"toggled": "Przełączone",
"tabs": "Karty",
"chat": {
"outgoing": "Wiadomości wychodzące",
"incoming": "Wiadomości przychodzące"
}
},
"radii": {
"_tab_label": "Zaokrąglenie"
},
"shadows": {
"_tab_label": "Cień i podświetlenie",
"component": "Komponent",
"override": "Zastąp",
"shadow_id": "Cień #{value}",
"blur": "Rozmycie",
"spread": "Szerokość",
"inset": "Inset",
"hintV3": "Dla cieni możesz również użyć notacji {0} by użyć inny slot koloru.",
"filter_hint": {
"always_drop_shadow": "Ostrzeżenie, ten cień zawsze używa {0} jeżeli to obsługiwane przez przeglądarkę.",
"drop_shadow_syntax": "{0} nie obsługuje parametru {1} i słowa kluczowego {2}.",
"avatar_inset": "Pamiętaj że użycie jednocześnie cieni inset i nie inset na awatarach może dać nieoczekiwane wyniki z przezroczystymi awatarami.",
"spread_zero": "Cienie o ujemnej szerokości będą widoczne tak, jakby wynosiła ona zero",
"inset_classic": "Cienie inset będą używały {0}"
},
"components": {
"panel": "Panel",
"panelHeader": "Nagłówek panelu",
"topBar": "Górny pasek",
"avatar": "Awatar użytkownika (w widoku profilu)",
"avatarStatus": "Awatar użytkownika (w widoku wpisu)",
"popup": "Wyskakujące okna i podpowiedzi",
"button": "Przycisk",
"buttonHover": "Przycisk (po najechaniu)",
"buttonPressed": "Przycisk (naciśnięty)",
"buttonPressedHover": "Przycisk(naciśnięty+najechany)",
"input": "Pole wejścia"
}
},
"fonts": {
"_tab_label": "Czcionki",
"help": "Wybierz czcionkę używaną przez elementy UI. Jeżeli wybierzesz niestandardową, musisz wpisać dokładnie tę nazwę, pod którą pojawia się w systemie.",
"components": {
"interface": "Interfejs",
"input": "Pola wejścia",
"post": "Tekst postu",
"postCode": "Tekst o stałej szerokości znaków w sformatowanym poście"
},
"family": "Nazwa czcionki",
"size": "Rozmiar (w pikselach)",
"weight": "Grubość",
"custom": "Niestandardowa"
},
"preview": {
"header": "Podgląd",
"content": "Zawartość",
"error": "Przykładowy błąd",
"button": "Przycisk",
"text": "Trochę więcej {0} i {1}",
"mono": "treści",
"input": "Właśnie wróciłem z kościoła",
"faint_link": "pomocny podręcznik",
"fine_print": "Przeczytaj nasz {0}, aby nie nauczyć się niczego przydatnego!",
"header_faint": "W porządku",
"checkbox": "Przeleciałem(-am) przez zasady użytkowania",
"link": "i fajny mały odnośnik"
}
},
"version": {
"title": "Wersja",
"backend_version": "Wersja back-endu",
"frontend_version": "Wersja front-endu"
},
"notification_setting_privacy": "Prywatność",
"notification_setting_filters": "Filtry",
"notification_setting_privacy_option": "Ukryj nadawcę i zawartość powiadomień push",
"reset_avatar": "Zresetuj awatar",
"profile_fields": {
"value": "Zawartość",
"label": "Metadane profilu",
"name": "Nazwa",
"add_field": "Dodaj pole"
},
"bot": "To konto jest prowadzone przez bota",
"notification_setting_hide_notification_contents": "Ukryj nadawcę i zawartość powiadomień push"
},
"time": {
"day": "{0} dzień",
"days": "{0} dni",
"day_short": "{0} d",
"days_short": "{0} d",
"hour": "{0} godzina",
"hours": "{0} godzin",
"hour_short": "{0} godz.",
"hours_short": "{0} godz.",
"in_future": "za {0}",
"in_past": "{0} temu",
"minute": "{0} minuta",
"minutes": "{0} minut",
"minute_short": "{0} min",
"minutes_short": "{0} min",
"month": "{0} miesiąc",
"months": "{0} miesięcy",
"month_short": "{0} mies.",
"months_short": "{0} mies.",
"now": "teraz",
"now_short": "teraz",
"second": "{0} sekunda",
"seconds": "{0} sekund",
"second_short": "{0} s",
"seconds_short": "{0} s",
"week": "{0} tydzień",
"weeks": "{0} tygodni",
"week_short": "{0} tydz.",
"weeks_short": "{0} tyg.",
"year": "{0} rok",
"years": "{0} lata",
"year_short": "{0} r.",
"years_short": "{0} lata"
},
"timeline": {
"collapse": "Zwiń",
"conversation": "Rozmowa",
"error_fetching": "Błąd pobierania",
"load_older": "Załaduj starsze statusy",
"no_retweet_hint": "Wpis oznaczony jako tylko dla obserwujących lub bezpośredni nie może zostać powtórzony",
"repeated": "powtórzył(-a)",
"show_new": "Pokaż nowe",
"up_to_date": "Na bieżąco",
"no_more_statuses": "Brak kolejnych statusów",
"no_statuses": "Brak statusów",
"reload": "Odśwież"
},
"status": {
"favorites": "Ulubione",
"repeats": "Powtórzenia",
"delete": "Usuń status",
"pin": "Przypnij na profilu",
"unpin": "Odepnij z profilu",
"pinned": "Przypnięte",
"delete_confirm": "Czy naprawdę chcesz usunąć ten status?",
"reply_to": "Odpowiedź dla",
"replies_list": "Odpowiedzi:",
"mute_conversation": "Wycisz konwersację",
"unmute_conversation": "Odcisz konwersację",
"status_unavailable": "Status niedostępny",
"copy_link": "Kopiuj link do statusu",
"unbookmark": "Usuń z zakładek",
"bookmark": "Dodaj do zakładek",
"hide_content": "Ukryj zawartość",
"show_content": "Pokaż zawartość"
},
"user_card": {
"approve": "Przyjmij",
"block": "Zablokuj",
"blocked": "Zablokowany!",
"deny": "Odrzuć",
"favorites": "Ulubione",
"follow": "Obserwuj",
"follow_sent": "Wysłano prośbę!",
"follow_progress": "Wysyłam prośbę…",
"follow_again": "Wysłać prośbę ponownie?",
"follow_unfollow": "Przestań obserwować",
"followees": "Obserwowani",
"followers": "Obserwujący",
"following": "Obserwowany!",
"follows_you": "Obserwuje cię!",
"hidden": "Ukryte",
"its_you": "To ty!",
"media": "Media",
"mention": "Wspomnienie",
"mute": "Wycisz",
"muted": "Wyciszony(-a)",
"per_day": "dziennie",
"remote_follow": "Zdalna obserwacja",
"report": "Zgłoś",
"statuses": "Statusy",
"subscribe": "Subskrybuj",
"unsubscribe": "Odsubskrybuj",
"unblock": "Odblokuj",
"unblock_progress": "Odblokowuję…",
"block_progress": "Blokuję…",
"unmute": "Cofnij wyciszenie",
"unmute_progress": "Cofam wyciszenie…",
"mute_progress": "Wyciszam…",
"hide_repeats": "Ukryj powtórzenia",
"show_repeats": "Pokaż powtórzenia",
"admin_menu": {
"moderation": "Moderacja",
"grant_admin": "Przyznaj admina",
"revoke_admin": "Odwołaj admina",
"grant_moderator": "Przyznaj moderatora",
"revoke_moderator": "Odwołaj moderatora",
"activate_account": "Aktywuj konto",
"deactivate_account": "Dezaktywuj konto",
"delete_account": "Usuń konto",
"force_nsfw": "Oznacz wszystkie posty jako NSFW",
"strip_media": "Usuń multimedia z postów",
"force_unlisted": "Wymuś posty na niepubliczne",
"sandbox": "Wymuś by posty były tylko dla obserwujących",
"disable_remote_subscription": "Zakaż obserwowania użytkownika ze zdalnych instancji",
"disable_any_subscription": "Zakaż całkowicie obserwowania użytkownika",
"quarantine": "Zakaż federowania postów od tego użytkownika",
"delete_user": "Usuń użytkownika",
"delete_user_confirmation": "Czy jesteś absolutnie pewny(-a)? Ta operacja nie może być cofnięta."
},
"message": "Napisz"
},
"user_profile": {
"timeline_title": "Oś czasu użytkownika",
"profile_does_not_exist": "Przepraszamy, ten profil nie istnieje.",
"profile_loading_error": "Przepraszamy, wystąpił błąd podczas ładowania tego profilu."
},
"user_reporting": {
"title": "Raportowanie {0}",
"add_comment_description": "Zgłoszenie zostanie wysłane do moderatorów instancji. Możesz dodać powód dlaczego zgłaszasz owe konto poniżej:",
"additional_comments": "Dodatkowe komentarze",
"forward_description": "To konto jest z innego serwera. Wysłać również tam kopię zgłoszenia?",
"forward_to": "Przekaż do {0}",
"submit": "Wyślij",
"generic_error": "Wystąpił błąd podczas przetwarzania twojej prośby."
},
"who_to_follow": {
"more": "Więcej",
"who_to_follow": "Propozycje obserwacji"
},
"tool_tip": {
"media_upload": "Wyślij media",
"repeat": "Powtórz",
"reply": "Odpowiedz",
"favorite": "Dodaj do ulubionych",
"add_reaction": "Dodaj reakcję",
"user_settings": "Ustawienia użytkownika",
"accept_follow_request": "Akceptuj prośbę o możliwość obserwacji",
"reject_follow_request": "Odrzuć prośbę o możliwość obserwacji"
},
"upload": {
"error": {
"base": "Wysyłanie nie powiodło się.",
"file_too_big": "Zbyt duży plik [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Spróbuj ponownie później"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "Ludzie",
"hashtags": "Hasztagi",
"person_talking": "{count} osoba rozmawia o tym",
"people_talking": "{count} osób rozmawia o tym",
"no_results": "Brak wyników"
},
"password_reset": {
"forgot_password": "Zapomniałeś(-aś) hasła?",
"password_reset": "Reset hasła",
"instruction": "Wprowadź swój adres email lub nazwę użytkownika. Wyślemy ci link z którym możesz zresetować hasło.",
"placeholder": "Twój email lub nazwa użytkownika",
"check_email": "Sprawdź pocztę, aby uzyskać link do zresetowania hasła.",
"return_home": "Wróć do strony głównej",
- "not_found": "Nie mogliśmy znaleźć tego emaila lub nazwy użytkownika.",
"too_many_requests": "Przekroczyłeś(-aś) limit prób, spróbuj ponownie później.",
"password_reset_disabled": "Resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji.",
"password_reset_required": "Musisz zresetować hasło, by się zalogować.",
"password_reset_required_but_mailer_is_disabled": "Musisz zresetować hasło, ale resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji."
},
"file_type": {
"file": "Plik",
"image": "Zdjęcie",
"video": "Wideo",
"audio": "Audio"
},
"chats": {
"more": "Więcej",
"delete": "Usuń",
"you": "Ty:",
"delete_confirm": "Czy na pewno chcesz usunąć tą wiadomość?",
"message_user": "Napisz do {nickname}",
"error_sending_message": "Coś poszło nie tak podczas wysyłania wiadomości.",
"error_loading_chat": "Coś poszło nie tak podczas ładowania czatu.",
"empty_message_error": "Nie można wysłać pustej wiadomości",
"new": "Nowy czat"
},
"display_date": {
"today": "Dzisiaj"
}
}
diff --git a/src/i18n/ru.json b/src/i18n/ru.json
index df17293543..3444a26d48 100644
--- a/src/i18n/ru.json
+++ b/src/i18n/ru.json
@@ -1,478 +1,477 @@
{
"chat": {
"title": "Чат"
},
"finder": {
"error_fetching_user": "Пользователь не найден",
"find_user": "Найти пользователя"
},
"general": {
"apply": "Применить",
"submit": "Отправить",
"cancel": "Отмена",
"disable": "Оключить",
"enable": "Включить",
"confirm": "Подтвердить",
"verify": "Проверить",
"more": "Больше",
"generic_error": "Произошла ошибка",
"optional": "не обязательно",
"show_less": "Показать меньше",
"show_more": "Показать больше"
},
"login": {
"login": "Войти",
"logout": "Выйти",
"password": "Пароль",
"placeholder": "e.c. lain",
"register": "Зарегистрироваться",
"username": "Имя пользователя",
"authentication_code": "Код аутентификации",
"enter_recovery_code": "Ввести код восстановления",
"enter_two_factor_code": "Ввести код аутентификации",
"recovery_code": "Код восстановления",
"heading": {
"TotpForm": "Двухфакторная аутентификация",
"RecoveryForm": "Two-factor recovery"
}
},
"nav": {
"back": "Назад",
"chat": "Локальный чат",
"mentions": "Упоминания",
"interactions": "Взаимодействия",
"public_tl": "Публичная лента",
"timeline": "Лента",
"twkn": "Федеративная лента",
"search": "Поиск",
"friend_requests": "Запросы на чтение",
"bookmarks": "Закладки"
},
"notifications": {
"broken_favorite": "Неизвестный статус, ищем...",
"favorited_you": "нравится ваш статус",
"followed_you": "начал(а) читать вас",
"load_older": "Загрузить старые уведомления",
"notifications": "Уведомления",
"read": "Прочесть",
"repeated_you": "повторил(а) ваш статус",
"follow_request": "хочет читать вас"
},
"interactions": {
"favs_repeats": "Повторы и фавориты",
"follows": "Новые подписки",
"load_older": "Загрузить старые взаимодействия"
},
"post_status": {
"account_not_locked_warning": "Ваш аккаунт не {0}. Кто угодно может начать читать вас чтобы видеть посты только для подписчиков.",
"account_not_locked_warning_link": "залочен",
"attachments_sensitive": "Вложения содержат чувствительный контент",
"content_warning": "Тема (не обязательно)",
"default": "Что нового?",
"direct_warning": "Этот пост будет виден только упомянутым пользователям",
"posting": "Отправляется",
"scope_notice": {
"public": "Этот пост будет виден всем",
"private": "Этот пост будет виден только вашим подписчикам",
"unlisted": "Этот пост не будет виден в публичной и федеративной ленте"
},
"scope": {
"direct": "Личное - этот пост видят только те кто в нём упомянут",
"private": "Для подписчиков - этот пост видят только подписчики",
"public": "Публичный - этот пост виден всем",
"unlisted": "Непубличный - этот пост не виден на публичных лентах"
}
},
"registration": {
"bio": "Описание",
"email": "Email",
"fullname": "Отображаемое имя",
"password_confirm": "Подтверждение пароля",
"registration": "Регистрация",
"token": "Код приглашения",
"validations": {
"username_required": "не должно быть пустым",
"fullname_required": "не должно быть пустым",
"email_required": "не должен быть пустым",
"password_required": "не должен быть пустым",
"password_confirmation_required": "не должно быть пустым",
"password_confirmation_match": "должно совпадать с паролем"
}
},
"settings": {
"enter_current_password_to_confirm": "Введите свой текущий пароль",
"mfa": {
"otp": "OTP",
"setup_otp": "Настройка OTP",
"wait_pre_setup_otp": "предварительная настройка OTP",
"confirm_and_enable": "Подтвердить и включить OTP",
"title": "Двухфакторная аутентификация",
"generate_new_recovery_codes": "Получить новые коды востановления",
"warning_of_generate_new_codes": "После получения новых кодов восстановления, старые больше не будут работать.",
"recovery_codes": "Коды восстановления.",
"waiting_a_recovery_codes": "Получение кодов восстановления ...",
"recovery_codes_warning": "Запишите эти коды и держите в безопасном месте - иначе вы их больше не увидите. Если вы потеряете доступ к OTP приложению - без резервных кодов вы больше не сможете залогиниться.",
"authentication_methods": "Методы аутентификации",
"scan": {
"title": "Сканирование",
"desc": "Используйте приложение для двухэтапной аутентификации для сканирования этого QR-код или введите текстовый ключ:",
"secret_code": "Ключ"
},
"verify": {
"desc": "Чтобы включить двухэтапную аутентификации, введите код из вашего приложение для двухэтапной аутентификации:"
}
},
"attachmentRadius": "Прикреплённые файлы",
"attachments": "Вложения",
"avatar": "Аватар",
"avatarAltRadius": "Аватары в уведомлениях",
"avatarRadius": "Аватары",
"background": "Фон",
"bio": "Описание",
"btnRadius": "Кнопки",
"bot": "Это аккаунт бота",
"cBlue": "Ответить, читать",
"cGreen": "Повторить",
"cOrange": "Нравится",
"cRed": "Отменить",
"change_email": "Сменить email",
"change_email_error": "Произошла ошибка при попытке изменить email.",
"changed_email": "Email изменён успешно!",
"change_password": "Сменить пароль",
"change_password_error": "Произошла ошибка при попытке изменить пароль.",
"changed_password": "Пароль изменён успешно!",
"collapse_subject": "Сворачивать посты с темой",
"confirm_new_password": "Подтверждение нового пароля",
"current_avatar": "Текущий аватар",
"current_password": "Текущий пароль",
"current_profile_banner": "Текущий баннер профиля",
"data_import_export_tab": "Импорт / Экспорт данных",
"delete_account": "Удалить аккаунт",
"delete_account_description": "Удалить ваш аккаунт и все ваши сообщения.",
"delete_account_error": "Возникла ошибка в процессе удаления вашего аккаунта. Если это повторяется, свяжитесь с администратором вашего сервера.",
"delete_account_instructions": "Введите ваш пароль в поле ниже для подтверждения удаления.",
"export_theme": "Сохранить Тему",
"filtering": "Фильтрация",
"filtering_explanation": "Все статусы, содержащие данные слова, будут игнорироваться, по одному в строке",
"follow_export": "Экспортировать читаемых",
"follow_export_button": "Экспортировать читаемых в файл .csv",
"follow_export_processing": "Ведётся обработка, скоро вам будет предложено загрузить файл",
"follow_import": "Импортировать читаемых",
"follow_import_error": "Ошибка при импортировании читаемых",
"follows_imported": "Список читаемых импортирован. Обработка займёт некоторое время..",
"foreground": "Передний план",
"general": "Общие",
"hide_attachments_in_convo": "Прятать вложения в разговорах",
"hide_attachments_in_tl": "Прятать вложения в ленте",
"hide_isp": "Скрыть серверную панель",
"import_followers_from_a_csv_file": "Импортировать читаемых из файла .csv",
"import_theme": "Загрузить Тему",
"inputRadius": "Поля ввода",
"checkboxRadius": "Чекбоксы",
"instance_default": "(по умолчанию: {value})",
"instance_default_simple": "(по умолчанию)",
"interface": "Интерфейс",
"interfaceLanguage": "Язык интерфейса",
"limited_availability": "Не доступно в вашем браузере",
"links": "Ссылки",
"lock_account_description": "Аккаунт доступен только подтверждённым подписчикам",
"loop_video": "Зациливать видео",
"loop_video_silent_only": "Зацикливать только беззвучные видео (т.е. \"гифки\" с Mastodon)",
"name": "Имя",
"name_bio": "Имя и описание",
"new_email": "Новый email",
"new_password": "Новый пароль",
"fun": "Потешное",
"greentext": "Мемные стрелочки",
"notification_visibility": "Показывать уведомления",
"notification_visibility_follows": "Подписки",
"notification_visibility_likes": "Лайки",
"notification_visibility_mentions": "Упоминания",
"notification_visibility_repeats": "Повторы",
"no_rich_text_description": "Убрать форматирование из всех постов",
"hide_follows_description": "Не показывать кого я читаю",
"hide_followers_description": "Не показывать кто читает меня",
"hide_follows_count_description": "Не показывать число читаемых пользователей",
"hide_followers_count_description": "Не показывать число моих подписчиков",
"show_admin_badge": "Показывать значок администратора в моем профиле",
"show_moderator_badge": "Показывать значок модератора в моем профиле",
"nsfw_clickthrough": "Включить скрытие NSFW вложений",
"oauth_tokens": "OAuth токены",
"token": "Токен",
"refresh_token": "Рефреш токен",
"valid_until": "Годен до",
"revoke_token": "Удалить",
"panelRadius": "Панели",
"pause_on_unfocused": "Приостановить загрузку когда вкладка не в фокусе",
"presets": "Пресеты",
"profile_background": "Фон профиля",
"profile_banner": "Баннер профиля",
"profile_tab": "Профиль",
"radii_help": "Скругление углов элементов интерфейса (в пикселях)",
"replies_in_timeline": "Ответы в ленте",
"reply_visibility_all": "Показывать все ответы",
"reply_visibility_following": "Показывать только ответы мне или тех на кого я подписан",
"reply_visibility_self": "Показывать только ответы мне",
"autohide_floating_post_button": "Автоматически скрывать кнопку постинга (в мобильной версии)",
"saving_err": "Не удалось сохранить настройки",
"saving_ok": "Сохранено",
"security_tab": "Безопасность",
"scope_copy": "Копировать видимость поста при ответе (всегда включено для Личных Сообщений)",
"minimal_scopes_mode": "Минимизировать набор опций видимости поста",
"set_new_avatar": "Загрузить новый аватар",
"set_new_profile_background": "Загрузить новый фон профиля",
"set_new_profile_banner": "Загрузить новый баннер профиля",
"settings": "Настройки",
"subject_input_always_show": "Всегда показывать поле ввода темы",
"stop_gifs": "Проигрывать GIF анимации только при наведении",
"streaming": "Включить автоматическую загрузку новых сообщений при прокрутке вверх",
"useStreamingApi": "Получать сообщения и уведомления в реальном времени",
"useStreamingApiWarning": "(Не рекомендуется, экспериментально, сообщения могут пропадать)",
"text": "Текст",
"theme": "Тема",
"theme_help": "Используйте шестнадцатеричные коды цветов (#rrggbb) для настройки темы.",
"theme_help_v2_1": "Вы так же можете перепоределить цвета определенных компонентов нажав соотв. галочку. Используйте кнопку \"Очистить всё\" чтобы снять все переопределения.",
"theme_help_v2_2": "Под некоторыми полями ввода это идикаторы контрастности, наведите на них мышью чтобы узнать больше. Приспользовании прозрачности контраст расчитывается для наихудшего варианта.",
"tooltipRadius": "Всплывающие подсказки/уведомления",
"user_settings": "Настройки пользователя",
"values": {
"false": "нет",
"true": "да"
},
"style": {
"switcher": {
"keep_color": "Оставить цвета",
"keep_shadows": "Оставить тени",
"keep_opacity": "Оставить прозрачность",
"keep_roundness": "Оставить скругление",
"keep_fonts": "Оставить шрифты",
"save_load_hint": "Опции \"оставить...\" позволяют сохранить текущие настройки при выборе другой темы или импорта её из файла. Так же они влияют на то какие компоненты будут сохранены при экспорте темы. Когда все галочки сняты все компоненты будут экспортированы.",
"reset": "Сбросить",
"clear_all": "Очистить всё",
"clear_opacity": "Очистить прозрачность"
},
"common": {
"color": "Цвет",
"opacity": "Прозрачность",
"contrast": {
"hint": "Уровень контраста: {ratio}, что {level} {context}",
"level": {
"aa": "соответствует гайдлайну Level AA (минимальный)",
"aaa": "соответствует гайдлайну Level AAA (рекомендуемый)",
"bad": "не соответствует каким либо гайдлайнам"
},
"context": {
"18pt": "для крупного (18pt+) текста",
"text": "для текста"
}
}
},
"common_colors": {
"_tab_label": "Общие",
"main": "Общие цвета",
"foreground_hint": "См. вкладку \"Дополнительно\" для более детального контроля",
"rgbo": "Иконки, акценты, ярылки"
},
"advanced_colors": {
"_tab_label": "Дополнительно",
"alert": "Фон уведомлений",
"alert_error": "Ошибки",
"badge": "Фон значков",
"badge_notification": "Уведомления",
"panel_header": "Заголовок панели",
"top_bar": "Верняя полоска",
"borders": "Границы",
"buttons": "Кнопки",
"inputs": "Поля ввода",
"faint_text": "Маловажный текст"
},
"radii": {
"_tab_label": "Скругление"
},
"shadows": {
"_tab_label": "Светотень",
"component": "Компонент",
"override": "Переопределить",
"shadow_id": "Тень №{value}",
"blur": "Размытие",
"spread": "Разброс",
"inset": "Внутренняя",
"hint": "Для теней вы так же можете использовать --variable в качестве цвета чтобы использовать CSS3-переменные. В таком случае прозрачность работать не будет.",
"filter_hint": {
"always_drop_shadow": "Внимание, эта тень всегда использует {0} когда браузер поддерживает это.",
"drop_shadow_syntax": "{0} не поддерживает параметр {1} и ключевое слово {2}.",
"avatar_inset": "Одновременное использование внутренних и внешних теней на (прозрачных) аватарках может дать не те результаты что вы ожидаете.",
"spread_zero": "Тени с разбросом > 0 будут выглядеть как если бы разброс установлен в 0",
"inset_classic": "Внутренние тени будут использовать {0}"
},
"components": {
"panel": "Панель",
"panelHeader": "Заголовок панели",
"topBar": "Верхняя полоска",
"avatar": "Аватарка (профиль)",
"avatarStatus": "Аватарка (в ленте)",
"popup": "Всплывающие подсказки",
"button": "Кнопки",
"buttonHover": "Кнопки (наведен курсор)",
"buttonPressed": "Кнопки (нажата)",
"buttonPressedHover": "Кнопки (нажата+наведен курсор)",
"input": "Поля ввода"
}
},
"fonts": {
"_tab_label": "Шрифты",
"help": "Выберите тип шрифта для использования в интерфейсе. При выборе варианта \"другой\" надо ввести название шрифта в точности как он называется в системе.",
"components": {
"interface": "Интерфейс",
"input": "Поля ввода",
"post": "Текст постов",
"postCode": "Моноширинный текст в посте (форматирование)"
},
"family": "Шрифт",
"size": "Размер (в пикселях)",
"weight": "Ширина",
"custom": "Другой"
},
"preview": {
"header": "Пример",
"content": "Контент",
"error": "Ошибка стоп 000",
"button": "Кнопка",
"text": "Еще немного {0} и масенькая {1}",
"mono": "контента",
"input": "Что нового?",
"faint_link": "Его придется убрать",
"fine_print": "Если проблемы остались — ваш гуртовщик мыши плохо стоит. {0}.",
"header_faint": "Все идет по плану",
"checkbox": "Я подтверждаю что не было ни единого разрыва",
"link": "ссылка"
}
},
"allow_following_move": "Разрешить автоматически читать новый аккаунт при перемещении на другой сервер",
"hide_user_stats": "Не показывать статистику пользователей (например количество читателей)"
},
"timeline": {
"collapse": "Свернуть",
"conversation": "Разговор",
"error_fetching": "Ошибка при обновлении",
"load_older": "Загрузить старые статусы",
"no_retweet_hint": "Пост помечен как \"только для подписчиков\" или \"личное\" и поэтому не может быть повторён",
"repeated": "повторил(а)",
"show_new": "Показать новые",
"up_to_date": "Обновлено"
},
"status": {
"bookmark": "В закладки",
"unbookmark": "Удалить из закладок"
},
"user_card": {
"block": "Заблокировать",
"blocked": "Заблокирован",
"favorites": "Понравившиеся",
"follow": "Читать",
"follow_sent": "Запрос отправлен!",
"follow_progress": "Запрашиваем…",
"follow_again": "Запросить еще раз?",
"follow_unfollow": "Перестать читать",
"followees": "Читаемые",
"followers": "Читатели",
"following": "Читаю!",
"follows_you": "Читает вас!",
"mute": "Игнорировать",
"muted": "Игнорирую",
"per_day": "в день",
"remote_follow": "Читать удалённо",
"statuses": "Статусы",
"admin_menu": {
"moderation": "Опции модератора",
"grant_admin": "Сделать администратором",
"revoke_admin": "Забрать права администратора",
"grant_moderator": "Сделать модератором",
"revoke_moderator": "Забрать права модератора",
"activate_account": "Активировать аккаунт",
"deactivate_account": "Деактивировать аккаунт",
"delete_account": "Удалить аккаунт",
"force_nsfw": "Отмечать посты пользователя как NSFW",
"strip_media": "Убирать вложения из постов пользователя",
"force_unlisted": "Не добавлять посты в публичные ленты",
"sandbox": "Принудить видимость постов только читателям",
"disable_remote_subscription": "Запретить читать с удаленных серверов",
"disable_any_subscription": "Запретить читать пользователя",
"quarantine": "Не федерировать посты пользователя",
"delete_user": "Удалить пользователя",
"delete_user_confirmation": "Вы уверены? Это действие нельзя отменить."
}
},
"user_profile": {
"timeline_title": "Лента пользователя"
},
"search": {
"people": "Люди",
"hashtags": "Хэштэги",
"person_talking": "Популярно у {count} человека",
"people_talking": "Популярно у {count} человек",
"no_results": "Ничего не найдено"
},
"password_reset": {
"forgot_password": "Забыли пароль?",
"password_reset": "Сброс пароля",
"instruction": "Введите ваш email или имя пользователя, и мы отправим вам ссылку для сброса пароля.",
"placeholder": "Ваш email или имя пользователя",
"check_email": "Проверьте ваш email и перейдите по ссылке для сброса пароля.",
"return_home": "Вернуться на главную страницу",
- "not_found": "Мы не смогли найти аккаунт с таким email-ом или именем пользователя.",
"too_many_requests": "Вы исчерпали допустимое количество попыток, попробуйте позже.",
"password_reset_disabled": "Сброс пароля отключен. Cвяжитесь с администратором вашего сервера."
},
"about": {
"mrf": {
"federation": "Федерация",
"simple": {
"accept_desc": "Данный сервер принимает сообщения только со следующих серверов:",
"ftl_removal_desc": "Данный сервер скрывает следующие сервера с федеративной ленты:",
"media_nsfw_desc": "Данный сервер принужденно помечает вложения со следущих серверов как NSFW:",
"simple_policies": "Правила для определенных серверов",
"accept": "Принимаемые сообщения",
"reject": "Отклоняемые сообщения",
"reject_desc": "Данный сервер не принимает сообщения со следующих серверов:",
"quarantine": "Зона карантина",
"quarantine_desc": "Данный сервер отправляет только публичные посты следующим серверам:",
"ftl_removal": "Скрытие с федеративной ленты",
"media_removal": "Удаление вложений",
"media_removal_desc": "Данный сервер удаляет вложения со следующих серверов:",
"media_nsfw": "Принужденно помеченно как NSFW"
},
"keyword": {
"ftl_removal": "Убрать из федеративной ленты",
"reject": "Отклонить",
"keyword_policies": "Действия на ключевые слова",
"replace": "Заменить",
"is_replaced_by": "→"
},
"mrf_policies": "Активные правила MRF (модуль переписывания сообщений)",
"mrf_policies_desc": "Правила MRF (модуль переписывания сообщений) влияют на федерацию данного сервера. Следующие правила активны:"
},
"staff": "Администрация"
},
"domain_mute_card": {
"mute": "Игнорировать",
"mute_progress": "В процессе…",
"unmute": "Прекратить игнорирование",
"unmute_progress": "В процессе…"
},
"exporter": {
"export": "Экспорт",
"processing": "Запрос в обработке, вам скоро будет предложено загрузить файл"
},
"features_panel": {
"chat": "Чат",
"media_proxy": "Прокси для внешних вложений",
"text_limit": "Лимит символов",
"title": "Особенности",
"gopher": "Gopher"
},
"tool_tip": {
"accept_follow_request": "Принять запрос на чтение",
"reject_follow_request": "Отклонить запрос на чтение"
}
}
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 24b799df50..8c693f4d66 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -1,691 +1,690 @@
{
"chat": {
"title": "聊天"
},
"exporter": {
"export": "导出",
"processing": "正在处理,稍后会提示您下载文件"
},
"features_panel": {
"chat": "聊天",
"gopher": "Gopher",
"media_proxy": "媒体代理",
"scope_options": "可见范围设置",
"text_limit": "文本长度限制",
"title": "功能",
"who_to_follow": "推荐关注"
},
"finder": {
"error_fetching_user": "获取用户时发生错误",
"find_user": "寻找用户"
},
"general": {
"apply": "应用",
"submit": "提交",
"more": "更多",
"generic_error": "发生一个错误",
"optional": "可选项",
"show_more": "展开",
"show_less": "收起",
"cancel": "取消",
"disable": "禁用",
"enable": "启用",
"confirm": "确认",
"verify": "验证",
"dismiss": "忽略"
},
"image_cropper": {
"crop_picture": "裁剪图片",
"save": "保存",
"save_without_cropping": "保存未经裁剪的图片",
"cancel": "取消"
},
"importer": {
"submit": "提交",
"success": "导入成功。",
"error": "导入此文件时出现一个错误。"
},
"login": {
"login": "登录",
"description": "用 OAuth 登录",
"logout": "登出",
"password": "密码",
"placeholder": "例如:lain",
"register": "注册",
"username": "用户名",
"hint": "登录后加入讨论",
"authentication_code": "验证码",
"enter_recovery_code": "输入一个恢复码",
"enter_two_factor_code": "输入一个双重因素验证码",
"recovery_code": "恢复码",
"heading": {
"totp": "双重因素验证",
"recovery": "双重因素恢复"
}
},
"media_modal": {
"previous": "往前",
"next": "往后"
},
"nav": {
"about": "关于",
"back": "后退",
"chat": "本站聊天",
"friend_requests": "关注请求",
"mentions": "提及",
"interactions": "互动",
"dms": "私信",
"public_tl": "公共时间线",
"timeline": "时间线",
"twkn": "所有已知网络",
"user_search": "用户搜索",
"search": "搜索",
"who_to_follow": "推荐关注",
"preferences": "偏好设置",
"administration": "管理员"
},
"notifications": {
"broken_favorite": "未知的状态,正在搜索中…",
"favorited_you": "收藏了你的状态",
"followed_you": "关注了你",
"load_older": "加载更早的通知",
"notifications": "通知",
"read": "阅读!",
"repeated_you": "转发了你的状态",
"no_more_notifications": "没有更多的通知",
"reacted_with": "和 {0} 互动过",
"migrated_to": "迁移到",
"follow_request": "想要关注你"
},
"polls": {
"add_poll": "增加问卷调查",
"add_option": "增加选项",
"option": "选项",
"votes": "投票",
"vote": "投票",
"type": "问卷类型",
"single_choice": "单选项",
"multiple_choices": "多选项",
"expiry": "问卷的时间",
"expires_in": "投票于 {0} 内结束",
"expired": "投票 {0} 前已结束",
"not_enough_options": "投票的选项太少"
},
"stickers": {
"add_sticker": "添加贴纸"
},
"interactions": {
"favs_repeats": "转发和收藏",
"follows": "新的关注者",
"load_older": "加载更早的互动",
"moves": "用户迁移"
},
"post_status": {
"new_status": "发布新状态",
"account_not_locked_warning": "你的帐号没有 {0}。任何人都可以关注你并浏览你的上锁内容。",
"account_not_locked_warning_link": "上锁",
"attachments_sensitive": "标记附件为敏感内容",
"content_type": {
"text/plain": "纯文本",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "主题(可选)",
"default": "刚刚抵达上海",
"direct_warning_to_all": "本条内容只有被提及的用户能够看到。",
"direct_warning_to_first_only": "本条内容只有被在消息开始处提及的用户能够看到。",
"posting": "发送",
"scope_notice": {
"public": "本条内容可以被所有人看到",
"private": "关注你的人才能看到本条内容",
"unlisted": "本条内容既不在公共时间线,也不会在所有已知网络上可见"
},
"scope": {
"direct": "私信 - 只发送给被提及的用户",
"private": "仅关注者 - 只有关注了你的人能看到",
"public": "公共 - 发送到公共时间轴",
"unlisted": "不公开 - 不会发送到公共时间轴"
}
},
"registration": {
"bio": "简介",
"email": "电子邮箱",
"fullname": "全名",
"password_confirm": "确认密码",
"registration": "注册",
"token": "邀请码",
"captcha": "CAPTCHA",
"new_captcha": "点击图片获取新的验证码",
"username_placeholder": "例如:lain",
"fullname_placeholder": "例如:岩仓玲音",
"bio_placeholder": "例如:\n你好,我是玲音。\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。",
"validations": {
"username_required": "不能留空",
"fullname_required": "不能留空",
"email_required": "不能留空",
"password_required": "不能留空",
"password_confirmation_required": "不能留空",
"password_confirmation_match": "密码不一致"
}
},
"selectable_list": {
"select_all": "选择全部"
},
"settings": {
"app_name": "App 名称",
"security": "安全",
"enter_current_password_to_confirm": "输入你当前密码来确认你的身份",
"mfa": {
"otp": "OTP",
"setup_otp": "设置 OTP",
"wait_pre_setup_otp": "预设 OTP",
"confirm_and_enable": "确认并启用 OTP",
"title": "双因素验证",
"generate_new_recovery_codes": "生成新的恢复码",
"warning_of_generate_new_codes": "当你生成新的恢复码时,你的旧恢复码就失效了。",
"recovery_codes": "恢复码。",
"waiting_a_recovery_codes": "正在接收备份码…",
"recovery_codes_warning": "抄写这些号码,或者保存在安全的地方。这些号码不会再次显示。如果你无法访问你的 2FA app,也丢失了你的恢复码,你的账号就再也无法登录了。",
"authentication_methods": "身份验证方法",
"scan": {
"title": "扫一下",
"desc": "使用你的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:",
"secret_code": "密钥"
},
"verify": {
"desc": "要启用双因素验证,请把你的双因素验证 app 里的数字输入:"
}
},
"attachmentRadius": "附件",
"attachments": "附件",
"avatar": "头像",
"avatarAltRadius": "头像(通知)",
"avatarRadius": "头像",
"background": "背景",
"bio": "简介",
"block_export": "拉黑名单导出",
"block_export_button": "导出你的拉黑名单到一个 csv 文件",
"block_import": "拉黑名单导入",
"block_import_error": "导入拉黑名单出错",
"blocks_imported": "拉黑名单导入成功!需要一点时间来处理。",
"blocks_tab": "块",
"btnRadius": "按钮",
"cBlue": "蓝色(回复,关注)",
"cGreen": "绿色(转发)",
"cOrange": "橙色(收藏)",
"cRed": "红色(取消)",
"change_password": "修改密码",
"change_password_error": "修改密码的时候出了点问题。",
"changed_password": "成功修改了密码!",
"collapse_subject": "折叠带主题的内容",
"composing": "正在书写",
"confirm_new_password": "确认新密码",
"current_avatar": "当前头像",
"current_password": "当前密码",
"current_profile_banner": "您当前的横幅图片",
"data_import_export_tab": "数据导入/导出",
"default_vis": "默认可见范围",
"delete_account": "删除账户",
"delete_account_description": "永久删除你的帐号和所有数据。",
"delete_account_error": "删除账户时发生错误,如果一直删除不了,请联系实例管理员。",
"delete_account_instructions": "在下面输入你的密码来确认删除账户",
"avatar_size_instruction": "推荐的头像图片最小的尺寸是 150x150 像素。",
"export_theme": "导出预置主题",
"filtering": "过滤器",
"filtering_explanation": "所有包含以下词汇的内容都会被隐藏,一行一个",
"follow_export": "导出关注",
"follow_export_button": "将关注导出成 csv 文件",
"follow_import": "导入关注",
"follow_import_error": "导入关注时错误",
"follows_imported": "关注已导入!尚需要一些时间来处理。",
"foreground": "前景",
"general": "通用",
"hide_attachments_in_convo": "在对话中隐藏附件",
"hide_attachments_in_tl": "在时间线上隐藏附件",
"hide_muted_posts": "不显示被隐藏的用户的帖子",
"max_thumbnails": "最多再每个帖子所能显示的缩略图数量",
"hide_isp": "隐藏指定实例的面板H",
"preload_images": "预载图片",
"use_one_click_nsfw": "点击一次以打开工作场所不适宜的附件",
"hide_post_stats": "隐藏推文相关的统计数据(例如:收藏的次数)",
"hide_user_stats": "隐藏用户的统计数据(例如:关注者的数量)",
"hide_filtered_statuses": "隐藏过滤的状态",
"import_blocks_from_a_csv_file": "从 csv 文件中导入拉黑名单",
"import_followers_from_a_csv_file": "从 csv 文件中导入关注",
"import_theme": "导入预置主题",
"inputRadius": "输入框",
"checkboxRadius": "复选框",
"instance_default": "(默认:{value})",
"instance_default_simple": "(默认)",
"interface": "界面",
"interfaceLanguage": "界面语言",
"invalid_theme_imported": "您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。",
"limited_availability": "在您的浏览器中无法使用",
"links": "链接",
"lock_account_description": "你需要手动审核关注请求",
"loop_video": "循环视频",
"loop_video_silent_only": "只循环没有声音的视频(例如:Mastodon 里的“GIF”)",
"mutes_tab": "隐藏",
"play_videos_in_modal": "在弹出框内播放视频",
"use_contain_fit": "生成缩略图时不要裁剪附件",
"name": "名字",
"name_bio": "名字及简介",
"new_password": "新密码",
"notification_visibility": "要显示的通知类型",
"notification_visibility_follows": "关注",
"notification_visibility_likes": "点赞",
"notification_visibility_mentions": "提及",
"notification_visibility_repeats": "转发",
"no_rich_text_description": "不显示富文本格式",
"no_blocks": "没有拉黑的",
"no_mutes": "没有隐藏",
"hide_follows_description": "不要显示我所关注的人",
"hide_followers_description": "不要显示关注我的人",
"show_admin_badge": "显示管理徽章",
"show_moderator_badge": "显示版主徽章",
"nsfw_clickthrough": "将不和谐附件隐藏,点击才能打开",
"oauth_tokens": "OAuth令牌",
"token": "令牌",
"refresh_token": "刷新令牌",
"valid_until": "有效期至",
"revoke_token": "撤消",
"panelRadius": "面板",
"pause_on_unfocused": "在离开页面时暂停时间线推送",
"presets": "预置",
"profile_background": "个人资料背景图",
"profile_banner": "横幅图片",
"profile_tab": "个人资料",
"radii_help": "设置界面边缘的圆角 (单位:像素)",
"replies_in_timeline": "时间线中的回复",
"reply_visibility_all": "显示所有回复",
"reply_visibility_following": "只显示发送给我的回复/发送给我关注的用户的回复",
"reply_visibility_self": "只显示发送给我的回复",
"autohide_floating_post_button": "自动隐藏新帖子的按钮(移动设备)",
"saving_err": "保存设置时发生错误",
"saving_ok": "设置已保存",
"search_user_to_block": "搜索你想屏蔽的用户",
"search_user_to_mute": "搜索你想要隐藏的用户",
"security_tab": "安全",
"scope_copy": "回复时的复制范围(私信是总是复制的)",
"minimal_scopes_mode": "最小发文范围",
"set_new_avatar": "设置新头像",
"set_new_profile_background": "设置新的个人资料背景",
"set_new_profile_banner": "设置新的横幅图片",
"settings": "设置",
"subject_input_always_show": "总是显示主题框",
"subject_line_behavior": "回复时复制主题",
"subject_line_email": "比如电邮: \"re: 主题\"",
"subject_line_mastodon": "比如 mastodon: copy as is",
"subject_line_noop": "不要复制",
"post_status_content_type": "发文状态内容类型",
"stop_gifs": "鼠标悬停时播放GIF",
"streaming": "开启滚动到顶部时的自动推送",
"text": "文本",
"theme": "主题",
"theme_help": "使用十六进制代码(#rrggbb)来设置主题颜色。",
"theme_help_v2_1": "你也可以通过切换复选框来覆盖某些组件的颜色和透明。使用“清除所有”来清楚所有覆盖设置。",
"theme_help_v2_2": "某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。",
"tooltipRadius": "提醒",
"upload_a_photo": "上传照片",
"user_settings": "用户设置",
"values": {
"false": "否",
"true": "是"
},
"notifications": "通知",
"notification_mutes": "要停止收到某个指定的用户的通知,请使用隐藏功能。",
"notification_blocks": "拉黑一个用户会停掉所有他的通知,等同于取消关注。",
"enable_web_push_notifications": "启用 web 推送通知",
"style": {
"switcher": {
"keep_color": "保留颜色",
"keep_shadows": "保留阴影",
"keep_opacity": "保留透明度",
"keep_roundness": "保留圆角",
"keep_fonts": "保留字体",
"save_load_hint": "\"保留\" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。",
"reset": "重置",
"clear_all": "清除全部",
"clear_opacity": "清除透明度",
"load_theme": "加载主题",
"help": {
"upgraded_from_v2": "PleromaFE 已升级,主题会和你记忆中的不太一样。"
},
"use_source": "新版本",
"use_snapshot": "老版本",
"keep_as_is": "保持原状"
},
"common": {
"color": "颜色",
"opacity": "透明度",
"contrast": {
"hint": "对比度是 {ratio}, 它 {level} {context}",
"level": {
"aa": "符合 AA 等级准则(最低)",
"aaa": "符合 AAA 等级准则(推荐)",
"bad": "不符合任何辅助功能指南"
},
"context": {
"18pt": "大字文本 (18pt+)",
"text": "文本"
}
}
},
"common_colors": {
"_tab_label": "常规",
"main": "常用颜色",
"foreground_hint": "点击”高级“ 标签进行细致的控制",
"rgbo": "图标,口音,徽章"
},
"advanced_colors": {
"_tab_label": "高级",
"alert": "提醒或警告背景色",
"alert_error": "错误",
"badge": "徽章背景",
"badge_notification": "通知",
"panel_header": "面板标题",
"top_bar": "顶栏",
"borders": "边框",
"buttons": "按钮",
"inputs": "输入框",
"faint_text": "灰度文字"
},
"radii": {
"_tab_label": "圆角"
},
"shadows": {
"_tab_label": "阴影和照明",
"component": "组件",
"override": "覆盖",
"shadow_id": "阴影 #{value}",
"blur": "模糊",
"spread": "扩散",
"inset": "插入内部",
"hint": "对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。",
"filter_hint": {
"always_drop_shadow": "警告,此阴影设置会总是使用 {0} ,如果浏览器支持的话。",
"drop_shadow_syntax": "{0} 不支持参数 {1} 和关键词 {2} 。",
"avatar_inset": "请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。",
"spread_zero": "阴影的扩散 > 0 会同设置成零一样",
"inset_classic": "插入内部的阴影会使用 {0}"
},
"components": {
"panel": "面板",
"panelHeader": "面板标题",
"topBar": "顶栏",
"avatar": "用户头像(在个人资料栏)",
"avatarStatus": "用户头像(在帖子显示栏)",
"popup": "弹窗和工具提示",
"button": "按钮",
"buttonHover": "按钮(悬停)",
"buttonPressed": "按钮(按下)",
"buttonPressedHover": "按钮(按下和悬停)",
"input": "输入框"
}
},
"fonts": {
"_tab_label": "字体",
"help": "给用户界面的元素选择字体。选择 “自选”的你必须输入确切的字体名称。",
"components": {
"interface": "界面",
"input": "输入框",
"post": "发帖文字",
"postCode": "帖子中使用等间距文字(富文本)"
},
"family": "字体名称",
"size": "大小 (in px)",
"weight": "字重 (粗体))",
"custom": "自选"
},
"preview": {
"header": "预览",
"content": "内容",
"error": "例子错误",
"button": "按钮",
"text": "有堆 {0} 和 {1}",
"mono": "内容",
"input": "刚刚抵达上海",
"faint_link": "帮助菜单",
"fine_print": "阅读我们的 {0} ,然而什么也学不到!",
"header_faint": "这很正常",
"checkbox": "我已经浏览了 TOC",
"link": "一个很棒的摇滚链接"
}
},
"version": {
"title": "版本",
"backend_version": "后端版本",
"frontend_version": "前端版本"
},
"notification_setting_filters": "过滤器",
"domain_mutes": "域名",
"changed_email": "邮箱修改成功!",
"change_email_error": "修改你的电子邮箱时发生错误",
"change_email": "修改电子邮箱",
"allow_following_move": "正在关注的账号迁移时自动重新关注",
"notification_setting_privacy_option": "在通知推送中隐藏发送者和内容",
"notification_setting_privacy": "隐私",
"hide_follows_count_description": "不显示关注数",
"notification_visibility_emoji_reactions": "互动",
"notification_visibility_moves": "用户迁移",
"new_email": "新邮箱",
"emoji_reactions_on_timeline": "在时间线上显示表情符号互动"
},
"time": {
"day": "{0} 天",
"days": "{0} 天",
"day_short": "{0}d",
"days_short": "{0}d",
"hour": "{0} 小时",
"hours": "{0} 小时",
"hour_short": "{0}h",
"hours_short": "{0}h",
"in_future": "还有 {0}",
"in_past": "{0} 之前",
"minute": "{0} 分钟",
"minutes": "{0} 分钟",
"minute_short": "{0}min",
"minutes_short": "{0}min",
"month": "{0} 月",
"months": "{0} 月",
"month_short": "{0}mo",
"months_short": "{0}mo",
"now": "刚刚",
"now_short": "刚刚",
"second": "{0} 秒",
"seconds": "{0} 秒",
"second_short": "{0}s",
"seconds_short": "{0}s",
"week": "{0} 周",
"weeks": "{0} 周",
"week_short": "{0}w",
"weeks_short": "{0}w",
"year": "{0} 年",
"years": "{0} 年",
"year_short": "{0}y",
"years_short": "{0}y"
},
"timeline": {
"collapse": "折叠",
"conversation": "对话",
"error_fetching": "获取更新时发生错误",
"load_older": "加载更早的状态",
"no_retweet_hint": "这条内容仅关注者可见,或者是私信,因此不能转发。",
"repeated": "已转发",
"show_new": "显示新内容",
"up_to_date": "已是最新",
"no_more_statuses": "没有更多的状态",
"no_statuses": "没有状态更新"
},
"status": {
"favorites": "收藏",
"repeats": "转发",
"delete": "删除状态",
"pin": "在个人资料置顶",
"unpin": "取消在个人资料置顶",
"pinned": "置顶",
"delete_confirm": "你真的想要删除这条状态吗?",
"reply_to": "回复",
"replies_list": "回复:",
"mute_conversation": "隐藏对话",
"unmute_conversation": "对话取消隐藏"
},
"user_card": {
"approve": "允许",
"block": "屏蔽",
"blocked": "已屏蔽!",
"deny": "拒绝",
"favorites": "收藏",
"follow": "关注",
"follow_sent": "请求已发送!",
"follow_progress": "请求中",
"follow_again": "再次发送请求?",
"follow_unfollow": "取消关注",
"followees": "正在关注",
"followers": "关注者",
"following": "正在关注!",
"follows_you": "关注了你!",
"its_you": "就是你!!",
"media": "媒体",
"mute": "隐藏",
"muted": "已隐藏",
"per_day": "每天",
"remote_follow": "跨站关注",
"report": "报告",
"statuses": "状态",
"subscribe": "订阅",
"unsubscribe": "退订",
"unblock": "取消拉黑",
"unblock_progress": "取消拉黑中…",
"block_progress": "拉黑中…",
"unmute": "取消隐藏",
"unmute_progress": "取消隐藏中…",
"mute_progress": "隐藏中…",
"admin_menu": {
"moderation": "权限",
"grant_admin": "赋予管理权限",
"revoke_admin": "撤销管理权限",
"grant_moderator": "赋予版主权限",
"revoke_moderator": "撤销版主权限",
"activate_account": "激活账号",
"deactivate_account": "关闭账号",
"delete_account": "删除账号",
"force_nsfw": "标记所有的帖子都是 - 工作场合不适",
"strip_media": "从帖子里删除媒体文件",
"force_unlisted": "强制帖子为不公开",
"sandbox": "强制帖子为只有关注者可看",
"disable_remote_subscription": "禁止从远程实例关注用户",
"disable_any_subscription": "完全禁止关注用户",
"quarantine": "从联合实例中禁止用户帖子",
"delete_user": "删除用户",
"delete_user_confirmation": "你确认吗?此操作无法撤销。"
},
"hidden": "已隐藏",
"show_repeats": "显示转发",
"hide_repeats": "隐藏转发"
},
"user_profile": {
"timeline_title": "用户时间线",
"profile_does_not_exist": "抱歉,此个人资料不存在。",
"profile_loading_error": "抱歉,载入个人资料时出错。"
},
"user_reporting": {
"title": "报告 {0}",
"add_comment_description": "此报告会发送给你的实例管理员。你可以在下面提供更多详细信息解释报告的缘由:",
"additional_comments": "其它信息",
"forward_description": "这个账号是从另外一个服务器。同时发送一个副本到那里?",
"forward_to": "转发 {0}",
"submit": "提交",
"generic_error": "当处理你的请求时,发生了一个错误。"
},
"who_to_follow": {
"more": "更多",
"who_to_follow": "推荐关注"
},
"tool_tip": {
"media_upload": "上传多媒体",
"repeat": "转发",
"reply": "回复",
"favorite": "收藏",
"user_settings": "用户设置",
"reject_follow_request": "拒绝关注请求",
"add_reaction": "添加互动"
},
"upload": {
"error": {
"base": "上传不成功。",
"file_too_big": "文件太大了 [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "迟些再试"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
},
"search": {
"people": "人",
"hashtags": "Hashtags",
"person_talking": "{count} 人正在讨论",
"people_talking": "{count} 人正在讨论",
"no_results": "没有搜索结果"
},
"password_reset": {
"forgot_password": "忘记密码了?",
"password_reset": "重置密码",
"instruction": "输入你的电邮地址或者用户名,我们将发送一个链接到你的邮箱,用于重置密码。",
"placeholder": "你的电邮地址或者用户名",
"check_email": "检查你的邮箱,会有一个链接用于重置密码。",
"return_home": "回到首页",
- "not_found": "我们无法找到匹配的邮箱地址或者用户名。",
"too_many_requests": "你触发了尝试的限制,请稍后再试。",
"password_reset_disabled": "密码重置已经被禁用。请联系你的实例管理员。"
},
"remote_user_resolver": {
"error": "未找到。",
"searching_for": "搜索",
"remote_user_resolver": "远程用户解析器"
},
"emoji": {
"keep_open": "选择器保持打开",
"stickers": "贴图",
"unicode": "Unicode 表情符号",
"custom": "自定义表情符号",
"add_emoji": "插入表情符号",
"search_emoji": "搜索表情符号",
"emoji": "表情符号"
},
"about": {
"mrf": {
"simple": {
"quarantine_desc": "本实例只会把公开状态发送非下列实例:",
"quarantine": "隔离",
"reject_desc": "本实例不会接收来自下列实例的消息:",
"reject": "拒绝",
"accept_desc": "本实例只接收来自下列实例的消息:",
"simple_policies": "站规",
"accept": "接受",
"media_removal": "移除媒体"
},
"mrf_policies_desc": "MRF 策略会影响本实例的互通行为。以下策略已启用:",
"mrf_policies": "已启动 MRF 策略",
"keyword": {
"ftl_removal": "从“全部已知网络”时间线上移除",
"keyword_policies": "关键词策略",
"is_replaced_by": "→",
"replace": "替换",
"reject": "拒绝"
},
"federation": "联邦"
}
},
"domain_mute_card": {
"unmute_progress": "正在取消隐藏…",
"unmute": "取消隐藏",
"mute_progress": "隐藏中…",
"mute": "隐藏"
}
}
diff --git a/src/modules/chats.js b/src/modules/chats.js
index c760901809..c5715c1451 100644
--- a/src/modules/chats.js
+++ b/src/modules/chats.js
@@ -1,234 +1,221 @@
import Vue from 'vue'
import { find, omitBy, orderBy, sumBy } from 'lodash'
import chatService from '../services/chat_service/chat_service.js'
import { parseChat, parseChatMessage } from '../services/entity_normalizer/entity_normalizer.service.js'
import { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'
const emptyChatList = () => ({
data: [],
idStore: {}
})
const defaultState = {
chatList: emptyChatList(),
chatListFetcher: null,
openedChats: {},
openedChatMessageServices: {},
fetcher: undefined,
currentChatId: null
}
const getChatById = (state, id) => {
return find(state.chatList.data, { id })
}
const sortedChatList = (state) => {
return orderBy(state.chatList.data, ['updated_at'], ['desc'])
}
const unreadChatCount = (state) => {
return sumBy(state.chatList.data, 'unread')
}
const chats = {
state: { ...defaultState },
getters: {
currentChat: state => state.openedChats[state.currentChatId],
currentChatMessageService: state => state.openedChatMessageServices[state.currentChatId],
findOpenedChatByRecipientId: state => recipientId => find(state.openedChats, c => c.account.id === recipientId),
sortedChatList,
unreadChatCount
},
actions: {
// Chat list
startFetchingChats ({ dispatch, commit }) {
const fetcher = () => {
dispatch('fetchChats', { latest: true })
}
fetcher()
commit('setChatListFetcher', {
fetcher: () => setInterval(() => { fetcher() }, 5000)
})
},
stopFetchingChats ({ commit }) {
commit('setChatListFetcher', { fetcher: undefined })
},
fetchChats ({ dispatch, rootState, commit }, params = {}) {
return rootState.api.backendInteractor.chats()
.then(({ chats }) => {
dispatch('addNewChats', { chats })
return chats
})
},
addNewChats (store, { chats }) {
const { commit, dispatch, rootGetters } = store
const newChatMessageSideEffects = (chat) => {
maybeShowChatNotification(store, chat)
}
commit('addNewChats', { dispatch, chats, rootGetters, newChatMessageSideEffects })
},
updateChat ({ commit }, { chat }) {
commit('updateChat', { chat })
},
// Opened Chats
startFetchingCurrentChat ({ commit, dispatch }, { fetcher }) {
dispatch('setCurrentChatFetcher', { fetcher })
},
setCurrentChatFetcher ({ rootState, commit }, { fetcher }) {
commit('setCurrentChatFetcher', { fetcher })
},
addOpenedChat ({ rootState, commit, dispatch }, { chat }) {
commit('addOpenedChat', { dispatch, chat: parseChat(chat) })
dispatch('addNewUsers', [chat.account])
},
addChatMessages ({ commit }, value) {
commit('addChatMessages', { commit, ...value })
},
resetChatNewMessageCount ({ commit }, value) {
commit('resetChatNewMessageCount', value)
},
clearCurrentChat ({ rootState, commit, dispatch }, value) {
commit('setCurrentChatId', { chatId: undefined })
commit('setCurrentChatFetcher', { fetcher: undefined })
},
readChat ({ rootState, commit, dispatch }, { id, lastReadId }) {
dispatch('resetChatNewMessageCount')
commit('readChat', { id })
rootState.api.backendInteractor.readChat({ id, lastReadId })
},
deleteChatMessage ({ rootState, commit }, value) {
rootState.api.backendInteractor.deleteChatMessage(value)
commit('deleteChatMessage', { commit, ...value })
},
resetChats ({ commit, dispatch }) {
dispatch('clearCurrentChat')
commit('resetChats', { commit })
},
clearOpenedChats ({ rootState, commit, dispatch, rootGetters }) {
commit('clearOpenedChats', { commit })
}
},
mutations: {
setChatListFetcher (state, { commit, fetcher }) {
const prevFetcher = state.chatListFetcher
if (prevFetcher) {
clearInterval(prevFetcher)
}
state.chatListFetcher = fetcher && fetcher()
},
setCurrentChatFetcher (state, { fetcher }) {
const prevFetcher = state.fetcher
if (prevFetcher) {
clearInterval(prevFetcher)
}
state.fetcher = fetcher && fetcher()
},
addOpenedChat (state, { _dispatch, chat }) {
state.currentChatId = chat.id
Vue.set(state.openedChats, chat.id, chat)
if (!state.openedChatMessageServices[chat.id]) {
Vue.set(state.openedChatMessageServices, chat.id, chatService.empty(chat.id))
}
},
setCurrentChatId (state, { chatId }) {
state.currentChatId = chatId
},
addNewChats (state, { chats, newChatMessageSideEffects }) {
chats.forEach((updatedChat) => {
const chat = getChatById(state, updatedChat.id)
if (chat) {
const isNewMessage = (chat.lastMessage && chat.lastMessage.id) !== (updatedChat.lastMessage && updatedChat.lastMessage.id)
chat.lastMessage = updatedChat.lastMessage
chat.unread = updatedChat.unread
+ chat.updated_at = updatedChat.updated_at
if (isNewMessage && chat.unread) {
newChatMessageSideEffects(updatedChat)
}
} else {
state.chatList.data.push(updatedChat)
Vue.set(state.chatList.idStore, updatedChat.id, updatedChat)
}
})
},
updateChat (state, { _dispatch, chat: updatedChat, _rootGetters }) {
const chat = getChatById(state, updatedChat.id)
if (chat) {
chat.lastMessage = updatedChat.lastMessage
chat.unread = updatedChat.unread
chat.updated_at = updatedChat.updated_at
}
if (!chat) { state.chatList.data.unshift(updatedChat) }
Vue.set(state.chatList.idStore, updatedChat.id, updatedChat)
},
deleteChat (state, { _dispatch, id, _rootGetters }) {
state.chats.data = state.chats.data.filter(conversation =>
conversation.last_status.id !== id
)
state.chats.idStore = omitBy(state.chats.idStore, conversation => conversation.last_status.id === id)
},
resetChats (state, { commit }) {
state.chatList = emptyChatList()
state.currentChatId = null
commit('setChatListFetcher', { fetcher: undefined })
for (const chatId in state.openedChats) {
chatService.clear(state.openedChatMessageServices[chatId])
Vue.delete(state.openedChats, chatId)
Vue.delete(state.openedChatMessageServices, chatId)
}
},
setChatsLoading (state, { value }) {
state.chats.loading = value
},
- addChatMessages (state, { commit, chatId, messages }) {
+ addChatMessages (state, { chatId, messages, updateMaxId }) {
const chatMessageService = state.openedChatMessageServices[chatId]
if (chatMessageService) {
- chatService.add(chatMessageService, { messages: messages.map(parseChatMessage) })
- commit('refreshLastMessage', { chatId })
+ chatService.add(chatMessageService, { messages: messages.map(parseChatMessage), updateMaxId })
}
},
- refreshLastMessage (state, { chatId }) {
- const chatMessageService = state.openedChatMessageServices[chatId]
- if (chatMessageService) {
- const chat = getChatById(state, chatId)
- if (chat) {
- chat.lastMessage = chatMessageService.lastMessage
- if (chatMessageService.lastMessage) {
- chat.updated_at = chatMessageService.lastMessage.created_at
- }
- }
- }
- },
- deleteChatMessage (state, { commit, chatId, messageId }) {
+ deleteChatMessage (state, { chatId, messageId }) {
const chatMessageService = state.openedChatMessageServices[chatId]
if (chatMessageService) {
chatService.deleteMessage(chatMessageService, messageId)
- commit('refreshLastMessage', { chatId })
}
},
resetChatNewMessageCount (state, _value) {
const chatMessageService = state.openedChatMessageServices[state.currentChatId]
chatService.resetNewMessageCount(chatMessageService)
},
// Used when a connection loss occurs
clearOpenedChats (state) {
const currentChatId = state.currentChatId
for (const chatId in state.openedChats) {
if (currentChatId !== chatId) {
chatService.clear(state.openedChatMessageServices[chatId])
Vue.delete(state.openedChats, chatId)
Vue.delete(state.openedChatMessageServices, chatId)
}
}
},
readChat (state, { id }) {
const chat = getChatById(state, id)
if (chat) {
chat.unread = 0
}
}
}
}
export default chats
diff --git a/src/modules/interface.js b/src/modules/interface.js
index 748d30258f..d6db32fd99 100644
--- a/src/modules/interface.js
+++ b/src/modules/interface.js
@@ -1,131 +1,142 @@
import { set, delete as del } from 'vue'
const defaultState = {
settingsModalState: 'hidden',
settingsModalLoaded: false,
+ settingsModalTargetTab: null,
settings: {
currentSaveStateNotice: null,
noticeClearTimeout: null,
notificationPermission: null
},
browserSupport: {
cssFilter: window.CSS && window.CSS.supports && (
window.CSS.supports('filter', 'drop-shadow(0 0)') ||
window.CSS.supports('-webkit-filter', 'drop-shadow(0 0)')
)
},
mobileLayout: false,
globalNotices: [],
layoutHeight: 0,
lastTimeline: null
}
const interfaceMod = {
state: defaultState,
mutations: {
settingsSaved (state, { success, error }) {
if (success) {
if (state.noticeClearTimeout) {
clearTimeout(state.noticeClearTimeout)
}
set(state.settings, 'currentSaveStateNotice', { error: false, data: success })
set(state.settings, 'noticeClearTimeout',
setTimeout(() => del(state.settings, 'currentSaveStateNotice'), 2000))
} else {
set(state.settings, 'currentSaveStateNotice', { error: true, errorData: error })
}
},
setNotificationPermission (state, permission) {
state.notificationPermission = permission
},
setMobileLayout (state, value) {
state.mobileLayout = value
},
closeSettingsModal (state) {
state.settingsModalState = 'hidden'
},
togglePeekSettingsModal (state) {
switch (state.settingsModalState) {
case 'minimized':
state.settingsModalState = 'visible'
return
case 'visible':
state.settingsModalState = 'minimized'
return
default:
throw new Error('Illegal minimization state of settings modal')
}
},
openSettingsModal (state) {
state.settingsModalState = 'visible'
if (!state.settingsModalLoaded) {
state.settingsModalLoaded = true
}
},
+ setSettingsModalTargetTab (state, value) {
+ state.settingsModalTargetTab = value
+ },
pushGlobalNotice (state, notice) {
state.globalNotices.push(notice)
},
removeGlobalNotice (state, notice) {
state.globalNotices = state.globalNotices.filter(n => n !== notice)
},
setLayoutHeight (state, value) {
state.layoutHeight = value
},
setLastTimeline (state, value) {
state.lastTimeline = value
}
},
actions: {
setPageTitle ({ rootState }, option = '') {
document.title = `${option} ${rootState.instance.name}`
},
settingsSaved ({ commit, dispatch }, { success, error }) {
commit('settingsSaved', { success, error })
},
setNotificationPermission ({ commit }, permission) {
commit('setNotificationPermission', permission)
},
setMobileLayout ({ commit }, value) {
commit('setMobileLayout', value)
},
closeSettingsModal ({ commit }) {
commit('closeSettingsModal')
},
openSettingsModal ({ commit }) {
commit('openSettingsModal')
},
togglePeekSettingsModal ({ commit }) {
commit('togglePeekSettingsModal')
},
+ clearSettingsModalTargetTab ({ commit }) {
+ commit('setSettingsModalTargetTab', null)
+ },
+ openSettingsModalTab ({ commit }, value) {
+ commit('setSettingsModalTargetTab', value)
+ commit('openSettingsModal')
+ },
pushGlobalNotice (
{ commit, dispatch },
{
messageKey,
messageArgs = {},
level = 'error',
timeout = 0
}) {
const notice = {
messageKey,
messageArgs,
level
}
if (timeout) {
setTimeout(() => dispatch('removeGlobalNotice', notice), timeout)
}
commit('pushGlobalNotice', notice)
return notice
},
removeGlobalNotice ({ commit }, notice) {
commit('removeGlobalNotice', notice)
},
setLayoutHeight ({ commit }, value) {
commit('setLayoutHeight', value)
},
setLastTimeline ({ commit }, value) {
commit('setLastTimeline', value)
}
}
}
export default interfaceMod
diff --git a/src/services/chat_service/chat_service.js b/src/services/chat_service/chat_service.js
index b60a889bd0..95c6948235 100644
--- a/src/services/chat_service/chat_service.js
+++ b/src/services/chat_service/chat_service.js
@@ -1,151 +1,154 @@
import _ from 'lodash'
const empty = (chatId) => {
return {
idIndex: {},
messages: [],
newMessageCount: 0,
lastSeenTimestamp: 0,
chatId: chatId,
minId: undefined,
- lastMessage: undefined
+ maxId: undefined
}
}
const clear = (storage) => {
storage.idIndex = {}
storage.messages.splice(0, storage.messages.length)
storage.newMessageCount = 0
storage.lastSeenTimestamp = 0
storage.minId = undefined
- storage.lastMessage = undefined
+ storage.maxId = undefined
}
const deleteMessage = (storage, messageId) => {
if (!storage) { return }
storage.messages = storage.messages.filter(m => m.id !== messageId)
delete storage.idIndex[messageId]
- if (storage.lastMessage && (storage.lastMessage.id === messageId)) {
- storage.lastMessage = _.maxBy(storage.messages, 'id')
+ if (storage.maxId === messageId) {
+ const lastMessage = _.maxBy(storage.messages, 'id')
+ storage.maxId = lastMessage.id
}
if (storage.minId === messageId) {
const firstMessage = _.minBy(storage.messages, 'id')
storage.minId = firstMessage.id
}
}
-const add = (storage, { messages: newMessages }) => {
+const add = (storage, { messages: newMessages, updateMaxId = true }) => {
if (!storage) { return }
for (let i = 0; i < newMessages.length; i++) {
const message = newMessages[i]
// sanity check
if (message.chat_id !== storage.chatId) { return }
if (!storage.minId || message.id < storage.minId) {
storage.minId = message.id
}
- if (!storage.lastMessage || message.id > storage.lastMessage.id) {
- storage.lastMessage = message
+ if (!storage.maxId || message.id > storage.maxId) {
+ if (updateMaxId) {
+ storage.maxId = message.id
+ }
}
if (!storage.idIndex[message.id]) {
if (storage.lastSeenTimestamp < message.created_at) {
storage.newMessageCount++
}
storage.messages.push(message)
storage.idIndex[message.id] = message
}
}
}
const resetNewMessageCount = (storage) => {
if (!storage) { return }
storage.newMessageCount = 0
storage.lastSeenTimestamp = new Date()
}
// Inserts date separators and marks the head and tail if it's the chain of messages made by the same user
const getView = (storage) => {
if (!storage) { return [] }
const result = []
const messages = _.sortBy(storage.messages, ['id', 'desc'])
const firstMessage = messages[0]
let previousMessage = messages[messages.length - 1]
let currentMessageChainId
if (firstMessage) {
const date = new Date(firstMessage.created_at)
date.setHours(0, 0, 0, 0)
result.push({
type: 'date',
date,
id: date.getTime().toString()
})
}
let afterDate = false
for (let i = 0; i < messages.length; i++) {
const message = messages[i]
const nextMessage = messages[i + 1]
const date = new Date(message.created_at)
date.setHours(0, 0, 0, 0)
// insert date separator and start a new message chain
if (previousMessage && previousMessage.date < date) {
result.push({
type: 'date',
date,
id: date.getTime().toString()
})
previousMessage['isTail'] = true
currentMessageChainId = undefined
afterDate = true
}
const object = {
type: 'message',
data: message,
date,
id: message.id,
messageChainId: currentMessageChainId
}
// end a message chian
if ((nextMessage && nextMessage.account_id) !== message.account_id) {
object['isTail'] = true
currentMessageChainId = undefined
}
// start a new message chain
if ((previousMessage && previousMessage.data && previousMessage.data.account_id) !== message.account_id || afterDate) {
currentMessageChainId = _.uniqueId()
object['isHead'] = true
object['messageChainId'] = currentMessageChainId
}
result.push(object)
previousMessage = object
afterDate = false
}
return result
}
const ChatService = {
add,
empty,
getView,
deleteMessage,
resetNewMessageCount,
clear
}
export default ChatService
diff --git a/src/services/chat_utils/chat_utils.js b/src/services/chat_utils/chat_utils.js
index ab898cede1..583438f730 100644
--- a/src/services/chat_utils/chat_utils.js
+++ b/src/services/chat_utils/chat_utils.js
@@ -1,19 +1,20 @@
import { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'
export const maybeShowChatNotification = (store, chat) => {
if (!chat.lastMessage) return
if (store.rootState.chats.currentChatId === chat.id && !document.hidden) return
+ if (store.rootState.users.currentUser.id === chat.lastMessage.account.id) return
const opts = {
tag: chat.lastMessage.id,
title: chat.account.name,
icon: chat.account.profile_image_url,
body: chat.lastMessage.content
}
if (chat.lastMessage.attachment && chat.lastMessage.attachment.type === 'image') {
opts.image = chat.lastMessage.attachment.preview_url
}
showDesktopNotification(store.rootState, opts)
}
diff --git a/src/services/completion/completion.js b/src/services/completion/completion.js
index df83d03d14..8a6eba7e4d 100644
--- a/src/services/completion/completion.js
+++ b/src/services/completion/completion.js
@@ -1,70 +1,70 @@
import { reduce, find } from 'lodash'
export const replaceWord = (str, toReplace, replacement) => {
return str.slice(0, toReplace.start) + replacement + str.slice(toReplace.end)
}
export const wordAtPosition = (str, pos) => {
- const words = splitIntoWords(str)
+ const words = splitByWhitespaceBoundary(str)
const wordsWithPosition = addPositionToWords(words)
return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos)
}
export const addPositionToWords = (words) => {
return reduce(words, (result, word) => {
const data = {
word,
start: 0,
end: word.length
}
if (result.length > 0) {
const previous = result.pop()
data.start += previous.end
data.end += previous.end
result.push(previous)
}
result.push(data)
return result
}, [])
}
-export const splitIntoWords = (str) => {
- // Split at word boundaries
- const regex = /\b/
- const triggers = /[@#:]+$/
-
- let split = str.split(regex)
-
- // Add trailing @ and # to the following word.
- const words = reduce(split, (result, word) => {
- if (result.length > 0) {
- let previous = result.pop()
- const matches = previous.match(triggers)
- if (matches) {
- previous = previous.replace(triggers, '')
- word = matches[0] + word
- }
- result.push(previous)
+export const splitByWhitespaceBoundary = (str) => {
+ let result = []
+ let currentWord = ''
+ for (let i = 0; i < str.length; i++) {
+ const currentChar = str[i]
+ // Starting a new word
+ if (!currentWord) {
+ currentWord = currentChar
+ continue
}
- result.push(word)
-
- return result
- }, [])
-
- return words
+ // current character is whitespace while word isn't, or vice versa:
+ // add our current word to results, start over the current word.
+ if (!!currentChar.trim() !== !!currentWord.trim()) {
+ result.push(currentWord)
+ currentWord = currentChar
+ continue
+ }
+ currentWord += currentChar
+ }
+ // Add the last word we were working on
+ if (currentWord) {
+ result.push(currentWord)
+ }
+ return result
}
const completion = {
wordAtPosition,
addPositionToWords,
- splitIntoWords,
+ splitByWhitespaceBoundary,
replaceWord
}
export default completion
diff --git a/test/unit/specs/services/chat_service/chat_service.spec.js b/test/unit/specs/services/chat_service/chat_service.spec.js
index 3ee9839dfd..2eb89a2dff 100644
--- a/test/unit/specs/services/chat_service/chat_service.spec.js
+++ b/test/unit/specs/services/chat_service/chat_service.spec.js
@@ -1,88 +1,88 @@
import chatService from '../../../../../src/services/chat_service/chat_service.js'
const message1 = {
id: '9wLkdcmQXD21Oy8lEX',
created_at: (new Date('2020-06-22T18:45:53.000Z'))
}
const message2 = {
id: '9wLkdp6ihaOVdNj8Wu',
account_id: '9vmRb29zLQReckr5ay',
created_at: (new Date('2020-06-22T18:45:56.000Z'))
}
const message3 = {
id: '9wLke9zL4Dy4OZR2RM',
account_id: '9vmRb29zLQReckr5ay',
created_at: (new Date('2020-07-22T18:45:59.000Z'))
}
describe('chatService', () => {
describe('.add', () => {
it("Doesn't add duplicates", () => {
const chat = chatService.empty()
chatService.add(chat, { messages: [ message1 ] })
chatService.add(chat, { messages: [ message1 ] })
expect(chat.messages.length).to.eql(1)
chatService.add(chat, { messages: [ message2 ] })
expect(chat.messages.length).to.eql(2)
})
it('Updates minId and lastMessage and newMessageCount', () => {
const chat = chatService.empty()
chatService.add(chat, { messages: [ message1 ] })
- expect(chat.lastMessage.id).to.eql(message1.id)
+ expect(chat.maxId).to.eql(message1.id)
expect(chat.minId).to.eql(message1.id)
expect(chat.newMessageCount).to.eql(1)
chatService.add(chat, { messages: [ message2 ] })
- expect(chat.lastMessage.id).to.eql(message2.id)
+ expect(chat.maxId).to.eql(message2.id)
expect(chat.minId).to.eql(message1.id)
expect(chat.newMessageCount).to.eql(2)
chatService.resetNewMessageCount(chat)
expect(chat.newMessageCount).to.eql(0)
const createdAt = new Date()
createdAt.setSeconds(createdAt.getSeconds() + 10)
chatService.add(chat, { messages: [ { message3, created_at: createdAt } ] })
expect(chat.newMessageCount).to.eql(1)
})
})
describe('.delete', () => {
it('Updates minId and lastMessage', () => {
const chat = chatService.empty()
chatService.add(chat, { messages: [ message1 ] })
chatService.add(chat, { messages: [ message2 ] })
chatService.add(chat, { messages: [ message3 ] })
- expect(chat.lastMessage.id).to.eql(message3.id)
+ expect(chat.maxId).to.eql(message3.id)
expect(chat.minId).to.eql(message1.id)
chatService.deleteMessage(chat, message3.id)
- expect(chat.lastMessage.id).to.eql(message2.id)
+ expect(chat.maxId).to.eql(message2.id)
expect(chat.minId).to.eql(message1.id)
chatService.deleteMessage(chat, message1.id)
- expect(chat.lastMessage.id).to.eql(message2.id)
+ expect(chat.maxId).to.eql(message2.id)
expect(chat.minId).to.eql(message2.id)
})
})
describe('.getView', () => {
it('Inserts date separators', () => {
const chat = chatService.empty()
chatService.add(chat, { messages: [ message1 ] })
chatService.add(chat, { messages: [ message2 ] })
chatService.add(chat, { messages: [ message3 ] })
const view = chatService.getView(chat)
expect(view.map(i => i.type)).to.eql(['date', 'message', 'message', 'date', 'message'])
})
})
})
diff --git a/test/unit/specs/services/completion/completion.spec.js b/test/unit/specs/services/completion/completion.spec.js
index 8a41c6537a..81d3a26a26 100644
--- a/test/unit/specs/services/completion/completion.spec.js
+++ b/test/unit/specs/services/completion/completion.spec.js
@@ -1,70 +1,85 @@
-import { replaceWord, addPositionToWords, wordAtPosition, splitIntoWords } from '../../../../../src/services/completion/completion.js'
+import { replaceWord, addPositionToWords, wordAtPosition, splitByWhitespaceBoundary } from '../../../../../src/services/completion/completion.js'
describe('addPositiontoWords', () => {
it('adds the position to a word list', () => {
- const words = ['hey', 'this', 'is', 'fun']
+ const words = ['hey', ' ', 'this', ' ', 'is', ' ', 'fun']
const expected = [
{
word: 'hey',
start: 0,
end: 3
},
{
- word: 'this',
+ word: ' ',
start: 3,
- end: 7
+ end: 4
},
{
- word: 'is',
- start: 7,
+ word: 'this',
+ start: 4,
+ end: 8
+ },
+ {
+ word: ' ',
+ start: 8,
end: 9
},
{
- word: 'fun',
+ word: 'is',
start: 9,
+ end: 11
+ },
+ {
+ word: ' ',
+ start: 11,
end: 12
+ },
+ {
+ word: 'fun',
+ start: 12,
+ end: 15
}
]
const res = addPositionToWords(words)
expect(res).to.eql(expected)
})
})
-describe('splitIntoWords', () => {
+describe('splitByWhitespaceBoundary', () => {
it('splits at whitespace boundaries', () => {
- const str = 'This is a #nice @test for you, @idiot.'
- const expected = ['This', ' ', 'is', ' ', 'a', ' ', '#nice', ' ', '@test', ' ', 'for', ' ', 'you', ', ', '@idiot', '.']
- const res = splitIntoWords(str)
+ const str = 'This is a #nice @test for you, @idiot@idiot.com'
+ const expected = ['This', ' ', 'is', ' ', 'a', ' ', '#nice', ' ', '@test', ' ', 'for', ' ', 'you,', ' ', '@idiot@idiot.com']
+ const res = splitByWhitespaceBoundary(str)
expect(res).to.eql(expected)
})
})
describe('wordAtPosition', () => {
it('returns the word for a given string and postion, plus the start and end position of that word', () => {
const str = 'Hey this is fun'
const { word, start, end } = wordAtPosition(str, 4)
expect(word).to.eql('this')
expect(start).to.eql(4)
expect(end).to.eql(8)
})
})
describe('replaceWord', () => {
it('replaces a word (with start and end) with another word in a given string', () => {
- const str = 'hey @take, how are you'
- const wordsWithPosition = addPositionToWords(splitIntoWords(str))
+ const str = 'hey @take , how are you'
+ const wordsWithPosition = addPositionToWords(splitByWhitespaceBoundary(str))
const toReplace = wordsWithPosition[2]
expect(toReplace.word).to.eql('@take')
- const expected = 'hey @takeshitakenji, how are you'
+ const expected = 'hey @takeshitakenji , how are you'
const res = replaceWord(str, toReplace, '@takeshitakenji')
expect(res).to.eql(expected)
})
})

File Metadata

Mime Type
text/x-diff
Expires
Sun, Jul 19, 8:53 AM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1695227
Default Alt Text
(603 KB)

Event Timeline