mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-05-13 07:05:29 +02:00
Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44ef60c8a2 | ||
|
|
bd68ff2cf3 | ||
|
|
0e8a592b26 | ||
|
|
d3b51bf94a | ||
|
|
cc137ee1cc | ||
|
|
c088482cef | ||
|
|
70e3febe0a | ||
|
|
f500cce293 | ||
|
|
c6b836b7be | ||
|
|
15485da1bb | ||
|
|
7195f55a44 | ||
|
|
176f8803eb | ||
|
|
5a3a925a3c | ||
|
|
29bfb9d19b | ||
|
|
86b0dfdd33 | ||
|
|
ab04f2fce0 | ||
|
|
be9f836b21 | ||
|
|
818bc96aab | ||
|
|
14d12c21f2 | ||
|
|
aa5250a37c | ||
|
|
2053a041e5 | ||
|
|
0534a0a41e | ||
|
|
d2f9a99beb | ||
|
|
9625047dc3 | ||
|
|
d6b18ce536 | ||
|
|
df00af1dfa | ||
|
|
3570ec0430 | ||
|
|
a111b014f8 | ||
|
|
50eebe834a | ||
|
|
f965e9f218 |
@@ -3,16 +3,21 @@ const User = require('../built/models/user').default;
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const userId = new mongo.ObjectID(args[0]);
|
||||
const user = args[0];
|
||||
|
||||
console.log(`Suspending ${userId}...`);
|
||||
const q = user.startsWith('@') ? {
|
||||
username: user.split('@')[1],
|
||||
host: user.split('@')[2] || null
|
||||
} : { _id: new mongo.ObjectID(user) };
|
||||
|
||||
User.update({ _id: userId }, {
|
||||
console.log(`Suspending ${user}...`);
|
||||
|
||||
User.update(q, {
|
||||
$set: {
|
||||
isSuspended: true
|
||||
}
|
||||
}).then(() => {
|
||||
console.log(`Suspended ${userId}`);
|
||||
console.log(`Suspended ${user}`);
|
||||
}, e => {
|
||||
console.error(e);
|
||||
});
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "Verbindung zum Server ist fehlgeschlagen"
|
||||
description: "Es gibt entweder ein Problem mit deiner Internetverbindung, der Server ist nicht erreichbar oder wird gerade gewartet. Bitte versuche es später noch einmal."
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "Move Right"
|
||||
remove: "Remove"
|
||||
add-column: "Add a column"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "Unable to connect to the server"
|
||||
description: "There is a problem either with your Internet connection, or the server may be down or under maintenance. Please {try again} later."
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
|
||||
463
locales/fr.yml
463
locales/fr.yml
@@ -3,8 +3,8 @@ meta:
|
||||
lang: "Français"
|
||||
divider: ""
|
||||
common:
|
||||
misskey: "A planet of fediverse"
|
||||
about-title: "A ⭐ of fediverse."
|
||||
misskey: "Une planète du fédiverse"
|
||||
about-title: "Une ⭐ du fédiverse."
|
||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||
time:
|
||||
unknown: "inconnu"
|
||||
@@ -38,48 +38,49 @@ common:
|
||||
note-placeholders:
|
||||
a: "今どうしてる?"
|
||||
b: "何かありましたか?"
|
||||
c: "何をお考えですか?"
|
||||
c: "Qu'avez-vous en tête ?"
|
||||
d: "言いたいことは?"
|
||||
e: "ここに書いてください"
|
||||
f: "あなたが書くのを待っています..."
|
||||
e: "Écrivez ici"
|
||||
f: "En attente de vos écrits"
|
||||
delete: "Supprimer"
|
||||
loading: "Chargement"
|
||||
ok: "OK"
|
||||
update-available: "Une nouvelle version de Misskey est disponible({newer}, version actuelle: {current}). Recharger la page pour appliquer la mise à jour."
|
||||
my-token-regenerated: "Votre token vient d'être généré, vous allez maintenant être déconnecté."
|
||||
widgets:
|
||||
analog-clock: "アナログ時計"
|
||||
profile: "プロフィール"
|
||||
calendar: "カレンダー"
|
||||
analog-clock: "Horloge analogique"
|
||||
profile: "Profil"
|
||||
calendar: "Calendrier"
|
||||
timemachine: "カレンダー(タイムマシン)"
|
||||
activity: "アクティビティ"
|
||||
rss: "RSSリーダー"
|
||||
memo: "メモ"
|
||||
trends: "トレンド"
|
||||
photo-stream: "フォトストリーム"
|
||||
slideshow: "スライドショー"
|
||||
version: "バージョン"
|
||||
broadcast: "ブロードキャスト"
|
||||
notifications: "通知"
|
||||
users: "おすすめユーザー"
|
||||
polls: "投票"
|
||||
activity: "Activité"
|
||||
rss: "Lecteur de flux RSS"
|
||||
memo: "Note"
|
||||
trends: "Tendances"
|
||||
photo-stream: "Flux de photos"
|
||||
slideshow: "Diaporama"
|
||||
version: "Version"
|
||||
broadcast: "Diffusion"
|
||||
notifications: "Notifications"
|
||||
users: "Utilisateurs"
|
||||
polls: "Sondages"
|
||||
post-form: "投稿フォーム"
|
||||
messaging: "メッセージ"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
messaging: "Messagerie"
|
||||
server: "Info sur le serveur"
|
||||
donation: "Dons"
|
||||
nav: "Navigation"
|
||||
tips: "Conseils"
|
||||
deck:
|
||||
widgets: "ウィジェット"
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
global: "グローバル"
|
||||
notifications: "通知"
|
||||
list: "リスト"
|
||||
swap-left: "左に移動"
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
widgets: "Widgets"
|
||||
home: "Accueil"
|
||||
local: "Local"
|
||||
global: "Global"
|
||||
notifications: "Notifications"
|
||||
list: "Liste"
|
||||
swap-left: "Déplacer à gauche"
|
||||
swap-right: "Déplacer à droite"
|
||||
remove: "Supprimer"
|
||||
add-column: "Ajouter une colonne"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "Impossible de se connecter au server."
|
||||
description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard."
|
||||
@@ -102,7 +103,7 @@ common/views/components/connect-failed.troubleshooter.vue:
|
||||
no-server-desc: "Votre connexion est OK, mais il a été impossible de vous connecter au serveur de Misskey. Il y a des chances que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
|
||||
success: "Connexion au serveur de Misskey reussie!"
|
||||
success-desc: "La connexion au serveur a été reussie. Veuillez recharger la page."
|
||||
flush: "キャッシュの削除"
|
||||
flush: "Vider le cache"
|
||||
set-version: "バージョン指定"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Trouver un utilisateur"
|
||||
@@ -130,12 +131,12 @@ common/views/components/nav.vue:
|
||||
donors: "Donateurs"
|
||||
repository: "Repo"
|
||||
develop: "Développeurs"
|
||||
feedback: "フィードバック"
|
||||
feedback: "Remarques"
|
||||
common/views/components/note-menu.vue:
|
||||
favorite: "Favorite this note"
|
||||
pin: "Épingler sur votre profile"
|
||||
delete: "削除"
|
||||
delete-confirm: "この投稿を削除しますか?"
|
||||
delete: "Supprimer"
|
||||
delete-confirm: "Supprimer cette publication ?"
|
||||
remote: "投稿元で見る"
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "Voter pour '{}'"
|
||||
@@ -196,14 +197,14 @@ common/views/components/twitter-setting.vue:
|
||||
common/views/components/uploader.vue:
|
||||
waiting: "En attente"
|
||||
common/views/components/visibility-chooser.vue:
|
||||
public: "公開"
|
||||
home: "ホーム"
|
||||
public: "Public"
|
||||
home: "Accueil"
|
||||
home-desc: "ホームタイムラインにのみ公開"
|
||||
followers: "フォロワー"
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
followers: "Abonnés"
|
||||
followers-desc: "Publier à vos abonnés uniquement"
|
||||
specified: "Direct"
|
||||
specified-desc: "Publier aux utilisateurs mentionnés"
|
||||
private: "Privé"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Récuperation"
|
||||
no-broadcasts: "No broadcasts"
|
||||
@@ -219,9 +220,9 @@ common/views/widgets/server.vue:
|
||||
title: "Info sur le serveur"
|
||||
toggle: "Afficher les vues"
|
||||
common/views/widgets/memo.vue:
|
||||
title: "メモ"
|
||||
memo: "ここに書いて!"
|
||||
save: "保存"
|
||||
title: "Note"
|
||||
memo: "Écrivez ici !"
|
||||
save: "Enregistrer"
|
||||
desktop/views/components/activity.chart.vue:
|
||||
total: "Black ... Total"
|
||||
notes: "Blue ... Notes"
|
||||
@@ -236,19 +237,19 @@ desktop/views/components/calendar.vue:
|
||||
next: "Mois prochain"
|
||||
go: "Cliquer pour naviguer"
|
||||
desktop/views/components/choose-file-from-drive-window.vue:
|
||||
choose-file: "ファイル選択中"
|
||||
upload: "PCからドライブにファイルをアップロード"
|
||||
cancel: "キャンセル"
|
||||
ok: "決定"
|
||||
choose-prompt: "ファイルを選択"
|
||||
choose-file: "Sélection de fichiers"
|
||||
upload: "Téléverser des fichiers à partir de votre PC"
|
||||
cancel: "Annuler"
|
||||
ok: "OK"
|
||||
choose-prompt: "Choisir un fichier"
|
||||
desktop/views/components/choose-folder-from-drive-window.vue:
|
||||
cancel: "キャンセル"
|
||||
ok: "決定"
|
||||
choose-prompt: "フォルダを選択"
|
||||
cancel: "Annuler"
|
||||
ok: "OK"
|
||||
choose-prompt: "Choisir un dossier"
|
||||
desktop/views/components/crop-window.vue:
|
||||
skip: "クロップをスキップ"
|
||||
cancel: "キャンセル"
|
||||
ok: "決定"
|
||||
skip: "Ignorer la découpe"
|
||||
cancel: "Annuler"
|
||||
ok: "OK"
|
||||
desktop/views/components/drive-window.vue:
|
||||
used: "utilisé"
|
||||
drive: "Drive"
|
||||
@@ -301,63 +302,63 @@ desktop/views/components/drive.vue:
|
||||
upload: "Uploader un fichier"
|
||||
url-upload: "Uploader d'un URL"
|
||||
desktop/views/components/follow-button.vue:
|
||||
following: "フォロー中"
|
||||
follow: "フォロー"
|
||||
following: "Abonnements"
|
||||
follow: "Suivre"
|
||||
request-pending: "フォロー許可待ち"
|
||||
follow-request: "フォロー申請"
|
||||
follow-request: "Demande d'abonnement"
|
||||
desktop/views/components/followers-window.vue:
|
||||
followers: "{} のフォロワー"
|
||||
followers: "{} abonnés"
|
||||
desktop/views/components/followers.vue:
|
||||
empty: "フォロワーはいないようです。"
|
||||
empty: "Il semble que vous n'avez pas encore d'abonnés."
|
||||
desktop/views/components/following-window.vue:
|
||||
following: "{} のフォロー"
|
||||
following: "Suit {}"
|
||||
desktop/views/components/following.vue:
|
||||
empty: "フォロー中のユーザーはいないようです。"
|
||||
empty: "Vous ne suivez aucun compte."
|
||||
desktop/views/components/friends-maker.vue:
|
||||
title: "気になるユーザーをフォロー:"
|
||||
title: "Utilisateurs recommandés :"
|
||||
empty: "おすすめのユーザーは見つかりませんでした。"
|
||||
fetching: "読み込んでいます"
|
||||
refresh: "もっと見る"
|
||||
close: "閉じる"
|
||||
fetching: "Chargement"
|
||||
refresh: "Plus"
|
||||
close: "Fermer"
|
||||
desktop/views/components/game-window.vue:
|
||||
game: "オセロ"
|
||||
game: "Othello"
|
||||
desktop/views/components/home.vue:
|
||||
done: "完了"
|
||||
add-widget: "ウィジェットを追加:"
|
||||
add: "追加"
|
||||
add-widget: "Ajouter un widget"
|
||||
add: "Ajouter"
|
||||
desktop/views/input-dialog.vue:
|
||||
cancel: "キャンセル"
|
||||
ok: "決定"
|
||||
cancel: "Annuler"
|
||||
ok: "OK"
|
||||
desktop/views/components/messaging-room-window.vue:
|
||||
title: "メッセージ:"
|
||||
title: "Messages :"
|
||||
desktop/views/components/messaging-window.vue:
|
||||
title: "Messagerie"
|
||||
desktop/views/components/note-detail.vue:
|
||||
more: "会話をもっと読み込む"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
more: "Charger davantage de conversations"
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
reposted-by: "{}がRenote"
|
||||
location: "位置情報"
|
||||
location: "Géolocalisation"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
add-reaction: "Ajouter votre reaction"
|
||||
desktop/views/components/notes.note.vue:
|
||||
reposted-by: "Reposté par {}"
|
||||
reply: "Répondre"
|
||||
renote: "Renote"
|
||||
add-reaction: "Ajouter votre reaction"
|
||||
detail: "Afficher les détails"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
desktop/views/components/notes.vue:
|
||||
error: "読み込みに失敗しました。"
|
||||
retry: "リトライ"
|
||||
error: "Échec du chargement."
|
||||
retry: "Réessayer"
|
||||
desktop/views/components/notifications.vue:
|
||||
more: "Plus"
|
||||
empty: "Pas de notifications"
|
||||
desktop/views/components/post-form.vue:
|
||||
reply-placeholder: "Répondre à cette note"
|
||||
quote-placeholder: "Citer cette note"
|
||||
submit: "投稿"
|
||||
submit: "Poster"
|
||||
reply: "Répondre"
|
||||
renote: "Renote"
|
||||
posted: "Posté!"
|
||||
@@ -379,7 +380,7 @@ desktop/views/components/post-form-window.vue:
|
||||
attaches: "{} media joint(s)"
|
||||
uploading-media: "Upload du media {}"
|
||||
desktop/views/components/progress-dialog.vue:
|
||||
waiting: "待機中"
|
||||
waiting: "En attente"
|
||||
desktop/views/components/renote-form.vue:
|
||||
quote: "Citer..."
|
||||
cancel: "Annuler"
|
||||
@@ -390,7 +391,7 @@ desktop/views/components/renote-form.vue:
|
||||
desktop/views/components/renote-form-window.vue:
|
||||
title: "Êtes vous sûr de vouloir renote cette note?"
|
||||
desktop/views/components/settings-window.vue:
|
||||
settings: "設定"
|
||||
settings: "Paramètres"
|
||||
desktop/views/components/settings.vue:
|
||||
profile: "Profil"
|
||||
notification: "Notification"
|
||||
@@ -403,66 +404,66 @@ desktop/views/components/settings.vue:
|
||||
2fa: "Vérification en deux étapes"
|
||||
other: "Autres"
|
||||
license: "License"
|
||||
behaviour: "動作"
|
||||
behaviour: "Comportement"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||
auto-popout: "ウィンドウの自動ポップアウト"
|
||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||
advanced: "詳細設定"
|
||||
advanced: "Paramètres avancés"
|
||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||
display: "デザインと表示"
|
||||
customize: "ホームをカスタマイズ"
|
||||
dark-mode: "ダークモード"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
customize: "Personnaliser l'Accueil"
|
||||
dark-mode: "Mode nuit"
|
||||
circle-icons: "Utiliser des icônes circulaires"
|
||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
show-maps: "Afficher la carte"
|
||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds: "Activer le son"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
mobile: "モバイル"
|
||||
volume: "Volume"
|
||||
test: "Test"
|
||||
mobile: "Mobile"
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language: "Langue"
|
||||
pick-language: "Sélectionner une langue"
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Spécifier la langue"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache: "Cache"
|
||||
clean-cache: "Nettoyage"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
about: "À propose de Misskey"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
update-checking: "アップデートを確認中"
|
||||
update: "Mise à jour de Misskey"
|
||||
version: "Version :"
|
||||
latest-version: "Dernière version :"
|
||||
update-checking: "Recherche de mises à jour"
|
||||
do-update: "アップデートを確認"
|
||||
update-settings: "詳細設定"
|
||||
update-settings: "Paramètres avancés"
|
||||
prevent-update: "アップデートを延期する(非推奨)"
|
||||
prevent-update-desc: "この設定をオンにしてもアップデートが反映される場合があります。この設定はこのデバイスのみ有効です。"
|
||||
no-updates: "利用可能な更新はありません"
|
||||
no-updates-desc: "お使いのMisskeyは最新です。"
|
||||
update-available: "新しいバージョンが利用可能です"
|
||||
no-updates: "Aucune mise à jour disponible"
|
||||
no-updates-desc: "Votre Misskey est à jour."
|
||||
update-available: "Nouvelle version disponible !"
|
||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||
advanced-settings: "高度な設定"
|
||||
advanced-settings: "Réglages avancés"
|
||||
debug-mode: "デバッグモードを有効にする"
|
||||
debug-mode-desc: "この設定はブラウザに記憶されます。"
|
||||
experimental: "実験的機能を有効にする"
|
||||
experimental-desc: "実験的機能を有効にするとMisskeyの動作が不安定になる可能性があります。この設定はブラウザに記憶されます。"
|
||||
tools: "ツール"
|
||||
task-manager: "タスクマネージャ"
|
||||
tools: "Outils"
|
||||
task-manager: "Gestionnaire de tâches"
|
||||
third-parties: "サードパーティ"
|
||||
desktop/views/components/settings.2fa.vue:
|
||||
intro: "Si vous configurez la vérication en deux étapes vous aurez non seulement besoin de votre mot de passe mais aussi un appareil déjà pré-enregistré(tel que votre smartphone) ce qui ameliora grandement la sécurité de votre compte."
|
||||
@@ -487,7 +488,7 @@ desktop/views/components/settings.api.vue:
|
||||
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
|
||||
regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。"
|
||||
regenerate-token: "Regenerer le token"
|
||||
token: "Token:"
|
||||
token: "Jeton :"
|
||||
enter-password: "Veuillez entrer le mot de passe"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
@@ -508,26 +509,26 @@ desktop/views/components/settings.profile.vue:
|
||||
description: "Description"
|
||||
birthday: "Date de naissance"
|
||||
save: "Mettre à jour le profil"
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-cat: "このアカウントはCatです"
|
||||
is-bot: "Ce compte est un Bot"
|
||||
is-cat: "Ce compte est un Chat"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "投票"
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
media-count: "{} médias attachés"
|
||||
poll: "Sondages"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
title: "Gestionnaire de tâches"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
global: "グローバル"
|
||||
list: "リスト"
|
||||
home: "Accueil"
|
||||
local: "Local"
|
||||
global: "Global"
|
||||
list: "Listes"
|
||||
desktop/views/components/ui.header.account.vue:
|
||||
profile: "Votre profil"
|
||||
drive: "Drive"
|
||||
favorites: "Favorites"
|
||||
lists: "リスト"
|
||||
follow-requests: "フォロー申請"
|
||||
lists: "Listes"
|
||||
follow-requests: "Demandes de suivi"
|
||||
customize: "Modifications"
|
||||
settings: "Réglages"
|
||||
signout: "Déconnexion"
|
||||
@@ -544,40 +545,40 @@ desktop/views/components/ui.header.post.vue:
|
||||
desktop/views/components/ui.header.search.vue:
|
||||
placeholder: "Chercher"
|
||||
desktop/views/components/received-follow-requests-window.vue:
|
||||
title: "フォロー申請"
|
||||
accept: "承認"
|
||||
reject: "拒否"
|
||||
title: "Demandes de suivi"
|
||||
accept: "Approuver"
|
||||
reject: "Refuser"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "リスト"
|
||||
create-list: "リストを作成"
|
||||
title: "Listes de l'utilisateur"
|
||||
create-list: "Créer une liste"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "投稿"
|
||||
notes: "Publications"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
followers: "Abonnés"
|
||||
desktop/views/components/users-list.vue:
|
||||
all: "すべて"
|
||||
iknow: "知り合い"
|
||||
load-more: "もっと"
|
||||
fetching: "読み込んでいます"
|
||||
all: "Tout"
|
||||
iknow: "Vous connaissez"
|
||||
load-more: "Afficher plus"
|
||||
fetching: "Chargement ..."
|
||||
desktop/views/components/users-list-item.vue:
|
||||
followed: "フォローされています"
|
||||
followed: "vous suit"
|
||||
desktop/views/components/window.vue:
|
||||
popout: "ポップアウト"
|
||||
close: "閉じる"
|
||||
close: "Fermer"
|
||||
desktop/views/pages/welcome.vue:
|
||||
about: "詳しく..."
|
||||
gotit: "わかった"
|
||||
signin: "ログイン"
|
||||
signup: "新規登録"
|
||||
signin-button: "やってる"
|
||||
about: "à propos"
|
||||
gotit: "J'ai compris !"
|
||||
signin: "Connexion"
|
||||
signup: "S'enregistrer"
|
||||
signin-button: "Se connecter"
|
||||
signup-button: "やる"
|
||||
timeline: "タイムライン"
|
||||
timeline: "Fil d'actualité"
|
||||
desktop/views/pages/drive.vue:
|
||||
title: "Misskey Drive"
|
||||
title: "Lecteur de Misskey"
|
||||
desktop/views/pages/favorites.vue:
|
||||
more: "さらに読み込む"
|
||||
more: "Plus de résultats"
|
||||
desktop/views/pages/home-customize.vue:
|
||||
title: "ホームのカスタマイズ"
|
||||
title: "Personnaliser l'Accueil"
|
||||
desktop/views/pages/note.vue:
|
||||
prev: "Note précédente"
|
||||
next: "Note suivante"
|
||||
@@ -587,9 +588,9 @@ desktop/views/pages/selectdrive.vue:
|
||||
cancel: "Annuler"
|
||||
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
|
||||
desktop/views/pages/user-list.users.vue:
|
||||
users: "ユーザー"
|
||||
add-user: "ユーザーを追加"
|
||||
username: "ユーザー名"
|
||||
users: "Utilisateurs"
|
||||
add-user: "Ajouter un utilisateur"
|
||||
username: "Nom d'utilisateur"
|
||||
desktop/views/pages/user/user.followers-you-know.vue:
|
||||
title: "Abonnés que vous connaissez"
|
||||
loading: "Chargement en cours"
|
||||
@@ -617,10 +618,10 @@ desktop/views/pages/user/user.profile.vue:
|
||||
muted: "Muting"
|
||||
unmute: "Enlever la sourdine"
|
||||
desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
default: "Publications"
|
||||
with-replies: "Publications et réponses"
|
||||
with-media: "Média"
|
||||
empty: "Cet utilisateur n'a rien posté encore."
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "Messagerie"
|
||||
desktop/views/widgets/notifications.vue:
|
||||
@@ -634,8 +635,8 @@ desktop/views/widgets/post-form.vue:
|
||||
title: "Post"
|
||||
note: "Post"
|
||||
desktop/views/widgets/profile.vue:
|
||||
update-banner: "クリックでバナー編集"
|
||||
update-avatar: "クリックでアバター編集"
|
||||
update-banner: "Cliquer pour éditer votre bannière"
|
||||
update-avatar: "Cliquer pour éditer votre avatar"
|
||||
desktop/views/widgets/trends.vue:
|
||||
title: "Tendances"
|
||||
refresh: "Afficher d'autres"
|
||||
@@ -655,13 +656,13 @@ mobile/views/components/drive.vue:
|
||||
folder-is-empty: "Ce dossier est vide"
|
||||
prompt: "何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
|
||||
deletion-alert: "ごめんなさい!フォルダの削除は未実装です...。"
|
||||
folder-name: "フォルダー名"
|
||||
folder-name: "Nom du dossier"
|
||||
root-rename-alert: "現在いる場所はルートで、フォルダではないため名前の変更はできません。名前を変更したいフォルダに移動してからやってください。"
|
||||
root-move-alert: "現在いる場所はルートで、フォルダではないため移動はできません。移動したいフォルダに移動してからやってください。"
|
||||
url-prompt: "アップロードしたいファイルのURL"
|
||||
uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。"
|
||||
mobile/views/components/drive-file-detail.vue:
|
||||
rename: "名前を変更"
|
||||
rename: "Renommer"
|
||||
mobile/views/components/drive-file-chooser.vue:
|
||||
select-file: "Choisissez un fichier"
|
||||
mobile/views/components/drive-folder-chooser.vue:
|
||||
@@ -676,43 +677,43 @@ mobile/views/components/follow-button.vue:
|
||||
following: "フォロー中"
|
||||
follow: "Suivre"
|
||||
request-pending: "フォロー許可待ち"
|
||||
follow-request: "フォロー申請"
|
||||
follow-request: "Demande d'abonnement"
|
||||
mobile/views/components/friends-maker.vue:
|
||||
title: "気になるユーザーをフォロー"
|
||||
empty: "おすすめのユーザーは見つかりませんでした。"
|
||||
fetching: "読み込んでいます"
|
||||
refresh: "もっと見る"
|
||||
close: "閉じる"
|
||||
fetching: "Chargement"
|
||||
refresh: "Voir plus"
|
||||
close: "Fermer"
|
||||
mobile/views/components/note.vue:
|
||||
reposted-by: "Renoté par {}"
|
||||
more: "もっと見る"
|
||||
less: "隠す"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
location: "位置情報"
|
||||
more: "Voir plus"
|
||||
less: "Masquer"
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
location: "Géolocalisation"
|
||||
mobile/views/components/note-detail.vue:
|
||||
reply: "Répondre"
|
||||
reaction: "Réaction"
|
||||
reposted-by: "{}がRenote"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
location: "位置情報"
|
||||
reposted-by: "Republié par {}"
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
location: "Lieu"
|
||||
mobile/views/components/note-preview.vue:
|
||||
admin: "admin"
|
||||
bot: "bot"
|
||||
cat: "cat"
|
||||
cat: "chat"
|
||||
mobile/views/components/note-sub.vue:
|
||||
admin: "admin"
|
||||
bot: "bot"
|
||||
cat: "cat"
|
||||
cat: "chat"
|
||||
mobile/views/components/notes.vue:
|
||||
failed: "読み込みに失敗しました。"
|
||||
retry: "リトライ"
|
||||
failed: "Échec du chargement."
|
||||
retry: "Réessayer"
|
||||
mobile/views/components/notifications.vue:
|
||||
more: "Plus"
|
||||
empty: "Pas de notifications"
|
||||
mobile/views/components/post-form.vue:
|
||||
add-visible-user: "ユーザーを追加"
|
||||
add-visible-user: "Ajouter un utilisateur"
|
||||
submit: "Poster"
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
@@ -753,9 +754,9 @@ mobile/views/components/users-list.vue:
|
||||
known: "Vous connaissez"
|
||||
load-more: "Afficher plus"
|
||||
mobile/views/pages/favorites.vue:
|
||||
title: "お気に入り"
|
||||
title: "Favoris"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "リスト"
|
||||
title: "Listes"
|
||||
enter-list-name: "リスト名を入力してください"
|
||||
mobile/views/pages/drive.vue:
|
||||
drive: "Drive"
|
||||
@@ -765,17 +766,17 @@ mobile/views/pages/followers.vue:
|
||||
mobile/views/pages/following.vue:
|
||||
following-of: "Abonnements de {}"
|
||||
mobile/views/pages/home.vue:
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
global: "グローバル"
|
||||
home: "Accueil"
|
||||
local: "Local"
|
||||
global: "Global"
|
||||
mobile/views/pages/messaging.vue:
|
||||
messaging: "Messagerie"
|
||||
mobile/views/pages/messaging-room.vue:
|
||||
messaging: "Messagerie"
|
||||
mobile/views/pages/received-follow-requests.vue:
|
||||
title: "フォロー申請"
|
||||
accept: "承認"
|
||||
reject: "拒否"
|
||||
title: "Demandes d'abonnement"
|
||||
accept: "Approuver"
|
||||
reject: "Refuser"
|
||||
mobile/views/pages/note.vue:
|
||||
title: "Post"
|
||||
prev: "Note précedante"
|
||||
@@ -784,19 +785,19 @@ mobile/views/pages/notifications.vue:
|
||||
notifications: "Notifications"
|
||||
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
|
||||
mobile/views/pages/settings/settings.profile.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
is-cat: "このアカウントはCatです"
|
||||
save: "保存"
|
||||
saved: "プロフィールを保存しました"
|
||||
uploading: "アップロード中"
|
||||
upload-failed: "アップロードに失敗しました"
|
||||
title: "Profil"
|
||||
name: "Nom"
|
||||
account: "Compte"
|
||||
location: "Lieu"
|
||||
description: "Description"
|
||||
birthday: "Date de naissance"
|
||||
avatar: "Avatar"
|
||||
banner: "Bannière"
|
||||
is-cat: "Ce compte est un Bot"
|
||||
save: "Mettre à jour le profil"
|
||||
saved: "Profil mis à jour avec succès"
|
||||
uploading: "En cours d'envoi"
|
||||
upload-failed: "Échec de l'envoi"
|
||||
mobile/views/pages/search.vue:
|
||||
search: "Chercher"
|
||||
empty: "Aucun message trouvé pour '{}' "
|
||||
@@ -804,39 +805,39 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Choisissez un fichier"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Connecté en tant que {}"
|
||||
lang: "言語"
|
||||
lang: "Langue"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
timeline: "タイムライン"
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Spécifier la langue"
|
||||
design: "Affichage et design"
|
||||
dark-mode: "Mode nuit"
|
||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||
circle-icons: "Utiliser des icônes circulaires"
|
||||
timeline: "Fil d'actualité"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||
show-my-renotes: "Afficher mes republications"
|
||||
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
|
||||
post-style: "投稿の表示スタイル"
|
||||
post-style-standard: "標準"
|
||||
post-style-smart: "スマート"
|
||||
behavior: "動作"
|
||||
post-style: "Style de la publication"
|
||||
post-style-standard: "Standard"
|
||||
post-style-smart: "Intelligent"
|
||||
behavior: "Comportement"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
update-checking: "アップデートを確認中"
|
||||
check-for-updates: "アップデートを確認"
|
||||
no-updates: "利用可能な更新はありません"
|
||||
no-updates-desc: "お使いのMisskeyは最新です。"
|
||||
update-available: "新しいバージョンが利用可能です"
|
||||
load-raw-images: "Afficher les photos jointes en haute qualité"
|
||||
load-remote-media: "Afficher les médias sur le serveur distant"
|
||||
twitter: "Intégration à Twitter"
|
||||
twitter-connect: "Se connecter à votre compte Twitter"
|
||||
twitter-reconnect: "Reconnecter"
|
||||
twitter-disconnect: "Déconnexion"
|
||||
update: "Mise à jour de Misskey"
|
||||
version: "Version :"
|
||||
latest-version: "Dernière version :"
|
||||
update-checking: "Recherche de mises à jour"
|
||||
check-for-updates: "Fréquence de vérification"
|
||||
no-updates: "Aucune mise à jour disponible"
|
||||
no-updates-desc: "Votre Misskey est à jour."
|
||||
update-available: "Nouvelle version disponible !"
|
||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||
settings: "Réglages"
|
||||
signout: "Déconnexion"
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
|
||||
@@ -87,6 +87,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
|
||||
@@ -70,16 +70,17 @@ common:
|
||||
nav: "Nawigacja"
|
||||
tips: "Wskazówki"
|
||||
deck:
|
||||
widgets: "ウィジェット"
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
global: "グローバル"
|
||||
notifications: "通知"
|
||||
list: "リスト"
|
||||
swap-left: "左に移動"
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
widgets: "Widżety"
|
||||
home: "Strona główna"
|
||||
local: "Lokalne"
|
||||
global: "Globalne"
|
||||
notifications: "Powiadomienia"
|
||||
list: "Listy"
|
||||
swap-left: "Przesuń w lewo"
|
||||
swap-right: "Przesuń w prawo"
|
||||
remove: "Usuń"
|
||||
add-column: "Dodaj kolumnę"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "Nie udało się połączyć z serwerem"
|
||||
description: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce."
|
||||
@@ -301,7 +302,7 @@ desktop/views/components/drive.vue:
|
||||
upload: "Wyślij plik"
|
||||
url-upload: "Wyślij z adresu URL"
|
||||
desktop/views/components/follow-button.vue:
|
||||
following: "フォロー中"
|
||||
following: "Śledzisz"
|
||||
follow: "Śledź"
|
||||
request-pending: "Oczekiwanie na pozwolenie"
|
||||
follow-request: "Poproś o śledzenie"
|
||||
@@ -673,7 +674,7 @@ mobile/views/components/drive.file-detail.vue:
|
||||
hash: "Hash (md5)"
|
||||
exif: "EXIF"
|
||||
mobile/views/components/follow-button.vue:
|
||||
following: "フォロー中"
|
||||
following: "Śledzisz"
|
||||
follow: "Śledź"
|
||||
request-pending: "Oczekiwanie na pozwolenie"
|
||||
follow-request: "Poproś o śledzenie"
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
|
||||
@@ -80,6 +80,7 @@ common:
|
||||
swap-right: "右に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "サーバーに接続できません"
|
||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "2.27.3",
|
||||
"clientVersion": "1.0.6188",
|
||||
"version": "2.29.1",
|
||||
"clientVersion": "1.0.6218",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
|
||||
@@ -59,7 +59,7 @@ export default Vue.extend({
|
||||
created() {
|
||||
if (this.mode == 'relative' || this.mode == 'detail') {
|
||||
this.tick();
|
||||
this.tickId = setInterval(this.tick, 1000);
|
||||
this.tickId = setInterval(this.tick, 5000);
|
||||
}
|
||||
},
|
||||
destroyed() {
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
<button class="ui button" @click="customizeHome" style="margin-bottom: 16px">%i18n:@customize%</button>
|
||||
</div>
|
||||
<div class="div">
|
||||
<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
|
||||
<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
|
||||
<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
|
||||
<mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/>
|
||||
<mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/>
|
||||
@@ -293,6 +295,20 @@ export default Vue.extend({
|
||||
this.$router.push('/i/customize-home');
|
||||
this.$emit('done');
|
||||
},
|
||||
updateWallpaper() {
|
||||
(this as any).apis.chooseDriveFile({
|
||||
multiple: false
|
||||
}).then(file => {
|
||||
(this as any).api('i/update', {
|
||||
wallpaperId: file.id
|
||||
});
|
||||
});
|
||||
},
|
||||
deleteWallpaper() {
|
||||
(this as any).api('i/update', {
|
||||
wallpaperId: null
|
||||
});
|
||||
},
|
||||
onChangeFetchOnScroll(v) {
|
||||
this.$store.dispatch('settings/set', {
|
||||
key: 'fetchOnScroll',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="mk-ui">
|
||||
<div class="mk-ui" :style="style">
|
||||
<x-header class="header"/>
|
||||
<div class="content">
|
||||
<slot></slot>
|
||||
@@ -16,6 +16,15 @@ export default Vue.extend({
|
||||
components: {
|
||||
XHeader
|
||||
},
|
||||
computed: {
|
||||
style(): any {
|
||||
if (!this.$store.getters.isSignedIn || this.$store.state.i.wallpaperUrl == null) return {};
|
||||
return {
|
||||
backgroundColor: this.$store.state.i.wallpaperColor && this.$store.state.i.wallpaperColor.length == 3 ? `rgb(${ this.$store.state.i.wallpaperColor.join(',') })` : null,
|
||||
backgroundImage: `url(${ this.$store.state.i.wallpaperUrl })`
|
||||
};
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.addEventListener('keydown', this.onKeydown);
|
||||
},
|
||||
@@ -40,6 +49,9 @@ export default Vue.extend({
|
||||
display flex
|
||||
flex-direction column
|
||||
flex 1
|
||||
background-size cover
|
||||
background-position center
|
||||
background-attachment fixed
|
||||
|
||||
> .header
|
||||
@media (max-width 1000px)
|
||||
|
||||
@@ -20,6 +20,10 @@ export default Vue.extend({
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
menu: {
|
||||
type: Array,
|
||||
required: false
|
||||
@@ -75,6 +79,17 @@ export default Vue.extend({
|
||||
|
||||
showMenu() {
|
||||
const items = [{
|
||||
content: '%fa:pencil-alt% %i18n:common.deck.rename%',
|
||||
onClick: () => {
|
||||
(this as any).apis.input({
|
||||
title: '%i18n:common.deck.rename%',
|
||||
default: this.name,
|
||||
allowEmpty: false
|
||||
}).then(name => {
|
||||
this.$store.dispatch('settings/renameDeckColumn', { id: this.id, name });
|
||||
});
|
||||
}
|
||||
}, null, {
|
||||
content: '%fa:arrow-left% %i18n:common.deck.swap-left%',
|
||||
onClick: () => {
|
||||
this.$store.dispatch('settings/swapLeftDeckColumn', this.id);
|
||||
@@ -84,7 +99,7 @@ export default Vue.extend({
|
||||
onClick: () => {
|
||||
this.$store.dispatch('settings/swapRightDeckColumn', this.id);
|
||||
}
|
||||
}, {
|
||||
}, null, {
|
||||
content: '%fa:trash-alt R% %i18n:common.deck.remove%',
|
||||
onClick: () => {
|
||||
this.$store.dispatch('settings/removeDeckColumn', this.id);
|
||||
@@ -112,9 +127,7 @@ export default Vue.extend({
|
||||
root(isDark)
|
||||
$header-height = 42px
|
||||
|
||||
flex 1
|
||||
min-width 330px
|
||||
max-width 330px
|
||||
width 330px
|
||||
height 100%
|
||||
background isDark ? #282C37 : #fff
|
||||
border-radius 6px
|
||||
@@ -122,8 +135,7 @@ root(isDark)
|
||||
overflow hidden
|
||||
|
||||
&.narrow
|
||||
min-width 285px
|
||||
max-width 285px
|
||||
width 285px
|
||||
|
||||
&.naked
|
||||
background rgba(#000, isDark ? 0.25 : 0.1)
|
||||
@@ -140,6 +152,7 @@ root(isDark)
|
||||
z-index 1
|
||||
line-height $header-height
|
||||
padding 0 16px
|
||||
font-size 14px
|
||||
color isDark ? #e3e5e8 : #888
|
||||
background isDark ? #313543 : #fff
|
||||
box-shadow 0 1px rgba(#000, 0.15)
|
||||
|
||||
@@ -18,6 +18,11 @@ export default Vue.extend({
|
||||
list: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
mediaOnly: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
|
||||
@@ -30,6 +35,12 @@ export default Vue.extend({
|
||||
};
|
||||
},
|
||||
|
||||
watch: {
|
||||
mediaOnly() {
|
||||
this.fetch();
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
if (this.connection) this.connection.close();
|
||||
this.connection = new UserListStream((this as any).os, this.$store.state.i, this.list.id);
|
||||
@@ -52,6 +63,7 @@ export default Vue.extend({
|
||||
(this as any).api('notes/user-list-timeline', {
|
||||
listId: this.list.id,
|
||||
limit: fetchLimit + 1,
|
||||
mediaOnly: this.mediaOnly,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
}).then(notes => {
|
||||
@@ -72,6 +84,7 @@ export default Vue.extend({
|
||||
listId: this.list.id,
|
||||
limit: fetchLimit + 1,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
mediaOnly: this.mediaOnly,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
});
|
||||
@@ -89,6 +102,8 @@ export default Vue.extend({
|
||||
return promise;
|
||||
},
|
||||
onNote(note) {
|
||||
if (this.mediaOnly && note.media.length == 0) return;
|
||||
|
||||
// Prepend a note
|
||||
(this.$refs.timeline as any).prepend(note);
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<x-column :id="id">
|
||||
<span slot="header">%fa:bell R%%i18n:common.deck.notifications%</span>
|
||||
<x-column :id="column.id" :name="name">
|
||||
<span slot="header">%fa:bell R%{{ name }}</span>
|
||||
|
||||
<x-notifications/>
|
||||
</x-column>
|
||||
@@ -20,10 +20,17 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
props: {
|
||||
id: {
|
||||
type: String,
|
||||
column: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
name(): string {
|
||||
if (this.column.name) return this.column.name;
|
||||
return '%i18n:common.deck.notifications%';
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
<template>
|
||||
<div>
|
||||
<x-column :id="column.id">
|
||||
<x-column :id="column.id" :menu="menu" :name="name">
|
||||
<span slot="header">
|
||||
<template v-if="column.type == 'home'">%fa:home%%i18n:common.deck.home%</template>
|
||||
<template v-if="column.type == 'local'">%fa:R comments%%i18n:common.deck.local%</template>
|
||||
<template v-if="column.type == 'global'">%fa:globe%%i18n:common.deck.global%</template>
|
||||
<template v-if="column.type == 'list'">%fa:list%{{ column.list.title }}</template>
|
||||
<template v-if="column.type == 'home'">%fa:home%</template>
|
||||
<template v-if="column.type == 'local'">%fa:R comments%</template>
|
||||
<template v-if="column.type == 'global'">%fa:globe%</template>
|
||||
<template v-if="column.type == 'list'">%fa:list%</template>
|
||||
<span>{{ name }}</span>
|
||||
</span>
|
||||
|
||||
<x-list-tl v-if="column.type == 'list'" :list="column.list"/>
|
||||
<x-tl v-else :src="column.type"/>
|
||||
<div class="editor" v-if="edit">
|
||||
<mk-switch v-model="column.isMediaOnly" @change="onChangeSettings" text="%i18n:@is-media-only%"/>
|
||||
<mk-switch v-model="column.isMediaView" @change="onChangeSettings" text="%i18n:@is-media-view%"/>
|
||||
</div>
|
||||
<x-list-tl v-if="column.type == 'list'" :list="column.list" :media-only="column.isMediaOnly"/>
|
||||
<x-tl v-else :src="column.type" :media-only="column.isMediaOnly"/>
|
||||
</x-column>
|
||||
</div>
|
||||
</template>
|
||||
@@ -32,6 +37,37 @@ export default Vue.extend({
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
edit: false,
|
||||
menu: [{
|
||||
content: '%fa:cog% %i18n:@edit%',
|
||||
onClick: () => {
|
||||
this.edit = !this.edit;
|
||||
}
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
name(): string {
|
||||
if (this.column.name) return this.column.name;
|
||||
|
||||
switch (this.column.type) {
|
||||
case 'home': return '%i18n:common.deck.home%';
|
||||
case 'local': return '%i18n:common.deck.local%';
|
||||
case 'global': return '%i18n:common.deck.global%';
|
||||
case 'list': return this.column.list.title;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
onChangeSettings(v) {
|
||||
this.$store.dispatch('settings/saveDeck');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -18,6 +18,11 @@ export default Vue.extend({
|
||||
type: String,
|
||||
required: false,
|
||||
default: 'home'
|
||||
},
|
||||
mediaOnly: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
|
||||
@@ -31,6 +36,12 @@ export default Vue.extend({
|
||||
};
|
||||
},
|
||||
|
||||
watch: {
|
||||
mediaOnly() {
|
||||
this.fetch();
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
stream(): any {
|
||||
return this.src == 'home'
|
||||
@@ -78,6 +89,7 @@ export default Vue.extend({
|
||||
(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
|
||||
(this as any).api(this.endpoint, {
|
||||
limit: fetchLimit + 1,
|
||||
mediaOnly: this.mediaOnly,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
}).then(notes => {
|
||||
@@ -97,6 +109,7 @@ export default Vue.extend({
|
||||
|
||||
const promise = (this as any).api(this.endpoint, {
|
||||
limit: fetchLimit + 1,
|
||||
mediaOnly: this.mediaOnly,
|
||||
untilId: (this.$refs.timeline as any).tail().id,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
|
||||
@@ -116,6 +129,8 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
onNote(note) {
|
||||
if (this.mediaOnly && note.media.length == 0) return;
|
||||
|
||||
// Prepend a note
|
||||
(this.$refs.timeline as any).prepend(note);
|
||||
},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="qlvquzbjribqcaozciifydkngcwtyzje" :data-darkmode="$store.state.device.darkmode">
|
||||
<template v-for="column in columns">
|
||||
<x-widgets-column v-if="column.type == 'widgets'" :key="column.id" :column="column"/>
|
||||
<x-notifications-column v-if="column.type == 'notifications'" :key="column.id" :id="column.id"/>
|
||||
<x-notifications-column v-if="column.type == 'notifications'" :key="column.id" :column="column"/>
|
||||
<x-tl-column v-if="column.type == 'home'" :key="column.id" :column="column"/>
|
||||
<x-tl-column v-if="column.type == 'local'" :key="column.id" :column="column"/>
|
||||
<x-tl-column v-if="column.type == 'global'" :key="column.id" :column="column"/>
|
||||
@@ -150,7 +150,6 @@ export default Vue.extend({
|
||||
root(isDark)
|
||||
display flex
|
||||
flex 1
|
||||
justify-content center
|
||||
padding 16px 0 16px 16px
|
||||
overflow auto
|
||||
|
||||
@@ -160,6 +159,13 @@ root(isDark)
|
||||
&:last-of-type
|
||||
margin-right 0
|
||||
|
||||
> *
|
||||
&:first-child
|
||||
margin-left auto
|
||||
|
||||
&:last-child
|
||||
margin-right auto
|
||||
|
||||
> button
|
||||
padding 0 16px
|
||||
color isDark ? #93a0a5 : #888
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="wtdtxvecapixsepjtcupubtsmometobz">
|
||||
<x-column :id="column.id" :menu="menu" :naked="true" :narrow="true">
|
||||
<span slot="header">%fa:calculator%%i18n:common.deck.widgets%</span>
|
||||
<x-column :id="column.id" :menu="menu" :naked="true" :narrow="true" :name="name">
|
||||
<span slot="header">%fa:calculator%{{ name }}</span>
|
||||
|
||||
<div class="gqpwvtwtprsbmnssnbicggtwqhmylhnq">
|
||||
<template v-if="edit">
|
||||
@@ -81,6 +81,13 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
name(): string {
|
||||
if (this.column.name) return this.column.name;
|
||||
return '%i18n:common.deck.widgets%';
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
this.menu = [{
|
||||
content: '%fa:cog% %i18n:@edit%',
|
||||
|
||||
@@ -222,6 +222,12 @@ export default (os: MiOS) => new Vuex.Store({
|
||||
const column = state.deck.columns.find(c => c.id == x.id);
|
||||
if (column == null) return;
|
||||
column.widgets = column.widgets.filter(w => w.id != x.widget.id);
|
||||
},
|
||||
|
||||
renameDeckColumn(state, x) {
|
||||
const column = state.deck.columns.find(c => c.id == x.id);
|
||||
if (column == null) return;
|
||||
column.name = x.name;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -281,6 +287,11 @@ export default (os: MiOS) => new Vuex.Store({
|
||||
ctx.dispatch('saveDeck');
|
||||
},
|
||||
|
||||
renameDeckColumn(ctx, x) {
|
||||
ctx.commit('renameDeckColumn', x);
|
||||
ctx.dispatch('saveDeck');
|
||||
},
|
||||
|
||||
addHomeWidget(ctx, widget) {
|
||||
ctx.commit('addHomeWidget', widget);
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ type IUserBase = {
|
||||
usernameLower: string;
|
||||
avatarId: mongo.ObjectID;
|
||||
bannerId: mongo.ObjectID;
|
||||
wallpaperId: mongo.ObjectID;
|
||||
data: any;
|
||||
description: string;
|
||||
pinnedNoteId: mongo.ObjectID;
|
||||
@@ -412,6 +413,10 @@ export const pack = (
|
||||
? `${config.drive_url}/${_user.bannerId}`
|
||||
: null;
|
||||
|
||||
_user.wallpaperUrl = _user.wallpaperId != null
|
||||
? `${config.drive_url}/${_user.wallpaperId}`
|
||||
: null;
|
||||
|
||||
if (!meId || !meId.equals(_user.id) || !opts.detail) {
|
||||
delete _user.avatarId;
|
||||
delete _user.bannerId;
|
||||
|
||||
@@ -45,6 +45,11 @@ module.exports = async (params, user, app) => new Promise(async (res, rej) => {
|
||||
if (bannerIdErr) return rej('invalid bannerId param');
|
||||
if (bannerId !== undefined) updates.bannerId = bannerId;
|
||||
|
||||
// Get 'wallpaperId' parameter
|
||||
const [wallpaperId, wallpaperIdErr] = $.type(ID).optional().nullable().get(params.wallpaperId);
|
||||
if (wallpaperIdErr) return rej('invalid wallpaperId param');
|
||||
if (wallpaperId !== undefined) updates.wallpaperId = wallpaperId;
|
||||
|
||||
// Get 'isLocked' parameter
|
||||
const [isLocked, isLockedErr] = $.bool.optional().get(params.isLocked);
|
||||
if (isLockedErr) return rej('invalid isLocked param');
|
||||
@@ -85,6 +90,16 @@ module.exports = async (params, user, app) => new Promise(async (res, rej) => {
|
||||
}
|
||||
}
|
||||
|
||||
if (wallpaperId) {
|
||||
const wallpaper = await DriveFile.findOne({
|
||||
_id: wallpaperId
|
||||
});
|
||||
|
||||
if (wallpaper != null && wallpaper.metadata.properties.avgColor) {
|
||||
updates.wallpaperColor = wallpaper.metadata.properties.avgColor;
|
||||
}
|
||||
}
|
||||
|
||||
await User.update(user._id, {
|
||||
$set: updates
|
||||
});
|
||||
|
||||
@@ -35,6 +35,10 @@ module.exports = async (params, user) => {
|
||||
throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
|
||||
}
|
||||
|
||||
// Get 'mediaOnly' parameter
|
||||
const [mediaOnly, mediaOnlyErr] = $.bool.optional().get(params.mediaOnly);
|
||||
if (mediaOnlyErr) throw 'invalid mediaOnly param';
|
||||
|
||||
// ミュートしているユーザーを取得
|
||||
const mutedUserIds = user ? (await Mute.find({
|
||||
muterId: user._id
|
||||
@@ -64,6 +68,10 @@ module.exports = async (params, user) => {
|
||||
};
|
||||
}
|
||||
|
||||
if (mediaOnly) {
|
||||
query.mediaIds = { $exists: true, $ne: [] };
|
||||
}
|
||||
|
||||
if (sinceId) {
|
||||
sort._id = 1;
|
||||
query._id = {
|
||||
|
||||
@@ -35,6 +35,10 @@ module.exports = async (params, user) => {
|
||||
throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
|
||||
}
|
||||
|
||||
// Get 'mediaOnly' parameter
|
||||
const [mediaOnly, mediaOnlyErr] = $.bool.optional().get(params.mediaOnly);
|
||||
if (mediaOnlyErr) throw 'invalid mediaOnly param';
|
||||
|
||||
// ミュートしているユーザーを取得
|
||||
const mutedUserIds = user ? (await Mute.find({
|
||||
muterId: user._id
|
||||
@@ -67,6 +71,10 @@ module.exports = async (params, user) => {
|
||||
};
|
||||
}
|
||||
|
||||
if (mediaOnly) {
|
||||
query.mediaIds = { $exists: true, $ne: [] };
|
||||
}
|
||||
|
||||
if (sinceId) {
|
||||
sort._id = 1;
|
||||
query._id = {
|
||||
|
||||
@@ -44,6 +44,10 @@ module.exports = async (params, user, app) => {
|
||||
const [includeRenotedMyNotes = true, includeRenotedMyNotesErr] = $.bool.optional().get(params.includeRenotedMyNotes);
|
||||
if (includeRenotedMyNotesErr) throw 'invalid includeRenotedMyNotes param';
|
||||
|
||||
// Get 'mediaOnly' parameter
|
||||
const [mediaOnly, mediaOnlyErr] = $.bool.optional().get(params.mediaOnly);
|
||||
if (mediaOnlyErr) throw 'invalid mediaOnly param';
|
||||
|
||||
const [followings, mutedUserIds] = await Promise.all([
|
||||
// フォローを取得
|
||||
// Fetch following
|
||||
@@ -137,6 +141,12 @@ module.exports = async (params, user, app) => {
|
||||
});
|
||||
}
|
||||
|
||||
if (mediaOnly) {
|
||||
query.$and.push({
|
||||
mediaIds: { $exists: true, $ne: [] }
|
||||
});
|
||||
}
|
||||
|
||||
if (sinceId) {
|
||||
sort._id = 1;
|
||||
query._id = {
|
||||
|
||||
@@ -44,6 +44,10 @@ module.exports = async (params, user, app) => {
|
||||
const [includeRenotedMyNotes = true, includeRenotedMyNotesErr] = $.bool.optional().get(params.includeRenotedMyNotes);
|
||||
if (includeRenotedMyNotesErr) throw 'invalid includeRenotedMyNotes param';
|
||||
|
||||
// Get 'mediaOnly' parameter
|
||||
const [mediaOnly, mediaOnlyErr] = $.bool.optional().get(params.mediaOnly);
|
||||
if (mediaOnlyErr) throw 'invalid mediaOnly param';
|
||||
|
||||
// Get 'listId' parameter
|
||||
const [listId, listIdErr] = $.type(ID).get(params.listId);
|
||||
if (listIdErr) throw 'invalid listId param';
|
||||
@@ -146,6 +150,12 @@ module.exports = async (params, user, app) => {
|
||||
});
|
||||
}
|
||||
|
||||
if (mediaOnly) {
|
||||
query.$and.push({
|
||||
mediaIds: { $exists: true, $ne: [] }
|
||||
});
|
||||
}
|
||||
|
||||
if (sinceId) {
|
||||
sort._id = 1;
|
||||
query._id = {
|
||||
|
||||
Reference in New Issue
Block a user