Merge remote-tracking branch 'upstream/master' into devel

This commit is contained in:
gutfuckllc 2018-08-06 15:45:52 -04:00
commit a256393b81
29 changed files with 385 additions and 213 deletions

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -39,12 +40,6 @@ common:
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -39,12 +40,6 @@ common:
months_ago: "vor {0} Monat{0:en}" months_ago: "vor {0} Monat{0:en}"
years_ago: "vor {} Jahr{0:en}" years_ago: "vor {} Jahr{0:en}"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "So" sunday: "So"
monday: "Mo" monday: "Mo"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Melde an..." signing-in: "Melde an..."
signin: "Anmelden" signin: "Anmelden"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "Benutzername" username: "Benutzername"
checking: "Überprüfung..." checking: "Überprüfung..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Schwarz ... komplett" total: "Schwarz ... komplett"
notes: "Blau ... Hinweise" notes: "Blau ... Hinweise"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskey is not running ads</strong>, but some features may be unavailable or malfunctioning if ad blocking features are enabled." warning: "<strong>Misskey is not running ads</strong>, but some features may be unavailable or malfunctioning if ad blocking features are enabled."
application-authorization: "Application authorizations." application-authorization: "Application authorizations."
close: "Close" close: "Close"
got-it: "Got it!"
customization-tips: customization-tips:
title: "Customization tips" title: "Customization tips"
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets." paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
@ -39,12 +40,6 @@ common:
months_ago: "{}month(s) ago" months_ago: "{}month(s) ago"
years_ago: "{}year(s) ago" years_ago: "{}year(s) ago"
trash: "Trash" trash: "Trash"
date:
full-year: "Year"
month: "Month"
day: "Day"
hours: "Hour"
minutes: "Minutes"
weekday-short: weekday-short:
sunday: "S" sunday: "S"
monday: "M" monday: "M"
@ -207,7 +202,7 @@ common/views/components/games/reversi/reversi.room.vue:
cancel-ready: "Cancel \"Ready\"" cancel-ready: "Cancel \"Ready\""
common/views/components/connect-failed.vue: common/views/components/connect-failed.vue:
title: "Unable to connect to the server" title: "Unable to connect to the server"
description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please try again later." description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please {try again} later."
thanks: "Thank you for using Misskey." thanks: "Thank you for using Misskey."
troubleshoot: "Troubleshoot" troubleshoot: "Troubleshoot"
common/views/components/connect-failed.troubleshooter.vue: common/views/components/connect-failed.troubleshooter.vue:
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Signing in..." signing-in: "Signing in..."
signin: "Sign in" signin: "Sign in"
or: "Or"
signin-with-twitter: "Log in with Twitter"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "Username" username: "Username"
checking: "Checking..." checking: "Checking..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "Follow" follow: "Follow"
request-pending: "Pending follow request" request-pending: "Pending follow request"
follow-request: "Follow request" follow-request: "Follow request"
desktop:
banner-crop-title: "Crop the part that appears as a banner"
banner: "Banner"
uploading-banner: "Uploading a new banner"
banner-updated: "Updated the banner"
choose-banner: "Choose the banner"
avatar-crop-title: "Crop the part that appears as an avatar"
avatar: "Avatar"
uploading-avatar: "Uploading a new avatar"
avatar-updated: "Updated the avatar"
choose-avatar: "Choose an avatar image"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "User lists" title: "User lists"
create-list: "Create new list" create-list: "Create new list"
list-name: "List name"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "Posts" notes: "Posts"
following: "Following" following: "Following"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "Mute" mute: "Mute"
muted: "Muting" muted: "Muting"
unmute: "Unmute" unmute: "Unmute"
push-to-a-list: "Add to list"
list-pushed: "You added {user} to {list}."
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "Notes" posts: "Notes"
following: "Following" following: "Following"
@ -1006,7 +1017,7 @@ mobile/views/pages/welcome.vue:
signup: "Sign up" signup: "Sign up"
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "Dashboard" dashboard: "Dashboard"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "You can add/delete/rearrange widgets. To move the widget, drag \"三\". Tap \"x\" to delete the widget. Some widgets can change display by tapping."
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "Activity" activity: "Activity"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado." warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
application-authorization: "Autorizaciones de la aplicación." application-authorization: "Autorizaciones de la aplicación."
close: "Cerrar" close: "Cerrar"
got-it: "わかった"
customization-tips: customization-tips:
title: "Consejos de personalización" title: "Consejos de personalización"
paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios." paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
@ -39,12 +40,6 @@ common:
months_ago: "Hace {} mes(es)" months_ago: "Hace {} mes(es)"
years_ago: "Hace {} año(s)" years_ago: "Hace {} año(s)"
trash: "Papelera" trash: "Papelera"
date:
full-year: "Año"
month: "Mes"
day: "Día"
hours: "horas"
minutes: "minutos"
weekday-short: weekday-short:
sunday: "domingo" sunday: "domingo"
monday: "lunes" monday: "lunes"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "Identificador" token: "Identificador"
signing-in: "Entrando..." signing-in: "Entrando..."
signin: "Entra" signin: "Entra"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "Usuario" username: "Usuario"
checking: "Comprobando..." checking: "Comprobando..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé." warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
application-authorization: "Permissions de l'application" application-authorization: "Permissions de l'application"
close: "Fermer" close: "Fermer"
got-it: "わかった"
customization-tips: customization-tips:
title: "Conseils de personnalisation" title: "Conseils de personnalisation"
paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets." paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets."
@ -39,12 +40,6 @@ common:
months_ago: "Il y a {} mois" months_ago: "Il y a {} mois"
years_ago: "Il y a {} an·s" years_ago: "Il y a {} an·s"
trash: "Corbeille" trash: "Corbeille"
date:
full-year: "Année "
month: "Mois"
day: "Jour"
hours: "heures"
minutes: "minutes"
weekday-short: weekday-short:
sunday: "D" sunday: "D"
monday: "L" monday: "L"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Connexion...." signing-in: "Connexion...."
signin: "Se connecter" signin: "Se connecter"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "Nom d'utilisateur" username: "Nom d'utilisateur"
checking: "Vérification" checking: "Vérification"
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "Suivre" follow: "Suivre"
request-pending: "Demande d'abonnement en attente" request-pending: "Demande d'abonnement en attente"
follow-request: "Demande d'abonnement" follow-request: "Demande d'abonnement"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Noirs ... Total" total: "Noirs ... Total"
notes: "Bleu ... Notes" notes: "Bleu ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "Listes de l'utilisateur" title: "Listes de l'utilisateur"
create-list: "Créer une liste" create-list: "Créer une liste"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "Publications" notes: "Publications"
following: "Abonné à" following: "Abonné à"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "Mettre en sourdine" mute: "Mettre en sourdine"
muted: "Muting" muted: "Muting"
unmute: "Enlever la sourdine" unmute: "Enlever la sourdine"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "Notes" posts: "Notes"
following: "Suit" following: "Suit"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -39,12 +40,6 @@ common:
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -41,13 +42,6 @@ common:
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -311,6 +305,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
@ -438,6 +434,18 @@ common/views/pages/follow.vue:
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -855,11 +863,10 @@ desktop/views/components/received-follow-requests-window.vue:
accept: "承認" accept: "承認"
reject: "拒否" reject: "拒否"
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
@ -964,7 +971,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
add-to-list: "リストに追加" push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다." warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
application-authorization: "앱의 연계" application-authorization: "앱의 연계"
close: "닫기" close: "닫기"
got-it: "わかった"
customization-tips: customization-tips:
title: "사용자 정의 팁" title: "사용자 정의 팁"
paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다." paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다."
@ -39,12 +40,6 @@ common:
months_ago: "{}개월전" months_ago: "{}개월전"
years_ago: "{}년전" years_ago: "{}년전"
trash: "휴지통" trash: "휴지통"
date:
full-year: "년"
month: "달"
day: "일"
hours: "때"
minutes: "분"
weekday-short: weekday-short:
sunday: "일" sunday: "일"
monday: "월" monday: "월"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam." warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "Zamknij" close: "Zamknij"
got-it: "わかった"
customization-tips: customization-tips:
title: "Wskazówki o dostosowywaniu" title: "Wskazówki o dostosowywaniu"
paragraph1: "Dostosowywanie strony głównej pozwala na dodawanie, usuwanie, przeciąganie i zmienianie kolejności widżetów." paragraph1: "Dostosowywanie strony głównej pozwala na dodawanie, usuwanie, przeciąganie i zmienianie kolejności widżetów."
@ -39,12 +40,6 @@ common:
months_ago: "{} mies. temu" months_ago: "{} mies. temu"
years_ago: "{} lat temu" years_ago: "{} lat temu"
trash: "Kosz" trash: "Kosz"
date:
full-year: "Rok"
month: "Miesiąc"
day: "Dzień"
hours: "Godzina"
minutes: "Minuty"
weekday-short: weekday-short:
sunday: "N" sunday: "N"
monday: "Pn" monday: "Pn"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Logowanie…" signing-in: "Logowanie…"
signin: "Zaloguj" signin: "Zaloguj"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "Nazwa użytkownika" username: "Nazwa użytkownika"
checking: "Sprawdzanie…" checking: "Sprawdzanie…"
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "Śledź" follow: "Śledź"
request-pending: "Oczekiwanie na pozwolenie" request-pending: "Oczekiwanie na pozwolenie"
follow-request: "Poproś o śledzenie" follow-request: "Poproś o śledzenie"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Czarny … Łącznie" total: "Czarny … Łącznie"
notes: "Niebieski … Wpisy" notes: "Niebieski … Wpisy"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "Listy" title: "Listy"
create-list: "Utwórz listę" create-list: "Utwórz listę"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "Wpisy" notes: "Wpisy"
following: "Śledzeni" following: "Śledzeni"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "Wycisz" mute: "Wycisz"
muted: "Wyciszyłeś" muted: "Wyciszyłeś"
unmute: "Cofnij wyciszenie" unmute: "Cofnij wyciszenie"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "Wpisy" posts: "Wpisy"
following: "Śledzeni" following: "Śledzeni"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -39,12 +40,6 @@ common:
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -39,12 +40,6 @@ common:
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -11,6 +11,7 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -39,12 +40,6 @@ common:
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -283,6 +278,8 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
@ -392,6 +389,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"

