Merge remote-tracking branch 'upstream/develop' into shigusegubu

* upstream/develop:
  render modal at the root level using portal
  install portal vue
  Small improve of the who to follow panel layout
  Fix/Small fix in the who to follow page
  remove console spam
  i18n
  wire up user.description with masto api data
  i18n/Add Japanese with kanji (2)
  move drowdown menu to popper
  notification controls: redesign entirely
  entity normalizer: collapse data.pleroma if blocks
  wire up notification settings
  do not miss statusnet_profile_url of mentions
  Translation to Hebrew of everything other than theme_helpers and style.
  Translate up to settings.
This commit is contained in:
Henry Jameson 2019-06-09 14:15:09 +03:00
commit 357f75b372
23 changed files with 802 additions and 102 deletions

View file

@ -25,6 +25,7 @@
"object-path": "^0.11.3",
"phoenix": "^1.3.0",
"popper.js": "^1.14.7",
"portal-vue": "^2.1.4",
"sanitize-html": "^1.13.0",
"v-click-outside": "^2.1.1",
"vue": "^2.5.13",

View file

@ -49,6 +49,7 @@
</div>
<chat-panel :floating="true" v-if="currentUser && chat" class="floating-chat mobile-hidden"></chat-panel>
<UserReportingModal />
<portal-target name="modal" />
</div>
</template>

View file

@ -62,6 +62,7 @@
.title {
margin-bottom: 0;
text-align: center;
}
}
@ -80,6 +81,7 @@
background-color: var(--lightBg, $fallback--lightBg);
border-top: 1px solid $fallback--bg;
border-top: 1px solid var(--bg, $fallback--bg);
display: flex;
justify-content: flex-end;
button {

View file

@ -13,7 +13,7 @@
}"
>
<div class="popper-wrapper">
<div class="dropdown-menu">
<div class="dropdown-menu">
<button class="dropdown-item dropdown-item-icon" @click.prevent="pinStatus" v-if="!status.pinned && canPin">
<i class="icon-pin"></i><span>{{$t("status.pin")}}</span>
</button>
@ -35,6 +35,7 @@
<style lang="scss">
@import '../../_variables.scss';
@import '../popper/popper.scss';
.icon-ellipsis {
cursor: pointer;

View file

@ -2,7 +2,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<div class="title">
Interactions
{{ $t("nav.interactions") }}
</div>
</div>
<tab-switcher

View file

@ -26,7 +26,7 @@
},
languageNames () {
return _.map(this.languageCodes, ISO6391.getName)
return _.map(this.languageCodes, this.getLanguageName)
},
language: {
@ -36,6 +36,17 @@
this.$i18n.locale = val
}
}
},
methods: {
getLanguageName (code) {
const specialLanguageNames = {
'ja': 'Japanese (やさしいにほんご)',
'ja_pedantic': 'Japanese (日本語)',
'zh': 'Chinese (简体中文)'
}
return specialLanguageNames[code] || ISO6391.getName(code)
}
}
}
</script>

View file

@ -29,7 +29,7 @@
</a>
</div>
<div class="mobile-notifications" @scroll="onScroll">
<Notifications ref="notifications" noHeading="true"/>
<Notifications ref="notifications" :noHeading="true"/>
</div>
</div>
<SideDrawer ref="sideDrawer" :logout="logout"/>

View file

@ -65,18 +65,20 @@
{{ $t('user_card.admin_menu.moderation') }}
</button>
</Popper>
<DialogModal v-if="showDeleteUserDialog" :onCancel='deleteUserDialog.bind(this, false)'>
<span slot="header">{{ $t('user_card.admin_menu.delete_user') }}</span>
<p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
<span slot="footer">
<button @click='deleteUserDialog(false)'>
{{ $t('general.cancel') }}
</button>
<button class="danger" @click='deleteUser()'>
{{ $t('user_card.admin_menu.delete_user') }}
</button>
</span>
</DialogModal>
<portal to="modal">
<DialogModal v-if="showDeleteUserDialog" :onCancel='deleteUserDialog.bind(this, false)'>
<template slot="header">{{ $t('user_card.admin_menu.delete_user') }}</template>
<p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
<template slot="footer">
<button class="btn btn-default" @click='deleteUserDialog(false)'>
{{ $t('general.cancel') }}
</button>
<button class="btn btn-default danger" @click='deleteUser()'>
{{ $t('user_card.admin_menu.delete_user') }}
</button>
</template>
</DialogModal>
</portal>
</div>
</template>
@ -86,64 +88,6 @@
@import '../../_variables.scss';
@import '../popper/popper.scss';
.dropdown-menu {
display: block;
padding: .5rem 0;
font-size: 1rem;
text-align: left;
list-style: none;
max-width: 100vw;
z-index: 10;
box-shadow: 1px 1px 4px rgba(0,0,0,.6);
box-shadow: var(--panelShadow);
border: none;
border-radius: $fallback--btnRadius;
border-radius: var(--btnRadius, $fallback--btnRadius);
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
.dropdown-divider {
height: 0;
margin: .5rem 0;
overflow: hidden;
border-top: 1px solid $fallback--border;
border-top: 1px solid var(--border, $fallback--border);
}
.dropdown-item {
line-height: 21px;
margin-right: 5px;
overflow: auto;
display: block;
padding: .25rem 1.0rem .25rem 1.5rem;
clear: both;
font-weight: 400;
text-align: inherit;
white-space: normal;
border: none;
border-radius: 0px;
background-color: transparent;
box-shadow: none;
width: 100%;
height: 100%;
&-icon {
padding-left: 0.5rem;
i {
margin-right: 0.25rem;
}
}
&:hover {
// TODO: improve the look on breeze themes
background-color: $fallback--fg;
background-color: var(--btn, $fallback--fg);
box-shadow: none;
}
}
}
.menu-checkbox {
float: right;
min-width: 22px;

View file

@ -35,7 +35,6 @@ const Notifications = {
return unseenNotificationsFromStore(this.$store)
},
visibleNotifications () {
console.log(this.filterMode)
return visibleNotificationsFromStore(this.$store, this.filterMode)
},
unseenCount () {

View file

@ -68,3 +68,60 @@
margin-right: 0;
}
.dropdown-menu {
display: block;
padding: .5rem 0;
font-size: 1rem;
text-align: left;
list-style: none;
max-width: 100vw;
z-index: 10;
box-shadow: 1px 1px 4px rgba(0,0,0,.6);
box-shadow: var(--panelShadow);
border: none;
border-radius: $fallback--btnRadius;
border-radius: var(--btnRadius, $fallback--btnRadius);
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
.dropdown-divider {
height: 0;
margin: .5rem 0;
overflow: hidden;
border-top: 1px solid $fallback--border;
border-top: 1px solid var(--border, $fallback--border);
}
.dropdown-item {
line-height: 21px;
margin-right: 5px;
overflow: auto;
display: block;
padding: .25rem 1.0rem .25rem 1.5rem;
clear: both;
font-weight: 400;
text-align: inherit;
white-space: normal;
border: none;
border-radius: 0px;
background-color: transparent;
box-shadow: none;
width: 100%;
height: 100%;
&-icon {
padding-left: 0.5rem;
i {
margin-right: 0.25rem;
}
}
&:hover {
// TODO: improve the look on breeze themes
background-color: $fallback--fg;
background-color: var(--btn, $fallback--fg);
box-shadow: none;
}
}
}

View file

@ -55,7 +55,8 @@ const UserSettings = {
changePasswordInputs: [ '', '', '' ],
changedPassword: false,
changePasswordError: false,
activeTab: 'profile'
activeTab: 'profile',
notificationSettings: this.$store.state.users.currentUser.notification_settings
}
},
created () {
@ -128,6 +129,10 @@ const UserSettings = {
this.$store.commit('setCurrentUser', user)
})
},
updateNotificationSettings () {
this.$store.state.api.backendInteractor
.updateNotificationSettings({ settings: this.notificationSettings })
},
changeVis (visibility) {
this.newDefaultScope = visibility
},

