Ariver
2026-05-14 5a8600bb59862db9becada37452483e1a1d2e397
Release TagLauncher 5.7.5
33 files modified
173 ■■■■ changed files
AppStore_Submission.md 13 ●●●●● patch | view | raw | blame | history
Apptag/ApptagApp.swift 84 ●●●● patch | view | raw | blame | history
Apptag/ContentView.swift 43 ●●●●● patch | view | raw | blame | history
Apptag/Info.plist 4 ●●●● patch | view | raw | blame | history
Apptag/Localization/ar-Najdi.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/ar.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/cs.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/da.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/de.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/en.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/es.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/fr.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/id.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/it.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/ja.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/ko.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/ms.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/nb.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/nl.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/nn.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/no.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/pl.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/pt-BR.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/ro.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/ru.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/sr-Cyrl.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/sv.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/th.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/tr.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/uk.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/vi.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/zh-Hans.json 1 ●●●● patch | view | raw | blame | history
Apptag/Localization/zh-Hant.json 1 ●●●● patch | view | raw | blame | history
AppStore_Submission.md
@@ -1,6 +1,6 @@
# Apptag — Mac App Store 提审资料
> 版本: 5.7.0 | Bundle ID: com.apptag.launcher | 更新日期: 2026-05-13
> 版本: 5.7.5 | Bundle ID: com.apptag.launcher | 更新日期: 2026-05-14
---
@@ -11,8 +11,8 @@
| **App 名称** | Apptag |
| **副标题** | Tag-Based App Launcher |
| **Bundle ID** | com.apptag.launcher |
| **版本号** | 5.7.0 |
| **Build 号** | 570 |
| **版本号** | 5.7.5 |
| **Build 号** | 575 |
| **SKU** | apptag-mac-001 |
| **主要类别** | Utilities (工具) |
| **次要类别** | Productivity (效率) |
@@ -187,8 +187,11 @@
## 8. What's New (本次版本更新说明)
```
Apptag 5.7.0
Apptag 5.7.5
- Fixed the menu bar icon visibility issue and added a Show Menu Bar Icon preference
- Fixed Preferences placement when opened above TagLauncher from a fullscreen app Space
- Fixed tag navigation reorder mode so clicking elsewhere exits the shaking state
- Expanded localization support to 29 language variants
- Updated the Language preferences tab to a two-column layout for better readability
- Added long-press drag sorting for tag navigation in normal app-list views
@@ -202,7 +205,7 @@
- Added Mac App Store sandbox entitlements and App Store build validation
- Hid Launch at Login controls in sandboxed App Store builds
- Removed deprecated app launch API usage
- Version updated to 5.7.0 (Build 570)
- Version updated to 5.7.5 (Build 575)
```
---
Apptag/ApptagApp.swift
@@ -24,6 +24,8 @@
}
final class AppDelegate: NSObject, NSApplicationDelegate {
    private static let showMenuBarIconKey = "showMenuBarIcon"
    private var statusItem: NSStatusItem?
    private var overlayWindow: NSWindow?
    private var settingsWindow: NSWindow?    // Track Settings window to keep it above overlay
@@ -32,6 +34,7 @@
    func applicationDidFinishLaunching(_ notification: Notification) {
        L10n.setup()
        setupDefaultPreferences()
        migrateDefaultGroupName()
        TagDatabase.seedDefaultTags()
        let showDock = UserDefaults.standard.bool(forKey: "showDockIcon")
@@ -41,7 +44,7 @@
        observeOtherWindows()
        observeSettingsClose()
        observeEditMode()
        observeDockSetting()
        observeChromeSettings()
        observeLanguageChanges()
        setupLaunchAtLogin()
    }
@@ -70,14 +73,21 @@
        // User has set a custom name — keep it
    }
    /// Observe Show in Dock changes so it takes effect immediately.
    private func observeDockSetting() {
    private func setupDefaultPreferences() {
        if UserDefaults.standard.object(forKey: Self.showMenuBarIconKey) == nil {
            UserDefaults.standard.set(true, forKey: Self.showMenuBarIconKey)
        }
    }
    /// Observe Dock/menu-bar visibility changes so they take effect immediately.
    private func observeChromeSettings() {
        NotificationCenter.default.addObserver(
            forName: UserDefaults.didChangeNotification,
            object: nil, queue: .main
        ) { _ in
        ) { [weak self] _ in
            let show = UserDefaults.standard.bool(forKey: "showDockIcon")
            NSApp.setActivationPolicy(show ? .regular : .accessory)
            self?.setupMenuBar()
        }
    }
@@ -150,19 +160,22 @@
    // MARK: - Menu Bar
    private func setupMenuBar() {
        guard UserDefaults.standard.object(forKey: Self.showMenuBarIconKey) as? Bool ?? true else {
            removeMenuBarItem()
            return
        }
        if statusItem == nil {
            statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
            statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
        }
        guard let statusItem else { return }
        if let button = statusItem.button {
            let image = NSImage(
                systemSymbolName: "tag.fill",
                accessibilityDescription: "TagLauncher"
            )
            image?.isTemplate = true
            let image = makeMenuBarIcon()
            button.image = image
            button.imageScaling = .scaleProportionallyDown
            button.imagePosition = .imageOnly
            button.title = image == nil ? "T" : ""
            button.toolTip = "TagLauncher — Tag-based app launcher"
            button.action = #selector(toggleOverlay)
            button.target = self
@@ -221,6 +234,33 @@
            )
        )
        statusItem.menu = menu
    }
    private func removeMenuBarItem() {
        guard let statusItem else { return }
        NSStatusBar.system.removeStatusItem(statusItem)
        self.statusItem = nil
    }
    private func makeMenuBarIcon() -> NSImage? {
        let size = NSSize(width: 18, height: 18)
        let image = NSImage(size: size)
        image.lockFocus()
        NSColor.black.setFill()
        let tagPath = NSBezierPath()
        tagPath.move(to: NSPoint(x: 2.5, y: 10.5))
        tagPath.line(to: NSPoint(x: 8.5, y: 16.5))
        tagPath.line(to: NSPoint(x: 15.5, y: 16.5))
        tagPath.line(to: NSPoint(x: 15.5, y: 9.5))
        tagPath.line(to: NSPoint(x: 8.5, y: 2.5))
        tagPath.close()
        tagPath.appendOval(in: NSRect(x: 10.6, y: 12.2, width: 2.6, height: 2.6))
        tagPath.windingRule = .evenOdd
        tagPath.fill()
        image.unlockFocus()
        image.isTemplate = true
        image.accessibilityDescription = "TagLauncher"
        return image
    }
    // MARK: - Overlay Window
