Merge remote-tracking branch 'upstream/master' into devel
This commit is contained in:
		
						commit
						a256393b81
					
				
					 29 changed files with 385 additions and 213 deletions
				
			
		| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}ヶ月前"
 | 
			
		||||
    years_ago: "{}年前"
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "日"
 | 
			
		||||
    monday: "月"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
  checking: "確認しています..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "vor {0} Monat{0:en}"
 | 
			
		||||
    years_ago: "vor {} Jahr{0:en}"
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "So"
 | 
			
		||||
    monday: "Mo"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "Token"
 | 
			
		||||
  signing-in: "Melde an..."
 | 
			
		||||
  signin: "Anmelden"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "Benutzername"
 | 
			
		||||
  checking: "Überprüfung..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Schwarz ... komplett"
 | 
			
		||||
  notes: "Blau ... Hinweise"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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."
 | 
			
		||||
  application-authorization: "Application authorizations."
 | 
			
		||||
  close: "Close"
 | 
			
		||||
  got-it: "Got it!"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "Customization tips"
 | 
			
		||||
    paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}month(s) ago"
 | 
			
		||||
    years_ago: "{}year(s) ago"
 | 
			
		||||
  trash: "Trash"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "Year"
 | 
			
		||||
    month: "Month"
 | 
			
		||||
    day: "Day"
 | 
			
		||||
    hours: "Hour"
 | 
			
		||||
    minutes: "Minutes"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "S"
 | 
			
		||||
    monday: "M"
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +202,7 @@ common/views/components/games/reversi/reversi.room.vue:
 | 
			
		|||
  cancel-ready: "Cancel \"Ready\""
 | 
			
		||||
common/views/components/connect-failed.vue:
 | 
			
		||||
  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."
 | 
			
		||||
  troubleshoot: "Troubleshoot"
 | 
			
		||||
common/views/components/connect-failed.troubleshooter.vue:
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "Token"
 | 
			
		||||
  signing-in: "Signing in..."
 | 
			
		||||
  signin: "Sign in"
 | 
			
		||||
  or: "Or"
 | 
			
		||||
  signin-with-twitter: "Log in with Twitter"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "Username"
 | 
			
		||||
  checking: "Checking..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "Follow"
 | 
			
		||||
  request-pending: "Pending 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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "User lists"
 | 
			
		||||
  create-list: "Create new list"
 | 
			
		||||
  list-name: "List name"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "Posts"
 | 
			
		||||
  following: "Following"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "Mute"
 | 
			
		||||
  muted: "Muting"
 | 
			
		||||
  unmute: "Unmute"
 | 
			
		||||
  push-to-a-list: "Add to list"
 | 
			
		||||
  list-pushed: "You added {user} to {list}."
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "Notes"
 | 
			
		||||
  following: "Following"
 | 
			
		||||
| 
						 | 
				
			
			@ -1006,7 +1017,7 @@ mobile/views/pages/welcome.vue:
 | 
			
		|||
  signup: "Sign up"
 | 
			
		||||
mobile/views/pages/widgets.vue:
 | 
			
		||||
  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:
 | 
			
		||||
  activity: "Activity"
 | 
			
		||||
