Add colored container display mode
| | |
| | | |
| | | // Settings/Preferences window → float it above overlay for real-time preview |
| | | if NSApp.windows.contains(keyWindow) { |
| | | if self.overlayWindow?.isVisible == true { |
| | | keyWindow.level = .popUpMenu |
| | | } |
| | | if self.settingsWindow == nil { |
| | | keyWindow.minSize = NSSize(width: 660, height: 380) |
| | | keyWindow.maxSize = NSSize(width: 660, height: CGFloat.greatestFiniteMagnitude) |
| | | } |
| | | self.settingsWindow = keyWindow |
| | | self.prepareSettingsWindow(keyWindow) |
| | | return |
| | | } |
| | | |
| | | self.hideOverlay() |
| | | } |
| | | } |
| | | |
| | | /// Settings must always float above the overlay so changes can be previewed live. |
| | | private func prepareSettingsWindow(_ window: NSWindow) { |
| | | if overlayWindow?.isVisible == true { |
| | | let overlayLevel = overlayWindow?.level.rawValue ?? NSWindow.Level.screenSaver.rawValue |
| | | window.level = NSWindow.Level(rawValue: overlayLevel + 1) |
| | | window.orderFrontRegardless() |
| | | } |
| | | if settingsWindow == nil { |
| | | window.minSize = NSSize(width: 660, height: 380) |
| | | window.maxSize = NSSize(width: 660, height: CGFloat.greatestFiniteMagnitude) |
| | | } |
| | | settingsWindow = window |
| | | } |
| | | |
| | | /// Clean up settingsWindow reference when the Settings window closes. |
| | |
| | | |
| | | @objc private func openPreferences() { |
| | | // Don't hide overlay — keep it visible for real-time setting preview. |
| | | // observeOtherWindows handles raising the Settings window above the overlay. |
| | | NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil) |
| | | DispatchQueue.main.async { [weak self] in |
| | | guard let self else { return } |
| | | for window in NSApp.windows where window != self.overlayWindow { |
| | | self.prepareSettingsWindow(window) |
| | | } |
| | | } |
| | | } |
| | | |
| | | @objc private func switchLanguage(_ sender: NSMenuItem) { |
| | |
| | | Picker("", selection: $displayMode) { |
| | | Text(tr("settings.flat")).tag("flat") |
| | | Text(tr("settings.container")).tag("container") |
| | | Text(tr("settings.coloredContainer")).tag("coloredContainer") |
| | | } |
| | | .pickerStyle(.segmented) |
| | | .frame(width: 280, alignment: .leading) |
| | | .frame(width: 360, alignment: .leading) |
| | | Text(tr("settings.flatDesc")) |
| | | .font(.caption).foregroundStyle(.secondary) |
| | | .fixedSize(horizontal: false, vertical: true) |
| | |
| | | @State private var successToast: String? = nil |
| | | @State private var draggedTagNames: [String] = [] // live drag order |
| | | @State private var dragItem: String? = nil // currently dragged tag |
| | | @State private var highlightedGroup: String? = nil // container highlight |
| | | @State private var hoveredContainer: String? = nil // colored container lift |
| | | |
| | | // Configurable defaults |
| | | @AppStorage("defaultGroupName") private var defaultGroupName = "Other" |
| | |
| | | ForEach(tagLabels) { tag in |
| | | TagPill(name: tag.name, colorIndex: tag.colorIndex, |
| | | action: { |
| | | if highlightedGroup == tag.id { highlightedGroup = nil } |
| | | else { highlightedGroup = tag.id } |
| | | scrollTo(tag.id) |
| | | }) |
| | | .onHover { hovering in |
| | |
| | | ForEach(tagLabels) { tag in |
| | | SideTagPill(name: tag.name, colorIndex: tag.colorIndex, |
| | | action: { |
| | | if highlightedGroup == tag.id { highlightedGroup = nil } |
| | | else { highlightedGroup = tag.id } |
| | | scrollTo(tag.id) |
| | | }) |
| | | .onHover { hovering in |
| | |
| | | Spacer() |
| | | ProgressView().scaleEffect(0.8) |
| | | Spacer() |
| | | } else if displayMode == "container" { |
| | | } else if displayMode == "container" || displayMode == "coloredContainer" { |
| | | containerGrid |
| | | } else { |
| | | flatGrid |
| | |
| | | } |
| | | |
| | | private func masonryCard(_ group: TagGroup, width: CGFloat) -> some View { |
| | | let isHL = highlightedGroup == group.name |
| | | let hlColor = Color(nsColor: TagColor.nsColor(for: tagColors[group.name] ?? 0)) |
| | | let isColored = displayMode == "coloredContainer" |
| | | let isHovered = hoveredContainer == group.name |
| | | let tagColor = Color(nsColor: TagColor.nsColor(for: tagColors[group.name] ?? 0)) |
| | | return VStack(alignment: .leading, spacing: 6) { |
| | | HStack(spacing: 0) { |
| | | Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1) |
| | |
| | | .padding(16) |
| | | .background( |
| | | RoundedRectangle(cornerRadius: 14) |
| | | .fill(isColored ? tagColor.opacity(0.30) : Color.clear) |
| | | .background( |
| | | RoundedRectangle(cornerRadius: 14) |
| | | .fill(.ultraThinMaterial) |
| | | ) |
| | | ) |
| | | .overlay( |
| | | RoundedRectangle(cornerRadius: 14) |
| | | .stroke(isHL ? hlColor : Color.primary.opacity(0.08), |
| | | lineWidth: isHL ? 3 : 1) |
| | | .stroke(Color.primary.opacity(0.08), lineWidth: 1) |
| | | ) |
| | | .shadow(color: .black.opacity(isColored && isHovered ? 0.22 : 0), |
| | | radius: isColored && isHovered ? 18 : 0, |
| | | y: isColored && isHovered ? 10 : 0) |
| | | .scaleEffect(isColored && isHovered ? 1.015 : 1.0) |
| | | .animation(.spring(response: 0.25, dampingFraction: 0.82), value: isHovered) |
| | | .onHover { hovering in |
| | | hoveredContainer = hovering ? group.name : nil |
| | | } |
| | | } |
| | | |
| | | // MARK: - Edit Tags View |
| | |
| | | Button { |
| | | setEditPhase(.none) |
| | | } label: { |
| | | Label("Exit editing", systemImage: "rectangle.portrait.and.arrow.right") |
| | | Label(tr("edit.exit"), systemImage: "rectangle.portrait.and.arrow.right") |
| | | .font(.system(size: 12)) |
| | | } |
| | | .buttonStyle(.bordered) |
| | | Spacer() |
| | | Text("Edit Tags").font(.headline) |
| | | Text(tr("edit.tags")).font(.headline) |
| | | Spacer() |
| | | } |
| | | .padding(.horizontal, 24) |
| | |
| | | VStack(spacing: 0) { |
| | | HStack { |
| | | Button { cancelEditApps(); setEditPhase(.none) } label: { |
| | | Label("Exit editing", systemImage: "rectangle.portrait.and.arrow.right") |
| | | Label(tr("edit.exit"), systemImage: "rectangle.portrait.and.arrow.right") |
| | | .font(.system(size: 12)) |
| | | } |
| | | .buttonStyle(.bordered) |
| | | Spacer() |
| | | Text("Edit App Categories").font(.headline) |
| | | Text(tr("edit.title")).font(.headline) |
| | | Spacer() |
| | | Button("Confirm") { confirmAssign() } |
| | | Button(tr("edit.confirm")) { confirmAssign() } |
| | | .buttonStyle(.borderedProminent) |
| | | .disabled(selectedAppPaths.isEmpty || selectedTagNames.isEmpty) |
| | | } |
| | |
| | | |
| | | HStack(spacing: 0) { |
| | | VStack(alignment: .leading, spacing: 4) { |
| | | Text("Select tags:").font(.caption).foregroundStyle(.secondary).padding(.bottom, 4) |
| | | Text("Drag to reorder").font(.caption2).foregroundStyle(.tertiary).padding(.bottom, 2) |
| | | Text(tr("edit.selectTags")).font(.caption).foregroundStyle(.secondary).padding(.bottom, 4) |
| | | Text(tr("edit.dragHint")).font(.caption2).foregroundStyle(.tertiary).padding(.bottom, 2) |
| | | ScrollView(.vertical, showsIndicators: false) { |
| | | VStack(spacing: 4) { |
| | | ForEach(sortedTagNames, id: \.self) { tagName in |
| | |
| | | if allApps.isEmpty { |
| | | Spacer(); ProgressView().scaleEffect(0.8); Spacer() |
| | | } else { |
| | | ScrollView { |
| | | LazyVStack(alignment: .leading, spacing: 24) { |
| | | ForEach(groups) { group in |
| | | VStack(alignment: .leading, spacing: 6) { |
| | | HStack(spacing: 0) { |
| | | Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1) |
| | | Text(group.name).font(.system(size: tagFontSize, weight: .semibold)) |
| | | .foregroundStyle(.secondary).padding(.horizontal, 10) |
| | | Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1) |
| | | } |
| | | LazyVGrid(columns: [GridItem(.adaptive(minimum: iconSize + 28, maximum: iconSize + 64), spacing: 6)], spacing: 2) { |
| | | ForEach(group.apps) { app in editableAppItem(app) } |
| | | } |
| | | } |
| | | } |
| | | }.padding(20) |
| | | } |
| | | editAppsGrid |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private var editAppsGrid: some View { |
| | | GeometryReader { geo in |
| | | let outerPad: CGFloat = 20 |
| | | let gap: CGFloat = 16 |
| | | let available = geo.size.width - outerPad * 2 |
| | | let colW: CGFloat = 300 |
| | | let colCount = max(1, Int((available + gap) / (colW + gap))) |
| | | let actualColW = (available - gap * CGFloat(colCount - 1)) / CGFloat(colCount) |
| | | let columns = distributeToColumns(groups: groups, colCount: colCount, colWidth: actualColW) |
| | | |
| | | ScrollView { |
| | | HStack(alignment: .top, spacing: gap) { |
| | | ForEach(0..<colCount, id: \.self) { ci in |
| | | LazyVStack(spacing: gap) { |
| | | ForEach(columns[ci]) { group in |
| | | editGroupCard(group, width: actualColW) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .padding(outerPad) |
| | | .frame(maxWidth: .infinity, alignment: .topLeading) |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func editGroupCard(_ group: TagGroup, width: CGFloat) -> some View { |
| | | VStack(alignment: .leading, spacing: 6) { |
| | | HStack(spacing: 0) { |
| | | Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1) |
| | | .layoutPriority(0) |
| | | Text(group.name) |
| | | .font(.system(size: tagFontSize, weight: .semibold)) |
| | | .foregroundStyle(.secondary) |
| | | .lineLimit(1) |
| | | .truncationMode(.middle) |
| | | .padding(.horizontal, 10) |
| | | .layoutPriority(1) |
| | | Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1) |
| | | .layoutPriority(0) |
| | | } |
| | | LazyVGrid( |
| | | columns: [GridItem(.adaptive(minimum: iconSize + 28, maximum: iconSize + 64), spacing: 6)], |
| | | spacing: 2 |
| | | ) { |
| | | ForEach(group.apps) { app in editableAppItem(app) } |
| | | } |
| | | } |
| | | .frame(maxWidth: width) |
| | | .padding(16) |
| | | .background( |
| | | RoundedRectangle(cornerRadius: 14) |
| | | .fill(.ultraThinMaterial) |
| | | ) |
| | | .overlay( |
| | | RoundedRectangle(cornerRadius: 14) |
| | | .stroke(Color.primary.opacity(0.08), lineWidth: 1) |
| | | ) |
| | | } |
| | | |
| | | private func selectableTagItem(_ tagName: String) -> some View { |
| | |
| | | } |
| | | selectedAppPaths = []; selectedTagNames = [] |
| | | refreshApps() |
| | | withAnimation { successToast = "分类成功" } |
| | | withAnimation { successToast = tr("edit.success") } |
| | | } |
| | | |
| | | private func cancelEditApps() { |
| | |
| | | let order = draggedTagNames.isEmpty |
| | | ? TagEditor.orderedTagNames() |
| | | : draggedTagNames |
| | | return AppIndexer.group(apps: allApps, defaultGroupName: defaultGroupName, tagOrder: order) |
| | | let raw = AppIndexer.group(apps: allApps, defaultGroupName: defaultGroupName, tagOrder: order) |
| | | // Translate stable keys for display |
| | | return raw.map { group in |
| | | if group.name == defaultGroupName { |
| | | return TagGroup(name: tr("group.uncategorized"), apps: group.apps) |
| | | } |
| | | if group.name == "Mac自带" { |
| | | return TagGroup(name: tr("group.appleBuiltIn"), apps: group.apps) |
| | | } |
| | | return group |
| | | } |
| | | } |
| | | |
| | | // MARK: - Actions |
| | |
| | | func refreshApps() { |
| | | DispatchQueue.global(qos: .userInitiated).async { |
| | | var apps = AppIndexer.scan() |
| | | // Ensure migration ran at least once |
| | | let store = TagDatabase.migrateFromFinderIfNeeded(apps: apps) |
| | | let store = TagDatabase.load() |
| | | apps = TagEditor.annotate(apps: apps) |
| | | let colors = store.tags.mapValues { $0.color } |
| | | let order = TagEditor.orderedTagNames() |
| | |
| | | <key>CFBundlePackageType</key> |
| | | <string>APPL</string> |
| | | <key>CFBundleShortVersionString</key> |
| | | <string>3.1.33</string> |
| | | <string>3.2.0</string> |
| | | <key>CFBundleVersion</key> |
| | | <string>1</string> |
| | | <key>LSMinimumSystemVersion</key> |
| | |
| | | "settings.tags": "Tags", |
| | | "settings.data": "Data", |
| | | "settings.about": "About", |
| | | "settings.launchAtLogin": "Launch at login", |
| | | "settings.showInDock": "Show in Dock", |
| | | "settings.appListStyle": "App list style:", |
| | | "settings.flat": "Flat", |
| | | "settings.container": "Container", |
| | | "settings.flatDesc": "\"Flat\" shows apps directly. \"Container\" wraps each tag group in a rounded box.", |
| | | "settings.container": "Colorless Container", |
| | | "settings.flatDesc": "\"Flat\" shows apps directly. \"Colorless Container\" wraps each tag group in a rounded box. \"Colored Container\" fills each container with its tag color.", |
| | | "settings.hideAppNames": "Hide app names", |
| | | "settings.tagPosition": "Tag position:", |
| | | "settings.left": "Left", |
| | |
| | | "settings.backupDesc": "Export saves your tag assignments to a JSON file. Import replaces the current database with one from a file.", |
| | | "settings.importFailed": "Import Failed", |
| | | "edit.exit": "Exit editing", |
| | | "edit.tags": "Edit Tags", |
| | | "edit.title": "Edit App Categories", |
| | | "edit.confirm": "Confirm", |
| | | "edit.selectTags": "Select tags:", |
| | |
| | | "tag.save": "Save", |
| | | "tag.cancel": "Cancel", |
| | | "tag.add": "Add", |
| | | "tag.newName": "New tag name" |
| | | "tag.newName": "New tag name", |
| | | "app.name": "Apptag", |
| | | "app.description": "Tag-based app launcher", |
| | | "app.version": "Version", |
| | | "app.build": "Build", |
| | | "group.uncategorized": "Uncategorized", |
| | | "group.appleBuiltIn": "Built-in", |
| | | "tag.design": "Design", |
| | | "tag.development": "Development", |
| | | "tag.writing": "Writing", |
| | | "tag.gaming": "Gaming", |
| | | "tag.entertainment": "Entertainment", |
| | | "tag.system": "System", |
| | | "tag.productivity": "Productivity", |
| | | "settings.coloredContainer": "Colored Container" |
| | | } |
| | |
| | | "settings.tags": "Etiquetas", |
| | | "settings.data": "Datos", |
| | | "settings.about": "Acerca de", |
| | | "settings.appListStyle": "Estilo de lista:", |
| | | "settings.launchAtLogin": "Iniciar al iniciar sesión", |
| | | "settings.showInDock": "Mostrar en el Dock", |
| | | "settings.appListStyle": "Estilo de lista de apps:", |
| | | "settings.flat": "Plano", |
| | | "settings.container": "Contenedor", |
| | | "settings.flatDesc": "«Plano» muestra apps directamente. «Contenedor» agrupa etiquetas en cajas.", |
| | | "settings.hideAppNames": "Ocultar nombres", |
| | | "settings.container": "Contenedor sin color", |
| | | "settings.flatDesc": "\"Plano\" muestra las apps directamente. \"Contenedor sin color\" coloca cada grupo en un contenedor sin relleno. \"Contenedor coloreado\" rellena cada contenedor con el color de la etiqueta.", |
| | | "settings.hideAppNames": "Ocultar nombres de apps", |
| | | "settings.tagPosition": "Posición de etiquetas:", |
| | | "settings.left": "Izquierda", |
| | | "settings.right": "Derecha", |
| | | "settings.top": "Arriba", |
| | | "settings.tagPosDesc": "Dónde aparece la barra de navegación de etiquetas.", |
| | | "settings.tagFontSize": "Tamaño de fuente:", |
| | | "settings.tagFontDesc": "Ajusta el tamaño de las etiquetas de grupo.", |
| | | "settings.tagPosDesc": "Ubicación de la barra de navegación de etiquetas. Izquierda/Derecha coloca las etiquetas en una barra lateral.", |
| | | "settings.tagFontSize": "Tamaño de fuente de etiquetas:", |
| | | "settings.tagFontDesc": "Ajusta el tamaño del texto de los nombres de grupo en la superposición.", |
| | | "settings.iconSize": "Tamaño de iconos:", |
| | | "settings.iconSizeDesc": "Tamaño de visualización de iconos.", |
| | | "settings.iconSizeDesc": "Tamaño de visualización de iconos. Las columnas se ajustan automáticamente.", |
| | | "settings.backup": "Copia de seguridad", |
| | | "settings.export": "Exportar etiquetas…", |
| | | "settings.import": "Importar etiquetas…", |
| | | "settings.backupDesc": "La exportación guarda las asignaciones de etiquetas en un archivo JSON.", |
| | | "settings.backupDesc": "La exportación guarda las asignaciones de etiquetas en un archivo JSON. La importación reemplaza la base de datos actual.", |
| | | "settings.importFailed": "Error de importación", |
| | | "edit.exit": "Salir de edición", |
| | | "edit.title": "Editar categorías", |
| | | "edit.tags": "Editar etiquetas", |
| | | "edit.title": "Editar categorías de apps", |
| | | "edit.confirm": "Confirmar", |
| | | "edit.selectTags": "Seleccionar:", |
| | | "edit.dragHint": "Arrastrar para reordenar", |
| | | "edit.success": "Éxito", |
| | | "edit.noTags": "Sin etiquetas.", |
| | | "edit.selectTags": "Seleccionar etiquetas:", |
| | | "edit.dragHint": "Arrastra para reordenar", |
| | | "edit.success": "Categorización exitosa", |
| | | "edit.noTags": "Sin etiquetas. Haz clic en \"Nueva etiqueta\" para crear una.", |
| | | "tag.newTag": "Nueva etiqueta", |
| | | "tag.name": "Nombre", |
| | | "tag.name": "Nombre de etiqueta", |
| | | "tag.save": "Guardar", |
| | | "tag.cancel": "Cancelar", |
| | | "tag.add": "Añadir", |
| | | "tag.newName": "Nuevo nombre" |
| | | "tag.newName": "Nuevo nombre de etiqueta", |
| | | "app.name": "Apptag", |
| | | "app.description": "Lanzador de apps basado en etiquetas", |
| | | "app.version": "Versión", |
| | | "app.build": "Build", |
| | | "group.uncategorized": "Sin categorizar", |
| | | "group.appleBuiltIn": "Integradas", |
| | | "tag.design": "Diseño", |
| | | "tag.development": "Desarrollo", |
| | | "tag.writing": "Escritura", |
| | | "tag.gaming": "Juegos", |
| | | "tag.entertainment": "Entretenimiento", |
| | | "tag.system": "Sistema", |
| | | "tag.productivity": "Oficina", |
| | | "settings.coloredContainer": "Contenedor coloreado" |
| | | } |
| | |
| | | "settings.tags": "Étiquettes", |
| | | "settings.data": "Données", |
| | | "settings.about": "À propos", |
| | | "settings.appListStyle": "Style de liste:", |
| | | "settings.flat": "Plat", |
| | | "settings.container": "Conteneur", |
| | | "settings.flatDesc": "«Plat» affiche les apps directement. «Conteneur» groupe les étiquettes dans des boîtes.", |
| | | "settings.hideAppNames": "Masquer les noms", |
| | | "settings.launchAtLogin": "Lancer à l'ouverture de session", |
| | | "settings.showInDock": "Afficher dans le Dock", |
| | | "settings.appListStyle": "Style de liste d'applications :", |
| | | "settings.flat": "Liste", |
| | | "settings.container": "Conteneur sans couleur", |
| | | "settings.flatDesc": "\"Liste\" affiche les apps directement. \"Conteneur sans couleur\" place chaque groupe dans un conteneur sans remplissage. \"Conteneur coloré\" remplit chaque conteneur avec la couleur du tag.", |
| | | "settings.hideAppNames": "Masquer les noms d'apps", |
| | | "settings.tagPosition": "Position des étiquettes:", |
| | | "settings.left": "Gauche", |
| | | "settings.right": "Droite", |
| | | "settings.top": "Haut", |
| | | "settings.tagPosDesc": "Où la barre de navigation des étiquettes apparaît.", |
| | | "settings.tagFontSize": "Taille de police:", |
| | | "settings.tagFontDesc": "Ajuste la taille des noms de groupe dans l'overlay.", |
| | | "settings.tagPosDesc": "Emplacement de la barre de navigation des étiquettes. Gauche/Droite place les étiquettes en barre latérale.", |
| | | "settings.tagFontSize": "Taille des étiquettes :", |
| | | "settings.tagFontDesc": "Ajuste la taille du texte des noms de groupe dans l'overlay.", |
| | | "settings.iconSize": "Taille des icônes:", |
| | | "settings.iconSizeDesc": "Taille d'affichage des icônes.", |
| | | "settings.iconSizeDesc": "Taille d'affichage des icônes. Les colonnes s'ajustent automatiquement.", |
| | | "settings.backup": "Sauvegarde et restauration", |
| | | "settings.export": "Exporter les étiquettes…", |
| | | "settings.import": "Importer les étiquettes…", |
| | | "settings.backupDesc": "L'exportation enregistre les attributions d'étiquettes dans un fichier JSON.", |
| | | "settings.importFailed": "Échec de l'importation", |
| | | "settings.backupDesc": "L'export sauvegarde les attributions d'étiquettes dans un fichier JSON. L'import remplace la base actuelle.", |
| | | "settings.importFailed": "Échec de l'import", |
| | | "edit.exit": "Quitter l'édition", |
| | | "edit.tags": "Modifier les étiquettes", |
| | | "edit.title": "Modifier les catégories", |
| | | "edit.confirm": "Confirmer", |
| | | "edit.selectTags": "Sélectionner:", |
| | | "edit.dragHint": "Glisser pour réorganiser", |
| | | "edit.success": "Succès", |
| | | "edit.noTags": "Aucune étiquette.", |
| | | "edit.selectTags": "Sélectionner des étiquettes :", |
| | | "edit.dragHint": "Faites glisser pour réorganiser", |
| | | "edit.success": "Classé avec succès", |
| | | "edit.noTags": "Aucune étiquette. Cliquez sur \"Nouvelle étiquette\" pour en créer une.", |
| | | "tag.newTag": "Nouvelle étiquette", |
| | | "tag.name": "Nom", |
| | | "tag.name": "Nom de l'étiquette", |
| | | "tag.save": "Enregistrer", |
| | | "tag.cancel": "Annuler", |
| | | "tag.add": "Ajouter", |
| | | "tag.newName": "Nouveau nom" |
| | | "tag.newName": "Nouveau nom d'étiquette", |
| | | "app.name": "Apptag", |
| | | "app.description": "Lanceur d'applications par étiquettes", |
| | | "app.version": "Version", |
| | | "app.build": "Build", |
| | | "group.uncategorized": "Non classé", |
| | | "group.appleBuiltIn": "Intégrées", |
| | | "tag.design": "Design", |
| | | "tag.development": "Développement", |
| | | "tag.writing": "Écriture", |
| | | "tag.gaming": "Jeux", |
| | | "tag.entertainment": "Divertissement", |
| | | "tag.system": "Système", |
| | | "tag.productivity": "Bureau", |
| | | "settings.coloredContainer": "Conteneur coloré" |
| | | } |
| | |
| | | "menu.quit": "Esci", |
| | | "menu.language": "Lingua", |
| | | "menu.version": "Versione", |
| | | "settings.general": "Generale", |
| | | "settings.general": "Generali", |
| | | "settings.tags": "Tag", |
| | | "settings.data": "Dati", |
| | | "settings.about": "Informazioni", |
| | | "settings.appListStyle": "Stile elenco:", |
| | | "settings.flat": "Piatto", |
| | | "settings.container": "Contenitore", |
| | | "settings.flatDesc": "«Piatto» mostra le app direttamente. «Contenitore» raggruppa i tag in riquadri.", |
| | | "settings.hideAppNames": "Nascondi nomi", |
| | | "settings.launchAtLogin": "Avvia al login", |
| | | "settings.showInDock": "Mostra nel Dock", |
| | | "settings.appListStyle": "Stile elenco app:", |
| | | "settings.flat": "Elenco", |
| | | "settings.container": "Contenitore senza colore", |
| | | "settings.flatDesc": "\"Elenco\" mostra le app direttamente. \"Contenitore senza colore\" inserisce ogni gruppo in un contenitore senza riempimento. \"Contenitore colorato\" riempie ogni contenitore con il colore del tag.", |
| | | "settings.hideAppNames": "Nascondi nomi app", |
| | | "settings.tagPosition": "Posizione tag:", |
| | | "settings.left": "Sinistra", |
| | | "settings.right": "Destra", |
| | | "settings.top": "Alto", |
| | | "settings.tagPosDesc": "Dove appare la barra di navigazione dei tag.", |
| | | "settings.tagFontSize": "Dimensione font:", |
| | | "settings.tagFontDesc": "Regola la dimensione delle etichette dei gruppi.", |
| | | "settings.tagPosDesc": "Dove appare la barra di navigazione dei tag. Sinistra/Destra mette i tag in una barra laterale.", |
| | | "settings.tagFontSize": "Dimensione font tag:", |
| | | "settings.tagFontDesc": "Regola la dimensione delle etichette dei nomi gruppo nell'overlay.", |
| | | "settings.iconSize": "Dimensione icone:", |
| | | "settings.iconSizeDesc": "Dimensione di visualizzazione delle icone.", |
| | | "settings.iconSizeDesc": "Dimensione di visualizzazione delle icone. Le colonne si adattano automaticamente.", |
| | | "settings.backup": "Backup e ripristino", |
| | | "settings.export": "Esporta tag…", |
| | | "settings.import": "Importa tag…", |
| | | "settings.backupDesc": "L'esportazione salva le assegnazioni dei tag in un file JSON.", |
| | | "settings.backupDesc": "L'esportazione salva le assegnazioni tag in un file JSON. L'importazione sostituisce il database corrente.", |
| | | "settings.importFailed": "Importazione fallita", |
| | | "edit.exit": "Esci dalla modifica", |
| | | "edit.title": "Modifica categorie", |
| | | "edit.tags": "Modifica tag", |
| | | "edit.title": "Modifica categorie app", |
| | | "edit.confirm": "Conferma", |
| | | "edit.selectTags": "Seleziona tag:", |
| | | "edit.dragHint": "Trascina per riordinare", |
| | | "edit.success": "Successo", |
| | | "edit.noTags": "Nessun tag.", |
| | | "edit.success": "Categorizzazione riuscita", |
| | | "edit.noTags": "Nessun tag. Clicca \"Nuovo tag\" per crearne uno.", |
| | | "tag.newTag": "Nuovo tag", |
| | | "tag.name": "Nome tag", |
| | | "tag.save": "Salva", |
| | | "tag.cancel": "Annulla", |
| | | "tag.add": "Aggiungi", |
| | | "tag.newName": "Nuovo nome" |
| | | "tag.newName": "Nuovo nome tag", |
| | | "app.name": "Apptag", |
| | | "app.description": "Launcher di app basato su tag", |
| | | "app.version": "Versione", |
| | | "app.build": "Build", |
| | | "group.uncategorized": "Non categorizzato", |
| | | "group.appleBuiltIn": "Integrate", |
| | | "tag.design": "Design", |
| | | "tag.development": "Sviluppo", |
| | | "tag.writing": "Scrittura", |
| | | "tag.gaming": "Giochi", |
| | | "tag.entertainment": "Intrattenimento", |
| | | "tag.system": "Sistema", |
| | | "tag.productivity": "Ufficio", |
| | | "settings.coloredContainer": "Contenitore colorato" |
| | | } |
| | |
| | | "settings.general": "一般", |
| | | "settings.tags": "タグ", |
| | | "settings.data": "データ", |
| | | "settings.about": "について", |
| | | "settings.appListStyle": "Appリストスタイル:", |
| | | "settings.about": "概要", |
| | | "settings.launchAtLogin": "ログイン時に起動", |
| | | "settings.showInDock": "Dockに表示", |
| | | "settings.appListStyle": "アプリ一覧スタイル:", |
| | | "settings.flat": "フラット", |
| | | "settings.container": "コンテナ", |
| | | "settings.flatDesc": "「フラット」はAppを直接表示。「コンテナ」は各タググループを角丸ボックスで囲みます。", |
| | | "settings.hideAppNames": "App名を隠す", |
| | | "settings.tagPosition": "タグナビ位置:", |
| | | "settings.container": "無色コンテナ", |
| | | "settings.flatDesc": "\"フラット\"はアプリを直接表示します。\"無色コンテナ\"は各タググループを塗りなしのコンテナで囲みます。\"カラーコンテナ\"は各コンテナをタグ色で塗ります。", |
| | | "settings.hideAppNames": "アプリ名を非表示", |
| | | "settings.tagPosition": "タグ位置:", |
| | | "settings.left": "左", |
| | | "settings.right": "右", |
| | | "settings.top": "上", |
| | | "settings.tagPosDesc": "タグナビゲーションバーの表示位置。左/右はサイドバーに表示します。", |
| | | "settings.tagFontSize": "タグフォントサイズ:", |
| | | "settings.tagFontDesc": "オーバーレイ内のグループ名ラベルのサイズを調整します。", |
| | | "settings.iconSize": "アイコンサイズ:", |
| | | "settings.iconSizeDesc": "アイコンの表示サイズ。グリッド列は自動調整されます。", |
| | | "settings.tagPosDesc": "タグナビゲーションバーの位置。左右はサイドバーに配置。", |
| | | "settings.tagFontSize": "タグのフォントサイズ:", |
| | | "settings.tagFontDesc": "オーバーレイ内のグループ名ラベルのサイズを調整。", |
| | | "settings.iconSize": "アイコンサイズ:", |
| | | "settings.iconSizeDesc": "アイコン表示サイズ。グリッド列は自動調整されます。", |
| | | "settings.backup": "バックアップと復元", |
| | | "settings.export": "タグをエクスポート…", |
| | | "settings.import": "タグをインポート…", |
| | | "settings.backupDesc": "エクスポートはタグ割り当てをJSONファイルに保存します。インポートはファイルのデータで現在のデータベースを置き換えます。", |
| | | "settings.backupDesc": "エクスポートはタグ割り当てをJSONファイルに保存。インポートはファイルで現在のデータベースを置き換えます。", |
| | | "settings.importFailed": "インポート失敗", |
| | | "edit.exit": "編集を終了", |
| | | "edit.title": "App分類を編集", |
| | | "edit.tags": "タグを編集", |
| | | "edit.title": "アプリカテゴリを編集", |
| | | "edit.confirm": "確認", |
| | | "edit.selectTags": "タグを選択:", |
| | | "edit.dragHint": "ドラッグで並び替え", |
| | | "edit.selectTags": "タグを選択:", |
| | | "edit.dragHint": "ドラッグで並べ替え", |
| | | "edit.success": "分類成功", |
| | | "edit.noTags": "タグがありません。「新規タグ」をクリックして作成してください。", |
| | | "tag.newTag": "新規タグ", |
| | |
| | | "tag.save": "保存", |
| | | "tag.cancel": "キャンセル", |
| | | "tag.add": "追加", |
| | | "tag.newName": "新規タグ名" |
| | | "tag.newName": "新しいタグ名", |
| | | "app.name": "Apptag", |
| | | "app.description": "タグベースのアプリランチャー", |
| | | "app.version": "バージョン", |
| | | "app.build": "ビルド", |
| | | "group.uncategorized": "未分類", |
| | | "group.appleBuiltIn": "Mac内蔵", |
| | | "tag.design": "デザイン", |
| | | "tag.development": "プログラミング", |
| | | "tag.writing": "ライティング", |
| | | "tag.gaming": "ゲーム", |
| | | "tag.entertainment": "エンタメ", |
| | | "tag.system": "システム", |
| | | "tag.productivity": "オフィス", |
| | | "settings.coloredContainer": "カラーコンテナ" |
| | | } |
| | |
| | | { |
| | | "menu.show": "Apptag 보기", |
| | | "menu.preferences": "설정…", |
| | | "menu.preferences": "환경설정…", |
| | | "menu.quit": "종료", |
| | | "menu.language": "언어", |
| | | "menu.version": "버전", |
| | |
| | | "settings.tags": "태그", |
| | | "settings.data": "데이터", |
| | | "settings.about": "정보", |
| | | "settings.launchAtLogin": "로그인 시 시작", |
| | | "settings.showInDock": "Dock에 표시", |
| | | "settings.appListStyle": "앱 목록 스타일:", |
| | | "settings.flat": "플랫", |
| | | "settings.container": "컨테이너", |
| | | "settings.flatDesc": "「플랫」은 앱을 직접 표시합니다.「컨테이너」는 각 태그 그룹을 둥근 상자로 묶습니다.", |
| | | "settings.container": "무색 컨테이너", |
| | | "settings.flatDesc": "\"플랫\"은 앱을 직접 표시합니다. \"무색 컨테이너\"는 각 태그 그룹을 채움 없는 컨테이너로 묶습니다. \"색상 컨테이너\"는 각 컨테이너를 태그 색으로 채웁니다.", |
| | | "settings.hideAppNames": "앱 이름 숨기기", |
| | | "settings.tagPosition": "태그 탐색 위치:", |
| | | "settings.tagPosition": "태그 위치:", |
| | | "settings.left": "왼쪽", |
| | | "settings.right": "오른쪽", |
| | | "settings.top": "위쪽", |
| | | "settings.tagPosDesc": "태그 탐색 막대의 표시 위치입니다.", |
| | | "settings.tagPosDesc": "태그 탐색 막대 위치. 왼쪽/오른쪽은 사이드바에 배치됩니다.", |
| | | "settings.tagFontSize": "태그 글꼴 크기:", |
| | | "settings.tagFontDesc": "오버레이에서 그룹 이름 레이블의 크기를 조정합니다.", |
| | | "settings.tagFontDesc": "오버레이의 그룹 이름 레이블 크기를 조정합니다.", |
| | | "settings.iconSize": "아이콘 크기:", |
| | | "settings.iconSizeDesc": "아이콘 표시 크기입니다.", |
| | | "settings.iconSizeDesc": "아이콘 표시 크기. 그리드 열은 자동 조정됩니다.", |
| | | "settings.backup": "백업 및 복원", |
| | | "settings.export": "태그 내보내기…", |
| | | "settings.import": "태그 가져오기…", |
| | | "settings.backupDesc": "내보내기는 태그 할당을 JSON 파일로 저장합니다.", |
| | | "settings.backupDesc": "내보내기는 태그 할당을 JSON 파일로 저장합니다. 가져오기는 파일로 현재 데이터베이스를 대체합니다.", |
| | | "settings.importFailed": "가져오기 실패", |
| | | "edit.exit": "편집 종료", |
| | | "edit.title": "앱 분류 편집", |
| | | "edit.tags": "태그 편집", |
| | | "edit.title": "앱 카테고리 편집", |
| | | "edit.confirm": "확인", |
| | | "edit.selectTags": "태그 선택:", |
| | | "edit.dragHint": "드래그하여 재정렬", |
| | | "edit.dragHint": "드래그하여 순서 변경", |
| | | "edit.success": "분류 성공", |
| | | "edit.noTags": "태그가 없습니다.", |
| | | "edit.noTags": "태그가 없습니다. \"새 태그\"를 클릭하여 만드세요.", |
| | | "tag.newTag": "새 태그", |
| | | "tag.name": "태그 이름", |
| | | "tag.save": "저장", |
| | | "tag.cancel": "취소", |
| | | "tag.add": "추가", |
| | | "tag.newName": "새 태그 이름" |
| | | "tag.newName": "새 태그 이름", |
| | | "app.name": "Apptag", |
| | | "app.description": "태그 기반 앱 런처", |
| | | "app.version": "버전", |
| | | "app.build": "빌드", |
| | | "group.uncategorized": "미분류", |
| | | "group.appleBuiltIn": "Mac 내장", |
| | | "tag.design": "디자인", |
| | | "tag.development": "프로그래밍", |
| | | "tag.writing": "글쓰기", |
| | | "tag.gaming": "게임", |
| | | "tag.entertainment": "엔터테인먼트", |
| | | "tag.system": "시스템", |
| | | "tag.productivity": "오피스", |
| | | "settings.coloredContainer": "색상 컨테이너" |
| | | } |
| | |
| | | { |
| | | "menu.show": "Показать Apptag", |
| | | "menu.preferences": "Настройки…", |
| | | "menu.quit": "Выход", |
| | | "menu.quit": "Выйти", |
| | | "menu.language": "Язык", |
| | | "menu.version": "Версия", |
| | | "settings.general": "Общие", |
| | | "settings.tags": "Теги", |
| | | "settings.data": "Данные", |
| | | "settings.about": "О программе", |
| | | "settings.appListStyle": "Стиль списка:", |
| | | "settings.flat": "Плитка", |
| | | "settings.container": "Контейнер", |
| | | "settings.flatDesc": "«Плитка» показывает приложения напрямую. «Контейнер» помещает группы в рамки.", |
| | | "settings.hideAppNames": "Скрыть названия", |
| | | "settings.tagPosition": "Позиция тегов:", |
| | | "settings.launchAtLogin": "Запускать при входе", |
| | | "settings.showInDock": "Показывать в Dock", |
| | | "settings.appListStyle": "Стиль списка приложений:", |
| | | "settings.flat": "Плоский", |
| | | "settings.container": "Бесцветный контейнер", |
| | | "settings.flatDesc": "\"Плоский\" показывает приложения напрямую. \"Бесцветный контейнер\" помещает группы тегов в контейнеры без заливки. \"Цветной контейнер\" заливает каждый контейнер цветом тега.", |
| | | "settings.hideAppNames": "Скрыть названия приложений", |
| | | "settings.tagPosition": "Положение тегов:", |
| | | "settings.left": "Слева", |
| | | "settings.right": "Справа", |
| | | "settings.top": "Сверху", |
| | | "settings.tagPosDesc": "Где отображается панель навигации по тегам.", |
| | | "settings.tagFontSize": "Размер шрифта:", |
| | | "settings.tagFontDesc": "Размер названий групп в оверлее.", |
| | | "settings.iconSize": "Размер иконок:", |
| | | "settings.iconSizeDesc": "Размер отображения иконок.", |
| | | "settings.tagPosDesc": "Где отображается панель навигации тегов. Слева/Справа размещает теги на боковой панели.", |
| | | "settings.tagFontSize": "Размер шрифта тегов:", |
| | | "settings.tagFontDesc": "Настройка размера названий групп в оверлее.", |
| | | "settings.iconSize": "Размер значков:", |
| | | "settings.iconSizeDesc": "Размер отображения значков. Колонки сетки подстраиваются автоматически.", |
| | | "settings.backup": "Резервное копирование", |
| | | "settings.export": "Экспорт тегов…", |
| | | "settings.import": "Импорт тегов…", |
| | | "settings.backupDesc": "Экспорт сохраняет назначения тегов в JSON-файл.", |
| | | "settings.backupDesc": "Экспорт сохраняет назначения тегов в JSON-файл. Импорт заменяет текущую базу данных файлом.", |
| | | "settings.importFailed": "Ошибка импорта", |
| | | "edit.exit": "Выйти из редактирования", |
| | | "edit.tags": "Редактировать теги", |
| | | "edit.title": "Редактировать категории", |
| | | "edit.confirm": "Подтвердить", |
| | | "edit.selectTags": "Выбрать теги:", |
| | | "edit.selectTags": "Выберите теги:", |
| | | "edit.dragHint": "Перетащите для сортировки", |
| | | "edit.success": "Готово", |
| | | "edit.noTags": "Нет тегов.", |
| | | "edit.noTags": "Нет тегов. Нажмите \"Новый тег\", чтобы создать.", |
| | | "tag.newTag": "Новый тег", |
| | | "tag.name": "Имя тега", |
| | | "tag.name": "Название тега", |
| | | "tag.save": "Сохранить", |
| | | "tag.cancel": "Отмена", |
| | | "tag.add": "Добавить", |
| | | "tag.newName": "Новое имя тега" |
| | | "tag.newName": "Новое название тега", |
| | | "app.name": "Apptag", |
| | | "app.description": "Лаунчер приложений на основе тегов", |
| | | "app.version": "Версия", |
| | | "app.build": "Сборка", |
| | | "group.uncategorized": "Без категории", |
| | | "group.appleBuiltIn": "Встроенные", |
| | | "tag.design": "Дизайн", |
| | | "tag.development": "Разработка", |
| | | "tag.writing": "Текст", |
| | | "tag.gaming": "Игры", |
| | | "tag.entertainment": "Развлечения", |
| | | "tag.system": "Система", |
| | | "tag.productivity": "Офис", |
| | | "settings.coloredContainer": "Цветной контейнер" |
| | | } |
| | |
| | | { |
| | | "menu.show": "显示 Apptag", |
| | | "menu.preferences": "设置…", |
| | | "menu.preferences": "偏好设置…", |
| | | "menu.quit": "退出", |
| | | "menu.language": "语言", |
| | | "menu.version": "版本", |
| | |
| | | "settings.tags": "标签", |
| | | "settings.data": "数据", |
| | | "settings.about": "关于", |
| | | "settings.appListStyle": "App 列表样式:", |
| | | "settings.launchAtLogin": "登录时启动", |
| | | "settings.showInDock": "在 Dock 中显示", |
| | | "settings.appListStyle": "应用列表样式:", |
| | | "settings.flat": "平铺", |
| | | "settings.container": "容器", |
| | | "settings.flatDesc": "「平铺」直接显示 App。「容器」将每个标签组放入圆角框。", |
| | | "settings.hideAppNames": "隐藏 App 名称", |
| | | "settings.tagPosition": "标签导航位置:", |
| | | "settings.container": "无色容器", |
| | | "settings.flatDesc": "\"平铺\"直接显示应用。\"无色容器\"将每个标签组放入无填充容器。\"彩色容器\"会用标签颜色填充每个容器。", |
| | | "settings.hideAppNames": "隐藏应用名称", |
| | | "settings.tagPosition": "标签位置:", |
| | | "settings.left": "左侧", |
| | | "settings.right": "右侧", |
| | | "settings.top": "顶部", |
| | | "settings.tagPosDesc": "标签导航栏的显示位置。左/右将在侧边栏中显示标签。", |
| | | "settings.tagFontSize": "标签字体大小:", |
| | | "settings.tagFontDesc": "调整浮层中分组名称标签的大小。", |
| | | "settings.iconSize": "图标大小:", |
| | | "settings.iconSizeDesc": "图标显示尺寸。网格列会自动调整。", |
| | | "settings.tagPosDesc": "标签导航栏显示位置。左侧/右侧将标签放在侧边栏。", |
| | | "settings.tagFontSize": "标签字号:", |
| | | "settings.tagFontDesc": "调整悬浮面板中分组名称的文字大小。", |
| | | "settings.iconSize": "图标大小:", |
| | | "settings.iconSizeDesc": "图标显示尺寸。网格列数自动调整。", |
| | | "settings.backup": "备份与恢复", |
| | | "settings.export": "导出标签…", |
| | | "settings.import": "导入标签…", |
| | | "settings.backupDesc": "导出将标签分配保存为 JSON 文件。导入将用文件中的数据替换当前数据库。", |
| | | "settings.backupDesc": "导出将标签分配保存为 JSON 文件。导入用一个文件替换当前数据库。", |
| | | "settings.importFailed": "导入失败", |
| | | "edit.exit": "退出编辑", |
| | | "edit.title": "编辑 App 分类", |
| | | "edit.tags": "编辑标签", |
| | | "edit.title": "编辑应用分类", |
| | | "edit.confirm": "确认", |
| | | "edit.selectTags": "选择标签:", |
| | | "edit.dragHint": "拖动排序", |
| | | "edit.selectTags": "选择标签:", |
| | | "edit.dragHint": "拖拽排序", |
| | | "edit.success": "分类成功", |
| | | "edit.noTags": "暂无标签。点击「新建标签」创建一个。", |
| | | "edit.noTags": "暂无标签。点击\"新建标签\"创建一个。", |
| | | "tag.newTag": "新建标签", |
| | | "tag.name": "标签名称", |
| | | "tag.save": "保存", |
| | | "tag.cancel": "取消", |
| | | "tag.add": "添加", |
| | | "tag.newName": "新标签名称" |
| | | "tag.newName": "新标签名称", |
| | | "app.name": "Apptag", |
| | | "app.description": "基于标签的应用启动器", |
| | | "app.version": "版本", |
| | | "app.build": "构建", |
| | | "group.uncategorized": "未分类", |
| | | "group.appleBuiltIn": "Mac自带", |
| | | "tag.design": "设计", |
| | | "tag.development": "编程", |
| | | "tag.writing": "写作", |
| | | "tag.gaming": "游戏", |
| | | "tag.entertainment": "娱乐", |
| | | "tag.system": "系统优化", |
| | | "tag.productivity": "办公", |
| | | "settings.coloredContainer": "彩色容器" |
| | | } |
| | |
| | | { |
| | | "menu.show": "顯示 Apptag", |
| | | "menu.preferences": "設定…", |
| | | "menu.preferences": "偏好設定…", |
| | | "menu.quit": "退出", |
| | | "menu.language": "語言", |
| | | "menu.version": "版本", |
| | |
| | | "settings.tags": "標籤", |
| | | "settings.data": "資料", |
| | | "settings.about": "關於", |
| | | "settings.appListStyle": "App 列表樣式:", |
| | | "settings.launchAtLogin": "登入時啟動", |
| | | "settings.showInDock": "在 Dock 中顯示", |
| | | "settings.appListStyle": "應用程式列表樣式:", |
| | | "settings.flat": "平鋪", |
| | | "settings.container": "容器", |
| | | "settings.flatDesc": "「平鋪」直接顯示 App。「容器」將每個標籤組放入圓角框。", |
| | | "settings.hideAppNames": "隱藏 App 名稱", |
| | | "settings.tagPosition": "標籤導航位置:", |
| | | "settings.container": "無色容器", |
| | | "settings.flatDesc": "\"平鋪\"直接顯示應用程式。\"無色容器\"將每個標籤組放入無填充容器。\"彩色容器\"會用標籤顏色填充每個容器。", |
| | | "settings.hideAppNames": "隱藏應用程式名稱", |
| | | "settings.tagPosition": "標籤位置:", |
| | | "settings.left": "左側", |
| | | "settings.right": "右側", |
| | | "settings.top": "頂部", |
| | | "settings.tagPosDesc": "標籤導航欄的顯示位置。左/右將在側邊欄中顯示標籤。", |
| | | "settings.tagFontSize": "標籤字型大小:", |
| | | "settings.tagFontDesc": "調整浮層中分組名稱標籤的大小。", |
| | | "settings.iconSize": "圖示大小:", |
| | | "settings.iconSizeDesc": "圖示顯示尺寸。網格列會自動調整。", |
| | | "settings.tagPosDesc": "標籤導航列顯示位置。左側/右側將標籤放在側邊欄。", |
| | | "settings.tagFontSize": "標籤字型大小:", |
| | | "settings.tagFontDesc": "調整懸浮面板中分組名稱的文字大小。", |
| | | "settings.iconSize": "圖示大小:", |
| | | "settings.iconSizeDesc": "圖示顯示尺寸。網格列數自動調整。", |
| | | "settings.backup": "備份與還原", |
| | | "settings.export": "匯出標籤…", |
| | | "settings.import": "匯入標籤…", |
| | | "settings.backupDesc": "匯出將標籤指派儲存為 JSON 檔案。匯入將用檔案中的資料取代目前資料庫。", |
| | | "settings.backupDesc": "匯出將標籤分配儲存為 JSON 檔案。匯入用一個檔案取代目前資料庫。", |
| | | "settings.importFailed": "匯入失敗", |
| | | "edit.exit": "退出編輯", |
| | | "edit.title": "編輯 App 分類", |
| | | "edit.exit": "結束編輯", |
| | | "edit.tags": "編輯標籤", |
| | | "edit.title": "編輯應用程式分類", |
| | | "edit.confirm": "確認", |
| | | "edit.selectTags": "選擇標籤:", |
| | | "edit.selectTags": "選擇標籤:", |
| | | "edit.dragHint": "拖曳排序", |
| | | "edit.success": "分類成功", |
| | | "edit.noTags": "尚無標籤。點擊「新增標籤」建立一個。", |
| | | "edit.noTags": "暫無標籤。點選「新增標籤」建立一個。", |
| | | "tag.newTag": "新增標籤", |
| | | "tag.name": "標籤名稱", |
| | | "tag.save": "儲存", |
| | | "tag.cancel": "取消", |
| | | "tag.add": "新增", |
| | | "tag.newName": "新標籤名稱" |
| | | "tag.newName": "新標籤名稱", |
| | | "app.name": "Apptag", |
| | | "app.description": "基於標籤的應用程式啟動器", |
| | | "app.version": "版本", |
| | | "app.build": "建置", |
| | | "group.uncategorized": "未分類", |
| | | "group.appleBuiltIn": "Mac內建", |
| | | "tag.design": "設計", |
| | | "tag.development": "程式設計", |
| | | "tag.writing": "寫作", |
| | | "tag.gaming": "遊戲", |
| | | "tag.entertainment": "娛樂", |
| | | "tag.system": "系統優化", |
| | | "tag.productivity": "辦公", |
| | | "settings.coloredContainer": "彩色容器" |
| | | } |
| | |
| | | # Apptag Changelog |
| | | |
| | | ## [3.2.0] — 2026-05-10 |
| | | |
| | | - 新增 App 列表显示样式「彩色容器」:所有容器默认填充标签色,鼠标 hover 容器时增加阴影凸起效果 |
| | | - 将原「分组 / Container」样式改名为「无色容器」,保留无填充容器布局 |
| | | - 补充 9 语种显示样式名称与说明文案 |
| | | |
| | | ## [3.1.35] — 2026-05-10 |
| | | |
| | | - 修复 overlay 显示时打开设置窗口不可见的问题:设置窗口会强制浮动在 Apptag 列表之上,确保用户能实时预览设置效果 |
| | | |
| | | ## [3.1.34] — 2026-05-10 |
| | | |
| | | - 优化 Container 模式标签 hover 交互:hover 标签后对应容器背景保持标签色填充,直到再次点击标签或点击容器空白处清除 |
| | | |
| | | ## [3.1.33] — 2026-05-10 |
| | | |
| | | - 修复点击 App 图标后应用列表仍置顶停留的问题:App 启动路径改为强制关闭并释放 overlay,确保焦点及时转移到被打开的应用 |