diff --git a/locales/en-US.yml b/locales/en-US.yml index 5f588efd443a..74961a5bc44e 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -311,6 +311,7 @@ folderName: "Folder name" createFolder: "Create a folder" renameFolder: "Rename this folder" deleteFolder: "Delete this folder" +Folder: "Folder" addFile: "Add a file" emptyDrive: "Your Drive is empty" emptyFolder: "This folder is empty" diff --git a/locales/hr-HR.yml b/locales/hr-HR.yml index ed97d539c095..9cfebdd01a61 100644 --- a/locales/hr-HR.yml +++ b/locales/hr-HR.yml @@ -1 +1,5 @@ --- +_lang_: "japanski" +ok: "OK" +gotIt: "Razumijem" +cancel: "otkazati" diff --git a/locales/ht-HT.yml b/locales/ht-HT.yml index ed97d539c095..e3595c79b656 100644 --- a/locales/ht-HT.yml +++ b/locales/ht-HT.yml @@ -1 +1,18 @@ --- +_lang_: "Japonè" +password: "modpas" +ok: "OK" +gotIt: "Konprann" +cancel: "anile" +noThankYou: "Sispann" +instance: "sèvè" +profile: "pwofil" +save: "kenbe" +delete: "efase" +instances: "sèvè" +remove: "efase" +smtpPass: "modpas" +_2fa: + renewTOTPCancel: "Sispann" +_widgets: + profile: "pwofil" diff --git a/locales/index.d.ts b/locales/index.d.ts index 363032eaa258..bc7b9e8ef25c 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -314,6 +314,7 @@ export interface Locale { "createFolder": string; "renameFolder": string; "deleteFolder": string; + "Folder": string; "addFile": string; "emptyDrive": string; "emptyFolder": string; diff --git a/locales/it-IT.yml b/locales/it-IT.yml index fb78c108acec..87a7a32a929b 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -1136,7 +1136,7 @@ externalServices: "Servizi esterni" impressum: "Dichiarazione di proprietà" impressumUrl: "URL della dichiarazione di proprietà" impressumDescription: "La dichiarazione di proprietà, è obbligatoria in alcuni paesi come la Germania (Impressum)." -privacyPolicy: "Informativa ai sensi degli artt. 13 e 14 del Regolamento UE 2016/679 per la protezione dei dati personali (GDPR)" +privacyPolicy: "Informativa privacy ai sensi del Regolamento UE 2016/679 (GDPR)" privacyPolicyUrl: "URL della informativa privacy" tosAndPrivacyPolicy: "Condizioni d'uso e informativa privacy" _announcement: diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index f1b57f8bdea4..9568ba12d7e0 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -311,6 +311,7 @@ folderName: "フォルダー名" createFolder: "フォルダーを作成" renameFolder: "フォルダー名を変更" deleteFolder: "フォルダーを削除" +Folder: "フォルダー" addFile: "ファイルを追加" emptyDrive: "ドライブは空です" emptyFolder: "フォルダーは空です" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 860b47f3e73e..925286dfbc4a 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -45,6 +45,7 @@ pin: "ピン留めしとく" unpin: "やっぱピン留めせん" copyContent: "内容をコピー" copyLink: "リンクをコピー" +copyLinkRenote: "リノートのリンクをコピーするで?" delete: "ほかす" deleteAndEdit: "ほかして直す" deleteAndEditConfirm: "このノートをほかしてもっかい直す?このノートへのツッコミ、Renote、返信も全部消えるんやけどそれでもええん?" @@ -194,6 +195,7 @@ perHour: "1時間ごと" perDay: "1日ごと" stopActivityDelivery: "アクティビティの配送をやめる" blockThisInstance: "このサーバーをブロックすんで" +silenceThisInstance: "サーバーサイレンスすんで?" operations: "操作" software: "ソフトウェア" version: "バージョン" @@ -213,6 +215,8 @@ clearCachedFiles: "キャッシュをほかす" clearCachedFilesConfirm: "キャッシュされとるリモートファイルをみんなほかしてええか?" blockedInstances: "ブロックしたサーバー" blockedInstancesDescription: "ブロックしたいサーバーのホストを改行で区切って設定してな。ブロックされてもうたサーバーとはもう金輪際やり取りできひんくなるで。ついでにそのサブドメインもブロックするで。" +silencedInstances: "サーバーサイレンスされてんねん" +silencedInstancesDescription: "サイレンスしたいサーバーのホストを改行で区切って設定すんで。サイレンスされたサーバーに所属するアカウントはすべて「サイレンス」として扱われ、フォローがすべてリクエストになり、フォロワーでないローカルアカウントにはメンションできなくなんねん。ブロックしたインスタンスには影響せーへんで。" muteAndBlock: "ミュートとブロック" mutedUsers: "ミュートしたユーザー" blockedUsers: "ブロックしたユーザー" @@ -410,12 +414,14 @@ aboutMisskey: "Misskeyってなんや?" administrator: "管理者" token: "トークン" 2fa: "二要素認証" +setupOf2fa: "二要素認証のセットアップ" totp: "認証アプリ" totpDescription: "認証アプリ使うてワンタイムパスワードを入れる" moderator: "モデレーター" moderation: "モデレーション" moderationNote: "モデレーションノート" addModerationNote: "モデレーションノートを追加するで" +moderationLogs: "モデログ" nUsersMentioned: "{n}人が投稿" securityKeyAndPasskey: "セキュリティキー・パスキー" securityKey: "セキュリティキー" @@ -528,6 +534,7 @@ serverLogs: "サーバーログ" deleteAll: "全部ほかす" showFixedPostForm: "タイムラインの上の方で投稿できるようにやってくれへん?" showFixedPostFormInChannel: "タイムラインの上の方で投稿できるようにするわ(チャンネル)" +withRepliesByDefaultForNewlyFollowed: "フォローする時、デフォルトで返信をタイムラインに含むようにしよか" newNoteRecived: "新しいノートがあるで" sounds: "サウンド" sound: "サウンド" @@ -655,6 +662,7 @@ behavior: "動作" sample: "サンプル" abuseReports: "通報" reportAbuse: "通報" +reportAbuseRenote: "リノート苦情だすで?" reportAbuseOf: "{name}を通報する" fillAbuseReportDescription: "細かい通報理由を書いてなー。対象ノートがある時はそのURLも書いといてなー。" abuseReported: "無事内容が送信されたみたいやで。おおきに〜。" @@ -707,6 +715,7 @@ lockedAccountInfo: "フォローを承認制にしとっても、ノートの公 alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで" loadRawImages: "添付画像のサムネイルをオリジナル画質にするで" disableShowingAnimatedImages: "アニメーション画像を再生せんとくで" +highlightSensitiveMedia: "メディアがセンシティブなことをめっっちゃわかりやすく表紙" verificationEmailSent: "無事確認のメールを送れたで。メールに書いてあるリンクにアクセスして、設定を完了してなー。" notSet: "未設定" emailVerified: "メールアドレスは確認されたで" @@ -1021,6 +1030,7 @@ retryAllQueuesConfirmText: "一時的にサーバー重なるかもしれへん enableChartsForRemoteUser: "リモートユーザーのチャートを作る" enableChartsForFederatedInstances: "リモートサーバーのチャートを作る" showClipButtonInNoteFooter: "ノートのアクションにクリップを追加" +reactionsDisplaySize: "リアクションの表示のでかさ" noteIdOrUrl: "ノートIDかURL" video: "動画" videos: "動画" @@ -1107,8 +1117,28 @@ replies: "返事" renotes: "Renote" loadReplies: "返信を見るで" loadConversation: "会話を見るで" +pinnedList: "ピン留めしはったリスト" +keepScreenOn: "デバイスの画面を常にオンにすんで" verifiedLink: "このリンク先の所有者であることが確認されたで。" +notifyNotes: "投稿を通知" +unnotifyNotes: "投稿の通知を解除すんで" +authentication: "認証" authenticationRequiredToContinue: "続けるには認証をやってや。" +dateAndTime: "日時" +showRenotes: "リノートを表示" +edited: "編集し終わってる" +notificationRecieveConfig: "通知を受け取るかの設定" +mutualFollow: "お互いフォローしてんで" +fileAttachedOnly: "ファイル付きのみ" +showRepliesToOthersInTimeline: "タイムラインに他の人への返信とかも含めんで" +hideRepliesToOthersInTimeline: "タイムラインに他の人への返信とかは見ーへんで" +externalServices: "他のサイトのサービス" +impressum: "運営者の情報" +impressumUrl: "運営者の情報URL" +impressumDescription: "ドイツなどのほんま1部の国と地域ではな、表示が義務付けられててん。(Impressum)" +privacyPolicy: "プライバシーポリシー" +privacyPolicyUrl: "プライバシーポリシーURL" +tosAndPrivacyPolicy: "利用規約・プライバシーポリシー" _announcement: forExistingUsers: "もうおるユーザーのみ" forExistingUsersDescription: "有効にすると、このお知らせ作成時点でおるユーザーにのみお知らせが表示されます。無効にすると、このお知らせ作成後にアカウントを作成したユーザーにもお知らせが表示されます。" @@ -1141,6 +1171,8 @@ _serverSettings: appIconUsageExample: "PWAや、スマートフォンのホーム画面にブックマークとして追加された時など" appIconStyleRecommendation: "円形もしくは角丸にクロップされる場合があるさかいに、塗り潰された余白のある背景があるものが推奨されるで。" appIconResolutionMustBe: "解像度は必ず{resolution}である必要があるで。" + manifestJsonOverride: "manifest.jsonのオーバーライド" + shortName: "略称" shortNameDescription: "サーバーの名前が長い時に、代わりに表示することのできるあだ名。" _accountMigration: moveFrom: "別のアカウントからこのアカウントに引っ越す" @@ -1396,6 +1428,9 @@ _achievements: title: "Brain Diver" description: "Brain Diverへのリンクを投稿したった" flavor: "Misskey-Misskey La-Tu-Ma" + _smashTestNotificationButton: + title: "テスト過剰" + description: "通知テストをごく短時間のうちに連続して行ったねん" _role: new: "ロールの作成" edit: "ロールの編集" @@ -1453,6 +1488,7 @@ _role: descriptionOfRateLimitFactor: "ちっちゃいほど制限が緩なって、大きいほど制限されるで。" canHideAds: "広告を表示させへん" canSearchNotes: "ノート検索を使わすかどうか" + canUseTranslator: "翻訳機能の利用" _condition: isLocal: "ローカルユーザー" isRemote: "リモートユーザー" @@ -1501,6 +1537,10 @@ _ad: reduceFrequencyOfThisAd: "この広告の表示頻度を下げるで" hide: "表示せん" timezoneinfo: "曜日はサーバーのタイムゾーンを元に指定されるで。" + adsSettings: "広告配信設定" + notesPerOneAd: "リアタイ更新中に広告を出す間隔(ノートの個数な)" + setZeroToDisable: "0でリアタイ更新時の広告配信を無効にすんで" + adsTooClose: "広告を出す間隔がめっちゃ短いから、ユーザー体験が著しく損なわれる可能性があんで。" _forgotPassword: enterEmail: "アカウントに登録したメールアドレスをここに入力してや。そのアドレス宛に、パスワードリセット用のリンクが送られるから待っててな~。" ifNoEmail: "メールアドレスを登録してへんのやったら、管理者まで教えてな~。" @@ -1700,6 +1740,7 @@ _2fa: step1: "ほんなら、{a}や{b}とかの認証アプリを使っとるデバイスにインストールしてな。" step2: "次に、ここにあるQRコードをアプリでスキャンしてな~。" step2Click: "QRコードをクリックすると、今使とる端末に入っとる認証アプリとかキーリングに登録できるで。" + step2Uri: "デスクトップアプリを使う時は次のURIを入れるで" step3Title: "確認コードを入れてーや" step3: "アプリに表示されているトークンを入力して終わりや。" setupCompleted: "設定が完了したで。" @@ -1718,6 +1759,7 @@ _2fa: renewTOTPOk: "もっかい設定する" renewTOTPCancel: "やめとく" checkBackupCodesBeforeCloseThisWizard: "このウィザードを閉じる前に、したのバックアップコードを確認しいや。" + backupCodes: "バックアップコード" backupCodesDescription: "認証アプリが使用できんなった場合、以下のバックアップコードを使ってアカウントにアクセスできるで。これらのコードは必ず安全な場所に置いときや。各コードは一回だけ使用できるで。" backupCodeUsedWarning: "バックアップコードが使用されたで。認証アプリが使えなくなってるん場合、なるべく早く認証アプリを再設定しや。" backupCodesExhaustedWarning: "バックアップコードが全て使用されたで。認証アプリを利用できん場合、これ以上アカウントにアクセスできなくなるで。認証アプリを再登録しや。" @@ -1773,6 +1815,7 @@ _antennaSources: homeTimeline: "フォローしとるユーザーのノート" users: "選らんだ一人か複数のユーザーのノート" userList: "選んだリストのユーザーのノート" + userBlacklist: "選んだ1人か複数のユーザーのノート" _weekday: sunday: "日曜日" monday: "月曜日" @@ -1872,6 +1915,7 @@ _profile: metadataContent: "内容" changeAvatar: "アバター画像を変更するで" changeBanner: "バナー画像を変更するで" + verifiedLinkDescription: "内容をURLに設定すると、リンク先のwebサイトに自分のプロフのリンクが含まれてる場合に所有者確認済みアイコンを表示させることができるで。" _exportOrImport: allNotes: "全てのノート" favoritedNotes: "お気に入りにしたノート" @@ -1881,6 +1925,7 @@ _exportOrImport: userLists: "リスト" excludeMutingUsers: "ミュートしてるユーザーは入れんとくわ" excludeInactiveUsers: "使われてなさそうなアカウントは入れんとくわ" + withReplies: "インポートした人による返信をTLに含むようにすんで。" _charts: federation: "連合" apRequest: "リクエスト" @@ -1990,14 +2035,17 @@ _notification: youReceivedFollowRequest: "フォロー許可してほしいみたいやな" yourFollowRequestAccepted: "フォローさせてもろたで" pollEnded: "アンケートの結果が出たみたいや" + newNote: "さらの投稿" unreadAntennaNote: "アンテナ {name}" emptyPushNotificationMessage: "プッシュ通知の更新をしといたで" achievementEarned: "実績を獲得しとるで" + testNotification: "通知テスト" checkNotificationBehavior: "通知の表示を確かめるで" sendTestNotification: "テスト通知を送信するで" notificationWillBeDisplayedLikeThis: "通知はこのように表示されるで" _types: all: "すべて" + note: "あんたらの新規投稿" follow: "フォロー" mention: "メンション" reply: "リプライ" @@ -2032,6 +2080,7 @@ _deck: widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選んでウィジェットを追加してなー" useSimpleUiForNonRootPages: "非ルートページは簡易UIで表示" usedAsMinWidthWhenFlexible: "「幅を自動調整」が有効の場合、これが幅の最小値となるで" + flexible: "幅を自動調整" _columns: main: "メイン" widgets: "ウィジェット" @@ -2067,6 +2116,41 @@ _webhookSettings: reaction: "ツッコミがあるとき~!" mention: "メンションがあるとき~!" _moderationLogTypes: + createRole: "ロールを追加すんで" + deleteRole: "ロールほかす" + updateRole: "ロールの更新すんで" + assignRole: "ロールへアサイン" + unassignRole: "ロールのアサインほかす" suspend: "凍結" + unsuspend: "凍結解除" + addCustomEmoji: "自由な絵文字追加されたで" + updateCustomEmoji: "自由な絵文字更新されたで" + deleteCustomEmoji: "自由な絵文字消されたで" + updateServerSettings: "サーバー設定更新すんねん" + updateUserNote: "モデレーションノート更新" + deleteDriveFile: "ファイルをほかす" + deleteNote: "ノートを削除" + createGlobalAnnouncement: "みんなへの通告を作成したで" + createUserAnnouncement: "あんたらへの通告を作成したで" + updateGlobalAnnouncement: "みんなへの通告更新したったで" + updateUserAnnouncement: "あんたらへの通告更新したったで" + deleteGlobalAnnouncement: "みんなへの通告消したったで" + deleteUserAnnouncement: "あんたらへのお知らせを削除" resetPassword: "パスワードをリセット" + suspendRemoteInstance: "リモートサーバーを止めんで" + unsuspendRemoteInstance: "リモートサーバーを再開すんで" + markSensitiveDriveFile: "ファイルをセンシティブ付与" + unmarkSensitiveDriveFile: "ファイルをセンシティブ解除" + resolveAbuseReport: "苦情を解決" createInvitation: "招待コードを作成" + createAd: "広告を作んで" + deleteAd: "広告ほかす" + updateAd: "広告を更新" +_fileViewer: + title: "ファイルの詳しい情報" + type: "ファイルの種類" + size: "ファイルのでかさ" + url: "URL" + uploadedAt: "追加した日" + attachedNotes: "ファイルがついてきてるノート" + thisPageCanBeSeenFromTheAuthor: "このページはこのファイルをアップした人しか見れへんねん。" diff --git a/locales/ug-CN.yml b/locales/ug-CN.yml index 65ef84125907..e48f64511cf5 100644 --- a/locales/ug-CN.yml +++ b/locales/ug-CN.yml @@ -1,4 +1,19 @@ --- _lang_: "ياپونچە" +headlineMisskey: "خاتىرە ئارقىلىق ئۇلانغان تور" +monthAndDay: "{day}-{month}" search: "ئىزدەش" +ok: "ماقۇل" +noThankYou: "ئۇنى توختىتىڭ" +profile: "profile" +login: "كىرىش" +loggingIn: "كىرىش" +pin: "pinned" +delete: "ئۆچۈرۈش" +pinned: "pinned" +remove: "ئۆچۈرۈش" searchByGoogle: "ئىزدەش" +_2fa: + renewTOTPCancel: "ئۇنى توختىتىڭ" +_widgets: + profile: "profile" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index dfc4ccb688ec..e605deb11d54 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -195,6 +195,7 @@ perHour: "每小时" perDay: "每天" stopActivityDelivery: "停止发送活动" blockThisInstance: "阻止此服务器向本服务器推流" +silenceThisInstance: "使服务器静音" operations: "操作" software: "软件" version: "版本" @@ -214,6 +215,8 @@ clearCachedFiles: "清除缓存" clearCachedFilesConfirm: "确定要清除缓存文件?" blockedInstances: "被封锁的服务器" blockedInstancesDescription: "设定要封锁的服务器,以换行来进行分割。被封锁的服务器将无法与本服务器进行交换通讯。子域名也同样会被封锁。" +silencedInstances: "沉默的服务器" +silencedInstancesDescription: "设置要静音的服务器的主机,以换行符分隔。属于静默服务器的所有帐户都将被视为“静默”,所有关注都将成为请求,并且您将无法提及非关注者的本地帐户。被阻止的实例不受影响。" muteAndBlock: "屏蔽/拉黑" mutedUsers: "已屏蔽用户" blockedUsers: "已拉黑的用户" @@ -2127,3 +2130,6 @@ _moderationLogTypes: createAd: "创建了广告" deleteAd: "删除了广告" updateAd: "更新了广告" +_fileViewer: + url: "URL" + uploadedAt: "添加日期" diff --git a/package.json b/package.json index 973e26165092..842367ada64b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2023.10.2-beta.2", + "version": "2023.10.2-meron.2", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/frontend/src/components/MkEmojiPicker.section.vue b/packages/frontend/src/components/MkEmojiPicker.section.vue index 08297ea5baef..ec45db6cfbcd 100644 --- a/packages/frontend/src/components/MkEmojiPicker.section.vue +++ b/packages/frontend/src/components/MkEmojiPicker.section.vue @@ -5,9 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/MkEmojiPicker.vue b/packages/frontend/src/components/MkEmojiPicker.vue index 7eff63748234..2551026d26cd 100644 --- a/packages/frontend/src/components/MkEmojiPicker.vue +++ b/packages/frontend/src/components/MkEmojiPicker.vue @@ -73,18 +73,20 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.customEmojis }}
- {{ category || i18n.ts.other }} + {{ child.value }}
{{ i18n.ts.emoji }}
- {{ category }} + {{ category }}
@@ -100,7 +102,14 @@ SPDX-License-Identifier: AGPL-3.0-only import { ref, shallowRef, computed, watch, onMounted } from 'vue'; import * as Misskey from 'misskey-js'; import XSection from '@/components/MkEmojiPicker.section.vue'; -import { emojilist, emojiCharByCategory, UnicodeEmojiDef, unicodeEmojiCategories as categories, getEmojiName } from '@/scripts/emojilist.js'; +import { + emojilist, + emojiCharByCategory, + UnicodeEmojiDef, + unicodeEmojiCategories as categories, + getEmojiName, + CustomEmojiFolderTree +} from '@/scripts/emojilist.js'; import MkRippleEffect from '@/components/MkRippleEffect.vue'; import * as os from '@/os.js'; import { isTouchUsing } from '@/scripts/touch.js'; @@ -144,6 +153,40 @@ const searchResultCustom = ref([]); const searchResultUnicode = ref([]); const tab = ref<'index' | 'custom' | 'unicode' | 'tags'>('index'); +const customEmojiFolderRoot: CustomEmojiFolderTree = { value: "", category: "", children: [] }; + +function parseAndMergeCategories(input: string, root: CustomEmojiFolderTree): CustomEmojiFolderTree { + const parts = input.split('/'); + let category = ""; + let currentNode: CustomEmojiFolderTree = root; + + for (const part of parts) { + if (part) { + category += `/${part}`; + category = category.replace(/^\//, ''); + let existingNode = currentNode.children.find((node) => node.value === part); + + if (!existingNode) { + const newNode: CustomEmojiFolderTree = { value: part, category, children: [] }; + currentNode.children.push(newNode); + existingNode = newNode; + } + + currentNode = existingNode; + } + } + + return currentNode; +} + +customEmojiCategories.value.forEach(ec => { + if (ec !== null) { + parseAndMergeCategories(ec, customEmojiFolderRoot); + } +}); + +parseAndMergeCategories(i18n.ts.other, customEmojiFolderRoot); + watch(q, () => { if (emojisEl.value) emojisEl.value.scrollTop = 0; diff --git a/packages/frontend/src/components/MkMention.vue b/packages/frontend/src/components/MkMention.vue index ffc9ca3f4d57..80426157e656 100644 --- a/packages/frontend/src/components/MkMention.vue +++ b/packages/frontend/src/components/MkMention.vue @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only