mobile/views/pages/share.vue:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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."
 | 
			
		||||
  application-authorization: "Autorizaciones de la aplicación."
 | 
			
		||||
  close: "Cerrar"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "Consejos de personalización"
 | 
			
		||||
    paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "Hace {} mes(es)"
 | 
			
		||||
    years_ago: "Hace {} año(s)"
 | 
			
		||||
  trash: "Papelera"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "Año"
 | 
			
		||||
    month: "Mes"
 | 
			
		||||
    day: "Día"
 | 
			
		||||
    hours: "horas"
 | 
			
		||||
    minutes: "minutos"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "domingo"
 | 
			
		||||
    monday: "lunes"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "Identificador"
 | 
			
		||||
  signing-in: "Entrando..."
 | 
			
		||||
  signin: "Entra"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "Usuario"
 | 
			
		||||
  checking: "Comprobando..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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é."
 | 
			
		||||
  application-authorization: "Permissions de l'application"
 | 
			
		||||
  close: "Fermer"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "Conseils de personnalisation"
 | 
			
		||||
    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"
 | 
			
		||||
    years_ago: "Il y a {} an·s"
 | 
			
		||||
  trash: "Corbeille"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "Année "
 | 
			
		||||
    month: "Mois"
 | 
			
		||||
    day: "Jour"
 | 
			
		||||
    hours: "heures"
 | 
			
		||||
    minutes: "minutes"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "D"
 | 
			
		||||
    monday: "L"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "Token"
 | 
			
		||||
  signing-in: "Connexion...."
 | 
			
		||||
  signin: "Se connecter"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "Nom d'utilisateur"
 | 
			
		||||
  checking: "Vérification"
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "Suivre"
 | 
			
		||||
  request-pending: "Demande d'abonnement en attente"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Noirs ... Total"
 | 
			
		||||
  notes: "Bleu ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "Listes de l'utilisateur"
 | 
			
		||||
  create-list: "Créer une liste"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "Publications"
 | 
			
		||||
  following: "Abonné à"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "Mettre en sourdine"
 | 
			
		||||
  muted: "Muting"
 | 
			
		||||
  unmute: "Enlever la sourdine"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "Notes"
 | 
			
		||||
  following: "Suit"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}ヶ月前"
 | 
			
		||||
    years_ago: "{}年前"
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "日"
 | 
			
		||||
    monday: "月"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
  checking: "確認しています..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -41,13 +42,6 @@ common:
 | 
			
		|||
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "日"
 | 
			
		||||
    monday: "月"
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +305,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
| 
						 | 
				
			
			@ -438,6 +434,18 @@ common/views/pages/follow.vue:
 | 
			
		|||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -855,11 +863,10 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
  accept: "承認"
 | 
			
		||||
  reject: "拒否"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
| 
						 | 
				
			
			@ -964,7 +971,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  add-to-list: "リストに追加"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
 | 
			
		||||
  application-authorization: "앱의 연계"
 | 
			
		||||
  close: "닫기"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "사용자 정의 팁"
 | 
			
		||||
    paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다."
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}개월전"
 | 
			
		||||
    years_ago: "{}년전"
 | 
			
		||||
  trash: "휴지통"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "년"
 | 
			
		||||
    month: "달"
 | 
			
		||||
    day: "일"
 | 
			
		||||
    hours: "때"
 | 
			
		||||
    minutes: "분"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "일"
 | 
			
		||||
    monday: "월"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
  checking: "確認しています..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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."
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "Zamknij"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "Wskazówki o dostosowywaniu"
 | 
			
		||||
    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"
 | 
			
		||||
    years_ago: "{} lat temu"
 | 
			
		||||
  trash: "Kosz"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "Rok"
 | 
			
		||||
    month: "Miesiąc"
 | 
			
		||||
    day: "Dzień"
 | 
			
		||||
    hours: "Godzina"
 | 
			
		||||
    minutes: "Minuty"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "N"
 | 
			
		||||
    monday: "Pn"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "Token"
 | 
			
		||||
  signing-in: "Logowanie…"
 | 
			
		||||
  signin: "Zaloguj"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "Nazwa użytkownika"
 | 
			
		||||
  checking: "Sprawdzanie…"
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "Śledź"
 | 
			
		||||
  request-pending: "Oczekiwanie na pozwolenie"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Czarny … Łącznie"
 | 
			
		||||
  notes: "Niebieski … Wpisy"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "Listy"
 | 
			
		||||
  create-list: "Utwórz listę"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "Wpisy"
 | 
			
		||||
  following: "Śledzeni"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "Wycisz"
 | 
			
		||||
  muted: "Wyciszyłeś"
 | 
			
		||||
  unmute: "Cofnij wyciszenie"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "Wpisy"
 | 
			
		||||
  following: "Śledzeni"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}ヶ月前"
 | 
			
		||||
    years_ago: "{}年前"
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "日"
 | 
			
		||||
    monday: "月"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
  checking: "確認しています..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}ヶ月前"
 | 
			
		||||
    years_ago: "{}年前"
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "日"
 | 
			
		||||
    monday: "月"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
  checking: "確認しています..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ common:
 | 
			
		|||
    warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
 | 
			
		||||
  application-authorization: "アプリの連携"
 | 
			
		||||
  close: "閉じる"
 | 
			
		||||
  got-it: "わかった"
 | 
			
		||||
  customization-tips:
 | 
			
		||||
    title: "カスタマイズのヒント"
 | 
			
		||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,12 +40,6 @@ common:
 | 
			
		|||
    months_ago: "{}ヶ月前"
 | 
			
		||||
    years_ago: "{}年前"
 | 
			
		||||
  trash: "ゴミ箱"
 | 
			
		||||
  date:
 | 
			
		||||
    full-year: "年"
 | 
			
		||||
    month: "月"
 | 
			
		||||
    day: "日"
 | 
			
		||||
    hours: "時"
 | 
			
		||||
    minutes: "分"
 | 
			
		||||
  weekday-short:
 | 
			
		||||
    sunday: "日"
 | 
			
		||||
    monday: "月"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +278,8 @@ common/views/components/signin.vue:
 | 
			
		|||
  token: "トークン"
 | 
			
		||||
  signing-in: "やってます..."
 | 
			
		||||
  signin: "サインイン"
 | 
			
		||||
  or: "または"
 | 
			
		||||
  signin-with-twitter: "Twitterでログイン"
 | 
			
		||||
