feat(front): update I18nSwitchDrawer to support new locale structure and add German, French, Japanese, Korean, and Traditional Chinese translations

This commit is contained in:
keven1024
2026-04-07 22:53:13 +08:00
parent 6a7e8f85ac
commit 249b9f2350
8 changed files with 1226 additions and 19 deletions

View File

@@ -1,23 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { cx } from 'class-variance-authority' import { cx } from 'class-variance-authority'
import type { Locale } from '@intlify/core-base'
const props = defineProps<{ const props = defineProps<{
hide: () => void hide: () => void
}>() }>()
const { availableLocales, setLocale, locale: currentLocale, t } = useI18n() const { locales, setLocale, locale: currentLocale, t } = useI18n()
const localeMap = { const switchLocale = async (locale: Locale) => {
'zh-CN': '简体中文', await setLocale(locale)
en: 'English',
// 'ja': '日本語',
// 'ko': '한국어',
// 'fr': 'Français',
// 'de': 'Deutsch',
}
const switchLocale = async (locale: string) => {
await setLocale(locale as keyof typeof localeMap)
props.hide() props.hide()
} }
</script> </script>
@@ -26,12 +18,12 @@ const switchLocale = async (locale: string) => {
<div class="flex flex-col gap-1 py-2"> <div class="flex flex-col gap-1 py-2">
<div class="text-xl font-bold mb-3">{{ t('i18n.switchLocale') }}</div> <div class="text-xl font-bold mb-3">{{ t('i18n.switchLocale') }}</div>
<div <div
v-for="locale in availableLocales" v-for="locale in locales"
:key="locale" :key="locale.code"
:class="cx('rounded-md hover:bg-black/10 p-2 cursor-pointer', currentLocale === locale && 'bg-black/10 font-bold')" :class="cx('rounded-md hover:bg-black/10 p-2 cursor-pointer', currentLocale === locale.code && 'bg-black/10 font-bold')"
@click="() => switchLocale(locale)" @click="() => switchLocale(locale.code)"
> >
{{ localeMap?.[locale as keyof typeof localeMap] }} {{ locale.name }}
</div> </div>
</div> </div>
</template> </template>

235
front/i18n/locales/de.json Normal file
View File

@@ -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"
}
}
}

View File

@@ -29,7 +29,8 @@
"uploadText": "Upload Text", "uploadText": "Upload Text",
"uploadTextPlaceholder": "Share, translate, summarize, generate images, and ask large models with our text processor", "uploadTextPlaceholder": "Share, translate, summarize, generate images, and ask large models with our text processor",
"handleType": { "handleType": {
"text-share": "Text Share" "text-share": "Text Share",
"text-translate": "Text Translate"
} }
}, },
"pickup": { "pickup": {
@@ -161,6 +162,25 @@
"content": "Content", "content": "Content",
"copySuccess": "Copy Success" "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": { "qrCode": {
"title": "Share QR code" "title": "Share QR code"
} }

235
front/i18n/locales/fr.json Normal file
View File

@@ -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"
}
}
}

235
front/i18n/locales/ja.json Normal file
View File

@@ -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": "失敗"
}
}
}

235
front/i18n/locales/ko.json Normal file
View File

@@ -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": "실패"
}
}
}

View File

@@ -29,7 +29,8 @@
"uploadText": "上传文本", "uploadText": "上传文本",
"uploadTextPlaceholder": "使用我们的文本处理器轻松分享,翻译,总结,生成图片,询问大模型", "uploadTextPlaceholder": "使用我们的文本处理器轻松分享,翻译,总结,生成图片,询问大模型",
"handleType": { "handleType": {
"text-share": "文本分享" "text-share": "文本分享",
"text-translate": "文本翻译"
} }
}, },
"pickup": { "pickup": {
@@ -161,6 +162,25 @@
"content": "内容", "content": "内容",
"copySuccess": "复制成功" "copySuccess": "复制成功"
}, },
"textTranslate": {
"title": "文本翻译",
"sourceText": "输入文本",
"translatedText": "翻译结果",
"sourceLanguage": "源语言",
"targetLanguage": "目标语言",
"provider": "提供商",
"retranslate": "重新翻译",
"empty": "输入文本后点击重新翻译查看结果",
"copy": "复制译文",
"copySuccess": "译文已复制",
"language": {
"auto": "自动检测",
"zh-CN": "中文",
"en": "英语",
"ja": "日语",
"ko": "韩语"
}
},
"qrCode": { "qrCode": {
"title": "分享二维码" "title": "分享二维码"
} }

View File

@@ -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": "失敗數量"
}
}
}