Page MenuHomePhorge

No OneTemporary

Size
113 KB
Referenced Files
None
Subscribers
None
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index de12894b8d..088e19d3b9 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -1,99 +1,103 @@
/* eslint-env browser */
import TabSwitcher from '../tab_switcher/tab_switcher.jsx'
import StyleSwitcher from '../style_switcher/style_switcher.vue'
import InterfaceLanguageSwitcher from '../interface_language_switcher/interface_language_switcher.vue'
import { filter, trim } from 'lodash'
const settings = {
data () {
return {
hideAttachmentsLocal: this.$store.state.config.hideAttachments,
hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv,
hideNsfwLocal: this.$store.state.config.hideNsfw,
+ hideUserStatsLocal: this.$store.state.config.hideUserStats,
notificationVisibilityLocal: this.$store.state.config.notificationVisibility,
replyVisibilityLocal: this.$store.state.config.replyVisibility,
loopVideoLocal: this.$store.state.config.loopVideo,
loopVideoSilentOnlyLocal: this.$store.state.config.loopVideoSilentOnly,
muteWordsString: this.$store.state.config.muteWords.join('\n'),
autoLoadLocal: this.$store.state.config.autoLoad,
streamingLocal: this.$store.state.config.streaming,
pauseOnUnfocusedLocal: this.$store.state.config.pauseOnUnfocused,
hoverPreviewLocal: this.$store.state.config.hoverPreview,
collapseMessageWithSubjectLocal: this.$store.state.config.collapseMessageWithSubject,
stopGifs: this.$store.state.config.stopGifs,
loopSilentAvailable:
// Firefox
Object.getOwnPropertyDescriptor(HTMLVideoElement.prototype, 'mozHasAudio') ||
// Chrome-likes
Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'webkitAudioDecodedByteCount') ||
// Future spec, still not supported in Nightly 63 as of 08/2018
Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'audioTracks')
}
},
components: {
TabSwitcher,
StyleSwitcher,
InterfaceLanguageSwitcher
},
computed: {
user () {
return this.$store.state.users.currentUser
}
},
watch: {
hideAttachmentsLocal (value) {
this.$store.dispatch('setOption', { name: 'hideAttachments', value })
},
hideAttachmentsInConvLocal (value) {
this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })
},
+ hideUserStatsLocal (value) {
+ this.$store.dispatch('setOption', { name: 'hideUserStats', value })
+ },
hideNsfwLocal (value) {
this.$store.dispatch('setOption', { name: 'hideNsfw', value })
},
'notificationVisibilityLocal.likes' (value) {
this.$store.dispatch('setOption', { name: 'notificationVisibility', value: this.$store.state.config.notificationVisibility })
},
'notificationVisibilityLocal.follows' (value) {
this.$store.dispatch('setOption', { name: 'notificationVisibility', value: this.$store.state.config.notificationVisibility })
},
'notificationVisibilityLocal.repeats' (value) {
this.$store.dispatch('setOption', { name: 'notificationVisibility', value: this.$store.state.config.notificationVisibility })
},
'notificationVisibilityLocal.mentions' (value) {
this.$store.dispatch('setOption', { name: 'notificationVisibility', value: this.$store.state.config.notificationVisibility })
},
replyVisibilityLocal (value) {
this.$store.dispatch('setOption', { name: 'replyVisibility', value })
},
loopVideoLocal (value) {
this.$store.dispatch('setOption', { name: 'loopVideo', value })
},
loopVideoSilentOnlyLocal (value) {
this.$store.dispatch('setOption', { name: 'loopVideoSilentOnly', value })
},
autoLoadLocal (value) {
this.$store.dispatch('setOption', { name: 'autoLoad', value })
},
streamingLocal (value) {
this.$store.dispatch('setOption', { name: 'streaming', value })
},
pauseOnUnfocusedLocal (value) {
this.$store.dispatch('setOption', { name: 'pauseOnUnfocused', value })
},
hoverPreviewLocal (value) {
this.$store.dispatch('setOption', { name: 'hoverPreview', value })
},
muteWordsString (value) {
value = filter(value.split('\n'), (word) => trim(word).length > 0)
this.$store.dispatch('setOption', { name: 'muteWords', value })
},
collapseMessageWithSubjectLocal (value) {
this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value })
},
stopGifs (value) {
this.$store.dispatch('setOption', { name: 'stopGifs', value })
}
}
}
export default settings
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index c106b79cfe..2cf6220047 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -1,219 +1,223 @@
<template>
<div class="settings panel panel-default">
<div class="panel-heading">
{{$t('settings.settings')}}
</div>
<div class="panel-body">
<tab-switcher>
<div :label="$t('settings.general')" >
<div class="setting-item">
<h2>{{ $t('settings.interfaceLanguage') }}</h2>
<interface-language-switcher />
</div>
<div class="setting-item">
<h2>{{$t('nav.timeline')}}</h2>
<ul class="setting-list">
<li>
<input type="checkbox" id="collapseMessageWithSubject" v-model="collapseMessageWithSubjectLocal">
<label for="collapseMessageWithSubject">{{$t('settings.collapse_subject')}}</label>
</li>
<li>
<input type="checkbox" id="streaming" v-model="streamingLocal">
<label for="streaming">{{$t('settings.streaming')}}</label>
<ul class="setting-list suboptions" :class="[{disabled: !streamingLocal}]">
<li>
<input :disabled="!streamingLocal" type="checkbox" id="pauseOnUnfocused" v-model="pauseOnUnfocusedLocal">
<label for="pauseOnUnfocused">{{$t('settings.pause_on_unfocused')}}</label>
</li>
</ul>
</li>
<li>
<input type="checkbox" id="autoload" v-model="autoLoadLocal">
<label for="autoload">{{$t('settings.autoload')}}</label>
</li>
<li>
<input type="checkbox" id="hoverPreview" v-model="hoverPreviewLocal">
<label for="hoverPreview">{{$t('settings.reply_link_preview')}}</label>
</li>
</ul>
</div>
<div class="setting-item">
<h2>{{$t('settings.attachments')}}</h2>
<ul class="setting-list">
<li>
<input type="checkbox" id="hideAttachments" v-model="hideAttachmentsLocal">
<label for="hideAttachments">{{$t('settings.hide_attachments_in_tl')}}</label>
</li>
<li>
<input type="checkbox" id="hideAttachmentsInConv" v-model="hideAttachmentsInConvLocal">
<label for="hideAttachmentsInConv">{{$t('settings.hide_attachments_in_convo')}}</label>
</li>
<li>
<input type="checkbox" id="hideNsfw" v-model="hideNsfwLocal">
<label for="hideNsfw">{{$t('settings.nsfw_clickthrough')}}</label>
</li>
<li>
<input type="checkbox" id="stopGifs" v-model="stopGifs">
<label for="stopGifs">{{$t('settings.stop_gifs')}}</label>
</li>
<li>
<input type="checkbox" id="loopVideo" v-model="loopVideoLocal">
<label for="loopVideo">{{$t('settings.loop_video')}}</label>
<ul class="setting-list suboptions" :class="[{disabled: !streamingLocal}]">
<li>
<input :disabled="!loopVideoLocal || !loopSilentAvailable" type="checkbox" id="loopVideoSilentOnly" v-model="loopVideoSilentOnlyLocal">
<label for="loopVideoSilentOnly">{{$t('settings.loop_video_silent_only')}}</label>
<div v-if="!loopSilentAvailable" class="unavailable">
<i class="icon-globe"/>! {{$t('settings.limited_availability')}}
</div>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div :label="$t('settings.theme')" >
<div class="setting-item">
<style-switcher></style-switcher>
</div>
</div>
<div :label="$t('settings.filtering')" >
<div class="setting-item">
<div class="select-multiple">
<span class="label">{{$t('settings.notification_visibility')}}</span>
<ul class="option-list">
<li>
<input type="checkbox" id="notification-visibility-likes" v-model="notificationVisibilityLocal.likes">
<label for="notification-visibility-likes">
{{$t('settings.notification_visibility_likes')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-visibility-repeats" v-model="notificationVisibilityLocal.repeats">
<label for="notification-visibility-repeats">
{{$t('settings.notification_visibility_repeats')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-visibility-follows" v-model="notificationVisibilityLocal.follows">
<label for="notification-visibility-follows">
{{$t('settings.notification_visibility_follows')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-visibility-mentions" v-model="notificationVisibilityLocal.mentions">
<label for="notification-visibility-mentions">
{{$t('settings.notification_visibility_mentions')}}
</label>
</li>
</ul>
</label>
</div>
<div>
{{$t('settings.replies_in_timeline')}}
<label for="replyVisibility" class="select">
<select id="replyVisibility" v-model="replyVisibilityLocal">
<option value="all" selected>{{$t('settings.reply_visibility_all')}}</option>
<option value="following">{{$t('settings.reply_visibility_following')}}</option>
<option value="self">{{$t('settings.reply_visibility_self')}}</option>
</select>
<i class="icon-down-open"/>
</label>
</div>
+ <div>
+ <input type="checkbox" id="hideUserStats" v-model="hideUserStatsLocal">
+ <label for="hideUserStats">{{$t('settings.hide_user_stats')}}</label>
+ </div>
</div>
<div class="setting-item">
<p>{{$t('settings.filtering_explanation')}}</p>
<textarea id="muteWords" v-model="muteWordsString"></textarea>
</div>
</div>
</tab-switcher>
</div>
</div>
</template>
<script src="./settings.js">
</script>
<style lang="scss">
@import '../../_variables.scss';
.setting-item {
border-bottom: 2px solid var(--btn, $fallback--btn);
margin: 1em 1em 1.4em;
padding-bottom: 1.4em;
> div {
margin-bottom: .5em;
&:last-child {
margin-bottom: 0;
}
}
&:last-child {
border-bottom: none;
padding-bottom: 0;
margin-bottom: 1em;
}
select {
min-width: 10em;
}
textarea {
width: 100%;
height: 100px;
}
.unavailable,
.unavailable i {
color: var(--cRed, $fallback--cRed);
color: $fallback--cRed;
}
.old-avatar {
width: 128px;
border-radius: $fallback--avatarRadius;
border-radius: var(--avatarRadius, $fallback--avatarRadius);
}
.new-avatar {
object-fit: cover;
width: 128px;
height: 128px;
border-radius: $fallback--avatarRadius;
border-radius: var(--avatarRadius, $fallback--avatarRadius);
}
.btn {
min-height: 28px;
}
.submit {
margin-top: 1em;
min-height: 30px;
width: 10em;
}
}
.select-multiple {
display: flex;
.option-list {
margin: 0;
padding-left: .5em;
}
}
.setting-list,
.option-list{
list-style-type: none;
padding-left: 2em;
li {
margin-bottom: 0.5em;
}
.suboptions {
margin-top: 0.3em
}
}
</style>
diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js
index 76a5577ee5..eefa65f366 100644
--- a/src/components/user_card_content/user_card_content.js
+++ b/src/components/user_card_content/user_card_content.js
@@ -1,96 +1,101 @@
import StillImage from '../still-image/still-image.vue'
import { hex2rgb } from '../../services/color_convert/color_convert.js'
export default {
props: [ 'user', 'switcher', 'selected', 'hideBio' ],
+ data () {
+ return {
+ hideUserStatsLocal: this.$store.state.config.hideUserStats
+ }
+ },
computed: {
headingStyle () {
const color = this.$store.state.config.colors.bg
if (color) {
const rgb = hex2rgb(color)
const tintColor = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .5)`
return {
backgroundColor: `rgb(${Math.floor(rgb.r * 0.53)}, ${Math.floor(rgb.g * 0.56)}, ${Math.floor(rgb.b * 0.59)})`,
backgroundImage: [
`linear-gradient(to bottom, ${tintColor}, ${tintColor})`,
`url(${this.user.cover_photo})`
].join(', ')
}
}
},
isOtherUser () {
return this.user.id !== this.$store.state.users.currentUser.id
},
subscribeUrl () {
// eslint-disable-next-line no-undef
const serverUrl = new URL(this.user.statusnet_profile_url)
return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`
},
loggedIn () {
return this.$store.state.users.currentUser
},
dailyAvg () {
const days = Math.ceil((new Date() - new Date(this.user.created_at)) / (60 * 60 * 24 * 1000))
return Math.round(this.user.statuses_count / days)
},
userHighlightType: {
get () {
const data = this.$store.state.config.highlight[this.user.screen_name]
return data && data.type || 'disabled'
},
set (type) {
const data = this.$store.state.config.highlight[this.user.screen_name]
if (type !== 'disabled') {
this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: data && data.color || '#FFFFFF', type })
} else {
this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: undefined })
}
}
},
userHighlightColor: {
get () {
const data = this.$store.state.config.highlight[this.user.screen_name]
return data && data.color
},
set (color) {
this.$store.dispatch('setHighlight', { user: this.user.screen_name, color })
}
}
},
components: {
StillImage
},
methods: {
followUser () {
const store = this.$store
store.state.api.backendInteractor.followUser(this.user.id)
.then((followedUser) => store.commit('addNewUsers', [followedUser]))
},
unfollowUser () {
const store = this.$store
store.state.api.backendInteractor.unfollowUser(this.user.id)
.then((unfollowedUser) => store.commit('addNewUsers', [unfollowedUser]))
},
blockUser () {
const store = this.$store
store.state.api.backendInteractor.blockUser(this.user.id)
.then((blockedUser) => store.commit('addNewUsers', [blockedUser]))
},
unblockUser () {
const store = this.$store
store.state.api.backendInteractor.unblockUser(this.user.id)
.then((unblockedUser) => store.commit('addNewUsers', [unblockedUser]))
},
toggleMute () {
const store = this.$store
store.commit('setMuted', {user: this.user, muted: !this.user.muted})
store.state.api.backendInteractor.setUserMute(this.user)
},
setProfileView (v) {
if (this.switcher) {
const store = this.$store
store.commit('setProfileView', { v })
}
}
}
}
diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 5935804057..65fd26eb80 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -1,345 +1,345 @@
<template>
<div id="heading" class="profile-panel-background" :style="headingStyle">
<div class="panel-heading text-center">
<div class='user-info'>
<router-link to='/user-settings' style="float: right; margin-top:16px;" v-if="!isOtherUser">
<i class="icon-cog usersettings"></i>
</router-link>
<a :href="user.statusnet_profile_url" target="_blank" class="floater" v-if="isOtherUser">
<i class="icon-link-ext usersettings"></i>
</a>
<div class='container'>
<router-link :to="{ name: 'user-profile', params: { id: user.id } }">
<StillImage class="avatar" :src="user.profile_image_url_original"/>
</router-link>
<div class="name-and-screen-name">
<div :title="user.name" class='user-name' v-if="user.name_html" v-html="user.name_html"></div>
<div :title="user.name" class='user-name' v-else>{{user.name}}</div>
<router-link class='user-screen-name':to="{ name: 'user-profile', params: { id: user.id } }">
<span>@{{user.screen_name}}</span><span v-if="user.locked"><i class="icon icon-lock"></i></span>
- <span class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
+ <span v-if="!hideUserStatsLocal" class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
</router-link>
</div>
</div>
<div class="user-meta">
<div v-if="user.follows_you && loggedIn && isOtherUser" class="following">
{{ $t('user_card.follows_you') }}
</div>
<div class="floater" v-if="switcher || isOtherUser">
<!-- id's need to be unique, otherwise vue confuses which user-card checkbox belongs to -->
<input class="userHighlightText" type="text" :id="'userHighlightColorTx'+user.id" v-if="userHighlightType !== 'disabled'" v-model="userHighlightColor"/>
<input class="userHighlightCl" type="color" :id="'userHighlightColor'+user.id" v-if="userHighlightType !== 'disabled'" v-model="userHighlightColor"/>
<label for="style-switcher" class='userHighlightSel select'>
<select class="userHighlightSel" :id="'userHighlightSel'+user.id" v-model="userHighlightType">
<option value="disabled">No highlight</option>
<option value="solid">Solid bg</option>
<option value="striped">Striped bg</option>
<option value="side">Side stripe</option>
</select>
<i class="icon-down-open"/>
</label>
</div>
</div>
<div v-if="isOtherUser" class="user-interactions">
<div class="follow" v-if="loggedIn">
<span v-if="user.following">
<!--Following them!-->
<button @click="unfollowUser" class="pressed">
{{ $t('user_card.following') }}
</button>
</span>
<span v-if="!user.following">
<button @click="followUser">
{{ $t('user_card.follow') }}
</button>
</span>
</div>
<div class='mute' v-if='isOtherUser'>
<span v-if='user.muted'>
<button @click="toggleMute" class="pressed">
{{ $t('user_card.muted') }}
</button>
</span>
<span v-if='!user.muted'>
<button @click="toggleMute">
{{ $t('user_card.mute') }}
</button>
</span>
</div>
<div class="remote-follow" v-if='!loggedIn && user.is_local'>
<form method="POST" :action='subscribeUrl'>
<input type="hidden" name="nickname" :value="user.screen_name">
<input type="hidden" name="profile" value="">
<button click="submit" class="remote-button">
{{ $t('user_card.remote_follow') }}
</button>
</form>
</div>
<div class='block' v-if='isOtherUser && loggedIn'>
<span v-if='user.statusnet_blocking'>
<button @click="unblockUser" class="pressed">
{{ $t('user_card.blocked') }}
</button>
</span>
<span v-if='!user.statusnet_blocking'>
<button @click="blockUser">
{{ $t('user_card.block') }}
</button>
</span>
</div>
</div>
</div>
</div>
- <div class="panel-body profile-panel-body">
+ <div v-if="!hideUserStatsLocal || switcher" class="panel-body profile-panel-body">
<div class="user-counts" :class="{clickable: switcher}">
<div class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}">
<h5>{{ $t('user_card.statuses') }}</h5>
- <span>{{user.statuses_count}} <br></span>
+ <span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span>
</div>
<div class="user-count" v-on:click.prevent="setProfileView('friends')" :class="{selected: selected === 'friends'}">
<h5>{{ $t('user_card.followees') }}</h5>
- <span>{{user.friends_count}}</span>
+ <span v-if="!hideUserStatsLocal">{{user.friends_count}}</span>
</div>
<div class="user-count" v-on:click.prevent="setProfileView('followers')" :class="{selected: selected === 'followers'}">
<h5>{{ $t('user_card.followers') }}</h5>
- <span>{{user.followers_count}}</span>
+ <span v-if="!hideUserStatsLocal">{{user.followers_count}}</span>
</div>
</div>
<p v-if="!hideBio && user.description_html" class="profile-bio" v-html="user.description_html"></p>
<p v-else-if="!hideBio" class="profile-bio">{{ user.description }}</p>
</div>
</div>
</template>
<script src="./user_card_content.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.profile-panel-background {
background-size: cover;
border-radius: $fallback--panelRadius;
border-radius: var(--panelRadius, $fallback--panelRadius);
.panel-heading {
padding: 0.6em 0em;
text-align: center;
}
}
.profile-panel-body {
word-wrap: break-word;
background: linear-gradient(to bottom, rgba(0, 0, 0, 0), $fallback--bg 80%);
background: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--bg, $fallback--bg) 80%);
.profile-bio {
text-align: center;
}
}
.user-info {
color: $fallback--lightFg;
color: var(--lightFg, $fallback--lightFg);
padding: 0 16px;
.container {
padding: 16px 10px 6px 10px;
display: flex;
max-height: 56px;
overflow: hidden;
.avatar {
border-radius: $fallback--avatarRadius;
border-radius: var(--avatarRadius, $fallback--avatarRadius);
flex: 1 0 100%;
width: 56px;
height: 56px;
box-shadow: 0px 1px 8px rgba(0,0,0,0.75);
object-fit: cover;
&.animated::before {
display: none;
}
}
}
&:hover .animated.avatar {
canvas {
display: none;
}
img {
visibility: visible;
}
}
.usersettings {
color: $fallback--lightFg;
color: var(--lightFg, $fallback--lightFg);
opacity: .8;
}
.name-and-screen-name {
display: block;
margin-left: 0.6em;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1 1 0;
}
.user-name{
text-overflow: ellipsis;
overflow: hidden;
}
.user-screen-name {
color: $fallback--lightFg;
color: var(--lightFg, $fallback--lightFg);
display: inline-block;
font-weight: light;
font-size: 15px;
padding-right: 0.1em;
}
.user-meta {
margin-bottom: .4em;
.following {
font-size: 14px;
flex: 0 0 100%;
margin: 0;
padding-left: 16px;
text-align: left;
float: left;
}
.floater {
margin: 0;
}
&::after {
display: block;
content: '';
clear: both;
}
}
.user-interactions {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
div {
flex: 1;
}
.mute {
max-width: 220px;
min-height: 28px;
}
.remote-follow {
max-width: 220px;
min-height: 28px;
}
.follow {
max-width: 220px;
min-height: 28px;
}
button {
width: 92%;
height: 100%;
}
.remote-button {
height: 28px !important;
width: 92%;
}
.pressed {
border-bottom-color: rgba(255, 255, 255, 0.2);
border-top-color: rgba(0, 0, 0, 0.2);
}
}
}
.user-counts {
display: flex;
line-height:16px;
padding: .5em 1.5em 0em 1.5em;
text-align: center;
justify-content: space-between;
color: $fallback--lightFg;
color: var(--lightFg, $fallback--lightFg);
&.clickable {
.user-count {
cursor: pointer;
&:hover:not(.selected) {
transition: border-bottom 100ms;
border-bottom: 3px solid $fallback--link;
border-bottom: 3px solid var(--link, $fallback--link);
}
}
}
}
.user-count {
flex: 1;
padding: .5em 0 .5em 0;
margin: 0 .5em;
&.selected {
transition: none;
border-bottom: 5px solid $fallback--link;
border-bottom: 5px solid var(--link, $fallback--link);
border-radius: $fallback--btnRadius;
border-radius: var(--btnRadius, $fallback--btnRadius);
}
h5 {
font-size:1em;
font-weight: bolder;
margin: 0 0 0.25em;
}
a {
text-decoration: none;
}
}
.dailyAvg {
margin-left: 1em;
font-size: 0.7em;
color: #CCC;
}
.floater {
float: right;
margin-top: 16px;
.userHighlightCl {
padding: 2px 10px;
}
.userHighlightSel,
.userHighlightSel.select {
padding-top: 0;
padding-bottom: 0;
}
.userHighlightSel.select i {
line-height: 22px;
}
.userHighlightText {
width: 70px;
}
.userHighlightCl,
.userHighlightText,
.userHighlightSel,
.userHighlightSel.select {
height: 22px;
vertical-align: top;
margin-right: 0
}
}
</style>
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 42e7e9d4cd..42b1dd40e6 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -1,2046 +1,2047 @@
const de = {
chat: {
title: 'Chat'
},
nav: {
chat: 'Lokaler Chat',
timeline: 'Zeitleiste',
mentions: 'Erwähnungen',
public_tl: 'Lokale Zeitleiste',
twkn: 'Das gesamte Netzwerk'
},
user_card: {
follows_you: 'Folgt dir!',
following: 'Folgst du!',
follow: 'Folgen',
blocked: 'Blockiert!',
block: 'Blockieren',
statuses: 'Beiträge',
mute: 'Stummschalten',
muted: 'Stummgeschaltet',
followers: 'Folgende',
followees: 'Folgt',
per_day: 'pro Tag',
remote_follow: 'Remote Follow'
},
timeline: {
show_new: 'Zeige Neuere',
error_fetching: 'Fehler beim Laden',
up_to_date: 'Aktuell',
load_older: 'Lade ältere Beiträge',
conversation: 'Unterhaltung',
collapse: 'Einklappen',
repeated: 'wiederholte'
},
settings: {
user_settings: 'Benutzereinstellungen',
name_bio: 'Name & Bio',
name: 'Name',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Dein derzeitiger Avatar',
set_new_avatar: 'Setze neuen Avatar',
profile_banner: 'Profil Banner',
current_profile_banner: 'Dein derzeitiger Profil Banner',
set_new_profile_banner: 'Setze neuen Profil Banner',
profile_background: 'Profil Hintergrund',
set_new_profile_background: 'Setze neuen Profil Hintergrund',
settings: 'Einstellungen',
theme: 'Farbschema',
presets: 'Voreinstellungen',
export_theme: 'Farbschema speichern',
import_theme: 'Farbschema laden',
invalid_theme_imported: 'Die ausgewählte Datei ist kein unterstütztes Pleroma-Theme. Keine Änderungen wurden vorgenommen.',
theme_help: 'Benutze HTML Farbcodes (#rrggbb) um dein Farbschema anzupassen',
radii_help: 'Kantenrundung (in Pixel) der Oberfläche anpassen',
background: 'Hintergrund',
foreground: 'Vordergrund',
text: 'Text',
links: 'Links',
cBlue: 'Blau (Antworten, Folgt dir)',
cRed: 'Rot (Abbrechen)',
cOrange: 'Orange (Favorisieren)',
cGreen: 'Grün (Retweet)',
btnRadius: 'Buttons',
inputRadius: 'Eingabefelder',
panelRadius: 'Panel',
avatarRadius: 'Avatare',
avatarAltRadius: 'Avatare (Benachrichtigungen)',
tooltipRadius: 'Tooltips/Warnungen',
attachmentRadius: 'Anhänge',
filtering: 'Filter',
filtering_explanation: 'Alle Beiträge die diese Wörter enthalten werden ausgeblendet. Ein Wort pro Zeile.',
attachments: 'Anhänge',
hide_attachments_in_tl: 'Anhänge in der Zeitleiste ausblenden',
hide_attachments_in_convo: 'Anhänge in Unterhaltungen ausblenden',
nsfw_clickthrough: 'Aktiviere ausblendbares Overlay für Anhänge, die als NSFW markiert sind',
stop_gifs: 'Play-on-hover GIFs',
autoload: 'Aktiviere automatisches Laden von älteren Beiträgen beim scrollen',
streaming: 'Aktiviere automatisches Laden (Streaming) von neuen Beiträgen',
reply_link_preview: 'Aktiviere reply-link Vorschau bei Maus-Hover',
follow_import: 'Folgeliste importieren',
import_followers_from_a_csv_file: 'Importiere Kontakte, denen du folgen möchtest, aus einer CSV-Datei',
follows_imported: 'Folgeliste importiert! Die Bearbeitung kann eine Zeit lang dauern.',
follow_import_error: 'Fehler beim importieren der Folgeliste',
delete_account: 'Account löschen',
delete_account_description: 'Lösche deinen Account und alle deine Nachrichten dauerhaft.',
delete_account_instructions: 'Tippe dein Passwort unten in das Feld ein um die Löschung deines Accounts zu bestätigen.',
delete_account_error: 'Es ist ein Fehler beim löschen deines Accounts aufgetreten. Tritt dies weiterhin auf, wende dich an den Administrator der Instanz.',
follow_export: 'Folgeliste exportieren',
follow_export_processing: 'In Bearbeitung. Die Liste steht gleich zum herunterladen bereit.',
follow_export_button: 'Liste (.csv) erstellen',
change_password: 'Passwort ändern',
current_password: 'Aktuelles Passwort',
new_password: 'Neues Passwort',
confirm_new_password: 'Neues Passwort bestätigen',
changed_password: 'Passwort erfolgreich geändert!',
change_password_error: 'Es gab ein Problem bei der Änderung des Passworts.'
},
notifications: {
notifications: 'Benachrichtigungen',
read: 'Gelesen!',
followed_you: 'folgt dir',
favorited_you: 'favorisierte deine Nachricht',
repeated_you: 'wiederholte deine Nachricht'
},
login: {
login: 'Anmelden',
username: 'Benutzername',
placeholder: 'z.B. lain',
password: 'Passwort',
register: 'Registrieren',
logout: 'Abmelden'
},
registration: {
registration: 'Registrierung',
fullname: 'Angezeigter Name',
email: 'Email',
bio: 'Bio',
password_confirm: 'Passwort bestätigen'
},
post_status: {
posting: 'Veröffentlichen',
default: 'Sitze gerade im Hofbräuhaus.',
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',
direct_warning: 'Dieser Beitrag wird nur für die erwähnten Nutzer sichtbar sein.',
scope: {
public: 'Öffentlich - Beitrag an öffentliche Zeitleisten',
unlisted: 'Nicht gelistet - Nicht in öffentlichen Zeitleisten anzeigen',
private: 'Nur Folgende - Beitrag nur an Folgende',
direct: 'Direkt - Beitrag nur an erwähnte Profile'
}
},
finder: {
find_user: 'Finde Benutzer',
error_fetching_user: 'Fehler beim Suchen des Benutzers'
},
general: {
submit: 'Absenden',
apply: 'Anwenden'
},
user_profile: {
timeline_title: 'Beiträge'
}
}
const fi = {
nav: {
timeline: 'Aikajana',
mentions: 'Maininnat',
public_tl: 'Julkinen Aikajana',
twkn: 'Koko Tunnettu Verkosto'
},
user_card: {
follows_you: 'Seuraa sinua!',
following: 'Seuraat!',
follow: 'Seuraa',
statuses: 'Viestit',
mute: 'Hiljennä',
muted: 'Hiljennetty',
followers: 'Seuraajat',
followees: 'Seuraa',
per_day: 'päivässä'
},
timeline: {
show_new: 'Näytä uudet',
error_fetching: 'Virhe ladatessa viestejä',
up_to_date: 'Ajantasalla',
load_older: 'Lataa vanhempia viestejä',
conversation: 'Keskustelu',
collapse: 'Sulje',
repeated: 'toisti'
},
settings: {
user_settings: 'Käyttäjän asetukset',
name_bio: 'Nimi ja kuvaus',
name: 'Nimi',
bio: 'Kuvaus',
avatar: 'Profiilikuva',
current_avatar: 'Nykyinen profiilikuvasi',
set_new_avatar: 'Aseta uusi profiilikuva',
profile_banner: 'Juliste',
current_profile_banner: 'Nykyinen julisteesi',
set_new_profile_banner: 'Aseta uusi juliste',
profile_background: 'Taustakuva',
set_new_profile_background: 'Aseta uusi taustakuva',
settings: 'Asetukset',
theme: 'Teema',
presets: 'Valmiit teemat',
theme_help: 'Käytä heksadesimaalivärejä muokataksesi väriteemaasi.',
background: 'Tausta',
foreground: 'Korostus',
text: 'Teksti',
links: 'Linkit',
filtering: 'Suodatus',
filtering_explanation: 'Kaikki viestit, jotka sisältävät näitä sanoja, suodatetaan. Yksi sana per rivi.',
attachments: 'Liitteet',
hide_attachments_in_tl: 'Piilota liitteet aikajanalla',
hide_attachments_in_convo: 'Piilota liitteet keskusteluissa',
nsfw_clickthrough: 'Piilota NSFW liitteet klikkauksen taakse.',
autoload: 'Lataa vanhempia viestejä automaattisesti ruudun pohjalla',
streaming: 'Näytä uudet viestit automaattisesti ollessasi ruudun huipulla',
reply_link_preview: 'Keskusteluiden vastauslinkkien esikatselu'
},
notifications: {
notifications: 'Ilmoitukset',
read: 'Lue!',
followed_you: 'seuraa sinua',
favorited_you: 'tykkäsi viestistäsi',
repeated_you: 'toisti viestisi'
},
login: {
login: 'Kirjaudu sisään',
username: 'Käyttäjänimi',
placeholder: 'esim. lain',
password: 'Salasana',
register: 'Rekisteröidy',
logout: 'Kirjaudu ulos'
},
registration: {
registration: 'Rekisteröityminen',
fullname: 'Koko nimi',
email: 'Sähköposti',
bio: 'Kuvaus',
password_confirm: 'Salasanan vahvistaminen'
},
post_status: {
posting: 'Lähetetään',
default: 'Tulin juuri saunasta.'
},
finder: {
find_user: 'Hae käyttäjä',
error_fetching_user: 'Virhe hakiessa käyttäjää'
},
general: {
submit: 'Lähetä',
apply: 'Aseta'
}
}
const en = {
chat: {
title: 'Chat'
},
nav: {
chat: 'Local Chat',
timeline: 'Timeline',
mentions: 'Mentions',
public_tl: 'Public Timeline',
twkn: 'The Whole Known Network',
friend_requests: 'Follow Requests'
},
user_card: {
follows_you: 'Follows you!',
following: 'Following!',
follow: 'Follow',
blocked: 'Blocked!',
block: 'Block',
statuses: 'Statuses',
mute: 'Mute',
muted: 'Muted',
followers: 'Followers',
followees: 'Following',
per_day: 'per day',
remote_follow: 'Remote follow',
approve: 'Approve',
deny: 'Deny'
},
timeline: {
show_new: 'Show new',
error_fetching: 'Error fetching updates',
up_to_date: 'Up-to-date',
load_older: 'Load older statuses',
conversation: 'Conversation',
collapse: 'Collapse',
repeated: 'repeated',
no_retweet_hint: 'Post is marked as followers-only or direct and cannot be repeated'
},
settings: {
general: 'General',
user_settings: 'User Settings',
name_bio: 'Name & Bio',
name: 'Name',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Your current avatar',
set_new_avatar: 'Set new avatar',
profile_banner: 'Profile Banner',
current_profile_banner: 'Your current profile banner',
set_new_profile_banner: 'Set new profile banner',
profile_background: 'Profile Background',
set_new_profile_background: 'Set new profile background',
settings: 'Settings',
theme: 'Theme',
presets: 'Presets',
export_theme: 'Save preset',
import_theme: 'Load preset',
theme_help: 'Use hex color codes (#rrggbb) to customize your color theme.',
invalid_theme_imported: 'The selected file is not a supported Pleroma theme. No changes to your theme were made.',
radii_help: 'Set up interface edge rounding (in pixels)',
background: 'Background',
foreground: 'Foreground',
text: 'Text',
links: 'Links',
cBlue: 'Blue (Reply, follow)',
cRed: 'Red (Cancel)',
cOrange: 'Orange (Favorite)',
cGreen: 'Green (Retweet)',
btnRadius: 'Buttons',
inputRadius: 'Input fields',
panelRadius: 'Panels',
avatarRadius: 'Avatars',
avatarAltRadius: 'Avatars (Notifications)',
tooltipRadius: 'Tooltips/alerts',
attachmentRadius: 'Attachments',
filtering: 'Filtering',
filtering_explanation: 'All statuses containing these words will be muted, one per line',
attachments: 'Attachments',
hide_attachments_in_tl: 'Hide attachments in timeline',
hide_attachments_in_convo: 'Hide attachments in conversations',
nsfw_clickthrough: 'Enable clickthrough NSFW attachment hiding',
collapse_subject: 'Collapse posts with subjects',
stop_gifs: 'Play-on-hover GIFs',
autoload: 'Enable automatic loading when scrolled to the bottom',
streaming: 'Enable automatic streaming of new posts when scrolled to the top',
pause_on_unfocused: 'Pause streaming when tab is not focused',
loop_video: 'Loop videos',
loop_video_silent_only: 'Loop only videos without sound (i.e. Mastodon\'s "gifs")',
reply_link_preview: 'Enable reply-link preview on mouse hover',
replies_in_timeline: 'Replies in timeline',
+ hide_user_stats: 'Hide user statistics (e.g. status and follower counts)',
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',
notification_visibility: 'Types of notifications to show',
notification_visibility_likes: 'Likes',
notification_visibility_mentions: 'Mentions',
notification_visibility_repeats: 'Repeats',
notification_visibility_follows: 'Follows',
follow_import: 'Follow import',
import_followers_from_a_csv_file: 'Import follows from a csv file',
follows_imported: 'Follows imported! Processing them will take a while.',
follow_import_error: 'Error importing followers',
delete_account: 'Delete Account',
delete_account_description: 'Permanently delete your account and all your messages.',
delete_account_instructions: 'Type your password in the input below to confirm account deletion.',
delete_account_error: 'There was an issue deleting your account. If this persists please contact your instance administrator.',
follow_export: 'Follow export',
follow_export_processing: 'Processing, you\'ll soon be asked to download your file',
follow_export_button: 'Export your follows to a csv file',
change_password: 'Change Password',
current_password: 'Current password',
new_password: 'New password',
confirm_new_password: 'Confirm new password',
changed_password: 'Password changed successfully!',
change_password_error: 'There was an issue changing your password.',
lock_account_description: 'Restrict your account to approved followers only',
limited_availability: 'Unavailable in your browser',
default_vis: 'Default visibility scope',
profile_tab: 'Profile',
security_tab: 'Security',
data_import_export_tab: 'Data Import / Export',
interfaceLanguage: 'Interface language'
},
notifications: {
notifications: 'Notifications',
read: 'Read!',
followed_you: 'followed you',
favorited_you: 'favorited your status',
repeated_you: 'repeated your status',
broken_favorite: 'Unknown status, searching for it...',
load_older: 'Load older notifications'
},
login: {
login: 'Log in',
username: 'Username',
placeholder: 'e.g. lain',
password: 'Password',
register: 'Register',
logout: 'Log out'
},
registration: {
registration: 'Registration',
fullname: 'Display name',
email: 'Email',
bio: 'Bio',
password_confirm: 'Password confirmation',
token: 'Invite token'
},
post_status: {
posting: 'Posting',
content_warning: 'Subject (optional)',
default: 'Just landed in L.A.',
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',
direct_warning: 'This post will only be visible to all the mentioned users.',
attachments_sensitive: 'Attachments marked sensitive',
attachments_not_sensitive: 'Attachments <strong>not</strong> marked sensitive',
scope: {
public: 'Public - Post to public timelines',
unlisted: 'Unlisted - Do not post to public timelines',
private: 'Followers-only - Post to followers only',
direct: 'Direct - Post to mentioned users only'
},
content_type: {
plain_text: 'Plain text'
}
},
finder: {
find_user: 'Find user',
error_fetching_user: 'Error fetching user'
},
general: {
submit: 'Submit',
apply: 'Apply'
},
user_profile: {
timeline_title: 'User Timeline'
},
who_to_follow: {
who_to_follow: 'Who to follow',
more: 'More'
}
}
const eo = {
chat: {
title: 'Babilo'
},
nav: {
chat: 'Loka babilo',
timeline: 'Tempovido',
mentions: 'Mencioj',
public_tl: 'Publika tempovido',
twkn: 'Tuta konata reto'
},
user_card: {
follows_you: 'Abonas vin!',
following: 'Abonanta!',
follow: 'Aboni',
blocked: 'Barita!',
block: 'Bari',
statuses: 'Statoj',
mute: 'Silentigi',
muted: 'Silentigita',
followers: 'Abonantoj',
followees: 'Abonatoj',
per_day: 'tage',
remote_follow: 'Fora abono'
},
timeline: {
show_new: 'Montri novajn',
error_fetching: 'Eraro ĝisdatigante',
up_to_date: 'Ĝisdata',
load_older: 'Enlegi pli malnovajn statojn',
conversation: 'Interparolo',
collapse: 'Maletendi',
repeated: 'ripetata'
},
settings: {
user_settings: 'Uzulaj agordoj',
name_bio: 'Nomo kaj prio',
name: 'Nomo',
bio: 'Prio',
avatar: 'Profilbildo',
current_avatar: 'Via nuna profilbildo',
set_new_avatar: 'Agordi novan profilbildon',
profile_banner: 'Profila rubando',
current_profile_banner: 'Via nuna profila rubando',
set_new_profile_banner: 'Agordi novan profilan rubandon',
profile_background: 'Profila fono',
set_new_profile_background: 'Agordi novan profilan fonon',
settings: 'Agordoj',
theme: 'Haŭto',
presets: 'Antaŭmetaĵoj',
theme_help: 'Uzu deksesumajn kolorkodojn (#rrvvbb) por adapti vian koloran haŭton.',
radii_help: 'Agordi fasadan rondigon de randoj (rastrumere)',
background: 'Fono',
foreground: 'Malfono',
text: 'Teksto',
links: 'Ligiloj',
cBlue: 'Blua (Respondo, abono)',
cRed: 'Ruĝa (Nuligo)',
cOrange: 'Orange (Ŝato)',
cGreen: 'Verda (Kunhavigo)',
btnRadius: 'Butonoj',
panelRadius: 'Paneloj',
avatarRadius: 'Profilbildoj',
avatarAltRadius: 'Profilbildoj (Sciigoj)',
tooltipRadius: 'Ŝpruchelpiloj/avertoj',
attachmentRadius: 'Kunsendaĵoj',
filtering: 'Filtrado',
filtering_explanation: 'Ĉiuj statoj kun tiuj ĉi vortoj silentiĝos, po unu linie',
attachments: 'Kunsendaĵoj',
hide_attachments_in_tl: 'Kaŝi kunsendaĵojn en tempovido',
hide_attachments_in_convo: 'Kaŝi kunsendaĵojn en interparoloj',
nsfw_clickthrough: 'Ŝalti traklakan kaŝon de konsternaj kunsendaĵoj',
stop_gifs: 'Movi GIF-bildojn dum ŝvebo',
autoload: 'Ŝalti memfaran enlegadon ĉe subo de paĝo',
streaming: 'Ŝalti memfaran fluigon de novaj afiŝoj ĉe supro de paĝo',
reply_link_preview: 'Ŝalti respond-ligilan antaŭvidon dum ŝvebo',
follow_import: 'Abona enporto',
import_followers_from_a_csv_file: 'Enporti abonojn de CSV-dosiero',
follows_imported: 'Abonoj enportiĝis! Traktado daŭros iom.',
follow_import_error: 'Eraro enportante abonojn'
},
notifications: {
notifications: 'Sciigoj',
read: 'Legita!',
followed_you: 'ekabonis vin',
favorited_you: 'ŝatis vian staton',
repeated_you: 'ripetis vian staton'
},
login: {
login: 'Saluti',
username: 'Salutnomo',
placeholder: 'ekz. lain',
password: 'Pasvorto',
register: 'Registriĝi',
logout: 'Adiaŭi'
},
registration: {
registration: 'Registriĝo',
fullname: 'Vidiga nomo',
email: 'Retpoŝtadreso',
bio: 'Prio',
password_confirm: 'Konfirmo de pasvorto'
},
post_status: {
posting: 'Afiŝanta',
default: 'Ĵus alvenis la universalan kongreson!'
},
finder: {
find_user: 'Trovi uzulon',
error_fetching_user: 'Eraro alportante uzulon'
},
general: {
submit: 'Sendi',
apply: 'Apliki'
},
user_profile: {
timeline_title: 'Uzula tempovido'
}
}
const et = {
nav: {
timeline: 'Ajajoon',
mentions: 'Mainimised',
public_tl: 'Avalik Ajajoon',
twkn: 'Kogu Teadaolev Võrgustik'
},
user_card: {
follows_you: 'Jälgib sind!',
following: 'Jälgin!',
follow: 'Jälgi',
blocked: 'Blokeeritud!',
block: 'Blokeeri',
statuses: 'Staatuseid',
mute: 'Vaigista',
muted: 'Vaigistatud',
followers: 'Jälgijaid',
followees: 'Jälgitavaid',
per_day: 'päevas'
},
timeline: {
show_new: 'Näita uusi',
error_fetching: 'Viga uuenduste laadimisel',
up_to_date: 'Uuendatud',
load_older: 'Kuva vanemaid staatuseid',
conversation: 'Vestlus'
},
settings: {
user_settings: 'Kasutaja sätted',
name_bio: 'Nimi ja Bio',
name: 'Nimi',
bio: 'Bio',
avatar: 'Profiilipilt',
current_avatar: 'Sinu praegune profiilipilt',
set_new_avatar: 'Vali uus profiilipilt',
profile_banner: 'Profiilibänner',
current_profile_banner: 'Praegune profiilibänner',
set_new_profile_banner: 'Vali uus profiilibänner',
profile_background: 'Profiilitaust',
set_new_profile_background: 'Vali uus profiilitaust',
settings: 'Sätted',
theme: 'Teema',
filtering: 'Sisu filtreerimine',
filtering_explanation: 'Kõiki staatuseid, mis sisaldavad neid sõnu, ei kuvata. Üks sõna reale.',
attachments: 'Manused',
hide_attachments_in_tl: 'Peida manused ajajoonel',
hide_attachments_in_convo: 'Peida manused vastlustes',
nsfw_clickthrough: 'Peida tööks-mittesobivad(NSFW) manuste hiireklõpsu taha',
autoload: 'Luba ajajoone automaatne uuendamine kui ajajoon on põhja keritud',
reply_link_preview: 'Luba algpostituse kuvamine vastustes'
},
notifications: {
notifications: 'Teavitused',
read: 'Loe!',
followed_you: 'alustas sinu jälgimist'
},
login: {
login: 'Logi sisse',
username: 'Kasutajanimi',
placeholder: 'nt lain',
password: 'Parool',
register: 'Registreeru',
logout: 'Logi välja'
},
registration: {
registration: 'Registreerimine',
fullname: 'Kuvatav nimi',
email: 'E-post',
bio: 'Bio',
password_confirm: 'Parooli kinnitamine'
},
post_status: {
posting: 'Postitan',
default: 'Just sõitsin elektrirongiga Tallinnast Pääskülla.'
},
finder: {
find_user: 'Otsi kasutajaid',
error_fetching_user: 'Viga kasutaja leidmisel'
},
general: {
submit: 'Postita'
}
}
const hu = {
nav: {
timeline: 'Idővonal',
mentions: 'Említéseim',
public_tl: 'Publikus Idővonal',
twkn: 'Az Egész Ismert Hálózat'
},
user_card: {
follows_you: 'Követ téged!',
following: 'Követve!',
follow: 'Követ',
blocked: 'Letiltva!',
block: 'Letilt',
statuses: 'Állapotok',
mute: 'Némít',
muted: 'Némított',
followers: 'Követők',
followees: 'Követettek',
per_day: 'naponta'
},
timeline: {
show_new: 'Újak mutatása',
error_fetching: 'Hiba a frissítések beszerzésénél',
up_to_date: 'Naprakész',
load_older: 'Régebbi állapotok betöltése',
conversation: 'Társalgás'
},
settings: {
user_settings: 'Felhasználói beállítások',
name_bio: 'Név és Bio',
name: 'Név',
bio: 'Bio',
avatar: 'Avatár',
current_avatar: 'Jelenlegi avatár',
set_new_avatar: 'Új avatár',
profile_banner: 'Profil Banner',
current_profile_banner: 'Jelenlegi profil banner',
set_new_profile_banner: 'Új profil banner',
profile_background: 'Profil háttérkép',
set_new_profile_background: 'Új profil háttér beállítása',
settings: 'Beállítások',
theme: 'Téma',
filtering: 'Szűrés',
filtering_explanation: 'Minden tartalom mely ezen szavakat tartalmazza némítva lesz, soronként egy',
attachments: 'Csatolmányok',
hide_attachments_in_tl: 'Csatolmányok elrejtése az idővonalon',
hide_attachments_in_convo: 'Csatolmányok elrejtése a társalgásokban',
nsfw_clickthrough: 'NSFW átkattintási tartalom elrejtésének engedélyezése',
autoload: 'Autoatikus betöltés engedélyezése lap aljára görgetéskor',
reply_link_preview: 'Válasz-link előzetes mutatása egér rátételkor'
},
notifications: {
notifications: 'Értesítések',
read: 'Olvasva!',
followed_you: 'követ téged'
},
login: {
login: 'Bejelentkezés',
username: 'Felhasználó név',
placeholder: 'e.g. lain',
password: 'Jelszó',
register: 'Feliratkozás',
logout: 'Kijelentkezés'
},
registration: {
registration: 'Feliratkozás',
fullname: 'Teljes név',
email: 'Email',
bio: 'Bio',
password_confirm: 'Jelszó megerősítése'
},
post_status: {
posting: 'Küldés folyamatban',
default: 'Most érkeztem L.A.-be'
},
finder: {
find_user: 'Felhasználó keresése',
error_fetching_user: 'Hiba felhasználó beszerzésével'
},
general: {
submit: 'Elküld'
}
}
const ro = {
nav: {
timeline: 'Cronologie',
mentions: 'Menționări',
public_tl: 'Cronologie Publică',
twkn: 'Toată Reșeaua Cunoscută'
},
user_card: {
follows_you: 'Te urmărește!',
following: 'Urmărit!',
follow: 'Urmărește',
blocked: 'Blocat!',
block: 'Blochează',
statuses: 'Stări',
mute: 'Pune pe mut',
muted: 'Pus pe mut',
followers: 'Următori',
followees: 'Urmărește',
per_day: 'pe zi'
},
timeline: {
show_new: 'Arată cele noi',
error_fetching: 'Erare la preluarea actualizărilor',
up_to_date: 'La zi',
load_older: 'Încarcă stări mai vechi',
conversation: 'Conversație'
},
settings: {
user_settings: 'Setările utilizatorului',
name_bio: 'Nume și Bio',
name: 'Nume',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Avatarul curent',
set_new_avatar: 'Setează avatar nou',
profile_banner: 'Banner de profil',
current_profile_banner: 'Bannerul curent al profilului',
set_new_profile_banner: 'Setează banner nou la profil',
profile_background: 'Fundalul de profil',
set_new_profile_background: 'Setează fundal nou',
settings: 'Setări',
theme: 'Temă',
filtering: 'Filtru',
filtering_explanation: 'Toate stările care conțin aceste cuvinte vor fi puse pe mut, una pe linie',
attachments: 'Atașamente',
hide_attachments_in_tl: 'Ascunde atașamentele în cronologie',
hide_attachments_in_convo: 'Ascunde atașamentele în conversații',
nsfw_clickthrough: 'Permite ascunderea al atașamentelor NSFW',
autoload: 'Permite încărcarea automată când scrolat la capăt',
reply_link_preview: 'Permite previzualizarea linkului de răspuns la planarea de mouse'
},
notifications: {
notifications: 'Notificări',
read: 'Citit!',
followed_you: 'te-a urmărit'
},
login: {
login: 'Loghează',
username: 'Nume utilizator',
placeholder: 'd.e. lain',
password: 'Parolă',
register: 'Înregistrare',
logout: 'Deloghează'
},
registration: {
registration: 'Îregistrare',
fullname: 'Numele întreg',
email: 'Email',
bio: 'Bio',
password_confirm: 'Cofirmă parola'
},
post_status: {
posting: 'Postează',
default: 'Nu de mult am aterizat în L.A.'
},
finder: {
find_user: 'Găsește utilizator',
error_fetching_user: 'Eroare la preluarea utilizatorului'
},
general: {
submit: 'trimite'
}
}
const ja = {
chat: {
title: 'チャット'
},
nav: {
chat: 'ローカルチャット',
timeline: 'タイムライン',
mentions: 'メンション',
public_tl: 'パブリックタイムライン',
twkn: 'つながっているすべてのネットワーク',
friend_requests: 'Follow Requests'
},
user_card: {
follows_you: 'フォローされました!',
following: 'フォローしています!',
follow: 'フォロー',
blocked: 'ブロックしています!',
block: 'ブロック',
statuses: 'ステータス',
mute: 'ミュート',
muted: 'ミュートしています!',
followers: 'フォロワー',
followees: 'フォロー',
per_day: '/日',
remote_follow: 'リモートフォロー',
approve: 'Approve',
deny: 'Deny'
},
timeline: {
show_new: 'よみこみ',
error_fetching: 'よみこみがエラーになりました。',
up_to_date: 'さいしん',
load_older: 'ふるいステータス',
conversation: 'スレッド',
collapse: 'たたむ',
repeated: 'リピート'
},
settings: {
user_settings: 'ユーザーせってい',
name_bio: 'なまえとプロフィール',
name: 'なまえ',
bio: 'プロフィール',
avatar: 'アバター',
current_avatar: 'いまのアバター',
set_new_avatar: 'あたらしいアバターをせっていする',
profile_banner: 'プロフィールバナー',
current_profile_banner: 'いまのプロフィールバナー',
set_new_profile_banner: 'あたらしいプロフィールバナーを設定する',
profile_background: 'プロフィールのバックグラウンド',
set_new_profile_background: 'あたらしいプロフィールのバックグラウンドをせっていする',
settings: 'せってい',
theme: 'テーマ',
presets: 'プリセット',
theme_help: 'カラーテーマをカスタマイズできます。',
radii_help: 'インターフェースのまるさをせっていする。',
background: 'バックグラウンド',
foreground: 'フォアグラウンド',
text: 'もじ',
links: 'リンク',
cBlue: 'あお (リプライ, フォロー)',
cRed: 'あか (キャンセル)',
cOrange: 'オレンジ (おきにいり)',
cGreen: 'みどり (リピート)',
btnRadius: 'ボタン',
inputRadius: 'Input fields',
panelRadius: 'パネル',
avatarRadius: 'アバター',
avatarAltRadius: 'アバター (つうち)',
tooltipRadius: 'ツールチップ/アラート',
attachmentRadius: 'ファイル',
filtering: 'フィルタリング',
filtering_explanation: 'これらのことばをふくむすべてのものがミュートされます。1行に1つのことばをかいてください。',
attachments: 'ファイル',
hide_attachments_in_tl: 'タイムラインのファイルをかくす。',
hide_attachments_in_convo: 'スレッドのファイルをかくす。',
nsfw_clickthrough: 'NSFWなファイルをかくす。',
stop_gifs: 'カーソルをかさねたとき、GIFをうごかす。',
autoload: 'したにスクロールしたとき、じどうてきによみこむ。',
streaming: 'うえまでスクロールしたとき、じどうてきにストリーミングする。',
reply_link_preview: 'カーソルをかさねたとき、リプライのプレビューをみる。',
follow_import: 'フォローインポート',
import_followers_from_a_csv_file: 'CSVファイルからフォローをインポートする。',
follows_imported: 'フォローがインポートされました! すこしじかんがかかるかもしれません。',
follow_import_error: 'フォローのインポートがエラーになりました。',
delete_account: 'アカウントをけす',
delete_account_description: 'あなたのアカウントとメッセージが、きえます。',
delete_account_instructions: 'ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。',
delete_account_error: 'アカウントをけすことが、できなかったかもしれません。インスタンスのかんりしゃに、れんらくしてください。',
follow_export: 'フォローのエクスポート',
follow_export_processing: 'おまちください。まもなくファイルをダウンロードできます。',
follow_export_button: 'エクスポート',
change_password: 'パスワードをかえる',
current_password: 'いまのパスワード',
new_password: 'あたらしいパスワード',
confirm_new_password: 'あたらしいパスワードのかくにん',
changed_password: 'パスワードが、かわりました!',
change_password_error: 'パスワードをかえることが、できなかったかもしれません。',
lock_account_description: 'あなたがみとめたひとだけ、あなたのアカウントをフォローできます。'
},
notifications: {
notifications: 'つうち',
read: 'よんだ!',
followed_you: 'フォローされました',
favorited_you: 'あなたのステータスがおきにいりされました',
repeated_you: 'あなたのステータスがリピートされました'
},
login: {
login: 'ログイン',
username: 'ユーザーめい',
placeholder: 'れい: lain',
password: 'パスワード',
register: 'はじめる',
logout: 'ログアウト'
},
registration: {
registration: 'はじめる',
fullname: 'スクリーンネーム',
email: 'Eメール',
bio: 'プロフィール',
password_confirm: 'パスワードのかくにん'
},
post_status: {
posting: 'とうこう',
content_warning: 'せつめい (かかなくてもよい)',
default: 'はねだくうこうに、つきました。',
account_not_locked_warning: 'あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。',
account_not_locked_warning_link: 'ロックされたアカウント',
direct_warning: 'このステータスは、メンションされたユーザーだけが、よむことができます。',
scope: {
public: 'パブリック - パブリックタイムラインにとどきます。',
unlisted: 'アンリステッド - パブリックタイムラインにとどきません。',
private: 'フォロワーげんてい - フォロワーのみにとどきます。',
direct: 'ダイレクト - メンションされたユーザーのみにとどきます。'
}
},
finder: {
find_user: 'ユーザーをさがす',
error_fetching_user: 'ユーザーけんさくがエラーになりました。'
},
general: {
submit: 'そうしん',
apply: 'てきよう'
},
user_profile: {
timeline_title: 'ユーザータイムライン'
},
who_to_follow: {
who_to_follow: 'おすすめユーザー',
more: 'くわしく'
}
}
const fr = {
nav: {
chat: 'Chat local',
timeline: 'Journal',
mentions: 'Notifications',
public_tl: 'Statuts locaux',
twkn: 'Le réseau connu'
},
user_card: {
follows_you: 'Vous suit !',
following: 'Suivi !',
follow: 'Suivre',
blocked: 'Bloqué',
block: 'Bloquer',
statuses: 'Statuts',
mute: 'Masquer',
muted: 'Masqué',
followers: 'Vous suivent',
followees: 'Suivis',
per_day: 'par jour',
remote_follow: 'Suivre d\'une autre instance'
},
timeline: {
show_new: 'Afficher plus',
error_fetching: 'Erreur en cherchant les mises à jour',
up_to_date: 'À jour',
load_older: 'Afficher plus',
conversation: 'Conversation',
collapse: 'Fermer',
repeated: 'a partagé'
},
settings: {
user_settings: 'Paramètres utilisateur',
name_bio: 'Nom & Bio',
name: 'Nom',
bio: 'Biographie',
avatar: 'Avatar',
current_avatar: 'Avatar actuel',
set_new_avatar: 'Changer d\'avatar',
profile_banner: 'Bannière de profil',
current_profile_banner: 'Bannière de profil actuelle',
set_new_profile_banner: 'Changer de bannière',
profile_background: 'Image de fond',
set_new_profile_background: 'Changer d\'image de fond',
settings: 'Paramètres',
theme: 'Thème',
filtering: 'Filtre',
filtering_explanation: 'Tous les statuts contenant ces mots seront masqués. Un mot par ligne.',
attachments: 'Pièces jointes',
hide_attachments_in_tl: 'Masquer les pièces jointes dans le journal',
hide_attachments_in_convo: 'Masquer les pièces jointes dans les conversations',
nsfw_clickthrough: 'Masquer les images marquées comme contenu adulte ou sensible',
autoload: 'Charger la suite automatiquement une fois le bas de la page atteint',
reply_link_preview: 'Afficher un aperçu lors du survol de liens vers une réponse',
presets: 'Thèmes prédéfinis',
theme_help: 'Spécifiez des codes couleur hexadécimaux (#aabbcc) pour personnaliser les couleurs du thème',
background: 'Arrière-plan',
foreground: 'Premier plan',
text: 'Texte',
links: 'Liens',
streaming: 'Charger automatiquement les nouveaux statuts lorsque vous êtes au haut de la page',
follow_import: 'Importer des abonnements',
import_followers_from_a_csv_file: 'Importer des abonnements depuis un fichier csv',
follows_imported: 'Abonnements importés ! Le traitement peut prendre un moment.',
follow_import_error: 'Erreur lors de l\'importation des abonnements.',
follow_export: 'Exporter les abonnements',
follow_export_button: 'Exporter les abonnements en csv',
follow_export_processing: 'Exportation en cours…',
cBlue: 'Bleu (Répondre, suivre)',
cRed: 'Rouge (Annuler)',
cOrange: 'Orange (Aimer)',
cGreen: 'Vert (Partager)',
btnRadius: 'Boutons',
panelRadius: 'Fenêtres',
inputRadius: 'Champs de texte',
avatarRadius: 'Avatars',
avatarAltRadius: 'Avatars (Notifications)',
tooltipRadius: 'Info-bulles/alertes ',
attachmentRadius: 'Pièces jointes',
radii_help: 'Vous pouvez ici choisir le niveau d\'arrondi des angles de l\'interface (en pixels)',
stop_gifs: 'N\'animer les GIFS que lors du survol du curseur de la souris',
change_password: 'Modifier son mot de passe',
current_password: 'Mot de passe actuel',
new_password: 'Nouveau mot de passe',
confirm_new_password: 'Confirmation du nouveau mot de passe',
delete_account: 'Supprimer le compte',
delete_account_description: 'Supprimer définitivement votre compte et tous vos statuts.',
delete_account_instructions: 'Indiquez votre mot de passe ci-dessous pour confirmer la suppression de 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 de cette instance.'
},
notifications: {
notifications: 'Notifications',
read: 'Lu !',
followed_you: 'a commencé à vous suivre',
favorited_you: 'a aimé votre statut',
repeated_you: 'a partagé votre statut'
},
login: {
login: 'Connexion',
username: 'Identifiant',
placeholder: 'p.e. lain',
password: 'Mot de passe',
register: 'S\'inscrire',
logout: 'Déconnexion'
},
registration: {
registration: 'Inscription',
fullname: 'Pseudonyme',
email: 'Adresse email',
bio: 'Biographie',
password_confirm: 'Confirmation du mot de passe'
},
post_status: {
posting: 'Envoi en cours',
default: 'Écrivez ici votre prochain 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é',
direct_warning: 'Ce message sera visible à toutes les personnes mentionnées.',
scope: {
public: 'Publique - Afficher dans les fils publics',
unlisted: 'Non-Listé - Ne pas afficher dans les fils publics',
private: 'Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos billets',
direct: 'Direct - N’envoyer qu’aux personnes mentionnées'
}
},
finder: {
find_user: 'Chercher un utilisateur',
error_fetching_user: 'Erreur lors de la recherche de l\'utilisateur'
},
general: {
submit: 'Envoyer',
apply: 'Appliquer'
},
user_profile: {
timeline_title: 'Journal de l\'utilisateur'
}
}
const it = {
nav: {
timeline: 'Sequenza temporale',
mentions: 'Menzioni',
public_tl: 'Sequenza temporale pubblica',
twkn: 'L\'intiera rete conosciuta'
},
user_card: {
follows_you: 'Ti segue!',
following: 'Lo stai seguendo!',
follow: 'Segui',
statuses: 'Messaggi',
mute: 'Ammutolisci',
muted: 'Ammutoliti',
followers: 'Chi ti segue',
followees: 'Chi stai seguendo',
per_day: 'al giorno'
},
timeline: {
show_new: 'Mostra nuovi',
error_fetching: 'Errori nel prelievo aggiornamenti',
up_to_date: 'Aggiornato',
load_older: 'Carica messaggi più vecchi'
},
settings: {
user_settings: 'Configurazione dell\'utente',
name_bio: 'Nome & Introduzione',
name: 'Nome',
bio: 'Introduzione',
avatar: 'Avatar',
current_avatar: 'Il tuo attuale avatar',
set_new_avatar: 'Scegli un nuovo avatar',
profile_banner: 'Sfondo del tuo profilo',
current_profile_banner: 'Sfondo attuale',
set_new_profile_banner: 'Scegli un nuovo sfondo per il tuo profilo',
profile_background: 'Sfondo della tua pagina',
set_new_profile_background: 'Scegli un nuovo sfondo per la tua pagina',
settings: 'Settaggi',
theme: 'Tema',
filtering: 'Filtri',
filtering_explanation: 'Filtra via le notifiche che contengono le seguenti parole (inserisci rigo per rigo le parole di innesco)',
attachments: 'Allegati',
hide_attachments_in_tl: 'Nascondi gli allegati presenti nella sequenza temporale',
hide_attachments_in_convo: 'Nascondi gli allegati presenti nelle conversazioni',
nsfw_clickthrough: 'Abilita la trasparenza degli allegati NSFW',
autoload: 'Abilita caricamento automatico quando si raggiunge il fondo schermo',
reply_link_preview: 'Ability il reply-link preview al passaggio del mouse'
},
notifications: {
notifications: 'Notifiche',
read: 'Leggi!',
followed_you: 'ti ha seguito'
},
general: {
submit: 'Invia'
}
}
const oc = {
chat: {
title: 'Messatjariá'
},
nav: {
chat: 'Chat local',
timeline: 'Flux d’actualitat',
mentions: 'Notificacions',
public_tl: 'Estatuts locals',
twkn: 'Lo malhum conegut'
},
user_card: {
follows_you: 'Vos sèc !',
following: 'Seguit !',
follow: 'Seguir',
blocked: 'Blocat',
block: 'Blocar',
statuses: 'Estatuts',
mute: 'Amagar',
muted: 'Amagat',
followers: 'Seguidors',
followees: 'Abonaments',
per_day: 'per jorn',
remote_follow: 'Seguir a distància'
},
timeline: {
show_new: 'Ne veire mai',
error_fetching: 'Error en cercant de mesas a jorn',
up_to_date: 'A jorn',
load_older: 'Ne veire mai',
conversation: 'Conversacion',
collapse: 'Tampar',
repeated: 'repetit'
},
settings: {
user_settings: 'Paramètres utilizaire',
name_bio: 'Nom & Bio',
name: 'Nom',
bio: 'Biografia',
avatar: 'Avatar',
current_avatar: 'Vòstre avatar actual',
set_new_avatar: 'Cambiar l’avatar',
profile_banner: 'Bandièra del perfil',
current_profile_banner: 'Bandièra actuala del perfil',
set_new_profile_banner: 'Cambiar de bandièra',
profile_background: 'Imatge de fons',
set_new_profile_background: 'Cambiar l’imatge de fons',
settings: 'Paramètres',
theme: 'Tèma',
presets: 'Pre-enregistrats',
theme_help: 'Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.',
radii_help: 'Configurar los caires arredondits de l’interfàcia (en pixèls)',
background: 'Rèire plan',
foreground: 'Endavant',
text: 'Tèxte',
links: 'Ligams',
cBlue: 'Blau (Respondre, seguir)',
cRed: 'Roge (Anullar)',
cOrange: 'Irange (Metre en favorit)',
cGreen: 'Verd (Repartajar)',
inputRadius: 'Camps tèxte',
btnRadius: 'Botons',
panelRadius: 'Panèls',
avatarRadius: 'Avatars',
avatarAltRadius: 'Avatars (Notificacions)',
tooltipRadius: 'Astúcias/Alèrta',
attachmentRadius: 'Pèças juntas',
filtering: 'Filtre',
filtering_explanation: 'Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha.',
attachments: 'Pèças juntas',
hide_attachments_in_tl: 'Rescondre las pèças juntas',
hide_attachments_in_convo: 'Rescondre las pèças juntas dins las conversacions',
nsfw_clickthrough: 'Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles',
stop_gifs: 'Lançar los GIFs al subrevòl',
autoload: 'Activar lo cargament automatic un còp arribat al cap de la pagina',
streaming: 'Activar lo cargament automatic dels novèls estatus en anar amont',
reply_link_preview: 'Activar l’apercebut en passar la mirga',
follow_import: 'Importar los abonaments',
import_followers_from_a_csv_file: 'Importar los seguidors d’un fichièr csv',
follows_imported: 'Seguidors importats. Lo tractament pòt trigar una estona.',
follow_import_error: 'Error en important los seguidors'
},
notifications: {
notifications: 'Notficacions',
read: 'Legit !',
followed_you: 'vos sèc',
favorited_you: 'a aimat vòstre estatut',
repeated_you: 'a repetit your vòstre estatut'
},
login: {
login: 'Connexion',
username: 'Nom d’utilizaire',
placeholder: 'e.g. lain',
password: 'Senhal',
register: 'Se marcar',
logout: 'Desconnexion'
},
registration: {
registration: 'Inscripcion',
fullname: 'Nom complèt',
email: 'Adreça de corrièl',
bio: 'Biografia',
password_confirm: 'Confirmar lo senhal'
},
post_status: {
posting: 'Mandadís',
default: 'Escrivètz aquí vòstre estatut.'
},
finder: {
find_user: 'Cercar un utilizaire',
error_fetching_user: 'Error pendent la recèrca d’un utilizaire'
},
general: {
submit: 'Mandar',
apply: 'Aplicar'
},
user_profile: {
timeline_title: 'Flux utilizaire'
}
}
const pl = {
chat: {
title: 'Czat'
},
nav: {
chat: 'Lokalny czat',
timeline: 'Oś czasu',
mentions: 'Wzmianki',
public_tl: 'Publiczna oś czasu',
twkn: 'Cała znana sieć'
},
user_card: {
follows_you: 'Obserwuje cię!',
following: 'Obserwowany!',
follow: 'Obserwuj',
blocked: 'Zablokowany!',
block: 'Zablokuj',
statuses: 'Statusy',
mute: 'Wycisz',
muted: 'Wyciszony',
followers: 'Obserwujący',
followees: 'Obserwowani',
per_day: 'dziennie',
remote_follow: 'Zdalna obserwacja'
},
timeline: {
show_new: 'Pokaż nowe',
error_fetching: 'Błąd pobierania',
up_to_date: 'Na bieżąco',
load_older: 'Załaduj starsze statusy',
conversation: 'Rozmowa',
collapse: 'Zwiń',
repeated: 'powtórzono'
},
settings: {
user_settings: 'Ustawienia użytkownika',
name_bio: 'Imię i bio',
name: 'Imię',
bio: 'Bio',
avatar: 'Awatar',
current_avatar: 'Twój obecny awatar',
set_new_avatar: 'Ustaw nowy awatar',
profile_banner: 'Banner profilu',
current_profile_banner: 'Twój obecny banner profilu',
set_new_profile_banner: 'Ustaw nowy banner profilu',
profile_background: 'Tło profilu',
set_new_profile_background: 'Ustaw nowe tło profilu',
settings: 'Ustawienia',
theme: 'Motyw',
presets: 'Gotowe motywy',
theme_help: 'Użyj kolorów w notacji szesnastkowej (#rrggbb), by stworzyć swój motyw.',
radii_help: 'Ustaw zaokrąglenie krawędzi interfejsu (w pikselach)',
background: 'Tło',
foreground: 'Pierwszy plan',
text: 'Tekst',
links: 'Łącza',
cBlue: 'Niebieski (odpowiedz, obserwuj)',
cRed: 'Czerwony (anuluj)',
cOrange: 'Pomarańczowy (ulubione)',
cGreen: 'Zielony (powtórzenia)',
btnRadius: 'Przyciski',
inputRadius: 'Pola tekstowe',
panelRadius: 'Panele',
avatarRadius: 'Awatary',
avatarAltRadius: 'Awatary (powiadomienia)',
tooltipRadius: 'Etykiety/alerty',
attachmentRadius: 'Załączniki',
filtering: 'Filtrowanie',
filtering_explanation: 'Wszystkie statusy zawierające te słowa będą wyciszone. Jedno słowo na linijkę.',
attachments: 'Załączniki',
hide_attachments_in_tl: 'Ukryj załączniki w osi czasu',
hide_attachments_in_convo: 'Ukryj załączniki w rozmowach',
nsfw_clickthrough: 'Włącz domyślne ukrywanie załączników o treści nieprzyzwoitej (NSFW)',
stop_gifs: 'Odtwarzaj GIFy po najechaniu kursorem',
autoload: 'Włącz automatyczne ładowanie po przewinięciu do końca strony',
streaming: 'Włącz automatycznie strumieniowanie nowych postów gdy na początku strony',
reply_link_preview: 'Włącz dymek z podglądem postu po najechaniu na znak odpowiedzi',
follow_import: 'Import obserwowanych',
import_followers_from_a_csv_file: 'Importuj obserwowanych z pliku CSV',
follows_imported: 'Obserwowani zaimportowani! Przetwarzanie może trochę potrwać.',
follow_import_error: 'Błąd przy importowaniu obserwowanych',
delete_account: 'Usuń konto',
delete_account_description: 'Trwale usuń konto i wszystkie posty.',
delete_account_instructions: 'Wprowadź swoje hasło w poniższe pole aby potwierdzić usunięcie konta.',
delete_account_error: 'Wystąpił problem z usuwaniem twojego konta. Jeżeli problem powtarza się, poinformuj administratora swojej instancji.',
follow_export: 'Eksport obserwowanych',
follow_export_processing: 'Przetwarzanie, wkrótce twój plik zacznie się ściągać.',
follow_export_button: 'Eksportuj swoją listę obserwowanych do pliku CSV',
change_password: 'Zmień hasło',
current_password: 'Obecne hasło',
new_password: 'Nowe hasło',
confirm_new_password: 'Potwierdź nowe hasło',
changed_password: 'Hasło zmienione poprawnie!',
change_password_error: 'Podczas zmiany hasła wystąpił problem.'
},
notifications: {
notifications: 'Powiadomienia',
read: 'Przeczytane!',
followed_you: 'obserwuje cię',
favorited_you: 'dodał twój status do ulubionych',
repeated_you: 'powtórzył twój status'
},
login: {
login: 'Zaloguj',
username: 'Użytkownik',
placeholder: 'n.p. lain',
password: 'Hasło',
register: 'Zarejestruj',
logout: 'Wyloguj'
},
registration: {
registration: 'Rejestracja',
fullname: 'Wyświetlana nazwa profilu',
email: 'Email',
bio: 'Bio',
password_confirm: 'Potwierdzenie hasła'
},
post_status: {
posting: 'Wysyłanie',
default: 'Właśnie wróciłem z kościoła'
},
finder: {
find_user: 'Znajdź użytkownika',
error_fetching_user: 'Błąd przy pobieraniu profilu'
},
general: {
submit: 'Wyślij',
apply: 'Zastosuj'
},
user_profile: {
timeline_title: 'Oś czasu użytkownika'
}
}
const es = {
chat: {
title: 'Chat'
},
nav: {
chat: 'Chat Local',
timeline: 'Línea Temporal',
mentions: 'Menciones',
public_tl: 'Línea Temporal Pública',
twkn: 'Toda La Red Conocida'
},
user_card: {
follows_you: '¡Te sigue!',
following: '¡Siguiendo!',
follow: 'Seguir',
blocked: '¡Bloqueado!',
block: 'Bloquear',
statuses: 'Estados',
mute: 'Silenciar',
muted: 'Silenciado',
followers: 'Seguidores',
followees: 'Siguiendo',
per_day: 'por día',
remote_follow: 'Seguir'
},
timeline: {
show_new: 'Mostrar lo nuevo',
error_fetching: 'Error al cargar las actualizaciones',
up_to_date: 'Actualizado',
load_older: 'Cargar actualizaciones anteriores',
conversation: 'Conversación'
},
settings: {
user_settings: 'Ajustes de Usuario',
name_bio: 'Nombre y Biografía',
name: 'Nombre',
bio: 'Biografía',
avatar: 'Avatar',
current_avatar: 'Tu avatar actual',
set_new_avatar: 'Cambiar avatar',
profile_banner: 'Cabecera del perfil',
current_profile_banner: 'Cabecera actual',
set_new_profile_banner: 'Cambiar cabecera',
profile_background: 'Fondo del Perfil',
set_new_profile_background: 'Cambiar fondo del perfil',
settings: 'Ajustes',
theme: 'Tema',
presets: 'Por defecto',
theme_help: 'Use códigos de color hexadecimales (#rrggbb) para personalizar su tema de colores.',
background: 'Segundo plano',
foreground: 'Primer plano',
text: 'Texto',
links: 'Links',
filtering: 'Filtros',
filtering_explanation: 'Todos los estados que contengan estas palabras serán silenciados, una por línea',
attachments: 'Adjuntos',
hide_attachments_in_tl: 'Ocultar adjuntos en la línea temporal',
hide_attachments_in_convo: 'Ocultar adjuntos en las conversaciones',
nsfw_clickthrough: 'Activar el clic para ocultar los adjuntos NSFW',
autoload: 'Activar carga automática al llegar al final de la página',
streaming: 'Habilite la transmisión automática de nuevas publicaciones cuando se desplaza hacia la parte superior',
reply_link_preview: 'Activar la previsualización del enlace de responder al pasar el ratón por encima',
follow_import: 'Importar personas que tú sigues',
import_followers_from_a_csv_file: 'Importar personas que tú sigues apartir de un archivo csv',
follows_imported: '¡Importado! Procesarlos llevará tiempo.',
follow_import_error: 'Error al importal el archivo'
},
notifications: {
notifications: 'Notificaciones',
read: '¡Leído!',
followed_you: 'empezó a seguirte'
},
login: {
login: 'Identificación',
username: 'Usuario',
placeholder: 'p.ej. lain',
password: 'Contraseña',
register: 'Registrar',
logout: 'Salir'
},
registration: {
registration: 'Registro',
fullname: 'Nombre a mostrar',
email: 'Correo electrónico',
bio: 'Biografía',
password_confirm: 'Confirmación de contraseña'
},
post_status: {
posting: 'Publicando',
default: 'Acabo de aterrizar en L.A.'
},
finder: {
find_user: 'Encontrar usuario',
error_fetching_user: 'Error al buscar usuario'
},
general: {
submit: 'Enviar',
apply: 'Aplicar'
}
}
const pt = {
chat: {
title: 'Chat'
},
nav: {
chat: 'Chat Local',
timeline: 'Linha do tempo',
mentions: 'Menções',
public_tl: 'Linha do tempo pública',
twkn: 'Toda a rede conhecida'
},
user_card: {
follows_you: 'Segue você!',
following: 'Seguindo!',
follow: 'Seguir',
blocked: 'Bloqueado!',
block: 'Bloquear',
statuses: 'Postagens',
mute: 'Silenciar',
muted: 'Silenciado',
followers: 'Seguidores',
followees: 'Seguindo',
per_day: 'por dia',
remote_follow: 'Seguidor Remoto'
},
timeline: {
show_new: 'Mostrar novas',
error_fetching: 'Erro buscando atualizações',
up_to_date: 'Atualizado',
load_older: 'Carregar postagens antigas',
conversation: 'Conversa'
},
settings: {
user_settings: 'Configurações de Usuário',
name_bio: 'Nome & Biografia',
name: 'Nome',
bio: 'Biografia',
avatar: 'Avatar',
current_avatar: 'Seu avatar atual',
set_new_avatar: 'Alterar avatar',
profile_banner: 'Capa de perfil',
current_profile_banner: 'Sua capa de perfil atual',
set_new_profile_banner: 'Alterar capa de perfil',
profile_background: 'Plano de fundo de perfil',
set_new_profile_background: 'Alterar o plano de fundo de perfil',
settings: 'Configurações',
theme: 'Tema',
presets: 'Predefinições',
theme_help: 'Use cores em código hexadecimal (#rrggbb) para personalizar seu esquema de cores.',
background: 'Plano de Fundo',
foreground: 'Primeiro Plano',
text: 'Texto',
links: 'Links',
filtering: 'Filtragem',
filtering_explanation: 'Todas as postagens contendo estas palavras serão silenciadas, uma por linha.',
attachments: 'Anexos',
hide_attachments_in_tl: 'Ocultar anexos na linha do tempo.',
hide_attachments_in_convo: 'Ocultar anexos em conversas',
nsfw_clickthrough: 'Habilitar clique para ocultar anexos NSFW',
autoload: 'Habilitar carregamento automático quando a rolagem chegar ao fim.',
streaming: 'Habilitar o fluxo automático de postagens quando ao topo da página',
reply_link_preview: 'Habilitar a pré-visualização de link de respostas ao passar o mouse.',
follow_import: 'Importar seguidas',
import_followers_from_a_csv_file: 'Importe seguidores a partir de um arquivo CSV',
follows_imported: 'Seguidores importados! O processamento pode demorar um pouco.',
follow_import_error: 'Erro ao importar seguidores'
},
notifications: {
notifications: 'Notificações',
read: 'Ler!',
followed_you: 'seguiu você'
},
login: {
login: 'Entrar',
username: 'Usuário',
placeholder: 'p.e. lain',
password: 'Senha',
register: 'Registrar',
logout: 'Sair'
},
registration: {
registration: 'Registro',
fullname: 'Nome para exibição',
email: 'Correio eletrônico',
bio: 'Biografia',
password_confirm: 'Confirmação de senha'
},
post_status: {
posting: 'Publicando',
default: 'Acabo de aterrizar em L.A.'
},
finder: {
find_user: 'Buscar usuário',
error_fetching_user: 'Erro procurando usuário'
},
general: {
submit: 'Enviar',
apply: 'Aplicar'
}
}
const ru = {
chat: {
title: 'Чат'
},
nav: {
chat: 'Локальный чат',
timeline: 'Лента',
mentions: 'Упоминания',
public_tl: 'Публичная лента',
twkn: 'Федеративная лента'
},
user_card: {
follows_you: 'Читает вас',
following: 'Читаю',
follow: 'Читать',
blocked: 'Заблокирован',
block: 'Заблокировать',
statuses: 'Статусы',
mute: 'Игнорировать',
muted: 'Игнорирую',
followers: 'Читатели',
followees: 'Читаемые',
per_day: 'в день',
remote_follow: 'Читать удалённо'
},
timeline: {
show_new: 'Показать новые',
error_fetching: 'Ошибка при обновлении',
up_to_date: 'Обновлено',
load_older: 'Загрузить старые статусы',
conversation: 'Разговор',
collapse: 'Свернуть',
repeated: 'повторил(а)',
no_retweet_hint: 'Пост помечен как "только для подписчиков" или "личное" и поэтому не может быть повторён'
},
settings: {
general: 'Общие',
user_settings: 'Настройки пользователя',
name_bio: 'Имя и описание',
name: 'Имя',
bio: 'Описание',
avatar: 'Аватар',
current_avatar: 'Текущий аватар',
set_new_avatar: 'Загрузить новый аватар',
profile_banner: 'Баннер профиля',
current_profile_banner: 'Текущий баннер профиля',
set_new_profile_banner: 'Загрузить новый баннер профиля',
profile_background: 'Фон профиля',
set_new_profile_background: 'Загрузить новый фон профиля',
settings: 'Настройки',
theme: 'Тема',
export_theme: 'Сохранить Тему',
import_theme: 'Загрузить Тему',
presets: 'Пресеты',
theme_help: 'Используйте шестнадцатеричные коды цветов (#rrggbb) для настройки темы.',
radii_help: 'Скругление углов элементов интерфейса (в пикселях)',
background: 'Фон',
foreground: 'Передний план',
text: 'Текст',
links: 'Ссылки',
cBlue: 'Ответить, читать',
cRed: 'Отменить',
cOrange: 'Нравится',
cGreen: 'Повторить',
btnRadius: 'Кнопки',
inputRadius: 'Поля ввода',
panelRadius: 'Панели',
avatarRadius: 'Аватары',
avatarAltRadius: 'Аватары в уведомлениях',
tooltipRadius: 'Всплывающие подсказки/уведомления',
attachmentRadius: 'Прикреплённые файлы',
filtering: 'Фильтрация',
filtering_explanation: 'Все статусы, содержащие данные слова, будут игнорироваться, по одному в строке',
attachments: 'Вложения',
hide_attachments_in_tl: 'Прятать вложения в ленте',
hide_attachments_in_convo: 'Прятать вложения в разговорах',
stop_gifs: 'Проигрывать GIF анимации только при наведении',
nsfw_clickthrough: 'Включить скрытие NSFW вложений',
autoload: 'Включить автоматическую загрузку при прокрутке вниз',
streaming: 'Включить автоматическую загрузку новых сообщений при прокрутке вверх',
pause_on_unfocused: 'Приостановить загрузку когда вкладка не в фокусе',
loop_video: 'Зациливать видео',
loop_video_silent_only: 'Зацикливать только беззвучные видео (т.е. "гифки" с Mastodon)',
reply_link_preview: 'Включить предварительный просмотр ответа при наведении мыши',
replies_in_timeline: 'Ответы в ленте',
reply_visibility_all: 'Показывать все ответы',
reply_visibility_following: 'Показывать только ответы мне и тех на кого я подписан',
reply_visibility_self: 'Показывать только ответы мне',
notification_visibility: 'Показывать уведомления',
notification_visibility_likes: 'Лайки',
notification_visibility_mentions: 'Упоминания',
notification_visibility_repeats: 'Повторы',
notification_visibility_follows: 'Подписки',
follow_import: 'Импортировать читаемых',
import_followers_from_a_csv_file: 'Импортировать читаемых из файла .csv',
follows_imported: 'Список читаемых импортирован. Обработка займёт некоторое время..',
follow_import_error: 'Ошибка при импортировании читаемых.',
delete_account: 'Удалить аккаунт',
delete_account_description: 'Удалить ваш аккаунт и все ваши сообщения.',
delete_account_instructions: 'Введите ваш пароль в поле ниже для подтверждения удаления.',
delete_account_error: 'Возникла ошибка в процессе удаления вашего аккаунта. Если это повторяется, свяжитесь с администратором вашего сервера.',
follow_export: 'Экспортировать читаемых',
follow_export_processing: 'Ведётся обработка, скоро вам будет предложено загрузить файл',
follow_export_button: 'Экспортировать читаемых в файл .csv',
change_password: 'Сменить пароль',
current_password: 'Текущий пароль',
new_password: 'Новый пароль',
confirm_new_password: 'Подтверждение нового пароля',
changed_password: 'Пароль изменён успешно.',
change_password_error: 'Произошла ошибка при попытке изменить пароль.',
lock_account_description: 'Аккаунт доступен только подтверждённым подписчикам',
limited_availability: 'Не доступно в вашем браузере',
profile_tab: 'Профиль',
security_tab: 'Безопасность',
data_import_export_tab: 'Импорт / Экспорт данных',
collapse_subject: 'Сворачивать посты с темой',
interfaceLanguage: 'Язык интерфейса'
},
notifications: {
notifications: 'Уведомления',
read: 'Прочесть',
followed_you: 'начал(а) читать вас',
favorited_you: 'нравится ваш статус',
repeated_you: 'повторил(а) ваш статус',
broken_favorite: 'Неизвестный статус, ищем...',
load_older: 'Загрузить старые уведомления'
},
login: {
login: 'Войти',
username: 'Имя пользователя',
placeholder: 'e.c. lain',
password: 'Пароль',
register: 'Зарегистрироваться',
logout: 'Выйти'
},
registration: {
registration: 'Регистрация',
fullname: 'Отображаемое имя',
email: 'Email',
bio: 'Описание',
password_confirm: 'Подтверждение пароля',
token: 'Код приглашения'
},
post_status: {
posting: 'Отправляется',
content_warning: 'Тема (не обязательно)',
default: 'Что нового?',
account_not_locked_warning: 'Ваш аккаунт не {0}. Кто угодно может зафоловить вас чтобы прочитать посты только для подписчиков',
account_not_locked_warning_link: 'залочен',
direct_warning: 'Этот пост будет видет только упомянутым пользователям',
attachments_sensitive: 'Вложения содержат чувствительный контент',
scope: {
public: 'Публичный - этот пост виден всем',
unlisted: 'Непубличный - этот пост не виден на публичных лентах',
private: 'Для подписчиков - этот пост видят только подписчики',
direct: 'Личное - этот пост видят только те кто в нём упомянут'
}
},
finder: {
find_user: 'Найти пользователя',
error_fetching_user: 'Пользователь не найден'
},
general: {
submit: 'Отправить',
apply: 'Применить'
},
user_profile: {
timeline_title: 'Лента пользователя'
}
}
const nb = {
chat: {
title: 'Chat'
},
nav: {
chat: 'Lokal Chat',
timeline: 'Tidslinje',
mentions: 'Nevnt',
public_tl: 'Offentlig Tidslinje',
twkn: 'Det hele kjente nettverket'
},
user_card: {
follows_you: 'Følger deg!',
following: 'Følger!',
follow: 'Følg',
blocked: 'Blokkert!',
block: 'Blokker',
statuses: 'Statuser',
mute: 'Demp',
muted: 'Dempet',
followers: 'Følgere',
followees: 'Følger',
per_day: 'per dag',
remote_follow: 'Følg eksternt'
},
timeline: {
show_new: 'Vis nye',
error_fetching: 'Feil ved henting av oppdateringer',
up_to_date: 'Oppdatert',
load_older: 'Last eldre statuser',
conversation: 'Samtale',
collapse: 'Sammenfold',
repeated: 'gjentok'
},
settings: {
user_settings: 'Brukerinstillinger',
name_bio: 'Navn & Biografi',
name: 'Navn',
bio: 'Biografi',
avatar: 'Profilbilde',
current_avatar: 'Ditt nåværende profilbilde',
set_new_avatar: 'Rediger profilbilde',
profile_banner: 'Profil-banner',
current_profile_banner: 'Din nåværende profil-banner',
set_new_profile_banner: 'Sett ny profil-banner',
profile_background: 'Profil-bakgrunn',
set_new_profile_background: 'Rediger profil-bakgrunn',
settings: 'Innstillinger',
theme: 'Tema',
presets: 'Forhåndsdefinerte fargekoder',
theme_help: 'Bruk heksadesimale fargekoder (#rrggbb) til å endre farge-temaet ditt.',
radii_help: 'Bestem hvor runde hjørnene i brukergrensesnittet skal være (i piksler)',
background: 'Bakgrunn',
foreground: 'Framgrunn',
text: 'Tekst',
links: 'Linker',
cBlue: 'Blå (Svar, følg)',
cRed: 'Rød (Avbryt)',
cOrange: 'Oransje (Lik)',
cGreen: 'Grønn (Gjenta)',
btnRadius: 'Knapper',
panelRadius: 'Panel',
avatarRadius: 'Profilbilde',
avatarAltRadius: 'Profilbilde (Varslinger)',
tooltipRadius: 'Verktøytips/advarsler',
attachmentRadius: 'Vedlegg',
filtering: 'Filtrering',
filtering_explanation: 'Alle statuser som inneholder disse ordene vil bli dempet, en kombinasjon av tegn per linje',
attachments: 'Vedlegg',
hide_attachments_in_tl: 'Gjem vedlegg på tidslinje',
hide_attachments_in_convo: 'Gjem vedlegg i samtaler',
nsfw_clickthrough: 'Krev trykk for å vise statuser som kan være upassende',
stop_gifs: 'Spill av GIFs når du holder over dem',
autoload: 'Automatisk lasting når du blar ned til bunnen',
streaming: 'Automatisk strømming av nye statuser når du har bladd til toppen',
reply_link_preview: 'Vis en forhåndsvisning når du holder musen over svar til en status',
follow_import: 'Importer følginger',
import_followers_from_a_csv_file: 'Importer følginger fra en csv fil',
follows_imported: 'Følginger imported! Det vil ta litt tid å behandle de.',
follow_import_error: 'Feil ved importering av følginger.'
},
notifications: {
notifications: 'Varslinger',
read: 'Les!',
followed_you: 'fulgte deg',
favorited_you: 'likte din status',
repeated_you: 'Gjentok din status'
},
login: {
login: 'Logg inn',
username: 'Brukernavn',
placeholder: 'f. eks lain',
password: 'Passord',
register: 'Registrer',
logout: 'Logg ut'
},
registration: {
registration: 'Registrering',
fullname: 'Visningsnavn',
email: 'Epost-adresse',
bio: 'Biografi',
password_confirm: 'Bekreft passord'
},
post_status: {
posting: 'Publiserer',
default: 'Landet akkurat i L.A.'
},
finder: {
find_user: 'Finn bruker',
error_fetching_user: 'Feil ved henting av bruker'
},
general: {
submit: 'Legg ut',
apply: 'Bruk'
},
user_profile: {
timeline_title: 'Bruker-tidslinje'
}
}
const he = {
chat: {
title: 'צ\'אט'
},
nav: {
chat: 'צ\'אט מקומי',
timeline: 'ציר הזמן',
mentions: 'אזכורים',
public_tl: 'ציר הזמן הציבורי',
twkn: 'כל הרשת הידועה'
},
user_card: {
follows_you: 'עוקב אחריך!',
following: 'עוקב!',
follow: 'עקוב',
blocked: 'חסום!',
block: 'חסימה',
statuses: 'סטטוסים',
mute: 'השתק',
muted: 'מושתק',
followers: 'עוקבים',
followees: 'נעקבים',
per_day: 'ליום',
remote_follow: 'עקיבה מרחוק'
},
timeline: {
show_new: 'הראה חדש',
error_fetching: 'שגיאה בהבאת הודעות',
up_to_date: 'עדכני',
load_older: 'טען סטטוסים חדשים',
conversation: 'שיחה',
collapse: 'מוטט',
repeated: 'חזר'
},
settings: {
user_settings: 'הגדרות משתמש',
name_bio: 'שם ואודות',
name: 'שם',
bio: 'אודות',
avatar: 'תמונת פרופיל',
current_avatar: 'תמונת הפרופיל הנוכחית שלך',
set_new_avatar: 'קבע תמונת פרופיל חדשה',
profile_banner: 'כרזת הפרופיל',
current_profile_banner: 'כרזת הפרופיל הנוכחית שלך',
set_new_profile_banner: 'קבע כרזת פרופיל חדשה',
profile_background: 'רקע הפרופיל',
set_new_profile_background: 'קבע רקע פרופיל חדש',
settings: 'הגדרות',
theme: 'תמה',
presets: 'ערכים קבועים מראש',
theme_help: 'השתמש בקודי צבע הקס (#אדום-אדום-ירוק-ירוק-כחול-כחול) על מנת להתאים אישית את תמת הצבע שלך.',
radii_help: 'קבע מראש עיגול פינות לממשק (בפיקסלים)',
background: 'רקע',
foreground: 'חזית',
text: 'טקסט',
links: 'לינקים',
cBlue: 'כחול (תגובה, עקיבה)',
cRed: 'אדום (ביטול)',
cOrange: 'כתום (לייק)',
cGreen: 'ירוק (חזרה)',
btnRadius: 'כפתורים',
inputRadius: 'שדות קלט',
panelRadius: 'פאנלים',
avatarRadius: 'תמונות פרופיל',
avatarAltRadius: 'תמונות פרופיל (התראות)',
tooltipRadius: 'טולטיפ \\ התראות',
attachmentRadius: 'צירופים',
filtering: 'סינון',
filtering_explanation: 'כל הסטטוסים הכוללים את המילים הללו יושתקו, אחד לשורה',
attachments: 'צירופים',
hide_attachments_in_tl: 'החבא צירופים בציר הזמן',
hide_attachments_in_convo: 'החבא צירופים בשיחות',
nsfw_clickthrough: 'החל החבאת צירופים לא בטוחים לצפיה בעת עבודה בעזרת לחיצת עכבר',
stop_gifs: 'נגן-בעת-ריחוף GIFs',
autoload: 'החל טעינה אוטומטית בגלילה לתחתית הדף',
streaming: 'החל זרימת הודעות אוטומטית בעת גלילה למעלה הדף',
reply_link_preview: 'החל תצוגה מקדימה של לינק-תגובה בעת ריחוף עם העכבר',
follow_import: 'יבוא עקיבות',
import_followers_from_a_csv_file: 'ייבא את הנעקבים שלך מקובץ csv',
follows_imported: 'נעקבים יובאו! ייקח זמן מה לעבד אותם.',
follow_import_error: 'שגיאה בייבוא נעקבים.',
delete_account: 'מחק משתמש',
delete_account_description: 'מחק לצמיתות את המשתמש שלך ואת כל הודעותיך.',
delete_account_instructions: 'הכנס את סיסמתך בקלט למטה על מנת לאשר מחיקת משתמש.',
delete_account_error: 'הייתה בעיה במחיקת המשתמש. אם זה ממשיך, אנא עדכן את מנהל השרת שלך.',
follow_export: 'יצוא עקיבות',
follow_export_processing: 'טוען. בקרוב תתבקש להוריד את הקובץ את הקובץ שלך',
follow_export_button: 'ייצא את הנעקבים שלך לקובץ csv',
change_password: 'שנה סיסמה',
current_password: 'סיסמה נוכחית',
new_password: 'סיסמה חדשה',
confirm_new_password: 'אשר סיסמה',
changed_password: 'סיסמה שונתה בהצלחה!',
change_password_error: 'הייתה בעיה בשינוי סיסמתך.'
},
notifications: {
notifications: 'התראות',
read: 'קרא!',
followed_you: 'עקב אחריך!',
favorited_you: 'אהב את הסטטוס שלך',
repeated_you: 'חזר על הסטטוס שלך'
},
login: {
login: 'התחבר',
username: 'שם המשתמש',
placeholder: 'למשל lain',
password: 'סיסמה',
register: 'הירשם',
logout: 'התנתק'
},
registration: {
registration: 'הרשמה',
fullname: 'שם תצוגה',
email: 'אימייל',
bio: 'אודות',
password_confirm: 'אישור סיסמה'
},
post_status: {
posting: 'מפרסם',
default: 'הרגע נחת ב-ל.א.'
},
finder: {
find_user: 'מציאת משתמש',
error_fetching_user: 'שגיאה במציאת משתמש'
},
general: {
submit: 'שלח',
apply: 'החל'
},
user_profile: {
timeline_title: 'ציר זמן המשתמש'
}
}
const messages = {
de,
fi,
en,
eo,
et,
hu,
ro,
ja,
fr,
it,
oc,
pl,
es,
pt,
ru,
nb,
he
}
export default messages
diff --git a/src/main.js b/src/main.js
index debd87038e..d05ecba894 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,228 +1,229 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import Vuex from 'vuex'
import App from './App.vue'
import PublicTimeline from './components/public_timeline/public_timeline.vue'
import PublicAndExternalTimeline from './components/public_and_external_timeline/public_and_external_timeline.vue'
import FriendsTimeline from './components/friends_timeline/friends_timeline.vue'
import TagTimeline from './components/tag_timeline/tag_timeline.vue'
import ConversationPage from './components/conversation-page/conversation-page.vue'
import Mentions from './components/mentions/mentions.vue'
import UserProfile from './components/user_profile/user_profile.vue'
import Settings from './components/settings/settings.vue'
import Registration from './components/registration/registration.vue'
import UserSettings from './components/user_settings/user_settings.vue'
import FollowRequests from './components/follow_requests/follow_requests.vue'
import statusesModule from './modules/statuses.js'
import usersModule from './modules/users.js'
import apiModule from './modules/api.js'
import configModule from './modules/config.js'
import chatModule from './modules/chat.js'
import VueTimeago from 'vue-timeago'
import VueI18n from 'vue-i18n'
import createPersistedState from './lib/persisted_state.js'
import messages from './i18n/messages.js'
import VueChatScroll from 'vue-chat-scroll'
const currentLocale = (window.navigator.language || 'en').split('-')[0]
Vue.use(Vuex)
Vue.use(VueRouter)
Vue.use(VueTimeago, {
locale: currentLocale === 'ja' ? 'ja' : 'en',
locales: {
'en': require('../static/timeago-en.json'),
'ja': require('../static/timeago-ja.json')
}
})
Vue.use(VueI18n)
Vue.use(VueChatScroll)
const persistedStateOptions = {
paths: [
'config.collapseMessageWithSubject',
'config.hideAttachments',
'config.hideAttachmentsInConv',
+ 'config.hideUserStats',
'config.hideNsfw',
'config.replyVisibility',
'config.notificationVisibility',
'config.autoLoad',
'config.hoverPreview',
'config.streaming',
'config.muteWords',
'config.customTheme',
'config.highlight',
'config.loopVideo',
'config.loopVideoSilentOnly',
'config.pauseOnUnfocused',
'config.stopGifs',
'config.interfaceLanguage',
'users.lastLoginName',
'statuses.notifications.maxSavedId'
]
}
const store = new Vuex.Store({
modules: {
statuses: statusesModule,
users: usersModule,
api: apiModule,
config: configModule,
chat: chatModule
},
plugins: [createPersistedState(persistedStateOptions)],
strict: false // Socket modifies itself, let's ignore this for now.
// strict: process.env.NODE_ENV !== 'production'
})
const i18n = new VueI18n({
// By default, use the browser locale, we will update it if neccessary
locale: currentLocale,
fallbackLocale: 'en',
messages
})
window.fetch('/api/statusnet/config.json')
.then((res) => res.json())
.then((data) => {
const {name, closed: registrationClosed, textlimit, server} = data.site
store.dispatch('setOption', { name: 'name', value: name })
store.dispatch('setOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
store.dispatch('setOption', { name: 'textlimit', value: parseInt(textlimit) })
store.dispatch('setOption', { name: 'server', value: server })
var apiConfig = data.site.pleromafe
window.fetch('/static/config.json')
.then((res) => res.json())
.then((data) => {
var staticConfig = data
// This takes static config and overrides properties that are present in apiConfig
var config = Object.assign({}, staticConfig, apiConfig)
var theme = (config.theme)
var background = (config.background)
var logo = (config.logo)
var logoMask = (typeof config.logoMask === 'undefined' ? true : config.logoMask)
var logoMargin = (typeof config.logoMargin === 'undefined' ? 0 : config.logoMargin)
var redirectRootNoLogin = (config.redirectRootNoLogin)
var redirectRootLogin = (config.redirectRootLogin)
var chatDisabled = (config.chatDisabled)
var showWhoToFollowPanel = (config.showWhoToFollowPanel)
var whoToFollowProvider = (config.whoToFollowProvider)
var whoToFollowLink = (config.whoToFollowLink)
var showInstanceSpecificPanel = (config.showInstanceSpecificPanel)
var scopeOptionsEnabled = (config.scopeOptionsEnabled)
var formattingOptionsEnabled = (config.formattingOptionsEnabled)
var collapseMessageWithSubject = (config.collapseMessageWithSubject)
store.dispatch('setOption', { name: 'theme', value: theme })
store.dispatch('setOption', { name: 'background', value: background })
store.dispatch('setOption', { name: 'logo', value: logo })
store.dispatch('setOption', { name: 'logoMask', value: logoMask })
store.dispatch('setOption', { name: 'logoMargin', value: logoMargin })
store.dispatch('setOption', { name: 'showWhoToFollowPanel', value: showWhoToFollowPanel })
store.dispatch('setOption', { name: 'whoToFollowProvider', value: whoToFollowProvider })
store.dispatch('setOption', { name: 'whoToFollowLink', value: whoToFollowLink })
store.dispatch('setOption', { name: 'showInstanceSpecificPanel', value: showInstanceSpecificPanel })
store.dispatch('setOption', { name: 'scopeOptionsEnabled', value: scopeOptionsEnabled })
store.dispatch('setOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
store.dispatch('setOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
if (chatDisabled) {
store.dispatch('disableChat')
}
const routes = [
{ name: 'root',
path: '/',
redirect: to => {
return (store.state.users.currentUser ? redirectRootLogin : redirectRootNoLogin) || '/main/all'
}},
{ path: '/main/all', component: PublicAndExternalTimeline },
{ path: '/main/public', component: PublicTimeline },
{ path: '/main/friends', component: FriendsTimeline },
{ path: '/tag/:tag', component: TagTimeline },
{ name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
{ name: 'user-profile', path: '/users/:id', component: UserProfile },
{ name: 'mentions', path: '/:username/mentions', component: Mentions },
{ name: 'settings', path: '/settings', component: Settings },
{ name: 'registration', path: '/registration', component: Registration },
{ name: 'registration', path: '/registration/:token', component: Registration },
{ name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
{ name: 'user-settings', path: '/user-settings', component: UserSettings }
]
const router = new VueRouter({
mode: 'history',
routes,
scrollBehavior: (to, from, savedPosition) => {
if (to.matched.some(m => m.meta.dontScroll)) {
return false
}
return savedPosition || { x: 0, y: 0 }
}
})
/* eslint-disable no-new */
new Vue({
router,
store,
i18n,
el: '#app',
render: h => h(App)
})
})
})
window.fetch('/static/terms-of-service.html')
.then((res) => res.text())
.then((html) => {
store.dispatch('setOption', { name: 'tos', value: html })
})
window.fetch('/api/pleroma/emoji.json')
.then(
(res) => res.json()
.then(
(values) => {
const emoji = Object.keys(values).map((key) => {
return { shortcode: key, image_url: values[key] }
})
store.dispatch('setOption', { name: 'customEmoji', value: emoji })
store.dispatch('setOption', { name: 'pleromaBackend', value: true })
},
(failure) => {
store.dispatch('setOption', { name: 'pleromaBackend', value: false })
}
),
(error) => console.log(error)
)
window.fetch('/static/emoji.json')
.then((res) => res.json())
.then((values) => {
const emoji = Object.keys(values).map((key) => {
return { shortcode: key, image_url: false, 'utf': values[key] }
})
store.dispatch('setOption', { name: 'emoji', value: emoji })
})
window.fetch('/instance/panel.html')
.then((res) => res.text())
.then((html) => {
store.dispatch('setOption', { name: 'instanceSpecificPanelContent', value: html })
})
window.fetch('/nodeinfo/2.0.json')
.then((res) => res.json())
.then((data) => {
const suggestions = data.metadata.suggestions
store.dispatch('setOption', { name: 'suggestionsEnabled', value: suggestions.enabled })
store.dispatch('setOption', { name: 'suggestionsWeb', value: suggestions.web })
})
diff --git a/src/modules/config.js b/src/modules/config.js
index 60a34bc156..24665e9508 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -1,70 +1,71 @@
import { set, delete as del } from 'vue'
import StyleSetter from '../services/style_setter/style_setter.js'
const browserLocale = (window.navigator.language || 'en').split('-')[0]
const defaultState = {
name: 'Pleroma FE',
colors: {},
collapseMessageWithSubject: false,
hideAttachments: false,
hideAttachmentsInConv: false,
+ hideUserStats: false,
hideNsfw: true,
loopVideo: true,
loopVideoSilentOnly: true,
autoLoad: true,
streaming: false,
hoverPreview: true,
pauseOnUnfocused: true,
stopGifs: false,
replyVisibility: 'all',
notificationVisibility: {
follows: true,
mentions: true,
likes: true,
repeats: true
},
muteWords: [],
highlight: {},
interfaceLanguage: browserLocale
}
const config = {
state: defaultState,
mutations: {
setOption (state, { name, value }) {
set(state, name, value)
},
setHighlight (state, { user, color, type }) {
const data = this.state.config.highlight[user]
if (color || type) {
set(state.highlight, user, { color: color || data.color, type: type || data.type })
} else {
del(state.highlight, user)
}
}
},
actions: {
setPageTitle ({state}, option = '') {
document.title = `${option} ${state.name}`
},
setHighlight ({ commit, dispatch }, { user, color, type }) {
commit('setHighlight', {user, color, type})
},
setOption ({ commit, dispatch }, { name, value }) {
commit('setOption', {name, value})
switch (name) {
case 'name':
dispatch('setPageTitle')
break
case 'theme':
StyleSetter.setPreset(value, commit)
break
case 'customTheme':
StyleSetter.setColors(value, commit)
}
}
}
}
export default config

File Metadata

Mime Type
text/x-diff
Expires
Sun, Aug 9, 6:12 AM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1724275
Default Alt Text
(113 KB)

Event Timeline