common/views/components/signup.vue:
 | 
			
		||||
  username: "ユーザー名"
 | 
			
		||||
  checking: "確認しています..."
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +389,17 @@ common/views/pages/follow.vue:
 | 
			
		|||
  follow: "フォロー"
 | 
			
		||||
  request-pending: "フォロー許可待ち"
 | 
			
		||||
  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:
 | 
			
		||||
  total: "Black ... Total"
 | 
			
		||||
  notes: "Blue ... Notes"
 | 
			
		||||
| 
						 | 
				
			
			@ -750,6 +758,7 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
			
		|||
desktop/views/components/user-lists-window.vue:
 | 
			
		||||
  title: "リスト"
 | 
			
		||||
  create-list: "リストを作成"
 | 
			
		||||
  list-name: "リスト名"
 | 
			
		||||
desktop/views/components/user-preview.vue:
 | 
			
		||||
  notes: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			@ -832,6 +841,8 @@ desktop/views/pages/user/user.profile.vue:
 | 
			
		|||
  mute: "ミュートする"
 | 
			
		||||
  muted: "ミュートしています"
 | 
			
		||||
  unmute: "ミュート解除"
 | 
			
		||||
  push-to-a-list: "リストに追加"
 | 
			
		||||
  list-pushed: "{user}を{list}に追加しました。"
 | 
			
		||||
desktop/views/pages/user/user.header.vue:
 | 
			
		||||
  posts: "投稿"
 | 
			
		||||
  following: "フォロー"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
	"name": "misskey",
 | 
			
		||||
	"author": "syuilo <i@syuilo.com>",
 | 
			
		||||
	"version": "5.17.0",
 | 
			
		||||
	"clientVersion": "1.0.8026",
 | 
			
		||||
	"version": "5.19.0",
 | 
			
		||||
	"clientVersion": "1.0.8052",
 | 
			
		||||
	"codename": "nighthike",
 | 
			
		||||
	"main": "./built/index.js",
 | 
			
		||||
	"private": true,
 | 
			
		||||
