diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json
index f48d6b7..2854ad4 100644
--- a/src/i18n/locales/en.json
+++ b/src/i18n/locales/en.json
@@ -1378,16 +1378,9 @@
"scanning": "Scanning for browser profiles...",
"noneFound": "No browser profiles found on your system.",
"noneFoundHint": "Try the manual import option if you have profiles in custom locations.",
- "selectProfile": "Select Profile:",
- "selectProfilePlaceholder": "Choose a detected profile",
- "pathLabel": "Path:",
- "browserLabel": "Browser:",
"newProfileName": "New Profile Name:",
"newProfileNamePlaceholder": "Enter a name for the imported profile",
"manualTitle": "Manual Profile Import",
- "browserType": "Browser Type:",
- "loadingBrowsers": "Loading browsers...",
- "selectBrowserType": "Select browser type",
"profileFolderPath": "Profile Folder Path:",
"profileFolderPlaceholder": "Enter the full path to the profile folder",
"browseFolderTitle": "Browse for folder",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "Select Browser Profile Folder",
"folderDialogFailed": "Failed to open folder dialog",
"detectFailed": "Failed to detect existing browser profiles",
- "fillFields": "Please fill in all fields",
- "selectAndName": "Please select a profile and provide a name",
- "profileNotFound": "Selected profile not found",
- "importedSuccess": "Successfully imported profile \"{{name}}\"",
- "notInstalled": "{{browser}} is not installed. Please download {{browser}} first from the main window, then try importing again.",
- "importFailed": "Failed to import profile: {{error}}",
"proxyOptional": "Proxy (Optional)",
"noProxy": "No proxy",
"nextButton": "Next",
- "importButton": "Import",
- "importedAs": "This profile will be imported as a {{browser}} profile."
+ "importedAs": "This profile will be imported as a {{browser}} profile.",
+ "selectAll": "Select all",
+ "selectedCount": "{{count}} selected",
+ "scanButton": "Scan",
+ "manualHint": "Choose a profile folder, a browser user-data folder, a folder of exported profiles, or a ZIP archive.",
+ "selectArchiveTitle": "Select ZIP archive",
+ "noProfilesInLocation": "No profiles found in this location.",
+ "selectAtLeastOne": "Select at least one profile to import",
+ "emptyNames": "Every selected profile needs a name",
+ "profilesToImport": "Profiles to import",
+ "groupOptional": "Group (Optional)",
+ "noGroup": "No group",
+ "createNewGroup": "Create new group…",
+ "newGroupNamePlaceholder": "New group name",
+ "duplicateStrategyLabel": "If a profile name already exists",
+ "duplicateRename": "Rename automatically",
+ "duplicateSkip": "Skip",
+ "proxyRoundRobin": "Distribute stored proxies (round-robin)",
+ "importingTitle": "Importing profiles…",
+ "importProgress": "{{completed}} of {{total}} processed",
+ "resultsSummary": "{{imported}} imported, {{skipped}} skipped, {{failed}} failed",
+ "statusImported": "Imported",
+ "statusSkipped": "Skipped",
+ "statusFailed": "Failed",
+ "importButtonCount": "Import ({{count}})"
},
"syncTooltips": {
"syncing": "Syncing...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "The update {{version}} could not be verified because its checksum file could not be retrieved. The update was not installed; it will be retried later.",
"updateChecksumMismatch": "The downloaded update file {{file}} failed checksum verification and was discarded. Please try again.",
"nameCannotBeEmpty": "Name cannot be empty",
- "wayfernVersionNotAvailable": "Wayfern version {{requested}} is not available for download. The current version is {{current}}."
+ "wayfernVersionNotAvailable": "Wayfern version {{requested}} is not available for download. The current version is {{current}}.",
+ "profileNameExists": "A profile named \"{{name}}\" already exists",
+ "importSourceNotFound": "The source path does not exist",
+ "importNoItems": "Nothing selected to import",
+ "browserNotDownloaded": "No downloaded version of {{browser}} is available. Download it first, then retry the import.",
+ "archiveExtractionFailed": "Failed to extract the archive: {{detail}}",
+ "unsupportedArchiveFormat": "Unsupported archive format. Only ZIP archives are supported."
},
"rail": {
"profiles": "Profiles",
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index a66c14c..eb4a8e3 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -1378,16 +1378,9 @@
"scanning": "Buscando perfiles de navegador...",
"noneFound": "No se encontraron perfiles de navegador en tu sistema.",
"noneFoundHint": "Prueba la importación manual si tienes perfiles en ubicaciones personalizadas.",
- "selectProfile": "Seleccionar perfil:",
- "selectProfilePlaceholder": "Elige un perfil detectado",
- "pathLabel": "Ruta:",
- "browserLabel": "Navegador:",
"newProfileName": "Nombre del nuevo perfil:",
"newProfileNamePlaceholder": "Introduce un nombre para el perfil importado",
"manualTitle": "Importación manual de perfil",
- "browserType": "Tipo de navegador:",
- "loadingBrowsers": "Cargando navegadores...",
- "selectBrowserType": "Selecciona el tipo de navegador",
"profileFolderPath": "Ruta de la carpeta del perfil:",
"profileFolderPlaceholder": "Introduce la ruta completa a la carpeta del perfil",
"browseFolderTitle": "Buscar carpeta",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "Seleccionar carpeta de perfil",
"folderDialogFailed": "Error al abrir el diálogo de carpeta",
"detectFailed": "Error al detectar los perfiles de navegador existentes",
- "fillFields": "Por favor, completa todos los campos",
- "selectAndName": "Selecciona un perfil y proporciona un nombre",
- "profileNotFound": "Perfil seleccionado no encontrado",
- "importedSuccess": "Perfil \"{{name}}\" importado correctamente",
- "notInstalled": "{{browser}} no está instalado. Por favor descarga {{browser}} primero desde la ventana principal y luego intenta importar de nuevo.",
- "importFailed": "Error al importar el perfil: {{error}}",
"proxyOptional": "Proxy (Opcional)",
"noProxy": "Sin proxy",
"nextButton": "Siguiente",
- "importButton": "Importar",
- "importedAs": "Este perfil se importará como un perfil de {{browser}}."
+ "importedAs": "Este perfil se importará como un perfil de {{browser}}.",
+ "selectAll": "Seleccionar todo",
+ "selectedCount": "{{count}} seleccionados",
+ "scanButton": "Escanear",
+ "manualHint": "Elige una carpeta de perfil, una carpeta de datos de usuario del navegador, una carpeta con perfiles exportados o un archivo ZIP.",
+ "selectArchiveTitle": "Seleccionar archivo ZIP",
+ "noProfilesInLocation": "No se encontraron perfiles en esta ubicación.",
+ "selectAtLeastOne": "Selecciona al menos un perfil para importar",
+ "emptyNames": "Cada perfil seleccionado necesita un nombre",
+ "profilesToImport": "Perfiles a importar",
+ "groupOptional": "Grupo (opcional)",
+ "noGroup": "Sin grupo",
+ "createNewGroup": "Crear nuevo grupo…",
+ "newGroupNamePlaceholder": "Nombre del nuevo grupo",
+ "duplicateStrategyLabel": "Si el nombre del perfil ya existe",
+ "duplicateRename": "Renombrar automáticamente",
+ "duplicateSkip": "Omitir",
+ "proxyRoundRobin": "Distribuir proxies guardados (round-robin)",
+ "importingTitle": "Importando perfiles…",
+ "importProgress": "{{completed}} de {{total}} procesados",
+ "resultsSummary": "{{imported}} importados, {{skipped}} omitidos, {{failed}} fallidos",
+ "statusImported": "Importado",
+ "statusSkipped": "Omitido",
+ "statusFailed": "Fallido",
+ "importButtonCount": "Importar ({{count}})"
},
"syncTooltips": {
"syncing": "Sincronizando...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "No se pudo verificar la actualización {{version}} porque no se pudo obtener su archivo de sumas de comprobación. La actualización no se instaló; se reintentará más tarde.",
"updateChecksumMismatch": "El archivo de actualización descargado {{file}} no superó la verificación de suma de comprobación y fue descartado. Inténtalo de nuevo.",
"nameCannotBeEmpty": "El nombre no puede estar vacío",
- "wayfernVersionNotAvailable": "La versión {{requested}} de Wayfern no está disponible para descargar. La versión actual es {{current}}."
+ "wayfernVersionNotAvailable": "La versión {{requested}} de Wayfern no está disponible para descargar. La versión actual es {{current}}.",
+ "profileNameExists": "Ya existe un perfil llamado \"{{name}}\"",
+ "importSourceNotFound": "La ruta de origen no existe",
+ "importNoItems": "No hay nada seleccionado para importar",
+ "browserNotDownloaded": "No hay ninguna versión descargada de {{browser}}. Descárgala primero y vuelve a intentar la importación.",
+ "archiveExtractionFailed": "No se pudo extraer el archivo: {{detail}}",
+ "unsupportedArchiveFormat": "Formato de archivo no compatible. Solo se admiten archivos ZIP."
},
"rail": {
"profiles": "Perfiles",
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 3326925..7dce185 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -1378,16 +1378,9 @@
"scanning": "Recherche de profils de navigateur...",
"noneFound": "Aucun profil de navigateur trouvé sur votre système.",
"noneFoundHint": "Essayez l'import manuel si vos profils sont dans des emplacements personnalisés.",
- "selectProfile": "Sélectionner un profil :",
- "selectProfilePlaceholder": "Choisissez un profil détecté",
- "pathLabel": "Chemin :",
- "browserLabel": "Navigateur :",
"newProfileName": "Nom du nouveau profil :",
"newProfileNamePlaceholder": "Entrez un nom pour le profil importé",
"manualTitle": "Import manuel de profil",
- "browserType": "Type de navigateur :",
- "loadingBrowsers": "Chargement des navigateurs...",
- "selectBrowserType": "Sélectionnez le type de navigateur",
"profileFolderPath": "Chemin du dossier du profil :",
"profileFolderPlaceholder": "Entrez le chemin complet vers le dossier du profil",
"browseFolderTitle": "Parcourir le dossier",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "Sélectionnez un dossier de profil de navigateur",
"folderDialogFailed": "Échec de l'ouverture de la boîte de dialogue de dossier",
"detectFailed": "Échec de la détection des profils de navigateur existants",
- "fillFields": "Veuillez remplir tous les champs",
- "selectAndName": "Sélectionnez un profil et fournissez un nom",
- "profileNotFound": "Profil sélectionné introuvable",
- "importedSuccess": "Profil « {{name}} » importé avec succès",
- "notInstalled": "{{browser}} n'est pas installé. Veuillez télécharger {{browser}} depuis la fenêtre principale puis réessayer.",
- "importFailed": "Échec de l'import du profil : {{error}}",
"proxyOptional": "Proxy (optionnel)",
"noProxy": "Aucun proxy",
"nextButton": "Suivant",
- "importButton": "Importer",
- "importedAs": "Ce profil sera importé en tant que profil {{browser}}."
+ "importedAs": "Ce profil sera importé en tant que profil {{browser}}.",
+ "selectAll": "Tout sélectionner",
+ "selectedCount": "{{count}} sélectionné(s)",
+ "scanButton": "Analyser",
+ "manualHint": "Choisissez un dossier de profil, un dossier de données utilisateur du navigateur, un dossier de profils exportés ou une archive ZIP.",
+ "selectArchiveTitle": "Sélectionner une archive ZIP",
+ "noProfilesInLocation": "Aucun profil trouvé à cet emplacement.",
+ "selectAtLeastOne": "Sélectionnez au moins un profil à importer",
+ "emptyNames": "Chaque profil sélectionné doit avoir un nom",
+ "profilesToImport": "Profils à importer",
+ "groupOptional": "Groupe (facultatif)",
+ "noGroup": "Aucun groupe",
+ "createNewGroup": "Créer un nouveau groupe…",
+ "newGroupNamePlaceholder": "Nom du nouveau groupe",
+ "duplicateStrategyLabel": "Si le nom du profil existe déjà",
+ "duplicateRename": "Renommer automatiquement",
+ "duplicateSkip": "Ignorer",
+ "proxyRoundRobin": "Répartir les proxys enregistrés (round-robin)",
+ "importingTitle": "Importation des profils…",
+ "importProgress": "{{completed}} sur {{total}} traités",
+ "resultsSummary": "{{imported}} importés, {{skipped}} ignorés, {{failed}} échoués",
+ "statusImported": "Importé",
+ "statusSkipped": "Ignoré",
+ "statusFailed": "Échec",
+ "importButtonCount": "Importer ({{count}})"
},
"syncTooltips": {
"syncing": "Synchronisation...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "La mise à jour {{version}} n'a pas pu être vérifiée car son fichier de sommes de contrôle n'a pas pu être récupéré. La mise à jour n'a pas été installée ; une nouvelle tentative aura lieu plus tard.",
"updateChecksumMismatch": "Le fichier de mise à jour téléchargé {{file}} a échoué à la vérification de la somme de contrôle et a été supprimé. Veuillez réessayer.",
"nameCannotBeEmpty": "Le nom ne peut pas être vide",
- "wayfernVersionNotAvailable": "La version {{requested}} de Wayfern n'est pas disponible au téléchargement. La version actuelle est {{current}}."
+ "wayfernVersionNotAvailable": "La version {{requested}} de Wayfern n'est pas disponible au téléchargement. La version actuelle est {{current}}.",
+ "profileNameExists": "Un profil nommé « {{name}} » existe déjà",
+ "importSourceNotFound": "Le chemin source n'existe pas",
+ "importNoItems": "Rien n'est sélectionné pour l'importation",
+ "browserNotDownloaded": "Aucune version téléchargée de {{browser}} n'est disponible. Téléchargez-la d'abord, puis réessayez l'importation.",
+ "archiveExtractionFailed": "Échec de l'extraction de l'archive : {{detail}}",
+ "unsupportedArchiveFormat": "Format d'archive non pris en charge. Seules les archives ZIP sont prises en charge."
},
"rail": {
"profiles": "Profils",
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 33fd1b7..a0e3f75 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -1378,16 +1378,9 @@
"scanning": "ブラウザプロファイルをスキャン中...",
"noneFound": "システムにブラウザプロファイルが見つかりませんでした。",
"noneFoundHint": "カスタムの場所にプロファイルがある場合は手動インポートをお試しください。",
- "selectProfile": "プロファイルを選択:",
- "selectProfilePlaceholder": "検出されたプロファイルを選択",
- "pathLabel": "パス:",
- "browserLabel": "ブラウザ:",
"newProfileName": "新しいプロファイル名:",
"newProfileNamePlaceholder": "インポートするプロファイルの名前を入力",
"manualTitle": "手動プロファイルインポート",
- "browserType": "ブラウザの種類:",
- "loadingBrowsers": "ブラウザを読み込み中...",
- "selectBrowserType": "ブラウザの種類を選択",
"profileFolderPath": "プロファイルフォルダパス:",
"profileFolderPlaceholder": "プロファイルフォルダのフルパスを入力",
"browseFolderTitle": "フォルダを参照",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "ブラウザプロファイルフォルダを選択",
"folderDialogFailed": "フォルダダイアログを開けませんでした",
"detectFailed": "既存のブラウザプロファイルの検出に失敗しました",
- "fillFields": "すべてのフィールドを入力してください",
- "selectAndName": "プロファイルを選択し、名前を入力してください",
- "profileNotFound": "選択されたプロファイルが見つかりません",
- "importedSuccess": "プロファイル「{{name}}」をインポートしました",
- "notInstalled": "{{browser}} はインストールされていません。メインウィンドウから {{browser}} をダウンロードしてからもう一度インポートしてください。",
- "importFailed": "プロファイルのインポートに失敗しました: {{error}}",
"proxyOptional": "プロキシ (任意)",
"noProxy": "プロキシなし",
"nextButton": "次へ",
- "importButton": "インポート",
- "importedAs": "このプロファイルは {{browser}} プロファイルとしてインポートされます。"
+ "importedAs": "このプロファイルは {{browser}} プロファイルとしてインポートされます。",
+ "selectAll": "すべて選択",
+ "selectedCount": "{{count}}件選択中",
+ "scanButton": "スキャン",
+ "manualHint": "プロファイルフォルダ、ブラウザのユーザーデータフォルダ、エクスポートされたプロファイルのフォルダ、またはZIPアーカイブを選択してください。",
+ "selectArchiveTitle": "ZIPアーカイブを選択",
+ "noProfilesInLocation": "この場所にプロファイルが見つかりませんでした。",
+ "selectAtLeastOne": "インポートするプロファイルを1つ以上選択してください",
+ "emptyNames": "選択したすべてのプロファイルに名前が必要です",
+ "profilesToImport": "インポートするプロファイル",
+ "groupOptional": "グループ(任意)",
+ "noGroup": "グループなし",
+ "createNewGroup": "新しいグループを作成…",
+ "newGroupNamePlaceholder": "新しいグループ名",
+ "duplicateStrategyLabel": "プロファイル名が既に存在する場合",
+ "duplicateRename": "自動的に名前を変更",
+ "duplicateSkip": "スキップ",
+ "proxyRoundRobin": "保存済みプロキシを順番に割り当て(ラウンドロビン)",
+ "importingTitle": "プロファイルをインポート中…",
+ "importProgress": "{{total}}件中{{completed}}件処理済み",
+ "resultsSummary": "インポート{{imported}}件、スキップ{{skipped}}件、失敗{{failed}}件",
+ "statusImported": "インポート済み",
+ "statusSkipped": "スキップ",
+ "statusFailed": "失敗",
+ "importButtonCount": "インポート ({{count}})"
},
"syncTooltips": {
"syncing": "同期中...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "アップデート {{version}} のチェックサムファイルを取得できなかったため、検証できませんでした。アップデートはインストールされませんでした。後で再試行されます。",
"updateChecksumMismatch": "ダウンロードしたアップデートファイル {{file}} はチェックサム検証に失敗したため破棄されました。もう一度お試しください。",
"nameCannotBeEmpty": "名前を空にすることはできません",
- "wayfernVersionNotAvailable": "Wayfernのバージョン{{requested}}はダウンロードできません。現在のバージョンは{{current}}です。"
+ "wayfernVersionNotAvailable": "Wayfernのバージョン{{requested}}はダウンロードできません。現在のバージョンは{{current}}です。",
+ "profileNameExists": "「{{name}}」という名前のプロファイルは既に存在します",
+ "importSourceNotFound": "ソースパスが存在しません",
+ "importNoItems": "インポートする項目が選択されていません",
+ "browserNotDownloaded": "{{browser}}のダウンロード済みバージョンがありません。先にダウンロードしてから、再度インポートしてください。",
+ "archiveExtractionFailed": "アーカイブの展開に失敗しました:{{detail}}",
+ "unsupportedArchiveFormat": "サポートされていないアーカイブ形式です。ZIPアーカイブのみサポートされています。"
},
"rail": {
"profiles": "プロファイル",
diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json
index 70d16ea..740dd2e 100644
--- a/src/i18n/locales/ko.json
+++ b/src/i18n/locales/ko.json
@@ -1378,16 +1378,9 @@
"scanning": "브라우저 프로필 검색 중...",
"noneFound": "시스템에서 브라우저 프로필을 찾을 수 없습니다.",
"noneFoundHint": "사용자 지정 위치에 프로필이 있는 경우 수동 가져오기 옵션을 시도해 보세요.",
- "selectProfile": "프로필 선택:",
- "selectProfilePlaceholder": "감지된 프로필 선택",
- "pathLabel": "경로:",
- "browserLabel": "브라우저:",
"newProfileName": "새 프로필 이름:",
"newProfileNamePlaceholder": "가져올 프로필의 이름을 입력하세요",
"manualTitle": "수동 프로필 가져오기",
- "browserType": "브라우저 유형:",
- "loadingBrowsers": "브라우저 불러오는 중...",
- "selectBrowserType": "브라우저 유형 선택",
"profileFolderPath": "프로필 폴더 경로:",
"profileFolderPlaceholder": "프로필 폴더의 전체 경로 입력",
"browseFolderTitle": "폴더 찾아보기",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "브라우저 프로필 폴더 선택",
"folderDialogFailed": "폴더 대화상자 열기 실패",
"detectFailed": "기존 브라우저 프로필 감지 실패",
- "fillFields": "모든 필드를 입력하세요",
- "selectAndName": "프로필을 선택하고 이름을 제공하세요",
- "profileNotFound": "선택한 프로필을 찾을 수 없습니다",
- "importedSuccess": "프로필 \"{{name}}\"을(를) 가져왔습니다",
- "notInstalled": "{{browser}}이(가) 설치되지 않았습니다. 메인 창에서 먼저 {{browser}}을(를) 다운로드한 후 다시 가져오기를 시도하세요.",
- "importFailed": "프로필 가져오기 실패: {{error}}",
"proxyOptional": "프록시 (선택 사항)",
"noProxy": "프록시 없음",
"nextButton": "다음",
- "importButton": "가져오기",
- "importedAs": "이 프로필은 {{browser}} 프로필로 가져옵니다."
+ "importedAs": "이 프로필은 {{browser}} 프로필로 가져옵니다.",
+ "selectAll": "모두 선택",
+ "selectedCount": "{{count}}개 선택됨",
+ "scanButton": "스캔",
+ "manualHint": "프로필 폴더, 브라우저 사용자 데이터 폴더, 내보낸 프로필 폴더 또는 ZIP 아카이브를 선택하세요.",
+ "selectArchiveTitle": "ZIP 아카이브 선택",
+ "noProfilesInLocation": "이 위치에서 프로필을 찾을 수 없습니다.",
+ "selectAtLeastOne": "가져올 프로필을 하나 이상 선택하세요",
+ "emptyNames": "선택한 모든 프로필에 이름이 필요합니다",
+ "profilesToImport": "가져올 프로필",
+ "groupOptional": "그룹 (선택 사항)",
+ "noGroup": "그룹 없음",
+ "createNewGroup": "새 그룹 만들기…",
+ "newGroupNamePlaceholder": "새 그룹 이름",
+ "duplicateStrategyLabel": "프로필 이름이 이미 있는 경우",
+ "duplicateRename": "자동으로 이름 변경",
+ "duplicateSkip": "건너뛰기",
+ "proxyRoundRobin": "저장된 프록시 순환 할당 (라운드 로빈)",
+ "importingTitle": "프로필 가져오는 중…",
+ "importProgress": "{{total}}개 중 {{completed}}개 처리됨",
+ "resultsSummary": "가져옴 {{imported}}, 건너뜀 {{skipped}}, 실패 {{failed}}",
+ "statusImported": "가져옴",
+ "statusSkipped": "건너뜀",
+ "statusFailed": "실패",
+ "importButtonCount": "가져오기 ({{count}})"
},
"syncTooltips": {
"syncing": "동기화 중...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "업데이트 {{version}}의 체크섬 파일을 가져올 수 없어 검증하지 못했습니다. 업데이트가 설치되지 않았으며 나중에 다시 시도됩니다.",
"updateChecksumMismatch": "다운로드한 업데이트 파일 {{file}}이(가) 체크섬 검증에 실패하여 삭제되었습니다. 다시 시도해 주세요.",
"nameCannotBeEmpty": "이름은 비워둘 수 없습니다",
- "wayfernVersionNotAvailable": "Wayfern 버전 {{requested}}은(는) 다운로드할 수 없습니다. 현재 버전은 {{current}}입니다."
+ "wayfernVersionNotAvailable": "Wayfern 버전 {{requested}}은(는) 다운로드할 수 없습니다. 현재 버전은 {{current}}입니다.",
+ "profileNameExists": "\"{{name}}\" 이름의 프로필이 이미 있습니다",
+ "importSourceNotFound": "원본 경로가 존재하지 않습니다",
+ "importNoItems": "가져올 항목이 선택되지 않았습니다",
+ "browserNotDownloaded": "{{browser}}의 다운로드된 버전이 없습니다. 먼저 다운로드한 후 가져오기를 다시 시도하세요.",
+ "archiveExtractionFailed": "아카이브 추출에 실패했습니다: {{detail}}",
+ "unsupportedArchiveFormat": "지원되지 않는 아카이브 형식입니다. ZIP 아카이브만 지원됩니다."
},
"rail": {
"profiles": "프로필",
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index 79dfc29..3fc58ba 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -1378,16 +1378,9 @@
"scanning": "Procurando perfis de navegador...",
"noneFound": "Nenhum perfil de navegador encontrado no seu sistema.",
"noneFoundHint": "Tente a importação manual se você tem perfis em locais personalizados.",
- "selectProfile": "Selecionar perfil:",
- "selectProfilePlaceholder": "Escolha um perfil detectado",
- "pathLabel": "Caminho:",
- "browserLabel": "Navegador:",
"newProfileName": "Nome do novo perfil:",
"newProfileNamePlaceholder": "Insira um nome para o perfil importado",
"manualTitle": "Importação manual de perfil",
- "browserType": "Tipo de navegador:",
- "loadingBrowsers": "Carregando navegadores...",
- "selectBrowserType": "Selecione o tipo de navegador",
"profileFolderPath": "Caminho da pasta do perfil:",
"profileFolderPlaceholder": "Insira o caminho completo para a pasta do perfil",
"browseFolderTitle": "Procurar pasta",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "Selecionar pasta de perfil do navegador",
"folderDialogFailed": "Falha ao abrir o diálogo de pasta",
"detectFailed": "Falha ao detectar perfis de navegador existentes",
- "fillFields": "Por favor, preencha todos os campos",
- "selectAndName": "Selecione um perfil e forneça um nome",
- "profileNotFound": "Perfil selecionado não encontrado",
- "importedSuccess": "Perfil \"{{name}}\" importado com sucesso",
- "notInstalled": "{{browser}} não está instalado. Baixe {{browser}} primeiro pela janela principal e tente importar novamente.",
- "importFailed": "Falha ao importar perfil: {{error}}",
"proxyOptional": "Proxy (Opcional)",
"noProxy": "Sem proxy",
"nextButton": "Próximo",
- "importButton": "Importar",
- "importedAs": "Este perfil será importado como um perfil {{browser}}."
+ "importedAs": "Este perfil será importado como um perfil {{browser}}.",
+ "selectAll": "Selecionar tudo",
+ "selectedCount": "{{count}} selecionados",
+ "scanButton": "Verificar",
+ "manualHint": "Escolha uma pasta de perfil, uma pasta de dados de usuário do navegador, uma pasta com perfis exportados ou um arquivo ZIP.",
+ "selectArchiveTitle": "Selecionar arquivo ZIP",
+ "noProfilesInLocation": "Nenhum perfil encontrado neste local.",
+ "selectAtLeastOne": "Selecione pelo menos um perfil para importar",
+ "emptyNames": "Cada perfil selecionado precisa de um nome",
+ "profilesToImport": "Perfis a importar",
+ "groupOptional": "Grupo (opcional)",
+ "noGroup": "Sem grupo",
+ "createNewGroup": "Criar novo grupo…",
+ "newGroupNamePlaceholder": "Nome do novo grupo",
+ "duplicateStrategyLabel": "Se o nome do perfil já existir",
+ "duplicateRename": "Renomear automaticamente",
+ "duplicateSkip": "Ignorar",
+ "proxyRoundRobin": "Distribuir proxies salvos (round-robin)",
+ "importingTitle": "Importando perfis…",
+ "importProgress": "{{completed}} de {{total}} processados",
+ "resultsSummary": "{{imported}} importados, {{skipped}} ignorados, {{failed}} com falha",
+ "statusImported": "Importado",
+ "statusSkipped": "Ignorado",
+ "statusFailed": "Falhou",
+ "importButtonCount": "Importar ({{count}})"
},
"syncTooltips": {
"syncing": "Sincronizando...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "Não foi possível verificar a atualização {{version}} porque o arquivo de somas de verificação não pôde ser obtido. A atualização não foi instalada; será tentada novamente mais tarde.",
"updateChecksumMismatch": "O arquivo de atualização baixado {{file}} falhou na verificação de soma de verificação e foi descartado. Tente novamente.",
"nameCannotBeEmpty": "O nome não pode estar vazio",
- "wayfernVersionNotAvailable": "A versão {{requested}} do Wayfern não está disponível para download. A versão atual é {{current}}."
+ "wayfernVersionNotAvailable": "A versão {{requested}} do Wayfern não está disponível para download. A versão atual é {{current}}.",
+ "profileNameExists": "Já existe um perfil chamado \"{{name}}\"",
+ "importSourceNotFound": "O caminho de origem não existe",
+ "importNoItems": "Nada selecionado para importar",
+ "browserNotDownloaded": "Nenhuma versão baixada de {{browser}} está disponível. Baixe-a primeiro e tente importar novamente.",
+ "archiveExtractionFailed": "Falha ao extrair o arquivo: {{detail}}",
+ "unsupportedArchiveFormat": "Formato de arquivo não suportado. Apenas arquivos ZIP são suportados."
},
"rail": {
"profiles": "Perfis",
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index 04039ab..794fd0d 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -1378,16 +1378,9 @@
"scanning": "Поиск профилей браузера...",
"noneFound": "На вашей системе профили браузера не найдены.",
"noneFoundHint": "Попробуйте ручной импорт, если профили находятся в нестандартных местах.",
- "selectProfile": "Выбрать профиль:",
- "selectProfilePlaceholder": "Выберите обнаруженный профиль",
- "pathLabel": "Путь:",
- "browserLabel": "Браузер:",
"newProfileName": "Имя нового профиля:",
"newProfileNamePlaceholder": "Введите имя для импортированного профиля",
"manualTitle": "Ручной импорт профиля",
- "browserType": "Тип браузера:",
- "loadingBrowsers": "Загрузка браузеров...",
- "selectBrowserType": "Выберите тип браузера",
"profileFolderPath": "Путь к папке профиля:",
"profileFolderPlaceholder": "Введите полный путь к папке профиля",
"browseFolderTitle": "Выбрать папку",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "Выберите папку профиля браузера",
"folderDialogFailed": "Не удалось открыть диалог выбора папки",
"detectFailed": "Не удалось обнаружить существующие профили браузера",
- "fillFields": "Пожалуйста, заполните все поля",
- "selectAndName": "Выберите профиль и укажите имя",
- "profileNotFound": "Выбранный профиль не найден",
- "importedSuccess": "Профиль «{{name}}» успешно импортирован",
- "notInstalled": "{{browser}} не установлен. Сначала загрузите {{browser}} из главного окна, затем попробуйте импортировать снова.",
- "importFailed": "Не удалось импортировать профиль: {{error}}",
"proxyOptional": "Прокси (необязательно)",
"noProxy": "Без прокси",
"nextButton": "Далее",
- "importButton": "Импорт",
- "importedAs": "Этот профиль будет импортирован как профиль {{browser}}."
+ "importedAs": "Этот профиль будет импортирован как профиль {{browser}}.",
+ "selectAll": "Выбрать все",
+ "selectedCount": "Выбрано: {{count}}",
+ "scanButton": "Сканировать",
+ "manualHint": "Выберите папку профиля, папку данных браузера, папку с экспортированными профилями или ZIP-архив.",
+ "selectArchiveTitle": "Выбрать ZIP-архив",
+ "noProfilesInLocation": "В этом расположении профили не найдены.",
+ "selectAtLeastOne": "Выберите хотя бы один профиль для импорта",
+ "emptyNames": "Каждому выбранному профилю нужно имя",
+ "profilesToImport": "Профили для импорта",
+ "groupOptional": "Группа (необязательно)",
+ "noGroup": "Без группы",
+ "createNewGroup": "Создать новую группу…",
+ "newGroupNamePlaceholder": "Название новой группы",
+ "duplicateStrategyLabel": "Если имя профиля уже существует",
+ "duplicateRename": "Переименовать автоматически",
+ "duplicateSkip": "Пропустить",
+ "proxyRoundRobin": "Распределить сохранённые прокси (по кругу)",
+ "importingTitle": "Импорт профилей…",
+ "importProgress": "Обработано {{completed}} из {{total}}",
+ "resultsSummary": "Импортировано: {{imported}}, пропущено: {{skipped}}, с ошибкой: {{failed}}",
+ "statusImported": "Импортирован",
+ "statusSkipped": "Пропущен",
+ "statusFailed": "Ошибка",
+ "importButtonCount": "Импортировать ({{count}})"
},
"syncTooltips": {
"syncing": "Синхронизация...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "Не удалось проверить обновление {{version}}: файл контрольных сумм не удалось получить. Обновление не было установлено; попытка будет повторена позже.",
"updateChecksumMismatch": "Загруженный файл обновления {{file}} не прошёл проверку контрольной суммы и был удалён. Попробуйте ещё раз.",
"nameCannotBeEmpty": "Имя не может быть пустым",
- "wayfernVersionNotAvailable": "Версия Wayfern {{requested}} недоступна для загрузки. Текущая версия — {{current}}."
+ "wayfernVersionNotAvailable": "Версия Wayfern {{requested}} недоступна для загрузки. Текущая версия — {{current}}.",
+ "profileNameExists": "Профиль с именем «{{name}}» уже существует",
+ "importSourceNotFound": "Исходный путь не существует",
+ "importNoItems": "Ничего не выбрано для импорта",
+ "browserNotDownloaded": "Нет загруженной версии {{browser}}. Сначала загрузите её, затем повторите импорт.",
+ "archiveExtractionFailed": "Не удалось распаковать архив: {{detail}}",
+ "unsupportedArchiveFormat": "Неподдерживаемый формат архива. Поддерживаются только ZIP-архивы."
},
"rail": {
"profiles": "Профили",
diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json
index d8f7b30..d62cf3c 100644
--- a/src/i18n/locales/vi.json
+++ b/src/i18n/locales/vi.json
@@ -1378,16 +1378,9 @@
"scanning": "Đang quét profile trình duyệt...",
"noneFound": "Không tìm thấy profile trình duyệt nào trên hệ thống của bạn.",
"noneFoundHint": "Thử tùy chọn nhập thủ công nếu bạn có profile ở vị trí tùy chỉnh.",
- "selectProfile": "Chọn profile:",
- "selectProfilePlaceholder": "Chọn profile đã phát hiện",
- "pathLabel": "Đường dẫn:",
- "browserLabel": "Trình duyệt:",
"newProfileName": "Tên profile mới:",
"newProfileNamePlaceholder": "Nhập tên cho profile được nhập",
"manualTitle": "Nhập profile thủ công",
- "browserType": "Loại trình duyệt:",
- "loadingBrowsers": "Đang tải trình duyệt...",
- "selectBrowserType": "Chọn loại trình duyệt",
"profileFolderPath": "Đường dẫn thư mục profile:",
"profileFolderPlaceholder": "Nhập đường dẫn đầy đủ đến thư mục profile",
"browseFolderTitle": "Duyệt thư mục",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "Chọn thư mục profile trình duyệt",
"folderDialogFailed": "Mở hộp thoại thư mục thất bại",
"detectFailed": "Phát hiện profile trình duyệt hiện có thất bại",
- "fillFields": "Vui lòng điền đầy đủ các trường",
- "selectAndName": "Vui lòng chọn profile và cung cấp tên",
- "profileNotFound": "Không tìm thấy profile đã chọn",
- "importedSuccess": "Đã nhập thành công profile \"{{name}}\"",
- "notInstalled": "{{browser}} chưa được cài đặt. Vui lòng tải xuống {{browser}} trước từ cửa sổ chính, sau đó thử nhập lại.",
- "importFailed": "Nhập profile thất bại: {{error}}",
"proxyOptional": "Proxy (Tùy chọn)",
"noProxy": "Không có proxy",
"nextButton": "Tiếp theo",
- "importButton": "Nhập",
- "importedAs": "Profile này sẽ được nhập dưới dạng profile {{browser}}."
+ "importedAs": "Profile này sẽ được nhập dưới dạng profile {{browser}}.",
+ "selectAll": "Chọn tất cả",
+ "selectedCount": "Đã chọn {{count}}",
+ "scanButton": "Quét",
+ "manualHint": "Chọn thư mục hồ sơ, thư mục dữ liệu người dùng của trình duyệt, thư mục chứa các hồ sơ đã xuất hoặc tệp ZIP.",
+ "selectArchiveTitle": "Chọn tệp ZIP",
+ "noProfilesInLocation": "Không tìm thấy hồ sơ nào ở vị trí này.",
+ "selectAtLeastOne": "Chọn ít nhất một hồ sơ để nhập",
+ "emptyNames": "Mỗi hồ sơ đã chọn cần có tên",
+ "profilesToImport": "Hồ sơ sẽ nhập",
+ "groupOptional": "Nhóm (tùy chọn)",
+ "noGroup": "Không có nhóm",
+ "createNewGroup": "Tạo nhóm mới…",
+ "newGroupNamePlaceholder": "Tên nhóm mới",
+ "duplicateStrategyLabel": "Nếu tên hồ sơ đã tồn tại",
+ "duplicateRename": "Tự động đổi tên",
+ "duplicateSkip": "Bỏ qua",
+ "proxyRoundRobin": "Phân bổ proxy đã lưu (xoay vòng)",
+ "importingTitle": "Đang nhập hồ sơ…",
+ "importProgress": "Đã xử lý {{completed}} / {{total}}",
+ "resultsSummary": "Đã nhập {{imported}}, bỏ qua {{skipped}}, thất bại {{failed}}",
+ "statusImported": "Đã nhập",
+ "statusSkipped": "Bỏ qua",
+ "statusFailed": "Thất bại",
+ "importButtonCount": "Nhập ({{count}})"
},
"syncTooltips": {
"syncing": "Đang đồng bộ...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "Không thể xác minh bản cập nhật {{version}} vì không thể tải tệp checksum. Bản cập nhật chưa được cài đặt; sẽ thử lại sau.",
"updateChecksumMismatch": "Tệp cập nhật đã tải xuống {{file}} không vượt qua kiểm tra checksum và đã bị loại bỏ. Vui lòng thử lại.",
"nameCannotBeEmpty": "Tên không được để trống",
- "wayfernVersionNotAvailable": "Phiên bản Wayfern {{requested}} không có sẵn để tải xuống. Phiên bản hiện tại là {{current}}."
+ "wayfernVersionNotAvailable": "Phiên bản Wayfern {{requested}} không có sẵn để tải xuống. Phiên bản hiện tại là {{current}}.",
+ "profileNameExists": "Hồ sơ có tên \"{{name}}\" đã tồn tại",
+ "importSourceNotFound": "Đường dẫn nguồn không tồn tại",
+ "importNoItems": "Chưa chọn mục nào để nhập",
+ "browserNotDownloaded": "Không có phiên bản {{browser}} nào đã tải xuống. Hãy tải xuống trước, sau đó thử nhập lại.",
+ "archiveExtractionFailed": "Không thể giải nén tệp: {{detail}}",
+ "unsupportedArchiveFormat": "Định dạng tệp nén không được hỗ trợ. Chỉ hỗ trợ tệp ZIP."
},
"rail": {
"profiles": "Profile",
diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json
index ced6c9b..328e2ad 100644
--- a/src/i18n/locales/zh.json
+++ b/src/i18n/locales/zh.json
@@ -1378,16 +1378,9 @@
"scanning": "正在扫描浏览器配置文件...",
"noneFound": "在你的系统上未找到浏览器配置文件。",
"noneFoundHint": "如果配置文件位于自定义位置,请尝试手动导入选项。",
- "selectProfile": "选择配置文件:",
- "selectProfilePlaceholder": "选择检测到的配置文件",
- "pathLabel": "路径:",
- "browserLabel": "浏览器:",
"newProfileName": "新配置文件名称:",
"newProfileNamePlaceholder": "输入要导入的配置文件名称",
"manualTitle": "手动配置文件导入",
- "browserType": "浏览器类型:",
- "loadingBrowsers": "正在加载浏览器...",
- "selectBrowserType": "选择浏览器类型",
"profileFolderPath": "配置文件夹路径:",
"profileFolderPlaceholder": "输入配置文件夹的完整路径",
"browseFolderTitle": "浏览文件夹",
@@ -1395,17 +1388,34 @@
"selectFolderTitle": "选择浏览器配置文件夹",
"folderDialogFailed": "打开文件夹对话框失败",
"detectFailed": "检测现有浏览器配置文件失败",
- "fillFields": "请填写所有字段",
- "selectAndName": "请选择配置文件并提供名称",
- "profileNotFound": "未找到所选配置文件",
- "importedSuccess": "已成功导入配置文件「{{name}}」",
- "notInstalled": "{{browser}} 未安装。请先从主窗口下载 {{browser}},然后再尝试导入。",
- "importFailed": "导入配置文件失败: {{error}}",
"proxyOptional": "代理 (可选)",
"noProxy": "无代理",
"nextButton": "下一步",
- "importButton": "导入",
- "importedAs": "此配置文件将作为 {{browser}} 配置文件导入。"
+ "importedAs": "此配置文件将作为 {{browser}} 配置文件导入。",
+ "selectAll": "全选",
+ "selectedCount": "已选择 {{count}} 个",
+ "scanButton": "扫描",
+ "manualHint": "选择配置文件夹、浏览器用户数据文件夹、包含导出配置文件的文件夹或 ZIP 压缩包。",
+ "selectArchiveTitle": "选择 ZIP 压缩包",
+ "noProfilesInLocation": "在此位置未找到配置文件。",
+ "selectAtLeastOne": "请至少选择一个要导入的配置文件",
+ "emptyNames": "每个所选配置文件都需要一个名称",
+ "profilesToImport": "要导入的配置文件",
+ "groupOptional": "分组(可选)",
+ "noGroup": "无分组",
+ "createNewGroup": "创建新分组…",
+ "newGroupNamePlaceholder": "新分组名称",
+ "duplicateStrategyLabel": "如果配置文件名称已存在",
+ "duplicateRename": "自动重命名",
+ "duplicateSkip": "跳过",
+ "proxyRoundRobin": "轮流分配已保存的代理(轮询)",
+ "importingTitle": "正在导入配置文件…",
+ "importProgress": "已处理 {{completed}} / {{total}}",
+ "resultsSummary": "已导入 {{imported}} 个,跳过 {{skipped}} 个,失败 {{failed}} 个",
+ "statusImported": "已导入",
+ "statusSkipped": "已跳过",
+ "statusFailed": "失败",
+ "importButtonCount": "导入 ({{count}})"
},
"syncTooltips": {
"syncing": "同步中...",
@@ -1802,7 +1812,13 @@
"updateChecksumsUnavailable": "无法验证更新 {{version}}:无法获取其校验和文件。更新未安装,稍后将重试。",
"updateChecksumMismatch": "下载的更新文件 {{file}} 未通过校验和验证,已被丢弃。请重试。",
"nameCannotBeEmpty": "名称不能为空",
- "wayfernVersionNotAvailable": "Wayfern 版本 {{requested}} 无法下载。当前版本为 {{current}}。"
+ "wayfernVersionNotAvailable": "Wayfern 版本 {{requested}} 无法下载。当前版本为 {{current}}。",
+ "profileNameExists": "名为“{{name}}”的配置文件已存在",
+ "importSourceNotFound": "源路径不存在",
+ "importNoItems": "未选择要导入的内容",
+ "browserNotDownloaded": "没有已下载的 {{browser}} 版本。请先下载,然后重试导入。",
+ "archiveExtractionFailed": "解压压缩包失败:{{detail}}",
+ "unsupportedArchiveFormat": "不支持的压缩包格式。仅支持 ZIP 压缩包。"
},
"rail": {
"profiles": "配置文件",
diff --git a/src/lib/backend-errors.ts b/src/lib/backend-errors.ts
index 2dcf78d..4fe602b 100644
--- a/src/lib/backend-errors.ts
+++ b/src/lib/backend-errors.ts
@@ -38,6 +38,12 @@ export type BackendErrorCode =
| "CAMOUFOX_IMPORT_DEPRECATED"
| "UPDATE_CHECKSUMS_UNAVAILABLE"
| "UPDATE_CHECKSUM_MISMATCH"
+ | "PROFILE_NAME_EXISTS"
+ | "IMPORT_SOURCE_NOT_FOUND"
+ | "IMPORT_NO_ITEMS"
+ | "BROWSER_NOT_DOWNLOADED"
+ | "ARCHIVE_EXTRACTION_FAILED"
+ | "UNSUPPORTED_ARCHIVE_FORMAT"
| "INTERNAL_ERROR";
export interface BackendError {
@@ -157,6 +163,24 @@ export function translateBackendError(t: TFunction, err: unknown): string {
return t("backendErrors.updateChecksumMismatch", {
file: parsed.params?.file ?? "",
});
+ case "PROFILE_NAME_EXISTS":
+ return t("backendErrors.profileNameExists", {
+ name: parsed.params?.name ?? "",
+ });
+ case "IMPORT_SOURCE_NOT_FOUND":
+ return t("backendErrors.importSourceNotFound");
+ case "IMPORT_NO_ITEMS":
+ return t("backendErrors.importNoItems");
+ case "BROWSER_NOT_DOWNLOADED":
+ return t("backendErrors.browserNotDownloaded", {
+ browser: parsed.params?.browser ?? "",
+ });
+ case "ARCHIVE_EXTRACTION_FAILED":
+ return t("backendErrors.archiveExtractionFailed", {
+ detail: parsed.params?.detail ?? "",
+ });
+ case "UNSUPPORTED_ARCHIVE_FORMAT":
+ return t("backendErrors.unsupportedArchiveFormat");
case "INTERNAL_ERROR":
return t("backendErrors.internal", {
detail: parsed.params?.detail ?? "",
diff --git a/src/types.ts b/src/types.ts
index 9d40bad..750dbe1 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -197,6 +197,41 @@ export interface DetectedProfile {
mapped_browser: string;
}
+export interface ImportProfileItem {
+ source_path: string;
+ browser_type?: string;
+ new_profile_name: string;
+ proxy_id?: string | null;
+}
+
+export interface ProfileImportItemResult {
+ name: string;
+ source_path: string;
+ status: "imported" | "skipped" | "failed";
+ profile_id: string | null;
+ error: string | null;
+}
+
+export interface ProfileImportBatchResult {
+ imported_count: number;
+ skipped_count: number;
+ failed_count: number;
+ results: ProfileImportItemResult[];
+}
+
+export interface ArchiveScanResult {
+ extracted_dir: string;
+ profiles: DetectedProfile[];
+}
+
+export interface ProfileImportProgress {
+ total: number;
+ completed: number;
+ index: number;
+ name: string;
+ status: "importing" | "imported" | "skipped" | "failed";
+}
+
export interface BrowserReleaseTypes {
stable?: string;
}