@@ -393,15 +433,28 @@
        if let overlayWindow, overlayWindow.isVisible {
            center(window, over: overlayWindow.frame)
            window.level = NSWindow.Level(rawValue: overlayWindow.level.rawValue + 1)
            attachSettingsWindow(window, to: overlayWindow)
        } else if let screen = screenUnderMouse() {
            center(window, over: screen.visibleFrame)
            window.level = .floating
            detachSettingsWindow(window)
        }
        window.collectionBehavior.formUnion([.moveToActiveSpace, .fullScreenAuxiliary])
        window.collectionBehavior.formUnion([.canJoinAllSpaces, .fullScreenAuxiliary, .moveToActiveSpace])
        window.makeKeyAndOrderFront(nil)
        window.orderFrontRegardless()
        settingsWindow = window
    }
    private func attachSettingsWindow(_ window: NSWindow, to overlayWindow: NSWindow) {
        if window.parent != overlayWindow {
            window.parent?.removeChildWindow(window)
            overlayWindow.addChildWindow(window, ordered: .above)
        }
    }
    private func detachSettingsWindow(_ window: NSWindow) {
        window.parent?.removeChildWindow(window)
    }
    private func isSettingsWindowCandidate(_ window: NSWindow) -> Bool {
@@ -442,6 +495,7 @@
                  let closingWindow = notification.object as? NSWindow,
                  closingWindow == self.settingsWindow
            else { return }
            self.detachSettingsWindow(closingWindow)
            self.settingsWindow = nil
        }
    }
