Compare commits
60 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
196c55edbc | ||
![]() |
e724c1e7e8 | ||
![]() |
869c19c666 | ||
![]() |
86a5f715d3 | ||
![]() |
514aeac2d8 | ||
![]() |
8980a26713 | ||
![]() |
a39e2b28d1 | ||
![]() |
bef617cb7c | ||
![]() |
1dc1feca0f | ||
![]() |
90eed0ea0d | ||
![]() |
c730e5edfa | ||
![]() |
7bd33ecc72 | ||
![]() |
d4f7058574 | ||
![]() |
980ae3dcb3 | ||
![]() |
3a76113b78 | ||
![]() |
ec8105b2ae | ||
![]() |
bf05785345 | ||
![]() |
82346d788b | ||
![]() |
d86cfa86e4 | ||
![]() |
b85f13dad3 | ||
![]() |
eb8c3fe884 | ||
![]() |
ff325d9588 | ||
![]() |
a98392ff27 | ||
![]() |
22b8aab7a0 | ||
![]() |
24de518922 | ||
![]() |
a169c7756f | ||
![]() |
249a7f4f68 | ||
![]() |
4f590e0a96 | ||
![]() |
f5b5b290e4 | ||
![]() |
1f75cf4ace | ||
![]() |
1e4f11a979 | ||
![]() |
be12e23aa1 | ||
![]() |
790e6ceca4 | ||
![]() |
a303d52990 | ||
![]() |
096fab575c | ||
![]() |
a256393b81 | ||
![]() |
e8eee9057a | ||
![]() |
d81acae17e | ||
![]() |
313715bc75 | ||
![]() |
94dabd2038 | ||
![]() |
a3d58e5bc7 | ||
![]() |
bfdfd026a2 | ||
![]() |
b713f06599 | ||
![]() |
2172c5edca | ||
![]() |
9bc0cfacfa | ||
![]() |
546cfeadbe | ||
![]() |
2413583ce9 | ||
![]() |
d7510491a5 | ||
![]() |
61db07edf4 | ||
![]() |
5c3ac8f952 | ||
![]() |
5bfcb75ec3 | ||
![]() |
d733a1b445 | ||
![]() |
75c44cd349 | ||
![]() |
f4d247cfae | ||
![]() |
4260ec713f | ||
![]() |
99f4ab7000 | ||
![]() |
06390380f8 | ||
![]() |
752186066b | ||
![]() |
911762fedf | ||
![]() |
de448fc99f |
@@ -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: "¡Listo!"
|
||||
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"
|
||||
@@ -88,7 +83,7 @@ common:
|
||||
i-like-sushi: "Prefiero sushi a pudín"
|
||||
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
||||
verified-user: "Usuario verificado"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
||||
reversi:
|
||||
drawn: "Empatado"
|
||||
my-turn: "Mi turno"
|
||||
@@ -170,23 +165,23 @@ common/views/components/games/reversi/reversi.vue:
|
||||
waiting-for: "Esperando por {}"
|
||||
cancel: "Cancelar"
|
||||
common/views/components/games/reversi/reversi.game.vue:
|
||||
surrender: "投了"
|
||||
surrendered: "投了により"
|
||||
surrender: "Rendirse"
|
||||
surrendered: "Por rendirse"
|
||||
common/views/components/games/reversi/reversi.index.vue:
|
||||
title: "Misskey Reversi"
|
||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
||||
invite: "招待"
|
||||
rule: "遊び方"
|
||||
sub-title: "¡Juega Reversi con tus amigos!"
|
||||
invite: "Invitar"
|
||||
rule: "Cómo jugar"
|
||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||
mode-invite: "招待"
|
||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
||||
invitations: "対局の招待があります!"
|
||||
my-games: "自分の対局"
|
||||
all-games: "みんなの対局"
|
||||
enter-username: "ユーザー名を入力してください"
|
||||
mode-invite: "Invitar"
|
||||
mode-invite-desc: "Invitar un usuario al juego."
|
||||
invitations: "¡Has recibido una invitación!"
|
||||
my-games: "Mis juegos"
|
||||
all-games: "Todos los juegos"
|
||||
enter-username: "Ingresar nombre de usuario"
|
||||
game-state:
|
||||
ended: "終了"
|
||||
playing: "進行中"
|
||||
ended: "Finalizado"
|
||||
playing: "En progreso"
|
||||
common/views/components/games/reversi/reversi.room.vue:
|
||||
settings-of-the-game: "Configuración de juego"
|
||||
choose-map: "Elije un mapa"
|
||||
@@ -198,7 +193,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
||||
looped-map: "Mapa en bucle"
|
||||
can-put-everywhere: "Puedes colocar donde quieras"
|
||||
settings-of-the-bot: "Configuración de bot"
|
||||
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||
this-game-is-started-soon: "El juego comenzará pronto"
|
||||
waiting-for-other: "Esperando a que se prepare el adversario"
|
||||
waiting-for-me: "Esperando por la preparación"
|
||||
waiting-for-both: "Esperando por ti"
|
||||
@@ -283,6 +278,8 @@ common/views/components/signin.vue:
|
||||
token: "Identificador"
|
||||
signing-in: "Entrando..."
|
||||
signin: "Entra"
|
||||
or: "O"
|
||||
signin-with-twitter: "Ingresar con Twitter"
|
||||
common/views/components/signup.vue:
|
||||
username: "Usuario"
|
||||
checking: "Comprobando..."
|
||||
@@ -377,7 +374,7 @@ common/views/widgets/tips.vue:
|
||||
tips-line9: "Misskey está hecho bajo licencia AGPLv3"
|
||||
tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas"
|
||||
tips-line11: "Puedes resaltar publicaciones en la página de usuario haciendo click en \"...\""
|
||||
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
|
||||
tips-line13: "Todos los archivos añadidos a la publicación se han guardado en tu unidad."
|
||||
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
||||
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
@@ -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,8 @@ common:
|
||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||
application-authorization: "アプリの連携"
|
||||
close: "閉じる"
|
||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||
got-it: "わかった"
|
||||
customization-tips:
|
||||
title: "カスタマイズのヒント"
|
||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||
@@ -26,7 +28,6 @@ common:
|
||||
notified-by: "{}さんから"
|
||||
reply-from: "{}さんから返信:"
|
||||
quoted-by: "{}さんが引用:"
|
||||
name: "Misskey"
|
||||
time:
|
||||
unknown: "なぞのじかん"
|
||||
future: "未来"
|
||||
@@ -38,16 +39,10 @@ common:
|
||||
weeks_ago: "{}週間前"
|
||||
months_ago: "{}ヶ月前"
|
||||
years_ago: "{}年前"
|
||||
month-and-day: "{month}月 {day}日"
|
||||
|
||||
trash: "ゴミ箱"
|
||||
|
||||
date:
|
||||
full-year: "年"
|
||||
month: "月"
|
||||
day: "日"
|
||||
hours: "時"
|
||||
minutes: "分"
|
||||
|
||||
weekday-short:
|
||||
sunday: "日"
|
||||
monday: "月"
|
||||
@@ -259,12 +254,14 @@ common/views/components/messaging-room.vue:
|
||||
no-history: "これより過去の履歴はありません"
|
||||
resize-form: "ドラッグしてフォームの広さを調整"
|
||||
new-message: "新しいメッセージがあります"
|
||||
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||
|
||||
common/views/components/messaging-room.form.vue:
|
||||
input-message-here: "ここにメッセージを入力"
|
||||
send: "送信"
|
||||
attach-from-local: "PCからファイルを添付する"
|
||||
attach-from-drive: "ドライブからファイルを添付する"
|
||||
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
||||
|
||||
common/views/components/messaging-room.message.vue:
|
||||
is-read: "既読"
|
||||
@@ -311,6 +308,8 @@ common/views/components/signin.vue:
|
||||
token: "トークン"
|
||||
signing-in: "やってます..."
|
||||
signin: "サインイン"
|
||||
or: "または"
|
||||
signin-with-twitter: "Twitterでログイン"
|
||||
|
||||
common/views/components/signup.vue:
|
||||
username: "ユーザー名"
|
||||
@@ -438,6 +437,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"
|
||||
@@ -597,6 +608,8 @@ desktop/views/components/notes.note.vue:
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
hide: "隠す"
|
||||
see-more: "もっと見る"
|
||||
|
||||
desktop/views/components/notes.vue:
|
||||
error: "読み込みに失敗しました。"
|
||||
@@ -635,6 +648,7 @@ desktop/views/components/post-form.vue:
|
||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
||||
error: "エラー"
|
||||
enter-username: "ユーザー名を入力してください"
|
||||
annotations: "内容への注釈 (オプション)"
|
||||
|
||||
desktop/views/components/post-form-window.vue:
|
||||
note: "新規投稿"
|
||||
@@ -823,6 +837,7 @@ desktop/views/components/timeline.vue:
|
||||
|
||||
desktop/views/components/ui.header.vue:
|
||||
welcome-back: "おかえりなさい、"
|
||||
adjective: "さん"
|
||||
|
||||
desktop/views/components/ui.header.account.vue:
|
||||
profile: "プロフィール"
|
||||
@@ -855,11 +870,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,6 +978,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: "投稿"
|
||||
@@ -1119,6 +1135,7 @@ mobile/views/components/timeline.vue:
|
||||
|
||||
mobile/views/components/ui.header.vue:
|
||||
welcome-back: "おかえりなさい、"
|
||||
adjective: "さん"
|
||||
|
||||
mobile/views/components/ui.nav.vue:
|
||||
timeline: "タイムライン"
|
||||
@@ -1180,6 +1197,8 @@ mobile/views/pages/welcome.vue:
|
||||
mobile/views/pages/widgets.vue:
|
||||
dashboard: "ダッシュボード"
|
||||
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||
add-widget: "追加"
|
||||
customization-tips: "カスタマイズのヒント"
|
||||
|
||||
mobile/views/pages/widgets/activity.vue:
|
||||
activity: "アクティビティ"
|
||||
@@ -1228,6 +1247,7 @@ mobile/views/pages/settings/settings.profile.vue:
|
||||
mobile/views/pages/search.vue:
|
||||
search: "検索"
|
||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||
not-found: "「{}」に関する投稿は見つかりませんでした。"
|
||||
|
||||
mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
@@ -1332,3 +1352,7 @@ docs:
|
||||
name: "名前"
|
||||
type: "型"
|
||||
description: "説明"
|
||||
|
||||
|
||||
dev/views/index.vue:
|
||||
manage-apps: "アプリの管理"
|
||||
|
@@ -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: "フォロー"
|
||||
|
16
package.json
16
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "5.18.0",
|
||||
"clientVersion": "1.0.8033",
|
||||
"version": "5.19.0",
|
||||
"clientVersion": "1.0.8052",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
@@ -59,7 +59,7 @@
|
||||
"@types/mocha": "5.2.3",
|
||||
"@types/mongodb": "3.1.3",
|
||||
"@types/ms": "0.7.30",
|
||||
"@types/node": "10.5.6",
|
||||
"@types/node": "10.5.7",
|
||||
"@types/portscanner": "2.1.0",
|
||||
"@types/pug": "2.0.4",
|
||||
"@types/qrcode": "1.2.0",
|
||||
@@ -88,7 +88,7 @@
|
||||
"bootstrap-vue": "2.0.0-rc.11",
|
||||
"cafy": "11.3.0",
|
||||
"chalk": "2.4.1",
|
||||
"commander": "2.17.0",
|
||||
"commander": "2.17.1",
|
||||
"crc-32": "1.2.0",
|
||||
"css-loader": "1.0.0",
|
||||
"dateformat": "3.0.3",
|
||||
@@ -184,11 +184,11 @@
|
||||
"single-line-log": "1.1.2",
|
||||
"speakeasy": "2.0.0",
|
||||
"stringz": "1.0.0",
|
||||
"style-loader": "0.21.0",
|
||||
"style-loader": "0.22.1",
|
||||
"stylus": "0.54.5",
|
||||
"stylus-loader": "3.0.2",
|
||||
"summaly": "2.0.6",
|
||||
"systeminformation": "3.42.8",
|
||||
"systeminformation": "3.42.9",
|
||||
"syuilo-password-strength": "0.0.1",
|
||||
"textarea-caret": "3.1.0",
|
||||
"tmp": "0.0.33",
|
||||
@@ -196,7 +196,7 @@
|
||||
"ts-node": "7.0.0",
|
||||
"tslint": "5.10.0",
|
||||
"typescript": "2.9.2",
|
||||
"typescript-eslint-parser": "17.0.1",
|
||||
"typescript-eslint-parser": "18.0.0",
|
||||
"uglify-es": "3.3.9",
|
||||
"url-loader": "1.0.1",
|
||||
"uuid": "3.3.2",
|
||||
@@ -205,7 +205,7 @@
|
||||
"vue-cropperjs": "2.2.1",
|
||||
"vue-js-modal": "1.3.16",
|
||||
"vue-json-tree-view": "2.1.4",
|
||||
"vue-loader": "15.2.6",
|
||||
"vue-loader": "15.3.0",
|
||||
"vue-router": "3.0.1",
|
||||
"vue-style-loader": "4.1.1",
|
||||
"vue-template-compiler": "2.5.17",
|
||||
|
@@ -8,14 +8,14 @@ import VueRouter from 'vue-router';
|
||||
import './style.styl';
|
||||
|
||||
import init from '../init';
|
||||
|
||||
import Index from './views/index.vue';
|
||||
import * as config from '../config';
|
||||
|
||||
/**
|
||||
* init
|
||||
*/
|
||||
init(launch => {
|
||||
document.title = '%i18n:common.name% | %i18n:common.application-authorization%';
|
||||
document.title = `${config.name} | %i18n:common.application-authorization%`;
|
||||
|
||||
// Init router
|
||||
const router = new VueRouter({
|
||||
|
@@ -38,7 +38,7 @@ export default function(type, data): Notification {
|
||||
switch (data.type) {
|
||||
case 'mention':
|
||||
return {
|
||||
title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}さんから:` + '%i18n:common.notification.notified-by%'.split("{}")[1],
|
||||
title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}:` + '%i18n:common.notification.notified-by%'.split("{}")[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
@@ -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()]})`
|
||||
);
|
||||
};
|
@@ -83,7 +83,7 @@ export default Vue.extend({
|
||||
}
|
||||
} else {
|
||||
if (items[0].kind == 'file') {
|
||||
alert('メッセージに添付できるのはひとつのファイルのみです');
|
||||
alert('%i18n:only-one-file-attached%');
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -105,7 +105,7 @@ export default Vue.extend({
|
||||
return;
|
||||
} else if (e.dataTransfer.files.length > 1) {
|
||||
e.preventDefault();
|
||||
alert('メッセージに添付できるのはひとつのファイルのみです');
|
||||
alert('%i18n:only-one-file-attached%');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -61,7 +61,7 @@ export default Vue.extend({
|
||||
const date = new Date(message.createdAt).getDate();
|
||||
const month = new Date(message.createdAt).getMonth() + 1;
|
||||
message._date = date;
|
||||
message._datetext = `${month}月 ${date}日`;
|
||||
message._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return message;
|
||||
});
|
||||
},
|
||||
@@ -111,7 +111,7 @@ export default Vue.extend({
|
||||
this.form.upload(e.dataTransfer.files[0]);
|
||||
return;
|
||||
} else if (e.dataTransfer.files.length > 1) {
|
||||
alert('メッセージに添付できるのはひとつのファイルのみです');
|
||||
alert('%i18n:@only-one-file-attached%');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -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>
|
||||
|
||||
|
@@ -2,6 +2,9 @@
|
||||
<iframe v-if="youtubeId" type="text/html" height="250"
|
||||
:src="`https://www.youtube.com/embed/${youtubeId}?origin=${misskeyUrl}`"
|
||||
frameborder="0"/>
|
||||
<iframe v-else-if="spotifyId"
|
||||
:src="`https://open.spotify.com/embed/track/${spotifyId}`"
|
||||
frameborder="0" allowtransparency="true" allow="encrypted-media" />
|
||||
<div v-else-if="tweetUrl && detail" class="twitter">
|
||||
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
|
||||
<a :href="url"></a>
|
||||
@@ -60,6 +63,8 @@ export default Vue.extend({
|
||||
this.youtubeId = url.searchParams.get('v');
|
||||
} else if (url.hostname == 'youtu.be') {
|
||||
this.youtubeId = url.pathname;
|
||||
} else if (url.hostname == 'open.spotify.com') {
|
||||
this.spotifyId = url.pathname.split('/').reverse().filter(x => x !== '')[0];
|
||||
} else if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
||||
this.tweetUrl = url;
|
||||
const twttr = (window as any).twttr || {};
|
||||
|
@@ -71,7 +71,6 @@ export default Vue.extend({
|
||||
this.user = user;
|
||||
this.fetching = false;
|
||||
Progress.done();
|
||||
document.title = getUserName(this.user) + ' | %i18n:common.name%';
|
||||
});
|
||||
},
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<div>
|
||||
<p>%fa:R hdd%Storage</p>
|
||||
<p>Total: {{ total | bytes(1) }}</p>
|
||||
<p>Available: {{ available | bytes(1) }}</p>
|
||||
<p>Free: {{ available | bytes(1) }}</p>
|
||||
<p>Used: {{ used | bytes(1) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@@ -18,7 +18,7 @@
|
||||
<div class="body">
|
||||
<p v-if="p.cw != null" class="cw">
|
||||
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
|
||||
<span class="toggle" @click="showContent = !showContent">{{ showContent ? '隠す' : 'もっと見る' }}</span>
|
||||
<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
|
||||
</p>
|
||||
<div class="content" v-show="p.cw == null || showContent">
|
||||
<div class="text">
|
||||
@@ -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[] {
|
||||
|
@@ -33,7 +33,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import { url } from '../../../config';
|
||||
import * as config from '../../../config';
|
||||
import getNoteSummary from '../../../../../misc/get-note-summary';
|
||||
|
||||
import XNote from './notes.note.vue';
|
||||
@@ -69,7 +69,7 @@ export default Vue.extend({
|
||||
const date = new Date(note.createdAt).getDate();
|
||||
const month = new Date(note.createdAt).getMonth() + 1;
|
||||
note._date = date;
|
||||
note._datetext = `${month}月 ${date}日`;
|
||||
note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return note;
|
||||
});
|
||||
}
|
||||
@@ -149,7 +149,7 @@ export default Vue.extend({
|
||||
|
||||
// サウンドを再生する
|
||||
if (this.$store.state.device.enableSounds && !silent) {
|
||||
const sound = new Audio(`${url}/assets/post.mp3`);
|
||||
const sound = new Audio(`${config.url}/assets/post.mp3`);
|
||||
sound.volume = this.$store.state.device.soundVolume;
|
||||
sound.play();
|
||||
}
|
||||
@@ -187,7 +187,7 @@ export default Vue.extend({
|
||||
|
||||
clearNotification() {
|
||||
this.unreadCount = 0;
|
||||
document.title = '%i18n:common.name%';
|
||||
document.title = config.name;
|
||||
},
|
||||
|
||||
onVisibilitychange() {
|
||||
|
@@ -130,7 +130,7 @@ export default Vue.extend({
|
||||
const date = new Date(notification.createdAt).getDate();
|
||||
const month = new Date(notification.createdAt).getMonth() + 1;
|
||||
notification._date = date;
|
||||
notification._datetext = `${month}月 ${date}日`;
|
||||
notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return notification;
|
||||
});
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<b>%i18n:@recent-tags%:</b>
|
||||
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
|
||||
</div>
|
||||
<input v-show="useCw" v-model="cw" placeholder="内容への注釈 (オプション)">
|
||||
<input v-show="useCw" v-model="cw" placeholder="%i18n:@annotations%">
|
||||
<textarea :class="{ with: (files.length != 0 || poll) }"
|
||||
ref="text" v-model="text" :disabled="posting"
|
||||
@keydown="onKeydown" @paste="onPaste" :placeholder="placeholder"
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<div class="main" ref="main">
|
||||
<div class="backdrop"></div>
|
||||
<div class="main">
|
||||
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p>
|
||||
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
|
||||
<div class="container" ref="mainContainer">
|
||||
<div class="left">
|
||||
<x-nav/>
|
||||
|
@@ -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
|
||||
|
@@ -72,7 +72,7 @@ export default Vue.extend({
|
||||
const date = new Date(note.createdAt).getDate();
|
||||
const month = new Date(note.createdAt).getMonth() + 1;
|
||||
note._date = date;
|
||||
note._datetext = `${month}月 ${date}日`;
|
||||
note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return note;
|
||||
});
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ export default Vue.extend({
|
||||
const date = new Date(notification.createdAt).getDate();
|
||||
const month = new Date(notification.createdAt).getMonth() + 1;
|
||||
notification._date = date;
|
||||
notification._datetext = `${month}月 ${date}日`;
|
||||
notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return notification;
|
||||
});
|
||||
}
|
||||
|
@@ -4,9 +4,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% - %i18n:@title%';
|
||||
document.title = `${config.name} - %i18n:@title%`;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
@@ -7,6 +7,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
props: {
|
||||
@@ -16,7 +17,7 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name%';
|
||||
document.title = config.name;
|
||||
|
||||
Progress.start();
|
||||
},
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
|
||||
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1>
|
||||
<h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1>
|
||||
<div>
|
||||
<mk-signin v-if="!$store.getters.isSignedIn"/>
|
||||
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
|
||||
@@ -12,10 +12,12 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
return {
|
||||
name: config.name,
|
||||
posted: false,
|
||||
text: new URLSearchParams(location.search).get('text')
|
||||
};
|
||||
|
@@ -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% リストに追加</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)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@@ -68,7 +68,6 @@ export default Vue.extend({
|
||||
this.user = user;
|
||||
this.fetching = false;
|
||||
Progress.done();
|
||||
document.title = getUserName(this.user) + ' | %i18n:common.name%';
|
||||
});
|
||||
},
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }">
|
||||
<div class="container">
|
||||
<div class="info">
|
||||
<span>%i18n:common.name% <b>{{ host }}</b></span>
|
||||
<span><b>{{ host }}</b></span>
|
||||
<span class="stats" v-if="stats">
|
||||
<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
|
||||
<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
|
||||
@@ -16,9 +16,9 @@
|
||||
</div>
|
||||
<main>
|
||||
<div class="about">
|
||||
<h1 v-if="name">{{ name }}</h1>
|
||||
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="%i18n:common.name%"></h1>
|
||||
<p class="powerd-by" v-if="name">%i18n:@powered-by-misskey%</p>
|
||||
<h1 v-if="name != 'Misskey'">{{ name }}</h1>
|
||||
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
|
||||
<p class="powerd-by" v-if="name != 'Misskey'">%i18n:@powered-by-misskey%</p>
|
||||
<p class="desc" v-html="description || '%i18n:common.about%'"></p>
|
||||
<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
|
||||
</div>
|
||||
@@ -32,7 +32,7 @@
|
||||
<mk-nav class="nav"/>
|
||||
</div>
|
||||
<mk-forkit class="forkit"/>
|
||||
<img src="assets/title.dark.svg" alt="%i18n:common.name%">
|
||||
<img src="assets/title.dark.svg" :alt="name">
|
||||
</div>
|
||||
<div class="tl">
|
||||
<mk-welcome-timeline :max="20"/>
|
||||
|
@@ -55,7 +55,7 @@ export default define({
|
||||
}).then(data => {
|
||||
this.clear();
|
||||
}).catch(err => {
|
||||
alert('失敗した');
|
||||
alert('Something happened');
|
||||
}).then(() => {
|
||||
this.posting = false;
|
||||
});
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<mk-ui>
|
||||
<p v-if="fetching">読み込み中</p>
|
||||
<p v-if="fetching">%i18n:common.loading%</p>
|
||||
<b-card v-if="!fetching" :header="app.name">
|
||||
<b-form-group label="App Secret">
|
||||
<b-input :value="app.secret" readonly/>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<mk-ui>
|
||||
<b-button to="/apps" variant="primary">アプリの管理</b-button>
|
||||
<b-button to="/apps" variant="primary">%i18n:@manage-apps%</b-button>
|
||||
</mk-ui>
|
||||
</template>
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-navbar toggleable="md" type="dark" variant="info">
|
||||
<b-navbar-brand>%i18n:common.name% Developers</b-navbar-brand>
|
||||
<b-navbar-brand>Developers</b-navbar-brand>
|
||||
<b-navbar-nav>
|
||||
<b-nav-item to="/">Home</b-nav-item>
|
||||
<b-nav-item to="/apps">Apps</b-nav-item>
|
||||
|
@@ -55,7 +55,7 @@ Vue.mixin({
|
||||
|
||||
console.info(`Misskey v${version} (${codename})`);
|
||||
console.info(
|
||||
'%cここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。',
|
||||
'%c%i18n:common.do-not-copy-paste%',
|
||||
'color: red; background: yellow; font-size: 16px; font-weight: bold;');
|
||||
|
||||
// BootTimer解除
|
||||
|
@@ -38,6 +38,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import getNoteSummary from '../../../../../misc/get-note-summary';
|
||||
import * as config from '../../../config';
|
||||
|
||||
const displayLimit = 30;
|
||||
|
||||
@@ -66,7 +67,7 @@ export default Vue.extend({
|
||||
const date = new Date(note.createdAt).getDate();
|
||||
const month = new Date(note.createdAt).getMonth() + 1;
|
||||
note._date = date;
|
||||
note._datetext = `${month}月 ${date}日`;
|
||||
note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return note;
|
||||
});
|
||||
}
|
||||
@@ -183,7 +184,7 @@ export default Vue.extend({
|
||||
|
||||
clearNotification() {
|
||||
this.unreadCount = 0;
|
||||
document.title = '%i18n:common.name%';
|
||||
document.title = config.name;
|
||||
},
|
||||
|
||||
onVisibilitychange() {
|
||||
|
@@ -42,7 +42,7 @@ export default Vue.extend({
|
||||
const date = new Date(notification.createdAt).getDate();
|
||||
const month = new Date(notification.createdAt).getMonth() + 1;
|
||||
notification._date = date;
|
||||
notification._datetext = `${month}月 ${date}日`;
|
||||
notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
|
||||
return notification;
|
||||
});
|
||||
}
|
||||
|
@@ -3,12 +3,12 @@
|
||||
<mk-special-message/>
|
||||
<div class="main" ref="main">
|
||||
<div class="backdrop"></div>
|
||||
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p>
|
||||
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
|
||||
<div class="content" ref="mainContainer">
|
||||
<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
|
||||
<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
|
||||
<h1>
|
||||
<slot>%i18n:common.name%</slot>
|
||||
<slot>config.name</slot>
|
||||
</h1>
|
||||
<slot name="func"></slot>
|
||||
</div>
|
||||
@@ -20,11 +20,13 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import * as anime from 'animejs';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
props: ['func'],
|
||||
data() {
|
||||
return {
|
||||
config,
|
||||
hasGameInvitation: false,
|
||||
connection: null,
|
||||
connectionId: null
|
||||
|
@@ -25,6 +25,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
@@ -43,7 +44,7 @@ export default Vue.extend({
|
||||
window.addEventListener('popstate', this.onPopState);
|
||||
},
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% Drive';
|
||||
document.title = `${config.name} Drive`;
|
||||
document.documentElement.style.background = '#fff';
|
||||
},
|
||||
beforeDestroy() {
|
||||
@@ -63,7 +64,7 @@ export default Vue.extend({
|
||||
(this.$refs as any).browser.openContextMenu();
|
||||
},
|
||||
onMoveRoot(silent) {
|
||||
const title = '%i18n:common.name% Drive';
|
||||
const title = `${config.name} Drive`;
|
||||
|
||||
if (!silent) {
|
||||
// Rewrite URL
|
||||
@@ -76,7 +77,7 @@ export default Vue.extend({
|
||||
this.folder = null;
|
||||
},
|
||||
onOpenFolder(folder, silent) {
|
||||
const title = folder.name + ' | %i18n:common.name% Drive';
|
||||
const title = `${folder.name} | ${config.name} Drive`;
|
||||
|
||||
if (!silent) {
|
||||
// Rewrite URL
|
||||
@@ -89,7 +90,7 @@ export default Vue.extend({
|
||||
this.folder = folder;
|
||||
},
|
||||
onOpenFile(file, silent) {
|
||||
const title = file.name + ' | %i18n:common.name% Drive';
|
||||
const title = `${file.name} | ${config.name} Drive`;
|
||||
|
||||
if (!silent) {
|
||||
// Rewrite URL
|
||||
|
@@ -14,6 +14,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
@@ -28,7 +29,7 @@ export default Vue.extend({
|
||||
this.fetch();
|
||||
},
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% | %i18n:@notifications%';
|
||||
document.title = `${config.name} | %i18n:@notifications%`;
|
||||
},
|
||||
methods: {
|
||||
fetch() {
|
||||
|
@@ -21,6 +21,7 @@ import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import parseAcct from '../../../../../misc/acct/parse';
|
||||
import getUserName from '../../../../../misc/get-user-name';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
@@ -49,7 +50,7 @@ export default Vue.extend({
|
||||
this.user = user;
|
||||
this.fetching = false;
|
||||
|
||||
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%';
|
||||
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name;
|
||||
});
|
||||
},
|
||||
onLoaded() {
|
||||
|
@@ -20,6 +20,7 @@
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import parseAcct from '../../../../../misc/acct/parse';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
@@ -48,7 +49,7 @@ export default Vue.extend({
|
||||
this.user = user;
|
||||
this.fetching = false;
|
||||
|
||||
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%';
|
||||
document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name;
|
||||
});
|
||||
},
|
||||
onLoaded() {
|
||||
|
@@ -7,10 +7,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import * as config from '../../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% %i18n:@reversi%';
|
||||
document.title = `${config.name} %i18n:@reversi%`;
|
||||
document.documentElement.style.background = '#fff';
|
||||
},
|
||||
methods: {
|
||||
|
@@ -49,6 +49,7 @@
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import XTl from './home.timeline.vue';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
components: {
|
||||
@@ -96,7 +97,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name%';
|
||||
document.title = config.name;
|
||||
|
||||
Progress.start();
|
||||
|
||||
|
@@ -11,6 +11,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import parseAcct from '../../../../../misc/acct/parse';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
@@ -47,7 +48,7 @@ export default Vue.extend({
|
||||
this.user = user;
|
||||
this.fetching = false;
|
||||
|
||||
document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | %i18n:common.name%`;
|
||||
document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | ${config.name}`;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -8,10 +8,11 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import getAcct from '../../../../../misc/acct/render';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% %i18n:@messaging%';
|
||||
document.title = `${config.name} %i18n:@messaging%`;
|
||||
},
|
||||
methods: {
|
||||
navigate(user) {
|
||||
|
@@ -16,6 +16,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
@@ -31,7 +32,7 @@ export default Vue.extend({
|
||||
this.fetch();
|
||||
},
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name%';
|
||||
document.title = config.name;
|
||||
},
|
||||
methods: {
|
||||
fetch() {
|
||||
|
@@ -15,7 +15,7 @@ import Progress from '../../../common/scripts/loading';
|
||||
|
||||
export default Vue.extend({
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% | %i18n:@notifications%';
|
||||
document.title = '%i18n:@notifications%';
|
||||
|
||||
Progress.start();
|
||||
},
|
||||
|
@@ -25,7 +25,7 @@ export default Vue.extend({
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% | %i18n:@title%';
|
||||
document.title = '%i18n:@title%';
|
||||
|
||||
Progress.start();
|
||||
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<span slot="header">%fa:search% {{ q }}</span>
|
||||
|
||||
<main>
|
||||
<p v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p>
|
||||
<p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:not-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:not-found%'.split('{}')[1] }}</p>
|
||||
<mk-notes ref="timeline" :more="existMore ? more : null"/>
|
||||
</main>
|
||||
</mk-ui>
|
||||
@@ -12,6 +12,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import * as config from '../../../config';
|
||||
|
||||
const limit = 20;
|
||||
|
||||
@@ -34,7 +35,7 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.title = `%i18n:@search%: ${this.q} | %i18n:common.name%`;
|
||||
document.title = `%i18n:@search%: ${this.q} | ${config.name}`;
|
||||
|
||||
this.fetch();
|
||||
},
|
||||
|
@@ -143,7 +143,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% | %i18n:@settings%';
|
||||
document.title = '%i18n:@settings%';
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
@@ -1,21 +1,23 @@
|
||||
<template>
|
||||
<div class="azibmfpleajagva420swmu4c3r7ni7iw">
|
||||
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1>
|
||||
<h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1>
|
||||
<div>
|
||||
<mk-signin v-if="!$store.getters.isSignedIn"/>
|
||||
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
|
||||
<p v-if="posted" class="posted">%fa:check%</p>
|
||||
</div>
|
||||
<ui-button class="close" v-if="posted" @click="close">閉じる</ui-button>
|
||||
<ui-button class="close" v-if="posted" @click="close">%i18n:common.close%</ui-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
data() {
|
||||
return {
|
||||
name: config.name,
|
||||
posted: false,
|
||||
text: new URLSearchParams(location.search).get('text')
|
||||
};
|
||||
|
@@ -23,7 +23,7 @@ export default Vue.extend({
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name% | %i18n:@title%';
|
||||
document.title = '%i18n:@title%';
|
||||
|
||||
Progress.start();
|
||||
|
||||
|
@@ -67,6 +67,7 @@ import * as age from 's-age';
|
||||
import parseAcct from '../../../../../misc/acct/parse';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import XHome from './user/home.vue';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
components: {
|
||||
@@ -106,7 +107,7 @@ export default Vue.extend({
|
||||
this.fetching = false;
|
||||
|
||||
Progress.done();
|
||||
document.title = Vue.filter('userName')(this.user) + ' | %i18n:common.name%';
|
||||
document.title = Vue.filter('userName')(this.user) + ' | ' + config.name;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div class="welcome">
|
||||
<div>
|
||||
<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="%i18n:common.name%">
|
||||
<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name">
|
||||
<p class="host">{{ host }}</p>
|
||||
<div class="about">
|
||||
<h2>{{ name || 'unidentified' }}</h2>
|
||||
<h2>{{ name }}</h2>
|
||||
<p v-html="description || '%i18n:common.about%'"></p>
|
||||
<router-link class="signup" to="/signup">%i18n:@signup%</router-link>
|
||||
</div>
|
||||
|
@@ -24,8 +24,8 @@
|
||||
<option value="nav">%i18n:common.widgets.nav%</option>
|
||||
<option value="tips">%i18n:common.widgets.tips%</option>
|
||||
</select>
|
||||
<button @click="addWidget">追加</button>
|
||||
<p><a @click="hint">カスタマイズのヒント</a></p>
|
||||
<button @click="addWidget">%i18n:add-widget%</button>
|
||||
<p><a @click="hint">%i18n:customization-tips%</a></p>
|
||||
</header>
|
||||
<x-draggable
|
||||
:list="widgets"
|
||||
@@ -53,6 +53,7 @@
|
||||
import Vue from 'vue';
|
||||
import * as XDraggable from 'vuedraggable';
|
||||
import * as uuid from 'uuid';
|
||||
import * as config from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
components: {
|
||||
@@ -102,7 +103,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
mounted() {
|
||||
document.title = '%i18n:common.name%';
|
||||
document.title = config.name;
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
@@ -47,6 +47,8 @@ export default function load() {
|
||||
if (config.localDriveCapacityMb == null) config.localDriveCapacityMb = 256;
|
||||
if (config.remoteDriveCapacityMb == null) config.remoteDriveCapacityMb = 8;
|
||||
|
||||
if (config.name == null) config.name = 'Misskey';
|
||||
|
||||
return Object.assign(config, mixin);
|
||||
}
|
||||
|
||||
|
@@ -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はクライアントエラーであり、それはつまり
|
||||
|
Reference in New Issue
Block a user