Compare commits
48 Commits
Author | SHA1 | Date | |
---|---|---|---|
b780ea336c | |||
bd9f589d32 | |||
d9d18bd8f9 | |||
ffdaa6bc56 | |||
c7f60e337e | |||
7f265dbd52 | |||
8929c5cabc | |||
4a610f3b0a | |||
55ec19edb5 | |||
c319c61832 | |||
66db99b8cd | |||
ff2162974d | |||
78e86af086 | |||
2dcf89eecf | |||
fdf94be998 | |||
0e913a5727 | |||
f3be077adc | |||
a6e0471f8c | |||
c5d734f9ad | |||
ee12d887ae | |||
b78d24be1e | |||
d5379e2b36 | |||
cf36557084 | |||
fd1ee129dc | |||
1471b7a6b5 | |||
1d39d7efcb | |||
69ee97f6e2 | |||
12092e6083 | |||
6e29e40b8b | |||
842c9e735b | |||
2f63a25058 | |||
d3b084003c | |||
0da9d3d8b0 | |||
58f3c6aab7 | |||
22e79675ad | |||
e5c350d740 | |||
210124ac34 | |||
7f9a35d7ac | |||
71a30f9001 | |||
95a34d55fb | |||
34f052b672 | |||
0178c2e696 | |||
5cb0c07627 | |||
d8fdbfe164 | |||
74e0b2734d | |||
3f5785bd03 | |||
15e5c69c15 | |||
57019c0b40 |
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "Zeige Antworten"
|
||||
show-my-renotes: "Zeige meine Reposts auf der Zeitleiste"
|
||||
show-renoted-my-notes: "Zeige meine Reposts, die geteilt wurden, auf der Zeitleiste"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "Karte anzeigen"
|
||||
show-maps-desc: "Zeige den Standort zu diesem Beitrag automatisch an."
|
||||
sound: "Ton"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -16,7 +16,7 @@ common:
|
||||
customization-tips:
|
||||
title: "Customization tips"
|
||||
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
|
||||
paragraph2: "You can change the display by <strong>right clicking</strong> on some widgets."
|
||||
paragraph2: "You can change the display by <strong><strong>right</strong> clicking</strong> on some widgets."
|
||||
paragraph3: "To delete a widget, drag and drop the widget onto <strong>the area labeled \"Trash\"</strong> in the header."
|
||||
paragraph4: "To finish the customization, click \"Finish\" on the upper right."
|
||||
gotit: "Got it!"
|
||||
@ -141,11 +141,11 @@ common:
|
||||
auth/views/form.vue:
|
||||
share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?"
|
||||
permission-ask: "This application requires the following permissions:"
|
||||
account-read: "Viewing account information:"
|
||||
account-write: "Modify account informations:"
|
||||
account-read: "View account information."
|
||||
account-write: "Modify account information."
|
||||
note-write: "Post."
|
||||
like-write: "To react to posts."
|
||||
following-write: "Follow or unfollow."
|
||||
like-write: "React to posts."
|
||||
following-write: "Follow and unfollow."
|
||||
drive-read: "Read your drive."
|
||||
drive-write: "Upload/delete files in your drive."
|
||||
notification-read: "Read your notifications."
|
||||
@ -154,10 +154,10 @@ auth/views/form.vue:
|
||||
accept: "Allow access."
|
||||
auth/views/index.vue:
|
||||
loading: "Loading"
|
||||
denied: "Application authorization denied."
|
||||
denied: "Application authorization has been denied."
|
||||
denied-paragraph: "This application will not access your account."
|
||||
already-authorized: "This application has already been authorized."
|
||||
allowed: "Application authorizations allowed.+"
|
||||
allowed: "Application authorizations allowed."
|
||||
callback-url: "Going back to the application."
|
||||
please-go-back: "Please go back to the application."
|
||||
error: "Session does not exist."
|
||||
@ -169,7 +169,7 @@ common/views/components/games/reversi/reversi.vue:
|
||||
common/views/components/games/reversi/reversi.game.vue:
|
||||
surrender: "Surrender"
|
||||
surrendered: "By surrender"
|
||||
is-llotheo: "The lesser one wins"
|
||||
is-llotheo: "The lesser one wins(Llotheo)"
|
||||
looped-map: "Looped map"
|
||||
can-put-everywhere: "Can put everywhere"
|
||||
common/views/components/games/reversi/reversi.index.vue:
|
||||
@ -200,7 +200,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
||||
settings-of-the-bot: "Bot settings"
|
||||
this-game-is-started-soon: "The game will begin in seconds"
|
||||
waiting-for-other: "Waiting for the opponent"
|
||||
waiting-for-me: "Waiting for you"
|
||||
waiting-for-me: "Waiting for the your preparation"
|
||||
waiting-for-both: "Prepareing"
|
||||
cancel: "Cancel"
|
||||
ready: "Ready"
|
||||
@ -226,7 +226,7 @@ common/views/components/connect-failed.troubleshooter.vue:
|
||||
no-server: "Unable to connect to the Misskey server"
|
||||
no-server-desc: "The network connection of your device is normal, but you could not connect to the Misskey server. There is a possibility that the server is either down, or under maintenance, please try again later."
|
||||
success: "Successfully connected to the Misskey server"
|
||||
success-desc: "It seems to be able to connect. Please reload the page."
|
||||
success-desc: "Looks like we have a connection. Please reload the page."
|
||||
flush: "Clean cache"
|
||||
set-version: "Specify version"
|
||||
common/views/components/messaging.vue:
|
||||
@ -388,8 +388,8 @@ common/views/widgets/tips.vue:
|
||||
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
|
||||
tips-line21: "You can also use the API to develop bots."
|
||||
tips-line23: "Mayu is so cute with its eyebrows."
|
||||
tips-line24: "Misskey started in 2014."
|
||||
tips-line25: "You can receive notification even if Misskey is not open in a compatible browser."
|
||||
tips-line24: "Misskey has been running since 2014."
|
||||
tips-line25: "In a browser compatible with notification features, you can receive notifications in case Misskey is not open"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "Signed in as {}"
|
||||
following: "Following"
|
||||
@ -470,7 +470,7 @@ desktop/views/components/drive.nav-folder.vue:
|
||||
desktop/views/components/drive.vue:
|
||||
search: "Search"
|
||||
load-more: "Load more"
|
||||
empty-draghover: "Drop it here, don't I look cute?"
|
||||
empty-draghover: "Drop it here! Yep, cuz you know I'm cute, right?"
|
||||
empty-drive: "Your media storage is empty"
|
||||
empty-drive-description: "Right-click to open the menu, or drag and drop a file onto here for uploading."
|
||||
empty-folder: "This folder is empty"
|
||||
@ -480,7 +480,7 @@ desktop/views/components/drive.vue:
|
||||
url-upload: "Upload from a URL"
|
||||
url-of-file: "URL of file you want to upload"
|
||||
url-upload-requested: "Upload requested"
|
||||
may-take-time: "It may take some time for the upload to complete."
|
||||
may-take-time: "It may take some time until the upload is complete."
|
||||
create-folder: "Create a folder"
|
||||
folder-name: "Folder name"
|
||||
contextmenu:
|
||||
@ -505,7 +505,7 @@ desktop/views/components/followers.vue:
|
||||
desktop/views/components/following-window.vue:
|
||||
following: "Following {}"
|
||||
desktop/views/components/following.vue:
|
||||
empty: "You don’t follow anyone."
|
||||
empty: "It seems you don't have any following users…"
|
||||
desktop/views/components/friends-maker.vue:
|
||||
title: "Recommended users:"
|
||||
empty: "Couldn't find any recommended users."
|
||||
@ -554,7 +554,7 @@ desktop/views/components/post-form.vue:
|
||||
add-visible-user: "+Add a user"
|
||||
attach-location-information: "Attach location information"
|
||||
hide-contents: "Hide contents"
|
||||
reply-placeholder: "Reply to this Post..."
|
||||
reply-placeholder: "Reply to this post..."
|
||||
quote-placeholder: "Quote this Post..."
|
||||
submit: "Post"
|
||||
reply: "Reply"
|
||||
@ -575,7 +575,7 @@ desktop/views/components/post-form.vue:
|
||||
recent-tags: "Recent"
|
||||
click-to-tagging: "Click to tagging"
|
||||
visibility: "Visibility"
|
||||
geolocation-alert: "Your device can not measure location infomation"
|
||||
geolocation-alert: "Your device does not provide location services."
|
||||
error: "Error"
|
||||
enter-username: "Please enter a username..."
|
||||
annotations: "Annotations for the post (optional)"
|
||||
@ -613,7 +613,7 @@ desktop/views/components/settings.vue:
|
||||
fetch-on-scroll: "Endless loading on scroll"
|
||||
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
|
||||
auto-popout: "Auto pop-out window"
|
||||
auto-popout-desc: "Pops-out a newly opened window (onto a new tab), if possible. This setting is stored in the browser."
|
||||
auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
|
||||
advanced: "Advanced settings"
|
||||
api-via-stream: "API request via stream"
|
||||
api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser."
|
||||
@ -626,9 +626,10 @@ desktop/views/components/settings.vue:
|
||||
gradient-window-header: "Use gradients on window headers"
|
||||
post-form-on-timeline: "Display post form at the top of the timeline"
|
||||
show-reply-target: "Display reply target"
|
||||
show-my-renotes: "Show my reposts in the timeline"
|
||||
show-renoted-my-notes: "Show my posts that have been shared in the timeline"
|
||||
show-maps: "Show the map"
|
||||
show-my-renotes: "Show my renotes in the timeline"
|
||||
show-renoted-my-notes: "Show renoted my posts in timelines"
|
||||
show-local-renotes: "Show renoted local posts in timelines"
|
||||
show-maps: "Display a map to show the location"
|
||||
show-maps-desc: "Automatically show the location on the map attached to this post."
|
||||
sound: "Sound"
|
||||
enable-sounds: "Enable sound"
|
||||
@ -674,18 +675,18 @@ desktop/views/components/settings.vue:
|
||||
third-parties: "Third-parties"
|
||||
desktop/views/components/settings.2fa.vue:
|
||||
intro: "If you set up 2-step verification, you will not only need a password at sign-in, but also a pre-registered physical device (such as your smartphone), which will improve security."
|
||||
detail: "See details..."
|
||||
detail: "Details…"
|
||||
url: "https://www.google.com/landing/2step/"
|
||||
caution: "If you lose access to your device, you won't be able to connect to Misskey anymore!"
|
||||
caution: "If you lose access to your registered device, you won't be able to connect to Misskey anymore!"
|
||||
register: "Register a device"
|
||||
already-registered: "A device is already registered"
|
||||
unregister: "Disable"
|
||||
already-registered: "This device is already registered"
|
||||
unregister: "Unregister"
|
||||
unregistered: "Two-factor authentication has been disabled."
|
||||
enter-password: "Enter the password"
|
||||
authenticator: "First, you need to install Google Authenticator on your device:"
|
||||
howtoinstall: "How to install"
|
||||
scan: "And then, scan the QR code:"
|
||||
done: "Please enter the token displaying on your device:"
|
||||
done: "Please enter the token displayed on your device:"
|
||||
submit: "Submit"
|
||||
success: "Settings saved!"
|
||||
failed: "Failed to setup. Please ensure that the token is correct."
|
||||
@ -693,15 +694,15 @@ desktop/views/components/settings.2fa.vue:
|
||||
desktop/views/components/settings.api.vue:
|
||||
intro: "To access the API, set this token as the key 'i' of request parameters."
|
||||
caution: "Do not enter this token to any apps nor tell this token to others otherwise your account may get compromised."
|
||||
regeneration-of-token: "In case this token (may) leaks out, you want to regenerate it so that you’ll be safe."
|
||||
regeneration-of-token: "If your token gets leaked, you can regenerate it."
|
||||
regenerate-token: "Regenerate the token"
|
||||
token: "Token:"
|
||||
enter-password: "Please enter the password"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "No linked applications"
|
||||
desktop/views/components/settings.drive.vue:
|
||||
max: "Max "
|
||||
in-use: " in use."
|
||||
max: "Max"
|
||||
in-use: "In use"
|
||||
desktop/views/components/settings.mute.vue:
|
||||
no-users: "No muted users"
|
||||
desktop/views/components/settings.password.vue:
|
||||
@ -724,7 +725,7 @@ desktop/views/components/settings.profile.vue:
|
||||
other: "Other"
|
||||
is-bot: "This account is a Bot"
|
||||
is-cat: "This account is a Cat"
|
||||
profile-updated: "Profile has successfully updated"
|
||||
profile-updated: "Your profile has been updated"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "This post is private"
|
||||
deleted: "This post has been deleted"
|
||||
@ -740,7 +741,7 @@ desktop/views/components/timeline.vue:
|
||||
list: "Lists"
|
||||
desktop/views/components/ui.header.vue:
|
||||
welcome-back: "Welcome back,"
|
||||
adjective: "Sir "
|
||||
adjective: "-san"
|
||||
desktop/views/components/ui.header.account.vue:
|
||||
profile: "Your profile"
|
||||
drive: "Media storage"
|
||||
@ -835,7 +836,7 @@ desktop/views/pages/selectdrive.vue:
|
||||
cancel: "Cancel"
|
||||
upload: "Upload files from your device"
|
||||
desktop/views/pages/search.vue:
|
||||
not-available: "The search feature is not available."
|
||||
not-available: "The search feature is not available for now."
|
||||
not-found: "No posts were found for '{}'"
|
||||
desktop/views/pages/share.vue:
|
||||
share-with: "Share with {}."
|
||||
@ -855,7 +856,7 @@ desktop/views/pages/user/user.friends.vue:
|
||||
no-users: "No frequent mentions"
|
||||
desktop/views/pages/user/user.vue:
|
||||
is-suspended: "This account has been suspended."
|
||||
is-remote: "The user is a remote user. Information about them that you see here may not complete."
|
||||
is-remote: "The user is a remote user. The profile that you see here may not complete."
|
||||
view-remote: "See their complete profile"
|
||||
desktop/views/pages/user/user.home.vue:
|
||||
last-used-at: "Last active:"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "Timeline"
|
||||
show-reply-target: "Show reply target"
|
||||
show-my-renotes: "Show my reposts"
|
||||
show-renoted-my-notes: "Show my reposted posts"
|
||||
show-renoted-my-notes: "Show renoted my posts"
|
||||
show-local-renotes: "Show renoted local posts"
|
||||
post-style: "Post design"
|
||||
post-style-standard: "Standard"
|
||||
post-style-smart: "Smart"
|
||||
@ -1163,7 +1165,7 @@ mobile/views/pages/user/home.photos.vue:
|
||||
loading: "Loading"
|
||||
no-photos: "No photos"
|
||||
docs:
|
||||
edit-this-page-on-github: "Did you find an error or do you want to contribute to the documentation? "
|
||||
edit-this-page-on-github: "Found a mistake or want to contribute for the documentation?"
|
||||
edit-this-page-on-github-link: "Edit this page on Github!"
|
||||
api:
|
||||
entities:
|
||||
@ -1175,11 +1177,11 @@ docs:
|
||||
require-credential: "This endpoint requires the authentication information."
|
||||
require-permission: "This endpoint requires {permission} permission."
|
||||
has-limit: "There is a rate limit."
|
||||
duration-limit: "You can't request when a frequency of a request in during {duration} milliseconds exceeds {max} times."
|
||||
min-interval-limit: "You can't request before {interval} milliseconds have passed since the previous request."
|
||||
duration-limit: "If you have sent your requests more than {max} times in {duration} milliseconds, you will be unable to send more requests."
|
||||
min-interval-limit: "If {interval} milliseconds haven't passed since the last request, you can't send a request."
|
||||
show-src: "You can view the source code for this endpoint."
|
||||
show-src-link: "See the code on GitHub"
|
||||
generated: "This doc is generated by an API definition."
|
||||
generated: "This document is generated by the API definition."
|
||||
props:
|
||||
name: "Name"
|
||||
type: "Type"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "Afficher les réponses"
|
||||
show-my-renotes: "Afficher mes republications dans le fil"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "Afficher la carte"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "Son"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "Fil d'actualité"
|
||||
show-reply-target: "Afficher les réponses"
|
||||
show-my-renotes: "Afficher mes republications"
|
||||
show-renoted-my-notes: "Afficher les notes que j'ai repartagé"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "Style de la publication"
|
||||
post-style-standard: "Standard"
|
||||
post-style-smart: "Intelligent"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -709,7 +709,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
|
||||
@ -1293,7 +1294,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -12,7 +12,7 @@ common:
|
||||
application-authorization: "앱의 연계"
|
||||
close: "닫기"
|
||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||
got-it: "わかった"
|
||||
got-it: "알았습니다"
|
||||
customization-tips:
|
||||
title: "사용자 정의 팁"
|
||||
paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다."
|
||||
@ -39,7 +39,7 @@ common:
|
||||
weeks_ago: "{}주전"
|
||||
months_ago: "{}개월전"
|
||||
years_ago: "{}년전"
|
||||
month-and-day: "{month}月 {day}日"
|
||||
month-and-day: "{month}월 {day}일"
|
||||
trash: "휴지통"
|
||||
weekday-short:
|
||||
sunday: "일"
|
||||
@ -122,13 +122,13 @@ common:
|
||||
tips: "팁"
|
||||
hashtags: "해시 태그"
|
||||
deck:
|
||||
widgets: "ウィジェット"
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
hybrid: "ソーシャル"
|
||||
global: "グローバル"
|
||||
notifications: "通知"
|
||||
list: "リスト"
|
||||
widgets: "위젯"
|
||||
home: "홈"
|
||||
local: "로컬"
|
||||
hybrid: "소셜"
|
||||
global: "글로벌"
|
||||
notifications: "통지"
|
||||
list: "목록"
|
||||
swap-left: "左に移動"
|
||||
swap-right: "右に移動"
|
||||
swap-up: "上に移動"
|
||||
@ -150,10 +150,10 @@ auth/views/form.vue:
|
||||
drive-write: "ドライブを操作する。"
|
||||
notification-read: "通知を見る。"
|
||||
notification-write: "通知を操作する。"
|
||||
cancel: "キャンセル"
|
||||
cancel: "취소"
|
||||
accept: "アクセスを許可"
|
||||
auth/views/index.vue:
|
||||
loading: "読み込み中"
|
||||
loading: "로드 중"
|
||||
denied: "アプリケーションの連携をキャンセルしました。"
|
||||
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||
already-authorized: "このアプリは既に連携済みです"
|
||||
@ -165,18 +165,18 @@ auth/views/index.vue:
|
||||
common/views/components/games/reversi/reversi.vue:
|
||||
matching:
|
||||
waiting-for: "{}を待っています"
|
||||
cancel: "キャンセル"
|
||||
cancel: "취소"
|
||||
common/views/components/games/reversi/reversi.game.vue:
|
||||
surrender: "投了"
|
||||
surrender: "기권"
|
||||
surrendered: "投了により"
|
||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
||||
looped-map: "ループマップ"
|
||||
looped-map: "루프 지도"
|
||||
can-put-everywhere: "どこでも置けるモード"
|
||||
common/views/components/games/reversi/reversi.index.vue:
|
||||
title: "Misskey Reversi"
|
||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||
invite: "招待"
|
||||
rule: "遊び方"
|
||||
invite: "초대"
|
||||
rule: "게임 방법"
|
||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||
mode-invite: "招待"
|
||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
||||
@ -185,26 +185,26 @@ common/views/components/games/reversi/reversi.index.vue:
|
||||
all-games: "みんなの対局"
|
||||
enter-username: "ユーザー名を入力してください"
|
||||
game-state:
|
||||
ended: "終了"
|
||||
playing: "進行中"
|
||||
ended: "종료"
|
||||
playing: "진행중"
|
||||
common/views/components/games/reversi/reversi.room.vue:
|
||||
settings-of-the-game: "ゲームの設定"
|
||||
choose-map: "マップを選択"
|
||||
random: "ランダム"
|
||||
black-or-white: "先手/後手"
|
||||
black-is: "{}が黒"
|
||||
rules: "ルール"
|
||||
rules: "규칙"
|
||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
||||
looped-map: "ループマップ"
|
||||
looped-map: "루프 지도"
|
||||
can-put-everywhere: "どこでも置けるモード"
|
||||
settings-of-the-bot: "Botの設定"
|
||||
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||
waiting-for-both: "準備中"
|
||||
cancel: "キャンセル"
|
||||
ready: "準備完了"
|
||||
cancel-ready: "準備続行"
|
||||
waiting-for-both: "준비중"
|
||||
cancel: "취소"
|
||||
ready: "준비 완료"
|
||||
cancel-ready: "준비 계속"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
@ -231,7 +231,7 @@ common/views/components/connect-failed.troubleshooter.vue:
|
||||
set-version: "バージョン指定"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "あなた"
|
||||
you: "당신"
|
||||
no-history: "履歴はありません"
|
||||
common/views/components/messaging-room.vue:
|
||||
empty: "このユーザーと話したことはありません"
|
||||
@ -242,12 +242,12 @@ common/views/components/messaging-room.vue:
|
||||
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||
common/views/components/messaging-room.form.vue:
|
||||
input-message-here: "ここにメッセージを入力"
|
||||
send: "送信"
|
||||
send: "전송"
|
||||
attach-from-local: "PCからファイルを添付する"
|
||||
attach-from-drive: "ドライブからファイルを添付する"
|
||||
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||
common/views/components/messaging-room.message.vue:
|
||||
is-read: "既読"
|
||||
is-read: "읽음"
|
||||
deleted: "このメッセージは削除されました"
|
||||
common/views/components/nav.vue:
|
||||
about: "Misskeyについて"
|
||||
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
|
||||
show-reply-target: "Pokazuj cel odpowiedzi"
|
||||
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
|
||||
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów na osi czasu"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "Automatycznie pokazuj mapę"
|
||||
show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji."
|
||||
sound: "Dźwięk"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "Oś czasu"
|
||||
show-reply-target: "Pokazuj cel odpowiedzi"
|
||||
show-my-renotes: "Pokazuj moje udostępnienia"
|
||||
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "Styl wpisów"
|
||||
post-style-standard: "Standardowy"
|
||||
post-style-smart: "Inteligentny"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -627,7 +627,8 @@ desktop/views/components/settings.vue:
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
@ -1106,7 +1107,8 @@ mobile/views/pages/settings.vue:
|
||||
timeline: "タイムライン"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
|
||||
show-local-renotes: "ローカルの投稿のRenoteを表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "6.0.2",
|
||||
"clientVersion": "1.0.8367",
|
||||
"version": "6.2.0",
|
||||
"clientVersion": "1.0.8417",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
|
@ -135,6 +135,12 @@ export default Vue.extend({
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.$store.state.settings.showLocalRenotes === false) {
|
||||
if (isPureRenote && (note.renote.user.host == null)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
// 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
|
||||
|
@ -23,7 +23,7 @@
|
||||
<div class="medias" :class="{ with: poll }" v-show="files.length != 0">
|
||||
<x-draggable :list="files" :options="{ animation: 150 }">
|
||||
<div v-for="file in files" :key="file.id">
|
||||
<div class="img" :style="{ backgroundImage: `url(${file.url})` }" :title="file.name"></div>
|
||||
<div class="img" :style="{ backgroundImage: `url(${file.thumbnailUrl})` }" :title="file.name"></div>
|
||||
<img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:@attach-cancel%" alt=""/>
|
||||
</div>
|
||||
</x-draggable>
|
||||
|
@ -51,6 +51,7 @@
|
||||
<mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/>
|
||||
<mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/>
|
||||
<mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
|
||||
<mk-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes" text="%i18n:@show-local-renotes%"/>
|
||||
<mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%">
|
||||
<span>%i18n:@show-maps-desc%</span>
|
||||
</mk-switch>
|
||||
@ -353,6 +354,12 @@ export default Vue.extend({
|
||||
value: v
|
||||
});
|
||||
},
|
||||
onChangeShowLocalRenotes(v) {
|
||||
this.$store.dispatch('settings/set', {
|
||||
key: 'showLocalRenotes',
|
||||
value: v
|
||||
});
|
||||
},
|
||||
onChangeShowMaps(v) {
|
||||
this.$store.dispatch('settings/set', {
|
||||
key: 'showMaps',
|
||||
|
@ -100,7 +100,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
untilDate: this.date ? this.date.getTime() : undefined,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
notes.pop();
|
||||
@ -122,7 +123,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
});
|
||||
|
||||
promise.then(notes => {
|
||||
|
@ -47,7 +47,8 @@ export default Vue.extend({
|
||||
listId: this.list.id,
|
||||
limit: fetchLimit + 1,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
notes.pop();
|
||||
@ -67,7 +68,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
});
|
||||
|
||||
promise.then(notes => {
|
||||
|
@ -70,7 +70,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
mediaOnly: this.mediaOnly,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
notes.pop();
|
||||
@ -91,7 +92,8 @@ export default Vue.extend({
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
mediaOnly: this.mediaOnly,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
});
|
||||
|
||||
promise.then(notes => {
|
||||
|
@ -140,6 +140,12 @@ export default Vue.extend({
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.$store.state.settings.showLocalRenotes === false) {
|
||||
if (isPureRenote && (note.renote.user.host == null)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
if (this.isScrollTop()) {
|
||||
|
@ -98,7 +98,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
mediaOnly: this.mediaOnly,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
notes.pop();
|
||||
@ -119,7 +120,8 @@ export default Vue.extend({
|
||||
mediaOnly: this.mediaOnly,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
});
|
||||
|
||||
promise.then(notes => {
|
||||
|
@ -139,6 +139,12 @@ export default Vue.extend({
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.$store.state.settings.showLocalRenotes === false) {
|
||||
if (isPureRenote && (note.renote.user.host == null)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
// 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
|
||||
|
@ -21,7 +21,7 @@
|
||||
<div class="attaches" v-show="files.length != 0">
|
||||
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
|
||||
<div class="file" v-for="file in files" :key="file.id">
|
||||
<div class="img" :style="`background-image: url(${file.url})`" @click="detachMedia(file)"></div>
|
||||
<div class="img" :style="`background-image: url(${file.thumbnailUrl})`" @click="detachMedia(file)"></div>
|
||||
</div>
|
||||
</x-draggable>
|
||||
</div>
|
||||
|
@ -59,7 +59,8 @@ export default Vue.extend({
|
||||
listId: this.list.id,
|
||||
limit: fetchLimit + 1,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
notes.pop();
|
||||
@ -82,7 +83,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
});
|
||||
|
||||
promise.then(notes => {
|
||||
|
@ -95,7 +95,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
untilDate: this.date ? this.date.getTime() : undefined,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
notes.pop();
|
||||
@ -117,7 +118,8 @@ export default Vue.extend({
|
||||
limit: fetchLimit + 1,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
});
|
||||
|
||||
promise.then(notes => {
|
||||
|
@ -21,6 +21,7 @@
|
||||
<ui-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget">%i18n:@show-reply-target%</ui-switch>
|
||||
<ui-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes">%i18n:@show-my-renotes%</ui-switch>
|
||||
<ui-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
|
||||
<ui-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@ -221,6 +222,13 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
onChangeShowLocalRenotes(v) {
|
||||
this.$store.dispatch('settings/set', {
|
||||
key: 'showLocalRenotes',
|
||||
value: v
|
||||
});
|
||||
},
|
||||
|
||||
checkForUpdate() {
|
||||
this.checkingForUpdate = true;
|
||||
checkForUpdate((this as any).os, true, true).then(newer => {
|
||||
|
@ -61,7 +61,6 @@ export default Vue.extend({
|
||||
birthday: null,
|
||||
avatarId: null,
|
||||
bannerId: null,
|
||||
isBot: false,
|
||||
isCat: false,
|
||||
saving: false,
|
||||
avatarUploading: false,
|
||||
@ -77,7 +76,6 @@ export default Vue.extend({
|
||||
this.birthday = this.$store.state.i.profile.birthday;
|
||||
this.avatarId = this.$store.state.i.avatarId;
|
||||
this.bannerId = this.$store.state.i.bannerId;
|
||||
this.isBot = this.$store.state.i.isBot;
|
||||
this.isCat = this.$store.state.i.isCat;
|
||||
},
|
||||
|
||||
@ -136,7 +134,6 @@ export default Vue.extend({
|
||||
birthday: this.birthday || null,
|
||||
avatarId: this.avatarId,
|
||||
bannerId: this.bannerId,
|
||||
isBot: this.isBot,
|
||||
isCat: this.isCat
|
||||
}).then(i => {
|
||||
this.saving = false;
|
||||
|
@ -16,6 +16,7 @@ const defaultSettings = {
|
||||
showReplyTarget: true,
|
||||
showMyRenotes: true,
|
||||
showRenotedMyNotes: true,
|
||||
showLocalRenotes: true,
|
||||
loadRemoteMedia: true,
|
||||
disableViaMobile: false,
|
||||
memo: null,
|
||||
|
@ -59,6 +59,13 @@ export const meta = {
|
||||
}
|
||||
}),
|
||||
|
||||
includeLocalRenotes: $.bool.optional.note({
|
||||
default: true,
|
||||
desc: {
|
||||
ja: 'Renoteされたローカルの投稿を含めるかどうか'
|
||||
}
|
||||
}),
|
||||
|
||||
mediaOnly: $.bool.optional.note({
|
||||
desc: {
|
||||
ja: 'true にすると、メディアが添付された投稿だけ取得します'
|
||||
@ -180,6 +187,22 @@ export default async (params: any, user: ILocalUser) => {
|
||||
});
|
||||
}
|
||||
|
||||
if (ps.includeLocalRenotes === false) {
|
||||
query.$and.push({
|
||||
$or: [{
|
||||
'_renote.user.host': { $ne: null }
|
||||
}, {
|
||||
renoteId: null
|
||||
}, {
|
||||
text: { $ne: null }
|
||||
}, {
|
||||
mediaIds: { $ne: [] }
|
||||
}, {
|
||||
poll: { $ne: null }
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
if (ps.mediaOnly) {
|
||||
query.$and.push({
|
||||
mediaIds: { $exists: true, $ne: [] }
|
||||
|
@ -60,6 +60,13 @@ export const meta = {
|
||||
}
|
||||
}),
|
||||
|
||||
includeLocalRenotes: $.bool.optional.note({
|
||||
default: true,
|
||||
desc: {
|
||||
ja: 'Renoteされたローカルの投稿を含めるかどうか'
|
||||
}
|
||||
}),
|
||||
|
||||
mediaOnly: $.bool.optional.note({
|
||||
desc: {
|
||||
ja: 'true にすると、メディアが添付された投稿だけ取得します'
|
||||
@ -170,6 +177,22 @@ export default async (params: any, user: ILocalUser) => {
|
||||
});
|
||||
}
|
||||
|
||||
if (ps.includeLocalRenotes === false) {
|
||||
query.$and.push({
|
||||
$or: [{
|
||||
'_renote.user.host': { $ne: null }
|
||||
}, {
|
||||
renoteId: null
|
||||
}, {
|
||||
text: { $ne: null }
|
||||
}, {
|
||||
mediaIds: { $ne: [] }
|
||||
}, {
|
||||
poll: { $ne: null }
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
if (ps.mediaOnly) {
|
||||
query.$and.push({
|
||||
mediaIds: { $exists: true, $ne: [] }
|
||||
|
@ -4,6 +4,7 @@ import Mute from '../../../../models/mute';
|
||||
import { pack } from '../../../../models/note';
|
||||
import UserList from '../../../../models/user-list';
|
||||
import { ILocalUser } from '../../../../models/user';
|
||||
import getParams from '../../get-params';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
@ -11,56 +12,84 @@ export const meta = {
|
||||
en: 'Get timeline of a user list.'
|
||||
},
|
||||
|
||||
requireCredential: true
|
||||
requireCredential: true,
|
||||
|
||||
params: {
|
||||
listId: $.type(ID).note({
|
||||
desc: {
|
||||
ja: 'リストのID'
|
||||
}
|
||||
}),
|
||||
|
||||
limit: $.num.optional.range(1, 100).note({
|
||||
default: 10,
|
||||
desc: {
|
||||
ja: '最大数'
|
||||
}
|
||||
}),
|
||||
|
||||
sinceId: $.type(ID).optional.note({
|
||||
desc: {
|
||||
ja: '指定すると、この投稿を基点としてより新しい投稿を取得します'
|
||||
}
|
||||
}),
|
||||
|
||||
untilId: $.type(ID).optional.note({
|
||||
desc: {
|
||||
ja: '指定すると、この投稿を基点としてより古い投稿を取得します'
|
||||
}
|
||||
}),
|
||||
|
||||
sinceDate: $.num.optional.note({
|
||||
desc: {
|
||||
ja: '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
|
||||
}
|
||||
}),
|
||||
|
||||
untilDate: $.num.optional.note({
|
||||
desc: {
|
||||
ja: '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
|
||||
}
|
||||
}),
|
||||
|
||||
includeMyRenotes: $.bool.optional.note({
|
||||
default: true,
|
||||
desc: {
|
||||
ja: '自分の行ったRenoteを含めるかどうか'
|
||||
}
|
||||
}),
|
||||
|
||||
includeRenotedMyNotes: $.bool.optional.note({
|
||||
default: true,
|
||||
desc: {
|
||||
ja: 'Renoteされた自分の投稿を含めるかどうか'
|
||||
}
|
||||
}),
|
||||
|
||||
includeLocalRenotes: $.bool.optional.note({
|
||||
default: true,
|
||||
desc: {
|
||||
ja: 'Renoteされたローカルの投稿を含めるかどうか'
|
||||
}
|
||||
}),
|
||||
|
||||
mediaOnly: $.bool.optional.note({
|
||||
desc: {
|
||||
ja: 'true にすると、メディアが添付された投稿だけ取得します'
|
||||
}
|
||||
}),
|
||||
}
|
||||
};
|
||||
|
||||
export default async (params: any, user: ILocalUser) => {
|
||||
// Get 'limit' parameter
|
||||
const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
|
||||
if (limitErr) throw 'invalid limit param';
|
||||
|
||||
// Get 'sinceId' parameter
|
||||
const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId);
|
||||
if (sinceIdErr) throw 'invalid sinceId param';
|
||||
|
||||
// Get 'untilId' parameter
|
||||
const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId);
|
||||
if (untilIdErr) throw 'invalid untilId param';
|
||||
|
||||
// Get 'sinceDate' parameter
|
||||
const [sinceDate, sinceDateErr] = $.num.optional.get(params.sinceDate);
|
||||
if (sinceDateErr) throw 'invalid sinceDate param';
|
||||
|
||||
// Get 'untilDate' parameter
|
||||
const [untilDate, untilDateErr] = $.num.optional.get(params.untilDate);
|
||||
if (untilDateErr) throw 'invalid untilDate param';
|
||||
|
||||
// Check if only one of sinceId, untilId, sinceDate, untilDate specified
|
||||
if ([sinceId, untilId, sinceDate, untilDate].filter(x => x != null).length > 1) {
|
||||
throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
|
||||
}
|
||||
|
||||
// Get 'includeMyRenotes' parameter
|
||||
const [includeMyRenotes = true, includeMyRenotesErr] = $.bool.optional.get(params.includeMyRenotes);
|
||||
if (includeMyRenotesErr) throw 'invalid includeMyRenotes param';
|
||||
|
||||
// Get 'includeRenotedMyNotes' parameter
|
||||
const [includeRenotedMyNotes = true, includeRenotedMyNotesErr] = $.bool.optional.get(params.includeRenotedMyNotes);
|
||||
if (includeRenotedMyNotesErr) throw 'invalid includeRenotedMyNotes param';
|
||||
|
||||
// Get 'mediaOnly' parameter
|
||||
const [mediaOnly, mediaOnlyErr] = $.bool.optional.get(params.mediaOnly);
|
||||
if (mediaOnlyErr) throw 'invalid mediaOnly param';
|
||||
|
||||
// Get 'listId' parameter
|
||||
const [listId, listIdErr] = $.type(ID).get(params.listId);
|
||||
if (listIdErr) throw 'invalid listId param';
|
||||
const [ps, psErr] = getParams(meta, params);
|
||||
if (psErr) throw psErr;
|
||||
|
||||
const [list, mutedUserIds] = await Promise.all([
|
||||
// リストを取得
|
||||
// Fetch the list
|
||||
UserList.findOne({
|
||||
_id: listId,
|
||||
_id: ps.listId,
|
||||
userId: user._id
|
||||
}),
|
||||
|
||||
@ -122,7 +151,7 @@ export default async (params: any, user: ILocalUser) => {
|
||||
// つまり、「『自分の投稿かつRenote』ではない」を「『自分の投稿ではない』または『Renoteではない』」と表現します。
|
||||
// for details: https://en.wikipedia.org/wiki/De_Morgan%27s_laws
|
||||
|
||||
if (includeMyRenotes === false) {
|
||||
if (ps.includeMyRenotes === false) {
|
||||
query.$and.push({
|
||||
$or: [{
|
||||
userId: { $ne: user._id }
|
||||
@ -138,7 +167,7 @@ export default async (params: any, user: ILocalUser) => {
|
||||
});
|
||||
}
|
||||
|
||||
if (includeRenotedMyNotes === false) {
|
||||
if (ps.includeRenotedMyNotes === false) {
|
||||
query.$and.push({
|
||||
$or: [{
|
||||
'_renote.userId': { $ne: user._id }
|
||||
@ -154,29 +183,45 @@ export default async (params: any, user: ILocalUser) => {
|
||||
});
|
||||
}
|
||||
|
||||
if (mediaOnly) {
|
||||
if (ps.includeLocalRenotes === false) {
|
||||
query.$and.push({
|
||||
$or: [{
|
||||
'_renote.user.host': { $ne: null }
|
||||
}, {
|
||||
renoteId: null
|
||||
}, {
|
||||
text: { $ne: null }
|
||||
}, {
|
||||
mediaIds: { $ne: [] }
|
||||
}, {
|
||||
poll: { $ne: null }
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
if (ps.mediaOnly) {
|
||||
query.$and.push({
|
||||
mediaIds: { $exists: true, $ne: [] }
|
||||
});
|
||||
}
|
||||
|
||||
if (sinceId) {
|
||||
if (ps.sinceId) {
|
||||
sort._id = 1;
|
||||
query._id = {
|
||||
$gt: sinceId
|
||||
$gt: ps.sinceId
|
||||
};
|
||||
} else if (untilId) {
|
||||
} else if (ps.untilId) {
|
||||
query._id = {
|
||||
$lt: untilId
|
||||
$lt: ps.untilId
|
||||
};
|
||||
} else if (sinceDate) {
|
||||
} else if (ps.sinceDate) {
|
||||
sort._id = 1;
|
||||
query.createdAt = {
|
||||
$gt: new Date(sinceDate)
|
||||
$gt: new Date(ps.sinceDate)
|
||||
};
|
||||
} else if (untilDate) {
|
||||
} else if (ps.untilDate) {
|
||||
query.createdAt = {
|
||||
$lt: new Date(untilDate)
|
||||
$lt: new Date(ps.untilDate)
|
||||
};
|
||||
}
|
||||
//#endregion
|
||||
@ -184,7 +229,7 @@ export default async (params: any, user: ILocalUser) => {
|
||||
// Issue query
|
||||
const timeline = await Note
|
||||
.find(query, {
|
||||
limit: limit,
|
||||
limit: ps.limit,
|
||||
sort: sort
|
||||
});
|
||||
|
||||
|
@ -16,17 +16,13 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
|
||||
if (usernameErr) return rej('invalid username param');
|
||||
|
||||
if (userId === undefined && username === undefined) {
|
||||
return rej('userId or pair of username and host is required');
|
||||
return rej('userId or username is required');
|
||||
}
|
||||
|
||||
// Get 'host' parameter
|
||||
const [host, hostErr] = $.str.optional.get(params.host);
|
||||
if (hostErr) return rej('invalid host param');
|
||||
|
||||
if (userId === undefined && host === undefined) {
|
||||
return rej('userId or pair of username and host is required');
|
||||
}
|
||||
|
||||
// Get 'includeReplies' parameter
|
||||
const [includeReplies = true, includeRepliesErr] = $.bool.optional.get(params.includeReplies);
|
||||
if (includeRepliesErr) return rej('invalid includeReplies param');
|
||||
|
@ -92,7 +92,7 @@ export default async (ctx: Koa.Context) => {
|
||||
weight: null
|
||||
},
|
||||
settings: {
|
||||
autoWatch: true
|
||||
autoWatch: false
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -35,20 +35,19 @@ async function save(path: string, name: string, type: string, hash: string, size
|
||||
|
||||
if (config.drive && config.drive.storage == 'minio') {
|
||||
const minio = new Minio.Client(config.drive.config);
|
||||
const id = uuid.v4();
|
||||
const obj = `${config.drive.prefix}/${id}`;
|
||||
const thumbnailObj = `${obj}-thumbnail`;
|
||||
const key = `${config.drive.prefix}/${uuid.v4()}/${name}`;
|
||||
const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`;
|
||||
|
||||
const baseUrl = config.drive.baseUrl
|
||||
|| `${ config.drive.config.secure ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? ':' + config.drive.config.port : '' }/${ config.drive.bucket }`;
|
||||
|
||||
await minio.putObject(config.drive.bucket, obj, fs.createReadStream(path), size, {
|
||||
await minio.putObject(config.drive.bucket, key, fs.createReadStream(path), size, {
|
||||
'Content-Type': type,
|
||||
'Cache-Control': 'max-age=31536000, immutable'
|
||||
});
|
||||
|
||||
if (thumbnail) {
|
||||
await minio.putObject(config.drive.bucket, thumbnailObj, thumbnail, size, {
|
||||
await minio.putObject(config.drive.bucket, thumbnailKey, thumbnail, size, {
|
||||
'Content-Type': 'image/jpeg',
|
||||
'Cache-Control': 'max-age=31536000, immutable'
|
||||
});
|
||||
@ -58,10 +57,11 @@ async function save(path: string, name: string, type: string, hash: string, size
|
||||
withoutChunks: true,
|
||||
storage: 'minio',
|
||||
storageProps: {
|
||||
id: id
|
||||
key: key,
|
||||
thumbnailKey: thumbnailKey
|
||||
},
|
||||
url: `${ baseUrl }/${ obj }`,
|
||||
thumbnailUrl: thumbnail ? `${ baseUrl }/${ thumbnailObj }` : null
|
||||
url: `${ baseUrl }/${ key }`,
|
||||
thumbnailUrl: thumbnail ? `${ baseUrl }/${ thumbnailKey }` : null
|
||||
});
|
||||
|
||||
const file = await DriveFile.insert({
|
||||
|
@ -7,11 +7,15 @@ export default async function(file: IDriveFile, isExpired = false) {
|
||||
if (file.metadata.storage == 'minio') {
|
||||
const minio = new Minio.Client(config.drive.config);
|
||||
|
||||
const obj = `${config.drive.prefix}/${file.metadata.storageProps.id}`;
|
||||
// 後方互換性のため、file.metadata.storageProps.key があるかどうかチェックしています。
|
||||
// 将来的には const obj = file.metadata.storageProps.key; とします。
|
||||
const obj = file.metadata.storageProps.key ? file.metadata.storageProps.key : `${config.drive.prefix}/${file.metadata.storageProps.id}`;
|
||||
await minio.removeObject(config.drive.bucket, obj);
|
||||
|
||||
if (file.metadata.thumbnailUrl) {
|
||||
const thumbnailObj = `${config.drive.prefix}/${file.metadata.storageProps.id}-thumbnail`;
|
||||
// 後方互換性のため、file.metadata.storageProps.thumbnailKey があるかどうかチェックしています。
|
||||
// 将来的には const thumbnailObj = file.metadata.storageProps.thumbnailKey; とします。
|
||||
const thumbnailObj = file.metadata.storageProps.thumbnailKey ? file.metadata.storageProps.thumbnailKey : `${config.drive.prefix}/${file.metadata.storageProps.id}-thumbnail`;
|
||||
await minio.removeObject(config.drive.bucket, thumbnailObj);
|
||||
}
|
||||
}
|
||||
|
@ -328,8 +328,18 @@ async function insertNote(user: IUser, data: Option, tokens: ReturnType<typeof p
|
||||
: [],
|
||||
|
||||
// 以下非正規化データ
|
||||
_reply: data.reply ? { userId: data.reply.userId } : null,
|
||||
_renote: data.renote ? { userId: data.renote.userId } : null,
|
||||
_reply: data.reply ? {
|
||||
userId: data.reply.userId,
|
||||
user: {
|
||||
host: data.reply._user.host
|
||||
}
|
||||
} : null,
|
||||
_renote: data.renote ? {
|
||||
userId: data.renote.userId,
|
||||
user: {
|
||||
host: data.renote._user.host
|
||||
}
|
||||
} : null,
|
||||
_user: {
|
||||
host: user.host,
|
||||
inbox: isRemoteUser(user) ? user.inbox : undefined
|
||||
|
Reference in New Issue
Block a user