@@ -459,8 +513,12 @@
    @objc private func openPreferences() {
        // Don't hide overlay — keep it visible for real-time setting preview.
        if let overlayWindow, overlayWindow.isVisible {
            overlayWindow.makeKeyAndOrderFront(nil)
            overlayWindow.orderFrontRegardless()
        }
        NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil)
        prepareSettingsWindowWhenAvailable(retries: 5)
        prepareSettingsWindowWhenAvailable(retries: 10)
    }
    private func prepareSettingsWindowWhenAvailable(retries: Int) {
@@ -570,6 +628,7 @@
    @AppStorage("defaultGroupName") private var defaultGroupName = "Other"
    @AppStorage("displayMode") private var displayMode = "flat"
    @AppStorage("hideAppNames") private var hideAppNames = false
    @AppStorage("showMenuBarIcon") private var showMenuBarIcon = true
    @AppStorage("showDockIcon") private var showDockIcon = false
    @AppStorage("launchAtLogin") private var launchAtLogin = true
    @State private var selectedLanguage = L10n.currentCode
@@ -701,6 +760,7 @@
                                }
                            }
                    }
                    Toggle(tr("settings.showMenuBarIcon"), isOn: $showMenuBarIcon)
                    Toggle(tr("settings.showInDock"), isOn: $showDockIcon)
                    Toggle(tr("settings.hideAppNames"), isOn: $hideAppNames)
                }
Apptag/ContentView.swift
@@ -237,6 +237,7 @@
    @State private var tagReorderFrames: [String: CGRect] = [:]
    @State private var tagNavDragModeActive = false
    @State private var tagNavDragItem: String? = nil
    @State private var tagNavDismissMonitor: Any? = nil
    @State private var tagNavReorderFrames: [String: CGRect] = [:]
    @State private var hoveredContainer: String? = nil  // colored container lift
    // Fixed interaction for "Colorless Container": hover fills persistently; click clears.
@@ -347,6 +348,12 @@
                userInfo: ["active": active]
            )
        }
        .onChange(of: tagNavDragModeActive) { _, active in
            updateTagNavDismissMonitor(active: active)
        }
        .onDisappear {
            removeTagNavDismissMonitor()
        }
    }
    /// Set edit phase with synchronous notification BEFORE state change.
@@ -377,6 +384,16 @@
                topLayout
            }
            if tagNavDragModeActive && tagNavDragItem == nil {
                Color.clear
                    .contentShape(Rectangle())
                    .ignoresSafeArea()
                    .onTapGesture {
                        endTagNavReorder()
                    }
                    .zIndex(1)
            }
            Button {
                setEditPhase(.editingApps)
            } label: {
@@ -390,6 +407,7 @@
            .padding(.top, notchHeight > 0 ? notchHeight + 10 : 20)
            .padding(.trailing, 20)
            .keyboardShortcut("e", modifiers: .control)
            .zIndex(2)
        }
    }
