From 249b9f2350bdd4a226d98d83a23f8777ce733f5d Mon Sep 17 00:00:00 2001 From: keven1024 Date: Tue, 7 Apr 2026 22:53:13 +0800 Subject: [PATCH] feat(front): update I18nSwitchDrawer to support new locale structure and add German, French, Japanese, Korean, and Traditional Chinese translations --- front/components/Drawer/I18nSwitchDrawer.vue | 26 +- front/i18n/locales/de.json | 235 +++++++++++++++++++ front/i18n/locales/en.json | 22 +- front/i18n/locales/fr.json | 235 +++++++++++++++++++ front/i18n/locales/ja.json | 235 +++++++++++++++++++ front/i18n/locales/ko.json | 235 +++++++++++++++++++ front/i18n/locales/zh-CN.json | 22 +- front/i18n/locales/zh-TW.json | 235 +++++++++++++++++++ 8 files changed, 1226 insertions(+), 19 deletions(-) create mode 100644 front/i18n/locales/de.json create mode 100644 front/i18n/locales/fr.json create mode 100644 front/i18n/locales/ja.json create mode 100644 front/i18n/locales/ko.json create mode 100644 front/i18n/locales/zh-TW.json diff --git a/front/components/Drawer/I18nSwitchDrawer.vue b/front/components/Drawer/I18nSwitchDrawer.vue index c1cd77b..a422463 100644 --- a/front/components/Drawer/I18nSwitchDrawer.vue +++ b/front/components/Drawer/I18nSwitchDrawer.vue @@ -1,23 +1,15 @@ @@ -26,12 +18,12 @@ const switchLocale = async (locale: string) => {
{{ t('i18n.switchLocale') }}
- {{ localeMap?.[locale as keyof typeof localeMap] }} + {{ locale.name }}
diff --git a/front/i18n/locales/de.json b/front/i18n/locales/de.json new file mode 100644 index 0000000..3fd3f35 --- /dev/null +++ b/front/i18n/locales/de.json @@ -0,0 +1,235 @@ +{ + "navbar": { + "file": "Datei", + "text": "Text" + }, + "i18n": { + "switchLocale": "Sprache wechseln" + }, + "seo": { + "desc": "015 ist eine Plattform zum temporären Teilen von Dateien und unterstützt das hochladen großer Dateien in Blöcken, temporären Text-Upload, Download und Freigabe" + }, + "btn": { + "submit": "Absenden", + "backToHome": "Zurück zur Startseite" + }, + "page": { + "upload": { + "file": { + "uploadFile": "Datei hochladen", + "uploadFilePlaceholder": "Datei per Drag-and-drop hierher ziehen oder zum Hochladen klicken", + "addMore": "Mehr hinzufügen", + "handleType": { + "file-share": "Dateifreigabe", + "file-image-compress": "Bildkomprimierung", + "file-image-convert": "Formatkonvertierung" + } + }, + "text": { + "uploadText": "Text hochladen", + "uploadTextPlaceholder": "Mit unserem Textwerkzeug können Sie teilen, übersetzen, zusammenfassen, Bilder erzeugen und große Modelle befragen", + "handleType": { + "text-share": "Textfreigabe", + "text-translate": "Textübersetzung" + } + }, + "pickup": { + "title": "Abholcode eingeben", + "codeError": "Ungültiger Abholcode", + "btn": "Abholen" + } + }, + "shareOptions": { + "file": { + "title": "Freigabeoptionen", + "downloadNums": "Anzahl der Downloads", + "expireTime": "Ablaufzeit", + "or": "oder", + "expireAfter": "läuft ab nach", + "pickupCode": "Abholcode", + "passwordProtection": "Passwortschutz", + "downloadNotify": "Download-Benachrichtigung", + "passwordPlaceholder": "Passwort eingeben", + "emailPlaceholder": "E-Mail eingeben", + "downloadOptions": { + "xdownload": "{0} Downloads" + }, + "expireOptions": { + "5min": "5 Minuten", + "1hour": "1 Stunde", + "1day": "1 Tag", + "3days": "3 Tage" + } + }, + "imageConvert": { + "title": "Bildkonvertierung", + "targetFormat": "Zielformat" + }, + "text": { + "title": "Freigabeoptionen", + "viewNums": "Anzahl der Aufrufe", + "expireTime": "Ablaufzeit", + "or": "oder", + "expireAfter": "läuft ab nach", + "pickupCode": "Abholcode", + "passwordProtection": "Passwortschutz", + "readNotify": "Lesebestätigung", + "passwordPlaceholder": "Passwort eingeben", + "emailPlaceholder": "E-Mail eingeben", + "viewOptions": { + "xview": "{0} Aufrufe" + }, + "expireOptions": { + "5min": "5 Minuten", + "1hour": "1 Stunde", + "1day": "1 Tag", + "3days": "3 Tage" + } + } + }, + "progress": { + "file": { + "totalUploadProgress": "Gesamter Upload-Fortschritt", + "fileList": "Dateiliste", + "fileName": "Dateiname", + "fileSize": "Dateigröße", + "uploadSpeed": "Upload-Geschwindigkeit", + "progress": "Fortschritt", + "uploadDetails": "Upload-Details", + "chunk": "Block", + "completed": "Abgeschlossen", + "discarded": "Verworfen", + "pending": "Ausstehend", + "chunkProgress": "Block-Fortschrittsbalken", + "chunkHeatmap": "Block-Heatmap", + "heatmap": "Heatmap", + "progressBar": "Fortschrittsbalken", + "uploadError": "Upload-Fehler", + "chunkUploadFailed": "Block {1} der Datei {0} ist mehrfach fehlgeschlagen, der Upload wurde abgebrochen", + "chunkUploadRetry": "Block {1} der Datei {0} konnte nicht hochgeladen werden, wir versuchen es später erneut", + "fileUploadFailed": "Der Upload der Datei {0} ist fehlgeschlagen, bitte versuchen Sie es erneut", + "uploadFailed": "Upload fehlgeschlagen", + "processing": { + "hash": "Hash wird berechnet...", + "create": "Upload wird initialisiert...", + "upload": "Wird hochgeladen...", + "finish": "Upload abgeschlossen" + }, + "instantUploadSuccess": "Eine Datei mit demselben Hash existiert bereits in der Cloud, Sofort-Upload erfolgreich", + "uploadFailedRetry": "Upload fehlgeschlagen, bitte versuchen Sie es später erneut", + "uploadSpeedInfo": { + "title": "Wie wird die Upload-Geschwindigkeit berechnet?", + "desc": { + "base": "Die Upload-Geschwindigkeit wird anhand von {chunkNum} * {chunkSize} geschätzt, die in der aktuellen Sekunde hochgeladen wurden. Sie kann daher leicht von der tatsächlichen Geschwindigkeit abweichen und dient nur als Referenz", + "chunkNum": "Anzahl der Dateiblöcke", + "chunkSize": "Größe jedes Dateiblocks" + } + } + } + }, + "result": { + "file": { + "title": "Upload erfolgreich", + "fileList": "Dateiliste", + "info": "Informationen", + "downloadNums": "Anzahl der Downloads", + "expireTime": "Ablaufzeit", + "pickupCode": "Abholcode", + "link": "Link", + "copySuccess": "Erfolgreich kopiert" + }, + "imageCompress": { + "title": "Bildkomprimierung", + "totalSize": "Gesamtgröße", + "task": "Aufgabe", + "retry": "Wiederholen {0}/{1}", + "failed": "Fehlgeschlagen" + }, + "imageConvert": { + "title": "Bildkonvertierung", + "convert": "Konvertieren", + "task": "Aufgabe", + "retry": "Wiederholen {0}/{1}", + "failed": "Fehlgeschlagen" + }, + "text": { + "title": "Freigabe erfolgreich", + "info": "Informationen", + "viewNums": "Anzahl der Aufrufe", + "expireTime": "Ablaufzeit", + "pickupCode": "Abholcode", + "link": "Link", + "content": "Inhalt", + "copySuccess": "Erfolgreich kopiert" + }, + "textTranslate": { + "title": "Textübersetzung", + "sourceText": "Ausgangstext", + "translatedText": "Übersetzung", + "sourceLanguage": "Ausgangssprache", + "targetLanguage": "Zielsprache", + "provider": "Anbieter", + "retranslate": "Erneut übersetzen", + "empty": "Geben Sie Text ein und klicken Sie auf erneut übersetzen, um das Ergebnis anzuzeigen", + "copy": "Übersetzung kopieren", + "copySuccess": "Übersetzung kopiert", + "language": { + "auto": "Automatisch erkennen", + "zh-CN": "Chinesisch", + "en": "Englisch", + "ja": "Japanisch", + "ko": "Koreanisch" + } + }, + "qrCode": { + "title": "QR-Code zum Teilen" + } + }, + "shareView": { + "linkExpired": "Dieser Link ist abgelaufen.", + "passwall": { + "title": "Passwort eingeben", + "passwordError": "Falsches Passwort", + "passwordPlaceholder": "Passwort eingeben" + }, + "fileShare": { + "title": "Datei herunterladen", + "downloadBtn": "Herunterladen", + "needPassword": "Passwort erforderlich", + "expireTime": "Ablaufzeit", + "remainingDownloads": "Verbleibende Downloads", + "getTokenFailed": "Token konnte nicht abgerufen werden", + "durationFormat": "D [Tage] HH:mm:ss" + }, + "textShare": { + "title": "Text anzeigen", + "viewBtn": "Anzeigen", + "needPassword": "Passwort erforderlich", + "expireTime": "Ablaufzeit", + "remainingViews": "Verbleibende Aufrufe", + "durationFormat": "D [Tage] HH:mm:ss" + } + }, + "about": { + "powerBy": "Open-Source-Plattform zum selbst gehosteten temporären Teilen von Dateien, betrieben von {0}", + "file": "Datei", + "share": "Teilen", + "download": "Herunterladen", + "task": "Aufgabe", + "admin": "Administrator der Website", + "author": "Autor", + "title": "Über", + "about": "Über", + "systemInfo": "Systeminformationen", + "enabledFeatures": "Aktivierte Funktionen", + "enabledFeaturesEmpty": "Für diese Instanz sind derzeit keine zusätzlichen Funktionen aktiviert", + "systemVersion": "Systemversion", + "storage": "Speicher", + "analysis": "Analyse", + "fileSize": "Dateigröße", + "fileNum": "Anzahl der Dateien", + "processed": "Verarbeitet", + "failed": "Fehlgeschlagen" + } + } +} diff --git a/front/i18n/locales/en.json b/front/i18n/locales/en.json index e34e307..10f9730 100644 --- a/front/i18n/locales/en.json +++ b/front/i18n/locales/en.json @@ -29,7 +29,8 @@ "uploadText": "Upload Text", "uploadTextPlaceholder": "Share, translate, summarize, generate images, and ask large models with our text processor", "handleType": { - "text-share": "Text Share" + "text-share": "Text Share", + "text-translate": "Text Translate" } }, "pickup": { @@ -161,6 +162,25 @@ "content": "Content", "copySuccess": "Copy Success" }, + "textTranslate": { + "title": "Text Translation", + "sourceText": "Source Text", + "translatedText": "Translated Text", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "provider": "Provider", + "retranslate": "Retranslate", + "empty": "Enter text and click retranslate to preview the result", + "copy": "Copy Translation", + "copySuccess": "Translation copied", + "language": { + "auto": "Auto Detect", + "zh-CN": "Chinese", + "en": "English", + "ja": "Japanese", + "ko": "Korean" + } + }, "qrCode": { "title": "Share QR code" } diff --git a/front/i18n/locales/fr.json b/front/i18n/locales/fr.json new file mode 100644 index 0000000..6f6b619 --- /dev/null +++ b/front/i18n/locales/fr.json @@ -0,0 +1,235 @@ +{ + "navbar": { + "file": "Fichier", + "text": "Texte" + }, + "i18n": { + "switchLocale": "Changer de langue" + }, + "seo": { + "desc": "015 est une plateforme de partage de fichiers temporaires prenant en charge le téléversement fractionné de gros fichiers, le téléversement de texte temporaire, le téléchargement et le partage" + }, + "btn": { + "submit": "Envoyer", + "backToHome": "Retour à l'accueil" + }, + "page": { + "upload": { + "file": { + "uploadFile": "Téléverser un fichier", + "uploadFilePlaceholder": "Glissez-déposez un fichier ou cliquez pour téléverser", + "addMore": "Ajouter plus", + "handleType": { + "file-share": "Partage de fichier", + "file-image-compress": "Compression d'image", + "file-image-convert": "Conversion de format" + } + }, + "text": { + "uploadText": "Téléverser du texte", + "uploadTextPlaceholder": "Partagez, traduisez, résumez, générez des images et interrogez de grands modèles avec notre processeur de texte", + "handleType": { + "text-share": "Partage de texte", + "text-translate": "Traduction de texte" + } + }, + "pickup": { + "title": "Saisir le code de retrait", + "codeError": "Code de retrait invalide", + "btn": "Récupérer" + } + }, + "shareOptions": { + "file": { + "title": "Options de partage", + "downloadNums": "Nombre de téléchargements", + "expireTime": "Date d'expiration", + "or": "ou", + "expireAfter": "expire après", + "pickupCode": "Code de retrait", + "passwordProtection": "Protection par mot de passe", + "downloadNotify": "Notification de téléchargement", + "passwordPlaceholder": "Saisissez le mot de passe", + "emailPlaceholder": "Saisissez l'adresse e-mail", + "downloadOptions": { + "xdownload": "{0} téléchargements" + }, + "expireOptions": { + "5min": "5 minutes", + "1hour": "1 heure", + "1day": "1 jour", + "3days": "3 jours" + } + }, + "imageConvert": { + "title": "Conversion d'image", + "targetFormat": "Format cible" + }, + "text": { + "title": "Options de partage", + "viewNums": "Nombre de vues", + "expireTime": "Date d'expiration", + "or": "ou", + "expireAfter": "expire après", + "pickupCode": "Code de retrait", + "passwordProtection": "Protection par mot de passe", + "readNotify": "Notification de lecture", + "passwordPlaceholder": "Saisissez le mot de passe", + "emailPlaceholder": "Saisissez l'adresse e-mail", + "viewOptions": { + "xview": "{0} vues" + }, + "expireOptions": { + "5min": "5 minutes", + "1hour": "1 heure", + "1day": "1 jour", + "3days": "3 jours" + } + } + }, + "progress": { + "file": { + "totalUploadProgress": "Progression totale du téléversement", + "fileList": "Liste des fichiers", + "fileName": "Nom du fichier", + "fileSize": "Taille du fichier", + "uploadSpeed": "Vitesse d'envoi", + "progress": "Progression", + "uploadDetails": "Détails du téléversement", + "chunk": "Bloc", + "completed": "Terminé", + "discarded": "Abandonné", + "pending": "En attente", + "chunkProgress": "Barre de progression des blocs", + "chunkHeatmap": "Carte thermique des blocs", + "heatmap": "Carte thermique", + "progressBar": "Barre de progression", + "uploadError": "Erreur de téléversement", + "chunkUploadFailed": "Le bloc {1} du fichier {0} a échoué plusieurs fois, le téléversement a été interrompu", + "chunkUploadRetry": "Le bloc {1} du fichier {0} n'a pas pu être téléversé, une nouvelle tentative sera effectuée plus tard", + "fileUploadFailed": "Le téléversement du fichier {0} a échoué, veuillez réessayer", + "uploadFailed": "Échec du téléversement", + "processing": { + "hash": "Calcul du hash...", + "create": "Initialisation du téléversement...", + "upload": "Téléversement en cours...", + "finish": "Téléversement terminé" + }, + "instantUploadSuccess": "Un fichier avec le même hash existe déjà dans le cloud, téléversement instantané réussi", + "uploadFailedRetry": "Le téléversement a échoué, veuillez réessayer plus tard", + "uploadSpeedInfo": { + "title": "Comment la vitesse de téléversement est-elle calculée ?", + "desc": { + "base": "La vitesse est estimée à partir de {chunkNum} * {chunkSize} téléversés pendant la seconde en cours, elle peut donc légèrement différer de la vitesse réelle et n'est fournie qu'à titre indicatif", + "chunkNum": "Nombre de blocs du fichier", + "chunkSize": "Taille de chaque bloc du fichier" + } + } + } + }, + "result": { + "file": { + "title": "Téléversement réussi", + "fileList": "Liste des fichiers", + "info": "Informations", + "downloadNums": "Nombre de téléchargements", + "expireTime": "Date d'expiration", + "pickupCode": "Code de retrait", + "link": "Lien", + "copySuccess": "Copié avec succès" + }, + "imageCompress": { + "title": "Compression d'image", + "totalSize": "Taille totale", + "task": "Tâche", + "retry": "Nouvelle tentative {0}/{1}", + "failed": "Échec" + }, + "imageConvert": { + "title": "Conversion d'image", + "convert": "Convertir", + "task": "Tâche", + "retry": "Nouvelle tentative {0}/{1}", + "failed": "Échec" + }, + "text": { + "title": "Partage réussi", + "info": "Informations", + "viewNums": "Nombre de vues", + "expireTime": "Date d'expiration", + "pickupCode": "Code de retrait", + "link": "Lien", + "content": "Contenu", + "copySuccess": "Copié avec succès" + }, + "textTranslate": { + "title": "Traduction de texte", + "sourceText": "Texte source", + "translatedText": "Texte traduit", + "sourceLanguage": "Langue source", + "targetLanguage": "Langue cible", + "provider": "Fournisseur", + "retranslate": "Traduire à nouveau", + "empty": "Saisissez du texte puis cliquez sur retraduire pour voir le résultat", + "copy": "Copier la traduction", + "copySuccess": "Traduction copiée", + "language": { + "auto": "Détection automatique", + "zh-CN": "Chinois", + "en": "Anglais", + "ja": "Japonais", + "ko": "Coréen" + } + }, + "qrCode": { + "title": "Code QR de partage" + } + }, + "shareView": { + "linkExpired": "Ce lien a expiré.", + "passwall": { + "title": "Saisir le mot de passe", + "passwordError": "Mot de passe incorrect", + "passwordPlaceholder": "Saisissez le mot de passe" + }, + "fileShare": { + "title": "Télécharger le fichier", + "downloadBtn": "Télécharger", + "needPassword": "Mot de passe requis", + "expireTime": "Date d'expiration", + "remainingDownloads": "Téléchargements restants", + "getTokenFailed": "Échec de récupération du jeton", + "durationFormat": "D [jours] HH:mm:ss" + }, + "textShare": { + "title": "Afficher le texte", + "viewBtn": "Afficher", + "needPassword": "Mot de passe requis", + "expireTime": "Date d'expiration", + "remainingViews": "Vues restantes", + "durationFormat": "D [jours] HH:mm:ss" + } + }, + "about": { + "powerBy": "Plateforme open source auto-hébergée de partage temporaire de fichiers propulsée par {0}", + "file": "Fichier", + "share": "Partager", + "download": "Télécharger", + "task": "Tâche", + "admin": "Administrateur du site", + "author": "Auteur", + "title": "À propos", + "about": "À propos", + "systemInfo": "Informations système", + "enabledFeatures": "Fonctionnalités de l'instance", + "enabledFeaturesEmpty": "Aucune fonctionnalité supplémentaire n'est activée pour cette instance", + "systemVersion": "Version du système", + "storage": "Stockage", + "analysis": "Analyse", + "fileSize": "Taille des fichiers", + "fileNum": "Nombre de fichiers", + "processed": "Traités", + "failed": "Échecs" + } + } +} diff --git a/front/i18n/locales/ja.json b/front/i18n/locales/ja.json new file mode 100644 index 0000000..5f874bb --- /dev/null +++ b/front/i18n/locales/ja.json @@ -0,0 +1,235 @@ +{ + "navbar": { + "file": "ファイル", + "text": "テキスト" + }, + "i18n": { + "switchLocale": "言語を切り替える" + }, + "seo": { + "desc": "015 は一時的なファイル共有プラットフォームであり、大容量ファイルの分割アップロード、一時テキストのアップロード、ダウンロード、共有をサポートします" + }, + "btn": { + "submit": "送信", + "backToHome": "ホームに戻る" + }, + "page": { + "upload": { + "file": { + "uploadFile": "ファイルをアップロード", + "uploadFilePlaceholder": "ファイルをドラッグ&ドロップ、またはクリックしてアップロード", + "addMore": "さらに追加", + "handleType": { + "file-share": "ファイル共有", + "file-image-compress": "画像圧縮", + "file-image-convert": "形式変換" + } + }, + "text": { + "uploadText": "テキストをアップロード", + "uploadTextPlaceholder": "テキスト処理機能で共有、翻訳、要約、画像生成、大規模モデルへの質問を簡単に行えます", + "handleType": { + "text-share": "テキスト共有", + "text-translate": "テキスト翻訳" + } + }, + "pickup": { + "title": "受取コードを入力", + "codeError": "受取コードが正しくありません", + "btn": "受け取る" + } + }, + "shareOptions": { + "file": { + "title": "共有オプション", + "downloadNums": "ダウンロード回数", + "expireTime": "有効期限", + "or": "または", + "expireAfter": "後に期限切れ", + "pickupCode": "受取コード", + "passwordProtection": "パスワード保護", + "downloadNotify": "ダウンロード通知", + "passwordPlaceholder": "パスワードを入力", + "emailPlaceholder": "メールアドレスを入力", + "downloadOptions": { + "xdownload": "{0} 回ダウンロード" + }, + "expireOptions": { + "5min": "5分", + "1hour": "1時間", + "1day": "1日", + "3days": "3日" + } + }, + "imageConvert": { + "title": "画像変換", + "targetFormat": "変換先形式" + }, + "text": { + "title": "共有オプション", + "viewNums": "閲覧回数", + "expireTime": "有効期限", + "or": "または", + "expireAfter": "後に期限切れ", + "pickupCode": "受取コード", + "passwordProtection": "パスワード保護", + "readNotify": "既読通知", + "passwordPlaceholder": "パスワードを入力", + "emailPlaceholder": "メールアドレスを入力", + "viewOptions": { + "xview": "{0} 回閲覧" + }, + "expireOptions": { + "5min": "5分", + "1hour": "1時間", + "1day": "1日", + "3days": "3日" + } + } + }, + "progress": { + "file": { + "totalUploadProgress": "全体のアップロード進捗", + "fileList": "ファイル一覧", + "fileName": "ファイル名", + "fileSize": "ファイルサイズ", + "uploadSpeed": "アップロード速度", + "progress": "進捗", + "uploadDetails": "アップロード詳細", + "chunk": "チャンク", + "completed": "完了", + "discarded": "破棄済み", + "pending": "保留中", + "chunkProgress": "チャンク進捗バー", + "chunkHeatmap": "チャンクヒートマップ", + "heatmap": "ヒートマップ", + "progressBar": "進捗バー", + "uploadError": "アップロードエラー", + "chunkUploadFailed": "ファイル {0} のチャンク {1} は複数回失敗したため、アップロードを中止しました", + "chunkUploadRetry": "ファイル {0} のチャンク {1} のアップロードに失敗しました。後でもう一度試します", + "fileUploadFailed": "ファイル {0} のアップロードに失敗しました。もう一度お試しください", + "uploadFailed": "アップロード失敗", + "processing": { + "hash": "ハッシュを計算中...", + "create": "アップロードを初期化中...", + "upload": "アップロード中...", + "finish": "アップロード完了" + }, + "instantUploadSuccess": "同じハッシュのファイルがクラウドに存在するため、秒でアップロード完了しました", + "uploadFailedRetry": "アップロードに失敗しました。しばらくしてから再試行してください", + "uploadSpeedInfo": { + "title": "アップロード速度はどのように計算されますか?", + "desc": { + "base": "アップロード速度は、現在の1秒間にアップロードされた {chunkNum} * {chunkSize} を元に推定しており、実際の速度と多少の誤差がある場合があります。参考値としてご利用ください", + "chunkNum": "ファイルチャンク数", + "chunkSize": "各ファイルチャンクのサイズ" + } + } + } + }, + "result": { + "file": { + "title": "アップロード成功", + "fileList": "ファイル一覧", + "info": "情報", + "downloadNums": "ダウンロード回数", + "expireTime": "有効期限", + "pickupCode": "受取コード", + "link": "リンク", + "copySuccess": "コピーしました" + }, + "imageCompress": { + "title": "画像圧縮", + "totalSize": "合計サイズ", + "task": "タスク", + "retry": "再試行 {0}/{1}", + "failed": "失敗" + }, + "imageConvert": { + "title": "画像変換", + "convert": "変換", + "task": "タスク", + "retry": "再試行 {0}/{1}", + "failed": "失敗" + }, + "text": { + "title": "共有成功", + "info": "情報", + "viewNums": "閲覧回数", + "expireTime": "有効期限", + "pickupCode": "受取コード", + "link": "リンク", + "content": "内容", + "copySuccess": "コピーしました" + }, + "textTranslate": { + "title": "テキスト翻訳", + "sourceText": "入力テキスト", + "translatedText": "翻訳結果", + "sourceLanguage": "元の言語", + "targetLanguage": "翻訳先の言語", + "provider": "プロバイダー", + "retranslate": "再翻訳", + "empty": "テキストを入力して再翻訳をクリックすると結果が表示されます", + "copy": "翻訳文をコピー", + "copySuccess": "翻訳文をコピーしました", + "language": { + "auto": "自動検出", + "zh-CN": "中国語", + "en": "英語", + "ja": "日本語", + "ko": "韓国語" + } + }, + "qrCode": { + "title": "共有QRコード" + } + }, + "shareView": { + "linkExpired": "このリンクは期限切れです。", + "passwall": { + "title": "パスワードを入力", + "passwordError": "パスワードが正しくありません", + "passwordPlaceholder": "パスワードを入力" + }, + "fileShare": { + "title": "ファイルをダウンロード", + "downloadBtn": "ダウンロード", + "needPassword": "パスワードが必要です", + "expireTime": "有効期限", + "remainingDownloads": "残りダウンロード回数", + "getTokenFailed": "トークンの取得に失敗しました", + "durationFormat": "D日 HH:mm:ss" + }, + "textShare": { + "title": "テキストを表示", + "viewBtn": "表示", + "needPassword": "パスワードが必要です", + "expireTime": "有効期限", + "remainingViews": "残り閲覧回数", + "durationFormat": "D日 HH:mm:ss" + } + }, + "about": { + "powerBy": "{0} によって支えられているオープンソースのセルフホスト型一時ファイル共有プラットフォーム", + "file": "ファイル", + "share": "共有", + "download": "ダウンロード", + "task": "タスク", + "admin": "サイト管理者", + "author": "作者", + "title": "このサイトについて", + "about": "概要", + "systemInfo": "システム情報", + "enabledFeatures": "有効な機能", + "enabledFeaturesEmpty": "このインスタンスでは追加機能は有効化されていません", + "systemVersion": "システムバージョン", + "storage": "保存済みファイル", + "analysis": "分析", + "fileSize": "ファイルサイズ", + "fileNum": "ファイル数", + "processed": "処理済み", + "failed": "失敗" + } + } +} diff --git a/front/i18n/locales/ko.json b/front/i18n/locales/ko.json new file mode 100644 index 0000000..00e6e5d --- /dev/null +++ b/front/i18n/locales/ko.json @@ -0,0 +1,235 @@ +{ + "navbar": { + "file": "파일", + "text": "텍스트" + }, + "i18n": { + "switchLocale": "언어 전환" + }, + "seo": { + "desc": "015는 임시 파일 공유 플랫폼으로, 대용량 파일 분할 업로드와 임시 텍스트 업로드, 다운로드 및 공유를 지원합니다" + }, + "btn": { + "submit": "제출", + "backToHome": "홈으로 돌아가기" + }, + "page": { + "upload": { + "file": { + "uploadFile": "파일 업로드", + "uploadFilePlaceholder": "파일을 드래그 앤 드롭하거나 클릭하여 업로드", + "addMore": "더 추가", + "handleType": { + "file-share": "파일 공유", + "file-image-compress": "이미지 압축", + "file-image-convert": "형식 변환" + } + }, + "text": { + "uploadText": "텍스트 업로드", + "uploadTextPlaceholder": "텍스트 처리기를 사용해 공유, 번역, 요약, 이미지 생성, 대형 모델 질의를 손쉽게 할 수 있습니다", + "handleType": { + "text-share": "텍스트 공유", + "text-translate": "텍스트 번역" + } + }, + "pickup": { + "title": "수령 코드 입력", + "codeError": "수령 코드가 올바르지 않습니다", + "btn": "수령" + } + }, + "shareOptions": { + "file": { + "title": "공유 옵션", + "downloadNums": "다운로드 횟수", + "expireTime": "만료 시간", + "or": "또는", + "expireAfter": "후 만료", + "pickupCode": "수령 코드", + "passwordProtection": "비밀번호 보호", + "downloadNotify": "다운로드 알림", + "passwordPlaceholder": "비밀번호를 입력하세요", + "emailPlaceholder": "이메일을 입력하세요", + "downloadOptions": { + "xdownload": "{0}회 다운로드" + }, + "expireOptions": { + "5min": "5분", + "1hour": "1시간", + "1day": "1일", + "3days": "3일" + } + }, + "imageConvert": { + "title": "이미지 변환", + "targetFormat": "대상 형식" + }, + "text": { + "title": "공유 옵션", + "viewNums": "조회 횟수", + "expireTime": "만료 시간", + "or": "또는", + "expireAfter": "후 만료", + "pickupCode": "수령 코드", + "passwordProtection": "비밀번호 보호", + "readNotify": "읽음 알림", + "passwordPlaceholder": "비밀번호를 입력하세요", + "emailPlaceholder": "이메일을 입력하세요", + "viewOptions": { + "xview": "{0}회 조회" + }, + "expireOptions": { + "5min": "5분", + "1hour": "1시간", + "1day": "1일", + "3days": "3일" + } + } + }, + "progress": { + "file": { + "totalUploadProgress": "전체 업로드 진행률", + "fileList": "파일 목록", + "fileName": "파일명", + "fileSize": "파일 크기", + "uploadSpeed": "업로드 속도", + "progress": "진행률", + "uploadDetails": "업로드 세부 정보", + "chunk": "청크", + "completed": "완료됨", + "discarded": "폐기됨", + "pending": "대기 중", + "chunkProgress": "청크 진행 막대", + "chunkHeatmap": "청크 히트맵", + "heatmap": "히트맵", + "progressBar": "진행 막대", + "uploadError": "업로드 오류", + "chunkUploadFailed": "파일 {0}의 청크 {1} 업로드가 여러 번 실패하여 업로드를 중단했습니다", + "chunkUploadRetry": "파일 {0}의 청크 {1} 업로드에 실패했습니다. 잠시 후 다시 시도합니다", + "fileUploadFailed": "파일 {0} 업로드에 실패했습니다. 다시 시도해 주세요", + "uploadFailed": "업로드 실패", + "processing": { + "hash": "해시 계산 중...", + "create": "업로드 초기화 중...", + "upload": "업로드 중...", + "finish": "업로드 완료" + }, + "instantUploadSuccess": "동일한 해시의 파일이 클라우드에 있어 즉시 업로드에 성공했습니다", + "uploadFailedRetry": "업로드에 실패했습니다. 잠시 후 다시 시도해 주세요", + "uploadSpeedInfo": { + "title": "업로드 속도는 어떻게 계산되나요?", + "desc": { + "base": "업로드 속도는 현재 1초 동안 업로드된 {chunkNum} * {chunkSize}를 기준으로 추정되며, 실제 속도와 약간의 차이가 있을 수 있습니다. 참고용으로만 사용해 주세요", + "chunkNum": "파일 청크 수", + "chunkSize": "각 파일 청크 크기" + } + } + } + }, + "result": { + "file": { + "title": "업로드 성공", + "fileList": "파일 목록", + "info": "정보", + "downloadNums": "다운로드 횟수", + "expireTime": "만료 시간", + "pickupCode": "수령 코드", + "link": "링크", + "copySuccess": "복사되었습니다" + }, + "imageCompress": { + "title": "이미지 압축", + "totalSize": "총 크기", + "task": "작업", + "retry": "재시도 {0}/{1}", + "failed": "실패" + }, + "imageConvert": { + "title": "이미지 변환", + "convert": "변환", + "task": "작업", + "retry": "재시도 {0}/{1}", + "failed": "실패" + }, + "text": { + "title": "공유 성공", + "info": "정보", + "viewNums": "조회 횟수", + "expireTime": "만료 시간", + "pickupCode": "수령 코드", + "link": "링크", + "content": "내용", + "copySuccess": "복사되었습니다" + }, + "textTranslate": { + "title": "텍스트 번역", + "sourceText": "입력 텍스트", + "translatedText": "번역 결과", + "sourceLanguage": "원본 언어", + "targetLanguage": "대상 언어", + "provider": "제공자", + "retranslate": "다시 번역", + "empty": "텍스트를 입력한 뒤 다시 번역을 클릭하면 결과를 볼 수 있습니다", + "copy": "번역문 복사", + "copySuccess": "번역문이 복사되었습니다", + "language": { + "auto": "자동 감지", + "zh-CN": "중국어", + "en": "영어", + "ja": "일본어", + "ko": "한국어" + } + }, + "qrCode": { + "title": "공유 QR 코드" + } + }, + "shareView": { + "linkExpired": "이 링크는 만료되었습니다.", + "passwall": { + "title": "비밀번호 입력", + "passwordError": "비밀번호가 올바르지 않습니다", + "passwordPlaceholder": "비밀번호를 입력하세요" + }, + "fileShare": { + "title": "파일 다운로드", + "downloadBtn": "다운로드", + "needPassword": "비밀번호가 필요합니다", + "expireTime": "만료 시간", + "remainingDownloads": "남은 다운로드 횟수", + "getTokenFailed": "토큰을 가져오지 못했습니다", + "durationFormat": "D일 HH:mm:ss" + }, + "textShare": { + "title": "텍스트 보기", + "viewBtn": "보기", + "needPassword": "비밀번호가 필요합니다", + "expireTime": "만료 시간", + "remainingViews": "남은 조회 횟수", + "durationFormat": "D일 HH:mm:ss" + } + }, + "about": { + "powerBy": "{0} 기반의 오픈 소스 셀프 호스팅 임시 파일 공유 플랫폼", + "file": "파일", + "share": "공유", + "download": "다운로드", + "task": "작업", + "admin": "사이트 관리자", + "author": "작성자", + "title": "소개", + "about": "소개", + "systemInfo": "시스템 정보", + "enabledFeatures": "활성화된 기능", + "enabledFeaturesEmpty": "현재 이 인스턴스에는 추가 기능이 활성화되어 있지 않습니다", + "systemVersion": "시스템 버전", + "storage": "저장소", + "analysis": "분석", + "fileSize": "파일 크기", + "fileNum": "파일 수", + "processed": "처리됨", + "failed": "실패" + } + } +} diff --git a/front/i18n/locales/zh-CN.json b/front/i18n/locales/zh-CN.json index a64a34a..0857bc7 100644 --- a/front/i18n/locales/zh-CN.json +++ b/front/i18n/locales/zh-CN.json @@ -29,7 +29,8 @@ "uploadText": "上传文本", "uploadTextPlaceholder": "使用我们的文本处理器轻松分享,翻译,总结,生成图片,询问大模型", "handleType": { - "text-share": "文本分享" + "text-share": "文本分享", + "text-translate": "文本翻译" } }, "pickup": { @@ -161,6 +162,25 @@ "content": "内容", "copySuccess": "复制成功" }, + "textTranslate": { + "title": "文本翻译", + "sourceText": "输入文本", + "translatedText": "翻译结果", + "sourceLanguage": "源语言", + "targetLanguage": "目标语言", + "provider": "提供商", + "retranslate": "重新翻译", + "empty": "输入文本后点击重新翻译查看结果", + "copy": "复制译文", + "copySuccess": "译文已复制", + "language": { + "auto": "自动检测", + "zh-CN": "中文", + "en": "英语", + "ja": "日语", + "ko": "韩语" + } + }, "qrCode": { "title": "分享二维码" } diff --git a/front/i18n/locales/zh-TW.json b/front/i18n/locales/zh-TW.json new file mode 100644 index 0000000..ec9cde5 --- /dev/null +++ b/front/i18n/locales/zh-TW.json @@ -0,0 +1,235 @@ +{ + "navbar": { + "file": "檔案", + "text": "文字" + }, + "i18n": { + "switchLocale": "切換語言" + }, + "seo": { + "desc": "015 是一個開源的臨時檔案分享平台專案,支援臨時大檔案分片上傳、臨時文字上傳、下載與分享" + }, + "btn": { + "submit": "提交", + "backToHome": "返回首頁" + }, + "page": { + "upload": { + "file": { + "uploadFile": "上傳檔案", + "uploadFilePlaceholder": "拖曳檔案或點擊上傳", + "addMore": "新增更多", + "handleType": { + "file-share": "檔案分享", + "file-image-compress": "圖片壓縮", + "file-image-convert": "格式轉換" + } + }, + "text": { + "uploadText": "上傳文字", + "uploadTextPlaceholder": "使用我們的文字處理器輕鬆分享、翻譯、總結、生成圖片,並向大型模型提問", + "handleType": { + "text-share": "文字分享", + "text-translate": "文字翻譯" + } + }, + "pickup": { + "title": "輸入取件碼", + "codeError": "取件碼錯誤", + "btn": "取件" + } + }, + "shareOptions": { + "file": { + "title": "分享選項", + "downloadNums": "下載次數", + "expireTime": "過期時間", + "or": "或", + "expireAfter": "後過期", + "pickupCode": "取件碼", + "passwordProtection": "密碼保護", + "downloadNotify": "下載通知", + "passwordPlaceholder": "請輸入密碼", + "emailPlaceholder": "請輸入電子郵件", + "downloadOptions": { + "xdownload": "{0} 次下載" + }, + "expireOptions": { + "5min": "5 分鐘", + "1hour": "1 小時", + "1day": "1 天", + "3days": "3 天" + } + }, + "imageConvert": { + "title": "圖片轉換", + "targetFormat": "目標格式" + }, + "text": { + "title": "分享選項", + "viewNums": "瀏覽次數", + "expireTime": "過期時間", + "or": "或", + "expireAfter": "後過期", + "pickupCode": "取件碼", + "passwordProtection": "密碼保護", + "readNotify": "已讀通知", + "passwordPlaceholder": "請輸入密碼", + "emailPlaceholder": "請輸入電子郵件", + "viewOptions": { + "xview": "{0} 次瀏覽" + }, + "expireOptions": { + "5min": "5 分鐘", + "1hour": "1 小時", + "1day": "1 天", + "3days": "3 天" + } + } + }, + "progress": { + "file": { + "totalUploadProgress": "總上傳進度", + "fileList": "檔案列表", + "fileName": "檔名", + "fileSize": "檔案大小", + "uploadSpeed": "上傳速度", + "progress": "進度", + "uploadDetails": "上傳詳情", + "chunk": "區塊", + "completed": "已完成", + "discarded": "已捨棄", + "pending": "待完成", + "chunkProgress": "區塊進度條", + "chunkHeatmap": "區塊熱力圖", + "heatmap": "熱力圖", + "progressBar": "進度條", + "uploadError": "上傳錯誤", + "chunkUploadFailed": "檔案 {0} 的第 {1} 個分塊多次上傳失敗,我們已終止該檔案上傳", + "chunkUploadRetry": "檔案 {0} 的第 {1} 個分塊上傳失敗,稍後將再次嘗試", + "fileUploadFailed": "檔案 {0} 上傳失敗,請重試", + "uploadFailed": "上傳失敗", + "processing": { + "hash": "計算雜湊中...", + "create": "初始化上傳中...", + "upload": "上傳中...", + "finish": "上傳完成" + }, + "instantUploadSuccess": "雲端已存在相同雜湊的檔案,秒傳成功", + "uploadFailedRetry": "上傳失敗,請稍後重試", + "uploadSpeedInfo": { + "title": "上傳速度如何計算", + "desc": { + "base": "上傳速度根據當前秒內上傳的 {chunkNum} * {chunkSize} 估算,可能與實際速度存在一定誤差,僅供參考", + "chunkNum": "檔案區塊數量", + "chunkSize": "每個檔案區塊大小" + } + } + } + }, + "result": { + "file": { + "title": "上傳成功", + "fileList": "檔案列表", + "info": "資訊", + "downloadNums": "下載次數", + "expireTime": "過期時間", + "pickupCode": "提取碼", + "link": "連結", + "copySuccess": "複製成功" + }, + "imageCompress": { + "title": "圖片壓縮", + "totalSize": "總大小", + "task": "任務", + "retry": "重試 {0}/{1}", + "failed": "失敗" + }, + "imageConvert": { + "title": "圖片轉換", + "convert": "轉換", + "task": "任務", + "retry": "重試 {0}/{1}", + "failed": "失敗" + }, + "text": { + "title": "分享成功", + "info": "資訊", + "viewNums": "瀏覽次數", + "expireTime": "過期時間", + "pickupCode": "提取碼", + "link": "連結", + "content": "內容", + "copySuccess": "複製成功" + }, + "textTranslate": { + "title": "文字翻譯", + "sourceText": "輸入文字", + "translatedText": "翻譯結果", + "sourceLanguage": "來源語言", + "targetLanguage": "目標語言", + "provider": "提供者", + "retranslate": "重新翻譯", + "empty": "輸入文字後點擊重新翻譯即可查看結果", + "copy": "複製譯文", + "copySuccess": "譯文已複製", + "language": { + "auto": "自動偵測", + "zh-CN": "中文", + "en": "英語", + "ja": "日語", + "ko": "韓語" + } + }, + "qrCode": { + "title": "分享 QR Code" + } + }, + "shareView": { + "linkExpired": "此連結已過期。", + "passwall": { + "title": "輸入密碼", + "passwordError": "密碼錯誤", + "passwordPlaceholder": "請輸入密碼" + }, + "fileShare": { + "title": "下載檔案", + "downloadBtn": "下載", + "needPassword": "需要密碼", + "expireTime": "過期時間", + "remainingDownloads": "剩餘下載次數", + "getTokenFailed": "取得 token 失敗", + "durationFormat": "D天 HH:mm:ss" + }, + "textShare": { + "title": "查看文字", + "viewBtn": "瀏覽", + "needPassword": "需要密碼", + "expireTime": "過期時間", + "remainingViews": "剩餘瀏覽次數", + "durationFormat": "D天 HH:mm:ss" + } + }, + "about": { + "powerBy": "由 {0} 驅動的開源自託管臨時檔案分享平台", + "file": "檔案", + "share": "分享", + "download": "下載", + "task": "任務", + "admin": "本站管理員", + "author": "作者", + "title": "關於", + "about": "關於", + "systemInfo": "系統資訊", + "enabledFeatures": "實例功能", + "enabledFeaturesEmpty": "目前此實例尚未啟用額外功能", + "systemVersion": "系統版本", + "storage": "已託管的檔案", + "analysis": "分析", + "fileSize": "檔案大小", + "fileNum": "檔案數量", + "processed": "處理數量", + "failed": "失敗數量" + } + } +}