View file

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "5.17.0", "version": "5.19.0",
"clientVersion": "1.0.8026", "clientVersion": "1.0.8052",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
@ -214,7 +214,7 @@
"vuex-persistedstate": "2.5.4", "vuex-persistedstate": "2.5.4",
"web-push": "3.3.2", "web-push": "3.3.2",
"webfinger.js": "2.6.6", "webfinger.js": "2.6.6",
"webpack": "4.16.4", "webpack": "4.16.5",
"webpack-cli": "3.1.0", "webpack-cli": "3.1.0",
"websocket": "1.0.26", "websocket": "1.0.26",
"ws": "6.0.0", "ws": "6.0.0",

View file

@ -1,13 +0,0 @@
export default date => {
if (typeof date == 'string') date = new Date(date);
return (
date.getFullYear() + '%i18n:common.date.full-year%' +
(date.getMonth() + 1) + '%i18n:common.date.month%' +
date.getDate() + '%i18n:common.date.day%' +
' ' +
date.getHours() + '%i18n:common.date.hours%' +
date.getMinutes() + '%i18n:common.date.minutes%' +
' ' +
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
);
};

View file

@ -132,7 +132,7 @@ export default Vue.extend({
this.users = users; this.users = users;
this.fetching = false; this.fetching = false;
} else { } else {
(this as any).api('users/search_by_username', { (this as any).api('users/search', {
query: this.q, query: this.q,
limit: 30 limit: 30
}).then(users => { }).then(users => {

View file

@ -12,7 +12,7 @@
</ui-input> </ui-input>
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/> <ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button> <ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
<p style="margin: 8px 0;">または<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a></p> <p style="margin: 8px 0;">%i18n:@or%<a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
</form> </form>
</template> </template>

View file

@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => {
const w = os.new(CropWindow, { const w = os.new(CropWindow, {
image: file, image: file,
title: 'アバターとして表示する部分を選択', title: '%i18n:desktop.avatar-crop-title%',
aspectRatio: 1 / 1 aspectRatio: 1 / 1
}); });
@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => {
data.append('file', blob, file.name + '.cropped.png'); data.append('file', blob, file.name + '.cropped.png');
os.api('drive/folders/find', { os.api('drive/folders/find', {
name: 'アイコン' name: '%i18n:desktop.avatar%'
}).then(iconFolder => { }).then(iconFolder => {
if (iconFolder.length === 0) { if (iconFolder.length === 0) {
os.api('drive/folders/create', { os.api('drive/folders/create', {
name: 'アイコン' name: '%i18n:desktop.avatar%'
}).then(iconFolder => { }).then(iconFolder => {
upload(data, iconFolder); upload(data, iconFolder);
}); });
@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => {
const upload = (data, folder) => { const upload = (data, folder) => {
const dialog = os.new(ProgressDialog, { const dialog = os.new(ProgressDialog, {
title: '新しいアバターをアップロードしています' title: '%i18n:desktop.uploading-avatar%'
}); });
document.body.appendChild(dialog.$el); document.body.appendChild(dialog.$el);
@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => {
}); });
os.apis.dialog({ os.apis.dialog({
title: '%fa:info-circle%アバターを更新しました', title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
text: '新しいアバターが反映されるまで時間がかかる場合があります。', text: null,
actions: [{ actions: [{
text: 'わかった' text: '%i18n:common.got-it%'
}] }]
}); });
@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => {
} else { } else {
os.apis.chooseDriveFile({ os.apis.chooseDriveFile({
multiple: false, multiple: false,
title: '%fa:image%アバターにする画像を選択' title: '%fa:image% %i18n:desktop.choose-avatar%'
}).then(file => { }).then(file => {
fileSelected(file); fileSelected(file);
}); });

View file

@ -8,7 +8,7 @@ export default (os: OS) => {
const cropImage = file => new Promise((resolve, reject) => { const cropImage = file => new Promise((resolve, reject) => {
const w = os.new(CropWindow, { const w = os.new(CropWindow, {
image: file, image: file,
title: 'バナーとして表示する部分を選択', title: '%i18n:desktop.banner-crop-title%',
aspectRatio: 16 / 9 aspectRatio: 16 / 9
}); });
@ -18,11 +18,11 @@ export default (os: OS) => {
data.append('file', blob, file.name + '.cropped.png'); data.append('file', blob, file.name + '.cropped.png');
os.api('drive/folders/find', { os.api('drive/folders/find', {
name: 'バナー' name: '%i18n:desktop.banner%'
}).then(bannerFolder => { }).then(bannerFolder => {
if (bannerFolder.length === 0) { if (bannerFolder.length === 0) {
os.api('drive/folders/create', { os.api('drive/folders/create', {
name: 'バナー' name: '%i18n:desktop.banner%'
}).then(iconFolder => { }).then(iconFolder => {
resolve(upload(data, iconFolder)); resolve(upload(data, iconFolder));
}); });
@ -43,7 +43,7 @@ export default (os: OS) => {
const upload = (data, folder) => new Promise((resolve, reject) => { const upload = (data, folder) => new Promise((resolve, reject) => {
const dialog = os.new(ProgressDialog, { const dialog = os.new(ProgressDialog, {
title: '新しいバナーをアップロードしています' title: '%i18n:desktop.uploading-banner%'
}); });
document.body.appendChild(dialog.$el); document.body.appendChild(dialog.$el);
@ -79,10 +79,10 @@ export default (os: OS) => {
}); });
os.apis.dialog({ os.apis.dialog({
title: '%fa:info-circle%バナーを更新しました', title: '%fa:info-circle% %i18n:desktop.banner-updated%',
text: '新しいバナーが反映されるまで時間がかかる場合があります。', text: null,
actions: [{ actions: [{
text: 'わかった' text: '%i18n:common.got-it%'
}] }]
}); });
@ -95,7 +95,7 @@ export default (os: OS) => {
? Promise.resolve(file) ? Promise.resolve(file)
: os.apis.chooseDriveFile({ : os.apis.chooseDriveFile({
multiple: false, multiple: false,
title: '%fa:image%バナーにする画像を選択' title: '%fa:image% %i18n:desktop.choose-banner%'
}); });
return selectedFile return selectedFile

View file

@ -79,7 +79,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import MkPostFormWindow from './post-form-window.vue'; import MkPostFormWindow from './post-form-window.vue';
@ -129,7 +128,7 @@ export default Vue.extend({
: 0; : 0;
}, },
title(): string { title(): string {
return dateStringify(this.p.createdAt); return new Date(this.p.createdAt).toLocaleString();
}, },
urls(): string[] { urls(): string[] {
if (this.p.text) { if (this.p.text) {

View file

@ -12,7 +12,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
export default Vue.extend({ export default Vue.extend({
props: { props: {
@ -28,7 +27,7 @@ export default Vue.extend({
}, },
computed: { computed: {
title(): string { title(): string {
return dateStringify(this.note.createdAt); return new Date(this.note.createdAt).toLocaleString();
} }
} }
}); });

View file

@ -12,13 +12,12 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
export default Vue.extend({ export default Vue.extend({
props: ['note'], props: ['note'],
computed: { computed: {
title(): string { title(): string {
return dateStringify(this.note.createdAt); return new Date(this.note.createdAt).toLocaleString();
} }
} }
}); });

View file

@ -71,7 +71,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import MkPostFormWindow from './post-form-window.vue'; import MkPostFormWindow from './post-form-window.vue';
@ -128,7 +127,7 @@ export default Vue.extend({
}, },
title(): string { title(): string {
return dateStringify(this.p.createdAt); return new Date(this.p.createdAt).toLocaleString();
}, },
urls(): string[] { urls(): string[] {

View file

@ -27,7 +27,7 @@ export default Vue.extend({
methods: { methods: {
add() { add() {
(this as any).apis.input({ (this as any).apis.input({
title: 'リスト名', title: '%i18n:@list-name%',
}).then(async title => { }).then(async title => {
const list = await (this as any).api('users/lists/create', { const list = await (this as any).api('users/lists/create', {
title title

View file

@ -13,7 +13,7 @@
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span> <span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span> <span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
</button> </button>
<button class="mute ui" @click="list">%fa:list% %i18n:@add-to-list%</button> <button class="mute ui" @click="list">%fa:list% %i18n:@push-to-a-list%</button>
</div> </div>
</div> </div>
</template> </template>
@ -76,7 +76,7 @@ export default Vue.extend({
}); });
(this as any).apis.dialog({ (this as any).apis.dialog({
title: 'Done!', title: 'Done!',
text: `${this.user.name}${list.title}に追加しました。` text: '%i18n:@list-pushed%'.replace('{user}', this.user.name).replace('{list}', list.title)
}); });
}); });
} }

View file

@ -55,7 +55,7 @@ export default define({
}).then(data => { }).then(data => {
this.clear(); this.clear();
}).catch(err => { }).catch(err => {
alert('失敗した'); alert('Something happened');
}).then(() => { }).then(() => {
this.posting = false; this.posting = false;
}); });

View file

@ -4,6 +4,8 @@
Error.stackTraceLimit = Infinity; Error.stackTraceLimit = Infinity;
require('events').EventEmitter.defaultMaxListeners = 128;
import * as os from 'os'; import * as os from 'os';
import * as cluster from 'cluster'; import * as cluster from 'cluster';
import * as debug from 'debug'; import * as debug from 'debug';

View file

@ -7,6 +7,11 @@ export default async (job: bq.Job, done: any): Promise<void> => {
await request(job.data.user, job.data.to, job.data.content); await request(job.data.user, job.data.to, job.data.content);
done(); done();
} catch (res) { } catch (res) {
if (!res.hasOwnProperty('statusCode')) {
console.warn(`deliver failed (unknown): ${res}`);
return done();
}
if (res.statusCode == null) return done(); if (res.statusCode == null) return done();
if (res.statusCode >= 400 && res.statusCode < 500) { if (res.statusCode >= 400 && res.statusCode < 500) {
// HTTPステータスコード4xxはクライアントエラーであり、それはつまり // HTTPステータスコード4xxはクライアントエラーであり、それはつまり

View file

@ -1,33 +1,156 @@
import $ from 'cafy'; import $ from 'cafy';
import User, { pack, ILocalUser } from '../../../../models/user';
const escapeRegexp = require('escape-regexp'); const escapeRegexp = require('escape-regexp');
import User, { pack, ILocalUser, validateUsername, IUser } from '../../../../models/user';
import getParams from '../../get-params';
export const meta = {
desc: {
ja: 'ユーザーを検索します。'
},
requireCredential: false,
params: {
query: $.str.note({
desc: {
ja: 'クエリ'
}
}),
offset: $.num.optional.min(0).note({
default: 0,
desc: {
ja: 'オフセット'
}
}),
limit: $.num.optional.range(1, 100).note({
default: 10,
desc: {
ja: '取得する数'
}
}),
localOnly: $.bool.optional.note({
default: false,
desc: {
ja: 'ローカルユーザーのみ検索対象にするか否か'
}
}),
},
};
/** /**
* Search a user * Search a user
*/ */
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
// Get 'query' parameter const [ps, psErr] = getParams(meta, params);
const [query, queryError] = $.str.pipe(x => x != '').get(params.query); if (psErr) return rej(psErr);
if (queryError) return rej('invalid query param');
// Get 'max' parameter const isUsername = validateUsername(ps.query.replace('@', ''));
const [max = 10, maxErr] = $.num.optional.range(1, 30).get(params.max);
if (maxErr) return rej('invalid max param');
const escapedQuery = escapeRegexp(query); let users: IUser[] = [];
// Search users if (isUsername) {
const users = await User users = await User
.find({ .find({
host: null, host: null,
$or: [{ usernameLower: new RegExp('^' + escapeRegexp(ps.query.replace('@', '').toLowerCase()))
usernameLower: new RegExp(escapedQuery.replace('@', '').toLowerCase())
}, { }, {
name: new RegExp(escapedQuery) limit: ps.limit,
}] skip: ps.offset
}, { });
limit: max
}); if (users.length < ps.limit && !ps.localOnly) {
const otherUsers = await User
.find({
host: { $ne: null },
usernameLower: new RegExp('^' + escapeRegexp(ps.query.replace('@', '').toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < ps.limit) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: null,
usernameLower: new RegExp(escapeRegexp(ps.query.replace('@', '').toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < ps.limit && !ps.localOnly) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: { $ne: null },
usernameLower: new RegExp(escapeRegexp(ps.query.replace('@', '').toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
}
if (users.length < ps.limit) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: null,
name: new RegExp('^' + escapeRegexp(ps.query.toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < ps.limit && !ps.localOnly) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: { $ne: null },
name: new RegExp('^' + escapeRegexp(ps.query.toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < ps.limit) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: null,
name: new RegExp(escapeRegexp(ps.query.toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < ps.limit && !ps.localOnly) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: { $ne: null },
name: new RegExp(escapeRegexp(ps.query.toLowerCase()))
}, {
limit: ps.limit - users.length
});
users = users.concat(otherUsers);
}
// Serialize // Serialize
res(await Promise.all(users.map(user => pack(user, me, { detail: true })))); res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));

View file

@ -1,70 +0,0 @@
import $ from 'cafy';
import User, { pack, ILocalUser } from '../../../../models/user';
const escapeRegexp = require('escape-regexp');
/**
* Search a user by username
*/
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
// Get 'query' parameter
const [query, queryError] = $.str.get(params.query);
if (queryError) return rej('invalid query param');
// Get 'offset' parameter
const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset);
if (offsetErr) return rej('invalid offset param');
// Get 'limit' parameter
const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
if (limitErr) return rej('invalid limit param');
let users = await User
.find({
host: null,
usernameLower: new RegExp('^' + escapeRegexp(query.toLowerCase()))
}, {
limit: limit,
skip: offset
});
if (users.length < limit) {
const otherUsers = await User
.find({
host: { $ne: null },
usernameLower: new RegExp('^' + escapeRegexp(query.toLowerCase()))
}, {
limit: limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < limit) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: null,
usernameLower: new RegExp(escapeRegexp(query.toLowerCase()))
}, {
limit: limit - users.length
});
users = users.concat(otherUsers);
}
if (users.length < limit) {
const otherUsers = await User
.find({
_id: { $nin: users.map(u => u._id) },
host: { $ne: null },
usernameLower: new RegExp(escapeRegexp(query.toLowerCase()))
}, {
limit: limit - users.length
});
users = users.concat(otherUsers);
}
// Serialize
res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
});