@@ -1287,6 +1305,27 @@
        }
        tagNavDragModeActive = false
        tagNavDragItem = nil
        removeTagNavDismissMonitor()
    }
    private func updateTagNavDismissMonitor(active: Bool) {
        if active {
            guard tagNavDismissMonitor == nil else { return }
            tagNavDismissMonitor = NSEvent.addLocalMonitorForEvents(matching: [.leftMouseDown, .rightMouseDown]) { event in
                guard tagNavDragModeActive, editPhase == .none else { return event }
                endTagNavReorder()
                return nil
            }
        } else {
            removeTagNavDismissMonitor()
        }
    }
    private func removeTagNavDismissMonitor() {
        if let monitor = tagNavDismissMonitor {
            NSEvent.removeMonitor(monitor)
            tagNavDismissMonitor = nil
        }
    }
    private func reorderTagNavItem(at location: CGPoint) {
@@ -1391,6 +1430,9 @@
    }
    private func setAppDragMode(_ active: Bool) {
        if active {
            endTagNavReorder()
        }
        appDragModeActive = active
        if active {
            DispatchQueue.main.asyncAfter(deadline: .now() + 8) {
@@ -1424,6 +1466,7 @@
    func openApp(_ app: AppInfo) {
        appDragModeActive = false
        endTagNavReorder()
        hideOverlay()
        let configuration = NSWorkspace.OpenConfiguration()
        NSWorkspace.shared.openApplication(at: app.path, configuration: configuration)
Apptag/Info.plist
@@ -19,9 +19,9 @@
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>5.7.0</string>
    <string>5.7.5</string>
    <key>CFBundleVersion</key>
    <string>570</string>
    <string>575</string>
    <key>LSMinimumSystemVersion</key>
    <string>15.0</string>
    <key>NSHighResolutionCapable</key>
Apptag/Localization/ar-Najdi.json
@@ -13,6 +13,7 @@
  "settings.about": "عن التطبيق",
  "settings.launchAtLogin": "يشتغل مع الدخول",
  "settings.showInDock": "إظهار في Dock",
  "settings.showMenuBarIcon": "إظهار أيقونة شريط القوائم",
  "settings.appListStyle": "شكل قائمة التطبيقات:",
  "settings.flat": "مسطح",
  "settings.container": "حاوية بدون لون",
Apptag/Localization/ar.json
@@ -13,6 +13,7 @@
  "settings.about": "حول",
  "settings.launchAtLogin": "التشغيل عند تسجيل الدخول",
  "settings.showInDock": "إظهار في Dock",
  "settings.showMenuBarIcon": "إظهار أيقونة شريط القوائم",
  "settings.appListStyle": "نمط قائمة التطبيقات:",
  "settings.flat": "مسطح",
  "settings.container": "حاوية بلا لون",
Apptag/Localization/cs.json
@@ -13,6 +13,7 @@
  "settings.about": "O aplikaci",
  "settings.launchAtLogin": "Spustit při přihlášení",
  "settings.showInDock": "Zobrazit v Docku",
  "settings.showMenuBarIcon": "Zobrazit ikonu v řádku nabídek",
  "settings.appListStyle": "Styl seznamu aplikací:",
  "settings.flat": "Plochý",
  "settings.container": "Bezbarvý kontejner",
Apptag/Localization/da.json
@@ -13,6 +13,7 @@
  "settings.about": "Om",
  "settings.launchAtLogin": "Start ved login",
  "settings.showInDock": "Vis i Dock",
  "settings.showMenuBarIcon": "Vis ikon i menulinjen",
  "settings.appListStyle": "Applistestil:",
  "settings.flat": "Flad",
  "settings.container": "Farveløs beholder",
Apptag/Localization/de.json
@@ -13,6 +13,7 @@
  "settings.about": "Über",
  "settings.launchAtLogin": "Beim Anmelden starten",
  "settings.showInDock": "Im Dock anzeigen",
  "settings.showMenuBarIcon": "Menüleistensymbol anzeigen",
  "settings.appListStyle": "App-Listenstil:",
  "settings.flat": "Flach",
  "settings.container": "Farbloser Container",
Apptag/Localization/en.json
@@ -13,6 +13,7 @@
  "settings.about": "About",
  "settings.launchAtLogin": "Launch at login",
  "settings.showInDock": "Show in Dock",
  "settings.showMenuBarIcon": "Show menu bar icon",
  "settings.appListStyle": "App list style:",
  "settings.flat": "Flat",
  "settings.container": "Colorless Container",
Apptag/Localization/es.json
@@ -13,6 +13,7 @@
  "settings.about": "Acerca de",
  "settings.launchAtLogin": "Iniciar al iniciar sesión",
  "settings.showInDock": "Mostrar en el Dock",
  "settings.showMenuBarIcon": "Mostrar icono en la barra de menús",
  "settings.appListStyle": "Estilo de lista de apps:",
  "settings.flat": "Plano",
  "settings.container": "Contenedor sin color",
Apptag/Localization/fr.json
@@ -13,6 +13,7 @@
  "settings.about": "À propos",
  "settings.launchAtLogin": "Lancer à l'ouverture de session",
  "settings.showInDock": "Afficher dans le Dock",
  "settings.showMenuBarIcon": "Afficher l’icône de la barre des menus",
  "settings.appListStyle": "Style de liste d'applications :",
  "settings.flat": "Liste",
  "settings.container": "Conteneur sans couleur",
Apptag/Localization/id.json
@@ -13,6 +13,7 @@
  "settings.about": "Tentang",
  "settings.launchAtLogin": "Mulai saat masuk",
  "settings.showInDock": "Tampilkan di Dock",
  "settings.showMenuBarIcon": "Tampilkan ikon bilah menu",
  "settings.appListStyle": "Gaya daftar app:",
  "settings.flat": "Datar",
  "settings.container": "Kontainer tanpa warna",
Apptag/Localization/it.json
@@ -13,6 +13,7 @@
  "settings.about": "Informazioni",
  "settings.launchAtLogin": "Avvia al login",
  "settings.showInDock": "Mostra nel Dock",
  "settings.showMenuBarIcon": "Mostra icona nella barra dei menu",
  "settings.appListStyle": "Stile elenco app:",
  "settings.flat": "Elenco",
  "settings.container": "Contenitore senza colore",
Apptag/Localization/ja.json
@@ -13,6 +13,7 @@
  "settings.about": "概要",
  "settings.launchAtLogin": "ログイン時に起動",
  "settings.showInDock": "Dockに表示",
  "settings.showMenuBarIcon": "メニューバーアイコンを表示",
  "settings.appListStyle": "アプリ一覧スタイル:",
  "settings.flat": "フラット",
  "settings.container": "無色コンテナ",
Apptag/Localization/ko.json
@@ -13,6 +13,7 @@
  "settings.about": "정보",
  "settings.launchAtLogin": "로그인 시 시작",
  "settings.showInDock": "Dock에 표시",
  "settings.showMenuBarIcon": "메뉴 막대 아이콘 표시",
  "settings.appListStyle": "앱 목록 스타일:",
  "settings.flat": "플랫",
  "settings.container": "무색 컨테이너",
Apptag/Localization/ms.json
@@ -13,6 +13,7 @@
  "settings.about": "Tentang",
  "settings.launchAtLogin": "Mula semasa log masuk",
  "settings.showInDock": "Tunjukkan dalam Dock",
  "settings.showMenuBarIcon": "Tunjukkan ikon bar menu",
  "settings.appListStyle": "Gaya senarai app:",
  "settings.flat": "Datar",
  "settings.container": "Kontainer tanpa warna",
Apptag/Localization/nb.json
@@ -13,6 +13,7 @@
  "settings.about": "Om",
  "settings.launchAtLogin": "Start ved innlogging",
  "settings.showInDock": "Vis i Dock",
  "settings.showMenuBarIcon": "Vis menylinjeikon",
  "settings.appListStyle": "App-listestil:",
  "settings.flat": "Flat",
  "settings.container": "Fargeløs beholder",
Apptag/Localization/nl.json
@@ -13,6 +13,7 @@
  "settings.about": "Over",
  "settings.launchAtLogin": "Start bij inloggen",
  "settings.showInDock": "Toon in Dock",
  "settings.showMenuBarIcon": "Toon menubalkicoon",
  "settings.appListStyle": "App-lijststijl:",
  "settings.flat": "Plat",
  "settings.container": "Kleurloze container",
Apptag/Localization/nn.json
@@ -13,6 +13,7 @@
  "settings.about": "Om",
  "settings.launchAtLogin": "Start ved innlogging",
  "settings.showInDock": "Vis i Dock",
  "settings.showMenuBarIcon": "Vis menylinjeikon",
  "settings.appListStyle": "App-listestil:",
  "settings.flat": "Flat",
  "settings.container": "Fargeløs beholder",
Apptag/Localization/no.json
@@ -13,6 +13,7 @@
  "settings.about": "Om",
  "settings.launchAtLogin": "Start ved innlogging",
  "settings.showInDock": "Vis i Dock",
  "settings.showMenuBarIcon": "Vis menylinjeikon",
  "settings.appListStyle": "App-listestil:",
  "settings.flat": "Flat",
  "settings.container": "Fargeløs beholder",
Apptag/Localization/pl.json
@@ -13,6 +13,7 @@
  "settings.about": "O aplikacji",
  "settings.launchAtLogin": "Uruchamiaj przy logowaniu",
  "settings.showInDock": "Pokaż w Docku",
  "settings.showMenuBarIcon": "Pokaż ikonę na pasku menu",
  "settings.appListStyle": "Styl listy aplikacji:",
  "settings.flat": "Płaski",
  "settings.container": "Bezbarwny kontener",
Apptag/Localization/pt-BR.json
@@ -13,6 +13,7 @@
  "settings.about": "Sobre",
  "settings.launchAtLogin": "Iniciar ao fazer login",
  "settings.showInDock": "Mostrar no Dock",
  "settings.showMenuBarIcon": "Mostrar ícone na barra de menus",
  "settings.appListStyle": "Estilo da lista de apps:",
  "settings.flat": "Plano",
  "settings.container": "Contêiner sem cor",
Apptag/Localization/ro.json
@@ -13,6 +13,7 @@
  "settings.about": "Despre",
  "settings.launchAtLogin": "Pornește la autentificare",
  "settings.showInDock": "Afișează în Dock",
  "settings.showMenuBarIcon": "Afișează pictograma în bara de meniu",
  "settings.appListStyle": "Stil listă aplicații:",
  "settings.flat": "Plat",
  "settings.container": "Container fără culoare",
Apptag/Localization/ru.json
@@ -13,6 +13,7 @@
  "settings.about": "О программе",
  "settings.launchAtLogin": "Запускать при входе",
  "settings.showInDock": "Показывать в Dock",
  "settings.showMenuBarIcon": "Показывать значок в строке меню",
  "settings.appListStyle": "Стиль списка приложений:",
  "settings.flat": "Плоский",
  "settings.container": "Бесцветный контейнер",
Apptag/Localization/sr-Cyrl.json
@@ -13,6 +13,7 @@
  "settings.about": "О програму",
  "settings.launchAtLogin": "Покрени при пријављивању",
  "settings.showInDock": "Прикажи у Dock-у",
  "settings.showMenuBarIcon": "Прикажи икону у траци менија",
  "settings.appListStyle": "Стил листе апликација:",
  "settings.flat": "Равно",
  "settings.container": "Безбојни контејнер",
Apptag/Localization/sv.json
@@ -13,6 +13,7 @@
  "settings.about": "Om",
  "settings.launchAtLogin": "Starta vid inloggning",
  "settings.showInDock": "Visa i Dock",
  "settings.showMenuBarIcon": "Visa ikon i menyraden",
  "settings.appListStyle": "Applistestil:",
  "settings.flat": "Platt",
  "settings.container": "Färglös behållare",
Apptag/Localization/th.json
@@ -13,6 +13,7 @@
  "settings.about": "เกี่ยวกับ",
  "settings.launchAtLogin": "เปิดเมื่อเข้าสู่ระบบ",
  "settings.showInDock": "แสดงใน Dock",
  "settings.showMenuBarIcon": "แสดงไอคอนในแถบเมนู",
  "settings.appListStyle": "รูปแบบรายการแอป:",
  "settings.flat": "แบน",
  "settings.container": "คอนเทนเนอร์ไม่มีสี",
Apptag/Localization/tr.json
@@ -13,6 +13,7 @@
  "settings.about": "Hakkında",
  "settings.launchAtLogin": "Girişte başlat",
  "settings.showInDock": "Dock’ta göster",
  "settings.showMenuBarIcon": "Menü çubuğu simgesini göster",
  "settings.appListStyle": "Uygulama listesi stili:",
  "settings.flat": "Düz",
  "settings.container": "Renksiz Kapsayıcı",
Apptag/Localization/uk.json
@@ -13,6 +13,7 @@
  "settings.about": "Про програму",
  "settings.launchAtLogin": "Запускати під час входу",
  "settings.showInDock": "Показувати в Dock",
  "settings.showMenuBarIcon": "Показувати значок у рядку меню",
  "settings.appListStyle": "Стиль списку застосунків:",
  "settings.flat": "Плоский",
  "settings.container": "Безбарвний контейнер",
Apptag/Localization/vi.json
@@ -13,6 +13,7 @@
  "settings.about": "Giới thiệu",
  "settings.launchAtLogin": "Khởi động khi đăng nhập",
  "settings.showInDock": "Hiển thị trong Dock",
  "settings.showMenuBarIcon": "Hiển thị biểu tượng trên thanh menu",
  "settings.appListStyle": "Kiểu danh sách ứng dụng:",
  "settings.flat": "Phẳng",
  "settings.container": "Vùng chứa không màu",
Apptag/Localization/zh-Hans.json
@@ -13,6 +13,7 @@
  "settings.about": "关于",
  "settings.launchAtLogin": "登录时启动",
  "settings.showInDock": "在 Dock 中显示",
  "settings.showMenuBarIcon": "显示菜单栏图标",
  "settings.appListStyle": "应用列表样式:",
  "settings.flat": "平铺",
  "settings.container": "无色容器",
Apptag/Localization/zh-Hant.json
@@ -13,6 +13,7 @@
  "settings.about": "關於",
  "settings.launchAtLogin": "登入時啟動",
  "settings.showInDock": "在 Dock 中顯示",
  "settings.showMenuBarIcon": "顯示選單列圖示",
  "settings.appListStyle": "應用程式列表樣式:",
  "settings.flat": "平鋪",
  "settings.container": "無色容器",