View file

@ -167,6 +167,43 @@
</div>
</div>
<div :label="$t('settings.notifications')" v-if="pleromaBackend">
<div class="setting-item">
<div class="select-multiple">
<span class="label">{{$t('settings.notification_setting')}}</span>
<ul class="option-list">
<li>
<input type="checkbox" id="notification-setting-follows" v-model="notificationSettings.follows">
<label for="notification-setting-follows">
{{$t('settings.notification_setting_follows')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-followers" v-model="notificationSettings.followers">
<label for="notification-setting-followers">
{{$t('settings.notification_setting_followers')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-non-follows" v-model="notificationSettings.non_follows">
<label for="notification-setting-non-follows">
{{$t('settings.notification_setting_non_follows')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-non-followers" v-model="notificationSettings.non_followers">
<label for="notification-setting-non-followers">
{{$t('settings.notification_setting_non_followers')}}
</label>
</li>
</ul>
</div>
<p>{{$t('settings.notification_mutes')}}</p>
<p>{{$t('settings.notification_blocks')}}</p>
<button class="btn btn-default" @click="updateNotificationSettings">{{$t('general.submit')}}</button>
</div>
</div>
<div :label="$t('settings.data_import_export_tab')" v-if="pleromaBackend">
<div class="setting-item">
<h2>{{$t('settings.follow_import')}}</h2>

View file

@ -20,7 +20,8 @@ const WhoToFollow = {
id: 0,
name: i.display_name,
screen_name: i.acct,
profile_image_url: i.avatar || '/images/avi.png'
profile_image_url: i.avatar || '/images/avi.png',
profile_image_url_original: i.avatar || '/images/avi.png'
}
this.users.push(user)

View file

@ -6,14 +6,18 @@
{{$t('who_to_follow.who_to_follow')}}
</div>
</div>
<div class="panel-body who-to-follow">
<span v-for="user in usersToFollow">
<div class="who-to-follow">
<p v-for="user in usersToFollow" class="who-to-follow-items">
<img v-bind:src="user.img" />
<router-link v-bind:to="userProfileLink(user.id, user.name)">
{{user.name}}
</router-link><br />
</span>
<img v-bind:src="$store.state.instance.logo"> <router-link :to="{ name: 'who-to-follow' }">{{$t('who_to_follow.more')}}</router-link>
</p>
<p class="who-to-follow-more">
<router-link :to="{ name: 'who-to-follow' }">
{{$t('who_to_follow.more')}}
</router-link>
</p>
</div>
</div>
</div>
@ -30,11 +34,19 @@
height: 32px;
}
.who-to-follow {
padding: 0.5em 1em 0.5em 1em;
padding: 0em 1em;
margin: 0px;
line-height: 40px;
}
.who-to-follow-items {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 0px;
margin: 1em 0em;
}
.who-to-follow-more {
padding: 0px;
margin: 1em 0em;
text-align: center;
}
</style>

View file

@ -277,6 +277,13 @@
"true": "yes"
},
"notifications": "Notifications",
"notification_setting": "Receive notifications from:",
"notification_setting_follows": "Users you follow",
"notification_setting_non_follows": "Users you do not follow",
"notification_setting_followers": "Users who follow you",
"notification_setting_non_followers": "Users who do not follow you",
"notification_mutes": "To stop receiving notifications from a specific user, use a mute.",
"notification_blocks": "Blocking a user stops all notifications as well as unsubscribes them.",
"enable_web_push_notifications": "Enable web push notifications",
"style": {
"switcher": {

View file

@ -2,6 +2,10 @@
"chat": {
"title": "צ'אט"
},
"exporter": {
"export": "ייצוא",
"processing": "מעבד, בקרוב תופיע אפשרות להוריד את הקובץ"
},
"features_panel": {
"chat": "צ'אט",
"gopher": "גופר",
@ -17,23 +21,53 @@
},
"general": {
"apply": "החל",
"submit": "שלח"
"submit": "שלח",
"more": "עוד",
"generic_error": "קרתה שגיאה",
"optional": "לבחירה",
"show_more": "הראה עוד",
"show_less": "הראה פחות",
"cancel": "בטל"
},
"image_cropper": {
"crop_picture": "חתוך תמונה",
"save": "שמור",
"save_without_cropping": "שמור בלי לחתוך",
"cancel": "בטל"
},
"importer": {
"submit": "שלח",
"success": "ייובא בהצלחה.",
"error": "אירעתה שגיאה בזמן ייבוא קובץ זה."
},
"login": {
"login": "התחבר",
"description": "היכנס עם OAuth",
"logout": "התנתק",
"password": "סיסמה",
"placeholder": "למשל lain",
"register": "הירשם",
"username": "שם המשתמש"
"username": "שם המשתמש",
"hint": "הירשם על מנת להצטרף לדיון"
},
"media_modal": {
"previous": "הקודם",
"next": "הבא"
},
"nav": {
"about": "על-אודות",
"back": "חזור",
"chat": "צ'אט מקומי",
"friend_requests": "בקשות עקיבה",
"mentions": "אזכורים",
"interactions": "אינטרקציות",
"dms": "הודעות ישירות",
"public_tl": "ציר הזמן הציבורי",
"timeline": "ציר הזמן",
"twkn": "כל הרשת הידועה"
"twkn": "כל הרשת הידועה",
"user_search": "חיפוש משתמש",
"who_to_follow": "אחרי מי לעקוב",
"preferences": "העדפות"
},
"notifications": {
"broken_favorite": "סטאטוס לא ידוע, מחפש...",
@ -42,19 +76,35 @@
"load_older": "טען התראות ישנות",
"notifications": "התראות",
"read": "קרא!",
"repeated_you": "חזר על הסטטוס שלך"
"repeated_you": "חזר על הסטטוס שלך",
"no_more_notifications": "לא עוד התראות"
},
"interactions": {
"favs_repeats": "חזרות ומועדפים",
"follows": "עוקבים חדשים",
"load_older": "טען אינטרקציות ישנות"
},
"post_status": {
"new_status": "פרסם סטאטוס חדש",
"account_not_locked_warning": "המשתמש שלך אינו {0}. כל אחד יכול לעקוב אחריך ולראות את ההודעות לעוקבים-בלבד שלך.",
"account_not_locked_warning_link": "נעול",
"attachments_sensitive": "סמן מסמכים מצורפים כלא בטוחים לצפייה",
"content_type": {
"text/plain": "טקסט פשוט"
"text/plain": "טקסט פשוט",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_warning": "נושא (נתון לבחירה)",
"default": "הרגע נחת ב-ל.א.",
"direct_warning": "הודעה זו תהיה זמינה רק לאנשים המוזכרים.",
"direct_warning_to_all": "הודעה זו תהיה נראית לכל המשתמשים המוזכרים.",
"direct_warning_to_first_only": "הודעה זו תהיה נראית לכל המשתמשים במוזכרים בתחילת ההודעה בלבד.",
"posting": "מפרסם",
"scope_notice": {
"public": "הודעה זו תהיה נראית לכולם",
"private": "הודעה זו תהיה נראית לעוקבים שלך בלבד",
"unlisted": "הודעה זו לא תהיה נראית בציר זמן הציבורי או בכל הרשת הידועה"
},
"scope": {
"direct": "ישיר - שלח לאנשים המוזכרים בלבד",
"private": "עוקבים-בלבד - שלח לעוקבים בלבד",
@ -68,9 +118,26 @@
"fullname": "שם תצוגה",
"password_confirm": "אישור סיסמה",
"registration": "הרשמה",
"token": "טוקן הזמנה"
"token": "טוקן הזמנה",
"captcha": "אימות אנוש",
"new_captcha": "לחץ על התמונה על מנת לקבל אימות אנוש חדש",
"username_placeholder": "למשל lain",
"fullname_placeholder": "למשל Lain Iwakura",
"bio_placeholder": "למשל\nהיי, אני ליין.\nאני ילדת אנימה שגרה בפרוורי יפן. אולי אתם מכירים אותי מהWired.",
"validations": {
"username_required": "לא יכול להישאר ריק",
"fullname_required": "לא יכול להישאר ריק",
"email_required": "לא יכול להישאר ריק",
"password_required": "לא יכול להישאר ריק",
"password_confirmation_required": "לא יכול להישאר ריק",
"password_confirmation_match": "צריך להיות דומה לסיסמה"
}
},
"selectable_list": {
"select_all": "בחר הכל"
},
"settings": {
"app_name": "שם האפליקציה",
"attachmentRadius": "צירופים",
"attachments": "צירופים",
"autoload": "החל טעינה אוטומטית בגלילה לתחתית הדף",
@ -79,6 +146,12 @@
"avatarRadius": "תמונות פרופיל",
"background": "רקע",
"bio": "אודות",
"block_export": "ייצוא חסימות",
"block_export_button": "ייצוא חסימות אל קובץ csv",
"block_import": "ייבוא חסימות",
"block_import_error": "שגיאה בייבוא החסימות",
"blocks_imported": "החסימות יובאו! ייקח מעט זמן לעבד אותן.",
"blocks_tab": "חסימות",
"btnRadius": "כפתורים",
"cBlue": "כחול (תגובה, עקיבה)",
"cGreen": "ירוק (חזרה)",
@ -88,6 +161,7 @@
"change_password_error": "הייתה בעיה בשינוי סיסמתך.",
"changed_password": "סיסמה שונתה בהצלחה!",
"collapse_subject": "מזער הודעות עם נושאים",
"composing": "מרכיב",
"confirm_new_password": "אשר סיסמה",
"current_avatar": "תמונת הפרופיל הנוכחית שלך",
"current_password": "סיסמה נוכחית",
@ -98,21 +172,35 @@
"delete_account_description": "מחק לצמיתות את המשתמש שלך ואת כל הודעותיך.",
"delete_account_error": "הייתה בעיה במחיקת המשתמש. אם זה ממשיך, אנא עדכן את מנהל השרת שלך.",
"delete_account_instructions": "הכנס את סיסמתך בקלט למטה על מנת לאשר מחיקת משתמש.",
"avatar_size_instruction": "הגודל המינימלי המומלץ לתמונות פרופיל הוא 150x150 פיקסלים.",
"export_theme": "שמור ערכים",
"filtering": "סינון",
"filtering_explanation": "כל הסטטוסים הכוללים את המילים הללו יושתקו, אחד לשורה",
"follow_export": "יצוא עקיבות",
"follow_export_button": "ייצא את הנעקבים שלך לקובץ csv",
"follow_export_processing": "טוען. בקרוב תתבקש להוריד את הקובץ את הקובץ שלך",
"follow_import": "יבוא עקיבות",
"follow_import_error": "שגיאה בייבוא נעקבים.",
"follows_imported": "נעקבים יובאו! ייקח זמן מה לעבד אותם.",
"foreground": "חזית",
"general": "כללי",
"hide_attachments_in_convo": "החבא צירופים בשיחות",
"hide_attachments_in_tl": "החבא צירופים בציר הזמן",
"hide_muted_posts": "הסתר הודעות של משתמשים מושתקים",
"max_thumbnails": "מספר מירבי של תמונות ממוזערות להודעה",
"hide_isp": "הסתר פאנל-צד",
"preload_images": "טען תמונות מראש",
"use_one_click_nsfw": "פתח תמונות לא-בטוחות-לעבודה עם לחיצה אחת בלבד",
"hide_post_stats": "הסתר נתוני הודעה (למשל, מספר החזרות)",
"hide_user_stats": "הסתר נתוני משתמש (למשל, מספר העוקבים)",
"hide_filtered_statuses": "מסתר סטטוסים מסוננים",
"import_blocks_from_a_csv_file": "ייבא חסימות מקובץ csv",
"import_followers_from_a_csv_file": "ייבא את הנעקבים שלך מקובץ csv",
"import_theme": "טען ערכים",
"inputRadius": "שדות קלט",
"checkboxRadius": "תיבות סימון",
"instance_default": "(default: {value})",
"instance_default_simple": "(default)",
"interface": "ממשק",
"interfaceLanguage": "שפת הממשק",
"invalid_theme_imported": "הקובץ הנבחר אינו תמה הנתמכת ע\"י פלרומה. שום שינויים לא נעשו לתמה שלך.",
"limited_availability": "לא זמין בדפדפן שלך",
@ -120,6 +208,9 @@
"lock_account_description": "הגבל את המשתמש לעוקבים מאושרים בלבד",
"loop_video": "נגן סרטונים ללא הפסקה",
"loop_video_silent_only": "נגן רק סרטונים חסרי קול ללא הפסקה",
"mutes_tab": "השתקות",
"play_videos_in_modal": "נגן סרטונים ישירות בנגן המדיה",
"use_contain_fit": "אל תחתוך את הצירוף בתמונות הממוזערות",
"name": "שם",
"name_bio": "שם ואודות",
"new_password": "סיסמה חדשה",
@ -128,6 +219,13 @@
"notification_visibility_likes": "לייקים",
"notification_visibility_mentions": "אזכורים",
"notification_visibility_repeats": "חזרות",
"no_rich_text_description": "הסר פורמט טקסט עשיר מכל ההודעות",
"no_blocks": "ללא חסימות",
"no_mutes": "ללא השתקות",
"hide_follows_description": "אל תראה אחרי מי אני עוקב",
"hide_followers_description": "אל תראה מי עוקב אחרי",
"show_admin_badge": "הראה סמל מנהל בפרופיל שלי",
"show_moderator_badge": "הראה סמל צוות בפרופיל שלי",
"nsfw_clickthrough": "החל החבאת צירופים לא בטוחים לצפיה בעת עבודה בעזרת לחיצת עכבר",
"oauth_tokens": "אסימוני OAuth",
"token": "אסימון",
@ -146,18 +244,43 @@
"reply_visibility_all": "הראה את כל התגובות",
"reply_visibility_following": "הראה תגובות שמופנות אליי או לעקובים שלי בלבד",
"reply_visibility_self": "הראה תגובות שמופנות אליי בלבד",
"autohide_floating_post_button": "החבא אוטומטית את הכפתור הודעה חדשה (נייד)",
"saving_err": "שגיאה בשמירת הגדרות",
"saving_ok": "הגדרות נשמרו",
"search_user_to_block": "חפש משתמש לחסימה",
"search_user_to_mute": "חפש משתמש להשתקה",
"security_tab": "ביטחון",
"scope_copy": "העתק תחום הודעה בתגובה להודעה (הודעות ישירות תמיד מועתקות)",
"minimal_scopes_mode": "צמצם אפשרויות בחירה לתחום הודעה",
"set_new_avatar": "קבע תמונת פרופיל חדשה",
"set_new_profile_background": "קבע רקע פרופיל חדש",
"set_new_profile_banner": "קבע כרזת פרופיל חדשה",
"settings": "הגדרות",
"subject_input_always_show": "תמיד הראה את שדה הנושא",
"subject_line_behavior": "העתק נושא בתגובה",
"subject_line_email": "כמו אימייל: \"re: נושא\"",
"subject_line_mastodon": "כמו מסטודון: העתק כפי שזה",
"subject_line_noop": "אל תעתיק",
"post_status_content_type": "שלח את סוג תוכן ההודעה",
"stop_gifs": "נגן-בעת-ריחוף GIFs",
"streaming": "החל זרימת הודעות אוטומטית בעת גלילה למעלה הדף",
"text": "טקסט",
"theme": "תמה",
"theme_help": "השתמש בקודי צבע הקס (#אדום-אדום-ירוק-ירוק-כחול-כחול) על מנת להתאים אישית את תמת הצבע שלך.",
"tooltipRadius": "טולטיפ \\ התראות",
"user_settings": "הגדרות משתמש"
"upload_a_photo": "העלה תמונה",
"user_settings": "הגדרות משתמש",
"values": {
"false": "לא",
"true": "כן"
},
"notifications": "התראות",
"enable_web_push_notifications": "אפשר התראות web push",
"version": {
"title": "גרסה",
"backend_version": "גרסת קצה אחורי",
"frontend_version": "גרסת קצה קדמי"
}
},
"timeline": {
"collapse": "מוטט",
@ -167,29 +290,107 @@
"no_retweet_hint": "ההודעה מסומנת כ\"לעוקבים-בלבד\" ולא ניתן לחזור עליה",
"repeated": "חזר",
"show_new": "הראה חדש",
"up_to_date": "עדכני"
"up_to_date": "עדכני",
"no_more_statuses": "אין עוד סטטוסים",
"no_statuses": "אין סטטוסים"
},
"status": {
"favorites": "מועדפים",
"repeats": "חזרות",
"delete": "מחק סטטוס",
"pin": "הצמד לפרופיל",
"unpin": "הסר הצמדה מהפרופיל",
"pinned": "מוצמד",
"delete_confirm": "האם באמת למחוק סטטוס זה?",
"reply_to": "הגב ל",
"replies_list": "תגובות:"
},
"user_card": {
"approve": "אשר",
"block": "חסימה",
"blocked": "חסום!",
"deny": "דחה",
"favorites": "מועדפים",
"follow": "עקוב",
"follow_sent": "בקשה נשלחה!",
"follow_progress": "מבקש...",
"follow_again": "שלח בקשה שוב?",
"follow_unfollow": "בטל עקיבה",
"followees": "נעקבים",
"followers": "עוקבים",
"following": "עוקב!",
"follows_you": "עוקב אחריך!",
"its_you": "זה אתה!",
"media": "מדיה",
"mute": "השתק",
"muted": "מושתק",
"per_day": "ליום",
"remote_follow": "עקיבה מרחוק",
"statuses": "סטטוסים"
"report": "דווח",
"statuses": "סטטוסים",
"unblock": "הסר חסימה",
"unblock_progress": "מסיר חסימה...",
"block_progress": "חוסם...",
"unmute": "הסר השתקה",
"unmute_progress": "מסיר השתקה...",
"mute_progress": "משתיק...",
"admin_menu": {
"moderation": "ניהול (צוות)",
"grant_admin": "הפוך למנהל",
"revoke_admin": "הסר מנהל",
"grant_moderator": "הפוך לצוות",
"revoke_moderator": "הסר צוות",
"activate_account": "הפעל משתמש",
"deactivate_account": "השבת משתמש",
"delete_account": "מחק משתמש",
"force_nsfw": "סמן את כל ההודעות בתור לא-מתאימות-לעבודה",
"strip_media": "הסר מדיה מההודעות",
"force_unlisted": "הפוך הודעות ללא רשומות",
"sandbox": "הפוך הודעות לנראות לעוקבים-בלבד",
"disable_remote_subscription": "אל תאפשר עקיבה של המשתמש מאינסטנס אחר",
"disable_any_subscription": "אל תאפשר עקיבה של המשתמש בכלל",
"quarantine": "אל תאפשר פדרציה של ההודעות של המשתמש",
"delete_user": "מחק משתמש",
"delete_user_confirmation": "בטוח? פעולה זו הינה בלתי הפיכה."
}
},
"user_profile": {
"timeline_title": "ציר זמן המשתמש"
"timeline_title": "ציר זמן המשתמש",
"profile_does_not_exist": "סליחה, פרופיל זה אינו קיים.",
"profile_loading_error": "סליחה, הייתה שגיאה בטעינת הפרופיל."
},
"user_reporting": {
"title": "מדווח על {0}",
"add_comment_description": "הדיווח ישלח לצוות האינסטנס. אפשר להסביר למה הנך מדווחים על משתמש זה למטה:",
"additional_comments": "תגובות נוספות",
"forward_description": "המשתמש משרת אחר. לשלוח לשם עותק של הדיווח?",
"forward_to": "העבר ל {0}",
"submit": "הגש",
"generic_error": "קרתה שגיאה בעת עיבוד הבקשה."
},
"who_to_follow": {
"more": "עוד",
"who_to_follow": "אחרי מי לעקוב"
},
"tool_tip": {
"media_upload": "העלה מדיה",
"repeat": "חזור",
"reply": "הגב",
"favorite": "מועדף",
"user_settings": "הגדרות משתמש"
},
"upload":{
"error": {
"base": "העלאה נכשלה.",
"file_too_big": "קובץ גדול מדי [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "נסה שוב אחר כך"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
}
}

392
src/i18n/ja_pedantic.json Normal file
View file

@ -0,0 +1,392 @@
{
"chat": {
"title": "チャット"
},
"features_panel": {
"chat": "チャット",
"gopher": "Gopher",
"media_proxy": "メディアプロクシ",
"scope_options": "公開範囲選択",
"text_limit": "文字の数",
"title": "有効な機能",
"who_to_follow": "おすすめユーザー"
},
"finder": {
"error_fetching_user": "ユーザー検索がエラーになりました。",
"find_user": "ユーザーを探す"
},
"general": {
"apply": "適用",
"submit": "送信",
"more": "続き",
"generic_error": "エラーになりました"
},
"login": {
"login": "ログイン",
"description": "OAuthでログイン",
"logout": "ログアウト",
"password": "パスワード",
"placeholder": "例: lain",
"register": "登録",
"username": "ユーザー名",
"hint": "会話に加わるには、ログインしてください"
},
"nav": {
"about": "このインスタンスについて",
"back": "戻る",
"chat": "ローカルチャット",
"friend_requests": "フォローリクエスト",
"mentions": "通知",
"dms": "ダイレクトメッセージ",
"public_tl": "パブリックタイムライン",
"timeline": "タイムライン",
"twkn": "接続しているすべてのネットワーク",
"user_search": "ユーザーを探す",
"who_to_follow": "おすすめユーザー",
"preferences": "設定"
},
"notifications": {
"broken_favorite": "ステータスが見つかりません。探しています...",
"favorited_you": "あなたのステータスがお気に入りされました",
"followed_you": "フォローされました",
"load_older": "古い通知をみる",
"notifications": "通知",
"read": "読んだ!",
"repeated_you": "あなたのステータスがリピートされました",
"no_more_notifications": "通知はありません"
},
"post_status": {
"new_status": "投稿する",
"account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、誰でも、フォロワー限定のステータスを読むことができます。",
"account_not_locked_warning_link": "ロックされたアカウント",
"attachments_sensitive": "ファイルをNSFWにする",
"content_type": {
"text/plain": "プレーンテキスト"
},
"content_warning": "説明 (省略可)",
"default": "羽田空港に着きました。",
"direct_warning": "このステータスは、メンションされたユーザーだけが、読むことができます。",
"posting": "投稿",
"scope": {
"direct": "ダイレクト: メンションされたユーザーのみに届きます。",
"private": "フォロワーげんてい: フォロワーのみに届きます。",
"public": "パブリック: パブリックタイムラインに届きます。",
"unlisted": "アンリステッド: パブリックタイムラインに届きません。"
}
},
"registration": {
"bio": "プロフィール",
"email": "Eメール",
"fullname": "スクリーンネーム",
"password_confirm": "パスワードの確認",
"registration": "登録",
"token": "招待トークン",
"captcha": "CAPTCHA",
"new_captcha": "文字が読めないときは、画像をクリックすると、新しい画像になります",
"validations": {
"username_required": "必須",
"fullname_required": "必須",
"email_required": "必須",
"password_required": "必須",
"password_confirmation_required": "必須",
"password_confirmation_match": "パスワードが違います"
}
},
"settings": {
"attachmentRadius": "ファイル",
"attachments": "ファイル",
"autoload": "下にスクロールしたとき、自動的に読み込む。",
"avatar": "アバター",
"avatarAltRadius": "通知のアバター",
"avatarRadius": "アバター",
"background": "バックグラウンド",
"bio": "プロフィール",
"btnRadius": "ボタン",
"cBlue": "返信とフォロー",
"cGreen": "リピート",
"cOrange": "お気に入り",
"cRed": "キャンセル",
"change_password": "パスワードを変える",
"change_password_error": "パスワードを変えることが、できなかったかもしれません。",
"changed_password": "パスワードが、変わりました!",
"collapse_subject": "説明のある投稿をたたむ",
"composing": "投稿",
"confirm_new_password": "新しいパスワードの確認",
"current_avatar": "現在のアバター",
"current_password": "現在のパスワード",
"current_profile_banner": "現在のプロフィールバナー",
"data_import_export_tab": "インポートとエクスポート",
"default_vis": "デフォルトの公開範囲",
"delete_account": "アカウントを消す",
"delete_account_description": "あなたのアカウントとメッセージが、消えます。",
"delete_account_error": "アカウントを消すことが、できなかったかもしれません。インスタンスの管理者に、連絡してください。",
"delete_account_instructions": "本当にアカウントを消してもいいなら、パスワードを入力してください。",
"avatar_size_instruction": "アバターの大きさは、150×150ピクセルか、それよりも大きくするといいです。",
"export_theme": "保存",
"filtering": "フィルタリング",
"filtering_explanation": "これらの言葉を含むすべてのものがミュートされます。1行に1つの言葉を書いてください。",
"follow_export": "フォローのエクスポート",
"follow_export_button": "エクスポート",
"follow_export_processing": "お待ちください。まもなくファイルをダウンロードできます。",
"follow_import": "フォローインポート",
"follow_import_error": "フォローのインポートがエラーになりました。",
"follows_imported": "フォローがインポートされました! 少し時間がかかるかもしれません。",
"foreground": "フォアグラウンド",
"general": "全般",
"hide_attachments_in_convo": "スレッドのファイルを隠す",
"hide_attachments_in_tl": "タイムラインのファイルを隠す",
"hide_isp": "インスタンス固有パネルを隠す",
"preload_images": "画像を先読みする",
"use_one_click_nsfw": "NSFWなファイルを1クリックで開く",
"hide_post_stats": "投稿の統計を隠す (例: お気に入りの数)",
"hide_user_stats": "ユーザーの統計を隠す (例: フォロワーの数)",
"hide_filtered_statuses": "フィルターされた投稿を隠す",
"import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする",
"import_theme": "ロード",
"inputRadius": "インプットフィールド",
"checkboxRadius": "チェックボックス",
"instance_default": "(デフォルト: {value})",
"instance_default_simple": "(デフォルト)",
"interface": "インターフェース",
"interfaceLanguage": "インターフェースの言語",
"invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマは変更されませんでした。",
"limited_availability": "あなたのブラウザではできません",
"links": "リンク",
"lock_account_description": "あなたが認めた人だけ、あなたのアカウントをフォローできる",
"loop_video": "ビデオを繰り返す",
"loop_video_silent_only": "音のないビデオだけ繰り返す",
"play_videos_in_modal": "ビデオをメディアビューアーで見る",
"use_contain_fit": "画像のサムネイルを、切り抜かない",
"name": "名前",
"name_bio": "名前とプロフィール",
"new_password": "新しいパスワード",
"notification_visibility": "表示する通知",
"notification_visibility_follows": "フォロー",
"notification_visibility_likes": "お気に入り",
"notification_visibility_mentions": "メンション",
"notification_visibility_repeats": "リピート",
"no_rich_text_description": "リッチテキストを使わない",
"hide_follows_description": "フォローしている人を見せない",
"hide_followers_description": "フォロワーを見せない",
"show_admin_badge": "管理者のバッジを見せる",
"show_moderator_badge": "モデレーターのバッジを見せる",
"nsfw_clickthrough": "NSFWなファイルを隠す",
"oauth_tokens": "OAuthトークン",
"token": "トークン",
"refresh_token": "トークンを更新",
"valid_until": "まで有効",
"revoke_token": "取り消す",
"panelRadius": "パネル",
"pause_on_unfocused": "タブにフォーカスがないときストリーミングを止める",
"presets": "プリセット",
"profile_background": "プロフィールのバックグラウンド",
"profile_banner": "プロフィールバナー",
"profile_tab": "プロフィール",
"radii_help": "インターフェースの丸さを設定する。",
"replies_in_timeline": "タイムラインのリプライ",
"reply_link_preview": "カーソルを重ねたとき、リプライのプレビューを見る",
"reply_visibility_all": "すべてのリプライを見る",
"reply_visibility_following": "私に宛てられたリプライと、フォローしている人からのリプライを見る",
"reply_visibility_self": "私に宛てられたリプライを見る",
"saving_err": "設定を保存できませんでした",
"saving_ok": "設定を保存しました",
"security_tab": "セキュリティ",
"scope_copy": "返信するとき、公開範囲をコピーする (DMの公開範囲は、常にコピーされます)",
"set_new_avatar": "新しいアバターを設定する",
"set_new_profile_background": "新しいプロフィールのバックグラウンドを設定する",
"set_new_profile_banner": "新しいプロフィールバナーを設定する",
"settings": "設定",
"subject_input_always_show": "サブジェクトフィールドをいつでも表示する",
"subject_line_behavior": "返信するときサブジェクトをコピーする",
"subject_line_email": "メール風: \"re: サブジェクト\"",
"subject_line_mastodon": "マストドン風: そのままコピー",
"subject_line_noop": "コピーしない",
"post_status_content_type": "投稿のコンテントタイプ",
"stop_gifs": "カーソルを重ねたとき、GIFを動かす",
"streaming": "上までスクロールしたとき、自動的にストリーミングする",
"text": "文字",
"theme": "テーマ",
"theme_help": "カラーテーマをカスタマイズできます",
"theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、色と透明度をオーバーライドできます。「すべてクリア」ボタンを押すと、すべてのオーバーライドをやめます。",
"theme_help_v2_2": "バックグラウンドとテキストのコントラストを表すアイコンがあります。マウスをホバーすると、詳しい説明が出ます。透明な色を使っているときは、最悪の場合のコントラストが示されます。",
"tooltipRadius": "ツールチップとアラート",
"user_settings": "ユーザー設定",
"values": {
"false": "いいえ",
"true": "はい"
},
"notifications": "通知",
"enable_web_push_notifications": "ウェブプッシュ通知を許可する",
"style": {
"switcher": {
"keep_color": "色を残す",
"keep_shadows": "影を残す",
"keep_opacity": "透明度を残す",
"keep_roundness": "丸さを残す",
"keep_fonts": "フォントを残す",
"save_load_hint": "「残す」オプションをONにすると、テーマを選んだときとロードしたとき、現在の設定を残します。また、テーマをエクスポートするとき、これらのオプションを維持します。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべての設定を保存します。",
"reset": "リセット",
"clear_all": "すべてクリア",
"clear_opacity": "透明度をクリア"
},
"common": {
"color": "色",
"opacity": "透明度",
"contrast": {
"hint": "コントラストは {ratio} です。{level}。({context})",
"level": {
"aa": "AAレベルガイドライン (ミニマル) を満たします",
"aaa": "AAAレベルガイドライン (レコメンデッド) を満たします。",
"bad": "ガイドラインを満たしません。"
},
"context": {
"18pt": "大きい (18ポイント以上) テキスト",
"text": "テキスト"
}
}
},
"common_colors": {
"_tab_label": "共通",
"main": "共通の色",
"foreground_hint": "「詳細」タブで、もっと細かく設定できます",
"rgbo": "アイコンとアクセントとバッジ"
},
"advanced_colors": {
"_tab_label": "詳細",
"alert": "アラートのバックグラウンド",
"alert_error": "エラー",
"badge": "バッジのバックグラウンド",
"badge_notification": "通知",
"panel_header": "パネルヘッダー",
"top_bar": "トップバー",
"borders": "境界",
"buttons": "ボタン",
"inputs": "インプットフィールド",
"faint_text": "薄いテキスト"
},
"radii": {
"_tab_label": "丸さ"
},
"shadows": {
"_tab_label": "光と影",
"component": "コンポーネント",
"override": "オーバーライド",
"shadow_id": "影 #{value}",
"blur": "ぼかし",
"spread": "広がり",
"inset": "内側",
"hint": "影の設定では、色の値として --variable を使うことができます。これはCSS3変数です。ただし、透明度の設定は、効かなくなります。",
"filter_hint": {
"always_drop_shadow": "ブラウザーがサポートしていれば、常に {0} が使われます。",
"drop_shadow_syntax": "{0} は、{1} パラメーターと {2} キーワードをサポートしていません。",
"avatar_inset": "内側の影と外側の影を同時に使うと、透明なアバターの表示が乱れます。",
"spread_zero": "広がりが 0 よりも大きな影は、0 と同じです。",
"inset_classic": "内側の影は {0} を使います。"
},
"components": {
"panel": "パネル",
"panelHeader": "パネルヘッダー",
"topBar": "トップバー",
"avatar": "ユーザーアバター (プロフィール)",
"avatarStatus": "ユーザーアバター (投稿)",
"popup": "ポップアップとツールチップ",
"button": "ボタン",
"buttonHover": "ボタン (ホバー)",
"buttonPressed": "ボタン (押されているとき)",
"buttonPressedHover": "ボタン (ホバー、かつ、押されているとき)",
"input": "インプットフィールド"
}
},
"fonts": {
"_tab_label": "フォント",
"help": "「カスタム」を選んだときは、システムにあるフォントの名前を、正しく入力してください。",
"components": {
"interface": "インターフェース",
"input": "インプットフィールド",
"post": "投稿",
"postCode": "等幅 (投稿がリッチテキストであるとき)"
},
"family": "フォント名",
"size": "大きさ (px)",
"weight": "太さ",
"custom": "カスタム"
},
"preview": {
"header": "プレビュー",
"content": "本文",
"error": "エラーの例",
"button": "ボタン",
"text": "これは{0}と{1}の例です。",
"mono": "monospace",
"input": "羽田空港に着きました。",
"faint_link": "とても助けになるマニュアル",
"fine_print": "私たちの{0}を、読まないでください!",
"header_faint": "エラーではありません",
"checkbox": "利用規約を読みました",
"link": "ハイパーリンク"
}
}
},
"timeline": {
"collapse": "たたむ",
"conversation": "スレッド",
"error_fetching": "読み込みがエラーになりました",
"load_older": "古いステータス",
"no_retweet_hint": "投稿を「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります",
"repeated": "リピート",
"show_new": "読み込み",
"up_to_date": "最新",
"no_more_statuses": "これで終わりです"
},
"user_card": {
"approve": "受け入れ",
"block": "ブロック",
"blocked": "ブロックしています!",
"deny": "お断り",
"favorites": "お気に入り",
"follow": "フォロー",
"follow_sent": "リクエストを送りました!",
"follow_progress": "リクエストしています…",
"follow_again": "再びリクエストを送りますか?",
"follow_unfollow": "フォローをやめる",
"followees": "フォロー",
"followers": "フォロワー",
"following": "フォローしています!",
"follows_you": "フォローされました!",
"its_you": "これはあなたです!",
"media": "メディア",
"mute": "ミュート",
"muted": "ミュートしています!",
"per_day": "/日",
"remote_follow": "リモートフォロー",
"statuses": "ステータス"
},
"user_profile": {
"timeline_title": "ユーザータイムライン"
},
"who_to_follow": {
"more": "詳細",
"who_to_follow": "おすすめユーザー"
},
"tool_tip": {
"media_upload": "メディアをアップロード",
"repeat": "リピート",
"reply": "返信",
"favorite": "お気に入り",
"user_settings": "ユーザー設定"
},
"upload":{
"error": {
"base": "アップロードに失敗しました。",
"file_too_big": "ファイルが大きすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]",
"default": "しばらくしてから試してください"
},
"file_size_units": {
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB"
}
}
}

View file

@ -23,6 +23,7 @@ const messages = {
hu: require('./hu.json'),
it: require('./it.json'),
ja: require('./ja.json'),
ja_pedantic: require('./ja_pedantic.json'),
ko: require('./ko.json'),
nb: require('./nb.json'),
nl: require('./nl.json'),

View file

@ -24,6 +24,7 @@ import messages from './i18n/messages.js'
import VueChatScroll from 'vue-chat-scroll'
import VueClickOutside from 'v-click-outside'
import PortalVue from 'portal-vue'
import afterStoreSetup from './boot/after_store.js'
@ -42,6 +43,7 @@ Vue.use(VueTimeago, {
Vue.use(VueI18n)
Vue.use(VueChatScroll)
Vue.use(VueClickOutside)
Vue.use(PortalVue)
const i18n = new VueI18n({
// By default, use the browser locale, we will update it if neccessary

View file

@ -16,6 +16,7 @@ const PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${
const ACTIVATION_STATUS_URL = screenName => `/api/pleroma/admin/users/${screenName}/activation_status`
const ADMIN_USERS_URL = '/api/pleroma/admin/users'
const SUGGESTIONS_URL = '/api/v1/suggestions'
const NOTIFICATION_SETTINGS_URL = '/api/pleroma/notification_settings'
const MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'
const MASTODON_USER_NOTIFICATIONS_URL = '/api/v1/notifications'
@ -97,6 +98,21 @@ const promisedRequest = ({ method, url, payload, credentials, headers = {} }) =>
})
}
const updateNotificationSettings = ({credentials, settings}) => {
const form = new FormData()
each(settings, (value, key) => {
form.append(key, value)
})
return fetch(NOTIFICATION_SETTINGS_URL, {
headers: authHeaders(credentials),
method: 'PUT',
body: form
})
.then((data) => data.json())
}
const updateAvatar = ({credentials, avatar}) => {
const form = new FormData()
form.append('avatar', avatar)
@ -767,7 +783,8 @@ const apiService = {
markNotificationsAsSeen,
fetchFavoritedByUsers,
fetchRebloggedByUsers,
reportUser
reportUser,
updateNotificationSettings
}
export default apiService

View file

@ -87,6 +87,10 @@ const backendInteractorService = (credentials) => {
return apiService.deleteUser({screen_name, credentials})
}
const updateNotificationSettings = ({settings}) => {
return apiService.updateNotificationSettings({credentials, settings})
}
const fetchMutes = () => apiService.fetchMutes({credentials})
const muteUser = (id) => apiService.muteUser({credentials, id})
const unmuteUser = (id) => apiService.unmuteUser({credentials, id})
@ -171,7 +175,8 @@ const backendInteractorService = (credentials) => {
favorite,
unfavorite,
retweet,
unretweet
unretweet,
updateNotificationSettings
}
return backendInteractorServiceInstance

View file

@ -33,6 +33,7 @@ export const parseUser = (data) => {
if (masto) {
output.screen_name = data.acct
output.statusnet_profile_url = data.url
// There's nothing else to get
if (mastoShort) {
@ -42,7 +43,7 @@ export const parseUser = (data) => {
output.name = data.display_name
output.name_html = addEmojis(data.display_name, data.emojis)
// output.description = ??? missing
output.description = data.note
output.description_html = addEmojis(data.note, data.emojis)
// Utilize avatar_static for gif avatars?
@ -56,8 +57,6 @@ export const parseUser = (data) => {
output.bot = data.bot
output.statusnet_profile_url = data.url
if (data.pleroma) {
const relationship = data.pleroma.relationship
@ -135,15 +134,16 @@ export const parseUser = (data) => {
if (data.pleroma) {
output.follow_request_count = data.pleroma.follow_request_count
}
if (data.pleroma) {
output.tags = data.pleroma.tags
output.deactivated = data.pleroma.deactivated
output.notification_settings = data.pleroma.notification_settings
}
output.tags = output.tags || []
output.rights = output.rights || {}
output.notification_settings = output.notification_settings || {}
return output
}

View file

@ -6101,6 +6101,10 @@ popper.js@^1.14.7:
version "1.14.7"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.7.tgz#e31ec06cfac6a97a53280c3e55e4e0c860e7738e"
portal-vue@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.4.tgz#1fc679d77e294dc8d026f1eb84aa467de11b392e"
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"