| 
						 | 
				
			
			@ -214,7 +214,7 @@
 | 
			
		|||
		"vuex-persistedstate": "2.5.4",
 | 
			
		||||
		"web-push": "3.3.2",
 | 
			
		||||
		"webfinger.js": "2.6.6",
 | 
			
		||||
		"webpack": "4.16.4",
 | 
			
		||||
		"webpack": "4.16.5",
 | 
			
		||||
		"webpack-cli": "3.1.0",
 | 
			
		||||
		"websocket": "1.0.26",
 | 
			
		||||
		"ws": "6.0.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()]})`
 | 
			
		||||
	);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ export default Vue.extend({
 | 
			
		|||
					this.users = users;
 | 
			
		||||
					this.fetching = false;
 | 
			
		||||
				} else {
 | 
			
		||||
					(this as any).api('users/search_by_username', {
 | 
			
		||||
					(this as any).api('users/search', {
 | 
			
		||||
						query: this.q,
 | 
			
		||||
						limit: 30
 | 
			
		||||
					}).then(users => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@
 | 
			
		|||
	</ui-input>
 | 
			
		||||
	<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>
 | 
			
		||||
	<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>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => {
 | 
			
		|||
 | 
			
		||||
		const w = os.new(CropWindow, {
 | 
			
		||||
			image: file,
 | 
			
		||||
			title: 'アバターとして表示する部分を選択',
 | 
			
		||||
			title: '%i18n:desktop.avatar-crop-title%',
 | 
			
		||||
			aspectRatio: 1 / 1
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => {
 | 
			
		|||
			data.append('file', blob, file.name + '.cropped.png');
 | 
			
		||||
 | 
			
		||||
			os.api('drive/folders/find', {
 | 
			
		||||
				name: 'アイコン'
 | 
			
		||||
				name: '%i18n:desktop.avatar%'
 | 
			
		||||
			}).then(iconFolder => {
 | 
			
		||||
				if (iconFolder.length === 0) {
 | 
			
		||||
					os.api('drive/folders/create', {
 | 
			
		||||
						name: 'アイコン'
 | 
			
		||||
						name: '%i18n:desktop.avatar%'
 | 
			
		||||
					}).then(iconFolder => {
 | 
			
		||||
						upload(data, iconFolder);
 | 
			
		||||
					});
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => {
 | 
			
		|||
 | 
			
		||||
	const upload = (data, folder) => {
 | 
			
		||||
		const dialog = os.new(ProgressDialog, {
 | 
			
		||||
			title: '新しいアバターをアップロードしています'
 | 
			
		||||
			title: '%i18n:desktop.uploading-avatar%'
 | 
			
		||||
		});
 | 
			
		||||
		document.body.appendChild(dialog.$el);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => {
 | 
			
		|||
			});
 | 
			
		||||
 | 
			
		||||
			os.apis.dialog({
 | 
			
		||||
				title: '%fa:info-circle%アバターを更新しました',
 | 
			
		||||
				text: '新しいアバターが反映されるまで時間がかかる場合があります。',
 | 
			
		||||
				title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
 | 
			
		||||
				text: null,
 | 
			
		||||
				actions: [{
 | 
			
		||||
					text: 'わかった'
 | 
			
		||||
					text: '%i18n:common.got-it%'
 | 
			
		||||
				}]
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => {
 | 
			
		|||
	} else {
 | 
			
		||||
		os.apis.chooseDriveFile({
 | 
			
		||||
			multiple: false,
 | 
			
		||||
			title: '%fa:image%アバターにする画像を選択'
 | 
			
		||||
			title: '%fa:image% %i18n:desktop.choose-avatar%'
 | 
			
		||||
		}).then(file => {
 | 
			
		||||
			fileSelected(file);
 | 
			
		||||
		});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ export default (os: OS) => {
 | 
			
		|||
	const cropImage = file => new Promise((resolve, reject) => {
 | 
			
		||||
		const w = os.new(CropWindow, {
 | 
			
		||||
			image: file,
 | 
			
		||||
			title: 'バナーとして表示する部分を選択',
 | 
			
		||||
			title: '%i18n:desktop.banner-crop-title%',
 | 
			
		||||
			aspectRatio: 16 / 9
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -18,11 +18,11 @@ export default (os: OS) => {
 | 
			
		|||
			data.append('file', blob, file.name + '.cropped.png');
 | 
			
		||||
 | 
			
		||||
			os.api('drive/folders/find', {
 | 
			
		||||
				name: 'バナー'
 | 
			
		||||
				name: '%i18n:desktop.banner%'
 | 
			
		||||
			}).then(bannerFolder => {
 | 
			
		||||
				if (bannerFolder.length === 0) {
 | 
			
		||||
					os.api('drive/folders/create', {
 | 
			
		||||
						name: 'バナー'
 | 
			
		||||
						name: '%i18n:desktop.banner%'
 | 
			
		||||
					}).then(iconFolder => {
 | 
			
		||||
						resolve(upload(data, iconFolder));
 | 
			
		||||
					});
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ export default (os: OS) => {
 | 
			
		|||
 | 
			
		||||
	const upload = (data, folder) => new Promise((resolve, reject) => {
 | 
			
		||||
		const dialog = os.new(ProgressDialog, {
 | 
			
		||||
			title: '新しいバナーをアップロードしています'
 | 
			
		||||
			title: '%i18n:desktop.uploading-banner%'
 | 
			
		||||
		});
 | 
			
		||||
		document.body.appendChild(dialog.$el);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,10 +79,10 @@ export default (os: OS) => {
 | 
			
		|||
			});
 | 
			
		||||
 | 
			
		||||
			os.apis.dialog({
 | 
			
		||||
				title: '%fa:info-circle%バナーを更新しました',
 | 
			
		||||
				text: '新しいバナーが反映されるまで時間がかかる場合があります。',
 | 
			
		||||
				title: '%fa:info-circle% %i18n:desktop.banner-updated%',
 | 
			
		||||
				text: null,
 | 
			
		||||
				actions: [{
 | 
			
		||||
					text: 'わかった'
 | 
			
		||||
					text: '%i18n:common.got-it%'
 | 
			
		||||
				}]
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ export default (os: OS) => {
 | 
			
		|||
			? Promise.resolve(file)
 | 
			
		||||
			: os.apis.chooseDriveFile({
 | 
			
		||||
				multiple: false,
 | 
			
		||||
				title: '%fa:image%バナーにする画像を選択'
 | 
			
		||||
				title: '%fa:image% %i18n:desktop.choose-banner%'
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		return selectedFile
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,6 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import dateStringify from '../../../common/scripts/date-stringify';
 | 
			
		||||
import parse from '../../../../../mfm/parse';
 | 
			
		||||
 | 
			
		||||
import MkPostFormWindow from './post-form-window.vue';
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +128,7 @@ export default Vue.extend({
 | 
			
		|||
				: 0;
 | 
			
		||||
		},
 | 
			
		||||
		title(): string {
 | 
			
		||||
			return dateStringify(this.p.createdAt);
 | 
			
		||||
			return new Date(this.p.createdAt).toLocaleString();
 | 
			
		||||
		},
 | 
			
		||||
		urls(): string[] {
 | 
			
		||||
			if (this.p.text) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,6 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import dateStringify from '../../../common/scripts/date-stringify';
 | 
			
		||||
 | 
			
		||||
export default Vue.extend({
 | 
			
		||||
	props: {
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +27,7 @@ export default Vue.extend({
 | 
			
		|||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
		title(): string {
 | 
			
		||||
			return dateStringify(this.note.createdAt);
 | 
			
		||||
			return new Date(this.note.createdAt).toLocaleString();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,13 +12,12 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import dateStringify from '../../../common/scripts/date-stringify';
 | 
			
		||||
 | 
			
		||||
export default Vue.extend({
 | 
			
		||||
	props: ['note'],
 | 
			
		||||
	computed: {
 | 
			
		||||
		title(): string {
 | 
			
		||||
			return dateStringify(this.note.createdAt);
 | 
			
		||||
			return new Date(this.note.createdAt).toLocaleString();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,6 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import dateStringify from '../../../common/scripts/date-stringify';
 | 
			
		||||
import parse from '../../../../../mfm/parse';
 | 
			
		||||
 | 
			
		||||
import MkPostFormWindow from './post-form-window.vue';
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +127,7 @@ export default Vue.extend({
 | 
			
		|||
		},
 | 
			
		||||
 | 
			
		||||
		title(): string {
 | 
			
		||||
			return dateStringify(this.p.createdAt);
 | 
			
		||||
			return new Date(this.p.createdAt).toLocaleString();
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		urls(): string[] {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ export default Vue.extend({
 | 
			
		|||
	methods: {
 | 
			
		||||
		add() {
 | 
			
		||||
			(this as any).apis.input({
 | 
			
		||||
				title: 'リスト名',
 | 
			
		||||
				title: '%i18n:@list-name%',
 | 
			
		||||
			}).then(async title => {
 | 
			
		||||
				const list = await (this as any).api('users/lists/create', {
 | 
			
		||||
					title
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@
 | 
			
		|||
			<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
 | 
			
		||||
			<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
 | 
			
		||||
		</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>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ export default Vue.extend({
 | 
			
		|||
				});
 | 
			
		||||
				(this as any).apis.dialog({
 | 
			
		||||
					title: 'Done!',
 | 
			
		||||
					text: `${this.user.name}を${list.title}に追加しました。`
 | 
			
		||||
					text: '%i18n:@list-pushed%'.replace('{user}', this.user.name).replace('{list}', list.title)
 | 
			
		||||
				});
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ export default define({
 | 
			
		|||
			}).then(data => {
 | 
			
		||||
				this.clear();
 | 
			
		||||
			}).catch(err => {
 | 
			
		||||
				alert('失敗した');
 | 
			
		||||
				alert('Something happened');
 | 
			
		||||
			}).then(() => {
 | 
			
		||||
				this.posting = false;
 | 
			
		||||
			});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,8 @@
 | 
			
		|||
 | 
			
		||||
Error.stackTraceLimit = Infinity;
 | 
			
		||||
 | 
			
		||||
require('events').EventEmitter.defaultMaxListeners = 128;
 | 
			
		||||
 | 
			
		||||
import * as os from 'os';
 | 
			
		||||
import * as cluster from 'cluster';
 | 
			
		||||
import * as debug from 'debug';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
		done();
 | 
			
		||||
	} catch (res) {
 | 
			
		||||
		if (!res.hasOwnProperty('statusCode')) {
 | 
			
		||||
			console.warn(`deliver failed (unknown): ${res}`);
 | 
			
		||||
			return done();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (res.statusCode == null) return done();
 | 
			
		||||
		if (res.statusCode >= 400 && res.statusCode < 500) {
 | 
			
		||||
			// HTTPステータスコード4xxはクライアントエラーであり、それはつまり
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,33 +1,156 @@
 | 
			
		|||
import $ from 'cafy';
 | 
			
		||||
import User, { pack, ILocalUser } from '../../../../models/user';
 | 
			
		||||
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
 | 
			
		||||
 */
 | 
			
		||||
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
 | 
			
		||||
	// Get 'query' parameter
 | 
			
		||||
	const [query, queryError] = $.str.pipe(x => x != '').get(params.query);
 | 
			
		||||
	if (queryError) return rej('invalid query param');
 | 
			
		||||
	const [ps, psErr] = getParams(meta, params);
 | 
			
		||||
	if (psErr) return rej(psErr);
 | 
			
		||||
 | 
			
		||||
	// Get 'max' parameter
 | 
			
		||||
	const [max = 10, maxErr] = $.num.optional.range(1, 30).get(params.max);
 | 
			
		||||
	if (maxErr) return rej('invalid max param');
 | 
			
		||||
	const isUsername = validateUsername(ps.query.replace('@', ''));
 | 
			
		||||
 | 
			
		||||
	const escapedQuery = escapeRegexp(query);
 | 
			
		||||
	let users: IUser[] = [];
 | 
			
		||||
 | 
			
		||||
	// Search users
 | 
			
		||||
	const users = await User
 | 
			
		||||
		.find({
 | 
			
		||||
			host: null,
 | 
			
		||||
			$or: [{
 | 
			
		||||
				usernameLower: new RegExp(escapedQuery.replace('@', '').toLowerCase())
 | 
			
		||||
	if (isUsername) {
 | 
			
		||||
		users = await User
 | 
			
		||||
			.find({
 | 
			
		||||
				host: null,
 | 
			
		||||
				usernameLower: new RegExp('^' + escapeRegexp(ps.query.replace('@', '').toLowerCase()))
 | 
			
		||||
			}, {
 | 
			
		||||
				name: new RegExp(escapedQuery)
 | 
			
		||||
			}]
 | 
			
		||||
		}, {
 | 
			
		||||
			limit: max
 | 
			
		||||
		});
 | 
			
		||||
				limit: ps.limit,
 | 
			
		||||
				skip: ps.offset
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		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
 | 
			
		||||
	res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 }))));
 | 
			
		||||
});
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue