From 18a0fe3977175f3f7a945b300524fd2cd37fef28 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sat, 13 Jun 2026 15:15:47 +0800
Subject: [PATCH] Add app grid usage tips
---
src/Apptag/Localization/fr.json | 22 +
src/Apptag/Localization/ru.json | 22 +
src/Apptag/AppGridCollectionView.swift | 53 ++
src/Scripts/usage_tips_qa.sh | 153 ++++++++
src/Apptag/Localization/ar.json | 22 +
src/Apptag/Localization/ro.json | 22 +
src/Apptag/Localization/en.json | 22 +
src/Apptag/Localization/sv.json | 22 +
src/Apptag/Localization/zh-Hant.json | 22 +
src/Apptag/Localization/pl.json | 22 +
src/Apptag/Localization/es.json | 22 +
src/Apptag/Localization/th.json | 22 +
src/Apptag/Localization/nn.json | 22 +
src/Apptag/Localization/cs.json | 22 +
src/Apptag/Localization/ms.json | 22 +
src/Apptag/Localization/it.json | 22 +
src/Apptag/Localization/tr.json | 22 +
src/Apptag/Localization/da.json | 22 +
src/Apptag/Localization/id.json | 22 +
src/Apptag/Localization/ja.json | 22 +
src/Apptag/PreferencesView.swift | 10
src/Apptag/AppDefaults.swift | 2
src/Apptag/Localization/de.json | 22 +
src/Apptag/Localization/pt-BR.json | 22 +
src/Apptag/Localization/ar-Najdi.json | 22 +
src/Apptag/Localization/nb.json | 22 +
src/Apptag/Localization/ko.json | 22 +
src/Apptag/Localization/no.json | 22 +
src/Apptag/ContentView.swift | 209 +++++++++-
src/Apptag/Localization/sr-Cyrl.json | 22 +
src/Apptag/Localization/zh-Hans.json | 22 +
src/Apptag/Localization/nl.json | 22 +
src/Apptag/Localization/uk.json | 22 +
src/Apptag/Localization/vi.json | 22 +
34 files changed, 991 insertions(+), 74 deletions(-)
diff --git a/src/Apptag/AppDefaults.swift b/src/Apptag/AppDefaults.swift
index 0484a60..db0fb3b 100644
--- a/src/Apptag/AppDefaults.swift
+++ b/src/Apptag/AppDefaults.swift
@@ -12,6 +12,7 @@
static let showDockIcon = true
static let launchAtLogin = true
static let showUncommonAppBubbles = false
+ static let hideUsageTips = false
static let useAppKitTagNavigation = true
static func register() {
@@ -24,6 +25,7 @@
"showDockIcon": showDockIcon,
"launchAtLogin": launchAtLogin,
"showUncommonAppBubbles": showUncommonAppBubbles,
+ "hideUsageTips": hideUsageTips,
"useAppKitTagNavigation": useAppKitTagNavigation,
"skipTagRemovalDropConfirm": false,
"skipUncategorizedDropConfirm": false,
diff --git a/src/Apptag/AppGridCollectionView.swift b/src/Apptag/AppGridCollectionView.swift
index 5889cd3..cfcd15d 100644
--- a/src/Apptag/AppGridCollectionView.swift
+++ b/src/Apptag/AppGridCollectionView.swift
@@ -38,6 +38,7 @@
let bubbleDisabled: Bool
let showUncommonAppBubbles: Bool
let highlightedGroupName: String?
+ let bottomContentPadding: CGFloat
let contentRevision: Int
let scrollTargetID: String?
let scrollRequestToken: Int
@@ -71,6 +72,7 @@
bubbleDisabled: bubbleDisabled,
showUncommonAppBubbles: showUncommonAppBubbles,
highlightedGroupName: highlightedGroupName,
+ bottomContentPadding: bottomContentPadding,
contentRevision: contentRevision,
scrollTargetID: scrollTargetID,
scrollRequestToken: scrollRequestToken,
@@ -97,6 +99,7 @@
private var scrollBubbleDisabled = false
var showUncommonAppBubbles = AppDefaults.showUncommonAppBubbles
var highlightedGroupName: String?
+ var bottomContentPadding: CGFloat = 0
var contentRevision = 0
var scrollTargetID: String?
var scrollRequestToken = 0
@@ -129,6 +132,7 @@
bubbleDisabled: Bool,
showUncommonAppBubbles: Bool,
highlightedGroupName: String?,
+ bottomContentPadding: CGFloat,
contentRevision: Int,
scrollTargetID: String?,
scrollRequestToken: Int,
@@ -150,6 +154,7 @@
self.externalBubbleDisabled = bubbleDisabled
self.showUncommonAppBubbles = showUncommonAppBubbles
self.highlightedGroupName = highlightedGroupName
+ self.bottomContentPadding = max(0, bottomContentPadding)
self.contentRevision = contentRevision
self.scrollTargetID = scrollTargetID
self.scrollRequestToken = scrollRequestToken
@@ -169,6 +174,7 @@
iconSize: iconSize,
showNames: showNames,
showUncommonAppBubbles: showUncommonAppBubbles,
+ bottomContentPadding: self.bottomContentPadding,
contentRevision: contentRevision
)
if nextSignature != contentSignature {
@@ -324,6 +330,7 @@
iconSize: CGFloat,
showNames: Bool,
showUncommonAppBubbles: Bool,
+ bottomContentPadding: CGFloat,
contentRevision: Int
) -> String {
let colorPart = tagColors
@@ -335,6 +342,7 @@
"\(Int(iconSize.rounded()))",
showNames ? "names" : "nonames",
showUncommonAppBubbles ? "uncommon" : "allbubbles",
+ "bottom=\(Int(bottomContentPadding.rounded()))",
colorPart,
"rev=\(contentRevision)"
].joined(separator: "|")
@@ -567,7 +575,8 @@
groups: visibleGroups,
contentWidth: collectionView.bounds.width,
iconSize: iconSize,
- displayMode: coordinator?.displayMode ?? AppDefaults.displayMode
+ displayMode: coordinator?.displayMode ?? AppDefaults.displayMode,
+ bottomContentPadding: coordinator?.bottomContentPadding ?? 0
)
var nextAttributes: [IndexPath: NSCollectionViewLayoutAttributes] = [:]
@@ -613,22 +622,39 @@
groups: [TagGroup],
contentWidth: CGFloat,
iconSize: CGFloat,
- displayMode: String
+ displayMode: String,
+ bottomContentPadding: CGFloat
) -> LayoutPlan {
switch AppGridCollectionDisplayMode(displayMode) {
case .flat:
- return makeFlatPlan(groups: groups, contentWidth: contentWidth, iconSize: iconSize)
+ return makeFlatPlan(
+ groups: groups,
+ contentWidth: contentWidth,
+ iconSize: iconSize,
+ bottomContentPadding: bottomContentPadding
+ )
case .masonryContainer:
- return makeMasonryPlan(groups: groups, contentWidth: contentWidth, iconSize: iconSize)
+ return makeMasonryPlan(
+ groups: groups,
+ contentWidth: contentWidth,
+ iconSize: iconSize,
+ bottomContentPadding: bottomContentPadding
+ )
case .gridContainer:
- return makeGridPlan(groups: groups, contentWidth: contentWidth, iconSize: iconSize)
+ return makeGridPlan(
+ groups: groups,
+ contentWidth: contentWidth,
+ iconSize: iconSize,
+ bottomContentPadding: bottomContentPadding
+ )
}
}
private static func makeGridPlan(
groups: [TagGroup],
contentWidth: CGFloat,
- iconSize: CGFloat
+ iconSize: CGFloat,
+ bottomContentPadding: CGFloat
) -> LayoutPlan {
let boundedContentWidth = max(1, contentWidth)
let outerPadding = AppGridCollectionMetrics.outerPadding
@@ -658,7 +684,8 @@
y += height + gap
}
- let contentHeight = rows.isEmpty ? outerPadding * 2 : y - gap + outerPadding
+ let contentHeight = (rows.isEmpty ? outerPadding * 2 : y - gap + outerPadding)
+ + max(0, bottomContentPadding)
return LayoutPlan(
items: items,
contentSize: NSSize(width: boundedContentWidth, height: max(1, contentHeight))
@@ -668,7 +695,8 @@
private static func makeFlatPlan(
groups: [TagGroup],
contentWidth: CGFloat,
- iconSize: CGFloat
+ iconSize: CGFloat,
+ bottomContentPadding: CGFloat
) -> LayoutPlan {
let boundedContentWidth = max(1, contentWidth)
let outerPadding = AppGridCollectionMetrics.outerPadding
@@ -691,7 +719,8 @@
y += height + AppGridCollectionMetrics.flatGroupGap
}
- let contentHeight = groups.isEmpty ? outerPadding * 2 : y - AppGridCollectionMetrics.flatGroupGap + outerPadding
+ let contentHeight = (groups.isEmpty ? outerPadding * 2 : y - AppGridCollectionMetrics.flatGroupGap + outerPadding)
+ + max(0, bottomContentPadding)
return LayoutPlan(
items: items,
contentSize: NSSize(width: boundedContentWidth, height: max(1, contentHeight))
@@ -701,7 +730,8 @@
private static func makeMasonryPlan(
groups: [TagGroup],
contentWidth: CGFloat,
- iconSize: CGFloat
+ iconSize: CGFloat,
+ bottomContentPadding: CGFloat
) -> LayoutPlan {
let boundedContentWidth = max(1, contentWidth)
let outerPadding = AppGridCollectionMetrics.outerPadding
@@ -731,7 +761,8 @@
}
let tallest = columnHeights.max() ?? outerPadding
- let contentHeight = groups.isEmpty ? outerPadding * 2 : tallest - gap + outerPadding
+ let contentHeight = (groups.isEmpty ? outerPadding * 2 : tallest - gap + outerPadding)
+ + max(0, bottomContentPadding)
return LayoutPlan(
items: items,
contentSize: NSSize(width: boundedContentWidth, height: max(1, contentHeight))
diff --git a/src/Apptag/ContentView.swift b/src/Apptag/ContentView.swift
index 1afa3e3..122addf 100644
--- a/src/Apptag/ContentView.swift
+++ b/src/Apptag/ContentView.swift
@@ -340,6 +340,120 @@
let tagName: String
}
+private struct AppGridUsageTip: Identifiable {
+ let id: Int
+ let titleKey: String
+ let detailKey: String
+}
+
+private struct AppGridUsageTipsBar: View {
+ static let reservedHeight: CGFloat = 64
+
+ let tips: [AppGridUsageTip]
+ @Binding var selectedIndex: Int
+ let dragModeActive: Bool
+
+ @State private var textHovered = false
+
+ private var safeIndex: Int {
+ guard tips.indices.contains(selectedIndex) else { return 0 }
+ return selectedIndex
+ }
+
+ private var currentTip: AppGridUsageTip? {
+ guard !tips.isEmpty else { return nil }
+ return tips[safeIndex]
+ }
+
+ var body: some View {
+ if let tip = currentTip {
+ HStack(spacing: 0) {
+ Text(tr(tip.titleKey))
+ .font(.system(size: 14, weight: .semibold))
+ .foregroundStyle(Color.primary)
+ .lineLimit(1)
+ .minimumScaleFactor(0.82)
+ .padding(.horizontal, 14)
+ .frame(width: 174, height: 42, alignment: .leading)
+ .background(Color(nsColor: .controlBackgroundColor).opacity(0.96))
+
+ tipDetailText(tip)
+ .frame(height: 42)
+ .frame(maxWidth: .infinity, alignment: .leading)
+ .background(Color.black.opacity(0.88))
+
+ tipsControls
+ .frame(width: 86, height: 42)
+ .background(Color.black.opacity(0.88))
+ }
+ .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
+ .overlay(
+ RoundedRectangle(cornerRadius: 8, style: .continuous)
+ .stroke(Color.primary.opacity(0.18), lineWidth: 1)
+ )
+ .shadow(color: .black.opacity(0.20), radius: 14, y: 7)
+ .frame(maxWidth: 980)
+ .padding(.horizontal, 18)
+ .padding(.bottom, 12)
+ .opacity(dragModeActive ? 0.72 : 1.0)
+ .allowsHitTesting(!dragModeActive)
+ .accessibilityElement(children: .combine)
+ .accessibilityLabel("\(tr(tip.titleKey)) \(tr(tip.detailKey))")
+ }
+ }
+
+ private func tipDetailText(_ tip: AppGridUsageTip) -> some View {
+ ScrollView(.horizontal, showsIndicators: textHovered) {
+ Text(tr(tip.detailKey))
+ .font(.system(size: 15, weight: .medium))
+ .foregroundStyle(Color.white.opacity(0.96))
+ .lineLimit(1)
+ .fixedSize(horizontal: true, vertical: false)
+ .padding(.horizontal, 14)
+ .frame(minHeight: 42, alignment: .center)
+ }
+ .onHover { textHovered = $0 }
+ .help(tr(tip.detailKey))
+ }
+
+ private var tipsControls: some View {
+ VStack(spacing: 4) {
+ HStack(spacing: 8) {
+ usageTipNavigationButton(systemImage: "chevron.left", labelKey: "usageTips.previous") {
+ selectedIndex = (safeIndex - 1 + tips.count) % tips.count
+ }
+ usageTipNavigationButton(systemImage: "chevron.right", labelKey: "usageTips.next") {
+ selectedIndex = (safeIndex + 1) % tips.count
+ }
+ }
+
+ HStack(spacing: 3) {
+ ForEach(tips.indices, id: \.self) { index in
+ Circle()
+ .fill(index == safeIndex ? Color.accentColor : Color.white.opacity(0.58))
+ .frame(width: 4, height: 4)
+ }
+ }
+ }
+ }
+
+ private func usageTipNavigationButton(
+ systemImage: String,
+ labelKey: String,
+ action: @escaping () -> Void
+ ) -> some View {
+ Button(action: action) {
+ Image(systemName: systemImage)
+ .font(.system(size: 15, weight: .bold))
+ .foregroundStyle(Color.white.opacity(0.96))
+ .frame(width: 24, height: 22)
+ .contentShape(Rectangle())
+ }
+ .buttonStyle(.plain)
+ .accessibilityLabel(tr(labelKey))
+ }
+}
+
struct ContentView: View {
let hideOverlay: () -> Void
private let initialQuickSearchSource: String?
@@ -353,6 +467,7 @@
@State private var groupLayoutVersion = 0
@State private var appGridScrollTargetID: String? = nil
@State private var appGridScrollRequestToken = 0
+ @State private var selectedUsageTipIndex = 0
// Edit mode
@State private var editPhase: EditPhase = .none
@@ -414,6 +529,7 @@
@AppStorage("displayMode") private var displayMode = AppDefaults.displayMode
@AppStorage("hideAppNames") private var hideAppNames = AppDefaults.hideAppNames
@AppStorage("showUncommonAppBubbles") private var showUncommonAppBubbles = AppDefaults.showUncommonAppBubbles
+ @AppStorage("hideUsageTips") private var hideUsageTips = AppDefaults.hideUsageTips
@AppStorage("useAppKitTagNavigation") private var useAppKitTagNavigation = AppDefaults.useAppKitTagNavigation
@AppStorage("skipTagRemovalDropConfirm") private var skipTagRemovalDropConfirm = false
@AppStorage("skipUncategorizedDropConfirm") private var skipUncategorizedDropConfirm = false
@@ -448,6 +564,23 @@
private var isColorlessContainerMode: Bool {
displayMode == "container" || displayMode == "gridContainer"
+ }
+
+ private var shouldShowUsageTips: Bool {
+ !hideUsageTips && !allApps.isEmpty && !quickSearchOnlySession
+ }
+
+ private var appGridUsageTips: [AppGridUsageTip] {
+ [
+ AppGridUsageTip(id: 1, titleKey: "usageTips.tip1.title", detailKey: "usageTips.tip1.detail"),
+ AppGridUsageTip(id: 2, titleKey: "usageTips.tip2.title", detailKey: "usageTips.tip2.detail"),
+ AppGridUsageTip(id: 3, titleKey: "usageTips.tip3.title", detailKey: "usageTips.tip3.detail"),
+ AppGridUsageTip(id: 4, titleKey: "usageTips.tip4.title", detailKey: "usageTips.tip4.detail"),
+ AppGridUsageTip(id: 5, titleKey: "usageTips.tip5.title", detailKey: "usageTips.tip5.detail"),
+ AppGridUsageTip(id: 6, titleKey: "usageTips.tip6.title", detailKey: "usageTips.tip6.detail"),
+ AppGridUsageTip(id: 7, titleKey: "usageTips.tip7.title", detailKey: "usageTips.tip7.detail"),
+ AppGridUsageTip(id: 8, titleKey: "usageTips.tip8.title", detailKey: "usageTips.tip8.detail"),
+ ]
}
private var shouldRenderAppGridBehindQuickSearch: Bool {
@@ -1112,38 +1245,50 @@
ProgressView().scaleEffect(0.8)
Spacer()
} else {
- AppGridCollectionView(
- groups: displayGroups,
- tagColors: tagColors,
- displayMode: displayMode,
- iconSize: iconSize,
- showNames: !hideAppNames,
- bubbleDisabled: appBubbleDisabled,
- showUncommonAppBubbles: showUncommonAppBubbles,
- highlightedGroupName: appGridHighlightedGroupName,
- contentRevision: groupLayoutVersion,
- scrollTargetID: appGridScrollTargetID,
- scrollRequestToken: appGridScrollRequestToken,
- onSelectApp: { app in openApp(app) },
- onBubbleHover: handleBubbleHover,
- onEditNote: beginEditingBubbleNote,
- onDropApp: { path, source, target, copy in
- dropApp(path: path, sourceTag: source, targetTag: target, copy: copy)
- },
- onDropOutsideGroup: { path, source, copy in
- dropAppOutsideGroup(path: path, sourceTag: source, copy: copy)
- },
- onReorderApps: { containerID, orderedPaths in
- reorderApps(inContainer: containerID, orderedPaths: orderedPaths)
- },
- onGroupActivate: { groupName in
- if isColorlessContainerMode {
- toggleColorlessFill(groupName)
- }
- },
- onScrollActivity: handleAppGridScrollActivity,
- onDragModeChange: { setAppDragMode($0) }
- )
+ ZStack(alignment: .bottom) {
+ AppGridCollectionView(
+ groups: displayGroups,
+ tagColors: tagColors,
+ displayMode: displayMode,
+ iconSize: iconSize,
+ showNames: !hideAppNames,
+ bubbleDisabled: appBubbleDisabled,
+ showUncommonAppBubbles: showUncommonAppBubbles,
+ highlightedGroupName: appGridHighlightedGroupName,
+ bottomContentPadding: shouldShowUsageTips ? AppGridUsageTipsBar.reservedHeight : 0,
+ contentRevision: groupLayoutVersion,
+ scrollTargetID: appGridScrollTargetID,
+ scrollRequestToken: appGridScrollRequestToken,
+ onSelectApp: { app in openApp(app) },
+ onBubbleHover: handleBubbleHover,
+ onEditNote: beginEditingBubbleNote,
+ onDropApp: { path, source, target, copy in
+ dropApp(path: path, sourceTag: source, targetTag: target, copy: copy)
+ },
+ onDropOutsideGroup: { path, source, copy in
+ dropAppOutsideGroup(path: path, sourceTag: source, copy: copy)
+ },
+ onReorderApps: { containerID, orderedPaths in
+ reorderApps(inContainer: containerID, orderedPaths: orderedPaths)
+ },
+ onGroupActivate: { groupName in
+ if isColorlessContainerMode {
+ toggleColorlessFill(groupName)
+ }
+ },
+ onScrollActivity: handleAppGridScrollActivity,
+ onDragModeChange: { setAppDragMode($0) }
+ )
+
+ if shouldShowUsageTips {
+ AppGridUsageTipsBar(
+ tips: appGridUsageTips,
+ selectedIndex: $selectedUsageTipIndex,
+ dragModeActive: appGridInteraction.appDragModeActive
+ )
+ .zIndex(3)
+ }
+ }
}
}
}
diff --git a/src/Apptag/Localization/ar-Najdi.json b/src/Apptag/Localization/ar-Najdi.json
index dbbdf8c..db1b761 100644
--- a/src/Apptag/Localization/ar-Najdi.json
+++ b/src/Apptag/Localization/ar-Najdi.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "تلقائي",
- "help.downloadPDF": "تنزيل ملف المساعدة PDF"
+ "help.downloadPDF": "تنزيل ملف المساعدة PDF",
+ "settings.hideUsageTips": "إخفاء تلميحات الاستخدام",
+ "settings.hideUsageTipsDesc": "إذا شغّلته، تختفي التلميحات العايمة أسفل شبكة التطبيقات.",
+ "usageTips.previous": "التلميحة السابقة",
+ "usageTips.next": "التلميحة التالية",
+ "usageTips.tip1.title": "تلميحة 1 - إضافة وسوم:",
+ "usageTips.tip1.detail": "افتح الإعدادات > الوسوم لتعديل الوسوم.",
+ "usageTips.tip2.title": "تلميحة 2 - وسم التطبيقات:",
+ "usageTips.tip2.detail": "اضغط مطوّل على أيقونة التطبيق عشان تبدأ السحب > اسحبها على وسم لتعيينه.",
+ "usageTips.tip3.title": "تلميحة 3 - نقل التطبيقات:",
+ "usageTips.tip3.detail": "اضغط مطوّل على أيقونة التطبيق عشان تبدأ السحب > اسحبها مباشرة للحاوية عشان تنقلها.",
+ "usageTips.tip4.title": "تلميحة 4 - نسخ التطبيقات:",
+ "usageTips.tip4.detail": "اضغط مطوّل على أيقونة التطبيق عشان تبدأ السحب > اضغط Alt/Option واسحبها للحاوية عشان تنسخها.",
+ "usageTips.tip5.title": "تلميحة 5 - إزالة الوسوم:",
+ "usageTips.tip5.detail": "اضغط مطوّل على أيقونة التطبيق عشان تبدأ السحب > اسحبها للمساحة الفاضية بين الحاويات.",
+ "usageTips.tip6.title": "تلميحة 6 - ترتيب الوسوم:",
+ "usageTips.tip6.detail": "اضغط مطوّل على وسم عشان تبدأ السحب > انقله للمكان المطلوب ثم اتركه.",
+ "usageTips.tip7.title": "تلميحة 7 - ترتيب التطبيقات:",
+ "usageTips.tip7.detail": "اضغط مطوّل على أيقونة التطبيق عشان تبدأ السحب > انقلها للمكان المطلوب داخل الحاوية ثم اتركها.",
+ "usageTips.tip8.title": "تلميحة 8 - تعديل الملاحظات:",
+ "usageTips.tip8.detail": "انقر يمين على التطبيق > اكتب ملاحظة."
}
diff --git a/src/Apptag/Localization/ar.json b/src/Apptag/Localization/ar.json
index 65bb0d5..81c6638 100644
--- a/src/Apptag/Localization/ar.json
+++ b/src/Apptag/Localization/ar.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "تلقائي",
- "help.downloadPDF": "تنزيل ملف المساعدة PDF"
+ "help.downloadPDF": "تنزيل ملف المساعدة PDF",
+ "settings.hideUsageTips": "إخفاء نصائح الاستخدام",
+ "settings.hideUsageTipsDesc": "عند التفعيل، يتم إخفاء النصائح العائمة أسفل شبكة التطبيقات.",
+ "usageTips.previous": "النصيحة السابقة",
+ "usageTips.next": "النصيحة التالية",
+ "usageTips.tip1.title": "النصيحة 1 - إضافة وسوم:",
+ "usageTips.tip1.detail": "افتح الإعدادات > الوسوم لتحرير الوسوم.",
+ "usageTips.tip2.title": "النصيحة 2 - وسم التطبيقات:",
+ "usageTips.tip2.detail": "اضغط مطولاً على أيقونة تطبيق لبدء السحب > اسحبها إلى وسم لتعيينه.",
+ "usageTips.tip3.title": "النصيحة 3 - نقل التطبيقات:",
+ "usageTips.tip3.detail": "اضغط مطولاً على أيقونة تطبيق لبدء السحب > اسحبها مباشرة إلى حاوية لنقلها.",
+ "usageTips.tip4.title": "النصيحة 4 - نسخ التطبيقات:",
+ "usageTips.tip4.detail": "اضغط مطولاً على أيقونة تطبيق لبدء السحب > اضغط Alt/Option واسحبها إلى حاوية لنسخها.",
+ "usageTips.tip5.title": "النصيحة 5 - إزالة الوسوم:",
+ "usageTips.tip5.detail": "اضغط مطولاً على أيقونة تطبيق لبدء السحب > اسحبها إلى المساحة الفارغة بين الحاويات.",
+ "usageTips.tip6.title": "النصيحة 6 - ترتيب الوسوم:",
+ "usageTips.tip6.detail": "اضغط مطولاً على وسم لبدء السحب > انقله إلى الموضع المطلوب ثم اتركه.",
+ "usageTips.tip7.title": "النصيحة 7 - ترتيب التطبيقات:",
+ "usageTips.tip7.detail": "اضغط مطولاً على أيقونة تطبيق لبدء السحب > انقلها إلى الموضع المطلوب داخل الحاوية ثم اتركها.",
+ "usageTips.tip8.title": "النصيحة 8 - تحرير الملاحظات:",
+ "usageTips.tip8.detail": "انقر بزر الماوس الأيمن على تطبيق > أدخل ملاحظة."
}
diff --git a/src/Apptag/Localization/cs.json b/src/Apptag/Localization/cs.json
index 3ab3e79..1c8c9ec 100644
--- a/src/Apptag/Localization/cs.json
+++ b/src/Apptag/Localization/cs.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automaticky",
- "help.downloadPDF": "Stáhnout PDF nápovědy"
+ "help.downloadPDF": "Stáhnout PDF nápovědy",
+ "settings.hideUsageTips": "Skrýt tipy k používání",
+ "settings.hideUsageTipsDesc": "Když je zapnuto, plovoucí tipy dole v mřížce aplikací se skryjí.",
+ "usageTips.previous": "Předchozí tip",
+ "usageTips.next": "Další tip",
+ "usageTips.tip1.title": "Tip 1 - Přidat tagy:",
+ "usageTips.tip1.detail": "Otevřete Nastavení > Tagy a upravte tagy.",
+ "usageTips.tip2.title": "Tip 2 - Označit aplikace:",
+ "usageTips.tip2.detail": "Podržte ikonu aplikace a začněte ji táhnout > přetáhněte ji na tag pro přiřazení.",
+ "usageTips.tip3.title": "Tip 3 - Přesunout aplikace:",
+ "usageTips.tip3.detail": "Podržte ikonu aplikace a začněte ji táhnout > přetáhněte ji přímo do kontejneru pro přesun.",
+ "usageTips.tip4.title": "Tip 4 - Kopírovat aplikace:",
+ "usageTips.tip4.detail": "Podržte ikonu aplikace a začněte ji táhnout > držte Alt/Option a přetáhněte ji do kontejneru pro kopírování.",
+ "usageTips.tip5.title": "Tip 5 - Odebrat tagy:",
+ "usageTips.tip5.detail": "Podržte ikonu aplikace a začněte ji táhnout > přetáhněte ji do prázdného místa mezi kontejnery.",
+ "usageTips.tip6.title": "Tip 6 - Seřadit tagy:",
+ "usageTips.tip6.detail": "Podržte tag a začněte jej táhnout > přesuňte jej na cílovou pozici a pusťte.",
+ "usageTips.tip7.title": "Tip 7 - Seřadit aplikace:",
+ "usageTips.tip7.detail": "Podržte ikonu aplikace a začněte ji táhnout > přesuňte ji na cílovou pozici v kontejneru a pusťte.",
+ "usageTips.tip8.title": "Tip 8 - Upravit poznámky:",
+ "usageTips.tip8.detail": "Klikněte na aplikaci pravým tlačítkem > zadejte poznámku."
}
diff --git a/src/Apptag/Localization/da.json b/src/Apptag/Localization/da.json
index 3681ff7..12b83e7 100644
--- a/src/Apptag/Localization/da.json
+++ b/src/Apptag/Localization/da.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatisk",
- "help.downloadPDF": "Download hjælp-PDF"
+ "help.downloadPDF": "Download hjælp-PDF",
+ "settings.hideUsageTips": "Skjul brugstips",
+ "settings.hideUsageTipsDesc": "Når det er slået til, skjules de flydende tips nederst i appgitteret.",
+ "usageTips.previous": "Forrige tip",
+ "usageTips.next": "Næste tip",
+ "usageTips.tip1.title": "Tip 1 - Tilføj tags:",
+ "usageTips.tip1.detail": "Åbn Indstillinger > Tags for at redigere tags.",
+ "usageTips.tip2.title": "Tip 2 - Tag apps:",
+ "usageTips.tip2.detail": "Hold et appikon nede for at trække > slip det på et tag for at tildele tagget.",
+ "usageTips.tip3.title": "Tip 3 - Flyt apps:",
+ "usageTips.tip3.detail": "Hold et appikon nede for at trække > slip det direkte i en container for at flytte det.",
+ "usageTips.tip4.title": "Tip 4 - Kopiér apps:",
+ "usageTips.tip4.detail": "Hold et appikon nede for at trække > hold Alt/Option nede og slip det i en container for at kopiere det.",
+ "usageTips.tip5.title": "Tip 5 - Fjern tags:",
+ "usageTips.tip5.detail": "Hold et appikon nede for at trække > slip det i det tomme område mellem containere.",
+ "usageTips.tip6.title": "Tip 6 - Sortér tags:",
+ "usageTips.tip6.detail": "Hold et tag nede for at trække > flyt det til målpositionen og slip.",
+ "usageTips.tip7.title": "Tip 7 - Sortér apps:",
+ "usageTips.tip7.detail": "Hold et appikon nede for at trække > flyt det til målpositionen i containeren og slip.",
+ "usageTips.tip8.title": "Tip 8 - Rediger noter:",
+ "usageTips.tip8.detail": "Højreklik på en app > indtast en note."
}
diff --git a/src/Apptag/Localization/de.json b/src/Apptag/Localization/de.json
index d51b522..bcbb67e 100644
--- a/src/Apptag/Localization/de.json
+++ b/src/Apptag/Localization/de.json
@@ -207,5 +207,25 @@
"help.copyLink": "Link zum Hilfe-PDF kopieren",
"help.currentLanguage": "Öffnet das Online-PDF für die aktuelle App-Sprache.",
"settings.language.auto": "Automatisch",
- "help.downloadPDF": "Hilfe-PDF herunterladen"
+ "help.downloadPDF": "Hilfe-PDF herunterladen",
+ "settings.hideUsageTips": "Nutzungstipps ausblenden",
+ "settings.hideUsageTipsDesc": "Wenn aktiviert, werden die schwebenden Tipps unten im App-Raster ausgeblendet.",
+ "usageTips.previous": "Vorheriger Tipp",
+ "usageTips.next": "Nächster Tipp",
+ "usageTips.tip1.title": "Tipp 1 - Tags hinzufügen:",
+ "usageTips.tip1.detail": "Öffnen Sie Einstellungen > Tags, um Tags zu bearbeiten.",
+ "usageTips.tip2.title": "Tipp 2 - Apps taggen:",
+ "usageTips.tip2.detail": "App-Symbol gedrückt halten, um es zu ziehen > auf einen Tag ziehen, um ihn zuzuweisen.",
+ "usageTips.tip3.title": "Tipp 3 - Apps verschieben:",
+ "usageTips.tip3.detail": "App-Symbol gedrückt halten, um es zu ziehen > direkt in einen Container ziehen, um es zu verschieben.",
+ "usageTips.tip4.title": "Tipp 4 - Apps kopieren:",
+ "usageTips.tip4.detail": "App-Symbol gedrückt halten, um es zu ziehen > Alt/Option gedrückt halten und in einen Container ziehen, um es zu kopieren.",
+ "usageTips.tip5.title": "Tipp 5 - Tags entfernen:",
+ "usageTips.tip5.detail": "App-Symbol gedrückt halten, um es zu ziehen > in den leeren Bereich zwischen Containern ziehen.",
+ "usageTips.tip6.title": "Tipp 6 - Tags sortieren:",
+ "usageTips.tip6.detail": "Tag gedrückt halten, um ihn zu ziehen > an die Zielposition ziehen und loslassen.",
+ "usageTips.tip7.title": "Tipp 7 - Apps sortieren:",
+ "usageTips.tip7.detail": "App-Symbol gedrückt halten, um es zu ziehen > an die Zielposition im Container ziehen und loslassen.",
+ "usageTips.tip8.title": "Tipp 8 - Notizen bearbeiten:",
+ "usageTips.tip8.detail": "Rechtsklick auf eine App > Notiz eingeben."
}
diff --git a/src/Apptag/Localization/en.json b/src/Apptag/Localization/en.json
index b2a05a3..0dbcd4a 100644
--- a/src/Apptag/Localization/en.json
+++ b/src/Apptag/Localization/en.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatic",
- "help.downloadPDF": "Download Help PDF"
+ "help.downloadPDF": "Download Help PDF",
+ "settings.hideUsageTips": "Hide usage tips",
+ "settings.hideUsageTipsDesc": "When enabled, the floating tips at the bottom of the app grid are hidden.",
+ "usageTips.previous": "Previous tip",
+ "usageTips.next": "Next tip",
+ "usageTips.tip1.title": "Tip 1 - Add tags:",
+ "usageTips.tip1.detail": "Open Settings > Tags to edit tags.",
+ "usageTips.tip2.title": "Tip 2 - Tag apps:",
+ "usageTips.tip2.detail": "Long-press an app icon to start dragging > drag it onto a tag to assign that tag.",
+ "usageTips.tip3.title": "Tip 3 - Move apps:",
+ "usageTips.tip3.detail": "Long-press an app icon to start dragging > drag it directly onto a container to move it.",
+ "usageTips.tip4.title": "Tip 4 - Copy apps:",
+ "usageTips.tip4.detail": "Long-press an app icon to start dragging > hold Alt/Option and drag it onto a container to copy it.",
+ "usageTips.tip5.title": "Tip 5 - Remove tags:",
+ "usageTips.tip5.detail": "Long-press an app icon to start dragging > drag it to the blank area between containers.",
+ "usageTips.tip6.title": "Tip 6 - Reorder tags:",
+ "usageTips.tip6.detail": "Long-press a tag to start dragging > drag it to the target position and release.",
+ "usageTips.tip7.title": "Tip 7 - Reorder apps:",
+ "usageTips.tip7.detail": "Long-press an app icon to start dragging > drag it to the target position inside the container and release.",
+ "usageTips.tip8.title": "Tip 8 - Edit notes:",
+ "usageTips.tip8.detail": "Right-click an app > enter a note."
}
diff --git a/src/Apptag/Localization/es.json b/src/Apptag/Localization/es.json
index e7e385e..4991f8a 100644
--- a/src/Apptag/Localization/es.json
+++ b/src/Apptag/Localization/es.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copiar enlace del PDF de ayuda",
"help.currentLanguage": "Abre el PDF en línea para el idioma actual de la app.",
"settings.language.auto": "Automático",
- "help.downloadPDF": "Descargar PDF de ayuda"
+ "help.downloadPDF": "Descargar PDF de ayuda",
+ "settings.hideUsageTips": "Ocultar consejos de uso",
+ "settings.hideUsageTipsDesc": "Si está activado, se ocultan los consejos flotantes de la parte inferior de la cuadrícula de apps.",
+ "usageTips.previous": "Consejo anterior",
+ "usageTips.next": "Consejo siguiente",
+ "usageTips.tip1.title": "Consejo 1 - Añadir etiquetas:",
+ "usageTips.tip1.detail": "Abra Ajustes > Etiquetas para editar etiquetas.",
+ "usageTips.tip2.title": "Consejo 2 - Etiquetar apps:",
+ "usageTips.tip2.detail": "Mantenga pulsado un icono para arrastrarlo > suéltelo sobre una etiqueta para asignarla.",
+ "usageTips.tip3.title": "Consejo 3 - Mover apps:",
+ "usageTips.tip3.detail": "Mantenga pulsado un icono para arrastrarlo > suéltelo directamente en un contenedor para moverlo.",
+ "usageTips.tip4.title": "Consejo 4 - Copiar apps:",
+ "usageTips.tip4.detail": "Mantenga pulsado un icono para arrastrarlo > mantenga Alt/Opción y suéltelo en un contenedor para copiarlo.",
+ "usageTips.tip5.title": "Consejo 5 - Quitar etiquetas:",
+ "usageTips.tip5.detail": "Mantenga pulsado un icono para arrastrarlo > suéltelo en el espacio vacío entre contenedores.",
+ "usageTips.tip6.title": "Consejo 6 - Ordenar etiquetas:",
+ "usageTips.tip6.detail": "Mantenga pulsada una etiqueta para arrastrarla > muévala a la posición deseada y suéltela.",
+ "usageTips.tip7.title": "Consejo 7 - Ordenar apps:",
+ "usageTips.tip7.detail": "Mantenga pulsado un icono para arrastrarlo > muévalo a la posición deseada dentro del contenedor y suéltelo.",
+ "usageTips.tip8.title": "Consejo 8 - Editar notas:",
+ "usageTips.tip8.detail": "Haga clic derecho en una app > escriba una nota."
}
diff --git a/src/Apptag/Localization/fr.json b/src/Apptag/Localization/fr.json
index 432ca72..b77423a 100644
--- a/src/Apptag/Localization/fr.json
+++ b/src/Apptag/Localization/fr.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copier le lien du PDF d’aide",
"help.currentLanguage": "Ouvre le PDF en ligne correspondant à la langue actuelle de l’app.",
"settings.language.auto": "Automatique",
- "help.downloadPDF": "Télécharger le PDF d’aide"
+ "help.downloadPDF": "Télécharger le PDF d’aide",
+ "settings.hideUsageTips": "Masquer les astuces",
+ "settings.hideUsageTipsDesc": "Si cette option est activée, les astuces flottantes en bas de la grille des apps sont masquées.",
+ "usageTips.previous": "Astuce précédente",
+ "usageTips.next": "Astuce suivante",
+ "usageTips.tip1.title": "Astuce 1 - Ajouter des tags :",
+ "usageTips.tip1.detail": "Ouvrez Réglages > Tags pour modifier les tags.",
+ "usageTips.tip2.title": "Astuce 2 - Taguer des apps :",
+ "usageTips.tip2.detail": "Appuyez longuement sur une icône pour la faire glisser > déposez-la sur un tag pour l’assigner.",
+ "usageTips.tip3.title": "Astuce 3 - Déplacer des apps :",
+ "usageTips.tip3.detail": "Appuyez longuement sur une icône pour la faire glisser > déposez-la directement dans un conteneur pour la déplacer.",
+ "usageTips.tip4.title": "Astuce 4 - Copier des apps :",
+ "usageTips.tip4.detail": "Appuyez longuement sur une icône pour la faire glisser > maintenez Alt/Option et déposez-la dans un conteneur pour la copier.",
+ "usageTips.tip5.title": "Astuce 5 - Retirer des tags :",
+ "usageTips.tip5.detail": "Appuyez longuement sur une icône pour la faire glisser > déposez-la dans l’espace vide entre les conteneurs.",
+ "usageTips.tip6.title": "Astuce 6 - Trier les tags :",
+ "usageTips.tip6.detail": "Appuyez longuement sur un tag pour le faire glisser > déposez-le à la position voulue.",
+ "usageTips.tip7.title": "Astuce 7 - Trier les apps :",
+ "usageTips.tip7.detail": "Appuyez longuement sur une icône pour la faire glisser > déposez-la à la position voulue dans le conteneur.",
+ "usageTips.tip8.title": "Astuce 8 - Modifier les notes :",
+ "usageTips.tip8.detail": "Cliquez avec le bouton droit sur une app > saisissez une note."
}
diff --git a/src/Apptag/Localization/id.json b/src/Apptag/Localization/id.json
index 3288d8d..7bd0fed 100644
--- a/src/Apptag/Localization/id.json
+++ b/src/Apptag/Localization/id.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Otomatis",
- "help.downloadPDF": "Unduh PDF bantuan"
+ "help.downloadPDF": "Unduh PDF bantuan",
+ "settings.hideUsageTips": "Sembunyikan tips penggunaan",
+ "settings.hideUsageTipsDesc": "Jika aktif, tips mengambang di bagian bawah grid app akan disembunyikan.",
+ "usageTips.previous": "Tips sebelumnya",
+ "usageTips.next": "Tips berikutnya",
+ "usageTips.tip1.title": "Tips 1 - Tambah tag:",
+ "usageTips.tip1.detail": "Buka Pengaturan > Tag untuk mengedit tag.",
+ "usageTips.tip2.title": "Tips 2 - Beri tag app:",
+ "usageTips.tip2.detail": "Tekan lama ikon app untuk mulai menyeret > jatuhkan ke tag untuk menetapkan tag itu.",
+ "usageTips.tip3.title": "Tips 3 - Pindahkan app:",
+ "usageTips.tip3.detail": "Tekan lama ikon app untuk mulai menyeret > jatuhkan langsung ke kontainer untuk memindahkannya.",
+ "usageTips.tip4.title": "Tips 4 - Salin app:",
+ "usageTips.tip4.detail": "Tekan lama ikon app untuk mulai menyeret > tahan Alt/Option dan jatuhkan ke kontainer untuk menyalinnya.",
+ "usageTips.tip5.title": "Tips 5 - Hapus tag:",
+ "usageTips.tip5.detail": "Tekan lama ikon app untuk mulai menyeret > jatuhkan ke area kosong di antara kontainer.",
+ "usageTips.tip6.title": "Tips 6 - Urutkan tag:",
+ "usageTips.tip6.detail": "Tekan lama tag untuk mulai menyeret > pindahkan ke posisi target lalu lepaskan.",
+ "usageTips.tip7.title": "Tips 7 - Urutkan app:",
+ "usageTips.tip7.detail": "Tekan lama ikon app untuk mulai menyeret > pindahkan ke posisi target di dalam kontainer lalu lepaskan.",
+ "usageTips.tip8.title": "Tips 8 - Edit catatan:",
+ "usageTips.tip8.detail": "Klik kanan app > masukkan catatan."
}
diff --git a/src/Apptag/Localization/it.json b/src/Apptag/Localization/it.json
index 249a0a8..be035df 100644
--- a/src/Apptag/Localization/it.json
+++ b/src/Apptag/Localization/it.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copia link del PDF di aiuto",
"help.currentLanguage": "Apre il PDF online per la lingua attuale dell’app.",
"settings.language.auto": "Automatico",
- "help.downloadPDF": "Scarica PDF di aiuto"
+ "help.downloadPDF": "Scarica PDF di aiuto",
+ "settings.hideUsageTips": "Nascondi suggerimenti",
+ "settings.hideUsageTipsDesc": "Se attivo, i suggerimenti flottanti in basso nella griglia delle app vengono nascosti.",
+ "usageTips.previous": "Suggerimento precedente",
+ "usageTips.next": "Suggerimento successivo",
+ "usageTips.tip1.title": "Suggerimento 1 - Aggiungere tag:",
+ "usageTips.tip1.detail": "Apri Impostazioni > Tag per modificare i tag.",
+ "usageTips.tip2.title": "Suggerimento 2 - Taggare app:",
+ "usageTips.tip2.detail": "Tieni premuta un’icona app per trascinarla > rilasciala su un tag per assegnarlo.",
+ "usageTips.tip3.title": "Suggerimento 3 - Spostare app:",
+ "usageTips.tip3.detail": "Tieni premuta un’icona app per trascinarla > rilasciala direttamente in un contenitore per spostarla.",
+ "usageTips.tip4.title": "Suggerimento 4 - Copiare app:",
+ "usageTips.tip4.detail": "Tieni premuta un’icona app per trascinarla > tieni premuto Alt/Opzione e rilasciala in un contenitore per copiarla.",
+ "usageTips.tip5.title": "Suggerimento 5 - Rimuovere tag:",
+ "usageTips.tip5.detail": "Tieni premuta un’icona app per trascinarla > rilasciala nello spazio vuoto tra i contenitori.",
+ "usageTips.tip6.title": "Suggerimento 6 - Riordinare tag:",
+ "usageTips.tip6.detail": "Tieni premuto un tag per trascinarlo > spostalo nella posizione desiderata e rilascialo.",
+ "usageTips.tip7.title": "Suggerimento 7 - Riordinare app:",
+ "usageTips.tip7.detail": "Tieni premuta un’icona app per trascinarla > spostala nella posizione desiderata nel contenitore e rilasciala.",
+ "usageTips.tip8.title": "Suggerimento 8 - Modificare note:",
+ "usageTips.tip8.detail": "Fai clic destro su un’app > inserisci una nota."
}
diff --git a/src/Apptag/Localization/ja.json b/src/Apptag/Localization/ja.json
index 3ee247c..7d79df7 100644
--- a/src/Apptag/Localization/ja.json
+++ b/src/Apptag/Localization/ja.json
@@ -207,5 +207,25 @@
"help.copyLink": "ヘルプPDFのリンクをコピー",
"help.currentLanguage": "現在のアプリ言語に対応するオンラインPDFを開きます。",
"settings.language.auto": "自動",
- "help.downloadPDF": "ヘルプPDFをダウンロード"
+ "help.downloadPDF": "ヘルプPDFをダウンロード",
+ "settings.hideUsageTips": "使い方のヒントを非表示",
+ "settings.hideUsageTipsDesc": "オンにすると、アプリグリッド下部のフローティングヒントを表示しません。",
+ "usageTips.previous": "前のヒント",
+ "usageTips.next": "次のヒント",
+ "usageTips.tip1.title": "ヒント1 - タグを追加:",
+ "usageTips.tip1.detail": "設定 > タグを開くとタグを編集できます。",
+ "usageTips.tip2.title": "ヒント2 - アプリにタグ付け:",
+ "usageTips.tip2.detail": "アプリアイコンを長押ししてドラッグを開始 > タグの上にドロップするとタグを割り当てます。",
+ "usageTips.tip3.title": "ヒント3 - アプリを移動:",
+ "usageTips.tip3.detail": "アプリアイコンを長押ししてドラッグを開始 > コンテナへ直接ドロップすると移動します。",
+ "usageTips.tip4.title": "ヒント4 - アプリをコピー:",
+ "usageTips.tip4.detail": "アプリアイコンを長押ししてドラッグを開始 > Alt/Option を押しながらコンテナへドロップするとコピーします。",
+ "usageTips.tip5.title": "ヒント5 - タグを解除:",
+ "usageTips.tip5.detail": "アプリアイコンを長押ししてドラッグを開始 > コンテナ間の空白へドロップします。",
+ "usageTips.tip6.title": "ヒント6 - タグを並べ替え:",
+ "usageTips.tip6.detail": "タグを長押ししてドラッグを開始 > 目的の位置へ移動して放します。",
+ "usageTips.tip7.title": "ヒント7 - アプリを並べ替え:",
+ "usageTips.tip7.detail": "アプリアイコンを長押ししてドラッグを開始 > コンテナ内の目的の位置へ移動して放します。",
+ "usageTips.tip8.title": "ヒント8 - メモを編集:",
+ "usageTips.tip8.detail": "アプリを右クリック > メモを入力します。"
}
diff --git a/src/Apptag/Localization/ko.json b/src/Apptag/Localization/ko.json
index 5423c60..0be5c3d 100644
--- a/src/Apptag/Localization/ko.json
+++ b/src/Apptag/Localization/ko.json
@@ -207,5 +207,25 @@
"help.copyLink": "도움말 PDF 링크 복사",
"help.currentLanguage": "현재 앱 언어에 맞는 온라인 PDF를 엽니다.",
"settings.language.auto": "자동",
- "help.downloadPDF": "도움말 PDF 다운로드"
+ "help.downloadPDF": "도움말 PDF 다운로드",
+ "settings.hideUsageTips": "사용 팁 숨기기",
+ "settings.hideUsageTipsDesc": "켜면 앱 그리드 하단의 플로팅 사용 팁이 표시되지 않습니다.",
+ "usageTips.previous": "이전 팁",
+ "usageTips.next": "다음 팁",
+ "usageTips.tip1.title": "팁 1 - 태그 추가:",
+ "usageTips.tip1.detail": "설정 > 태그를 열어 태그를 편집하세요.",
+ "usageTips.tip2.title": "팁 2 - 앱에 태그 지정:",
+ "usageTips.tip2.detail": "앱 아이콘을 길게 눌러 드래그 시작 > 태그 위에 놓으면 태그가 지정됩니다.",
+ "usageTips.tip3.title": "팁 3 - 앱 이동:",
+ "usageTips.tip3.detail": "앱 아이콘을 길게 눌러 드래그 시작 > 컨테이너에 바로 놓으면 이동됩니다.",
+ "usageTips.tip4.title": "팁 4 - 앱 복사:",
+ "usageTips.tip4.detail": "앱 아이콘을 길게 눌러 드래그 시작 > Alt/Option을 누른 채 컨테이너에 놓으면 복사됩니다.",
+ "usageTips.tip5.title": "팁 5 - 태그 제거:",
+ "usageTips.tip5.detail": "앱 아이콘을 길게 눌러 드래그 시작 > 컨테이너 사이의 빈 공간에 놓으세요.",
+ "usageTips.tip6.title": "팁 6 - 태그 정렬:",
+ "usageTips.tip6.detail": "태그를 길게 눌러 드래그 시작 > 원하는 위치로 이동한 뒤 놓으세요.",
+ "usageTips.tip7.title": "팁 7 - 앱 정렬:",
+ "usageTips.tip7.detail": "앱 아이콘을 길게 눌러 드래그 시작 > 컨테이너 안의 원하는 위치로 이동한 뒤 놓으세요.",
+ "usageTips.tip8.title": "팁 8 - 메모 편집:",
+ "usageTips.tip8.detail": "앱을 오른쪽 클릭 > 메모를 입력하세요."
}
diff --git a/src/Apptag/Localization/ms.json b/src/Apptag/Localization/ms.json
index c20dd39..f883b3a 100644
--- a/src/Apptag/Localization/ms.json
+++ b/src/Apptag/Localization/ms.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatik",
- "help.downloadPDF": "Muat turun PDF bantuan"
+ "help.downloadPDF": "Muat turun PDF bantuan",
+ "settings.hideUsageTips": "Sembunyikan petua penggunaan",
+ "settings.hideUsageTipsDesc": "Apabila dihidupkan, petua terapung di bahagian bawah grid app akan disembunyikan.",
+ "usageTips.previous": "Petua sebelumnya",
+ "usageTips.next": "Petua seterusnya",
+ "usageTips.tip1.title": "Petua 1 - Tambah tag:",
+ "usageTips.tip1.detail": "Buka Tetapan > Tag untuk mengedit tag.",
+ "usageTips.tip2.title": "Petua 2 - Tag app:",
+ "usageTips.tip2.detail": "Tekan lama ikon app untuk mula menyeret > lepaskan pada tag untuk menetapkan tag itu.",
+ "usageTips.tip3.title": "Petua 3 - Alih app:",
+ "usageTips.tip3.detail": "Tekan lama ikon app untuk mula menyeret > lepaskan terus ke dalam bekas untuk mengalihkannya.",
+ "usageTips.tip4.title": "Petua 4 - Salin app:",
+ "usageTips.tip4.detail": "Tekan lama ikon app untuk mula menyeret > tahan Alt/Option dan lepaskan ke dalam bekas untuk menyalinnya.",
+ "usageTips.tip5.title": "Petua 5 - Buang tag:",
+ "usageTips.tip5.detail": "Tekan lama ikon app untuk mula menyeret > lepaskan ke ruang kosong antara bekas.",
+ "usageTips.tip6.title": "Petua 6 - Susun tag:",
+ "usageTips.tip6.detail": "Tekan lama tag untuk mula menyeret > alih ke posisi sasaran dan lepaskan.",
+ "usageTips.tip7.title": "Petua 7 - Susun app:",
+ "usageTips.tip7.detail": "Tekan lama ikon app untuk mula menyeret > alih ke posisi sasaran dalam bekas dan lepaskan.",
+ "usageTips.tip8.title": "Petua 8 - Edit nota:",
+ "usageTips.tip8.detail": "Klik kanan app > masukkan nota."
}
diff --git a/src/Apptag/Localization/nb.json b/src/Apptag/Localization/nb.json
index e0d8edd..574082e 100644
--- a/src/Apptag/Localization/nb.json
+++ b/src/Apptag/Localization/nb.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatisk",
- "help.downloadPDF": "Last ned hjelp-PDF"
+ "help.downloadPDF": "Last ned hjelp-PDF",
+ "settings.hideUsageTips": "Skjul brukstips",
+ "settings.hideUsageTipsDesc": "Når dette er slått på, skjules de flytende tipsene nederst i app-rutenettet.",
+ "usageTips.previous": "Forrige tips",
+ "usageTips.next": "Neste tips",
+ "usageTips.tip1.title": "Tips 1 - Legg til tagger:",
+ "usageTips.tip1.detail": "Åpne Innstillinger > Tagger for å redigere tagger.",
+ "usageTips.tip2.title": "Tips 2 - Tagg apper:",
+ "usageTips.tip2.detail": "Hold inne et appikon for å begynne å dra > slipp det på en tagg for å tildele taggen.",
+ "usageTips.tip3.title": "Tips 3 - Flytt apper:",
+ "usageTips.tip3.detail": "Hold inne et appikon for å begynne å dra > slipp det direkte i en beholder for å flytte det.",
+ "usageTips.tip4.title": "Tips 4 - Kopier apper:",
+ "usageTips.tip4.detail": "Hold inne et appikon for å begynne å dra > hold Alt/Option og slipp det i en beholder for å kopiere det.",
+ "usageTips.tip5.title": "Tips 5 - Fjern tagger:",
+ "usageTips.tip5.detail": "Hold inne et appikon for å begynne å dra > slipp det i det tomme området mellom beholdere.",
+ "usageTips.tip6.title": "Tips 6 - Sorter tagger:",
+ "usageTips.tip6.detail": "Hold inne en tagg for å begynne å dra > flytt den til målposisjonen og slipp.",
+ "usageTips.tip7.title": "Tips 7 - Sorter apper:",
+ "usageTips.tip7.detail": "Hold inne et appikon for å begynne å dra > flytt det til målposisjonen i beholderen og slipp.",
+ "usageTips.tip8.title": "Tips 8 - Rediger notater:",
+ "usageTips.tip8.detail": "Høyreklikk på en app > skriv inn et notat."
}
diff --git a/src/Apptag/Localization/nl.json b/src/Apptag/Localization/nl.json
index ef4971a..86eb5b1 100644
--- a/src/Apptag/Localization/nl.json
+++ b/src/Apptag/Localization/nl.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatisch",
- "help.downloadPDF": "Help-PDF downloaden"
+ "help.downloadPDF": "Help-PDF downloaden",
+ "settings.hideUsageTips": "Gebruikstips verbergen",
+ "settings.hideUsageTipsDesc": "Als dit is ingeschakeld, worden de zwevende tips onderaan het app-raster verborgen.",
+ "usageTips.previous": "Vorige tip",
+ "usageTips.next": "Volgende tip",
+ "usageTips.tip1.title": "Tip 1 - Tags toevoegen:",
+ "usageTips.tip1.detail": "Open Instellingen > Tags om tags te bewerken.",
+ "usageTips.tip2.title": "Tip 2 - Apps taggen:",
+ "usageTips.tip2.detail": "Houd een app-icoon ingedrukt om te slepen > sleep het naar een tag om die tag toe te wijzen.",
+ "usageTips.tip3.title": "Tip 3 - Apps verplaatsen:",
+ "usageTips.tip3.detail": "Houd een app-icoon ingedrukt om te slepen > sleep het direct naar een container om het te verplaatsen.",
+ "usageTips.tip4.title": "Tip 4 - Apps kopiëren:",
+ "usageTips.tip4.detail": "Houd een app-icoon ingedrukt om te slepen > houd Alt/Option ingedrukt en sleep het naar een container om te kopiëren.",
+ "usageTips.tip5.title": "Tip 5 - Tags verwijderen:",
+ "usageTips.tip5.detail": "Houd een app-icoon ingedrukt om te slepen > sleep het naar de lege ruimte tussen containers.",
+ "usageTips.tip6.title": "Tip 6 - Tags sorteren:",
+ "usageTips.tip6.detail": "Houd een tag ingedrukt om te slepen > sleep hem naar de doelpositie en laat los.",
+ "usageTips.tip7.title": "Tip 7 - Apps sorteren:",
+ "usageTips.tip7.detail": "Houd een app-icoon ingedrukt om te slepen > sleep het naar de doelpositie in de container en laat los.",
+ "usageTips.tip8.title": "Tip 8 - Notities bewerken:",
+ "usageTips.tip8.detail": "Klik met rechts op een app > voer een notitie in."
}
diff --git a/src/Apptag/Localization/nn.json b/src/Apptag/Localization/nn.json
index 2744c86..5c15a8c 100644
--- a/src/Apptag/Localization/nn.json
+++ b/src/Apptag/Localization/nn.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatisk",
- "help.downloadPDF": "Last ned hjelp-PDF"
+ "help.downloadPDF": "Last ned hjelp-PDF",
+ "settings.hideUsageTips": "Gøym brukstips",
+ "settings.hideUsageTipsDesc": "Når dette er slått på, vert dei flytande tipsa nedst i apprutenettet gøymde.",
+ "usageTips.previous": "Forrige tips",
+ "usageTips.next": "Neste tips",
+ "usageTips.tip1.title": "Tips 1 - Legg til tagger:",
+ "usageTips.tip1.detail": "Opna Innstillingar > Taggar for å redigera taggar.",
+ "usageTips.tip2.title": "Tips 2 - Tagg apper:",
+ "usageTips.tip2.detail": "Hold inne et appikon for å begynne å dra > slipp det på en tagg for å tildele taggen.",
+ "usageTips.tip3.title": "Tips 3 - Flytt apper:",
+ "usageTips.tip3.detail": "Hold inne et appikon for å begynne å dra > slipp det direkte i en beholder for å flytte det.",
+ "usageTips.tip4.title": "Tips 4 - Kopier apper:",
+ "usageTips.tip4.detail": "Hold inne et appikon for å begynne å dra > hold Alt/Option og slipp det i en beholder for å kopiere det.",
+ "usageTips.tip5.title": "Tips 5 - Fjern tagger:",
+ "usageTips.tip5.detail": "Hold inne et appikon for å begynne å dra > slipp det i det tomme området mellom beholdere.",
+ "usageTips.tip6.title": "Tips 6 - Sorter tagger:",
+ "usageTips.tip6.detail": "Hold inne en tagg for å begynne å dra > flytt den til målposisjonen og slipp.",
+ "usageTips.tip7.title": "Tips 7 - Sorter apper:",
+ "usageTips.tip7.detail": "Hold inne et appikon for å begynne å dra > flytt det til målposisjonen i beholderen og slipp.",
+ "usageTips.tip8.title": "Tips 8 - Rediger notater:",
+ "usageTips.tip8.detail": "Høgreklikk på ein app > skriv inn eit notat."
}
diff --git a/src/Apptag/Localization/no.json b/src/Apptag/Localization/no.json
index e0d8edd..574082e 100644
--- a/src/Apptag/Localization/no.json
+++ b/src/Apptag/Localization/no.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatisk",
- "help.downloadPDF": "Last ned hjelp-PDF"
+ "help.downloadPDF": "Last ned hjelp-PDF",
+ "settings.hideUsageTips": "Skjul brukstips",
+ "settings.hideUsageTipsDesc": "Når dette er slått på, skjules de flytende tipsene nederst i app-rutenettet.",
+ "usageTips.previous": "Forrige tips",
+ "usageTips.next": "Neste tips",
+ "usageTips.tip1.title": "Tips 1 - Legg til tagger:",
+ "usageTips.tip1.detail": "Åpne Innstillinger > Tagger for å redigere tagger.",
+ "usageTips.tip2.title": "Tips 2 - Tagg apper:",
+ "usageTips.tip2.detail": "Hold inne et appikon for å begynne å dra > slipp det på en tagg for å tildele taggen.",
+ "usageTips.tip3.title": "Tips 3 - Flytt apper:",
+ "usageTips.tip3.detail": "Hold inne et appikon for å begynne å dra > slipp det direkte i en beholder for å flytte det.",
+ "usageTips.tip4.title": "Tips 4 - Kopier apper:",
+ "usageTips.tip4.detail": "Hold inne et appikon for å begynne å dra > hold Alt/Option og slipp det i en beholder for å kopiere det.",
+ "usageTips.tip5.title": "Tips 5 - Fjern tagger:",
+ "usageTips.tip5.detail": "Hold inne et appikon for å begynne å dra > slipp det i det tomme området mellom beholdere.",
+ "usageTips.tip6.title": "Tips 6 - Sorter tagger:",
+ "usageTips.tip6.detail": "Hold inne en tagg for å begynne å dra > flytt den til målposisjonen og slipp.",
+ "usageTips.tip7.title": "Tips 7 - Sorter apper:",
+ "usageTips.tip7.detail": "Hold inne et appikon for å begynne å dra > flytt det til målposisjonen i beholderen og slipp.",
+ "usageTips.tip8.title": "Tips 8 - Rediger notater:",
+ "usageTips.tip8.detail": "Høyreklikk på en app > skriv inn et notat."
}
diff --git a/src/Apptag/Localization/pl.json b/src/Apptag/Localization/pl.json
index 1ced486..7786e34 100644
--- a/src/Apptag/Localization/pl.json
+++ b/src/Apptag/Localization/pl.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatycznie",
- "help.downloadPDF": "Pobierz PDF pomocy"
+ "help.downloadPDF": "Pobierz PDF pomocy",
+ "settings.hideUsageTips": "Ukryj wskazówki",
+ "settings.hideUsageTipsDesc": "Po włączeniu pływające wskazówki u dołu siatki aplikacji będą ukryte.",
+ "usageTips.previous": "Poprzednia wskazówka",
+ "usageTips.next": "Następna wskazówka",
+ "usageTips.tip1.title": "Wskazówka 1 - Dodaj tagi:",
+ "usageTips.tip1.detail": "Otwórz Ustawienia > Tagi, aby edytować tagi.",
+ "usageTips.tip2.title": "Wskazówka 2 - Otaguj aplikacje:",
+ "usageTips.tip2.detail": "Przytrzymaj ikonę aplikacji, aby zacząć przeciągać > upuść ją na tagu, aby go przypisać.",
+ "usageTips.tip3.title": "Wskazówka 3 - Przenieś aplikacje:",
+ "usageTips.tip3.detail": "Przytrzymaj ikonę aplikacji, aby zacząć przeciągać > upuść ją bezpośrednio w kontenerze, aby przenieść.",
+ "usageTips.tip4.title": "Wskazówka 4 - Skopiuj aplikacje:",
+ "usageTips.tip4.detail": "Przytrzymaj ikonę aplikacji, aby zacząć przeciągać > przytrzymaj Alt/Option i upuść w kontenerze, aby skopiować.",
+ "usageTips.tip5.title": "Wskazówka 5 - Usuń tagi:",
+ "usageTips.tip5.detail": "Przytrzymaj ikonę aplikacji, aby zacząć przeciągać > upuść ją w pustym miejscu między kontenerami.",
+ "usageTips.tip6.title": "Wskazówka 6 - Sortuj tagi:",
+ "usageTips.tip6.detail": "Przytrzymaj tag, aby zacząć przeciągać > przenieś go w docelowe miejsce i puść.",
+ "usageTips.tip7.title": "Wskazówka 7 - Sortuj aplikacje:",
+ "usageTips.tip7.detail": "Przytrzymaj ikonę aplikacji, aby zacząć przeciągać > przenieś ją w docelowe miejsce w kontenerze i puść.",
+ "usageTips.tip8.title": "Wskazówka 8 - Edytuj notatki:",
+ "usageTips.tip8.detail": "Kliknij aplikację prawym przyciskiem > wpisz notatkę."
}
diff --git a/src/Apptag/Localization/pt-BR.json b/src/Apptag/Localization/pt-BR.json
index 4ffef6a..4bc3455 100644
--- a/src/Apptag/Localization/pt-BR.json
+++ b/src/Apptag/Localization/pt-BR.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automático",
- "help.downloadPDF": "Baixar PDF de ajuda"
+ "help.downloadPDF": "Baixar PDF de ajuda",
+ "settings.hideUsageTips": "Ocultar dicas de uso",
+ "settings.hideUsageTipsDesc": "Quando ativado, as dicas flutuantes na parte inferior da grade de apps ficam ocultas.",
+ "usageTips.previous": "Dica anterior",
+ "usageTips.next": "Próxima dica",
+ "usageTips.tip1.title": "Dica 1 - Adicionar tags:",
+ "usageTips.tip1.detail": "Abra Ajustes > Tags para editar tags.",
+ "usageTips.tip2.title": "Dica 2 - Marcar apps:",
+ "usageTips.tip2.detail": "Pressione e segure o ícone de um app para arrastar > solte sobre uma tag para atribuí-la.",
+ "usageTips.tip3.title": "Dica 3 - Mover apps:",
+ "usageTips.tip3.detail": "Pressione e segure o ícone de um app para arrastar > solte diretamente em um contêiner para mover.",
+ "usageTips.tip4.title": "Dica 4 - Copiar apps:",
+ "usageTips.tip4.detail": "Pressione e segure o ícone de um app para arrastar > segure Alt/Option e solte em um contêiner para copiar.",
+ "usageTips.tip5.title": "Dica 5 - Remover tags:",
+ "usageTips.tip5.detail": "Pressione e segure o ícone de um app para arrastar > solte no espaço vazio entre contêineres.",
+ "usageTips.tip6.title": "Dica 6 - Reordenar tags:",
+ "usageTips.tip6.detail": "Pressione e segure uma tag para arrastar > mova até a posição desejada e solte.",
+ "usageTips.tip7.title": "Dica 7 - Reordenar apps:",
+ "usageTips.tip7.detail": "Pressione e segure o ícone de um app para arrastar > mova até a posição desejada dentro do contêiner e solte.",
+ "usageTips.tip8.title": "Dica 8 - Editar notas:",
+ "usageTips.tip8.detail": "Clique com o botão direito em um app > digite uma nota."
}
diff --git a/src/Apptag/Localization/ro.json b/src/Apptag/Localization/ro.json
index b5a4228..7f29444 100644
--- a/src/Apptag/Localization/ro.json
+++ b/src/Apptag/Localization/ro.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automat",
- "help.downloadPDF": "Descarcă PDF-ul de ajutor"
+ "help.downloadPDF": "Descarcă PDF-ul de ajutor",
+ "settings.hideUsageTips": "Ascunde sfaturile de utilizare",
+ "settings.hideUsageTipsDesc": "Când este activat, sfaturile plutitoare din partea de jos a grilei de aplicații sunt ascunse.",
+ "usageTips.previous": "Sfatul anterior",
+ "usageTips.next": "Sfatul următor",
+ "usageTips.tip1.title": "Sfat 1 - Adaugă etichete:",
+ "usageTips.tip1.detail": "Deschide Setări > Etichete pentru a edita etichetele.",
+ "usageTips.tip2.title": "Sfat 2 - Etichetează aplicații:",
+ "usageTips.tip2.detail": "Ține apăsată pictograma unei aplicații pentru a începe tragerea > plaseaz-o pe o etichetă pentru a o atribui.",
+ "usageTips.tip3.title": "Sfat 3 - Mută aplicații:",
+ "usageTips.tip3.detail": "Ține apăsată pictograma unei aplicații pentru a începe tragerea > plaseaz-o direct într-un container pentru a o muta.",
+ "usageTips.tip4.title": "Sfat 4 - Copiază aplicații:",
+ "usageTips.tip4.detail": "Ține apăsată pictograma unei aplicații pentru a începe tragerea > ține Alt/Option și plaseaz-o într-un container pentru a o copia.",
+ "usageTips.tip5.title": "Sfat 5 - Elimină etichete:",
+ "usageTips.tip5.detail": "Ține apăsată pictograma unei aplicații pentru a începe tragerea > plaseaz-o în spațiul gol dintre containere.",
+ "usageTips.tip6.title": "Sfat 6 - Reordonează etichete:",
+ "usageTips.tip6.detail": "Ține apăsată o etichetă pentru a începe tragerea > mut-o în poziția dorită și eliberează.",
+ "usageTips.tip7.title": "Sfat 7 - Reordonează aplicații:",
+ "usageTips.tip7.detail": "Ține apăsată pictograma unei aplicații pentru a începe tragerea > mut-o în poziția dorită din container și eliberează.",
+ "usageTips.tip8.title": "Sfat 8 - Editează notițe:",
+ "usageTips.tip8.detail": "Click dreapta pe o aplicație > introdu o notiță."
}
diff --git a/src/Apptag/Localization/ru.json b/src/Apptag/Localization/ru.json
index 811de8a..62a4578 100644
--- a/src/Apptag/Localization/ru.json
+++ b/src/Apptag/Localization/ru.json
@@ -207,5 +207,25 @@
"help.copyLink": "Скопировать ссылку на PDF справки",
"help.currentLanguage": "Открывает онлайн-PDF для текущего языка приложения.",
"settings.language.auto": "Автоматически",
- "help.downloadPDF": "Скачать PDF справки"
+ "help.downloadPDF": "Скачать PDF справки",
+ "settings.hideUsageTips": "Скрыть советы",
+ "settings.hideUsageTipsDesc": "Если включено, плавающие советы внизу сетки приложений будут скрыты.",
+ "usageTips.previous": "Предыдущий совет",
+ "usageTips.next": "Следующий совет",
+ "usageTips.tip1.title": "Совет 1 — Добавить теги:",
+ "usageTips.tip1.detail": "Откройте Настройки > Теги, чтобы редактировать теги.",
+ "usageTips.tip2.title": "Совет 2 — Назначить теги:",
+ "usageTips.tip2.detail": "Удерживайте значок приложения, чтобы начать перетаскивание > перетащите его на тег, чтобы назначить тег.",
+ "usageTips.tip3.title": "Совет 3 — Переместить приложения:",
+ "usageTips.tip3.detail": "Удерживайте значок приложения, чтобы начать перетаскивание > перетащите его прямо в контейнер для перемещения.",
+ "usageTips.tip4.title": "Совет 4 — Скопировать приложения:",
+ "usageTips.tip4.detail": "Удерживайте значок приложения, чтобы начать перетаскивание > удерживайте Alt/Option и перетащите в контейнер для копирования.",
+ "usageTips.tip5.title": "Совет 5 — Удалить теги:",
+ "usageTips.tip5.detail": "Удерживайте значок приложения, чтобы начать перетаскивание > перетащите его в пустое место между контейнерами.",
+ "usageTips.tip6.title": "Совет 6 — Упорядочить теги:",
+ "usageTips.tip6.detail": "Удерживайте тег, чтобы начать перетаскивание > переместите его в нужное место и отпустите.",
+ "usageTips.tip7.title": "Совет 7 — Упорядочить приложения:",
+ "usageTips.tip7.detail": "Удерживайте значок приложения, чтобы начать перетаскивание > переместите его в нужное место внутри контейнера и отпустите.",
+ "usageTips.tip8.title": "Совет 8 — Редактировать заметки:",
+ "usageTips.tip8.detail": "Щелкните приложение правой кнопкой > введите заметку."
}
diff --git a/src/Apptag/Localization/sr-Cyrl.json b/src/Apptag/Localization/sr-Cyrl.json
index d372d86..a8e5391 100644
--- a/src/Apptag/Localization/sr-Cyrl.json
+++ b/src/Apptag/Localization/sr-Cyrl.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Аутоматски",
- "help.downloadPDF": "Преузми PDF помоћи"
+ "help.downloadPDF": "Преузми PDF помоћи",
+ "settings.hideUsageTips": "Сакриј савете за коришћење",
+ "settings.hideUsageTipsDesc": "Када је укључено, плутајући савети на дну мреже апликација су сакривени.",
+ "usageTips.previous": "Претходни савет",
+ "usageTips.next": "Следећи савет",
+ "usageTips.tip1.title": "Савет 1 - Додај ознаке:",
+ "usageTips.tip1.detail": "Отворите Подешавања > Ознаке да уредите ознаке.",
+ "usageTips.tip2.title": "Савет 2 - Означи апликације:",
+ "usageTips.tip2.detail": "Дуго притисните икону апликације да почнете превлачење > превуците је на ознаку да је доделите.",
+ "usageTips.tip3.title": "Савет 3 - Премести апликације:",
+ "usageTips.tip3.detail": "Дуго притисните икону апликације да почнете превлачење > превуците је директно у контејнер да је преместите.",
+ "usageTips.tip4.title": "Савет 4 - Копирај апликације:",
+ "usageTips.tip4.detail": "Дуго притисните икону апликације да почнете превлачење > држите Alt/Option и превуците је у контејнер да је копирате.",
+ "usageTips.tip5.title": "Савет 5 - Уклони ознаке:",
+ "usageTips.tip5.detail": "Дуго притисните икону апликације да почнете превлачење > превуците је у празан простор између контејнера.",
+ "usageTips.tip6.title": "Савет 6 - Поређај ознаке:",
+ "usageTips.tip6.detail": "Дуго притисните ознаку да почнете превлачење > преместите је на жељено место и пустите.",
+ "usageTips.tip7.title": "Савет 7 - Поређај апликације:",
+ "usageTips.tip7.detail": "Дуго притисните икону апликације да почнете превлачење > преместите је на жељено место у контејнеру и пустите.",
+ "usageTips.tip8.title": "Савет 8 - Уреди белешке:",
+ "usageTips.tip8.detail": "Кликните десним тастером на апликацију > унесите белешку."
}
diff --git a/src/Apptag/Localization/sv.json b/src/Apptag/Localization/sv.json
index ea48a56..c68ef7d 100644
--- a/src/Apptag/Localization/sv.json
+++ b/src/Apptag/Localization/sv.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Automatiskt",
- "help.downloadPDF": "Ladda ner hjälp-PDF"
+ "help.downloadPDF": "Ladda ner hjälp-PDF",
+ "settings.hideUsageTips": "Dölj användningstips",
+ "settings.hideUsageTipsDesc": "När detta är aktiverat döljs de flytande tipsen längst ned i apprutnätet.",
+ "usageTips.previous": "Föregående tips",
+ "usageTips.next": "Nästa tips",
+ "usageTips.tip1.title": "Tips 1 - Lägg till taggar:",
+ "usageTips.tip1.detail": "Öppna Inställningar > Taggar för att redigera taggar.",
+ "usageTips.tip2.title": "Tips 2 - Tagga appar:",
+ "usageTips.tip2.detail": "Håll ned en appikon för att börja dra > släpp den på en tagg för att tilldela taggen.",
+ "usageTips.tip3.title": "Tips 3 - Flytta appar:",
+ "usageTips.tip3.detail": "Håll ned en appikon för att börja dra > släpp den direkt i en container för att flytta den.",
+ "usageTips.tip4.title": "Tips 4 - Kopiera appar:",
+ "usageTips.tip4.detail": "Håll ned en appikon för att börja dra > håll Alt/Option och släpp den i en container för att kopiera den.",
+ "usageTips.tip5.title": "Tips 5 - Ta bort taggar:",
+ "usageTips.tip5.detail": "Håll ned en appikon för att börja dra > släpp den i det tomma området mellan containrar.",
+ "usageTips.tip6.title": "Tips 6 - Sortera taggar:",
+ "usageTips.tip6.detail": "Håll ned en tagg för att börja dra > flytta den till målpositionen och släpp.",
+ "usageTips.tip7.title": "Tips 7 - Sortera appar:",
+ "usageTips.tip7.detail": "Håll ned en appikon för att börja dra > flytta den till målpositionen i containern och släpp.",
+ "usageTips.tip8.title": "Tips 8 - Redigera anteckningar:",
+ "usageTips.tip8.detail": "Högerklicka på en app > skriv en anteckning."
}
diff --git a/src/Apptag/Localization/th.json b/src/Apptag/Localization/th.json
index f9f8fa3..1631971 100644
--- a/src/Apptag/Localization/th.json
+++ b/src/Apptag/Localization/th.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "อัตโนมัติ",
- "help.downloadPDF": "ดาวน์โหลด PDF วิธีใช้"
+ "help.downloadPDF": "ดาวน์โหลด PDF วิธีใช้",
+ "settings.hideUsageTips": "ซ่อนเคล็ดลับการใช้งาน",
+ "settings.hideUsageTipsDesc": "เมื่อเปิดใช้ เคล็ดลับแบบลอยที่ด้านล่างของกริดแอปจะถูกซ่อน",
+ "usageTips.previous": "เคล็ดลับก่อนหน้า",
+ "usageTips.next": "เคล็ดลับถัดไป",
+ "usageTips.tip1.title": "เคล็ดลับ 1 - เพิ่มแท็ก:",
+ "usageTips.tip1.detail": "เปิดการตั้งค่า > แท็ก เพื่อแก้ไขแท็ก",
+ "usageTips.tip2.title": "เคล็ดลับ 2 - ติดแท็กแอป:",
+ "usageTips.tip2.detail": "กดไอคอนแอปค้างไว้เพื่อเริ่มลาก > วางบนแท็กเพื่อกำหนดแท็กนั้น",
+ "usageTips.tip3.title": "เคล็ดลับ 3 - ย้ายแอป:",
+ "usageTips.tip3.detail": "กดไอคอนแอปค้างไว้เพื่อเริ่มลาก > วางลงในคอนเทนเนอร์โดยตรงเพื่อย้าย",
+ "usageTips.tip4.title": "เคล็ดลับ 4 - คัดลอกแอป:",
+ "usageTips.tip4.detail": "กดไอคอนแอปค้างไว้เพื่อเริ่มลาก > กด Alt/Option ค้างไว้แล้ววางลงในคอนเทนเนอร์เพื่อคัดลอก",
+ "usageTips.tip5.title": "เคล็ดลับ 5 - ลบแท็ก:",
+ "usageTips.tip5.detail": "กดไอคอนแอปค้างไว้เพื่อเริ่มลาก > วางในพื้นที่ว่างระหว่างคอนเทนเนอร์",
+ "usageTips.tip6.title": "เคล็ดลับ 6 - จัดลำดับแท็ก:",
+ "usageTips.tip6.detail": "กดแท็กค้างไว้เพื่อเริ่มลาก > ลากไปยังตำแหน่งเป้าหมายแล้วปล่อย",
+ "usageTips.tip7.title": "เคล็ดลับ 7 - จัดลำดับแอป:",
+ "usageTips.tip7.detail": "กดไอคอนแอปค้างไว้เพื่อเริ่มลาก > ลากไปยังตำแหน่งเป้าหมายในคอนเทนเนอร์แล้วปล่อย",
+ "usageTips.tip8.title": "เคล็ดลับ 8 - แก้ไขโน้ต:",
+ "usageTips.tip8.detail": "คลิกขวาที่แอป > ป้อนโน้ต"
}
diff --git a/src/Apptag/Localization/tr.json b/src/Apptag/Localization/tr.json
index 30e5fa2..aa911de 100644
--- a/src/Apptag/Localization/tr.json
+++ b/src/Apptag/Localization/tr.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Otomatik",
- "help.downloadPDF": "Yardım PDF’sini indir"
+ "help.downloadPDF": "Yardım PDF’sini indir",
+ "settings.hideUsageTips": "Kullanım ipuçlarını gizle",
+ "settings.hideUsageTipsDesc": "Etkinleştirildiğinde uygulama ızgarasının altındaki yüzen ipuçları gizlenir.",
+ "usageTips.previous": "Önceki ipucu",
+ "usageTips.next": "Sonraki ipucu",
+ "usageTips.tip1.title": "İpucu 1 - Etiket ekle:",
+ "usageTips.tip1.detail": "Etiketleri düzenlemek için Ayarlar > Etiketler bölümünü açın.",
+ "usageTips.tip2.title": "İpucu 2 - Uygulamaları etiketle:",
+ "usageTips.tip2.detail": "Sürüklemeyi başlatmak için bir uygulama simgesine uzun basın > etiketi atamak için bir etiketin üzerine bırakın.",
+ "usageTips.tip3.title": "İpucu 3 - Uygulamaları taşı:",
+ "usageTips.tip3.detail": "Sürüklemeyi başlatmak için bir uygulama simgesine uzun basın > taşımak için doğrudan bir kapsayıcıya bırakın.",
+ "usageTips.tip4.title": "İpucu 4 - Uygulamaları kopyala:",
+ "usageTips.tip4.detail": "Sürüklemeyi başlatmak için bir uygulama simgesine uzun basın > Alt/Option tuşunu basılı tutup kapsayıcıya bırakarak kopyalayın.",
+ "usageTips.tip5.title": "İpucu 5 - Etiketleri kaldır:",
+ "usageTips.tip5.detail": "Sürüklemeyi başlatmak için bir uygulama simgesine uzun basın > kapsayıcılar arasındaki boş alana bırakın.",
+ "usageTips.tip6.title": "İpucu 6 - Etiketleri sırala:",
+ "usageTips.tip6.detail": "Sürüklemeyi başlatmak için bir etikete uzun basın > hedef konuma taşıyıp bırakın.",
+ "usageTips.tip7.title": "İpucu 7 - Uygulamaları sırala:",
+ "usageTips.tip7.detail": "Sürüklemeyi başlatmak için bir uygulama simgesine uzun basın > kapsayıcı içindeki hedef konuma taşıyıp bırakın.",
+ "usageTips.tip8.title": "İpucu 8 - Notları düzenle:",
+ "usageTips.tip8.detail": "Bir uygulamaya sağ tıklayın > not girin."
}
diff --git a/src/Apptag/Localization/uk.json b/src/Apptag/Localization/uk.json
index 14190f4..c433649 100644
--- a/src/Apptag/Localization/uk.json
+++ b/src/Apptag/Localization/uk.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Автоматично",
- "help.downloadPDF": "Завантажити PDF довідки"
+ "help.downloadPDF": "Завантажити PDF довідки",
+ "settings.hideUsageTips": "Приховати поради",
+ "settings.hideUsageTipsDesc": "Якщо ввімкнено, плаваючі поради внизу сітки програм буде приховано.",
+ "usageTips.previous": "Попередня порада",
+ "usageTips.next": "Наступна порада",
+ "usageTips.tip1.title": "Порада 1 — Додати теги:",
+ "usageTips.tip1.detail": "Відкрийте Параметри > Теги, щоб редагувати теги.",
+ "usageTips.tip2.title": "Порада 2 — Позначити програми:",
+ "usageTips.tip2.detail": "Утримуйте іконку програми, щоб почати перетягування > перетягніть її на тег, щоб призначити тег.",
+ "usageTips.tip3.title": "Порада 3 — Перемістити програми:",
+ "usageTips.tip3.detail": "Утримуйте іконку програми, щоб почати перетягування > перетягніть її прямо в контейнер для переміщення.",
+ "usageTips.tip4.title": "Порада 4 — Скопіювати програми:",
+ "usageTips.tip4.detail": "Утримуйте іконку програми, щоб почати перетягування > утримуйте Alt/Option і перетягніть у контейнер для копіювання.",
+ "usageTips.tip5.title": "Порада 5 — Видалити теги:",
+ "usageTips.tip5.detail": "Утримуйте іконку програми, щоб почати перетягування > перетягніть її у порожнє місце між контейнерами.",
+ "usageTips.tip6.title": "Порада 6 — Упорядкувати теги:",
+ "usageTips.tip6.detail": "Утримуйте тег, щоб почати перетягування > перемістіть його в потрібне місце й відпустіть.",
+ "usageTips.tip7.title": "Порада 7 — Упорядкувати програми:",
+ "usageTips.tip7.detail": "Утримуйте іконку програми, щоб почати перетягування > перемістіть її в потрібне місце всередині контейнера й відпустіть.",
+ "usageTips.tip8.title": "Порада 8 — Редагувати нотатки:",
+ "usageTips.tip8.detail": "Клацніть програму правою кнопкою > введіть нотатку."
}
diff --git a/src/Apptag/Localization/vi.json b/src/Apptag/Localization/vi.json
index c053a66..25489a5 100644
--- a/src/Apptag/Localization/vi.json
+++ b/src/Apptag/Localization/vi.json
@@ -207,5 +207,25 @@
"help.copyLink": "Copy Help PDF link",
"help.currentLanguage": "Opens the online PDF for the current app language.",
"settings.language.auto": "Tự động",
- "help.downloadPDF": "Tải PDF trợ giúp"
+ "help.downloadPDF": "Tải PDF trợ giúp",
+ "settings.hideUsageTips": "Ẩn mẹo sử dụng",
+ "settings.hideUsageTipsDesc": "Khi bật, các mẹo nổi ở cuối lưới ứng dụng sẽ bị ẩn.",
+ "usageTips.previous": "Mẹo trước",
+ "usageTips.next": "Mẹo tiếp theo",
+ "usageTips.tip1.title": "Mẹo 1 - Thêm thẻ:",
+ "usageTips.tip1.detail": "Mở Cài đặt > Thẻ để chỉnh sửa thẻ.",
+ "usageTips.tip2.title": "Mẹo 2 - Gắn thẻ ứng dụng:",
+ "usageTips.tip2.detail": "Nhấn giữ biểu tượng ứng dụng để bắt đầu kéo > thả lên một thẻ để gán thẻ đó.",
+ "usageTips.tip3.title": "Mẹo 3 - Di chuyển ứng dụng:",
+ "usageTips.tip3.detail": "Nhấn giữ biểu tượng ứng dụng để bắt đầu kéo > thả trực tiếp vào một vùng chứa để di chuyển.",
+ "usageTips.tip4.title": "Mẹo 4 - Sao chép ứng dụng:",
+ "usageTips.tip4.detail": "Nhấn giữ biểu tượng ứng dụng để bắt đầu kéo > giữ Alt/Option rồi thả vào vùng chứa để sao chép.",
+ "usageTips.tip5.title": "Mẹo 5 - Gỡ thẻ:",
+ "usageTips.tip5.detail": "Nhấn giữ biểu tượng ứng dụng để bắt đầu kéo > thả vào khoảng trống giữa các vùng chứa.",
+ "usageTips.tip6.title": "Mẹo 6 - Sắp xếp thẻ:",
+ "usageTips.tip6.detail": "Nhấn giữ một thẻ để bắt đầu kéo > kéo đến vị trí mong muốn rồi thả.",
+ "usageTips.tip7.title": "Mẹo 7 - Sắp xếp ứng dụng:",
+ "usageTips.tip7.detail": "Nhấn giữ biểu tượng ứng dụng để bắt đầu kéo > kéo đến vị trí mong muốn trong vùng chứa rồi thả.",
+ "usageTips.tip8.title": "Mẹo 8 - Chỉnh sửa ghi chú:",
+ "usageTips.tip8.detail": "Nhấp chuột phải vào ứng dụng > nhập ghi chú."
}
diff --git a/src/Apptag/Localization/zh-Hans.json b/src/Apptag/Localization/zh-Hans.json
index 205c2d8..27e243f 100644
--- a/src/Apptag/Localization/zh-Hans.json
+++ b/src/Apptag/Localization/zh-Hans.json
@@ -207,5 +207,25 @@
"help.copyLink": "复制帮助文档链接",
"help.currentLanguage": "将按当前应用语言打开对应版本的在线 PDF。",
"settings.language.auto": "自动",
- "help.downloadPDF": "下载帮助文档"
+ "help.downloadPDF": "下载帮助文档",
+ "settings.hideUsageTips": "隐藏使用技巧",
+ "settings.hideUsageTipsDesc": "开启后,应用网格底部的悬浮使用技巧将不再显示。",
+ "usageTips.previous": "上一条技巧",
+ "usageTips.next": "下一条技巧",
+ "usageTips.tip1.title": "技巧1-添加标签:",
+ "usageTips.tip1.detail": "在设置 > 切换到“标签”即可编辑",
+ "usageTips.tip2.title": "技巧2-打标签:",
+ "usageTips.tip2.detail": "长按应用图标启动拖动 > 拖动到标签上是打标签",
+ "usageTips.tip3.title": "技巧3-移动应用:",
+ "usageTips.tip3.detail": "长按应用图标启动拖动 > 直接拖动到容器是移动",
+ "usageTips.tip4.title": "技巧4-复制应用:",
+ "usageTips.tip4.detail": "长按应用图标启动拖动 > 按住 Alt/Option 拖动到容器是复制",
+ "usageTips.tip5.title": "技巧5-解除标签:",
+ "usageTips.tip5.detail": "长按应用图标启动拖动 > 把应用拖动到容器间的空白处",
+ "usageTips.tip6.title": "技巧6-标签排序:",
+ "usageTips.tip6.detail": "长按标签启动拖动 > 拖动到目标位置,放手即可",
+ "usageTips.tip7.title": "技巧7-应用排序:",
+ "usageTips.tip7.detail": "长按应用图标启动拖动 > 拖动到容器内的目标位置,放手即可",
+ "usageTips.tip8.title": "技巧8-编辑备注:",
+ "usageTips.tip8.detail": "在应用上点击右键 > 输入内容"
}
diff --git a/src/Apptag/Localization/zh-Hant.json b/src/Apptag/Localization/zh-Hant.json
index 145f47c..05b30ac 100644
--- a/src/Apptag/Localization/zh-Hant.json
+++ b/src/Apptag/Localization/zh-Hant.json
@@ -207,5 +207,25 @@
"help.copyLink": "複製說明文件連結",
"help.currentLanguage": "將依目前應用程式語言開啟對應版本的線上 PDF。",
"settings.language.auto": "自動",
- "help.downloadPDF": "下載說明文件"
+ "help.downloadPDF": "下載說明文件",
+ "settings.hideUsageTips": "隱藏使用技巧",
+ "settings.hideUsageTipsDesc": "開啟後,應用程式網格底部的浮動使用技巧將不再顯示。",
+ "usageTips.previous": "上一則技巧",
+ "usageTips.next": "下一則技巧",
+ "usageTips.tip1.title": "技巧1-新增標籤:",
+ "usageTips.tip1.detail": "在設定 > 切換到「標籤」即可編輯",
+ "usageTips.tip2.title": "技巧2-套用標籤:",
+ "usageTips.tip2.detail": "長按應用程式圖示開始拖曳 > 拖到標籤上即可套用標籤",
+ "usageTips.tip3.title": "技巧3-移動應用:",
+ "usageTips.tip3.detail": "長按應用程式圖示開始拖曳 > 直接拖到容器即可移動",
+ "usageTips.tip4.title": "技巧4-複製應用:",
+ "usageTips.tip4.detail": "長按應用程式圖示開始拖曳 > 按住 Alt/Option 拖到容器即可複製",
+ "usageTips.tip5.title": "技巧5-解除標籤:",
+ "usageTips.tip5.detail": "長按應用程式圖示開始拖曳 > 把應用拖到容器之間的空白處",
+ "usageTips.tip6.title": "技巧6-標籤排序:",
+ "usageTips.tip6.detail": "長按標籤開始拖曳 > 拖到目標位置後放開",
+ "usageTips.tip7.title": "技巧7-應用排序:",
+ "usageTips.tip7.detail": "長按應用程式圖示開始拖曳 > 拖到容器內目標位置後放開",
+ "usageTips.tip8.title": "技巧8-編輯備註:",
+ "usageTips.tip8.detail": "在應用程式上按右鍵 > 輸入內容"
}
diff --git a/src/Apptag/PreferencesView.swift b/src/Apptag/PreferencesView.swift
index b103eae..2dea588 100644
--- a/src/Apptag/PreferencesView.swift
+++ b/src/Apptag/PreferencesView.swift
@@ -62,6 +62,7 @@
@AppStorage("showDockIcon") private var showDockIcon = AppDefaults.showDockIcon
@AppStorage("launchAtLogin") private var launchAtLogin = AppDefaults.launchAtLogin
@AppStorage("showUncommonAppBubbles") private var showUncommonAppBubbles = AppDefaults.showUncommonAppBubbles
+ @AppStorage("hideUsageTips") private var hideUsageTips = AppDefaults.hideUsageTips
@AppStorage("mainHotkeyRegistrationState") private var mainHotkeyRegistrationState = LauncherHotkeyRegistrationState.active.rawValue
@AppStorage("quickSearchHotkeyRegistrationState") private var quickSearchHotkeyRegistrationState = LauncherHotkeyRegistrationState.active.rawValue
@State private var selectedLanguage = L10n.selectedLanguageCode
@@ -760,9 +761,12 @@
AppDelegate.refreshChromeSettings()
}
Toggle(tr("settings.hideAppNames"), isOn: $hideAppNames)
+ Toggle(tr("settings.hideUsageTips"), isOn: $hideUsageTips)
+ .help(tr("settings.hideUsageTipsDesc"))
}
.frame(maxWidth: .infinity, alignment: .center)
- .padding(.bottom, 16)
+ .padding(.top, 12)
+ .padding(.bottom, 18)
Divider()
.padding(.bottom, 16)
@@ -825,7 +829,9 @@
}
}
.frame(maxWidth: generalContentWidth, alignment: .center)
- .padding()
+ .padding(.horizontal)
+ .padding(.top, 28)
+ .padding(.bottom)
}
case .hotkeys:
diff --git a/src/Scripts/usage_tips_qa.sh b/src/Scripts/usage_tips_qa.sh
new file mode 100755
index 0000000..474929e
--- /dev/null
+++ b/src/Scripts/usage_tips_qa.sh
@@ -0,0 +1,153 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+CONTENT_VIEW_SWIFT="$ROOT_DIR/Apptag/ContentView.swift"
+APP_GRID_SWIFT="$ROOT_DIR/Apptag/AppGridCollectionView.swift"
+PREFERENCES_VIEW_SWIFT="$ROOT_DIR/Apptag/PreferencesView.swift"
+APP_DEFAULTS_SWIFT="$ROOT_DIR/Apptag/AppDefaults.swift"
+LOCALIZATION_DIR="$ROOT_DIR/Apptag/Localization"
+
+fail() {
+ printf 'FAIL: %s\n' "$*" >&2
+ exit 1
+}
+
+[[ -f "$CONTENT_VIEW_SWIFT" ]] || fail "missing ContentView.swift"
+[[ -f "$APP_GRID_SWIFT" ]] || fail "missing AppGridCollectionView.swift"
+[[ -f "$PREFERENCES_VIEW_SWIFT" ]] || fail "missing PreferencesView.swift"
+[[ -f "$APP_DEFAULTS_SWIFT" ]] || fail "missing AppDefaults.swift"
+[[ -d "$LOCALIZATION_DIR" ]] || fail "missing Localization directory"
+
+python3 - "$CONTENT_VIEW_SWIFT" "$APP_GRID_SWIFT" "$PREFERENCES_VIEW_SWIFT" "$APP_DEFAULTS_SWIFT" "$LOCALIZATION_DIR" <<'PY'
+import json
+import pathlib
+import re
+import sys
+
+content_view = pathlib.Path(sys.argv[1]).read_text(encoding="utf-8")
+app_grid = pathlib.Path(sys.argv[2]).read_text(encoding="utf-8")
+preferences = pathlib.Path(sys.argv[3]).read_text(encoding="utf-8")
+defaults = pathlib.Path(sys.argv[4]).read_text(encoding="utf-8")
+localization_dir = pathlib.Path(sys.argv[5])
+
+required_keys = [
+ "settings.hideUsageTips",
+ "settings.hideUsageTipsDesc",
+ "usageTips.previous",
+ "usageTips.next",
+]
+for index in range(1, 9):
+ required_keys.append(f"usageTips.tip{index}.title")
+ required_keys.append(f"usageTips.tip{index}.detail")
+
+
+def fail(message: str) -> None:
+ print(f"FAIL: {message}", file=sys.stderr)
+ sys.exit(1)
+
+
+def require(pattern: str, source: str, message: str) -> None:
+ if not re.search(pattern, source, re.S):
+ fail(message)
+
+
+require(
+ r"static\s+let\s+hideUsageTips\s*=\s*false",
+ defaults,
+ "usage tips must default to visible for existing and new users",
+)
+require(
+ r'"hideUsageTips"\s*:\s*hideUsageTips',
+ defaults,
+ "AppDefaults.register must register hideUsageTips",
+)
+require(
+ r'@AppStorage\("hideUsageTips"\)\s+private\s+var\s+hideUsageTips\s*=\s*AppDefaults\.hideUsageTips',
+ content_view,
+ "ContentView must observe hideUsageTips with AppStorage",
+)
+require(
+ r'@AppStorage\("hideUsageTips"\)\s+private\s+var\s+hideUsageTips\s*=\s*AppDefaults\.hideUsageTips',
+ preferences,
+ "PreferencesView must persist hideUsageTips with AppStorage",
+)
+require(
+ r'Toggle\s*\(\s*tr\("settings\.hideUsageTips"\)\s*,\s*isOn\s*:\s*\$hideUsageTips\s*\)',
+ preferences,
+ "General settings must expose a Hide usage tips toggle",
+)
+require(
+ r"\bprivate\s+struct\s+AppGridUsageTipsBar\s*:\s*View\b",
+ content_view,
+ "ContentView must define the app grid usage tips overlay",
+)
+require(
+ r"static\s+let\s+reservedHeight\s*:\s*CGFloat\s*=\s*64",
+ content_view,
+ "Usage tips overlay must reserve stable bottom space",
+)
+require(
+ r"ScrollView\s*\(\s*\.horizontal\s*,\s*showsIndicators\s*:\s*textHovered\s*\)",
+ content_view,
+ "Long localized tip text must be horizontally scrollable on hover",
+)
+require(
+ r"\.onHover\s*\{\s*textHovered\s*=\s*\$0\s*\}",
+ content_view,
+ "Usage tip text must react to hover so long text can be inspected",
+)
+require(
+ r"bottomContentPadding\s*:\s*shouldShowUsageTips\s*\?\s*AppGridUsageTipsBar\.reservedHeight\s*:\s*0",
+ content_view,
+ "AppGrid must reserve bottom content space when tips are visible",
+)
+require(
+ r"\.allowsHitTesting\s*\(\s*!dragModeActive\s*\)",
+ content_view,
+ "Usage tips overlay must stop intercepting drag/drop while app drag mode is active",
+)
+require(
+ r"let\s+bottomContentPadding\s*:\s*CGFloat",
+ app_grid,
+ "AppGridCollectionView must accept bottom content padding",
+)
+if '"bottom=\\(Int(bottomContentPadding.rounded()))"' not in app_grid:
+ fail("AppGrid layout signature must include bottom content padding")
+require(
+ r"\+\s*max\s*\(\s*0\s*,\s*bottomContentPadding\s*\)",
+ app_grid,
+ "AppGrid layout plans must add bottom content padding to content height",
+)
+
+tip_ids = [int(value) for value in re.findall(r"AppGridUsageTip\s*\(\s*id\s*:\s*(\d+)", content_view)]
+if tip_ids != list(range(1, 9)):
+ fail(f"usage tip IDs must be exactly 1 through 8, got {tip_ids}")
+if "usageTips.tip0" in content_view:
+ fail("usage tips must not expose a zero-based tip number")
+
+for source_name, source in {
+ "ContentView.swift": content_view,
+ "AppGridCollectionView.swift": app_grid,
+ "PreferencesView.swift": preferences,
+}.items():
+ if re.search(r"#available\s*\(\s*macOS\s+(?:15|26)", source):
+ fail(f"{source_name} must not rely on macOS 15/26 availability for usage tips")
+ if "scrollClipDisabled" in source:
+ fail(f"{source_name} must avoid newer scrollClipDisabled behavior for macOS 14 compatibility")
+
+json_files = sorted(localization_dir.glob("*.json"))
+if len(json_files) != 29:
+ fail(f"expected 29 localization files, found {len(json_files)}")
+
+for path in json_files:
+ try:
+ data = json.loads(path.read_text(encoding="utf-8"))
+ except Exception as exc:
+ fail(f"{path.name} is not valid JSON: {exc}")
+ missing = [key for key in required_keys if not data.get(key)]
+ if missing:
+ fail(f"{path.name} missing usage tip localization keys: {', '.join(missing)}")
+
+print("PASS usage tips QA: overlay, hide setting, macOS 14-safe implementation, and 29-language localizations are present")
+PY
--
Gitblit v1.9.3