diff --git a/.eslintrc b/.eslintrc index 7a74d6ef9b..0943cb4b64 100644 --- a/.eslintrc +++ b/.eslintrc @@ -14,6 +14,7 @@ "vue/no-unused-vars": false, "vue/attributes-order": false, "vue/require-prop-types": false, + "vue/require-default-prop": false, "no-console": 0, "no-unused-vars": 0, "no-empty": 0 diff --git a/.gitignore b/.gitignore index 2568aa11c2..53808240b7 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,4 @@ npm-debug.log run.bat api-docs.json package-lock.json -version.json yarn.lock diff --git a/README.md b/README.md index e8130e6513..a44c7e16ee 100644 --- a/README.md +++ b/README.md @@ -14,15 +14,18 @@ **[Misskey](https://misskey.xyz)** is a completely open source, ultimately sophisticated new type of mini-blog based SNS. +Become a Patron! + :sparkles: Features ---------------------------------------------------------------- -* Automatically updated timeline * Reactions +* User lists * Private messages -* ServiceWorker support +* Mute +* Real time contents * ActivityPub compatible -and more! You can touch with your own eyes at https://misskey.xyz/. +and more! You can touch with your own eyes at [misskey.xyz](https://misskey.xyz). :package: Create your instance ---------------------------------------------------------------- @@ -33,27 +36,27 @@ please see [Setup and installation guide](./docs/setup.en.md). ---------------------------------------------------------------- **[PR](https://github.com/syuilo/misskey/pulls)s welcome!** -If you want to translate Misskey, please see [Translation guide](./docs/translate.en.md). +If you want to... +* i18n ... please see [Translation guide](./docs/translate.en.md). +* l10n ... please visit https://crowdin.com/project/misskey :heart: Backers & Sponsors ---------------------------------------------------------------- [![Backers][backers-image]][support-url] [![Sponsors][sponsors-image]][support-url] -Become a Patron! - :mortar_board: Notable contributors ---------------------------------------------------------------- -| ![syuilo][syuilo-icon] | ![Morisawa Aya][ayamorisawa-icon] | ![otofune][otofune-icon] | ![akihikodaki][akihikodaki-icon] | ![rinsuki][rinsuki-icon] | -|:-:|:-:|:-:|:-:|:-:| -| [syuilo][syuilo-link]
Owner | [Aya Morisawa][ayamorisawa-link]
Collaborator | [otofune][otofune-link]
Collaborator | [akihikodaki][akihikodaki-link] | [rinsuki][rinsuki-link] | +| ![syuilo][syuilo-icon] | ![Morisawa Aya][ayamorisawa-icon] | ![otofune][otofune-icon] | ![akihikodaki][akihikodaki-icon] | ![tamaina][tamaina-icon] | ![rinsuki][rinsuki-icon] | +|:-:|:-:|:-:|:-:|:-:|:-:| +| [syuilo][syuilo-link]
Owner | [Aya Morisawa][ayamorisawa-link]
Collaborator | [otofune][otofune-link]
Collaborator | [akihikodaki][akihikodaki-link] | [tamaina][tamaina-link] | [rinsuki][rinsuki-link] | [List of all contributors](https://github.com/syuilo/misskey/graphs/contributors) ### :earth_americas: Translators -| ![][mirro-san-icon] | ![][Conan-kun-icon] | -|:-:|:-:| -| [Mirro][mirro-san-link]
English, French | [Asriel][Conan-kun-link]
English, French | +| ![][mirro-san-icon] | ![][Conan-kun-icon] | ![][m4sk1n-icon] | +|:-:|:-:|:-:| +| [Mirro][mirro-san-link]
English, French | [Asriel][Conan-kun-link]
English, French | [Marcin Mikołajczak][m4sk1n-link]
Polish | :four_leaf_clover: Copyright ---------------------------------------------------------------- @@ -92,9 +95,12 @@ Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE). [akihikodaki-icon]: https://avatars2.githubusercontent.com/u/17036990?s=70&v=4 [rinsuki-link]: https://github.com/rinsuki [rinsuki-icon]: https://avatars0.githubusercontent.com/u/6533808?s=70&v=4 +[tamaina-link]: https://github.com/tamaina +[tamaina-icon]: https://avatars1.githubusercontent.com/u/7973572?s=70&v=4 [mirro-san-link]: https://github.com/mirro-san [mirro-san-icon]: https://avatars1.githubusercontent.com/u/17948612?s=70&v=4 [Conan-kun-link]: https://github.com/Conan-kun [Conan-kun-icon]: https://avatars3.githubusercontent.com/u/30003708?s=70&v=4 - +[m4sk1n-link]: https://github.com/m4sk1n +[m4sk1n-icon]: https://avatars3.githubusercontent.com/u/21127288?s=70&v=4 diff --git a/cli/clean-cached-remote-files.js b/cli/clean-cached-remote-files.js new file mode 100644 index 0000000000..e4db37ef97 --- /dev/null +++ b/cli/clean-cached-remote-files.js @@ -0,0 +1,101 @@ +const chalk = require('chalk'); +const log = require('single-line-log').stdout; +const sequential = require('promise-sequential'); +const { default: DriveFile, DriveFileChunk } = require('../built/models/drive-file'); +const { default: DriveFileThumbnail, DriveFileThumbnailChunk } = require('../built/models/drive-file-thumbnail'); +const { default: User } = require('../built/models/user'); + +const q = { + 'metadata._user.host': { + $ne: null + } +}; + +async function main() { + const promiseGens = []; + + const count = await DriveFile.count(q); + + let prev; + + for (let i = 0; i < count; i++) { + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const file = await DriveFile.findOne(prev ? Object.assign({ + _id: { $lt: prev._id } + }, q) : q, { + sort: { + _id: -1 + } + }); + + prev = file; + + function skip() { + res([i, file, false]); + } + + if (file == null) return skip(); + + log(chalk`{gray ${i}} scanning {bold ${file._id}} ${file.filename} ...`); + + const attachingUsersCount = await User.count({ + $or: [{ + avatarId: file._id + }, { + bannerId: file._id + }] + }, { limit: 1 }); + if (attachingUsersCount !== 0) return skip(); + + Promise.all([ + // チャンクをすべて削除 + DriveFileChunk.remove({ + files_id: file._id + }), + + DriveFile.update({ _id: file._id }, { + $set: { + 'metadata.deletedAt': new Date(), + 'metadata.isExpired': true + } + }) + ]).then(async () => { + res([i, file, true]); + + //#region サムネイルもあれば削除 + const thumbnail = await DriveFileThumbnail.findOne({ + 'metadata.originalId': file._id + }); + + if (thumbnail) { + DriveFileThumbnailChunk.remove({ + files_id: thumbnail._id + }); + + DriveFileThumbnail.remove({ _id: thumbnail._id }); + } + //#endregion + }); + }); + + promise.then(([i, file, deleted]) => { + if (deleted) { + log(chalk`{gray ${i}} {red deleted: {bold ${file._id}} ${file.filename}}`); + } else { + log(chalk`{gray ${i}} {green skipped: {bold ${file._id}} ${file.filename}}`); + } + log.clear(); + console.log(); + }); + + return promise; + }); + } + + return await sequential(promiseGens); +} + +main().then(() => { + console.log('ALL DONE'); +}).catch(console.error); diff --git a/cli/clean-unused-drive-files.js b/cli/clean-unused-drive-files.js new file mode 100644 index 0000000000..87b158b9ee --- /dev/null +++ b/cli/clean-unused-drive-files.js @@ -0,0 +1,80 @@ +const chalk = require('chalk'); +const log = require('single-line-log').stdout; +const sequential = require('promise-sequential'); +const { default: DriveFile, deleteDriveFile } = require('../built/models/drive-file'); +const { default: Note } = require('../built/models/note'); +const { default: MessagingMessage } = require('../built/models/messaging-message'); +const { default: User } = require('../built/models/user'); + +async function main() { + const promiseGens = []; + + const count = await DriveFile.count({}); + + let prev; + + for (let i = 0; i < count; i++) { + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const file = await DriveFile.findOne(prev ? { + _id: { $lt: prev._id } + } : {}, { + sort: { + _id: -1 + } + }); + + prev = file; + + function skip() { + res([i, file, false]); + } + + if (file == null) return skip(); + + log(chalk`{gray ${i}} scanning {bold ${file._id}} ${file.filename} ...`); + + const attachingUsersCount = await User.count({ + $or: [{ + avatarId: file._id + }, { + bannerId: file._id + }] + }, { limit: 1 }); + if (attachingUsersCount !== 0) return skip(); + + const attachingNotesCount = await Note.count({ + mediaIds: file._id + }, { limit: 1 }); + if (attachingNotesCount !== 0) return skip(); + + const attachingMessagesCount = await MessagingMessage.count({ + fileId: file._id + }, { limit: 1 }); + if (attachingMessagesCount !== 0) return skip(); + + deleteDriveFile(file).then(() => { + res([i, file, true]); + }).catch(rej); + }); + + promise.then(([i, file, deleted]) => { + if (deleted) { + log(chalk`{gray ${i}} {red deleted: {bold ${file._id}} ${file.filename}}`); + } else { + log(chalk`{gray ${i}} {green skipped: {bold ${file._id}} ${file.filename}}`); + } + log.clear(); + console.log(); + }); + + return promise; + }); + } + + return await sequential(promiseGens); +} + +main().then(() => { + console.log('done'); +}).catch(console.error); diff --git a/cli/init.js b/cli/init.js index efa9911eef..5a36509574 100644 --- a/cli/init.js +++ b/cli/init.js @@ -18,7 +18,11 @@ const form = [{ }, { type: 'input', name: 'url', - message: 'URL you want to run Misskey:' + message: 'URL you want to run Misskey:', + validate: function(wannabeurl) { + return wannabeurl.match('^http\(s?\)://') ? true : + 'URL needs to start with http:// or https://'; + } }, { type: 'input', name: 'port', @@ -140,8 +144,8 @@ inquirer.prompt(form).then(as => { pass: as['es_pass'] || null }, recaptcha: { - siteKey: as['recaptcha_site'], - secretKey: as['recaptcha_secret'] + site_key: as['recaptcha_site'], + secret_key: as['recaptcha_secret'] } }; diff --git a/cli/suspend.js b/cli/suspend.js new file mode 100644 index 0000000000..0f22bba477 --- /dev/null +++ b/cli/suspend.js @@ -0,0 +1,18 @@ +const mongo = require('mongodb'); +const User = require('../built/models/user').default; + +const args = process.argv.slice(2); + +const userId = new mongo.ObjectID(args[0]); + +console.log(`Suspending ${userId}...`); + +User.update({ _id: userId }, { + $set: { + isSuspended: true + } +}).then(() => { + console.log(`Suspended ${userId}`); +}, e => { + console.error(e); +}); diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 0000000000..3f8dfdeca8 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,3 @@ +files: + - source: /locales/ja.yml + translation: /locales/%two_letters_code%.yml diff --git a/docs/manage.ja.md b/docs/manage.ja.md new file mode 100644 index 0000000000..d56ed4c19b --- /dev/null +++ b/docs/manage.ja.md @@ -0,0 +1,13 @@ +# 運営ガイド + +## ジョブキューの状態を調べる +Misskeyのディレクトリで: +``` shell +node_modules/kue/bin/kue-dashboard -p 3050 +``` +ポート3050にアクセスするとUIが表示されます + +## ユーザーを凍結する +``` shell +node cli/suspend (ユーザーID) +``` diff --git a/docs/setup.ja.md b/docs/setup.ja.md index a46c38cb21..c45ebcdca0 100644 --- a/docs/setup.ja.md +++ b/docs/setup.ja.md @@ -67,3 +67,15 @@ web-push generate-vapid-keys 1. `git reset --hard && git pull origin master` 2. `npm install` 3. `npm run build` + +## メモリが足りなくてビルドできない場合 +Misskeyの(クライアントの)ビルドには、目安として8GBくらいのメモリを必要とします。 +VPSなどでビルドする時は、もしかしたらメモリが足りなくなる可能性があります。 +そうなった場合、もしVPSではなくあなたのPCが十分なメモリを搭載しているなら、あなたのPC上でビルドし、生成されたファイルをVPSにFTPでアップロードする方法を採ることができます。 + +1. あなたのPC上にMisskeyをインストールする +2. 設定ファイルを用意する。設定ファイルは、サーバーに合わせた設定にします。 +3. npm run webpack +4. built/client をサーバーにアップロードする +5. サーバー上で、npm run gulp +6. 完了 \ No newline at end of file diff --git a/gulpfile.ts b/gulpfile.ts index fe3b040237..a9ccbbdb5e 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -2,9 +2,7 @@ * Gulp tasks */ -import * as childProcess from 'child_process'; import * as fs from 'fs'; -import * as Path from 'path'; import * as gulp from 'gulp'; import * as gutil from 'gulp-util'; import * as ts from 'gulp-typescript'; @@ -23,7 +21,7 @@ import * as htmlmin from 'gulp-htmlmin'; const uglifyes = require('uglify-es'); import { fa } from './src/build/fa'; -import version from './src/version'; +const client = require('./built/client/meta.json'); import config from './src/config'; const uglify = uglifyComposer(uglifyes, console); @@ -61,9 +59,15 @@ gulp.task('build:ts', () => { .pipe(gulp.dest('./built/')); }); -gulp.task('build:copy', () => +gulp.task('build:copy:views', () => + gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views')) +); + +gulp.task('build:copy', ['build:copy:views'], () => gulp.src([ './build/Release/crypto_key.node', + './src/const.json', + './src/server/web/views/**/*', './src/**/assets/**/*', '!./src/client/app/**/assets/**/*' ]).pipe(gulp.dest('./built/')) @@ -115,7 +119,7 @@ gulp.task('build:client', [ gulp.task('build:client:script', () => gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js']) - .pipe(replace('VERSION', JSON.stringify(version))) + .pipe(replace('VERSION', JSON.stringify(client.version))) .pipe(replace('API', JSON.stringify(config.api_url))) .pipe(replace('ENV', JSON.stringify(env))) .pipe(isProduction ? uglify({ diff --git a/locales/de.yml b/locales/de.yml new file mode 100644 index 0000000000..b6e7898a8e --- /dev/null +++ b/locales/de.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Misskeyで皆と共有しよう。" + time: + unknown: "なぞのじかん" + future: "未来" + just_now: "たった今" + seconds_ago: "{}秒前" + minutes_ago: "{}分前" + hours_ago: "{}時間前" + days_ago: "{}日前" + weeks_ago: "{}週間前" + months_ago: "{}ヶ月前" + years_ago: "{}年前" + weekday-short: + sunday: "日" + monday: "月" + tuesday: "火" + wednesday: "水" + thursday: "木" + friday: "金" + satruday: "土" + reactions: + like: "いいね" + love: "しゅき" + laugh: "笑" + hmm: "ふぅ~む" + surprise: "わお" + congrats: "おめでとう" + angry: "おこ" + confused: "こまこまのこまり" + pudding: "Pudding" + delete: "削除" + loading: "読み込み中" + ok: "わかった" + update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" + my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" +common/views/components/connect-failed.vue: + title: "サーバーに接続できません" + description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" + thanks: "いつもMisskeyをご利用いただきありがとうございます。" + troubleshoot: "トラブルシュート" +common/views/components/connect-failed.troubleshooter.vue: + title: "トラブルシューティング" + network: "ネットワーク接続" + checking-network: "ネットワーク接続を確認中" + internet: "インターネット接続" + checking-internet: "インターネット接続を確認中" + server: "サーバー接続" + checking-server: "サーバー接続を確認中" + finding: "問題を調べています" + no-network: "ネットワークに接続されていません" + no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。" + no-internet: "インターネットに接続されていません" + no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。" + no-server: "Misskeyのサーバーに接続できません" + no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" + success: "Misskeyのサーバーに接続できました" + success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" +common/views/components/messaging.vue: + search-user: "ユーザーを探す" + you: "あなた" + no-history: "履歴はありません" +common/views/components/messaging-room.vue: + empty: "このユーザーと話したことはありません" + more: "もっと読む" + no-history: "これより過去の履歴はありません" + resize-form: "ドラッグしてフォームの広さを調整" + new-message: "新しいメッセージがあります" +common/views/components/messaging-room.form.vue: + input-message-here: "ここにメッセージを入力" + send: "送信" + attach-from-local: "PCからファイルを添付する" + attach-from-drive: "ドライブからファイルを添付する" +common/views/components/messaging-room.message.vue: + is-read: "既読" + deleted: "このメッセージは削除されました" +common/views/components/nav.vue: + about: "Misskeyについて" + stats: "統計" + status: "ステータス" + wiki: "Wiki" + donors: "ドナー" + repository: "リポジトリ" + develop: "開発者" + feedback: "フィードバック" +common/views/components/note-menu.vue: + favorite: "お気に入り" + pin: "ピン留め" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "「{}」に投票する" + vote-count: "{}票" + total-users: "{}人が投票" + vote: "投票する" + show-result: "結果を見る" + voted: "投票済み" +common/views/components/poll-editor.vue: + no-only-one-choice: "投票には、選択肢が最低2つ必要です" + choice-n: "選択肢{}" + remove: "この選択肢を削除" + add: "+選択肢を追加" + destroy: "投票を破棄" +common/views/components/reaction-picker.vue: + choose-reaction: "リアクションを選択" +common/views/components/signin.vue: + username: "ユーザー名" + password: "パスワード" + token: "トークン" + signing-in: "やってます..." + signin: "サインイン" +common/views/components/signup.vue: + username: "ユーザー名" + checking: "確認しています..." + available: "利用できます" + unavailable: "既に利用されています" + error: "通信エラー" + invalid-format: "a~z、A~Z、0~9、_が使えます" + too-short: "1文字以上でお願いします!" + too-long: "20文字以内でお願いします" + password: "パスワード" + password-placeholder: "8文字以上を推奨します" + weak-password: "弱いパスワード" + normal-password: "まあまあのパスワード" + strong-password: "強いパスワード" + retype: "再入力" + retype-placeholder: "確認のため再入力してください" + password-matched: "確認されました" + password-not-matched: "一致していません" + recaptcha: "認証" + create: "アカウント作成" + some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" +common/views/components/special-message.vue: + new-year: "Happy New Year!" + christmas: "Merry Christmas!" +common/views/components/stream-indicator.vue: + connecting: "接続中" + reconnecting: "再接続中" + connected: "接続完了" +common/views/components/twitter-setting.vue: + description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。" + connected-to: "次のTwitterアカウントに接続されています" + detail: "詳細..." + reconnect: "再接続する" + connect: "Twitterと接続する" + disconnect: "切断する" +common/views/components/uploader.vue: + waiting: "待機中" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "お知らせはありません" + have-a-nice-day: "良い一日を!" + next: "次" +common/views/widgets/donation.vue: + title: "寄付のお願い" + text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "写真はありません" +common/views/widgets/server.vue: + title: "サーバー情報" + toggle: "表示を切り替え" +desktop/views/components/activity.vue: + title: "アクティビティ" + toggle: "表示を切り替え" +desktop/views/components/calendar.vue: + title: "{1}年 {2}月" + prev: "前の月" + next: "次の月" + go: "クリックして時間遡行" +desktop/views/components/drive-window.vue: + used: "使用中" + drive: "ドライブ" +desktop/views/components/drive.file.vue: + avatar: "アイコン" + banner: "バナー" + contextmenu: + rename: "名前を変更" + copy-url: "URLをコピー" + download: "ダウンロード" + else-files: "その他..." + set-as-avatar: "アイコンに設定" + set-as-banner: "バナーに設定" + open-in-app: "アプリで開く" + add-app: "アプリを追加" + rename-file: "ファイル名の変更" + input-new-file-name: "新しいファイル名を入力してください" + copied: "コピー完了" + copied-url-to-clipboard: "URLをクリップボードにコピーしました" +desktop/views/components/drive.folder.vue: + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + contextmenu: + move-to-this-folder: "このフォルダへ移動" + show-in-new-window: "新しいウィンドウで表示" + rename: "名前を変更" + rename-folder: "フォルダ名の変更" + input-new-folder-name: "新しいフォルダ名を入力してください" +desktop/views/components/drive.nav-folder.vue: + drive: "ドライブ" +desktop/views/components/drive.vue: + search: "検索" + load-more: "もっと読み込む" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "ドライブには何もありません。" + empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" + empty-folder: "このフォルダーは空です" + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + url-upload: "URLアップロード" + url-of-file: "アップロードしたいファイルのURL" + url-upload-requested: "アップロードをリクエストしました" + may-take-time: "アップロードが完了するまで時間がかかる場合があります。" + create-folder: "フォルダー作成" + folder-name: "フォルダー名" + contextmenu: + create-folder: "フォルダーを作成" + upload: "ファイルをアップロード" + url-upload: "URLからアップロード" +desktop/views/components/messaging-window.vue: + title: "メッセージ" +desktop/views/components/notes.note.vue: + reposted-by: "{}がRenote" + reply: "返信" + renote: "Renote" + add-reaction: "リアクション" + detail: "詳細" +desktop/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +desktop/views/components/post-form.vue: + note-placeholder: "いまどうしてる?" + reply-placeholder: "この投稿への返信..." + quote-placeholder: "この投稿を引用..." + note: "投稿" + reply: "返信" + renote: "Renote" + posted: "投稿しました!" + replied: "返信しました!" + reposted: "Renoteしました!" + note-failed: "投稿に失敗しました" + reply-failed: "返信に失敗しました" + renote-failed: "Renoteに失敗しました" + posting: "投稿中" + attach-media-from-local: "PCからメディアを添付" + attach-media-from-drive: "ドライブからメディアを添付" + attach-cancel: "添付取り消し" + insert-a-kao: "v(‘ω’)v" + create-poll: "投票を作成" + text-remain: "残り{}文字" +desktop/views/components/post-form-window.vue: + note: "新規投稿" + reply: "返信" + attaches: "添付: {}メディア" + uploading-media: "{}個のメディアをアップロード中" +desktop/views/components/renote-form.vue: + quote: "引用する..." + cancel: "キャンセル" + renote: "Renote" + reposting: "しています..." + success: "Renoteしました!" + failure: "Renoteに失敗しました" +desktop/views/components/renote-form-window.vue: + title: "この投稿をRenoteしますか?" +desktop/views/components/settings.vue: + profile: "プロフィール" + notification: "通知" + apps: "アプリ" + mute: "ミュート" + drive: "ドライブ" + security: "セキュリティ" + password: "パスワード" + 2fa: "二段階認証" + other: "その他" + license: "ライセンス" +desktop/views/components/settings.2fa.vue: + intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" + detail: "詳細..." + url: "https://www.google.co.jp/intl/ja/landing/2step/" + caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。" + register: "デバイスを登録する" + already-registered: "既に設定は完了しています。" + unregister: "設定を解除" + unregistered: "二段階認証が無効になりました。" + enter-password: "パスワードを入力してください" + authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" + howtoinstall: "インストール方法はこちら" + scan: "次に、表示されているQRコードをスキャンします:" + done: "お使いのデバイスに表示されているトークンを入力して完了します:" + submit: "完了" + success: "設定が完了しました!" + failed: "設定に失敗しました。トークンに誤りがないかご確認ください。" + info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。" +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" + regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" + regenerate-token: "トークンを再生成" + enter-password: "パスワードを入力してください" +desktop/views/components/settings.app.vue: + no-apps: "連携しているアプリケーションはありません" +desktop/views/components/settings.mute.vue: + no-users: "ミュートしているユーザーはいません" +desktop/views/components/settings.password.vue: + reset: "パスワードを変更する" + enter-current-password: "現在のパスワードを入力してください" + enter-new-password: "新しいパスワードを入力してください" + enter-new-password-again: "もう一度新しいパスワードを入力してください" + not-match: "新しいパスワードが一致しません" + changed: "パスワードを変更しました" +desktop/views/components/settings.profile.vue: + avatar: "アイコン" + choice-avatar: "画像を選択" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + save: "保存" +desktop/views/components/ui.header.account.vue: + profile: "プロフィール" + drive: "ドライブ" + favorites: "お気に入り" + lists: "リスト" + customize: "カスタマイズ" + settings: "設定" + signout: "サインアウト" + dark: "闇に飲まれる" +desktop/views/components/ui.header.nav.vue: + home: "ホーム" + messaging: "メッセージ" + game: "ゲーム" +desktop/views/components/ui.header.notifications.vue: + title: "通知" +desktop/views/components/ui.header.post.vue: + post: "新規投稿" +desktop/views/components/ui.header.search.vue: + placeholder: "検索" +desktop/views/pages/note.vue: + prev: "前の投稿" + next: "次の投稿" +desktop/views/pages/selectdrive.vue: + title: "ファイルを選択してください" + ok: "決定" + cancel: "キャンセル" + upload: "PCからドライブにファイルをアップロード" +desktop/views/pages/user/user.followers-you-know.vue: + title: "知り合いのフォロワー" + loading: "読み込み中" + no-users: "知り合いのフォロワーはいません" +desktop/views/pages/user/user.friends.vue: + title: "よく話すユーザー" + loading: "読み込み中" + no-users: "よく話すユーザーはいません" +desktop/views/pages/user/user.header.vue: + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +desktop/views/pages/user/user.home.vue: + last-used-at: "最終アクセス" +desktop/views/pages/user/user.photos.vue: + title: "フォト" + loading: "読み込み中" + no-photos: "写真はありません" +desktop/views/pages/user/user.profile.vue: + follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" + mute: "ミュートする" + muted: "ミュートしています" + unmute: "ミュート解除" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "通知" + settings: "通知の設定" +desktop/views/widgets/polls.vue: + title: "投票" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/post-form.vue: + title: "投稿" + note: "投稿" + placeholder: "いまどうしてる?" +desktop/views/widgets/trends.vue: + title: "トレンド" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/users.vue: + title: "おすすめユーザー" + refresh: "他を見る" + no-one: "いません!" +desktop/views/widgets/channel.vue: + title: "チャンネル" + settings: "ウィジェットの設定" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "ドライブ" + used: "使用中" + folder-count: "フォルダ" + count-separator: "、" + file-count: "ファイル" + load-more: "もっと読み込む" + nothing-in-drive: "ドライブには何もありません" + folder-is-empty: "このフォルダは空です" +mobile/views/components/drive-file-chooser.vue: + select-file: "ファイルを選択" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "フォルダーを選択" +mobile/views/components/drive.file-detail.vue: + download: "ダウンロード" + rename: "名前を変更" + move: "移動" + hash: "ハッシュ (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "フォロー" + unfollow: "フォロー解除" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "返信" + reaction: "リアクション" +mobile/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +mobile/views/components/post-form.vue: + submit: "投稿" + reply-placeholder: "この投稿への返信..." + note-placeholder: "いまどうしてる?" +mobile/views/components/sub-note-content.vue: + media-count: "{}個のメディア" + poll: "投票" +mobile/views/components/timeline.vue: + empty: "投稿がありません" + load-more: "もっと" +mobile/views/components/ui.nav.vue: + home: "ホーム" + notifications: "通知" + messaging: "メッセージ" + search: "検索" + drive: "ドライブ" + settings: "設定" + about: "Misskeyについて" +mobile/views/components/user-timeline.vue: + no-notes: "このユーザーは投稿していないようです。" + no-notes-with-media: "メディア付き投稿はありません。" + load-more: "もっと" +mobile/views/components/users-list.vue: + all: "すべて" + known: "知り合い" + load-more: "もっと" +mobile/views/pages/drive.vue: + drive: "ドライブ" +mobile/views/pages/followers.vue: + followers-of: "{}のフォロワー" +mobile/views/pages/following.vue: + following-of: "{}のフォロー" +mobile/views/pages/home.vue: + timeline: "タイムライン" +mobile/views/pages/messaging.vue: + messaging: "メッセージ" +mobile/views/pages/messaging-room.vue: + messaging: "メッセージ" +mobile/views/pages/note.vue: + title: "投稿" + prev: "前の投稿" + next: "次の投稿" +mobile/views/pages/notifications.vue: + notifications: "通知" + read-all: "すべての通知を既読にしますか?" +mobile/views/pages/profile-setting.vue: + title: "プロフィール設定" + will-be-published: "これらのプロフィールは公開されます。" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + avatar: "アイコン" + banner: "バナー" + avatar-saved: "アイコンを保存しました" + banner-saved: "バナーを保存しました" + set-avatar: "アイコンを選択する" + set-banner: "バナーを選択する" + save: "保存" + saved: "プロフィールを保存しました" +mobile/views/pages/search.vue: + search: "検索" + empty: "「{}」に関する投稿は見つかりませんでした。" +mobile/views/pages/selectdrive.vue: + select-file: "ファイルを選択" +mobile/views/pages/settings.vue: + signed-in-as: "{}としてサインイン中" + profile: "プロフィール" + twitter: "Twitter連携" + signin-history: "サインイン履歴" + settings: "設定" + signout: "サインアウト" +mobile/views/pages/user.vue: + follows-you: "フォローされています" + following: "フォロー" + followers: "フォロワー" + notes: "投稿" + overview: "概要" + timeline: "タイムライン" + media: "メディア" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +mobile/views/pages/user/home.vue: + recent-notes: "最近の投稿" + images: "画像" + activity: "アクティビティ" + keywords: "キーワード" + domains: "頻出ドメイン" + frequently-replied-users: "よく会話するユーザー" + followers-you-know: "知り合いのフォロワー" + last-used-at: "最終ログイン" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "読み込み中" + no-users: "知り合いのユーザーはいません" +mobile/views/pages/user/home.friends.vue: + loading: "読み込み中" + no-users: "よく会話するユーザーはいません" +mobile/views/pages/user/home.notes.vue: + loading: "読み込み中" + no-notes: "投稿はありません" +mobile/views/pages/user/home.photos.vue: + loading: "読み込み中" + no-photos: "写真はありません" +docs: + edit-this-page-on-github: "間違いや改善点を見つけましたか?" + edit-this-page-on-github-link: "このページをGitHubで編集" + api: + entities: + properties: "プロパティ" + endpoints: + params: "パラメータ" + res: "レスポンス" + props: + name: "名前" + type: "型" + optional: "オプション" + description: "説明" + yes: "はい" + no: "いいえ" diff --git a/locales/en.yml b/locales/en.yml index 446ef371be..78571918d3 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -1,6 +1,6 @@ +--- common: misskey: "Share everything with others using Misskey." - time: unknown: "unknown" future: "future" @@ -12,7 +12,6 @@ common: weeks_ago: "{}week(s) ago" months_ago: "{}month(s) ago" years_ago: "{}year(s) ago" - weekday-short: sunday: "S" monday: "M" @@ -21,7 +20,6 @@ common: thursday: "T" friday: "F" satruday: "S" - reactions: like: "Like" love: "Love" @@ -32,19 +30,16 @@ common: angry: "Angry" confused: "Confused" pudding: "Pudding" - delete: "Delete" loading: "Loading" ok: "OK" update-available: "A new version of Misskey is now available({newer}, current is {current}). Reload the page to apply the update." my-token-regenerated: "Your token has been generated. You will now get logged out." - 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." thanks: "Thank you for using Misskey." troubleshoot: "Troubleshoot" - common/views/components/connect-failed.troubleshooter.vue: title: "Troubleshooting" network: "Network connection" @@ -64,29 +59,24 @@ common/views/components/connect-failed.troubleshooter.vue: success-desc: "It seems to be able to connect. Please reload the page." flush: "Clean cache" set-version: "Specify version" - common/views/components/messaging.vue: search-user: "Find an user" you: "You" no-history: "No history" - common/views/components/messaging-room.vue: empty: "No conversations" more: "More" no-history: "There is no more history" resize-form: "Drag to resize" new-message: "New message" - common/views/components/messaging-room.form.vue: input-message-here: "Enter message here" send: "Send" attach-from-local: "Attach files from your pc" attach-from-drive: "Attach files from your Drive" - common/views/components/messaging-room.message.vue: is-read: "Read" deleted: "This message has been deleted" - common/views/components/nav.vue: about: "About" stats: "Stats" @@ -95,10 +85,11 @@ common/views/components/nav.vue: donors: "Donators" repository: "Repository" develop: "Developers" - + feedback: "Feedback" common/views/components/note-menu.vue: + favorite: "Favorite this note" pin: "Pin to profile page" - + remote: "Show on origin" common/views/components/poll.vue: vote-to: "Vote for '{}'" vote-count: "{} votes" @@ -106,24 +97,20 @@ common/views/components/poll.vue: vote: "Vote" show-result: "Show results" voted: "Voted" - common/views/components/poll-editor.vue: no-only-one-choice: "You need to enter two or more choices." choice-n: "Choice {}" remove: "Remove this choice" add: "+ Add a choice" destroy: "Destroy this poll" - common/views/components/reaction-picker.vue: choose-reaction: "Choose a reaction" - common/views/components/signin.vue: username: "Username" password: "Password" token: "Token" signing-in: "Signing in..." signin: "Sign in" - common/views/components/signup.vue: username: "Username" checking: "Checking..." @@ -145,16 +132,13 @@ common/views/components/signup.vue: recaptcha: "Verify" create: "Create an Account" some-error: "Account creation failed for some reason. Please try again." - common/views/components/special-message.vue: new-year: "Happy New Year!" christmas: "Merry Christmas!" - common/views/components/stream-indicator.vue: connecting: "Connecting" reconnecting: "Reconnecting" connected: "Connected" - common/views/components/twitter-setting.vue: description: "If you connect your Twitter account to your Misskey account, you will be able to see your Twitter account information on your profile and you can sign-in using Twitter." connected-to: "You are connected to this Twitter account" @@ -162,42 +146,33 @@ common/views/components/twitter-setting.vue: reconnect: "Reconnect" connect: "Link your twitter account" disconnect: "Disconnect" - common/views/components/uploader.vue: waiting: "Waiting" - common/views/widgets/broadcast.vue: fetching: "Fetching" no-broadcasts: "No broadcasts" have-a-nice-day: "Have a nice day!" next: "Next" - common/views/widgets/donation.vue: title: "Donation" text: "To keep Misskey up and running we spend money for our domain name, servers and so on.. We don't get any money from it, and we would really appreciate it if you could donate. If you're interested contact {}. Thank you for your contribution!" - common/views/widgets/photo-stream.vue: title: "Photostream" no-photos: "No photos" - common/views/widgets/server.vue: title: "Server info" toggle: "Toggle views" - desktop/views/components/activity.vue: title: "Activity" toggle: "Toggle views" - desktop/views/components/calendar.vue: title: "{1} / {2}" prev: "Previous month" next: "Next month" go: "Click to naviguate" - desktop/views/components/drive-window.vue: used: "used" drive: "Drive" - desktop/views/components/drive.file.vue: avatar: "Avatar" banner: "Banner" @@ -214,7 +189,6 @@ desktop/views/components/drive.file.vue: input-new-file-name: "Enter new name" copied: "Copied" copied-url-to-clipboard: "Copied URL to clipboard" - desktop/views/components/drive.folder.vue: unable-to-process: "The operation could not be completed." circular-reference-detected: "The destination folder is a subfolder of the folder you wish to move." @@ -225,10 +199,8 @@ desktop/views/components/drive.folder.vue: rename: "Rename" rename-folder: "Rename folder" input-new-folder-name: "Enter new name" - desktop/views/components/drive.nav-folder.vue: drive: "Drive" - desktop/views/components/drive.vue: search: "Search" load-more: "Load more" @@ -249,21 +221,17 @@ desktop/views/components/drive.vue: create-folder: "Create a folder" upload: "Upload a file" url-upload: "Upload from a URL" - desktop/views/components/messaging-window.vue: title: "Messaging" - desktop/views/components/notes.note.vue: reposted-by: "Reposted by {}" reply: "Reply" renote: "Renote" add-reaction: "Add a reaction" detail: "Show detail" - desktop/views/components/notifications.vue: more: "More" empty: "No notifications" - desktop/views/components/post-form.vue: note-placeholder: "What's happening?" reply-placeholder: "Reply to this note..." @@ -284,13 +252,11 @@ desktop/views/components/post-form.vue: insert-a-kao: "v(‘ω’)v" create-poll: "Create a poll" text-remain: "{} chars remaining" - desktop/views/components/post-form-window.vue: note: "New note" reply: "Reply" attaches: "{} media attached" uploading-media: "Uploading {} media" - desktop/views/components/renote-form.vue: quote: "Quote..." cancel: "Cancel" @@ -298,10 +264,8 @@ desktop/views/components/renote-form.vue: reposting: "Reposting..." success: "Reposted!" failure: "Failed to Renote" - desktop/views/components/renote-form-window.vue: title: "Are you sure you want to renote this note?" - desktop/views/components/settings.vue: profile: "Profile" notification: "Notification" @@ -313,7 +277,6 @@ desktop/views/components/settings.vue: 2fa: "Two-factor authentication" other: "Other" license: "License" - desktop/views/components/settings.2fa.vue: intro: "If you set up 2-step verification, you will need not only a password at sign-in but also a pre-registered physical device (such as your smartphone), which will improve security. " detail: "See details..." @@ -332,20 +295,16 @@ desktop/views/components/settings.2fa.vue: success: "Setup completed successfully!" failed: "Failed to setup. please ensure that the token is correct." info: "From now on, enter the token that is displayed on your device in addition to your password when signing-in to Misskey." - desktop/views/components/settings.api.vue: intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" caution: "Please do not show this token to third parties (do not enter it somewhere else other than here) otherwise your account could get compromised." regeneration-of-token: "In the unlikely event that this token leaks out you can regenerate it." regenerate-token: "Regenerate the token" enter-password: "Please enter the password" - desktop/views/components/settings.app.vue: no-apps: "No authorized apps" - desktop/views/components/settings.mute.vue: no-users: "No muted users" - desktop/views/components/settings.password.vue: reset: "Change your password" enter-current-password: "Enter the current password" @@ -353,7 +312,6 @@ desktop/views/components/settings.password.vue: enter-new-password-again: "Enter the new password again" not-match: "New password doesn't match" changed: "Password updated successfully" - desktop/views/components/settings.profile.vue: avatar: "Avatar" choice-avatar: "Choose an image" @@ -362,99 +320,89 @@ desktop/views/components/settings.profile.vue: description: "Description" birthday: "Birthday" save: "Update profile" - +desktop/views/components/timeline.vue: + home: "Home" + local: "Local" + global: "Global" + list: "List" desktop/views/components/ui.header.account.vue: profile: "Your profile" drive: "Drive" - mentions: "Mentions" + favorites: "Favorites" + lists: "Lists" customize: "Customize" settings: "Settings" signout: "Sign out" - + dark: "Fall in dark" desktop/views/components/ui.header.nav.vue: home: "Home" messaging: "Messages" game: "Game" - desktop/views/components/ui.header.notifications.vue: title: "Notifications" - desktop/views/components/ui.header.post.vue: post: "Compose new Post" - desktop/views/components/ui.header.search.vue: placeholder: "Search" - desktop/views/pages/note.vue: prev: "Previous note" next: "Next note" - desktop/views/pages/selectdrive.vue: title: "Choose file(s)" ok: "OK" cancel: "Cancel" upload: "Upload files from you PC" - desktop/views/pages/user/user.followers-you-know.vue: title: "Followers you know" loading: "Loading" no-users: "No users" - desktop/views/pages/user/user.friends.vue: title: "Frequently replied" loading: "Loading" no-users: "No users" - desktop/views/pages/user/user.header.vue: - is-remote: "This user is not a user of Misskey, so the information is not accurate." + is-suspended: "This account has been suspended." + is-remote: "This user is a remote user, so the information is not accurate. " view-remote: "See accurate information" - desktop/views/pages/user/user.home.vue: last-used-at: "Last active: " - desktop/views/pages/user/user.photos.vue: title: "Photos" loading: "Loading" no-photos: "No photos" - desktop/views/pages/user/user.profile.vue: follows-you: "Follows you" + stalk: "Stalk" + stalking: "Stalking" + unstalk: "Unstalk" mute: "Mute" muted: "Muting" unmute: "Unmute" - desktop/views/widgets/messaging.vue: title: "Messaging" - desktop/views/widgets/notifications.vue: title: "Notifications" settings: "Settings" - desktop/views/widgets/polls.vue: title: "Polls" refresh: "Show others" nothing: "Nothing" - desktop/views/widgets/post-form.vue: title: "Post" note: "Post" placeholder: "What's happening?" - desktop/views/widgets/trends.vue: title: "Trend" refresh: "Show others" nothing: "Nothing" - desktop/views/widgets/users.vue: title: "Recommended users" refresh: "Show others" no-one: "No one" - desktop/views/widgets/channel.vue: title: "Channel" settings: "Widget settings" get-started: "Please click the cog in the upper right corner to specify a channel" - mobile/views/components/drive.vue: drive: "Drive" used: "used" @@ -464,94 +412,72 @@ mobile/views/components/drive.vue: load-more: "Load more" nothing-in-drive: "Nothing" folder-is-empty: "This folder is empty" - mobile/views/components/drive-file-chooser.vue: select-file: "Choose a file" - mobile/views/components/drive-folder-chooser.vue: select-folder: "Choose a folder" - mobile/views/components/drive.file-detail.vue: download: "Download" rename: "Rename" move: "Move" hash: "Hash (md5)" exif: "EXIF" - mobile/views/components/follow-button.vue: follow: "Follow" unfollow: "Unfollow" - mobile/views/components/note.vue: reposted-by: "Renoted by {}" - mobile/views/components/note-detail.vue: reply: "Reply" reaction: "Reaction" - mobile/views/components/notifications.vue: more: "More" empty: "No notifications" - mobile/views/components/post-form.vue: submit: "Post" reply-placeholder: "Reply to this note..." note-placeholder: "What's happening?" - mobile/views/components/sub-note-content.vue: media-count: "{} media" poll: "Poll" - mobile/views/components/timeline.vue: empty: "No notes" load-more: "More" - mobile/views/components/ui.nav.vue: home: "Home" notifications: "Notifications" messaging: "Messages" + search: "Search" drive: "Drive" settings: "Settings" about: "About Misskey" - search: "Search" - mobile/views/components/user-timeline.vue: no-notes: "It seems this user hasn't posted yet" no-notes-with-media: "There is no notes with attached media" load-more: "More" - mobile/views/components/users-list.vue: all: "All" known: "You know" load-more: "More" - mobile/views/pages/drive.vue: drive: "Drive" - mobile/views/pages/followers.vue: followers-of: "Followers of {}" - mobile/views/pages/following.vue: following-of: "Following of {}" - mobile/views/pages/home.vue: timeline: "Timeline" - mobile/views/pages/messaging.vue: messaging: "Messaging" - mobile/views/pages/messaging-room.vue: messaging: "Messaging" - mobile/views/pages/note.vue: title: "Post" prev: "Previous note" next: "Next note" - mobile/views/pages/notifications.vue: notifications: "Notifications" read-all: "Are you sure you want to mark all unread notifications as read?" - mobile/views/pages/profile-setting.vue: title: "Profile settings" will-be-published: "These profile settings will be updated." @@ -567,22 +493,18 @@ mobile/views/pages/profile-setting.vue: set-banner: "Choose a banner" save: "Save" saved: "Profile updated successfully" - mobile/views/pages/search.vue: search: "Search" empty: "No posts were found for '{}'" - mobile/views/pages/selectdrive.vue: select-file: "Choose a file" - mobile/views/pages/settings.vue: signed-in-as: "Signed in as {}" profile: "Profile" - twitter-integration: "Twitter integration" + twitter: "Twitter integration" signin-history: "Sign in history" settings: "Settings" signout: "Sign out" - mobile/views/pages/user.vue: follows-you: "Follows you" following: "Following" @@ -591,9 +513,9 @@ mobile/views/pages/user.vue: overview: "Overview" timeline: "Timeline" media: "Media" - is-remote: "This user is not a user of Misskey, so the information might not be accurate." + is-suspended: "This account has been suspended." + is-remote: "This user is a remote user, so the information is not accurate. " view-remote: "See accurate information" - mobile/views/pages/user/home.vue: recent-notes: "Recent notes" images: "Images" @@ -603,27 +525,21 @@ mobile/views/pages/user/home.vue: frequently-replied-users: "Frequently talking users" followers-you-know: "Followers you know" last-used-at: "Last active:" - mobile/views/pages/user/home.followers-you-know.vue: loading: "Loading" no-users: "No users" - mobile/views/pages/user/home.friends.vue: loading: "Loading" no-users: "No users" - mobile/views/pages/user/home.notes.vue: loading: "Loading" no-notes: "No notes" - mobile/views/pages/user/home.photos.vue: loading: "Loading" no-photos: "No photos" - docs: edit-this-page-on-github: "Did you find an error or do you want to contribute to the documentation? " edit-this-page-on-github-link: "Edit this page on Github!" - api: entities: properties: "Properties" diff --git a/locales/es.yml b/locales/es.yml new file mode 100644 index 0000000000..b6e7898a8e --- /dev/null +++ b/locales/es.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Misskeyで皆と共有しよう。" + time: + unknown: "なぞのじかん" + future: "未来" + just_now: "たった今" + seconds_ago: "{}秒前" + minutes_ago: "{}分前" + hours_ago: "{}時間前" + days_ago: "{}日前" + weeks_ago: "{}週間前" + months_ago: "{}ヶ月前" + years_ago: "{}年前" + weekday-short: + sunday: "日" + monday: "月" + tuesday: "火" + wednesday: "水" + thursday: "木" + friday: "金" + satruday: "土" + reactions: + like: "いいね" + love: "しゅき" + laugh: "笑" + hmm: "ふぅ~む" + surprise: "わお" + congrats: "おめでとう" + angry: "おこ" + confused: "こまこまのこまり" + pudding: "Pudding" + delete: "削除" + loading: "読み込み中" + ok: "わかった" + update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" + my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" +common/views/components/connect-failed.vue: + title: "サーバーに接続できません" + description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" + thanks: "いつもMisskeyをご利用いただきありがとうございます。" + troubleshoot: "トラブルシュート" +common/views/components/connect-failed.troubleshooter.vue: + title: "トラブルシューティング" + network: "ネットワーク接続" + checking-network: "ネットワーク接続を確認中" + internet: "インターネット接続" + checking-internet: "インターネット接続を確認中" + server: "サーバー接続" + checking-server: "サーバー接続を確認中" + finding: "問題を調べています" + no-network: "ネットワークに接続されていません" + no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。" + no-internet: "インターネットに接続されていません" + no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。" + no-server: "Misskeyのサーバーに接続できません" + no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" + success: "Misskeyのサーバーに接続できました" + success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" +common/views/components/messaging.vue: + search-user: "ユーザーを探す" + you: "あなた" + no-history: "履歴はありません" +common/views/components/messaging-room.vue: + empty: "このユーザーと話したことはありません" + more: "もっと読む" + no-history: "これより過去の履歴はありません" + resize-form: "ドラッグしてフォームの広さを調整" + new-message: "新しいメッセージがあります" +common/views/components/messaging-room.form.vue: + input-message-here: "ここにメッセージを入力" + send: "送信" + attach-from-local: "PCからファイルを添付する" + attach-from-drive: "ドライブからファイルを添付する" +common/views/components/messaging-room.message.vue: + is-read: "既読" + deleted: "このメッセージは削除されました" +common/views/components/nav.vue: + about: "Misskeyについて" + stats: "統計" + status: "ステータス" + wiki: "Wiki" + donors: "ドナー" + repository: "リポジトリ" + develop: "開発者" + feedback: "フィードバック" +common/views/components/note-menu.vue: + favorite: "お気に入り" + pin: "ピン留め" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "「{}」に投票する" + vote-count: "{}票" + total-users: "{}人が投票" + vote: "投票する" + show-result: "結果を見る" + voted: "投票済み" +common/views/components/poll-editor.vue: + no-only-one-choice: "投票には、選択肢が最低2つ必要です" + choice-n: "選択肢{}" + remove: "この選択肢を削除" + add: "+選択肢を追加" + destroy: "投票を破棄" +common/views/components/reaction-picker.vue: + choose-reaction: "リアクションを選択" +common/views/components/signin.vue: + username: "ユーザー名" + password: "パスワード" + token: "トークン" + signing-in: "やってます..." + signin: "サインイン" +common/views/components/signup.vue: + username: "ユーザー名" + checking: "確認しています..." + available: "利用できます" + unavailable: "既に利用されています" + error: "通信エラー" + invalid-format: "a~z、A~Z、0~9、_が使えます" + too-short: "1文字以上でお願いします!" + too-long: "20文字以内でお願いします" + password: "パスワード" + password-placeholder: "8文字以上を推奨します" + weak-password: "弱いパスワード" + normal-password: "まあまあのパスワード" + strong-password: "強いパスワード" + retype: "再入力" + retype-placeholder: "確認のため再入力してください" + password-matched: "確認されました" + password-not-matched: "一致していません" + recaptcha: "認証" + create: "アカウント作成" + some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" +common/views/components/special-message.vue: + new-year: "Happy New Year!" + christmas: "Merry Christmas!" +common/views/components/stream-indicator.vue: + connecting: "接続中" + reconnecting: "再接続中" + connected: "接続完了" +common/views/components/twitter-setting.vue: + description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。" + connected-to: "次のTwitterアカウントに接続されています" + detail: "詳細..." + reconnect: "再接続する" + connect: "Twitterと接続する" + disconnect: "切断する" +common/views/components/uploader.vue: + waiting: "待機中" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "お知らせはありません" + have-a-nice-day: "良い一日を!" + next: "次" +common/views/widgets/donation.vue: + title: "寄付のお願い" + text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "写真はありません" +common/views/widgets/server.vue: + title: "サーバー情報" + toggle: "表示を切り替え" +desktop/views/components/activity.vue: + title: "アクティビティ" + toggle: "表示を切り替え" +desktop/views/components/calendar.vue: + title: "{1}年 {2}月" + prev: "前の月" + next: "次の月" + go: "クリックして時間遡行" +desktop/views/components/drive-window.vue: + used: "使用中" + drive: "ドライブ" +desktop/views/components/drive.file.vue: + avatar: "アイコン" + banner: "バナー" + contextmenu: + rename: "名前を変更" + copy-url: "URLをコピー" + download: "ダウンロード" + else-files: "その他..." + set-as-avatar: "アイコンに設定" + set-as-banner: "バナーに設定" + open-in-app: "アプリで開く" + add-app: "アプリを追加" + rename-file: "ファイル名の変更" + input-new-file-name: "新しいファイル名を入力してください" + copied: "コピー完了" + copied-url-to-clipboard: "URLをクリップボードにコピーしました" +desktop/views/components/drive.folder.vue: + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + contextmenu: + move-to-this-folder: "このフォルダへ移動" + show-in-new-window: "新しいウィンドウで表示" + rename: "名前を変更" + rename-folder: "フォルダ名の変更" + input-new-folder-name: "新しいフォルダ名を入力してください" +desktop/views/components/drive.nav-folder.vue: + drive: "ドライブ" +desktop/views/components/drive.vue: + search: "検索" + load-more: "もっと読み込む" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "ドライブには何もありません。" + empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" + empty-folder: "このフォルダーは空です" + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + url-upload: "URLアップロード" + url-of-file: "アップロードしたいファイルのURL" + url-upload-requested: "アップロードをリクエストしました" + may-take-time: "アップロードが完了するまで時間がかかる場合があります。" + create-folder: "フォルダー作成" + folder-name: "フォルダー名" + contextmenu: + create-folder: "フォルダーを作成" + upload: "ファイルをアップロード" + url-upload: "URLからアップロード" +desktop/views/components/messaging-window.vue: + title: "メッセージ" +desktop/views/components/notes.note.vue: + reposted-by: "{}がRenote" + reply: "返信" + renote: "Renote" + add-reaction: "リアクション" + detail: "詳細" +desktop/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +desktop/views/components/post-form.vue: + note-placeholder: "いまどうしてる?" + reply-placeholder: "この投稿への返信..." + quote-placeholder: "この投稿を引用..." + note: "投稿" + reply: "返信" + renote: "Renote" + posted: "投稿しました!" + replied: "返信しました!" + reposted: "Renoteしました!" + note-failed: "投稿に失敗しました" + reply-failed: "返信に失敗しました" + renote-failed: "Renoteに失敗しました" + posting: "投稿中" + attach-media-from-local: "PCからメディアを添付" + attach-media-from-drive: "ドライブからメディアを添付" + attach-cancel: "添付取り消し" + insert-a-kao: "v(‘ω’)v" + create-poll: "投票を作成" + text-remain: "残り{}文字" +desktop/views/components/post-form-window.vue: + note: "新規投稿" + reply: "返信" + attaches: "添付: {}メディア" + uploading-media: "{}個のメディアをアップロード中" +desktop/views/components/renote-form.vue: + quote: "引用する..." + cancel: "キャンセル" + renote: "Renote" + reposting: "しています..." + success: "Renoteしました!" + failure: "Renoteに失敗しました" +desktop/views/components/renote-form-window.vue: + title: "この投稿をRenoteしますか?" +desktop/views/components/settings.vue: + profile: "プロフィール" + notification: "通知" + apps: "アプリ" + mute: "ミュート" + drive: "ドライブ" + security: "セキュリティ" + password: "パスワード" + 2fa: "二段階認証" + other: "その他" + license: "ライセンス" +desktop/views/components/settings.2fa.vue: + intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" + detail: "詳細..." + url: "https://www.google.co.jp/intl/ja/landing/2step/" + caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。" + register: "デバイスを登録する" + already-registered: "既に設定は完了しています。" + unregister: "設定を解除" + unregistered: "二段階認証が無効になりました。" + enter-password: "パスワードを入力してください" + authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" + howtoinstall: "インストール方法はこちら" + scan: "次に、表示されているQRコードをスキャンします:" + done: "お使いのデバイスに表示されているトークンを入力して完了します:" + submit: "完了" + success: "設定が完了しました!" + failed: "設定に失敗しました。トークンに誤りがないかご確認ください。" + info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。" +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" + regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" + regenerate-token: "トークンを再生成" + enter-password: "パスワードを入力してください" +desktop/views/components/settings.app.vue: + no-apps: "連携しているアプリケーションはありません" +desktop/views/components/settings.mute.vue: + no-users: "ミュートしているユーザーはいません" +desktop/views/components/settings.password.vue: + reset: "パスワードを変更する" + enter-current-password: "現在のパスワードを入力してください" + enter-new-password: "新しいパスワードを入力してください" + enter-new-password-again: "もう一度新しいパスワードを入力してください" + not-match: "新しいパスワードが一致しません" + changed: "パスワードを変更しました" +desktop/views/components/settings.profile.vue: + avatar: "アイコン" + choice-avatar: "画像を選択" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + save: "保存" +desktop/views/components/ui.header.account.vue: + profile: "プロフィール" + drive: "ドライブ" + favorites: "お気に入り" + lists: "リスト" + customize: "カスタマイズ" + settings: "設定" + signout: "サインアウト" + dark: "闇に飲まれる" +desktop/views/components/ui.header.nav.vue: + home: "ホーム" + messaging: "メッセージ" + game: "ゲーム" +desktop/views/components/ui.header.notifications.vue: + title: "通知" +desktop/views/components/ui.header.post.vue: + post: "新規投稿" +desktop/views/components/ui.header.search.vue: + placeholder: "検索" +desktop/views/pages/note.vue: + prev: "前の投稿" + next: "次の投稿" +desktop/views/pages/selectdrive.vue: + title: "ファイルを選択してください" + ok: "決定" + cancel: "キャンセル" + upload: "PCからドライブにファイルをアップロード" +desktop/views/pages/user/user.followers-you-know.vue: + title: "知り合いのフォロワー" + loading: "読み込み中" + no-users: "知り合いのフォロワーはいません" +desktop/views/pages/user/user.friends.vue: + title: "よく話すユーザー" + loading: "読み込み中" + no-users: "よく話すユーザーはいません" +desktop/views/pages/user/user.header.vue: + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +desktop/views/pages/user/user.home.vue: + last-used-at: "最終アクセス" +desktop/views/pages/user/user.photos.vue: + title: "フォト" + loading: "読み込み中" + no-photos: "写真はありません" +desktop/views/pages/user/user.profile.vue: + follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" + mute: "ミュートする" + muted: "ミュートしています" + unmute: "ミュート解除" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "通知" + settings: "通知の設定" +desktop/views/widgets/polls.vue: + title: "投票" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/post-form.vue: + title: "投稿" + note: "投稿" + placeholder: "いまどうしてる?" +desktop/views/widgets/trends.vue: + title: "トレンド" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/users.vue: + title: "おすすめユーザー" + refresh: "他を見る" + no-one: "いません!" +desktop/views/widgets/channel.vue: + title: "チャンネル" + settings: "ウィジェットの設定" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "ドライブ" + used: "使用中" + folder-count: "フォルダ" + count-separator: "、" + file-count: "ファイル" + load-more: "もっと読み込む" + nothing-in-drive: "ドライブには何もありません" + folder-is-empty: "このフォルダは空です" +mobile/views/components/drive-file-chooser.vue: + select-file: "ファイルを選択" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "フォルダーを選択" +mobile/views/components/drive.file-detail.vue: + download: "ダウンロード" + rename: "名前を変更" + move: "移動" + hash: "ハッシュ (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "フォロー" + unfollow: "フォロー解除" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "返信" + reaction: "リアクション" +mobile/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +mobile/views/components/post-form.vue: + submit: "投稿" + reply-placeholder: "この投稿への返信..." + note-placeholder: "いまどうしてる?" +mobile/views/components/sub-note-content.vue: + media-count: "{}個のメディア" + poll: "投票" +mobile/views/components/timeline.vue: + empty: "投稿がありません" + load-more: "もっと" +mobile/views/components/ui.nav.vue: + home: "ホーム" + notifications: "通知" + messaging: "メッセージ" + search: "検索" + drive: "ドライブ" + settings: "設定" + about: "Misskeyについて" +mobile/views/components/user-timeline.vue: + no-notes: "このユーザーは投稿していないようです。" + no-notes-with-media: "メディア付き投稿はありません。" + load-more: "もっと" +mobile/views/components/users-list.vue: + all: "すべて" + known: "知り合い" + load-more: "もっと" +mobile/views/pages/drive.vue: + drive: "ドライブ" +mobile/views/pages/followers.vue: + followers-of: "{}のフォロワー" +mobile/views/pages/following.vue: + following-of: "{}のフォロー" +mobile/views/pages/home.vue: + timeline: "タイムライン" +mobile/views/pages/messaging.vue: + messaging: "メッセージ" +mobile/views/pages/messaging-room.vue: + messaging: "メッセージ" +mobile/views/pages/note.vue: + title: "投稿" + prev: "前の投稿" + next: "次の投稿" +mobile/views/pages/notifications.vue: + notifications: "通知" + read-all: "すべての通知を既読にしますか?" +mobile/views/pages/profile-setting.vue: + title: "プロフィール設定" + will-be-published: "これらのプロフィールは公開されます。" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + avatar: "アイコン" + banner: "バナー" + avatar-saved: "アイコンを保存しました" + banner-saved: "バナーを保存しました" + set-avatar: "アイコンを選択する" + set-banner: "バナーを選択する" + save: "保存" + saved: "プロフィールを保存しました" +mobile/views/pages/search.vue: + search: "検索" + empty: "「{}」に関する投稿は見つかりませんでした。" +mobile/views/pages/selectdrive.vue: + select-file: "ファイルを選択" +mobile/views/pages/settings.vue: + signed-in-as: "{}としてサインイン中" + profile: "プロフィール" + twitter: "Twitter連携" + signin-history: "サインイン履歴" + settings: "設定" + signout: "サインアウト" +mobile/views/pages/user.vue: + follows-you: "フォローされています" + following: "フォロー" + followers: "フォロワー" + notes: "投稿" + overview: "概要" + timeline: "タイムライン" + media: "メディア" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +mobile/views/pages/user/home.vue: + recent-notes: "最近の投稿" + images: "画像" + activity: "アクティビティ" + keywords: "キーワード" + domains: "頻出ドメイン" + frequently-replied-users: "よく会話するユーザー" + followers-you-know: "知り合いのフォロワー" + last-used-at: "最終ログイン" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "読み込み中" + no-users: "知り合いのユーザーはいません" +mobile/views/pages/user/home.friends.vue: + loading: "読み込み中" + no-users: "よく会話するユーザーはいません" +mobile/views/pages/user/home.notes.vue: + loading: "読み込み中" + no-notes: "投稿はありません" +mobile/views/pages/user/home.photos.vue: + loading: "読み込み中" + no-photos: "写真はありません" +docs: + edit-this-page-on-github: "間違いや改善点を見つけましたか?" + edit-this-page-on-github-link: "このページをGitHubで編集" + api: + entities: + properties: "プロパティ" + endpoints: + params: "パラメータ" + res: "レスポンス" + props: + name: "名前" + type: "型" + optional: "オプション" + description: "説明" + yes: "はい" + no: "いいえ" diff --git a/locales/fr.yml b/locales/fr.yml index 583104b4f0..9978407abd 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -1,6 +1,6 @@ +--- common: misskey: "Partagez avec les autres en utilisant Misskey" - time: unknown: "inconnu" future: "future" @@ -12,7 +12,6 @@ common: weeks_ago: "Il y a{}semaines(s)" months_ago: "Il y a {}mois" years_ago: "Il y a {}an(s)" - weekday-short: sunday: "D" monday: "L" @@ -21,7 +20,6 @@ common: thursday: "J" friday: "V" satruday: "S" - reactions: like: "Aime" love: "Adore" @@ -32,19 +30,16 @@ common: angry: "En Colère" confused: "Confus" pudding: "Pudding" - 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é." - 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." thanks: "On vous remercie d'utiliser Misskey." troubleshoot: "dépanner" - common/views/components/connect-failed.troubleshooter.vue: title: "Dépannage" network: "Connexion au réseau" @@ -64,29 +59,24 @@ common/views/components/connect-failed.troubleshooter.vue: success-desc: "La connexion au serveur a été reussie. Veuillez recharger la page." flush: "キャッシュの削除" set-version: "バージョン指定" - common/views/components/messaging.vue: search-user: "Trouver un utilisateur" you: "Vous" no-history: "Pas d'historique" - common/views/components/messaging-room.vue: empty: "Pas de conversations" more: "Voir Plus" no-history: "Il n'y a pas plus d'historique" resize-form: "Faites glisser pour redimensionner" new-message: "Nouveau message" - common/views/components/messaging-room.form.vue: input-message-here: "Tapez ici votre message" send: "Envoyer" attach-from-local: "Joindre un fichier depuis votre PC" attach-from-drive: "Joindre un fichier depuis votre Drive" - common/views/components/messaging-room.message.vue: is-read: "Lu" deleted: "Ce message a été supprimé" - common/views/components/nav.vue: about: "À propos" stats: "Stats" @@ -95,10 +85,11 @@ common/views/components/nav.vue: donors: "Donateurs" repository: "Repo" develop: "Développeurs" - + feedback: "フィードバック" common/views/components/note-menu.vue: + favorite: "Favorite this note" pin: "Épingler sur votre profile" - + remote: "投稿元で見る" common/views/components/poll.vue: vote-to: "Voter pour '{}'" vote-count: "{} votes" @@ -106,24 +97,20 @@ common/views/components/poll.vue: vote: "Vote" show-result: "Montrer les résultats" voted: "Voté" - common/views/components/poll-editor.vue: no-only-one-choice: "Vous devez entrer au moins deux choix" choice-n: "Choix {}" remove: "Supprimer ce choix" add: "+ Ajouter un choix" destroy: "Supprimer ce sondage" - common/views/components/reaction-picker.vue: choose-reaction: "Choisissez votre réaction" - common/views/components/signin.vue: username: "Nom d'utilisateur" password: "Mot de passe" token: "Token" signing-in: "Connexion...." signin: "Se connecter" - common/views/components/signup.vue: username: "Nom d'utilisateur" checking: "Vérification" @@ -145,16 +132,13 @@ common/views/components/signup.vue: recaptcha: "Vérifier" create: "Créer un compte" some-error: "La création de compte a échoué. Veuillez ressayer." - common/views/components/special-message.vue: new-year: "Bonne année!" christmas: "Joyeux Noël!" - common/views/components/stream-indicator.vue: connecting: "Connexion en cours" reconnecting: "Re-connexion en cours" connected: "Connecté" - common/views/components/twitter-setting.vue: description: "Si vous liez votre compte Twitter à votre compte Misskey, vous verrez ensuite votre compte Twitter s'afficher sur votre profile, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter." connected-to: "Vous êtes connecté à ce compte" @@ -162,42 +146,33 @@ common/views/components/twitter-setting.vue: reconnect: "Reconnecter" connect: "Lier votre compte Twitter" disconnect: "Deconnecter" - common/views/components/uploader.vue: waiting: "En attente" - common/views/widgets/broadcast.vue: fetching: "Récuperation" no-broadcasts: "No broadcasts" have-a-nice-day: "Passez une bonne journée!" next: "Suivant" - common/views/widgets/donation.vue: title: "Dons" text: "Toutes les depences pour couvrir les frais de Misskey sortent directement de notre poche. Nous ne recevons pas d'argent, si vous pouvez nous faire dons d'argent, on vous serait eternellement reconnaissant. Si vous êtes intéressés veuilles contacter {}. Merci pour votre contribution!" - common/views/widgets/photo-stream.vue: title: "Flux de photo" no-photos: "Pas de photos" - common/views/widgets/server.vue: title: "Info sur le serveur" toggle: "Afficher les vues" - desktop/views/components/activity.vue: title: "Activitié" toggle: "Afficher les vues" - desktop/views/components/calendar.vue: title: "{1} / {2}" prev: "Mois dernier" next: "Mois prochain" go: "Cliquer pour naviguer" - desktop/views/components/drive-window.vue: used: "utilisé" drive: "Drive" - desktop/views/components/drive.file.vue: avatar: "Avatar" banner: "Bannière" @@ -214,7 +189,6 @@ desktop/views/components/drive.file.vue: input-new-file-name: "Entrer un nouveau nom" copied: "Copied" copied-url-to-clipboard: "L'URL a été copié dans le presse-papier" - desktop/views/components/drive.folder.vue: unable-to-process: "L'opération n'a pas pu être complétée" circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer." @@ -225,10 +199,8 @@ desktop/views/components/drive.folder.vue: rename: "Renommer" rename-folder: "Renommer le dossier" input-new-folder-name: "Entrer un nouveau nom" - desktop/views/components/drive.nav-folder.vue: drive: "Drive" - desktop/views/components/drive.vue: search: "Rechercher" load-more: "Afficher plus" @@ -249,21 +221,17 @@ desktop/views/components/drive.vue: create-folder: "Créer un dossier" upload: "Uploader un fichier" url-upload: "Uploader d'un URL" - desktop/views/components/messaging-window.vue: title: "Messagerie" - 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" - desktop/views/components/notifications.vue: more: "Plus" empty: "Pas de notifications" - desktop/views/components/post-form.vue: note-placeholder: "Qu'est-ce qui se passe?" reply-placeholder: "Répondre à cette note" @@ -284,13 +252,11 @@ desktop/views/components/post-form.vue: insert-a-kao: "v(‘ω’)v" create-poll: "Créer un sondage" text-remain: "{} charactères restants" - desktop/views/components/post-form-window.vue: note: "Nouvelle note" reply: "Répondre" attaches: "{} media joint(s)" uploading-media: "Upload du media {}" - desktop/views/components/renote-form.vue: quote: "Citer..." cancel: "Annuler" @@ -298,10 +264,8 @@ desktop/views/components/renote-form.vue: reposting: "Repost en cours..." success: "Reposté!" failure: "La renote a échoué" - desktop/views/components/renote-form-window.vue: title: "Êtes vous sûr de vouloir renote cette note?" - desktop/views/components/settings.vue: profile: "Profil" notification: "Notification" @@ -313,7 +277,6 @@ desktop/views/components/settings.vue: 2fa: "Vérification en deux étapes" other: "Autres" license: "License" - 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." detail: "Voir les détails..." @@ -332,20 +295,16 @@ desktop/views/components/settings.2fa.vue: success: "L'operation a été complétée avec succès!" failed: "L'operation a échoué. Veuillez vous assurer que le token a été entrer correctement." info: "À partir de maintenant, à chaque fois que vous vous connecter entrez votre mot de passe ainsi que le token généré sur votre appareil." - desktop/views/components/settings.api.vue: intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" regenerate-token: "Regenerer le token" enter-password: "Veuillez entrer le mot de passe" - desktop/views/components/settings.app.vue: no-apps: "Aucune application authorisée" - desktop/views/components/settings.mute.vue: no-users: "Aucun utilisateurs mis en sourdine" - desktop/views/components/settings.password.vue: reset: "Changer votre mot de passe" enter-current-password: "Entrez votre mot de passe actuel" @@ -353,7 +312,6 @@ desktop/views/components/settings.password.vue: enter-new-password-again: "Entrez à nouveau le nouveau mot de passe" not-match: "Le nouveau mot de passe ne correspond pas." changed: "Mot de passe modifié avec succès" - desktop/views/components/settings.profile.vue: avatar: "Avatar" choice-avatar: "Choose an image" @@ -362,99 +320,84 @@ desktop/views/components/settings.profile.vue: description: "Description" birthday: "Date de naissance" save: "Mettre à jour le profil" - desktop/views/components/ui.header.account.vue: profile: "Votre profil" drive: "Drive" - mentions: "Mentions" + favorites: "Favorites" + lists: "リスト" customize: "Modifications" settings: "Réglages" signout: "Déconnexion" - + dark: "Fall in dark" desktop/views/components/ui.header.nav.vue: home: "Accueil" messaging: "Messages" game: "Jeux" - desktop/views/components/ui.header.notifications.vue: title: "Notifications" - desktop/views/components/ui.header.post.vue: post: "Composer un nouveau post" - desktop/views/components/ui.header.search.vue: placeholder: "Chercher" - desktop/views/pages/note.vue: prev: "Note précédente" next: "Note suivante" - desktop/views/pages/selectdrive.vue: title: "Choisir fichier(s)" ok: "OK" cancel: "Annuler" upload: "Uploader un ou plusieurs fichier(s) depuis votre PC" - desktop/views/pages/user/user.followers-you-know.vue: title: "Abonnés que vous connaissez" loading: "Chargement en cours" no-users: "Pas d'utilisateurs" - desktop/views/pages/user/user.friends.vue: title: "Personnes qui répondent le plus" loading: "Chargement en cours" no-users: "Pas d'utilisateurs" - desktop/views/pages/user/user.header.vue: - is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées" + is-suspended: "This account has been suspended." + is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées " view-remote: "Voir les informations détaillées" - desktop/views/pages/user/user.home.vue: last-used-at: "Last used at" - desktop/views/pages/user/user.photos.vue: title: "Photos" loading: "Chargement en cours" no-photos: "Pas de photos" - desktop/views/pages/user/user.profile.vue: follows-you: "Vous suis" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" mute: "Mettre en sourdine" muted: "Muting" unmute: "Enlever la sourdine" - desktop/views/widgets/messaging.vue: title: "Messagerie" - desktop/views/widgets/notifications.vue: title: "Notifications" settings: "Réglages" - desktop/views/widgets/polls.vue: title: "Sondages" refresh: "Afficher d'autres" nothing: "Rien" - desktop/views/widgets/post-form.vue: title: "Post" note: "Post" placeholder: "Qu'est-ce qu'il se passe?" - desktop/views/widgets/trends.vue: title: "Tendances" refresh: "Afficher d'autres" nothing: "Rien" - desktop/views/widgets/users.vue: - title: "Utilisateurs recommandés" + title: "Utilisateurs" refresh: "Afficher d'autres" no-one: "Personne" - desktop/views/widgets/channel.vue: title: "Cannal" settings: "Réglages des widgets" get-started: "Veuillez cliquer sur la dent en haute à droite pour choisir un channel" - mobile/views/components/drive.vue: drive: "Drive" used: "utilisé" @@ -464,94 +407,72 @@ mobile/views/components/drive.vue: load-more: "Charger plus" nothing-in-drive: "Rien" folder-is-empty: "Ce dossier est vide" - mobile/views/components/drive-file-chooser.vue: select-file: "Choisissez un fichier" - mobile/views/components/drive-folder-chooser.vue: select-folder: "Choisissez un dossier" - mobile/views/components/drive.file-detail.vue: download: "Télécharger" rename: "Renommer" move: "Déplacer" hash: "Hash (md5)" exif: "EXIF" - mobile/views/components/follow-button.vue: follow: "Suivre" unfollow: "Ne plus suivre" - mobile/views/components/note.vue: reposted-by: "Renoté par {}" - mobile/views/components/note-detail.vue: reply: "Répondre" reaction: "Réaction" - mobile/views/components/notifications.vue: more: "Plus" empty: "Pas de notifications" - mobile/views/components/post-form.vue: submit: "Poster" reply-placeholder: "Répondre à cette note" note-placeholder: "Qu'est-ce qu'il se passe?" - mobile/views/components/sub-note-content.vue: media-count: "{} media" poll: "Sondage" - mobile/views/components/timeline.vue: empty: "Pas de notes" load-more: "Afficher plus" - mobile/views/components/ui.nav.vue: home: "Accueil" notifications: "Notifications" messaging: "Messages" + search: "Rechercher" drive: "Drive" settings: "Réglages" about: "À propose de Misskey" - search: "Rechercher" - mobile/views/components/user-timeline.vue: no-notes: "Cette utilisateur semble n'avoir rien poster pour le moment" no-notes-with-media: "Aucune notes avec des médias" load-more: "Afficher Plus" - mobile/views/components/users-list.vue: all: "Tout" known: "Vous connaissez" load-more: "Afficher plus" - mobile/views/pages/drive.vue: drive: "Drive" - mobile/views/pages/followers.vue: followers-of: "Abonnés de {}" - mobile/views/pages/following.vue: following-of: "Abonnements de {}" - mobile/views/pages/home.vue: timeline: "Fil d'actualité" - mobile/views/pages/messaging.vue: messaging: "Messagerie" - mobile/views/pages/messaging-room.vue: messaging: "Messagerie" - mobile/views/pages/note.vue: title: "Post" prev: "Note précedante" next: "Note suivante" - 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/profile-setting.vue: title: "Réglages du profiles" will-be-published: "Ces profiles vont être publier" @@ -567,22 +488,18 @@ mobile/views/pages/profile-setting.vue: set-banner: "Choisir une bannière" save: "Sauvegarder" saved: "Profil mis à jour avec succès" - mobile/views/pages/search.vue: search: "Chercher" empty: "Aucun message trouvé pour '{}' " - mobile/views/pages/selectdrive.vue: select-file: "Choisissez un fichier" - mobile/views/pages/settings.vue: signed-in-as: "Connecté en tant que {}" profile: "Profile" - twitter-integration: "Twitter integration" + twitter: "Twitter連携" signin-history: "Historique de connexion" settings: "Réglages" signout: "Déconnexion" - mobile/views/pages/user.vue: follows-you: "vous suit" following: "Abonnements" @@ -591,9 +508,9 @@ mobile/views/pages/user.vue: overview: "Aperçu" timeline: "Fil d'actualité" media: "Media" - is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées" + is-suspended: "This account has been suspended." + is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées " view-remote: "Voir les informations détaillées" - mobile/views/pages/user/home.vue: recent-notes: "Notes récentes" images: "Images" @@ -603,27 +520,21 @@ mobile/views/pages/user/home.vue: frequently-replied-users: "Utilisateurs qui interagissent souvent" followers-you-know: "Abonnés que vous connaissez" last-used-at: "Dernière connexion il y a" - mobile/views/pages/user/home.followers-you-know.vue: loading: "Chargement" no-users: "Pas d'utilisateurs" - mobile/views/pages/user/home.friends.vue: loading: "Chargement" no-users: "Pass d'utilisateurs" - mobile/views/pages/user/home.notes.vue: loading: "Chargement" no-notes: "Pas de notes" - mobile/views/pages/user/home.photos.vue: loading: "Chargement" no-photos: "Pas de photos" - docs: edit-this-page-on-github: "Vous avez trouvé une erreur ou vous voulez contribuer à la documentation?" edit-this-page-on-github-link: "Modifiez cette page sur github!" - api: entities: properties: "Propriétés" diff --git a/locales/index.ts b/locales/index.ts index 6e76f39179..926844766d 100644 --- a/locales/index.ts +++ b/locales/index.ts @@ -13,7 +13,8 @@ const native = loadLang('ja'); const langs = { 'en': loadLang('en'), 'fr': loadLang('fr'), - 'ja': native + 'ja': native, + 'pl': loadLang('pl') }; Object.entries(langs).map(([, locale]) => { diff --git a/locales/it.yml b/locales/it.yml new file mode 100644 index 0000000000..b6e7898a8e --- /dev/null +++ b/locales/it.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Misskeyで皆と共有しよう。" + time: + unknown: "なぞのじかん" + future: "未来" + just_now: "たった今" + seconds_ago: "{}秒前" + minutes_ago: "{}分前" + hours_ago: "{}時間前" + days_ago: "{}日前" + weeks_ago: "{}週間前" + months_ago: "{}ヶ月前" + years_ago: "{}年前" + weekday-short: + sunday: "日" + monday: "月" + tuesday: "火" + wednesday: "水" + thursday: "木" + friday: "金" + satruday: "土" + reactions: + like: "いいね" + love: "しゅき" + laugh: "笑" + hmm: "ふぅ~む" + surprise: "わお" + congrats: "おめでとう" + angry: "おこ" + confused: "こまこまのこまり" + pudding: "Pudding" + delete: "削除" + loading: "読み込み中" + ok: "わかった" + update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" + my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" +common/views/components/connect-failed.vue: + title: "サーバーに接続できません" + description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" + thanks: "いつもMisskeyをご利用いただきありがとうございます。" + troubleshoot: "トラブルシュート" +common/views/components/connect-failed.troubleshooter.vue: + title: "トラブルシューティング" + network: "ネットワーク接続" + checking-network: "ネットワーク接続を確認中" + internet: "インターネット接続" + checking-internet: "インターネット接続を確認中" + server: "サーバー接続" + checking-server: "サーバー接続を確認中" + finding: "問題を調べています" + no-network: "ネットワークに接続されていません" + no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。" + no-internet: "インターネットに接続されていません" + no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。" + no-server: "Misskeyのサーバーに接続できません" + no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" + success: "Misskeyのサーバーに接続できました" + success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" +common/views/components/messaging.vue: + search-user: "ユーザーを探す" + you: "あなた" + no-history: "履歴はありません" +common/views/components/messaging-room.vue: + empty: "このユーザーと話したことはありません" + more: "もっと読む" + no-history: "これより過去の履歴はありません" + resize-form: "ドラッグしてフォームの広さを調整" + new-message: "新しいメッセージがあります" +common/views/components/messaging-room.form.vue: + input-message-here: "ここにメッセージを入力" + send: "送信" + attach-from-local: "PCからファイルを添付する" + attach-from-drive: "ドライブからファイルを添付する" +common/views/components/messaging-room.message.vue: + is-read: "既読" + deleted: "このメッセージは削除されました" +common/views/components/nav.vue: + about: "Misskeyについて" + stats: "統計" + status: "ステータス" + wiki: "Wiki" + donors: "ドナー" + repository: "リポジトリ" + develop: "開発者" + feedback: "フィードバック" +common/views/components/note-menu.vue: + favorite: "お気に入り" + pin: "ピン留め" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "「{}」に投票する" + vote-count: "{}票" + total-users: "{}人が投票" + vote: "投票する" + show-result: "結果を見る" + voted: "投票済み" +common/views/components/poll-editor.vue: + no-only-one-choice: "投票には、選択肢が最低2つ必要です" + choice-n: "選択肢{}" + remove: "この選択肢を削除" + add: "+選択肢を追加" + destroy: "投票を破棄" +common/views/components/reaction-picker.vue: + choose-reaction: "リアクションを選択" +common/views/components/signin.vue: + username: "ユーザー名" + password: "パスワード" + token: "トークン" + signing-in: "やってます..." + signin: "サインイン" +common/views/components/signup.vue: + username: "ユーザー名" + checking: "確認しています..." + available: "利用できます" + unavailable: "既に利用されています" + error: "通信エラー" + invalid-format: "a~z、A~Z、0~9、_が使えます" + too-short: "1文字以上でお願いします!" + too-long: "20文字以内でお願いします" + password: "パスワード" + password-placeholder: "8文字以上を推奨します" + weak-password: "弱いパスワード" + normal-password: "まあまあのパスワード" + strong-password: "強いパスワード" + retype: "再入力" + retype-placeholder: "確認のため再入力してください" + password-matched: "確認されました" + password-not-matched: "一致していません" + recaptcha: "認証" + create: "アカウント作成" + some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" +common/views/components/special-message.vue: + new-year: "Happy New Year!" + christmas: "Merry Christmas!" +common/views/components/stream-indicator.vue: + connecting: "接続中" + reconnecting: "再接続中" + connected: "接続完了" +common/views/components/twitter-setting.vue: + description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。" + connected-to: "次のTwitterアカウントに接続されています" + detail: "詳細..." + reconnect: "再接続する" + connect: "Twitterと接続する" + disconnect: "切断する" +common/views/components/uploader.vue: + waiting: "待機中" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "お知らせはありません" + have-a-nice-day: "良い一日を!" + next: "次" +common/views/widgets/donation.vue: + title: "寄付のお願い" + text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "写真はありません" +common/views/widgets/server.vue: + title: "サーバー情報" + toggle: "表示を切り替え" +desktop/views/components/activity.vue: + title: "アクティビティ" + toggle: "表示を切り替え" +desktop/views/components/calendar.vue: + title: "{1}年 {2}月" + prev: "前の月" + next: "次の月" + go: "クリックして時間遡行" +desktop/views/components/drive-window.vue: + used: "使用中" + drive: "ドライブ" +desktop/views/components/drive.file.vue: + avatar: "アイコン" + banner: "バナー" + contextmenu: + rename: "名前を変更" + copy-url: "URLをコピー" + download: "ダウンロード" + else-files: "その他..." + set-as-avatar: "アイコンに設定" + set-as-banner: "バナーに設定" + open-in-app: "アプリで開く" + add-app: "アプリを追加" + rename-file: "ファイル名の変更" + input-new-file-name: "新しいファイル名を入力してください" + copied: "コピー完了" + copied-url-to-clipboard: "URLをクリップボードにコピーしました" +desktop/views/components/drive.folder.vue: + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + contextmenu: + move-to-this-folder: "このフォルダへ移動" + show-in-new-window: "新しいウィンドウで表示" + rename: "名前を変更" + rename-folder: "フォルダ名の変更" + input-new-folder-name: "新しいフォルダ名を入力してください" +desktop/views/components/drive.nav-folder.vue: + drive: "ドライブ" +desktop/views/components/drive.vue: + search: "検索" + load-more: "もっと読み込む" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "ドライブには何もありません。" + empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" + empty-folder: "このフォルダーは空です" + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + url-upload: "URLアップロード" + url-of-file: "アップロードしたいファイルのURL" + url-upload-requested: "アップロードをリクエストしました" + may-take-time: "アップロードが完了するまで時間がかかる場合があります。" + create-folder: "フォルダー作成" + folder-name: "フォルダー名" + contextmenu: + create-folder: "フォルダーを作成" + upload: "ファイルをアップロード" + url-upload: "URLからアップロード" +desktop/views/components/messaging-window.vue: + title: "メッセージ" +desktop/views/components/notes.note.vue: + reposted-by: "{}がRenote" + reply: "返信" + renote: "Renote" + add-reaction: "リアクション" + detail: "詳細" +desktop/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +desktop/views/components/post-form.vue: + note-placeholder: "いまどうしてる?" + reply-placeholder: "この投稿への返信..." + quote-placeholder: "この投稿を引用..." + note: "投稿" + reply: "返信" + renote: "Renote" + posted: "投稿しました!" + replied: "返信しました!" + reposted: "Renoteしました!" + note-failed: "投稿に失敗しました" + reply-failed: "返信に失敗しました" + renote-failed: "Renoteに失敗しました" + posting: "投稿中" + attach-media-from-local: "PCからメディアを添付" + attach-media-from-drive: "ドライブからメディアを添付" + attach-cancel: "添付取り消し" + insert-a-kao: "v(‘ω’)v" + create-poll: "投票を作成" + text-remain: "残り{}文字" +desktop/views/components/post-form-window.vue: + note: "新規投稿" + reply: "返信" + attaches: "添付: {}メディア" + uploading-media: "{}個のメディアをアップロード中" +desktop/views/components/renote-form.vue: + quote: "引用する..." + cancel: "キャンセル" + renote: "Renote" + reposting: "しています..." + success: "Renoteしました!" + failure: "Renoteに失敗しました" +desktop/views/components/renote-form-window.vue: + title: "この投稿をRenoteしますか?" +desktop/views/components/settings.vue: + profile: "プロフィール" + notification: "通知" + apps: "アプリ" + mute: "ミュート" + drive: "ドライブ" + security: "セキュリティ" + password: "パスワード" + 2fa: "二段階認証" + other: "その他" + license: "ライセンス" +desktop/views/components/settings.2fa.vue: + intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" + detail: "詳細..." + url: "https://www.google.co.jp/intl/ja/landing/2step/" + caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。" + register: "デバイスを登録する" + already-registered: "既に設定は完了しています。" + unregister: "設定を解除" + unregistered: "二段階認証が無効になりました。" + enter-password: "パスワードを入力してください" + authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" + howtoinstall: "インストール方法はこちら" + scan: "次に、表示されているQRコードをスキャンします:" + done: "お使いのデバイスに表示されているトークンを入力して完了します:" + submit: "完了" + success: "設定が完了しました!" + failed: "設定に失敗しました。トークンに誤りがないかご確認ください。" + info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。" +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" + regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" + regenerate-token: "トークンを再生成" + enter-password: "パスワードを入力してください" +desktop/views/components/settings.app.vue: + no-apps: "連携しているアプリケーションはありません" +desktop/views/components/settings.mute.vue: + no-users: "ミュートしているユーザーはいません" +desktop/views/components/settings.password.vue: + reset: "パスワードを変更する" + enter-current-password: "現在のパスワードを入力してください" + enter-new-password: "新しいパスワードを入力してください" + enter-new-password-again: "もう一度新しいパスワードを入力してください" + not-match: "新しいパスワードが一致しません" + changed: "パスワードを変更しました" +desktop/views/components/settings.profile.vue: + avatar: "アイコン" + choice-avatar: "画像を選択" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + save: "保存" +desktop/views/components/ui.header.account.vue: + profile: "プロフィール" + drive: "ドライブ" + favorites: "お気に入り" + lists: "リスト" + customize: "カスタマイズ" + settings: "設定" + signout: "サインアウト" + dark: "闇に飲まれる" +desktop/views/components/ui.header.nav.vue: + home: "ホーム" + messaging: "メッセージ" + game: "ゲーム" +desktop/views/components/ui.header.notifications.vue: + title: "通知" +desktop/views/components/ui.header.post.vue: + post: "新規投稿" +desktop/views/components/ui.header.search.vue: + placeholder: "検索" +desktop/views/pages/note.vue: + prev: "前の投稿" + next: "次の投稿" +desktop/views/pages/selectdrive.vue: + title: "ファイルを選択してください" + ok: "決定" + cancel: "キャンセル" + upload: "PCからドライブにファイルをアップロード" +desktop/views/pages/user/user.followers-you-know.vue: + title: "知り合いのフォロワー" + loading: "読み込み中" + no-users: "知り合いのフォロワーはいません" +desktop/views/pages/user/user.friends.vue: + title: "よく話すユーザー" + loading: "読み込み中" + no-users: "よく話すユーザーはいません" +desktop/views/pages/user/user.header.vue: + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +desktop/views/pages/user/user.home.vue: + last-used-at: "最終アクセス" +desktop/views/pages/user/user.photos.vue: + title: "フォト" + loading: "読み込み中" + no-photos: "写真はありません" +desktop/views/pages/user/user.profile.vue: + follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" + mute: "ミュートする" + muted: "ミュートしています" + unmute: "ミュート解除" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "通知" + settings: "通知の設定" +desktop/views/widgets/polls.vue: + title: "投票" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/post-form.vue: + title: "投稿" + note: "投稿" + placeholder: "いまどうしてる?" +desktop/views/widgets/trends.vue: + title: "トレンド" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/users.vue: + title: "おすすめユーザー" + refresh: "他を見る" + no-one: "いません!" +desktop/views/widgets/channel.vue: + title: "チャンネル" + settings: "ウィジェットの設定" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "ドライブ" + used: "使用中" + folder-count: "フォルダ" + count-separator: "、" + file-count: "ファイル" + load-more: "もっと読み込む" + nothing-in-drive: "ドライブには何もありません" + folder-is-empty: "このフォルダは空です" +mobile/views/components/drive-file-chooser.vue: + select-file: "ファイルを選択" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "フォルダーを選択" +mobile/views/components/drive.file-detail.vue: + download: "ダウンロード" + rename: "名前を変更" + move: "移動" + hash: "ハッシュ (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "フォロー" + unfollow: "フォロー解除" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "返信" + reaction: "リアクション" +mobile/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +mobile/views/components/post-form.vue: + submit: "投稿" + reply-placeholder: "この投稿への返信..." + note-placeholder: "いまどうしてる?" +mobile/views/components/sub-note-content.vue: + media-count: "{}個のメディア" + poll: "投票" +mobile/views/components/timeline.vue: + empty: "投稿がありません" + load-more: "もっと" +mobile/views/components/ui.nav.vue: + home: "ホーム" + notifications: "通知" + messaging: "メッセージ" + search: "検索" + drive: "ドライブ" + settings: "設定" + about: "Misskeyについて" +mobile/views/components/user-timeline.vue: + no-notes: "このユーザーは投稿していないようです。" + no-notes-with-media: "メディア付き投稿はありません。" + load-more: "もっと" +mobile/views/components/users-list.vue: + all: "すべて" + known: "知り合い" + load-more: "もっと" +mobile/views/pages/drive.vue: + drive: "ドライブ" +mobile/views/pages/followers.vue: + followers-of: "{}のフォロワー" +mobile/views/pages/following.vue: + following-of: "{}のフォロー" +mobile/views/pages/home.vue: + timeline: "タイムライン" +mobile/views/pages/messaging.vue: + messaging: "メッセージ" +mobile/views/pages/messaging-room.vue: + messaging: "メッセージ" +mobile/views/pages/note.vue: + title: "投稿" + prev: "前の投稿" + next: "次の投稿" +mobile/views/pages/notifications.vue: + notifications: "通知" + read-all: "すべての通知を既読にしますか?" +mobile/views/pages/profile-setting.vue: + title: "プロフィール設定" + will-be-published: "これらのプロフィールは公開されます。" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + avatar: "アイコン" + banner: "バナー" + avatar-saved: "アイコンを保存しました" + banner-saved: "バナーを保存しました" + set-avatar: "アイコンを選択する" + set-banner: "バナーを選択する" + save: "保存" + saved: "プロフィールを保存しました" +mobile/views/pages/search.vue: + search: "検索" + empty: "「{}」に関する投稿は見つかりませんでした。" +mobile/views/pages/selectdrive.vue: + select-file: "ファイルを選択" +mobile/views/pages/settings.vue: + signed-in-as: "{}としてサインイン中" + profile: "プロフィール" + twitter: "Twitter連携" + signin-history: "サインイン履歴" + settings: "設定" + signout: "サインアウト" +mobile/views/pages/user.vue: + follows-you: "フォローされています" + following: "フォロー" + followers: "フォロワー" + notes: "投稿" + overview: "概要" + timeline: "タイムライン" + media: "メディア" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +mobile/views/pages/user/home.vue: + recent-notes: "最近の投稿" + images: "画像" + activity: "アクティビティ" + keywords: "キーワード" + domains: "頻出ドメイン" + frequently-replied-users: "よく会話するユーザー" + followers-you-know: "知り合いのフォロワー" + last-used-at: "最終ログイン" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "読み込み中" + no-users: "知り合いのユーザーはいません" +mobile/views/pages/user/home.friends.vue: + loading: "読み込み中" + no-users: "よく会話するユーザーはいません" +mobile/views/pages/user/home.notes.vue: + loading: "読み込み中" + no-notes: "投稿はありません" +mobile/views/pages/user/home.photos.vue: + loading: "読み込み中" + no-photos: "写真はありません" +docs: + edit-this-page-on-github: "間違いや改善点を見つけましたか?" + edit-this-page-on-github-link: "このページをGitHubで編集" + api: + entities: + properties: "プロパティ" + endpoints: + params: "パラメータ" + res: "レスポンス" + props: + name: "名前" + type: "型" + optional: "オプション" + description: "説明" + yes: "はい" + no: "いいえ" diff --git a/locales/ja.yml b/locales/ja.yml index b5479b5cef..85826110f0 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -95,9 +95,12 @@ common/views/components/nav.vue: donors: "ドナー" repository: "リポジトリ" develop: "開発者" + feedback: "フィードバック" common/views/components/note-menu.vue: + favorite: "お気に入り" pin: "ピン留め" + remote: "投稿元で見る" common/views/components/poll.vue: vote-to: "「{}」に投票する" @@ -363,13 +366,21 @@ desktop/views/components/settings.profile.vue: birthday: "誕生日" save: "保存" +desktop/views/components/timeline.vue: + home: "ホーム" + local: "ローカル" + global: "グローバル" + list: "リスト" + desktop/views/components/ui.header.account.vue: profile: "プロフィール" drive: "ドライブ" - mentions: "あなた宛て" + favorites: "お気に入り" + lists: "リスト" customize: "カスタマイズ" settings: "設定" signout: "サインアウト" + dark: "闇に飲まれる" desktop/views/components/ui.header.nav.vue: home: "ホーム" @@ -406,7 +417,8 @@ desktop/views/pages/user/user.friends.vue: no-users: "よく話すユーザーはいません" desktop/views/pages/user/user.header.vue: - is-remote: "このユーザーはMisskeyのユーザーではないため情報が正確ではありません。" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" view-remote: "正確な情報を見る" desktop/views/pages/user/user.home.vue: @@ -419,6 +431,9 @@ desktop/views/pages/user/user.photos.vue: desktop/views/pages/user/user.profile.vue: follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" mute: "ミュートする" muted: "ミュートしています" unmute: "ミュート解除" @@ -591,7 +606,8 @@ mobile/views/pages/user.vue: overview: "概要" timeline: "タイムライン" media: "メディア" - is-remote: "このユーザーはMisskeyのユーザーではないため情報が正確ではありません。" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" view-remote: "正確な情報を見る" mobile/views/pages/user/home.vue: diff --git a/locales/ko.yml b/locales/ko.yml new file mode 100644 index 0000000000..b6e7898a8e --- /dev/null +++ b/locales/ko.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Misskeyで皆と共有しよう。" + time: + unknown: "なぞのじかん" + future: "未来" + just_now: "たった今" + seconds_ago: "{}秒前" + minutes_ago: "{}分前" + hours_ago: "{}時間前" + days_ago: "{}日前" + weeks_ago: "{}週間前" + months_ago: "{}ヶ月前" + years_ago: "{}年前" + weekday-short: + sunday: "日" + monday: "月" + tuesday: "火" + wednesday: "水" + thursday: "木" + friday: "金" + satruday: "土" + reactions: + like: "いいね" + love: "しゅき" + laugh: "笑" + hmm: "ふぅ~む" + surprise: "わお" + congrats: "おめでとう" + angry: "おこ" + confused: "こまこまのこまり" + pudding: "Pudding" + delete: "削除" + loading: "読み込み中" + ok: "わかった" + update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" + my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" +common/views/components/connect-failed.vue: + title: "サーバーに接続できません" + description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" + thanks: "いつもMisskeyをご利用いただきありがとうございます。" + troubleshoot: "トラブルシュート" +common/views/components/connect-failed.troubleshooter.vue: + title: "トラブルシューティング" + network: "ネットワーク接続" + checking-network: "ネットワーク接続を確認中" + internet: "インターネット接続" + checking-internet: "インターネット接続を確認中" + server: "サーバー接続" + checking-server: "サーバー接続を確認中" + finding: "問題を調べています" + no-network: "ネットワークに接続されていません" + no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。" + no-internet: "インターネットに接続されていません" + no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。" + no-server: "Misskeyのサーバーに接続できません" + no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" + success: "Misskeyのサーバーに接続できました" + success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" +common/views/components/messaging.vue: + search-user: "ユーザーを探す" + you: "あなた" + no-history: "履歴はありません" +common/views/components/messaging-room.vue: + empty: "このユーザーと話したことはありません" + more: "もっと読む" + no-history: "これより過去の履歴はありません" + resize-form: "ドラッグしてフォームの広さを調整" + new-message: "新しいメッセージがあります" +common/views/components/messaging-room.form.vue: + input-message-here: "ここにメッセージを入力" + send: "送信" + attach-from-local: "PCからファイルを添付する" + attach-from-drive: "ドライブからファイルを添付する" +common/views/components/messaging-room.message.vue: + is-read: "既読" + deleted: "このメッセージは削除されました" +common/views/components/nav.vue: + about: "Misskeyについて" + stats: "統計" + status: "ステータス" + wiki: "Wiki" + donors: "ドナー" + repository: "リポジトリ" + develop: "開発者" + feedback: "フィードバック" +common/views/components/note-menu.vue: + favorite: "お気に入り" + pin: "ピン留め" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "「{}」に投票する" + vote-count: "{}票" + total-users: "{}人が投票" + vote: "投票する" + show-result: "結果を見る" + voted: "投票済み" +common/views/components/poll-editor.vue: + no-only-one-choice: "投票には、選択肢が最低2つ必要です" + choice-n: "選択肢{}" + remove: "この選択肢を削除" + add: "+選択肢を追加" + destroy: "投票を破棄" +common/views/components/reaction-picker.vue: + choose-reaction: "リアクションを選択" +common/views/components/signin.vue: + username: "ユーザー名" + password: "パスワード" + token: "トークン" + signing-in: "やってます..." + signin: "サインイン" +common/views/components/signup.vue: + username: "ユーザー名" + checking: "確認しています..." + available: "利用できます" + unavailable: "既に利用されています" + error: "通信エラー" + invalid-format: "a~z、A~Z、0~9、_が使えます" + too-short: "1文字以上でお願いします!" + too-long: "20文字以内でお願いします" + password: "パスワード" + password-placeholder: "8文字以上を推奨します" + weak-password: "弱いパスワード" + normal-password: "まあまあのパスワード" + strong-password: "強いパスワード" + retype: "再入力" + retype-placeholder: "確認のため再入力してください" + password-matched: "確認されました" + password-not-matched: "一致していません" + recaptcha: "認証" + create: "アカウント作成" + some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" +common/views/components/special-message.vue: + new-year: "Happy New Year!" + christmas: "Merry Christmas!" +common/views/components/stream-indicator.vue: + connecting: "接続中" + reconnecting: "再接続中" + connected: "接続完了" +common/views/components/twitter-setting.vue: + description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。" + connected-to: "次のTwitterアカウントに接続されています" + detail: "詳細..." + reconnect: "再接続する" + connect: "Twitterと接続する" + disconnect: "切断する" +common/views/components/uploader.vue: + waiting: "待機中" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "お知らせはありません" + have-a-nice-day: "良い一日を!" + next: "次" +common/views/widgets/donation.vue: + title: "寄付のお願い" + text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "写真はありません" +common/views/widgets/server.vue: + title: "サーバー情報" + toggle: "表示を切り替え" +desktop/views/components/activity.vue: + title: "アクティビティ" + toggle: "表示を切り替え" +desktop/views/components/calendar.vue: + title: "{1}年 {2}月" + prev: "前の月" + next: "次の月" + go: "クリックして時間遡行" +desktop/views/components/drive-window.vue: + used: "使用中" + drive: "ドライブ" +desktop/views/components/drive.file.vue: + avatar: "アイコン" + banner: "バナー" + contextmenu: + rename: "名前を変更" + copy-url: "URLをコピー" + download: "ダウンロード" + else-files: "その他..." + set-as-avatar: "アイコンに設定" + set-as-banner: "バナーに設定" + open-in-app: "アプリで開く" + add-app: "アプリを追加" + rename-file: "ファイル名の変更" + input-new-file-name: "新しいファイル名を入力してください" + copied: "コピー完了" + copied-url-to-clipboard: "URLをクリップボードにコピーしました" +desktop/views/components/drive.folder.vue: + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + contextmenu: + move-to-this-folder: "このフォルダへ移動" + show-in-new-window: "新しいウィンドウで表示" + rename: "名前を変更" + rename-folder: "フォルダ名の変更" + input-new-folder-name: "新しいフォルダ名を入力してください" +desktop/views/components/drive.nav-folder.vue: + drive: "ドライブ" +desktop/views/components/drive.vue: + search: "検索" + load-more: "もっと読み込む" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "ドライブには何もありません。" + empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" + empty-folder: "このフォルダーは空です" + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + url-upload: "URLアップロード" + url-of-file: "アップロードしたいファイルのURL" + url-upload-requested: "アップロードをリクエストしました" + may-take-time: "アップロードが完了するまで時間がかかる場合があります。" + create-folder: "フォルダー作成" + folder-name: "フォルダー名" + contextmenu: + create-folder: "フォルダーを作成" + upload: "ファイルをアップロード" + url-upload: "URLからアップロード" +desktop/views/components/messaging-window.vue: + title: "メッセージ" +desktop/views/components/notes.note.vue: + reposted-by: "{}がRenote" + reply: "返信" + renote: "Renote" + add-reaction: "リアクション" + detail: "詳細" +desktop/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +desktop/views/components/post-form.vue: + note-placeholder: "いまどうしてる?" + reply-placeholder: "この投稿への返信..." + quote-placeholder: "この投稿を引用..." + note: "投稿" + reply: "返信" + renote: "Renote" + posted: "投稿しました!" + replied: "返信しました!" + reposted: "Renoteしました!" + note-failed: "投稿に失敗しました" + reply-failed: "返信に失敗しました" + renote-failed: "Renoteに失敗しました" + posting: "投稿中" + attach-media-from-local: "PCからメディアを添付" + attach-media-from-drive: "ドライブからメディアを添付" + attach-cancel: "添付取り消し" + insert-a-kao: "v(‘ω’)v" + create-poll: "投票を作成" + text-remain: "残り{}文字" +desktop/views/components/post-form-window.vue: + note: "新規投稿" + reply: "返信" + attaches: "添付: {}メディア" + uploading-media: "{}個のメディアをアップロード中" +desktop/views/components/renote-form.vue: + quote: "引用する..." + cancel: "キャンセル" + renote: "Renote" + reposting: "しています..." + success: "Renoteしました!" + failure: "Renoteに失敗しました" +desktop/views/components/renote-form-window.vue: + title: "この投稿をRenoteしますか?" +desktop/views/components/settings.vue: + profile: "プロフィール" + notification: "通知" + apps: "アプリ" + mute: "ミュート" + drive: "ドライブ" + security: "セキュリティ" + password: "パスワード" + 2fa: "二段階認証" + other: "その他" + license: "ライセンス" +desktop/views/components/settings.2fa.vue: + intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" + detail: "詳細..." + url: "https://www.google.co.jp/intl/ja/landing/2step/" + caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。" + register: "デバイスを登録する" + already-registered: "既に設定は完了しています。" + unregister: "設定を解除" + unregistered: "二段階認証が無効になりました。" + enter-password: "パスワードを入力してください" + authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" + howtoinstall: "インストール方法はこちら" + scan: "次に、表示されているQRコードをスキャンします:" + done: "お使いのデバイスに表示されているトークンを入力して完了します:" + submit: "完了" + success: "設定が完了しました!" + failed: "設定に失敗しました。トークンに誤りがないかご確認ください。" + info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。" +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" + regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" + regenerate-token: "トークンを再生成" + enter-password: "パスワードを入力してください" +desktop/views/components/settings.app.vue: + no-apps: "連携しているアプリケーションはありません" +desktop/views/components/settings.mute.vue: + no-users: "ミュートしているユーザーはいません" +desktop/views/components/settings.password.vue: + reset: "パスワードを変更する" + enter-current-password: "現在のパスワードを入力してください" + enter-new-password: "新しいパスワードを入力してください" + enter-new-password-again: "もう一度新しいパスワードを入力してください" + not-match: "新しいパスワードが一致しません" + changed: "パスワードを変更しました" +desktop/views/components/settings.profile.vue: + avatar: "アイコン" + choice-avatar: "画像を選択" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + save: "保存" +desktop/views/components/ui.header.account.vue: + profile: "プロフィール" + drive: "ドライブ" + favorites: "お気に入り" + lists: "リスト" + customize: "カスタマイズ" + settings: "設定" + signout: "サインアウト" + dark: "闇に飲まれる" +desktop/views/components/ui.header.nav.vue: + home: "ホーム" + messaging: "メッセージ" + game: "ゲーム" +desktop/views/components/ui.header.notifications.vue: + title: "通知" +desktop/views/components/ui.header.post.vue: + post: "新規投稿" +desktop/views/components/ui.header.search.vue: + placeholder: "検索" +desktop/views/pages/note.vue: + prev: "前の投稿" + next: "次の投稿" +desktop/views/pages/selectdrive.vue: + title: "ファイルを選択してください" + ok: "決定" + cancel: "キャンセル" + upload: "PCからドライブにファイルをアップロード" +desktop/views/pages/user/user.followers-you-know.vue: + title: "知り合いのフォロワー" + loading: "読み込み中" + no-users: "知り合いのフォロワーはいません" +desktop/views/pages/user/user.friends.vue: + title: "よく話すユーザー" + loading: "読み込み中" + no-users: "よく話すユーザーはいません" +desktop/views/pages/user/user.header.vue: + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +desktop/views/pages/user/user.home.vue: + last-used-at: "最終アクセス" +desktop/views/pages/user/user.photos.vue: + title: "フォト" + loading: "読み込み中" + no-photos: "写真はありません" +desktop/views/pages/user/user.profile.vue: + follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" + mute: "ミュートする" + muted: "ミュートしています" + unmute: "ミュート解除" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "通知" + settings: "通知の設定" +desktop/views/widgets/polls.vue: + title: "投票" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/post-form.vue: + title: "投稿" + note: "投稿" + placeholder: "いまどうしてる?" +desktop/views/widgets/trends.vue: + title: "トレンド" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/users.vue: + title: "おすすめユーザー" + refresh: "他を見る" + no-one: "いません!" +desktop/views/widgets/channel.vue: + title: "チャンネル" + settings: "ウィジェットの設定" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "ドライブ" + used: "使用中" + folder-count: "フォルダ" + count-separator: "、" + file-count: "ファイル" + load-more: "もっと読み込む" + nothing-in-drive: "ドライブには何もありません" + folder-is-empty: "このフォルダは空です" +mobile/views/components/drive-file-chooser.vue: + select-file: "ファイルを選択" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "フォルダーを選択" +mobile/views/components/drive.file-detail.vue: + download: "ダウンロード" + rename: "名前を変更" + move: "移動" + hash: "ハッシュ (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "フォロー" + unfollow: "フォロー解除" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "返信" + reaction: "リアクション" +mobile/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +mobile/views/components/post-form.vue: + submit: "投稿" + reply-placeholder: "この投稿への返信..." + note-placeholder: "いまどうしてる?" +mobile/views/components/sub-note-content.vue: + media-count: "{}個のメディア" + poll: "投票" +mobile/views/components/timeline.vue: + empty: "投稿がありません" + load-more: "もっと" +mobile/views/components/ui.nav.vue: + home: "ホーム" + notifications: "通知" + messaging: "メッセージ" + search: "検索" + drive: "ドライブ" + settings: "設定" + about: "Misskeyについて" +mobile/views/components/user-timeline.vue: + no-notes: "このユーザーは投稿していないようです。" + no-notes-with-media: "メディア付き投稿はありません。" + load-more: "もっと" +mobile/views/components/users-list.vue: + all: "すべて" + known: "知り合い" + load-more: "もっと" +mobile/views/pages/drive.vue: + drive: "ドライブ" +mobile/views/pages/followers.vue: + followers-of: "{}のフォロワー" +mobile/views/pages/following.vue: + following-of: "{}のフォロー" +mobile/views/pages/home.vue: + timeline: "タイムライン" +mobile/views/pages/messaging.vue: + messaging: "メッセージ" +mobile/views/pages/messaging-room.vue: + messaging: "メッセージ" +mobile/views/pages/note.vue: + title: "投稿" + prev: "前の投稿" + next: "次の投稿" +mobile/views/pages/notifications.vue: + notifications: "通知" + read-all: "すべての通知を既読にしますか?" +mobile/views/pages/profile-setting.vue: + title: "プロフィール設定" + will-be-published: "これらのプロフィールは公開されます。" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + avatar: "アイコン" + banner: "バナー" + avatar-saved: "アイコンを保存しました" + banner-saved: "バナーを保存しました" + set-avatar: "アイコンを選択する" + set-banner: "バナーを選択する" + save: "保存" + saved: "プロフィールを保存しました" +mobile/views/pages/search.vue: + search: "検索" + empty: "「{}」に関する投稿は見つかりませんでした。" +mobile/views/pages/selectdrive.vue: + select-file: "ファイルを選択" +mobile/views/pages/settings.vue: + signed-in-as: "{}としてサインイン中" + profile: "プロフィール" + twitter: "Twitter連携" + signin-history: "サインイン履歴" + settings: "設定" + signout: "サインアウト" +mobile/views/pages/user.vue: + follows-you: "フォローされています" + following: "フォロー" + followers: "フォロワー" + notes: "投稿" + overview: "概要" + timeline: "タイムライン" + media: "メディア" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +mobile/views/pages/user/home.vue: + recent-notes: "最近の投稿" + images: "画像" + activity: "アクティビティ" + keywords: "キーワード" + domains: "頻出ドメイン" + frequently-replied-users: "よく会話するユーザー" + followers-you-know: "知り合いのフォロワー" + last-used-at: "最終ログイン" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "読み込み中" + no-users: "知り合いのユーザーはいません" +mobile/views/pages/user/home.friends.vue: + loading: "読み込み中" + no-users: "よく会話するユーザーはいません" +mobile/views/pages/user/home.notes.vue: + loading: "読み込み中" + no-notes: "投稿はありません" +mobile/views/pages/user/home.photos.vue: + loading: "読み込み中" + no-photos: "写真はありません" +docs: + edit-this-page-on-github: "間違いや改善点を見つけましたか?" + edit-this-page-on-github-link: "このページをGitHubで編集" + api: + entities: + properties: "プロパティ" + endpoints: + params: "パラメータ" + res: "レスポンス" + props: + name: "名前" + type: "型" + optional: "オプション" + description: "説明" + yes: "はい" + no: "いいえ" diff --git a/locales/pl.yml b/locales/pl.yml new file mode 100644 index 0000000000..3474a7355a --- /dev/null +++ b/locales/pl.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Dziel się zawartością z innymi korzystając z Misskey." + time: + unknown: "nieznany" + future: "w przyszłości" + just_now: "teraz" + seconds_ago: "{} sek. temu" + minutes_ago: "{} min. temu" + hours_ago: "{} godz. temu" + days_ago: "{} dni temu" + weeks_ago: "{} tyg. temu" + months_ago: "{} mies. temu" + years_ago: "{} lat temu" + weekday-short: + sunday: "N" + monday: "Pn" + tuesday: "W" + wednesday: "Ś" + thursday: "C" + friday: "P" + satruday: "S" + reactions: + like: "Lubię" + love: "Kocham" + laugh: "Śmieszne" + hmm: "Hmm…?" + surprise: "Wow" + congrats: "Gratuluję!" + angry: "Wściekły" + confused: "Zmieszany" + pudding: "Pudding" + delete: "Usuń" + loading: "Ładowanie" + ok: "OK" + update-available: "Nowa wersja Misskey jest dostępna ({newer}, obecna to {current}). Odśwież stronę, aby zastosować aktualizację." + my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany." +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." + thanks: "Dziękujemy za korzystanie z Misskey." + troubleshoot: "Rozwiązywanie problemów" +common/views/components/connect-failed.troubleshooter.vue: + title: "Rozwiązywanie problemów" + network: "Połączenie z siecią" + checking-network: "Sprawdzanie połączenia sieciowego" + internet: "Połączenie z Internetem" + checking-internet: "Sprawdzanie połączenia z Internetem" + server: "Połączenie z serwerem" + checking-server: "Sprawdzanie połączenia z serwerem" + finding: "Wyszukiwanie problemu" + no-network: "Brak połączenia z siecią" + no-network-desc: "Upewnij się, że jesteś połączony z siecią." + no-internet: "Brak połączenia z Internetem" + no-internet-desc: "Upewnij się, że jesteś połączony z Internetem." + no-server: "Nie udało się połączyć z serwerem" + no-server-desc: "Połączenie sieciowe działa, ale nie udało się połączyć z serwerem Misskey. Możliwe że serwer nie działa lub trwają prace konserwacyjne, spróbuj ponownie później." + success: "Pomyślnie połączono z serwerem Misskey" + success-desc: "Wygląda na to, że udało się połączyć. Odśwież stronę." + flush: "Wyczyść pamięć podręczną" + set-version: "Określ wersję" +common/views/components/messaging.vue: + search-user: "Znajdź użytkownika" + you: "Ty" + no-history: "Brak historii" +common/views/components/messaging-room.vue: + empty: "Brak konwersacji" + more: "Więcej" + no-history: "Brak dalszej historii" + resize-form: "Przeciągnij aby zmienić rozmiar" + new-message: "Nowa wiadomość" +common/views/components/messaging-room.form.vue: + input-message-here: "Wprowadź wiadomość tutaj" + send: "Wyślij" + attach-from-local: "Załącz pliki z komputera" + attach-from-drive: "Załącz pliki z dysku" +common/views/components/messaging-room.message.vue: + is-read: "Przeczytano" + deleted: "Wiadomość została usunięta" +common/views/components/nav.vue: + about: "O stronie" + stats: "Statystyki" + status: "Stan" + wiki: "Wiki" + donors: "Sponsorzy" + repository: "Repozytorium" + develop: "Autorzy" + feedback: "Podziel się opinią" +common/views/components/note-menu.vue: + favorite: "Dodaj do ulubionych" + pin: "Przypnij do profilu" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "Zagłosuj na '{}'" + vote-count: "{} głosów" + total-users: "{} głosujących" + vote: "Zagłosuj" + show-result: "Pokaż wyniki" + voted: "Zagłosowano" +common/views/components/poll-editor.vue: + no-only-one-choice: "Musisz wprowadzić dwie lub więcej opcji." + choice-n: "Opcja {}" + remove: "Usuń tą opcję" + add: "+ Dodaj opcję" + destroy: "Usuń ankietę" +common/views/components/reaction-picker.vue: + choose-reaction: "Wybierz reakcję" +common/views/components/signin.vue: + username: "Nazwa użytkownika" + password: "Hasło" + token: "Token" + signing-in: "Logowanie…" + signin: "Zaloguj" +common/views/components/signup.vue: + username: "Nazwa użytkownika" + checking: "Sprawdzanie…" + available: "Dostępna" + unavailable: "Niedostępna" + error: "Błąd sieci" + invalid-format: "Może zawierać litery, cyfry i myślniki." + too-short: "Wprowadź przynajmniej jeden znak" + too-long: "Nazwa nie może zawierać więcej niż 20 znaków" + password: "Hasło" + password-placeholder: "Zalecamy korzystanie z hasła zawierającego przynajmniej 8 znaków." + weak-password: "Słabe" + normal-password: "Średnie" + strong-password: "Silne" + retype: "Powtórz hasło" + retype-placeholder: "Potwierdź hasło" + password-matched: "OK" + password-not-matched: "Hasła nie zgadzają się" + recaptcha: "Weryfikacja" + create: "Utwórz konto" + some-error: "Nie udało się utworzyć konta. Spróbuj ponownie." +common/views/components/special-message.vue: + new-year: "Szczęśliwego nowego roku!" + christmas: "Wesołych świąt!" +common/views/components/stream-indicator.vue: + connecting: "Łączenie" + reconnecting: "Ponowne łączenie" + connected: "Połączono" +common/views/components/twitter-setting.vue: + description: "Jeżeli połączysz konto Twittera z kontem Misskey, informacje z Twittera będą widoczne na Twoim profilu i będziesz mógł logować się z użyciem Twittera." + connected-to: "Jesteś połączony z tym kontem Twittera" + detail: "Szczegóły…" + reconnect: "Połącz ponownie" + connect: "Połącz z kontem Twittera" + disconnect: "Rozłącz" +common/views/components/uploader.vue: + waiting: "Oczekiwanie" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "Brak transmisji" + have-a-nice-day: "Miłego dnia!" + next: "Dalej" +common/views/widgets/donation.vue: + title: "Dotacje" + text: "Aby utrzymywać Misskey, płacimy za domenę, serwery i nie tylko… Nie zarabiamy na tym, więc byłoby nam miło, gdybyśmy uzyskali od Ciebie dotację. Jeżeli jesteś zainteresowany, skontaktuj się z {}. Dziękujemy za wsparcie!" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "Brak zdjęć" +common/views/widgets/server.vue: + title: "Informacje o serwerze" + toggle: "Przełącz widok" +desktop/views/components/activity.vue: + title: "Aktywność" + toggle: "Przełącz widok" +desktop/views/components/calendar.vue: + title: "{1} / {2}" + prev: "Poprzedni miesiąc" + next: "Następny miesiąc" + go: "Naciśnij, aby przejść" +desktop/views/components/drive-window.vue: + used: "wykorzystane" + drive: "Dysk" +desktop/views/components/drive.file.vue: + avatar: "Awatar" + banner: "Baner" + contextmenu: + rename: "Zmień nazwę" + copy-url: "Skopiuj adres" + download: "Pobierz" + else-files: "Inne" + set-as-avatar: "Ustaw jako awatar" + set-as-banner: "Ustaw jako baner" + open-in-app: "Otwórz w aplikacji" + add-app: "Dodaj aplikację" + rename-file: "Zmień nazwę pliku" + input-new-file-name: "Wprowadź nową nazwę" + copied: "Skopiowano" + copied-url-to-clipboard: "Skopiowano adres do schowka" +desktop/views/components/drive.folder.vue: + unable-to-process: "Nie udało się ukończyć działania." + circular-reference-detected: "Docelowy katalog znajduje się w katalogu, który chcesz przenieść." + unhandled-error: "Nieznany błąd" + contextmenu: + move-to-this-folder: "Przenieś do tego katalogu" + show-in-new-window: "Otwórz w nowym oknie" + rename: "Zmień nazwę" + rename-folder: "Zmień nazwę katalogu" + input-new-folder-name: "Wprowadź nową nazwę" +desktop/views/components/drive.nav-folder.vue: + drive: "Dysk" +desktop/views/components/drive.vue: + search: "Szukaj" + load-more: "Załaduj więcej" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "Twój dysk jest pusty" + empty-drive-description: "Możesz wysłać plik klikając prawym przyciskiem myszy i wybierając \"Wyślij plik\" lub przeciągnąć plik i upuścić w tym oknie." + empty-folder: "Ten katalog jest posty" + unable-to-process: "Nie udało się dokończyć działania." + circular-reference-detected: "Ten katalog znajduje się w katalogu, który chcesz przenieść." + unhandled-error: "Nieznany błąd" + url-upload: "Wyślij z adresu" + url-of-file: "Adres URL pliku, który chcesz wysłać" + url-upload-requested: "Zaplanowano wysyłanie" + may-take-time: "Może trochę potrwać, zanim wysyłanie zostanie ukończone." + create-folder: "Utwórz katalog" + folder-name: "Nazwa katalogu" + contextmenu: + create-folder: "Utwórz katalog" + upload: "Wyślij plik" + url-upload: "Wyślij z adresu URL" +desktop/views/components/messaging-window.vue: + title: "Wiadomości" +desktop/views/components/notes.note.vue: + reposted-by: "Udostępniono przez {}" + reply: "Odpowiedz" + renote: "Przeredaguj" + add-reaction: "Dodaj reakcję" + detail: "Pokaż szczegóły" +desktop/views/components/notifications.vue: + more: "Więcej" + empty: "Brak powiadomień" +desktop/views/components/post-form.vue: + note-placeholder: "Co się dzieje?" + reply-placeholder: "Odpowiedz na ten wpis…" + quote-placeholder: "Zacytuj ten wpis…" + note: "Wyślij" + reply: "Odpowiedz" + renote: "Przeredaguj" + posted: "Opublikowano!" + replied: "Odpowiedziano!" + reposted: "Udostępniono!" + note-failed: "Nie udało się wysłać" + reply-failed: "Nie udało się odpowiedzieć" + renote-failed: "Nie udało się przeredagować" + posting: "Wysyłanie" + attach-media-from-local: "Załącz zawartość multimedialną z komputera" + attach-media-from-drive: "Załącz zawartość multimedialną z dysku" + attach-cancel: "Usuń załącznik" + insert-a-kao: "v(‘ω’)v" + create-poll: "Utwórz ankietę" + text-remain: "pozostałe znaki: {}" +desktop/views/components/post-form-window.vue: + note: "Nowy wpis" + reply: "Odpowiedz" + attaches: "{} załączników multimedialnych" + uploading-media: "Wysyłanie {} treści multimedialnych" +desktop/views/components/renote-form.vue: + quote: "Cytuj…" + cancel: "Anuluj" + renote: "Przeredaguj" + reposting: "Udostępnianie…" + success: "Udostępniono!" + failure: "Nie udało się przeredagować" +desktop/views/components/renote-form-window.vue: + title: "Czy na pewno chcesz przeredagować ten wpis?" +desktop/views/components/settings.vue: + profile: "Profil" + notification: "Powiadomienia" + apps: "Aplikacje" + mute: "Wyciszanie" + drive: "Dysk" + security: "Bezpieczeństwo" + password: "Hasło" + 2fa: "Uwierzytelnianie dwuetapowe" + other: "Inne" + license: "Licencja" +desktop/views/components/settings.2fa.vue: + intro: "Jeżeli skonfigurujesz uwierzytelnianie dwuetapowe, aby zablokować się będziesz potrzebować (oprócz hasła) kodu ze skonfigurowanego urządzenia (np. smartfonu), co zwiększy bezpieczeństwo." + detail: "Zobacz szczegóły…" + url: "https://www.google.com/landing/2step/" + caution: "Jeżeli stracisz dostęp do urządzenia, nie będziesz mógł logować się do Misskey!" + register: "Zarejestruj urządzenie" + already-registered: "Urządzenie jest już zarejestrowane" + unregister: "Wyłącz" + unregistered: "Wyłączono uwierzytelnianie dwuetapowe." + enter-password: "Wprowadź hasło" + authenticator: "Na początek musisz zainstalować Google Authenticator na swoim urządzeniu:" + howtoinstall: "Jak zainstalować" + scan: "Później, zeskanuje ten kod QR:" + done: "Wprowadź token wyświetlony na Twoim urządzeniu:" + submit: "Wyślij" + success: "Pomyślnie ukończono konfigurację!" + failed: "Nie udało się skonfigurować uwierzytelniania dwuetapowego, upewnij się że wprowadziłeś prawidłowy token." + info: "Od teraz, wprowadzaj token wyświetlany na urządzeniu przy każdym logowaniu do Misskey." +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "Nie pokazuj tego tokenu osobom trzecim (nie wprowadzaj go nigdzie indziej), aby konto nie trafiło w niepowołane ręce." + regeneration-of-token: "W przypadku wycieku tokenu, możesz wygenerować nowy." + regenerate-token: "Wygeneruj nowy token" + enter-password: "Wprowadź hasło" +desktop/views/components/settings.app.vue: + no-apps: "Brak zautoryzowanych aplikacji" +desktop/views/components/settings.mute.vue: + no-users: "Brak wyciszonych użytkowników" +desktop/views/components/settings.password.vue: + reset: "Zmień hasło" + enter-current-password: "Wprowadź obecne hasło" + enter-new-password: "Wprowadź nowe hasło" + enter-new-password-again: "Wprowadź ponownie nowe hasło" + not-match: "Nowe hasła nie pasują do siebie" + changed: "Pomyślnie zmieniono hasło" +desktop/views/components/settings.profile.vue: + avatar: "Awatar" + choice-avatar: "Wybierz obraz" + name: "Nazwa" + location: "Lokalizacja" + description: "Opis" + birthday: "Data urodzenia" + save: "Aktualizuj profil" +desktop/views/components/ui.header.account.vue: + profile: "Twój profil" + drive: "Dysk" + favorites: "Ulubione" + lists: "Listy" + customize: "Dostosuj" + settings: "Ustawienia" + signout: "Wyloguj się" + dark: "Sprowadź ciemność" +desktop/views/components/ui.header.nav.vue: + home: "Strona główna" + messaging: "Wiadomości" + game: "Gra" +desktop/views/components/ui.header.notifications.vue: + title: "Powiadomienia" +desktop/views/components/ui.header.post.vue: + post: "Utwórz nowy wpis" +desktop/views/components/ui.header.search.vue: + placeholder: "Szukaj" +desktop/views/pages/note.vue: + prev: "Poprzedni wpis" + next: "Następny wpis" +desktop/views/pages/selectdrive.vue: + title: "Wybierz plik(i)" + ok: "OK" + cancel: "Anuluj" + upload: "Wyślij pliki z Twojego komputera" +desktop/views/pages/user/user.followers-you-know.vue: + title: "Śledzący których znasz" + loading: "Ładowanie" + no-users: "Brak użytkowników" +desktop/views/pages/user/user.friends.vue: + title: "Najbardziej aktywni" + loading: "Ładowanie" + no-users: "Brak użytkowników" +desktop/views/pages/user/user.header.vue: + is-suspended: "To konto zostało zawieszone." + is-remote: "To jest użytkownik zdalnej instancji, informacje mogą nie być w pełni dokładne." + view-remote: "Wyświetl dokładne informacje" +desktop/views/pages/user/user.home.vue: + last-used-at: "Ostatnio aktywny: " +desktop/views/pages/user/user.photos.vue: + title: "Zdjęcia" + loading: "Ładowanie" + no-photos: "Brak zdjęć" +desktop/views/pages/user/user.profile.vue: + follows-you: "Śledzi Cię" + stalk: "Stalkuj" + stalking: "Stalkujesz" + unstalk: "Przestań stalkować" + mute: "Wycisz" + muted: "Wyciszyłeś" + unmute: "Cofnij wyciszenie" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "Powiadomienia" + settings: "Ustawienia" +desktop/views/widgets/polls.vue: + title: "Ankiety" + refresh: "Pokaż inne" + nothing: "Pusto" +desktop/views/widgets/post-form.vue: + title: "Wpis" + note: "Wpis" + placeholder: "Co się dzieje?" +desktop/views/widgets/trends.vue: + title: "Na czasie" + refresh: "Pokaż inne" + nothing: "Pusto" +desktop/views/widgets/users.vue: + title: "Polecani użytkownicy" + refresh: "Pokaż innych" + no-one: "Pusto" +desktop/views/widgets/channel.vue: + title: "Kanał" + settings: "Ustawienia widżetu" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "Dysk" + used: "użyto" + folder-count: "Katalog(i)" + count-separator: ", " + file-count: "Plik(i)" + load-more: "Załaduj więcej" + nothing-in-drive: "Pusto" + folder-is-empty: "Ten katalog jest pusty" +mobile/views/components/drive-file-chooser.vue: + select-file: "Wybierz plik" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "Wybierz katalog" +mobile/views/components/drive.file-detail.vue: + download: "Pobierz" + rename: "Zmień nazwę" + move: "Przenieś" + hash: "Hash (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "Śledź" + unfollow: "Przestań śledzić" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "Odpowiedz" + reaction: "Reakcja" +mobile/views/components/notifications.vue: + more: "Więcej" + empty: "Brak powiadomień" +mobile/views/components/post-form.vue: + submit: "Wyślij" + reply-placeholder: "Odpowiedź na ten wpis…" + note-placeholder: "Co się dzieje?" +mobile/views/components/sub-note-content.vue: + media-count: "{} zawartości multimedialnej" + poll: "Ankieta" +mobile/views/components/timeline.vue: + empty: "Brak wpisów" + load-more: "Więcej" +mobile/views/components/ui.nav.vue: + home: "Strona główna" + notifications: "Powiadomienia" + messaging: "Wiadomości" + search: "Szukaj" + drive: "Dysk" + settings: "Ustawienia" + about: "O Misskey" +mobile/views/components/user-timeline.vue: + no-notes: "Wygląda na to, że ten użytkownik nie opublikował jeszcze niczego" + no-notes-with-media: "Brak wpisów z zawartością multimedialną" + load-more: "Więcej" +mobile/views/components/users-list.vue: + all: "Wszyscy" + known: "Znasz" + load-more: "Więcej" +mobile/views/pages/drive.vue: + drive: "Dysk" +mobile/views/pages/followers.vue: + followers-of: "Śledzący {}" +mobile/views/pages/following.vue: + following-of: "Śledzeni przez {}" +mobile/views/pages/home.vue: + timeline: "Oś czasu" +mobile/views/pages/messaging.vue: + messaging: "Wiadomości" +mobile/views/pages/messaging-room.vue: + messaging: "Wiadomości" +mobile/views/pages/note.vue: + title: "Wyślij" + prev: "Poprzedni wpis" + next: "Następny wpis" +mobile/views/pages/notifications.vue: + notifications: "Powiadomienia" + read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?" +mobile/views/pages/profile-setting.vue: + title: "Ustawienia profilu" + will-be-published: "Te ustawienia profilu zostaną zaktualizowane." + name: "Nazwa" + location: "Lokalizacja" + description: "Opis" + birthday: "Data urodzenia" + avatar: "Awatar" + banner: "Baner" + avatar-saved: "Pomyślnie zaktualizowano awatar" + banner-saved: "Pomyślnie zaktualizowano baner" + set-avatar: "Wybierz awatar" + set-banner: "Wybierz baner" + save: "Zapisz" + saved: "Pomyślnie zaktualizowano profil" +mobile/views/pages/search.vue: + search: "Szukaj" + empty: "Nie znaleziono wpisów zawierających '{}'" +mobile/views/pages/selectdrive.vue: + select-file: "Wybierz plik" +mobile/views/pages/settings.vue: + signed-in-as: "Zalogowany jako {}" + profile: "Profil" + twitter: "Twitter連携" + signin-history: "Historia logowań" + settings: "Ustawienia" + signout: "Wyloguj" +mobile/views/pages/user.vue: + follows-you: "Śledzi Cię" + following: "Śledzeni" + followers: "Śledzący" + notes: "Wpisy" + overview: "Przegląd" + timeline: "Oś czasu" + media: "Zawartość multimedialna" + is-suspended: "To konto zostało zablokowane" + is-remote: "To jest użytkownik zdalnej instancji, informacje mogą nie być w pełni dokładne." + view-remote: "Wyświetl dokładne informacje" +mobile/views/pages/user/home.vue: + recent-notes: "Ostatnie wpisy" + images: "Zdjęcia" + activity: "Aktywność" + keywords: "Słowa kluczowe" + domains: "Domeny" + frequently-replied-users: "Często aktywni użytkownicy" + followers-you-know: "Śledzący których znasz" + last-used-at: "Ostatnio aktywny:" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "Ładowanie" + no-users: "Brak użytkowników" +mobile/views/pages/user/home.friends.vue: + loading: "Ładowanie" + no-users: "Brak użytkowników" +mobile/views/pages/user/home.notes.vue: + loading: "Ładowanie" + no-notes: "Brak wpisów" +mobile/views/pages/user/home.photos.vue: + loading: "Ładowanie" + no-photos: "Brak zdjęć" +docs: + edit-this-page-on-github: "Znalazłeś błąd lub chcesz pomóc w tworzeniu dokumentacji?" + edit-this-page-on-github-link: "Edytuj stronę na GitHubie!" + api: + entities: + properties: "Właściwości" + endpoints: + params: "Parametry" + res: "Odpowiedź" + props: + name: "Nazwa" + type: "Rodzaj" + optional: "Nieobowiązkowy" + description: "Opis" + yes: "Tak" + no: "Nie" diff --git a/locales/ru.yml b/locales/ru.yml new file mode 100644 index 0000000000..b6e7898a8e --- /dev/null +++ b/locales/ru.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Misskeyで皆と共有しよう。" + time: + unknown: "なぞのじかん" + future: "未来" + just_now: "たった今" + seconds_ago: "{}秒前" + minutes_ago: "{}分前" + hours_ago: "{}時間前" + days_ago: "{}日前" + weeks_ago: "{}週間前" + months_ago: "{}ヶ月前" + years_ago: "{}年前" + weekday-short: + sunday: "日" + monday: "月" + tuesday: "火" + wednesday: "水" + thursday: "木" + friday: "金" + satruday: "土" + reactions: + like: "いいね" + love: "しゅき" + laugh: "笑" + hmm: "ふぅ~む" + surprise: "わお" + congrats: "おめでとう" + angry: "おこ" + confused: "こまこまのこまり" + pudding: "Pudding" + delete: "削除" + loading: "読み込み中" + ok: "わかった" + update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" + my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" +common/views/components/connect-failed.vue: + title: "サーバーに接続できません" + description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" + thanks: "いつもMisskeyをご利用いただきありがとうございます。" + troubleshoot: "トラブルシュート" +common/views/components/connect-failed.troubleshooter.vue: + title: "トラブルシューティング" + network: "ネットワーク接続" + checking-network: "ネットワーク接続を確認中" + internet: "インターネット接続" + checking-internet: "インターネット接続を確認中" + server: "サーバー接続" + checking-server: "サーバー接続を確認中" + finding: "問題を調べています" + no-network: "ネットワークに接続されていません" + no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。" + no-internet: "インターネットに接続されていません" + no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。" + no-server: "Misskeyのサーバーに接続できません" + no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" + success: "Misskeyのサーバーに接続できました" + success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" +common/views/components/messaging.vue: + search-user: "ユーザーを探す" + you: "あなた" + no-history: "履歴はありません" +common/views/components/messaging-room.vue: + empty: "このユーザーと話したことはありません" + more: "もっと読む" + no-history: "これより過去の履歴はありません" + resize-form: "ドラッグしてフォームの広さを調整" + new-message: "新しいメッセージがあります" +common/views/components/messaging-room.form.vue: + input-message-here: "ここにメッセージを入力" + send: "送信" + attach-from-local: "PCからファイルを添付する" + attach-from-drive: "ドライブからファイルを添付する" +common/views/components/messaging-room.message.vue: + is-read: "既読" + deleted: "このメッセージは削除されました" +common/views/components/nav.vue: + about: "Misskeyについて" + stats: "統計" + status: "ステータス" + wiki: "Wiki" + donors: "ドナー" + repository: "リポジトリ" + develop: "開発者" + feedback: "フィードバック" +common/views/components/note-menu.vue: + favorite: "お気に入り" + pin: "ピン留め" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "「{}」に投票する" + vote-count: "{}票" + total-users: "{}人が投票" + vote: "投票する" + show-result: "結果を見る" + voted: "投票済み" +common/views/components/poll-editor.vue: + no-only-one-choice: "投票には、選択肢が最低2つ必要です" + choice-n: "選択肢{}" + remove: "この選択肢を削除" + add: "+選択肢を追加" + destroy: "投票を破棄" +common/views/components/reaction-picker.vue: + choose-reaction: "リアクションを選択" +common/views/components/signin.vue: + username: "ユーザー名" + password: "パスワード" + token: "トークン" + signing-in: "やってます..." + signin: "サインイン" +common/views/components/signup.vue: + username: "ユーザー名" + checking: "確認しています..." + available: "利用できます" + unavailable: "既に利用されています" + error: "通信エラー" + invalid-format: "a~z、A~Z、0~9、_が使えます" + too-short: "1文字以上でお願いします!" + too-long: "20文字以内でお願いします" + password: "パスワード" + password-placeholder: "8文字以上を推奨します" + weak-password: "弱いパスワード" + normal-password: "まあまあのパスワード" + strong-password: "強いパスワード" + retype: "再入力" + retype-placeholder: "確認のため再入力してください" + password-matched: "確認されました" + password-not-matched: "一致していません" + recaptcha: "認証" + create: "アカウント作成" + some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" +common/views/components/special-message.vue: + new-year: "Happy New Year!" + christmas: "Merry Christmas!" +common/views/components/stream-indicator.vue: + connecting: "接続中" + reconnecting: "再接続中" + connected: "接続完了" +common/views/components/twitter-setting.vue: + description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。" + connected-to: "次のTwitterアカウントに接続されています" + detail: "詳細..." + reconnect: "再接続する" + connect: "Twitterと接続する" + disconnect: "切断する" +common/views/components/uploader.vue: + waiting: "待機中" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "お知らせはありません" + have-a-nice-day: "良い一日を!" + next: "次" +common/views/widgets/donation.vue: + title: "寄付のお願い" + text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "写真はありません" +common/views/widgets/server.vue: + title: "サーバー情報" + toggle: "表示を切り替え" +desktop/views/components/activity.vue: + title: "アクティビティ" + toggle: "表示を切り替え" +desktop/views/components/calendar.vue: + title: "{1}年 {2}月" + prev: "前の月" + next: "次の月" + go: "クリックして時間遡行" +desktop/views/components/drive-window.vue: + used: "使用中" + drive: "ドライブ" +desktop/views/components/drive.file.vue: + avatar: "アイコン" + banner: "バナー" + contextmenu: + rename: "名前を変更" + copy-url: "URLをコピー" + download: "ダウンロード" + else-files: "その他..." + set-as-avatar: "アイコンに設定" + set-as-banner: "バナーに設定" + open-in-app: "アプリで開く" + add-app: "アプリを追加" + rename-file: "ファイル名の変更" + input-new-file-name: "新しいファイル名を入力してください" + copied: "コピー完了" + copied-url-to-clipboard: "URLをクリップボードにコピーしました" +desktop/views/components/drive.folder.vue: + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + contextmenu: + move-to-this-folder: "このフォルダへ移動" + show-in-new-window: "新しいウィンドウで表示" + rename: "名前を変更" + rename-folder: "フォルダ名の変更" + input-new-folder-name: "新しいフォルダ名を入力してください" +desktop/views/components/drive.nav-folder.vue: + drive: "ドライブ" +desktop/views/components/drive.vue: + search: "検索" + load-more: "もっと読み込む" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "ドライブには何もありません。" + empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" + empty-folder: "このフォルダーは空です" + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + url-upload: "URLアップロード" + url-of-file: "アップロードしたいファイルのURL" + url-upload-requested: "アップロードをリクエストしました" + may-take-time: "アップロードが完了するまで時間がかかる場合があります。" + create-folder: "フォルダー作成" + folder-name: "フォルダー名" + contextmenu: + create-folder: "フォルダーを作成" + upload: "ファイルをアップロード" + url-upload: "URLからアップロード" +desktop/views/components/messaging-window.vue: + title: "メッセージ" +desktop/views/components/notes.note.vue: + reposted-by: "{}がRenote" + reply: "返信" + renote: "Renote" + add-reaction: "リアクション" + detail: "詳細" +desktop/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +desktop/views/components/post-form.vue: + note-placeholder: "いまどうしてる?" + reply-placeholder: "この投稿への返信..." + quote-placeholder: "この投稿を引用..." + note: "投稿" + reply: "返信" + renote: "Renote" + posted: "投稿しました!" + replied: "返信しました!" + reposted: "Renoteしました!" + note-failed: "投稿に失敗しました" + reply-failed: "返信に失敗しました" + renote-failed: "Renoteに失敗しました" + posting: "投稿中" + attach-media-from-local: "PCからメディアを添付" + attach-media-from-drive: "ドライブからメディアを添付" + attach-cancel: "添付取り消し" + insert-a-kao: "v(‘ω’)v" + create-poll: "投票を作成" + text-remain: "残り{}文字" +desktop/views/components/post-form-window.vue: + note: "新規投稿" + reply: "返信" + attaches: "添付: {}メディア" + uploading-media: "{}個のメディアをアップロード中" +desktop/views/components/renote-form.vue: + quote: "引用する..." + cancel: "キャンセル" + renote: "Renote" + reposting: "しています..." + success: "Renoteしました!" + failure: "Renoteに失敗しました" +desktop/views/components/renote-form-window.vue: + title: "この投稿をRenoteしますか?" +desktop/views/components/settings.vue: + profile: "プロフィール" + notification: "通知" + apps: "アプリ" + mute: "ミュート" + drive: "ドライブ" + security: "セキュリティ" + password: "パスワード" + 2fa: "二段階認証" + other: "その他" + license: "ライセンス" +desktop/views/components/settings.2fa.vue: + intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" + detail: "詳細..." + url: "https://www.google.co.jp/intl/ja/landing/2step/" + caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。" + register: "デバイスを登録する" + already-registered: "既に設定は完了しています。" + unregister: "設定を解除" + unregistered: "二段階認証が無効になりました。" + enter-password: "パスワードを入力してください" + authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" + howtoinstall: "インストール方法はこちら" + scan: "次に、表示されているQRコードをスキャンします:" + done: "お使いのデバイスに表示されているトークンを入力して完了します:" + submit: "完了" + success: "設定が完了しました!" + failed: "設定に失敗しました。トークンに誤りがないかご確認ください。" + info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。" +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" + regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" + regenerate-token: "トークンを再生成" + enter-password: "パスワードを入力してください" +desktop/views/components/settings.app.vue: + no-apps: "連携しているアプリケーションはありません" +desktop/views/components/settings.mute.vue: + no-users: "ミュートしているユーザーはいません" +desktop/views/components/settings.password.vue: + reset: "パスワードを変更する" + enter-current-password: "現在のパスワードを入力してください" + enter-new-password: "新しいパスワードを入力してください" + enter-new-password-again: "もう一度新しいパスワードを入力してください" + not-match: "新しいパスワードが一致しません" + changed: "パスワードを変更しました" +desktop/views/components/settings.profile.vue: + avatar: "アイコン" + choice-avatar: "画像を選択" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + save: "保存" +desktop/views/components/ui.header.account.vue: + profile: "プロフィール" + drive: "ドライブ" + favorites: "お気に入り" + lists: "リスト" + customize: "カスタマイズ" + settings: "設定" + signout: "サインアウト" + dark: "闇に飲まれる" +desktop/views/components/ui.header.nav.vue: + home: "ホーム" + messaging: "メッセージ" + game: "ゲーム" +desktop/views/components/ui.header.notifications.vue: + title: "通知" +desktop/views/components/ui.header.post.vue: + post: "新規投稿" +desktop/views/components/ui.header.search.vue: + placeholder: "検索" +desktop/views/pages/note.vue: + prev: "前の投稿" + next: "次の投稿" +desktop/views/pages/selectdrive.vue: + title: "ファイルを選択してください" + ok: "決定" + cancel: "キャンセル" + upload: "PCからドライブにファイルをアップロード" +desktop/views/pages/user/user.followers-you-know.vue: + title: "知り合いのフォロワー" + loading: "読み込み中" + no-users: "知り合いのフォロワーはいません" +desktop/views/pages/user/user.friends.vue: + title: "よく話すユーザー" + loading: "読み込み中" + no-users: "よく話すユーザーはいません" +desktop/views/pages/user/user.header.vue: + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +desktop/views/pages/user/user.home.vue: + last-used-at: "最終アクセス" +desktop/views/pages/user/user.photos.vue: + title: "フォト" + loading: "読み込み中" + no-photos: "写真はありません" +desktop/views/pages/user/user.profile.vue: + follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" + mute: "ミュートする" + muted: "ミュートしています" + unmute: "ミュート解除" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "通知" + settings: "通知の設定" +desktop/views/widgets/polls.vue: + title: "投票" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/post-form.vue: + title: "投稿" + note: "投稿" + placeholder: "いまどうしてる?" +desktop/views/widgets/trends.vue: + title: "トレンド" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/users.vue: + title: "おすすめユーザー" + refresh: "他を見る" + no-one: "いません!" +desktop/views/widgets/channel.vue: + title: "チャンネル" + settings: "ウィジェットの設定" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "ドライブ" + used: "使用中" + folder-count: "フォルダ" + count-separator: "、" + file-count: "ファイル" + load-more: "もっと読み込む" + nothing-in-drive: "ドライブには何もありません" + folder-is-empty: "このフォルダは空です" +mobile/views/components/drive-file-chooser.vue: + select-file: "ファイルを選択" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "フォルダーを選択" +mobile/views/components/drive.file-detail.vue: + download: "ダウンロード" + rename: "名前を変更" + move: "移動" + hash: "ハッシュ (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "フォロー" + unfollow: "フォロー解除" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "返信" + reaction: "リアクション" +mobile/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +mobile/views/components/post-form.vue: + submit: "投稿" + reply-placeholder: "この投稿への返信..." + note-placeholder: "いまどうしてる?" +mobile/views/components/sub-note-content.vue: + media-count: "{}個のメディア" + poll: "投票" +mobile/views/components/timeline.vue: + empty: "投稿がありません" + load-more: "もっと" +mobile/views/components/ui.nav.vue: + home: "ホーム" + notifications: "通知" + messaging: "メッセージ" + search: "検索" + drive: "ドライブ" + settings: "設定" + about: "Misskeyについて" +mobile/views/components/user-timeline.vue: + no-notes: "このユーザーは投稿していないようです。" + no-notes-with-media: "メディア付き投稿はありません。" + load-more: "もっと" +mobile/views/components/users-list.vue: + all: "すべて" + known: "知り合い" + load-more: "もっと" +mobile/views/pages/drive.vue: + drive: "ドライブ" +mobile/views/pages/followers.vue: + followers-of: "{}のフォロワー" +mobile/views/pages/following.vue: + following-of: "{}のフォロー" +mobile/views/pages/home.vue: + timeline: "タイムライン" +mobile/views/pages/messaging.vue: + messaging: "メッセージ" +mobile/views/pages/messaging-room.vue: + messaging: "メッセージ" +mobile/views/pages/note.vue: + title: "投稿" + prev: "前の投稿" + next: "次の投稿" +mobile/views/pages/notifications.vue: + notifications: "通知" + read-all: "すべての通知を既読にしますか?" +mobile/views/pages/profile-setting.vue: + title: "プロフィール設定" + will-be-published: "これらのプロフィールは公開されます。" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + avatar: "アイコン" + banner: "バナー" + avatar-saved: "アイコンを保存しました" + banner-saved: "バナーを保存しました" + set-avatar: "アイコンを選択する" + set-banner: "バナーを選択する" + save: "保存" + saved: "プロフィールを保存しました" +mobile/views/pages/search.vue: + search: "検索" + empty: "「{}」に関する投稿は見つかりませんでした。" +mobile/views/pages/selectdrive.vue: + select-file: "ファイルを選択" +mobile/views/pages/settings.vue: + signed-in-as: "{}としてサインイン中" + profile: "プロフィール" + twitter: "Twitter連携" + signin-history: "サインイン履歴" + settings: "設定" + signout: "サインアウト" +mobile/views/pages/user.vue: + follows-you: "フォローされています" + following: "フォロー" + followers: "フォロワー" + notes: "投稿" + overview: "概要" + timeline: "タイムライン" + media: "メディア" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +mobile/views/pages/user/home.vue: + recent-notes: "最近の投稿" + images: "画像" + activity: "アクティビティ" + keywords: "キーワード" + domains: "頻出ドメイン" + frequently-replied-users: "よく会話するユーザー" + followers-you-know: "知り合いのフォロワー" + last-used-at: "最終ログイン" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "読み込み中" + no-users: "知り合いのユーザーはいません" +mobile/views/pages/user/home.friends.vue: + loading: "読み込み中" + no-users: "よく会話するユーザーはいません" +mobile/views/pages/user/home.notes.vue: + loading: "読み込み中" + no-notes: "投稿はありません" +mobile/views/pages/user/home.photos.vue: + loading: "読み込み中" + no-photos: "写真はありません" +docs: + edit-this-page-on-github: "間違いや改善点を見つけましたか?" + edit-this-page-on-github-link: "このページをGitHubで編集" + api: + entities: + properties: "プロパティ" + endpoints: + params: "パラメータ" + res: "レスポンス" + props: + name: "名前" + type: "型" + optional: "オプション" + description: "説明" + yes: "はい" + no: "いいえ" diff --git a/locales/zh.yml b/locales/zh.yml new file mode 100644 index 0000000000..b6e7898a8e --- /dev/null +++ b/locales/zh.yml @@ -0,0 +1,550 @@ +--- +common: + misskey: "Misskeyで皆と共有しよう。" + time: + unknown: "なぞのじかん" + future: "未来" + just_now: "たった今" + seconds_ago: "{}秒前" + minutes_ago: "{}分前" + hours_ago: "{}時間前" + days_ago: "{}日前" + weeks_ago: "{}週間前" + months_ago: "{}ヶ月前" + years_ago: "{}年前" + weekday-short: + sunday: "日" + monday: "月" + tuesday: "火" + wednesday: "水" + thursday: "木" + friday: "金" + satruday: "土" + reactions: + like: "いいね" + love: "しゅき" + laugh: "笑" + hmm: "ふぅ~む" + surprise: "わお" + congrats: "おめでとう" + angry: "おこ" + confused: "こまこまのこまり" + pudding: "Pudding" + delete: "削除" + loading: "読み込み中" + ok: "わかった" + update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" + my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" +common/views/components/connect-failed.vue: + title: "サーバーに接続できません" + description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" + thanks: "いつもMisskeyをご利用いただきありがとうございます。" + troubleshoot: "トラブルシュート" +common/views/components/connect-failed.troubleshooter.vue: + title: "トラブルシューティング" + network: "ネットワーク接続" + checking-network: "ネットワーク接続を確認中" + internet: "インターネット接続" + checking-internet: "インターネット接続を確認中" + server: "サーバー接続" + checking-server: "サーバー接続を確認中" + finding: "問題を調べています" + no-network: "ネットワークに接続されていません" + no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。" + no-internet: "インターネットに接続されていません" + no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。" + no-server: "Misskeyのサーバーに接続できません" + no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" + success: "Misskeyのサーバーに接続できました" + success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" +common/views/components/messaging.vue: + search-user: "ユーザーを探す" + you: "あなた" + no-history: "履歴はありません" +common/views/components/messaging-room.vue: + empty: "このユーザーと話したことはありません" + more: "もっと読む" + no-history: "これより過去の履歴はありません" + resize-form: "ドラッグしてフォームの広さを調整" + new-message: "新しいメッセージがあります" +common/views/components/messaging-room.form.vue: + input-message-here: "ここにメッセージを入力" + send: "送信" + attach-from-local: "PCからファイルを添付する" + attach-from-drive: "ドライブからファイルを添付する" +common/views/components/messaging-room.message.vue: + is-read: "既読" + deleted: "このメッセージは削除されました" +common/views/components/nav.vue: + about: "Misskeyについて" + stats: "統計" + status: "ステータス" + wiki: "Wiki" + donors: "ドナー" + repository: "リポジトリ" + develop: "開発者" + feedback: "フィードバック" +common/views/components/note-menu.vue: + favorite: "お気に入り" + pin: "ピン留め" + remote: "投稿元で見る" +common/views/components/poll.vue: + vote-to: "「{}」に投票する" + vote-count: "{}票" + total-users: "{}人が投票" + vote: "投票する" + show-result: "結果を見る" + voted: "投票済み" +common/views/components/poll-editor.vue: + no-only-one-choice: "投票には、選択肢が最低2つ必要です" + choice-n: "選択肢{}" + remove: "この選択肢を削除" + add: "+選択肢を追加" + destroy: "投票を破棄" +common/views/components/reaction-picker.vue: + choose-reaction: "リアクションを選択" +common/views/components/signin.vue: + username: "ユーザー名" + password: "パスワード" + token: "トークン" + signing-in: "やってます..." + signin: "サインイン" +common/views/components/signup.vue: + username: "ユーザー名" + checking: "確認しています..." + available: "利用できます" + unavailable: "既に利用されています" + error: "通信エラー" + invalid-format: "a~z、A~Z、0~9、_が使えます" + too-short: "1文字以上でお願いします!" + too-long: "20文字以内でお願いします" + password: "パスワード" + password-placeholder: "8文字以上を推奨します" + weak-password: "弱いパスワード" + normal-password: "まあまあのパスワード" + strong-password: "強いパスワード" + retype: "再入力" + retype-placeholder: "確認のため再入力してください" + password-matched: "確認されました" + password-not-matched: "一致していません" + recaptcha: "認証" + create: "アカウント作成" + some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" +common/views/components/special-message.vue: + new-year: "Happy New Year!" + christmas: "Merry Christmas!" +common/views/components/stream-indicator.vue: + connecting: "接続中" + reconnecting: "再接続中" + connected: "接続完了" +common/views/components/twitter-setting.vue: + description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。" + connected-to: "次のTwitterアカウントに接続されています" + detail: "詳細..." + reconnect: "再接続する" + connect: "Twitterと接続する" + disconnect: "切断する" +common/views/components/uploader.vue: + waiting: "待機中" +common/views/widgets/broadcast.vue: + fetching: "確認中" + no-broadcasts: "お知らせはありません" + have-a-nice-day: "良い一日を!" + next: "次" +common/views/widgets/donation.vue: + title: "寄付のお願い" + text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。" +common/views/widgets/photo-stream.vue: + title: "フォトストリーム" + no-photos: "写真はありません" +common/views/widgets/server.vue: + title: "サーバー情報" + toggle: "表示を切り替え" +desktop/views/components/activity.vue: + title: "アクティビティ" + toggle: "表示を切り替え" +desktop/views/components/calendar.vue: + title: "{1}年 {2}月" + prev: "前の月" + next: "次の月" + go: "クリックして時間遡行" +desktop/views/components/drive-window.vue: + used: "使用中" + drive: "ドライブ" +desktop/views/components/drive.file.vue: + avatar: "アイコン" + banner: "バナー" + contextmenu: + rename: "名前を変更" + copy-url: "URLをコピー" + download: "ダウンロード" + else-files: "その他..." + set-as-avatar: "アイコンに設定" + set-as-banner: "バナーに設定" + open-in-app: "アプリで開く" + add-app: "アプリを追加" + rename-file: "ファイル名の変更" + input-new-file-name: "新しいファイル名を入力してください" + copied: "コピー完了" + copied-url-to-clipboard: "URLをクリップボードにコピーしました" +desktop/views/components/drive.folder.vue: + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + contextmenu: + move-to-this-folder: "このフォルダへ移動" + show-in-new-window: "新しいウィンドウで表示" + rename: "名前を変更" + rename-folder: "フォルダ名の変更" + input-new-folder-name: "新しいフォルダ名を入力してください" +desktop/views/components/drive.nav-folder.vue: + drive: "ドライブ" +desktop/views/components/drive.vue: + search: "検索" + load-more: "もっと読み込む" + empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" + empty-drive: "ドライブには何もありません。" + empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" + empty-folder: "このフォルダーは空です" + unable-to-process: "操作を完了できません" + circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" + unhandled-error: "不明なエラー" + url-upload: "URLアップロード" + url-of-file: "アップロードしたいファイルのURL" + url-upload-requested: "アップロードをリクエストしました" + may-take-time: "アップロードが完了するまで時間がかかる場合があります。" + create-folder: "フォルダー作成" + folder-name: "フォルダー名" + contextmenu: + create-folder: "フォルダーを作成" + upload: "ファイルをアップロード" + url-upload: "URLからアップロード" +desktop/views/components/messaging-window.vue: + title: "メッセージ" +desktop/views/components/notes.note.vue: + reposted-by: "{}がRenote" + reply: "返信" + renote: "Renote" + add-reaction: "リアクション" + detail: "詳細" +desktop/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +desktop/views/components/post-form.vue: + note-placeholder: "いまどうしてる?" + reply-placeholder: "この投稿への返信..." + quote-placeholder: "この投稿を引用..." + note: "投稿" + reply: "返信" + renote: "Renote" + posted: "投稿しました!" + replied: "返信しました!" + reposted: "Renoteしました!" + note-failed: "投稿に失敗しました" + reply-failed: "返信に失敗しました" + renote-failed: "Renoteに失敗しました" + posting: "投稿中" + attach-media-from-local: "PCからメディアを添付" + attach-media-from-drive: "ドライブからメディアを添付" + attach-cancel: "添付取り消し" + insert-a-kao: "v(‘ω’)v" + create-poll: "投票を作成" + text-remain: "残り{}文字" +desktop/views/components/post-form-window.vue: + note: "新規投稿" + reply: "返信" + attaches: "添付: {}メディア" + uploading-media: "{}個のメディアをアップロード中" +desktop/views/components/renote-form.vue: + quote: "引用する..." + cancel: "キャンセル" + renote: "Renote" + reposting: "しています..." + success: "Renoteしました!" + failure: "Renoteに失敗しました" +desktop/views/components/renote-form-window.vue: + title: "この投稿をRenoteしますか?" +desktop/views/components/settings.vue: + profile: "プロフィール" + notification: "通知" + apps: "アプリ" + mute: "ミュート" + drive: "ドライブ" + security: "セキュリティ" + password: "パスワード" + 2fa: "二段階認証" + other: "その他" + license: "ライセンス" +desktop/views/components/settings.2fa.vue: + intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" + detail: "詳細..." + url: "https://www.google.co.jp/intl/ja/landing/2step/" + caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。" + register: "デバイスを登録する" + already-registered: "既に設定は完了しています。" + unregister: "設定を解除" + unregistered: "二段階認証が無効になりました。" + enter-password: "パスワードを入力してください" + authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" + howtoinstall: "インストール方法はこちら" + scan: "次に、表示されているQRコードをスキャンします:" + done: "お使いのデバイスに表示されているトークンを入力して完了します:" + submit: "完了" + success: "設定が完了しました!" + failed: "設定に失敗しました。トークンに誤りがないかご確認ください。" + info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。" +desktop/views/components/settings.api.vue: + intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。" + caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。" + regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。" + regenerate-token: "トークンを再生成" + enter-password: "パスワードを入力してください" +desktop/views/components/settings.app.vue: + no-apps: "連携しているアプリケーションはありません" +desktop/views/components/settings.mute.vue: + no-users: "ミュートしているユーザーはいません" +desktop/views/components/settings.password.vue: + reset: "パスワードを変更する" + enter-current-password: "現在のパスワードを入力してください" + enter-new-password: "新しいパスワードを入力してください" + enter-new-password-again: "もう一度新しいパスワードを入力してください" + not-match: "新しいパスワードが一致しません" + changed: "パスワードを変更しました" +desktop/views/components/settings.profile.vue: + avatar: "アイコン" + choice-avatar: "画像を選択" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + save: "保存" +desktop/views/components/ui.header.account.vue: + profile: "プロフィール" + drive: "ドライブ" + favorites: "お気に入り" + lists: "リスト" + customize: "カスタマイズ" + settings: "設定" + signout: "サインアウト" + dark: "闇に飲まれる" +desktop/views/components/ui.header.nav.vue: + home: "ホーム" + messaging: "メッセージ" + game: "ゲーム" +desktop/views/components/ui.header.notifications.vue: + title: "通知" +desktop/views/components/ui.header.post.vue: + post: "新規投稿" +desktop/views/components/ui.header.search.vue: + placeholder: "検索" +desktop/views/pages/note.vue: + prev: "前の投稿" + next: "次の投稿" +desktop/views/pages/selectdrive.vue: + title: "ファイルを選択してください" + ok: "決定" + cancel: "キャンセル" + upload: "PCからドライブにファイルをアップロード" +desktop/views/pages/user/user.followers-you-know.vue: + title: "知り合いのフォロワー" + loading: "読み込み中" + no-users: "知り合いのフォロワーはいません" +desktop/views/pages/user/user.friends.vue: + title: "よく話すユーザー" + loading: "読み込み中" + no-users: "よく話すユーザーはいません" +desktop/views/pages/user/user.header.vue: + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +desktop/views/pages/user/user.home.vue: + last-used-at: "最終アクセス" +desktop/views/pages/user/user.photos.vue: + title: "フォト" + loading: "読み込み中" + no-photos: "写真はありません" +desktop/views/pages/user/user.profile.vue: + follows-you: "フォローされています" + stalk: "ストークする" + stalking: "ストーキングしています" + unstalk: "ストーク解除" + mute: "ミュートする" + muted: "ミュートしています" + unmute: "ミュート解除" +desktop/views/widgets/messaging.vue: + title: "メッセージ" +desktop/views/widgets/notifications.vue: + title: "通知" + settings: "通知の設定" +desktop/views/widgets/polls.vue: + title: "投票" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/post-form.vue: + title: "投稿" + note: "投稿" + placeholder: "いまどうしてる?" +desktop/views/widgets/trends.vue: + title: "トレンド" + refresh: "他を見る" + nothing: "ありません!" +desktop/views/widgets/users.vue: + title: "おすすめユーザー" + refresh: "他を見る" + no-one: "いません!" +desktop/views/widgets/channel.vue: + title: "チャンネル" + settings: "ウィジェットの設定" + get-started: "右上の歯車をクリックして受信するチャンネルを指定してください" +mobile/views/components/drive.vue: + drive: "ドライブ" + used: "使用中" + folder-count: "フォルダ" + count-separator: "、" + file-count: "ファイル" + load-more: "もっと読み込む" + nothing-in-drive: "ドライブには何もありません" + folder-is-empty: "このフォルダは空です" +mobile/views/components/drive-file-chooser.vue: + select-file: "ファイルを選択" +mobile/views/components/drive-folder-chooser.vue: + select-folder: "フォルダーを選択" +mobile/views/components/drive.file-detail.vue: + download: "ダウンロード" + rename: "名前を変更" + move: "移動" + hash: "ハッシュ (md5)" + exif: "EXIF" +mobile/views/components/follow-button.vue: + follow: "フォロー" + unfollow: "フォロー解除" +mobile/views/components/note.vue: + reposted-by: "{}がRenote" +mobile/views/components/note-detail.vue: + reply: "返信" + reaction: "リアクション" +mobile/views/components/notifications.vue: + more: "もっと見る" + empty: "ありません!" +mobile/views/components/post-form.vue: + submit: "投稿" + reply-placeholder: "この投稿への返信..." + note-placeholder: "いまどうしてる?" +mobile/views/components/sub-note-content.vue: + media-count: "{}個のメディア" + poll: "投票" +mobile/views/components/timeline.vue: + empty: "投稿がありません" + load-more: "もっと" +mobile/views/components/ui.nav.vue: + home: "ホーム" + notifications: "通知" + messaging: "メッセージ" + search: "検索" + drive: "ドライブ" + settings: "設定" + about: "Misskeyについて" +mobile/views/components/user-timeline.vue: + no-notes: "このユーザーは投稿していないようです。" + no-notes-with-media: "メディア付き投稿はありません。" + load-more: "もっと" +mobile/views/components/users-list.vue: + all: "すべて" + known: "知り合い" + load-more: "もっと" +mobile/views/pages/drive.vue: + drive: "ドライブ" +mobile/views/pages/followers.vue: + followers-of: "{}のフォロワー" +mobile/views/pages/following.vue: + following-of: "{}のフォロー" +mobile/views/pages/home.vue: + timeline: "タイムライン" +mobile/views/pages/messaging.vue: + messaging: "メッセージ" +mobile/views/pages/messaging-room.vue: + messaging: "メッセージ" +mobile/views/pages/note.vue: + title: "投稿" + prev: "前の投稿" + next: "次の投稿" +mobile/views/pages/notifications.vue: + notifications: "通知" + read-all: "すべての通知を既読にしますか?" +mobile/views/pages/profile-setting.vue: + title: "プロフィール設定" + will-be-published: "これらのプロフィールは公開されます。" + name: "名前" + location: "場所" + description: "自己紹介" + birthday: "誕生日" + avatar: "アイコン" + banner: "バナー" + avatar-saved: "アイコンを保存しました" + banner-saved: "バナーを保存しました" + set-avatar: "アイコンを選択する" + set-banner: "バナーを選択する" + save: "保存" + saved: "プロフィールを保存しました" +mobile/views/pages/search.vue: + search: "検索" + empty: "「{}」に関する投稿は見つかりませんでした。" +mobile/views/pages/selectdrive.vue: + select-file: "ファイルを選択" +mobile/views/pages/settings.vue: + signed-in-as: "{}としてサインイン中" + profile: "プロフィール" + twitter: "Twitter連携" + signin-history: "サインイン履歴" + settings: "設定" + signout: "サインアウト" +mobile/views/pages/user.vue: + follows-you: "フォローされています" + following: "フォロー" + followers: "フォロワー" + notes: "投稿" + overview: "概要" + timeline: "タイムライン" + media: "メディア" + is-suspended: "このユーザーは凍結されています。" + is-remote: "このユーザーはリモートユーザーです。" + view-remote: "正確な情報を見る" +mobile/views/pages/user/home.vue: + recent-notes: "最近の投稿" + images: "画像" + activity: "アクティビティ" + keywords: "キーワード" + domains: "頻出ドメイン" + frequently-replied-users: "よく会話するユーザー" + followers-you-know: "知り合いのフォロワー" + last-used-at: "最終ログイン" +mobile/views/pages/user/home.followers-you-know.vue: + loading: "読み込み中" + no-users: "知り合いのユーザーはいません" +mobile/views/pages/user/home.friends.vue: + loading: "読み込み中" + no-users: "よく会話するユーザーはいません" +mobile/views/pages/user/home.notes.vue: + loading: "読み込み中" + no-notes: "投稿はありません" +mobile/views/pages/user/home.photos.vue: + loading: "読み込み中" + no-photos: "写真はありません" +docs: + edit-this-page-on-github: "間違いや改善点を見つけましたか?" + edit-this-page-on-github-link: "このページをGitHubで編集" + api: + entities: + properties: "プロパティ" + endpoints: + params: "パラメータ" + res: "レスポンス" + props: + name: "名前" + type: "型" + optional: "オプション" + description: "説明" + yes: "はい" + no: "いいえ" diff --git a/migration/2.0.0.js b/migration/2.0.0.js new file mode 100644 index 0000000000..eb8f5730c7 --- /dev/null +++ b/migration/2.0.0.js @@ -0,0 +1,57 @@ +// for Node.js interpret + +const chalk = require('chalk'); +const sequential = require('promise-sequential'); + +const { default: User } = require('../built/models/user'); +const { default: DriveFile } = require('../built/models/drive-file'); + +async function main() { + const promiseGens = []; + + const count = await DriveFile.count({}); + + let prev; + + for (let i = 0; i < count; i++) { + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const file = await DriveFile.findOne(prev ? { + _id: { $gt: prev._id } + } : {}, { + sort: { + _id: 1 + } + }); + + prev = file; + + const user = await User.findOne({ _id: file.metadata.userId }); + + DriveFile.update({ + _id: file._id + }, { + $set: { + 'metadata._user': { + host: user.host + } + } + }).then(() => { + res([i, file]); + }).catch(rej); + }); + + promise.then(([i, file]) => { + console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`); + }); + + return promise; + }); + } + + return await sequential(promiseGens); +} + +main().then(() => { + console.log('ALL DONE'); +}).catch(console.error); diff --git a/migration/2.4.0.js b/migration/2.4.0.js new file mode 100644 index 0000000000..e9584a1dfc --- /dev/null +++ b/migration/2.4.0.js @@ -0,0 +1,71 @@ +// for Node.js interpret + +const chalk = require('chalk'); +const sequential = require('promise-sequential'); + +const { default: User } = require('../built/models/user'); +const { default: DriveFile } = require('../built/models/drive-file'); + +async function main() { + const promiseGens = []; + + const count = await User.count({}); + + let prev; + + for (let i = 0; i < count; i++) { + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const user = await User.findOne(prev ? { + _id: { $gt: prev._id } + } : {}, { + sort: { + _id: 1 + } + }); + + prev = user; + + const set = {}; + + if (user.avatarId != null) { + const file = await DriveFile.findOne({ _id: user.avatarId }); + + if (file && file.metadata.properties.avgColor) { + set.avatarColor = file.metadata.properties.avgColor; + } + } + + if (user.bannerId != null) { + const file = await DriveFile.findOne({ _id: user.bannerId }); + + if (file && file.metadata.properties.avgColor) { + set.bannerColor = file.metadata.properties.avgColor; + } + } + + if (Object.keys(set).length === 0) return res([i, user]); + + User.update({ + _id: user._id + }, { + $set: set + }).then(() => { + res([i, user]); + }).catch(rej); + }); + + promise.then(([i, user]) => { + console.log(chalk`{gray ${i}} {green done: {bold ${user._id}} @${user.username}}`); + }); + + return promise; + }); + } + + return await sequential(promiseGens); +} + +main().then(() => { + console.log('ALL DONE'); +}).catch(console.error); diff --git a/package.json b/package.json index 2fcd68b1cb..544dda6036 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,9 @@ { "name": "misskey", "author": "syuilo ", - "version": "0.0.4970", + "version": "2.6.2", + "clientVersion": "1.0.5260", "codename": "nighthike", - "license": "MIT", - "description": "A miniblog-based SNS", - "bugs": "https://github.com/syuilo/misskey/issues", - "repository": "https://github.com/syuilo/misskey.git", "main": "./built/index.js", "private": true, "scripts": { @@ -34,7 +31,7 @@ "@prezzemolo/rap": "0.1.2", "@prezzemolo/zip": "0.0.3", "@types/bcryptjs": "2.4.1", - "@types/chai": "4.1.2", + "@types/chai": "4.1.3", "@types/chai-http": "3.0.4", "@types/debug": "0.0.30", "@types/deep-equal": "1.0.1", @@ -54,22 +51,25 @@ "@types/js-yaml": "3.11.1", "@types/koa": "2.0.45", "@types/koa-bodyparser": "4.2.0", - "@types/koa-compress": "^2.0.8", + "@types/koa-compress": "2.0.8", "@types/koa-favicon": "2.0.19", + "@types/koa-logger": "3.1.0", "@types/koa-mount": "3.0.1", "@types/koa-multer": "1.0.0", - "@types/koa-router": "7.0.27", + "@types/koa-router": "7.0.28", "@types/koa-send": "4.1.1", + "@types/koa-views": "^2.0.3", "@types/koa__cors": "2.2.2", "@types/kue": "0.11.8", "@types/license-checker": "15.0.0", "@types/mkdirp": "0.5.2", - "@types/mocha": "5.0.0", - "@types/mongodb": "3.0.12", + "@types/mocha": "5.2.0", + "@types/mongodb": "3.0.15", "@types/monk": "6.0.0", "@types/ms": "0.7.30", - "@types/node": "9.6.4", + "@types/node": "9.6.6", "@types/nopt": "3.0.29", + "@types/parse5": "^3.0.0", "@types/pug": "2.0.4", "@types/qrcode": "0.8.1", "@types/ratelimiter": "2.1.28", @@ -78,10 +78,11 @@ "@types/request-promise-native": "1.0.14", "@types/rimraf": "2.0.2", "@types/seedrandom": "2.4.27", + "@types/single-line-log": "^1.1.0", "@types/speakeasy": "2.0.2", "@types/tmp": "0.0.33", "@types/uuid": "3.4.3", - "@types/webpack": "4.1.3", + "@types/webpack": "4.1.4", "@types/webpack-stream": "3.2.10", "@types/websocket": "0.0.38", "@types/ws": "4.0.2", @@ -90,10 +91,10 @@ "autwh": "0.1.0", "bcryptjs": "2.4.3", "bootstrap-vue": "2.0.0-rc.6", - "cafy": "3.2.1", + "cafy": "8.0.0", "chai": "4.1.2", "chai-http": "4.0.0", - "chalk": "2.3.2", + "chalk": "2.4.1", "crc-32": "1.2.0", "css-loader": "0.28.11", "debug": "3.1.0", @@ -102,12 +103,12 @@ "diskusage": "0.2.4", "dompurify": "1.0.3", "elasticsearch": "14.2.2", - "element-ui": "2.3.3", + "element-ui": "2.3.6", "emojilib": "2.2.12", "escape-regexp": "0.0.1", "eslint": "4.19.1", - "eslint-plugin-vue": "4.4.0", - "eventemitter3": "3.0.1", + "eslint-plugin-vue": "4.5.0", + "eventemitter3": "3.1.0", "exif-js": "2.3.0", "file-loader": "1.1.11", "file-type": "7.6.0", @@ -118,7 +119,7 @@ "gulp-htmlmin": "4.0.0", "gulp-imagemin": "4.1.0", "gulp-mocha": "5.0.0", - "gulp-pug": "4.0.0", + "gulp-pug": "4.0.1", "gulp-rename": "1.2.2", "gulp-replace": "0.6.1", "gulp-sourcemaps": "2.6.4", @@ -129,42 +130,47 @@ "gulp-util": "3.0.8", "hard-source-webpack-plugin": "0.6.4", "highlight.js": "9.12.0", - "html-minifier": "3.5.14", + "html-minifier": "3.5.15", "http-signature": "1.2.0", "inquirer": "5.2.0", "is-root": "2.0.0", "is-url": "1.2.4", "js-yaml": "3.11.0", - "jsdom": "11.7.0", - "koa": "2.5.0", + "jsdom": "11.9.0", + "koa": "2.5.1", "koa-bodyparser": "4.2.0", - "koa-compress": "^2.0.0", + "koa-compress": "3.0.0", "koa-favicon": "2.0.1", - "koa-json-body": "^5.3.0", + "koa-json-body": "5.3.0", + "koa-logger": "3.2.0", "koa-mount": "3.0.0", "koa-multer": "1.0.2", "koa-router": "7.4.0", "koa-send": "4.1.3", + "koa-slow": "2.1.0", + "koa-views": "^6.1.4", "kue": "0.11.6", "license-checker": "18.0.0", "loader-utils": "1.1.0", "mecab-async": "0.1.2", "mkdirp": "0.5.1", - "mocha": "5.0.5", + "mocha": "5.1.1", "moji": "0.5.1", - "mongodb": "3.0.6", + "mongodb": "3.0.7", "monk": "6.0.5", "ms": "2.1.1", "nan": "2.10.0", - "node-sass": "4.8.3", - "node-sass-json-importer": "3.1.6", + "node-sass": "4.9.0", + "node-sass-json-importer": "3.2.0", "nopt": "4.0.1", "nprogress": "0.2.0", "object-assign-deep": "0.4.0", "on-build-webpack": "0.1.0", "os-utils": "0.0.14", + "parse5": "^4.0.0", "progress-bar-webpack-plugin": "1.11.0", "prominence": "0.2.0", + "promise-sequential": "^1.1.1", "pug": "2.0.3", "punycode": "2.1.0", "qrcode": "1.2.0", @@ -177,41 +183,43 @@ "rimraf": "2.6.2", "rndstr": "1.0.0", "s-age": "1.1.2", - "sass-loader": "6.0.7", + "sass-loader": "7.0.1", "seedrandom": "2.4.3", + "single-line-log": "^1.1.2", "speakeasy": "2.0.0", - "style-loader": "0.20.3", + "style-loader": "0.21.0", "stylus": "0.54.5", "stylus-loader": "3.0.2", - "summaly": "2.0.3", + "summaly": "2.0.4", "swagger-jsdoc": "1.9.7", "syuilo-password-strength": "0.0.1", "tcp-port-used": "0.1.2", "textarea-caret": "3.1.0", "tmp": "0.0.33", - "ts-loader": "4.1.0", - "ts-node": "5.0.1", + "ts-loader": "4.2.0", + "ts-node": "6.0.1", "tslint": "5.9.1", - "typescript": "2.8.1", - "typescript-eslint-parser": "14.0.0", + "typescript": "2.8.3", + "typescript-eslint-parser": "15.0.0", "uglify-es": "3.3.9", "url-loader": "1.0.1", "uuid": "3.2.1", "v-animate-css": "0.0.2", "vue": "2.5.16", "vue-cropperjs": "2.2.0", - "vue-js-modal": "1.3.12", - "vue-json-tree-view": "2.1.3", - "vue-loader": "14.2.2", + "vue-js-modal": "1.3.13", + "vue-json-tree-view": "2.1.4", + "vue-loader": "15.0.3", "vue-router": "3.0.1", "vue-template-compiler": "2.5.16", "vuedraggable": "2.16.0", + "vuex": "3.0.1", "web-push": "3.3.0", "webfinger.js": "2.6.6", - "webpack": "4.5.0", - "webpack-cli": "2.0.14", + "webpack": "4.6.0", + "webpack-cli": "2.0.15", "webpack-replace-loader": "1.3.0", - "websocket": "1.0.25", + "websocket": "1.0.26", "ws": "5.1.1", "xev": "2.0.0" } diff --git a/src/build/i18n.ts b/src/build/i18n.ts index a6cc6c38ff..6c0f633ad9 100644 --- a/src/build/i18n.ts +++ b/src/build/i18n.ts @@ -7,7 +7,7 @@ import locale from '../../locales'; export default class Replacer { private lang: string; - public pattern = /%i18n:([a-z_\-@\.\!]+?)%/g; + public pattern = /%i18n:([a-z0-9_\-@\.\!]+?)%/g; constructor(lang: string) { this.lang = lang; diff --git a/src/cafy-id.ts b/src/cafy-id.ts new file mode 100644 index 0000000000..310b1eb20b --- /dev/null +++ b/src/cafy-id.ts @@ -0,0 +1,29 @@ +import * as mongo from 'mongodb'; +import { Query } from 'cafy'; + +export const isAnId = x => mongo.ObjectID.isValid(x); +export const isNotAnId = x => !isAnId(x); + +/** + * ID + */ +export default class ID extends Query { + constructor() { + super(); + + this.transform = v => { + if (isAnId(v) && !mongo.ObjectID.prototype.isPrototypeOf(v)) { + return new mongo.ObjectID(v); + } else { + return v; + } + }; + + this.push(v => { + if (!mongo.ObjectID.prototype.isPrototypeOf(v) && isNotAnId(v)) { + return new Error('must-be-an-id'); + } + return true; + }); + } +} diff --git a/src/client/app/auth/views/form.vue b/src/client/app/auth/views/form.vue index b323907eb0..152b900429 100644 --- a/src/client/app/auth/views/form.vue +++ b/src/client/app/auth/views/form.vue @@ -94,13 +94,13 @@ export default Vue.extend({ margin 0 auto -38px auto border solid 5px #fff border-radius 100% - box-shadow 0 2px 2px rgba(0, 0, 0, 0.1) + box-shadow 0 2px 2px rgba(#000, 0.1) > .app padding 44px 16px 0 16px color #555 background #eee - box-shadow 0 2px 2px rgba(0, 0, 0, 0.1) inset + box-shadow 0 2px 2px rgba(#000, 0.1) inset &:after content '' diff --git a/src/client/app/auth/views/index.vue b/src/client/app/auth/views/index.vue index e1e1b265e1..0fcd9bfe53 100644 --- a/src/client/app/auth/views/index.vue +++ b/src/client/app/auth/views/index.vue @@ -94,7 +94,7 @@ export default Vue.extend({ margin 0 auto text-align center background #fff - box-shadow 0px 4px 16px rgba(0, 0, 0, 0.2) + box-shadow 0px 4px 16px rgba(#000, 0.2) > .fetching margin 0 diff --git a/src/client/app/base.pug b/src/client/app/base.pug index 32a95a6c99..c182fd6f64 100644 --- a/src/client/app/base.pug +++ b/src/client/app/base.pug @@ -1,3 +1,5 @@ +block vars + doctype html != '\n\n' @@ -9,9 +11,17 @@ html meta(name='application-name' content='Misskey') meta(name='theme-color' content=themeColor) meta(name='referrer' content='origin') + meta(property='og:site_name' content='Misskey') link(rel='manifest' href='/manifest.json') - title Misskey + title + block title + | Misskey + + block desc + meta(name='description' content='A SNS') + + block meta style include ./../../../built/client/assets/init.css diff --git a/src/client/app/boot.js b/src/client/app/boot.js index a0709842b9..35d02cf9c5 100644 --- a/src/client/app/boot.js +++ b/src/client/app/boot.js @@ -11,14 +11,12 @@ 'use strict'; -// Chromeで確認したことなのですが、constやletを用いたとしても -// グローバルなスコープで定数/変数を定義するとwindowのプロパティ -// としてそれがアクセスできるようになる訳ではありませんが、普通に -// コンソールから定数/変数名を入力するとアクセスできてしまいます。 -// ブロック内に入れてスコープを非グローバル化するとそれが防げます -// (Chrome以外のブラウザでは検証していません) -{ - if (localStorage.getItem('shouldFlush') == 'true') refresh(); +(function() { + // キャッシュ削除要求があれば従う + if (localStorage.getItem('shouldFlush') == 'true') { + refresh(); + return; + } // Get the current url information const url = new URL(location.href); @@ -62,6 +60,11 @@ app = isMobile ? 'mobile' : 'desktop'; } + // Dark/Light + if (localStorage.getItem('darkmode') == 'true') { + document.documentElement.setAttribute('data-darkmode', 'true'); + } + // Script version const ver = localStorage.getItem('v') || VERSION; @@ -72,11 +75,16 @@ const raw = (localStorage.getItem('useRawScript') == 'true' && isDebug) || ENV != 'production'; + // Get salt query + const salt = localStorage.getItem('salt') + ? '?salt=' + localStorage.getItem('salt') + : ''; + // Load an app script // Note: 'async' make it possible to load the script asyncly. // 'defer' make it possible to run the script when the dom loaded. const script = document.createElement('script'); - script.setAttribute('src', `/assets/${app}.${ver}.${lang}.${raw ? 'raw' : 'min'}.js`); + script.setAttribute('src', `/assets/${app}.${ver}.${lang}.${raw ? 'raw' : 'min'}.js${salt}`); script.setAttribute('async', 'true'); script.setAttribute('defer', 'true'); head.appendChild(script); @@ -97,8 +105,8 @@ const meta = await res.json(); // Compare versions - if (meta.version != ver) { - localStorage.setItem('v', meta.version); + if (meta.clientVersion != ver) { + localStorage.setItem('v', meta.clientVersion); alert( 'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' + @@ -112,6 +120,9 @@ function refresh() { localStorage.setItem('shouldFlush', 'false'); + // Random + localStorage.setItem('salt', Math.random().toString()); + // Clear cache (serive worker) try { navigator.serviceWorker.controller.postMessage('clear'); @@ -126,4 +137,4 @@ // Force reload location.reload(true); } -} +})(); diff --git a/src/client/app/common/define-widget.ts b/src/client/app/common/define-widget.ts index 7b98c0903f..0b2bc36566 100644 --- a/src/client/app/common/define-widget.ts +++ b/src/client/app/common/define-widget.ts @@ -18,61 +18,65 @@ export default function(data: { default: false } }, + computed: { id(): string { return this.widget.id; + }, + + props(): T { + return this.widget.data; } }, + data() { return { - props: data.props ? data.props() : {} as T, - bakedOldProps: null, - preventSave: false + bakedOldProps: null }; }, + created() { - if (this.props) { - Object.keys(this.props).forEach(prop => { - if (this.widget.data.hasOwnProperty(prop)) { - this.props[prop] = this.widget.data[prop]; - } - }); - } + this.mergeProps(); + + this.$watch('props', () => { + this.mergeProps(); + }); this.bakeProps(); + }, - this.$watch('props', newProps => { - if (this.preventSave) { - this.preventSave = false; - this.bakeProps(); - return; + methods: { + bakeProps() { + this.bakedOldProps = JSON.stringify(this.props); + }, + + mergeProps() { + if (data.props) { + const defaultProps = data.props(); + Object.keys(defaultProps).forEach(prop => { + if (!this.props.hasOwnProperty(prop)) { + Vue.set(this.props, prop, defaultProps[prop]); + } + }); } - if (this.bakedOldProps == JSON.stringify(newProps)) return; + }, + + save() { + if (this.bakedOldProps == JSON.stringify(this.props)) return; this.bakeProps(); if (this.isMobile) { (this as any).api('i/update_mobile_home', { id: this.id, - data: newProps - }).then(() => { - (this as any).os.i.clientSettings.mobileHome.find(w => w.id == this.id).data = newProps; + data: this.props }); } else { (this as any).api('i/update_home', { id: this.id, - data: newProps - }).then(() => { - (this as any).os.i.clientSettings.home.find(w => w.id == this.id).data = newProps; + data: this.props }); } - }, { - deep: true - }); - }, - methods: { - bakeProps() { - this.bakedOldProps = JSON.stringify(this.props); } } }); diff --git a/src/client/app/common/scripts/check-for-update.ts b/src/client/app/common/scripts/check-for-update.ts index 20ce64ea85..1e303017eb 100644 --- a/src/client/app/common/scripts/check-for-update.ts +++ b/src/client/app/common/scripts/check-for-update.ts @@ -1,9 +1,9 @@ -import MiOS from '../mios'; +import MiOS from '../../mios'; import { version as current } from '../../config'; export default async function(mios: MiOS, force = false, silent = false) { const meta = await mios.getMeta(force); - const newer = meta.version; + const newer = meta.clientVersion; if (newer != current) { localStorage.setItem('should-refresh', 'true'); diff --git a/src/client/app/common/scripts/streaming/channel.ts b/src/client/app/common/scripts/streaming/channel.ts index cab5f4edb4..be68ec0997 100644 --- a/src/client/app/common/scripts/streaming/channel.ts +++ b/src/client/app/common/scripts/streaming/channel.ts @@ -1,5 +1,5 @@ import Stream from './stream'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Channel stream connection diff --git a/src/client/app/common/scripts/streaming/drive.ts b/src/client/app/common/scripts/streaming/drive.ts index 7ff85b5946..50fff05737 100644 --- a/src/client/app/common/scripts/streaming/drive.ts +++ b/src/client/app/common/scripts/streaming/drive.ts @@ -1,6 +1,6 @@ import Stream from './stream'; import StreamManager from './stream-manager'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Drive stream connection diff --git a/src/client/app/common/scripts/streaming/global-timeline.ts b/src/client/app/common/scripts/streaming/global-timeline.ts index 452ddbac03..a639f1595c 100644 --- a/src/client/app/common/scripts/streaming/global-timeline.ts +++ b/src/client/app/common/scripts/streaming/global-timeline.ts @@ -1,6 +1,6 @@ import Stream from './stream'; import StreamManager from './stream-manager'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Global timeline stream connection diff --git a/src/client/app/common/scripts/streaming/home.ts b/src/client/app/common/scripts/streaming/home.ts index 73f2c5302c..32685f3c2c 100644 --- a/src/client/app/common/scripts/streaming/home.ts +++ b/src/client/app/common/scripts/streaming/home.ts @@ -2,7 +2,7 @@ import * as merge from 'object-assign-deep'; import Stream from './stream'; import StreamManager from './stream-manager'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Home stream connection @@ -25,10 +25,31 @@ export class HomeStream extends Stream { console.log('I updated:', i); } merge(me, i); + + // キャッシュ更新 + os.bakeMe(); + }); + + this.on('clientSettingUpdated', x => { + os.store.commit('settings/set', { + key: x.key, + value: x.value + }); + }); + + this.on('home_updated', x => { + if (x.home) { + os.store.commit('settings/setHome', x.home); + } else { + os.store.commit('settings/setHomeWidget', { + id: x.id, + data: x.data + }); + } }); // トークンが再生成されたとき - // このままではAPIが利用できないので強制的にサインアウトさせる + // このままではMisskeyが利用できないので強制的にサインアウトさせる this.on('my_token_regenerated', () => { alert('%i18n:!common.my-token-regenerated%'); os.signout(); diff --git a/src/client/app/common/scripts/streaming/local-timeline.ts b/src/client/app/common/scripts/streaming/local-timeline.ts index 3d04e05cd4..2834262bdc 100644 --- a/src/client/app/common/scripts/streaming/local-timeline.ts +++ b/src/client/app/common/scripts/streaming/local-timeline.ts @@ -1,6 +1,6 @@ import Stream from './stream'; import StreamManager from './stream-manager'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Local timeline stream connection diff --git a/src/client/app/common/scripts/streaming/messaging-index.ts b/src/client/app/common/scripts/streaming/messaging-index.ts index 84e2174ec4..addcccb952 100644 --- a/src/client/app/common/scripts/streaming/messaging-index.ts +++ b/src/client/app/common/scripts/streaming/messaging-index.ts @@ -1,6 +1,6 @@ import Stream from './stream'; import StreamManager from './stream-manager'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Messaging index stream connection diff --git a/src/client/app/common/scripts/streaming/messaging.ts b/src/client/app/common/scripts/streaming/messaging.ts index c1b5875cfb..a59377d867 100644 --- a/src/client/app/common/scripts/streaming/messaging.ts +++ b/src/client/app/common/scripts/streaming/messaging.ts @@ -1,5 +1,5 @@ import Stream from './stream'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Messaging stream connection diff --git a/src/client/app/common/scripts/streaming/othello-game.ts b/src/client/app/common/scripts/streaming/othello-game.ts index b85af8f72b..9e36f647bb 100644 --- a/src/client/app/common/scripts/streaming/othello-game.ts +++ b/src/client/app/common/scripts/streaming/othello-game.ts @@ -1,5 +1,5 @@ import Stream from './stream'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; export class OthelloGameStream extends Stream { constructor(os: MiOS, me, game) { diff --git a/src/client/app/common/scripts/streaming/othello.ts b/src/client/app/common/scripts/streaming/othello.ts index f5d47431cd..8f4f217e39 100644 --- a/src/client/app/common/scripts/streaming/othello.ts +++ b/src/client/app/common/scripts/streaming/othello.ts @@ -1,6 +1,6 @@ import StreamManager from './stream-manager'; import Stream from './stream'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; export class OthelloStream extends Stream { constructor(os: MiOS, me) { diff --git a/src/client/app/common/scripts/streaming/server.ts b/src/client/app/common/scripts/streaming/server.ts index 3d35ef4d9d..2ea4239288 100644 --- a/src/client/app/common/scripts/streaming/server.ts +++ b/src/client/app/common/scripts/streaming/server.ts @@ -1,6 +1,6 @@ import Stream from './stream'; import StreamManager from './stream-manager'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Server stream connection diff --git a/src/client/app/common/scripts/streaming/stream.ts b/src/client/app/common/scripts/streaming/stream.ts index 3912186ad3..fefa8e5ced 100644 --- a/src/client/app/common/scripts/streaming/stream.ts +++ b/src/client/app/common/scripts/streaming/stream.ts @@ -2,7 +2,7 @@ import { EventEmitter } from 'eventemitter3'; import * as uuid from 'uuid'; import * as ReconnectingWebsocket from 'reconnecting-websocket'; import { wsUrl } from '../../../config'; -import MiOS from '../../mios'; +import MiOS from '../../../mios'; /** * Misskey stream connection diff --git a/src/client/app/common/scripts/streaming/user-list.ts b/src/client/app/common/scripts/streaming/user-list.ts new file mode 100644 index 0000000000..30a52b98dd --- /dev/null +++ b/src/client/app/common/scripts/streaming/user-list.ts @@ -0,0 +1,17 @@ +import Stream from './stream'; +import MiOS from '../../mios'; + +export class UserListStream extends Stream { + constructor(os: MiOS, me, listId) { + super(os, 'user-list', { + i: me.token, + listId + }); + + (this as any).on('_connected_', () => { + this.send({ + i: me.token + }); + }); + } +} diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue index 5c8f61a2a2..84173d20b5 100644 --- a/src/client/app/common/views/components/autocomplete.vue +++ b/src/client/app/common/views/components/autocomplete.vue @@ -234,7 +234,7 @@ export default Vue.extend({ margin-top calc(1em + 8px) overflow hidden background #fff - border solid 1px rgba(0, 0, 0, 0.1) + border solid 1px rgba(#000, 0.1) border-radius 4px transition top 0.1s ease, left 0.1s ease @@ -253,7 +253,7 @@ export default Vue.extend({ white-space nowrap overflow hidden font-size 0.9em - color rgba(0, 0, 0, 0.8) + color rgba(#000, 0.8) cursor default &, * @@ -285,10 +285,10 @@ export default Vue.extend({ .name margin 0 8px 0 0 - color rgba(0, 0, 0, 0.8) + color rgba(#000, 0.8) .username - color rgba(0, 0, 0, 0.3) + color rgba(#000, 0.3) > .emojis > li @@ -298,10 +298,10 @@ export default Vue.extend({ width 24px .name - color rgba(0, 0, 0, 0.8) + color rgba(#000, 0.8) .alias margin 0 0 0 8px - color rgba(0, 0, 0, 0.3) + color rgba(#000, 0.3) diff --git a/src/client/app/common/views/components/avatar.vue b/src/client/app/common/views/components/avatar.vue new file mode 100644 index 0000000000..a4648c272e --- /dev/null +++ b/src/client/app/common/views/components/avatar.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/client/app/common/views/components/google.vue b/src/client/app/common/views/components/google.vue new file mode 100644 index 0000000000..92817d3c1f --- /dev/null +++ b/src/client/app/common/views/components/google.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts index 6bfe43a800..69fed00c74 100644 --- a/src/client/app/common/views/components/index.ts +++ b/src/client/app/common/views/components/index.ts @@ -3,6 +3,7 @@ import Vue from 'vue'; import signin from './signin.vue'; import signup from './signup.vue'; import forkit from './forkit.vue'; +import avatar from './avatar.vue'; import nav from './nav.vue'; import noteHtml from './note-html'; import poll from './poll.vue'; @@ -28,6 +29,7 @@ import welcomeTimeline from './welcome-timeline.vue'; Vue.component('mk-signin', signin); Vue.component('mk-signup', signup); Vue.component('mk-forkit', forkit); +Vue.component('mk-avatar', avatar); Vue.component('mk-nav', nav); Vue.component('mk-note-html', noteHtml); Vue.component('mk-poll', poll); diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue index 64172ad0b4..ff9d5e1022 100644 --- a/src/client/app/common/views/components/media-list.vue +++ b/src/client/app/common/views/components/media-list.vue @@ -2,7 +2,7 @@
@@ -11,7 +11,14 @@ import Vue from 'vue'; export default Vue.extend({ - props: ['mediaList'], + props: { + mediaList: { + required: true + }, + raw: { + default: false + } + } }); @@ -23,7 +30,7 @@ export default Vue.extend({ @media (max-width 500px) height 192px - + &[data-count="1"] grid-template-rows 1fr &[data-count="2"] @@ -40,7 +47,7 @@ export default Vue.extend({ &[data-count="4"] grid-template-columns 1fr 1fr grid-template-rows 1fr 1fr - + :nth-child(1) grid-column 1 / 2 grid-row 1 / 2 @@ -53,5 +60,5 @@ export default Vue.extend({ :nth-child(4) grid-column 2 / 3 grid-row 2 / 3 - + diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue index afd700e777..ba0ab3209f 100644 --- a/src/client/app/common/views/components/messaging-room.message.vue +++ b/src/client/app/common/views/components/messaging-room.message.vue @@ -1,8 +1,6 @@