From 0594f9fa683ee1252dfb2754a8ef34c20411a80a Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 20:24:37 +0700 Subject: [PATCH 01/16] feat: redesign Plugins settings with HSplitView master-detail layout --- TablePro/Resources/Localizable.xcstrings | 76 +++++ .../Settings/Plugins/BrowsePluginsView.swift | 274 +++++++++--------- .../Plugins/InstalledPluginsView.swift | 248 +++++++++------- .../Plugins/RegistryPluginDetailView.swift | 126 ++++---- .../Settings/Plugins/RegistryPluginRow.swift | 45 +-- TablePro/Views/Settings/SettingsView.swift | 2 +- 6 files changed, 432 insertions(+), 339 deletions(-) diff --git a/TablePro/Resources/Localizable.xcstrings b/TablePro/Resources/Localizable.xcstrings index a4f5cef9..ff4ca1bc 100644 --- a/TablePro/Resources/Localizable.xcstrings +++ b/TablePro/Resources/Localizable.xcstrings @@ -1904,6 +1904,9 @@ }, "Alert (Full)" : { + }, + "All" : { + }, "All %lld rows selected" : { "localizations" : { @@ -2032,8 +2035,12 @@ } } } + }, + "Also handles" : { + }, "Also handles:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -2398,6 +2405,9 @@ }, "Authentication required to execute write operations" : { + }, + "Author" : { + }, "AUTO" : { "extractionState" : "stale", @@ -2641,8 +2651,12 @@ } } } + }, + "Bundle ID" : { + }, "Bundle ID:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -2724,8 +2738,12 @@ } } } + }, + "Capabilities" : { + }, "Capabilities:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -2756,6 +2774,9 @@ } } } + }, + "Category" : { + }, "Cell Renderer" : { "extractionState" : "stale", @@ -4971,8 +4992,12 @@ } } } + }, + "Database Type" : { + }, "Database Type:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -5277,8 +5302,12 @@ } } } + }, + "Default Port" : { + }, "Default Port:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -5656,6 +5685,9 @@ } } } + }, + "Dismiss" : { + }, "Display" : { "localizations" : { @@ -7032,6 +7064,9 @@ } } } + }, + "Failed to Load" : { + }, "Failed to load databases" : { "localizations" : { @@ -7066,6 +7101,7 @@ } }, "Failed to load plugin registry" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -8570,6 +8606,7 @@ } }, "Install from File..." : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -8634,6 +8671,7 @@ } }, "Installed Plugins" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -9365,6 +9403,7 @@ } }, "Loading plugins..." : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -10648,6 +10687,7 @@ } }, "No plugins found" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -13346,6 +13386,9 @@ } } } + }, + "Requires" : { + }, "Reset to Defaults" : { "localizations" : { @@ -14169,6 +14212,12 @@ } } } + }, + "Select a Plugin" : { + + }, + "Select a plugin to view details" : { + }, "Select a Query" : { "localizations" : { @@ -14806,6 +14855,7 @@ } }, "Source:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -15313,6 +15363,9 @@ } } } + }, + "Status" : { + }, "Stop" : { "localizations" : { @@ -17006,6 +17059,7 @@ } }, "User" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -17086,6 +17140,7 @@ } }, "v%@" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -17100,6 +17155,19 @@ } } } + }, + "v%@ · %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "v%1$@ · %2$@" + } + } + } + }, + "v%@+" : { + }, "Validation Failed" : { "localizations" : { @@ -17148,8 +17216,12 @@ } } } + }, + "Verified" : { + }, "Verified by TablePro" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -17196,6 +17268,9 @@ } } } + }, + "Version" : { + }, "Version %@" : { "localizations" : { @@ -17236,6 +17311,7 @@ } }, "Version:" : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index ff15cc88..0fcd13f3 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -3,6 +3,7 @@ // TablePro // +import AppKit import SwiftUI struct BrowsePluginsView: View { @@ -17,16 +18,36 @@ struct BrowsePluginsView: View { @State private var showErrorAlert = false @State private var errorMessage = "" + private var selectedRegistryPlugin: RegistryPlugin? { + guard let selectedPluginId else { return nil } + return registryClient.manifest?.plugins.first { $0.id == selectedPluginId } + } + var body: some View { VStack(spacing: 0) { - searchAndFilterBar - .padding(.horizontal, 16) - .padding(.top, 8) + HStack { + TextField("Search plugins...", text: $searchText) + .textFieldStyle(.roundedBorder) + Picker("Category", selection: $selectedCategory) { + Text("All").tag(RegistryCategory?.none) + ForEach(RegistryCategory.allCases) { category in + Text(category.displayName).tag(RegistryCategory?.some(category)) + } + } + .fixedSize() + } + .padding(.horizontal, 12) + .padding(.vertical, 8) Divider() - .padding(.top, 8) - contentView + HSplitView { + browseLeftPane + .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) + + browseDetailPane + .frame(minWidth: 340) + } } .task { if registryClient.fetchState == .idle { @@ -39,133 +60,137 @@ struct BrowsePluginsView: View { } message: { Text(errorMessage) } - } - - // MARK: - Search & Filter - - @ViewBuilder - private var searchAndFilterBar: some View { - VStack(spacing: 8) { - HStack { - Image(systemName: "magnifyingglass") - .foregroundStyle(.secondary) - TextField("Search plugins...", text: $searchText) - .textFieldStyle(.plain) - - if !searchText.isEmpty { - Button { - searchText = "" - } label: { - Image(systemName: "xmark.circle.fill") - .foregroundStyle(.secondary) - } - .buttonStyle(.plain) - } - } - .padding(8) - .background(.quaternary, in: RoundedRectangle(cornerRadius: 8)) - - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 6) { - FilterChip(title: "All", isSelected: selectedCategory == nil) { - selectedCategory = nil - } - - ForEach(RegistryCategory.allCases) { category in - FilterChip( - title: category.displayName, - isSelected: selectedCategory == category - ) { - selectedCategory = category - } - } - } - } + .onChange(of: searchText) { + clearSelectionIfNeeded() + } + .onChange(of: selectedCategory) { + clearSelectionIfNeeded() } } - // MARK: - Content + // MARK: - Left Pane @ViewBuilder - private var contentView: some View { + private var browseLeftPane: some View { switch registryClient.fetchState { case .idle, .loading: - VStack { - Spacer() - ProgressView("Loading plugins...") - Spacer() - } - .frame(maxWidth: .infinity) + ProgressView() + .frame(maxWidth: .infinity, maxHeight: .infinity) case .loaded: let plugins = registryClient.search(query: searchText, category: selectedCategory) if plugins.isEmpty { - VStack(spacing: 8) { - Spacer() - Image(systemName: "puzzlepiece.extension") - .font(.largeTitle) - .foregroundStyle(.secondary) - Text("No plugins found") - .foregroundStyle(.secondary) - Spacer() - } - .frame(maxWidth: .infinity) + ContentUnavailableView.search(text: searchText) } else { - ScrollView { - LazyVStack(spacing: 0) { - ForEach(plugins) { plugin in - VStack(spacing: 0) { - RegistryPluginRow( - plugin: plugin, - isInstalled: isPluginInstalled(plugin.id), - installProgress: installTracker.state(for: plugin.id), - downloadCount: downloadCountService.downloadCount(for: plugin.id), - onInstall: { installPlugin(plugin) }, - onToggleDetail: { - withAnimation(.easeInOut(duration: 0.2)) { - selectedPluginId = selectedPluginId == plugin.id ? nil : plugin.id - } - } - ) - - if selectedPluginId == plugin.id { - RegistryPluginDetailView( - plugin: plugin, - isInstalled: isPluginInstalled(plugin.id), - installProgress: installTracker.state(for: plugin.id), - downloadCount: downloadCountService.downloadCount(for: plugin.id), - onInstall: { installPlugin(plugin) } - ) - } - - Divider() - } - } + List(selection: $selectedPluginId) { + ForEach(plugins) { plugin in + browseRow(plugin) + .tag(plugin.id) } - .padding(.horizontal, 16) } + .listStyle(.inset(alternatesRowBackgrounds: true)) } case .failed(let message): - VStack(spacing: 12) { - Spacer() - Image(systemName: "wifi.slash") - .font(.largeTitle) - .foregroundStyle(.secondary) - Text("Failed to load plugin registry") - .font(.headline) + ContentUnavailableView { + Label("Failed to Load", systemImage: "wifi.slash") + } description: { Text(message) - .font(.caption) - .foregroundStyle(.secondary) + } actions: { Button("Try Again") { - Task { - await registryClient.fetchManifest(forceRefresh: true) - } + Task { await registryClient.fetchManifest(forceRefresh: true) } } .buttonStyle(.bordered) - Spacer() } - .frame(maxWidth: .infinity) + } + } + + // MARK: - Browse Row + + @ViewBuilder + private func browseRow(_ plugin: RegistryPlugin) -> some View { + HStack(spacing: 6) { + pluginIcon(plugin.iconName ?? "puzzlepiece") + .frame(width: 16) + .foregroundStyle(.secondary) + Text(plugin.name) + .lineLimit(1) + if plugin.isVerified { + Image(systemName: "checkmark.seal.fill") + .foregroundStyle(.blue) + .font(.caption2) + } + Spacer() + compactActionButton(for: plugin) + } + } + + // MARK: - Right Pane + + @ViewBuilder + private var browseDetailPane: some View { + if let selectedPlugin = selectedRegistryPlugin { + RegistryPluginDetailView( + plugin: selectedPlugin, + isInstalled: isPluginInstalled(selectedPlugin.id), + installProgress: installTracker.state(for: selectedPlugin.id), + downloadCount: downloadCountService.downloadCount(for: selectedPlugin.id), + onInstall: { installPlugin(selectedPlugin) } + ) + } else { + VStack(spacing: 8) { + Image(systemName: "puzzlepiece.extension") + .font(.system(size: 32)) + .foregroundStyle(.tertiary) + Text("Select a plugin to view details") + .font(.headline) + .foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + } + + // MARK: - Compact Action Button + + @ViewBuilder + private func compactActionButton(for plugin: RegistryPlugin) -> some View { + if isPluginInstalled(plugin.id) { + Text("Installed") + .font(.caption2) + .foregroundStyle(.secondary) + } else if let progress = installTracker.state(for: plugin.id) { + switch progress.phase { + case .downloading(let fraction): + ProgressView(value: fraction) + .frame(width: 40) + .progressViewStyle(.linear) + case .installing: + ProgressView() + .controlSize(.mini) + case .completed: + Image(systemName: "checkmark.circle.fill") + .foregroundStyle(.green) + .font(.caption) + case .failed: + Button("Retry") { installPlugin(plugin) } + .controlSize(.mini) + } + } else { + Button("Install") { installPlugin(plugin) } + .buttonStyle(.bordered) + .controlSize(.mini) + } + } + + // MARK: - Plugin Icon + + @ViewBuilder + private func pluginIcon(_ name: String) -> some View { + if NSImage(systemSymbolName: name, accessibilityDescription: nil) != nil { + Image(systemName: name) + } else { + Image(name) + .renderingMode(.template) } } @@ -193,31 +218,12 @@ struct BrowsePluginsView: View { } } } -} - -// MARK: - Filter Chip -private struct FilterChip: View { - let title: String - let isSelected: Bool - let action: () -> Void - - var body: some View { - Button(action: action) { - Text(title) - .font(.caption) - .padding(.horizontal, 10) - .padding(.vertical, 4) - .background( - isSelected ? Color.accentColor.opacity(0.15) : Color.clear, - in: RoundedRectangle(cornerRadius: 6) - ) - .overlay( - RoundedRectangle(cornerRadius: 6) - .stroke(isSelected ? Color.accentColor : Color.secondary.opacity(0.3), lineWidth: 1) - ) + private func clearSelectionIfNeeded() { + guard let selectedPluginId else { return } + let plugins = registryClient.search(query: searchText, category: selectedCategory) + if !plugins.contains(where: { $0.id == selectedPluginId }) { + self.selectedPluginId = nil } - .buttonStyle(.plain) - .foregroundStyle(isSelected ? .primary : .secondary) } } diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 307581a6..1861ee3e 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -18,53 +18,73 @@ struct InstalledPluginsView: View { @State private var dismissedRestartBanner = false var body: some View { - Form { + VStack(spacing: 0) { if pluginManager.needsRestart && !dismissedRestartBanner { - Section { - HStack(spacing: 8) { - Image(systemName: "arrow.clockwise.circle.fill") - .foregroundStyle(.orange) - Text("Restart TablePro to fully unload removed plugins.") - .font(.callout) - .foregroundStyle(.secondary) - Spacer() + HStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle") + .foregroundStyle(.yellow) + Text("Restart TablePro to fully unload removed plugins.") + .font(.callout) + Spacer() + Button("Dismiss") { dismissedRestartBanner = true } + .buttonStyle(.borderless) + .font(.callout) + } + .padding(.horizontal, 12) + .padding(.vertical, 6) + } + + HSplitView { + VStack(spacing: 0) { + List(selection: $selectedPluginId) { + ForEach(pluginManager.plugins) { plugin in + pluginRow(plugin) + .tag(plugin.id) + } + } + .listStyle(.inset(alternatesRowBackgrounds: true)) + + Divider() + + HStack(spacing: 0) { Button { - dismissedRestartBanner = true + installFromFile() } label: { - Image(systemName: "xmark") - .foregroundStyle(.secondary) + Image(systemName: "plus") + .frame(width: 24, height: 20) } - .buttonStyle(.plain) - } - } - } + .buttonStyle(.borderless) + .disabled(pluginManager.isInstalling) - Section("Installed Plugins") { - ForEach(pluginManager.plugins) { plugin in - pluginRow(plugin) - } - } + Divider().frame(height: 16) - Section { - HStack { - Button("Install from File...") { - installFromFile() - } - .disabled(pluginManager.isInstalling) + Button { + if let plugin = selectedPlugin { + uninstallPlugin(plugin) + } + } label: { + Image(systemName: "minus") + .frame(width: 24, height: 20) + } + .buttonStyle(.borderless) + .disabled(selectedPluginId == nil || selectedPlugin?.source == .builtIn) + + Spacer() - if pluginManager.isInstalling { - ProgressView() - .controlSize(.small) + if pluginManager.isInstalling { + ProgressView() + .controlSize(.small) + } } + .padding(.horizontal, 4) + .padding(.vertical, 2) } - } + .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) - if let selected = selectedPlugin { - pluginDetailSection(selected) + detailPane + .frame(minWidth: 340) } } - .formStyle(.grouped) - .scrollContentBackground(.hidden) .onDrop(of: [.fileURL], isTargeted: nil) { providers in guard let provider = providers.first, provider.hasItemConformingToTypeIdentifier(UTType.fileURL.identifier) else { @@ -92,48 +112,21 @@ struct InstalledPluginsView: View { @ViewBuilder private func pluginRow(_ plugin: PluginEntry) -> some View { - HStack { + HStack(spacing: 6) { pluginIcon(plugin.iconName) - .frame(width: 20) + .frame(width: 16) .foregroundStyle(plugin.isEnabled ? .primary : .tertiary) - - VStack(alignment: .leading, spacing: 2) { - Text(plugin.name) - .foregroundStyle(plugin.isEnabled ? .primary : .secondary) - - HStack(spacing: 4) { - Text("v\(plugin.version)") - .font(.caption) - .foregroundStyle(.secondary) - - Text(plugin.source == .builtIn ? "Built-in" : "User") - .font(.caption) - .padding(.horizontal, 4) - .padding(.vertical, 1) - .background( - plugin.source == .builtIn - ? Color.blue.opacity(0.15) - : Color.green.opacity(0.15), - in: RoundedRectangle(cornerRadius: 3) - ) - .foregroundStyle(plugin.source == .builtIn ? .blue : .green) - } - } - + Text(plugin.name) + .lineLimit(1) + .foregroundStyle(plugin.isEnabled ? .primary : .secondary) Spacer() - Toggle("", isOn: Binding( get: { plugin.isEnabled }, set: { pluginManager.setEnabled($0, pluginId: plugin.id) } )) .toggleStyle(.switch) .labelsHidden() - } - .contentShape(Rectangle()) - .onTapGesture { - withAnimation(.easeInOut(duration: 0.2)) { - selectedPluginId = selectedPluginId == plugin.id ? nil : plugin.id - } + .controlSize(.small) } } @@ -147,7 +140,7 @@ struct InstalledPluginsView: View { } } - // MARK: - Detail Section + // MARK: - Detail Pane private var selectedPlugin: PluginEntry? { guard let id = selectedPluginId else { return nil } @@ -155,52 +148,95 @@ struct InstalledPluginsView: View { } @ViewBuilder - private func pluginDetailSection(_ plugin: PluginEntry) -> some View { - Section(plugin.name) { - LabeledContent("Version:", value: plugin.version) - LabeledContent("Bundle ID:", value: plugin.id) - LabeledContent("Source:", value: plugin.source == .builtIn - ? String(localized: "Built-in") - : String(localized: "User-installed")) - - if !plugin.capabilities.isEmpty { - LabeledContent("Capabilities:") { - Text(plugin.capabilities.map(\.displayName).joined(separator: ", ")) - } - } + private var detailPane: some View { + if let selected = selectedPlugin { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + Text(selected.name) + .font(.title3.weight(.semibold)) + + Text("v\(selected.version) · \(selected.source == .builtIn ? String(localized: "Built-in") : String(localized: "User-installed"))") + .font(.subheadline) + .foregroundStyle(.secondary) - if let typeId = plugin.databaseTypeId { - LabeledContent("Database Type:", value: typeId) + if !selected.pluginDescription.isEmpty { + Text(selected.pluginDescription) + .font(.callout) + .foregroundStyle(.secondary) + } - if !plugin.additionalTypeIds.isEmpty { - LabeledContent("Also handles:", value: plugin.additionalTypeIds.joined(separator: ", ")) - } + Divider() - if let port = plugin.defaultPort { - LabeledContent("Default Port:", value: "\(port)") - } - } + Grid(alignment: .leading, horizontalSpacing: 16, verticalSpacing: 10) { + GridRow { + Text("Bundle ID") + .foregroundStyle(.secondary) + .gridColumnAlignment(.leading) + Text(selected.id) + .textSelection(.enabled) + .gridColumnAlignment(.leading) + } + + if !selected.capabilities.isEmpty { + GridRow { + Text("Capabilities") + .foregroundStyle(.secondary) + Text(selected.capabilities.map(\.displayName).joined(separator: ", ")) + } + } - if !plugin.pluginDescription.isEmpty { - Text(plugin.pluginDescription) + if let typeId = selected.databaseTypeId { + GridRow { + Text("Database Type") + .foregroundStyle(.secondary) + Text(typeId) + } + + if !selected.additionalTypeIds.isEmpty { + GridRow { + Text("Also handles") + .foregroundStyle(.secondary) + Text(selected.additionalTypeIds.joined(separator: ", ")) + } + } + + if let port = selected.defaultPort { + GridRow { + Text("Default Port") + .foregroundStyle(.secondary) + Text("\(port)") + } + } + } + } .font(.callout) - .foregroundStyle(.secondary) - } - if let settable = pluginManager.pluginInstances[plugin.id] as? any SettablePluginDiscoverable, - let pluginSettings = settable.settingsView() { - Divider() - pluginSettings - } + if let settable = pluginManager.pluginInstances[selected.id] as? any SettablePluginDiscoverable, + let pluginSettings = settable.settingsView() { + Divider() + pluginSettings + } - if plugin.source == .userInstalled { - HStack { - Spacer() - Button("Uninstall", role: .destructive) { - uninstallPlugin(plugin) + if selected.source == .userInstalled { + Divider() + Button("Uninstall", role: .destructive) { + uninstallPlugin(selected) + } } } + .padding(20) + .frame(maxWidth: .infinity, alignment: .leading) + } + } else { + VStack(spacing: 8) { + Image(systemName: "puzzlepiece.extension") + .font(.system(size: 32)) + .foregroundStyle(.tertiary) + Text("Select a Plugin") + .font(.headline) + .foregroundStyle(.secondary) } + .frame(maxWidth: .infinity, maxHeight: .infinity) } } @@ -269,5 +305,5 @@ private extension PluginCapability { #Preview { InstalledPluginsView() - .frame(width: 550, height: 500) + .frame(width: 650, height: 500) } diff --git a/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift b/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift index 16e11041..409529ac 100644 --- a/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift +++ b/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift @@ -13,62 +13,85 @@ struct RegistryPluginDetailView: View { let onInstall: () -> Void var body: some View { - VStack(alignment: .leading, spacing: 10) { - Text(plugin.summary) - .font(.callout) - .foregroundStyle(.secondary) + ScrollView { + VStack(alignment: .leading, spacing: 16) { + Text(plugin.name) + .font(.title3.weight(.semibold)) - HStack(spacing: 16) { - detailItem(label: "Category", value: plugin.category.displayName) + Text(plugin.summary) + .font(.callout) + .foregroundStyle(.secondary) - if let minVersion = plugin.minAppVersion { - detailItem(label: "Requires", value: "v\(minVersion)+") - } + Divider() - if let downloadCount { - detailItem( - label: String(localized: "Downloads"), - value: formattedDownloadCount(downloadCount) - ) - } - } + Grid(alignment: .leading, horizontalSpacing: 16, verticalSpacing: 10) { + GridRow { + Text("Category") + .foregroundStyle(.secondary) + .gridColumnAlignment(.leading) + Text(plugin.category.displayName) + .gridColumnAlignment(.leading) + } + + GridRow { + Text("Author") + .foregroundStyle(.secondary) + Text(plugin.author.name) + } + + GridRow { + Text("Version") + .foregroundStyle(.secondary) + Text(plugin.version) + } - HStack(spacing: 16) { - detailItem(label: "Author", value: plugin.author.name) + if let minVersion = plugin.minAppVersion { + GridRow { + Text("Requires") + .foregroundStyle(.secondary) + Text("v\(minVersion)+") + } + } - if let homepage = plugin.homepage, let url = URL(string: homepage) { - Link(destination: url) { - HStack(spacing: 2) { + if let count = downloadCount { + GridRow { + Text("Downloads") + .foregroundStyle(.secondary) + Text(formattedCount(count)) + } + } + + if let homepage = plugin.homepage, let url = URL(string: homepage) { + GridRow { Text("Homepage") - .font(.caption) - Image(systemName: "arrow.up.right.square") - .font(.caption2) + .foregroundStyle(.secondary) + Link(homepage, destination: url) + .lineLimit(1) + .truncationMode(.middle) } } - } - } - if plugin.isVerified { - HStack(spacing: 4) { - Image(systemName: "checkmark.seal.fill") - .foregroundStyle(.blue) - .font(.caption) - Text("Verified by TablePro") - .font(.caption) - .foregroundStyle(.blue) + if plugin.isVerified { + GridRow { + Text("Status") + .foregroundStyle(.secondary) + Label("Verified", systemImage: "checkmark.seal.fill") + .foregroundStyle(.blue) + } + } } - } + .font(.callout) - if !isInstalled, installProgress == nil { - Button("Install Plugin") { - onInstall() + if !isInstalled, installProgress == nil { + Divider() + Button("Install Plugin") { onInstall() } + .buttonStyle(.borderedProminent) + .controlSize(.regular) } - .buttonStyle(.borderedProminent) - .controlSize(.small) } + .padding(20) + .frame(maxWidth: .infinity, alignment: .leading) } - .padding(.leading, 34) - .padding(.vertical, 8) } private static let decimalFormatter: NumberFormatter = { @@ -77,19 +100,10 @@ struct RegistryPluginDetailView: View { return formatter }() - private func formattedDownloadCount(_ count: Int) -> String { - Self.decimalFormatter.string(from: NSNumber(value: count)) ?? "\(count)" - } - - @ViewBuilder - private func detailItem(label: String, value: String) -> some View { - VStack(alignment: .leading, spacing: 2) { - Text(label) - .font(.caption2) - .foregroundStyle(.tertiary) - .textCase(.uppercase) - Text(value) - .font(.caption) - } + private func formattedCount(_ count: Int) -> String { + let formatted = Self.decimalFormatter.string(from: NSNumber(value: count)) ?? "\(count)" + return count == 1 + ? String(localized: "\(formatted) download") + : String(localized: "\(formatted) downloads") } } diff --git a/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift b/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift index e103ba9a..9ef21093 100644 --- a/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift +++ b/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift @@ -9,9 +9,7 @@ struct RegistryPluginRow: View { let plugin: RegistryPlugin let isInstalled: Bool let installProgress: InstallProgress? - let downloadCount: Int? let onInstall: () -> Void - let onToggleDetail: () -> Void var body: some View { HStack(spacing: 10) { @@ -31,29 +29,9 @@ struct RegistryPluginRow: View { } } - HStack(spacing: 6) { - Text("v\(plugin.version)") - .font(.caption) - .foregroundStyle(.secondary) - - Text("\u{2022}") - .font(.caption2) - .foregroundStyle(.quaternary) - - Text(plugin.author.name) - .font(.caption) - .foregroundStyle(.secondary) - - if let downloadCount { - Text("\u{2022}") - .font(.caption2) - .foregroundStyle(.quaternary) - - Text(formattedCount(downloadCount)) - .font(.caption) - .foregroundStyle(.secondary) - } - } + Text("v\(plugin.version) · \(plugin.author.name)") + .font(.caption) + .foregroundStyle(.secondary) } Spacer() @@ -61,10 +39,6 @@ struct RegistryPluginRow: View { actionButton } .padding(.vertical, 8) - .contentShape(Rectangle()) - .onTapGesture { - onToggleDetail() - } } @ViewBuilder @@ -77,19 +51,6 @@ struct RegistryPluginRow: View { } } - private static let decimalFormatter: NumberFormatter = { - let formatter = NumberFormatter() - formatter.numberStyle = .decimal - return formatter - }() - - private func formattedCount(_ count: Int) -> String { - let formatted = Self.decimalFormatter.string(from: NSNumber(value: count)) ?? "\(count)" - return count == 1 - ? String(localized: "\(formatted) download") - : String(localized: "\(formatted) downloads") - } - @ViewBuilder private var actionButton: some View { if isInstalled { diff --git a/TablePro/Views/Settings/SettingsView.swift b/TablePro/Views/Settings/SettingsView.swift index fe0c8882..355aa5f7 100644 --- a/TablePro/Views/Settings/SettingsView.swift +++ b/TablePro/Views/Settings/SettingsView.swift @@ -74,7 +74,7 @@ struct SettingsView: View { } .tag(SettingsTab.license.rawValue) } - .frame(width: 620, height: 500) + .frame(width: 720, height: 500) } } From 1de2c0ddc6248f2e00ad813322b684627edc416c Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 20:36:51 +0700 Subject: [PATCH 02/16] docs: add CHANGELOG entry and update plugin settings docs for HSplitView layout --- CHANGELOG.md | 1 + docs/customization/settings.mdx | 14 +++++++++++--- docs/vi/customization/settings.mdx | 14 +++++++++++--- docs/zh/customization/settings.mdx | 14 +++++++++++--- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8e5c2d3..5f1d95b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Redesigned Plugins settings tab with HSplitView master-detail layout: plugin list on the left, detail pane on the right, matching macOS conventions - Replaced ~40 hardcoded `DatabaseType` switches across ~20 UI files with dynamic plugin property lookups via `PluginManager`, so third-party plugins get correct UI behavior (colors, labels, editor language, feature toggles) automatically - ConnectionFormView now fully dynamic: pgpass toggle, password visibility, and SSH/SSL tab visibility all driven by plugin metadata (`FieldSection`, `hidesPassword`, `supportsSSH`/`supportsSSL`) instead of hardcoded type checks - Replaced `AppState.isMongoDB`/`isRedis` booleans with `AppState.editorLanguage: EditorLanguage` for extensible editor language detection diff --git a/docs/customization/settings.mdx b/docs/customization/settings.mdx index e8f5fdef..3f3d99c3 100644 --- a/docs/customization/settings.mdx +++ b/docs/customization/settings.mdx @@ -372,6 +372,8 @@ Manage database driver plugins from the **Plugins** tab in Settings. ### Installed Plugins +The Installed tab uses a split-view layout: the plugin list on the left, and the detail pane on the right. + TablePro ships with 8 built-in database driver plugins: | Plugin | Database Types | Default Port | @@ -389,21 +391,27 @@ Each plugin has a toggle to enable or disable it. Disabled plugins hide their da ### Plugin Details -Click a plugin to view its details: version, bundle ID, supported capabilities, database type, and default port. Driver plugins can provide custom settings panels that appear in this detail view. +Select a plugin in the list to view its details in the right pane: version, bundle ID, supported capabilities, database type, and default port. Driver plugins can provide custom settings panels that appear in this detail view. + +### Browse Plugins + +The Browse tab also uses a split-view layout. Search and filter plugins by category using the controls at the top. Select a plugin in the list to view its full details and install it from the right pane. ### Installing Third-Party Plugins -1. Click **Install from File...** +1. Click the **+** button below the plugin list 2. Select a `.zip` archive containing a `.tableplugin` bundle 3. TablePro verifies the code signature and installs the plugin +You can also drag and drop a `.tableplugin` or `.zip` file onto the Plugins settings view to install it. + Only install plugins from sources you trust. TablePro checks the code signature of sideloaded plugins but cannot guarantee their behavior. ### Uninstalling Plugins -User-installed plugins show an **Uninstall** button in the plugin details view. Built-in plugins cannot be uninstalled, only disabled. +Select a user-installed plugin and click the **-** button below the list, or use the **Uninstall** button in the detail pane. Built-in plugins cannot be uninstalled, only disabled. ### Advanced Settings diff --git a/docs/vi/customization/settings.mdx b/docs/vi/customization/settings.mdx index a4d589ba..6ffa91eb 100644 --- a/docs/vi/customization/settings.mdx +++ b/docs/vi/customization/settings.mdx @@ -370,6 +370,8 @@ Quản lý plugin driver database từ tab **Plugins** trong Settings. ### Plugin Đã cài +Tab Installed sử dụng bố cục chia đôi: danh sách plugin bên trái và chi tiết bên phải. + TablePro đi kèm 8 plugin driver database tích hợp sẵn: | Plugin | Loại Database | Cổng Mặc định | @@ -387,21 +389,27 @@ Mỗi plugin có nút bật/tắt. Plugin bị tắt sẽ ẩn loại database k ### Chi tiết Plugin -Click vào plugin để xem chi tiết: phiên bản, bundle ID, khả năng hỗ trợ, loại database và cổng mặc định. Driver plugin có thể cung cấp panel cài đặt tùy chỉnh riêng, hiển thị trong phần chi tiết plugin. +Chọn plugin trong danh sách để xem chi tiết ở khung bên phải: phiên bản, bundle ID, khả năng hỗ trợ, loại database và cổng mặc định. Driver plugin có thể cung cấp panel cài đặt tùy chỉnh riêng, hiển thị trong phần chi tiết plugin. + +### Duyệt Plugin + +Tab Browse cũng sử dụng bố cục chia đôi. Tìm kiếm và lọc plugin theo danh mục bằng các điều khiển ở phía trên. Chọn plugin trong danh sách để xem chi tiết đầy đủ và cài đặt từ khung bên phải. ### Cài đặt Plugin Bên thứ ba -1. Nhấp **Install from File...** +1. Nhấp nút **+** bên dưới danh sách plugin 2. Chọn file `.zip` chứa bundle `.tableplugin` 3. TablePro xác minh chữ ký mã và cài đặt plugin +Bạn cũng có thể kéo thả file `.tableplugin` hoặc `.zip` vào cửa sổ cài đặt Plugins để cài đặt. + Chỉ cài plugin từ nguồn đáng tin cậy. TablePro kiểm tra chữ ký mã của plugin sideload nhưng không đảm bảo hành vi của chúng. ### Gỡ cài đặt Plugin -Plugin do người dùng cài hiện nút **Uninstall** trong chi tiết plugin. Plugin tích hợp sẵn không thể gỡ, chỉ có thể tắt. +Chọn plugin do người dùng cài và nhấp nút **-** bên dưới danh sách, hoặc dùng nút **Uninstall** trong khung chi tiết. Plugin tích hợp sẵn không thể gỡ, chỉ có thể tắt. ### Cài Đặt Nâng Cao diff --git a/docs/zh/customization/settings.mdx b/docs/zh/customization/settings.mdx index e714a56b..d1f39665 100644 --- a/docs/zh/customization/settings.mdx +++ b/docs/zh/customization/settings.mdx @@ -359,6 +359,8 @@ TablePro 使用 [Sparkle](https://sparkle-project.org/) 进行更新。当有可 ### 已安装插件 +"已安装"标签页使用分栏布局:左侧为插件列表,右侧为详情面板。 + TablePro 内置 8 个数据库驱动插件: | 插件 | 数据库类型 | 默认端口 | @@ -376,21 +378,27 @@ TablePro 内置 8 个数据库驱动插件: ### 插件详情 -点击插件查看详情:版本、Bundle ID、支持的功能、数据库类型和默认端口。驱动插件还可以提供自定义设置面板,用于配置特定于该驱动的选项。 +在列表中选择插件即可在右侧面板查看详情:版本、Bundle ID、支持的功能、数据库类型和默认端口。驱动插件还可以提供自定义设置面板,用于配置特定于该驱动的选项。 + +### 浏览插件 + +"浏览"标签页同样使用分栏布局。使用顶部的搜索和分类筛选控件查找插件。在列表中选择插件即可查看完整详情并从右侧面板安装。 ### 安装第三方插件 -1. 点击 **Install from File...** +1. 点击插件列表下方的 **+** 按钮 2. 选择包含 `.tableplugin` 包的 `.zip` 压缩文件 3. TablePro 验证代码签名并安装插件 +也可以将 `.tableplugin` 或 `.zip` 文件拖放到插件设置窗口进行安装。 + 只安装来自你信任的来源的插件。TablePro 会检查侧载插件的代码签名,但无法保证其行为。 ### 卸载插件 -用户安装的插件在插件详情视图中显示 **Uninstall** 按钮。内置插件不能卸载,只能禁用。 +选择用户安装的插件后点击列表下方的 **-** 按钮,或使用详情面板中的 **Uninstall** 按钮。内置插件不能卸载,只能禁用。 ### 高级设置 From 1972a6ce7f900259e5390a66e812957ac6f44c16 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 21:19:34 +0700 Subject: [PATCH 03/16] fix: address PR review feedback from CodeRabbit --- TablePro/Resources/Localizable.xcstrings | 18 ++++++++ .../Settings/Plugins/BrowsePluginsView.swift | 5 ++- .../Plugins/InstalledPluginsView.swift | 2 + .../Plugins/RegistryPluginDetailView.swift | 45 ++++++++++++++++--- docs/customization/settings.mdx | 6 +-- docs/vi/customization/settings.mdx | 6 +-- docs/zh/customization/settings.mdx | 4 +- 7 files changed, 72 insertions(+), 14 deletions(-) diff --git a/TablePro/Resources/Localizable.xcstrings b/TablePro/Resources/Localizable.xcstrings index ff4ca1bc..f85cbe48 100644 --- a/TablePro/Resources/Localizable.xcstrings +++ b/TablePro/Resources/Localizable.xcstrings @@ -864,6 +864,9 @@ } } } + }, + "%lld%%" : { + }, "%lldm %llds" : { "localizations" : { @@ -8637,6 +8640,9 @@ } } } + }, + "Install plugin from file" : { + }, "Installation Failed" : { "localizations" : { @@ -8686,6 +8692,9 @@ } } } + }, + "Installing..." : { + }, "Invalid argument: %@" : { "extractionState" : "stale", @@ -13469,6 +13478,9 @@ } } } + }, + "Retry Install" : { + }, "Reuse clean table tab" : { "extractionState" : "stale", @@ -16752,6 +16764,9 @@ } } } + }, + "Uninstall %@" : { + }, "Uninstall Failed" : { "localizations" : { @@ -16768,6 +16783,9 @@ } } } + }, + "Uninstall plugin" : { + }, "Uninstall Plugin?" : { "localizations" : { diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index 0fcd13f3..f6b8c2d6 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -98,7 +98,10 @@ struct BrowsePluginsView: View { Text(message) } actions: { Button("Try Again") { - Task { await registryClient.fetchManifest(forceRefresh: true) } + Task { + await registryClient.fetchManifest(forceRefresh: true) + await downloadCountService.fetchCounts(for: registryClient.manifest) + } } .buttonStyle(.bordered) } diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 1861ee3e..94094962 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -55,6 +55,7 @@ struct InstalledPluginsView: View { } .buttonStyle(.borderless) .disabled(pluginManager.isInstalling) + .accessibilityLabel(String(localized: "Install plugin from file")) Divider().frame(height: 16) @@ -68,6 +69,7 @@ struct InstalledPluginsView: View { } .buttonStyle(.borderless) .disabled(selectedPluginId == nil || selectedPlugin?.source == .builtIn) + .accessibilityLabel(selectedPlugin.map { String(localized: "Uninstall \($0.name)") } ?? String(localized: "Uninstall plugin")) Spacer() diff --git a/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift b/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift index 409529ac..cabe1ca5 100644 --- a/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift +++ b/TablePro/Views/Settings/Plugins/RegistryPluginDetailView.swift @@ -61,7 +61,8 @@ struct RegistryPluginDetailView: View { } } - if let homepage = plugin.homepage, let url = URL(string: homepage) { + if let homepage = plugin.homepage, let url = URL(string: homepage), + let scheme = url.scheme?.lowercased(), scheme == "http" || scheme == "https" { GridRow { Text("Homepage") .foregroundStyle(.secondary) @@ -82,11 +83,9 @@ struct RegistryPluginDetailView: View { } .font(.callout) - if !isInstalled, installProgress == nil { + if !isInstalled { Divider() - Button("Install Plugin") { onInstall() } - .buttonStyle(.borderedProminent) - .controlSize(.regular) + installActionView } } .padding(20) @@ -94,6 +93,42 @@ struct RegistryPluginDetailView: View { } } + @ViewBuilder + private var installActionView: some View { + if let progress = installProgress { + switch progress.phase { + case .downloading(let fraction): + HStack(spacing: 8) { + ProgressView(value: fraction) + Text("\(Int(fraction * 100))%") + .font(.callout) + .foregroundStyle(.secondary) + .monospacedDigit() + } + case .installing: + HStack(spacing: 8) { + ProgressView() + .controlSize(.small) + Text("Installing...") + .font(.callout) + .foregroundStyle(.secondary) + } + case .completed: + Label("Installed", systemImage: "checkmark.circle.fill") + .foregroundStyle(.green) + .font(.callout) + case .failed: + Button("Retry Install") { onInstall() } + .buttonStyle(.borderedProminent) + .controlSize(.regular) + } + } else { + Button("Install Plugin") { onInstall() } + .buttonStyle(.borderedProminent) + .controlSize(.regular) + } + } + private static let decimalFormatter: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal diff --git a/docs/customization/settings.mdx b/docs/customization/settings.mdx index 3f3d99c3..68ac329c 100644 --- a/docs/customization/settings.mdx +++ b/docs/customization/settings.mdx @@ -372,7 +372,7 @@ Manage database driver plugins from the **Plugins** tab in Settings. ### Installed Plugins -The Installed tab uses a split-view layout: the plugin list on the left, and the detail pane on the right. +The **Installed** tab uses a split-view layout: the plugin list on the left, and the detail pane on the right. TablePro ships with 8 built-in database driver plugins: @@ -393,9 +393,9 @@ Each plugin has a toggle to enable or disable it. Disabled plugins hide their da Select a plugin in the list to view its details in the right pane: version, bundle ID, supported capabilities, database type, and default port. Driver plugins can provide custom settings panels that appear in this detail view. -### Browse Plugins +### Browse plugins -The Browse tab also uses a split-view layout. Search and filter plugins by category using the controls at the top. Select a plugin in the list to view its full details and install it from the right pane. +The **Browse** tab also uses a split-view layout. Search and filter plugins by category using the controls at the top. Select a plugin in the list to view its full details and install it from the right pane. ### Installing Third-Party Plugins diff --git a/docs/vi/customization/settings.mdx b/docs/vi/customization/settings.mdx index 6ffa91eb..cc5d9eb9 100644 --- a/docs/vi/customization/settings.mdx +++ b/docs/vi/customization/settings.mdx @@ -370,7 +370,7 @@ Quản lý plugin driver database từ tab **Plugins** trong Settings. ### Plugin Đã cài -Tab Installed sử dụng bố cục chia đôi: danh sách plugin bên trái và chi tiết bên phải. +Tab **Installed** sử dụng bố cục chia đôi: danh sách plugin bên trái và chi tiết bên phải. TablePro đi kèm 8 plugin driver database tích hợp sẵn: @@ -391,9 +391,9 @@ Mỗi plugin có nút bật/tắt. Plugin bị tắt sẽ ẩn loại database k Chọn plugin trong danh sách để xem chi tiết ở khung bên phải: phiên bản, bundle ID, khả năng hỗ trợ, loại database và cổng mặc định. Driver plugin có thể cung cấp panel cài đặt tùy chỉnh riêng, hiển thị trong phần chi tiết plugin. -### Duyệt Plugin +### Duyệt plugin -Tab Browse cũng sử dụng bố cục chia đôi. Tìm kiếm và lọc plugin theo danh mục bằng các điều khiển ở phía trên. Chọn plugin trong danh sách để xem chi tiết đầy đủ và cài đặt từ khung bên phải. +Tab **Browse** cũng sử dụng bố cục chia đôi. Tìm kiếm và lọc plugin theo danh mục bằng các điều khiển ở phía trên. Chọn plugin trong danh sách để xem chi tiết đầy đủ và cài đặt từ khung bên phải. ### Cài đặt Plugin Bên thứ ba diff --git a/docs/zh/customization/settings.mdx b/docs/zh/customization/settings.mdx index d1f39665..60552489 100644 --- a/docs/zh/customization/settings.mdx +++ b/docs/zh/customization/settings.mdx @@ -359,7 +359,7 @@ TablePro 使用 [Sparkle](https://sparkle-project.org/) 进行更新。当有可 ### 已安装插件 -"已安装"标签页使用分栏布局:左侧为插件列表,右侧为详情面板。 +**已安装**标签页使用分栏布局:左侧为插件列表,右侧为详情面板。 TablePro 内置 8 个数据库驱动插件: @@ -382,7 +382,7 @@ TablePro 内置 8 个数据库驱动插件: ### 浏览插件 -"浏览"标签页同样使用分栏布局。使用顶部的搜索和分类筛选控件查找插件。在列表中选择插件即可查看完整详情并从右侧面板安装。 +**浏览**标签页同样使用分栏布局。使用顶部的搜索和分类筛选控件查找插件。在列表中选择插件即可查看完整详情并从右侧面板安装。 ### 安装第三方插件 From e34177c49223dabd924e4c07cfe79465e00dfef9 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 22:55:16 +0700 Subject: [PATCH 04/16] fix: clear needsRestart flag before early return guard in loadPendingPlugins --- TablePro/Core/Plugins/PluginManager.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TablePro/Core/Plugins/PluginManager.swift b/TablePro/Core/Plugins/PluginManager.swift index e9e74bb6..742ed6d6 100644 --- a/TablePro/Core/Plugins/PluginManager.swift +++ b/TablePro/Core/Plugins/PluginManager.swift @@ -111,6 +111,9 @@ final class PluginManager { /// Load all discovered but not-yet-loaded plugin bundles. /// Safety fallback for code paths that need plugins before the deferred Task completes. func loadPendingPlugins(clearRestartFlag: Bool = false) { + if clearRestartFlag { + _needsRestart = false + } guard !pendingPluginURLs.isEmpty else { return } let pending = pendingPluginURLs pendingPluginURLs.removeAll() @@ -124,9 +127,6 @@ final class PluginManager { } validateDependencies() - if clearRestartFlag { - _needsRestart = false - } Self.logger.info("Loaded \(self.plugins.count) plugin(s): \(self.driverPlugins.count) driver(s), \(self.exportPlugins.count) export format(s), \(self.importPlugins.count) import format(s)") } From 635b03b0f513fdef38020f12731de2c666de7453 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:00:25 +0700 Subject: [PATCH 05/16] refactor: replace HSplitView with NavigationSplitView for modern macOS feel --- .../Settings/Plugins/BrowsePluginsView.swift | 29 ++-- .../Plugins/InstalledPluginsView.swift | 138 ++++++++++-------- 2 files changed, 88 insertions(+), 79 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index f6b8c2d6..6b813866 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -41,12 +41,11 @@ struct BrowsePluginsView: View { Divider() - HSplitView { - browseLeftPane - .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) - - browseDetailPane - .frame(minWidth: 340) + NavigationSplitView { + sidebarContent + .navigationSplitViewColumnWidth(min: 200, ideal: 240, max: 280) + } detail: { + detailContent } } .task { @@ -68,10 +67,10 @@ struct BrowsePluginsView: View { } } - // MARK: - Left Pane + // MARK: - Sidebar @ViewBuilder - private var browseLeftPane: some View { + private var sidebarContent: some View { switch registryClient.fetchState { case .idle, .loading: ProgressView() @@ -82,13 +81,11 @@ struct BrowsePluginsView: View { if plugins.isEmpty { ContentUnavailableView.search(text: searchText) } else { - List(selection: $selectedPluginId) { - ForEach(plugins) { plugin in - browseRow(plugin) - .tag(plugin.id) - } + List(plugins, selection: $selectedPluginId) { plugin in + browseRow(plugin) + .tag(plugin.id) } - .listStyle(.inset(alternatesRowBackgrounds: true)) + .listStyle(.sidebar) } case .failed(let message): @@ -128,10 +125,10 @@ struct BrowsePluginsView: View { } } - // MARK: - Right Pane + // MARK: - Detail @ViewBuilder - private var browseDetailPane: some View { + private var detailContent: some View { if let selectedPlugin = selectedRegistryPlugin { RegistryPluginDetailView( plugin: selectedPlugin, diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 94094962..66917620 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -1,7 +1,6 @@ // // InstalledPluginsView.swift // TablePro -// import AppKit import SwiftUI @@ -20,71 +19,14 @@ struct InstalledPluginsView: View { var body: some View { VStack(spacing: 0) { if pluginManager.needsRestart && !dismissedRestartBanner { - HStack(spacing: 8) { - Image(systemName: "exclamationmark.triangle") - .foregroundStyle(.yellow) - Text("Restart TablePro to fully unload removed plugins.") - .font(.callout) - Spacer() - Button("Dismiss") { dismissedRestartBanner = true } - .buttonStyle(.borderless) - .font(.callout) - } - .padding(.horizontal, 12) - .padding(.vertical, 6) + restartBanner } - HSplitView { - VStack(spacing: 0) { - List(selection: $selectedPluginId) { - ForEach(pluginManager.plugins) { plugin in - pluginRow(plugin) - .tag(plugin.id) - } - } - .listStyle(.inset(alternatesRowBackgrounds: true)) - - Divider() - - HStack(spacing: 0) { - Button { - installFromFile() - } label: { - Image(systemName: "plus") - .frame(width: 24, height: 20) - } - .buttonStyle(.borderless) - .disabled(pluginManager.isInstalling) - .accessibilityLabel(String(localized: "Install plugin from file")) - - Divider().frame(height: 16) - - Button { - if let plugin = selectedPlugin { - uninstallPlugin(plugin) - } - } label: { - Image(systemName: "minus") - .frame(width: 24, height: 20) - } - .buttonStyle(.borderless) - .disabled(selectedPluginId == nil || selectedPlugin?.source == .builtIn) - .accessibilityLabel(selectedPlugin.map { String(localized: "Uninstall \($0.name)") } ?? String(localized: "Uninstall plugin")) - - Spacer() - - if pluginManager.isInstalling { - ProgressView() - .controlSize(.small) - } - } - .padding(.horizontal, 4) - .padding(.vertical, 2) - } - .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) - + NavigationSplitView { + pluginList + .navigationSplitViewColumnWidth(min: 200, ideal: 240, max: 280) + } detail: { detailPane - .frame(minWidth: 340) } } .onDrop(of: [.fileURL], isTargeted: nil) { providers in @@ -110,6 +52,76 @@ struct InstalledPluginsView: View { } } + // MARK: - Restart Banner + + private var restartBanner: some View { + HStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle") + .foregroundStyle(.yellow) + Text("Restart TablePro to fully unload removed plugins.") + .font(.callout) + Spacer() + Button("Dismiss") { dismissedRestartBanner = true } + .buttonStyle(.borderless) + .font(.callout) + } + .padding(.horizontal, 12) + .padding(.vertical, 6) + } + + // MARK: - Plugin List + + private var pluginList: some View { + List(selection: $selectedPluginId) { + ForEach(pluginManager.plugins) { plugin in + pluginRow(plugin) + .tag(plugin.id) + } + } + .listStyle(.sidebar) + .safeAreaInset(edge: .bottom, spacing: 0) { + listBottomBar + } + } + + private var listBottomBar: some View { + HStack(spacing: 4) { + Button { + installFromFile() + } label: { + Image(systemName: "plus") + .frame(width: 24, height: 20) + } + .buttonStyle(.borderless) + .disabled(pluginManager.isInstalling) + .accessibilityLabel(String(localized: "Install plugin from file")) + + Button { + if let plugin = selectedPlugin { + uninstallPlugin(plugin) + } + } label: { + Image(systemName: "minus") + .frame(width: 24, height: 20) + } + .buttonStyle(.borderless) + .disabled(selectedPluginId == nil || selectedPlugin?.source == .builtIn) + .accessibilityLabel( + selectedPlugin.map { String(localized: "Uninstall \($0.name)") } + ?? String(localized: "Uninstall plugin") + ) + + Spacer() + + if pluginManager.isInstalling { + ProgressView() + .controlSize(.small) + } + } + .padding(.horizontal, 8) + .padding(.vertical, 6) + } + // MARK: - Plugin Row @ViewBuilder From 16a5435ab780e31c7569307f6ec7dc5fb1446ae5 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:02:28 +0700 Subject: [PATCH 06/16] fix: revert NavigationSplitView to HSplitView to fix settings layout --- TablePro/Views/Settings/Plugins/BrowsePluginsView.swift | 9 +++++---- .../Views/Settings/Plugins/InstalledPluginsView.swift | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index 6b813866..0942b36d 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -41,11 +41,12 @@ struct BrowsePluginsView: View { Divider() - NavigationSplitView { + HSplitView { sidebarContent - .navigationSplitViewColumnWidth(min: 200, ideal: 240, max: 280) - } detail: { + .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) + detailContent + .frame(minWidth: 340) } } .task { @@ -85,7 +86,7 @@ struct BrowsePluginsView: View { browseRow(plugin) .tag(plugin.id) } - .listStyle(.sidebar) + .listStyle(.inset(alternatesRowBackgrounds: true)) } case .failed(let message): diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 66917620..277eef47 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -22,11 +22,12 @@ struct InstalledPluginsView: View { restartBanner } - NavigationSplitView { + HSplitView { pluginList - .navigationSplitViewColumnWidth(min: 200, ideal: 240, max: 280) - } detail: { + .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) + detailPane + .frame(minWidth: 340) } } .onDrop(of: [.fileURL], isTargeted: nil) { providers in @@ -78,7 +79,7 @@ struct InstalledPluginsView: View { .tag(plugin.id) } } - .listStyle(.sidebar) + .listStyle(.inset(alternatesRowBackgrounds: true)) .safeAreaInset(edge: .bottom, spacing: 0) { listBottomBar } From 29a1eb3464494956814e8a71aa68ea1f78191c01 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:05:04 +0700 Subject: [PATCH 07/16] refactor: move enable/disable toggle from list rows to detail pane --- .../Plugins/InstalledPluginsView.swift | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 277eef47..3b0f1fe8 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -134,14 +134,6 @@ struct InstalledPluginsView: View { Text(plugin.name) .lineLimit(1) .foregroundStyle(plugin.isEnabled ? .primary : .secondary) - Spacer() - Toggle("", isOn: Binding( - get: { plugin.isEnabled }, - set: { pluginManager.setEnabled($0, pluginId: plugin.id) } - )) - .toggleStyle(.switch) - .labelsHidden() - .controlSize(.small) } } @@ -167,8 +159,18 @@ struct InstalledPluginsView: View { if let selected = selectedPlugin { ScrollView { VStack(alignment: .leading, spacing: 16) { - Text(selected.name) - .font(.title3.weight(.semibold)) + HStack { + Text(selected.name) + .font(.title3.weight(.semibold)) + Spacer() + Toggle("", isOn: Binding( + get: { selected.isEnabled }, + set: { pluginManager.setEnabled($0, pluginId: selected.id) } + )) + .toggleStyle(.switch) + .labelsHidden() + .controlSize(.small) + } Text("v\(selected.version) · \(selected.source == .builtIn ? String(localized: "Built-in") : String(localized: "User-installed"))") .font(.subheadline) From dc2134a05f8c6ea7c662cb23d8339c1eb6084b0d Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:07:01 +0700 Subject: [PATCH 08/16] refactor: remove compact install button from browse list rows --- .../Settings/Plugins/BrowsePluginsView.swift | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index 0942b36d..fb48bfdd 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -121,8 +121,6 @@ struct BrowsePluginsView: View { .foregroundStyle(.blue) .font(.caption2) } - Spacer() - compactActionButton(for: plugin) } } @@ -151,38 +149,6 @@ struct BrowsePluginsView: View { } } - // MARK: - Compact Action Button - - @ViewBuilder - private func compactActionButton(for plugin: RegistryPlugin) -> some View { - if isPluginInstalled(plugin.id) { - Text("Installed") - .font(.caption2) - .foregroundStyle(.secondary) - } else if let progress = installTracker.state(for: plugin.id) { - switch progress.phase { - case .downloading(let fraction): - ProgressView(value: fraction) - .frame(width: 40) - .progressViewStyle(.linear) - case .installing: - ProgressView() - .controlSize(.mini) - case .completed: - Image(systemName: "checkmark.circle.fill") - .foregroundStyle(.green) - .font(.caption) - case .failed: - Button("Retry") { installPlugin(plugin) } - .controlSize(.mini) - } - } else { - Button("Install") { installPlugin(plugin) } - .buttonStyle(.bordered) - .controlSize(.mini) - } - } - // MARK: - Plugin Icon @ViewBuilder From 2de2a6441438a77835aa1a5a2be7f7d6a946ac65 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:07:56 +0700 Subject: [PATCH 09/16] feat: add search filter to installed plugins list --- .../Plugins/InstalledPluginsView.swift | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 3b0f1fe8..75a6f43d 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -11,11 +11,17 @@ struct InstalledPluginsView: View { private let pluginManager = PluginManager.shared @State private var selectedPluginId: String? + @State private var searchText = "" @State private var showErrorAlert = false @State private var errorAlertTitle = "" @State private var errorAlertMessage = "" @State private var dismissedRestartBanner = false + private var filteredPlugins: [PluginEntry] { + if searchText.isEmpty { return pluginManager.plugins } + return pluginManager.plugins.filter { $0.name.localizedCaseInsensitiveContains(searchText) } + } + var body: some View { VStack(spacing: 0) { if pluginManager.needsRestart && !dismissedRestartBanner { @@ -73,15 +79,27 @@ struct InstalledPluginsView: View { // MARK: - Plugin List private var pluginList: some View { - List(selection: $selectedPluginId) { - ForEach(pluginManager.plugins) { plugin in - pluginRow(plugin) - .tag(plugin.id) + VStack(spacing: 0) { + TextField("Filter...", text: $searchText) + .textFieldStyle(.roundedBorder) + .padding(.horizontal, 8) + .padding(.vertical, 6) + + List(selection: $selectedPluginId) { + ForEach(filteredPlugins) { plugin in + pluginRow(plugin) + .tag(plugin.id) + } + } + .listStyle(.inset(alternatesRowBackgrounds: true)) + .safeAreaInset(edge: .bottom, spacing: 0) { + listBottomBar } } - .listStyle(.inset(alternatesRowBackgrounds: true)) - .safeAreaInset(edge: .bottom, spacing: 0) { - listBottomBar + .onChange(of: searchText) { + if let selectedPluginId, !filteredPlugins.contains(where: { $0.id == selectedPluginId }) { + self.selectedPluginId = nil + } } } From 258ebb2cb27ca127532c753bd676475c4ea9c88c Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:10:06 +0700 Subject: [PATCH 10/16] fix: show loading/empty/error states full-width in browse tab --- .../Settings/Plugins/BrowsePluginsView.swift | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index fb48bfdd..cfbe49e3 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -41,13 +41,7 @@ struct BrowsePluginsView: View { Divider() - HSplitView { - sidebarContent - .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) - - detailContent - .frame(minWidth: 340) - } + mainContent } .task { if registryClient.fetchState == .idle { @@ -68,10 +62,10 @@ struct BrowsePluginsView: View { } } - // MARK: - Sidebar + // MARK: - Main Content @ViewBuilder - private var sidebarContent: some View { + private var mainContent: some View { switch registryClient.fetchState { case .idle, .loading: ProgressView() @@ -82,11 +76,17 @@ struct BrowsePluginsView: View { if plugins.isEmpty { ContentUnavailableView.search(text: searchText) } else { - List(plugins, selection: $selectedPluginId) { plugin in - browseRow(plugin) - .tag(plugin.id) + HSplitView { + List(plugins, selection: $selectedPluginId) { plugin in + browseRow(plugin) + .tag(plugin.id) + } + .listStyle(.inset(alternatesRowBackgrounds: true)) + .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) + + detailContent + .frame(minWidth: 340) } - .listStyle(.inset(alternatesRowBackgrounds: true)) } case .failed(let message): From e5bc4536d3fbf681dbb6a38fe581a09ecbb63621 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:11:45 +0700 Subject: [PATCH 11/16] fix: make empty/loading states fill available space in browse tab --- .../Views/Settings/Plugins/BrowsePluginsView.swift | 2 ++ TablePro/Views/Settings/PluginsSettingsView.swift | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index cfbe49e3..84e90538 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -75,6 +75,7 @@ struct BrowsePluginsView: View { let plugins = registryClient.search(query: searchText, category: selectedCategory) if plugins.isEmpty { ContentUnavailableView.search(text: searchText) + .frame(maxWidth: .infinity, maxHeight: .infinity) } else { HSplitView { List(plugins, selection: $selectedPluginId) { plugin in @@ -103,6 +104,7 @@ struct BrowsePluginsView: View { } .buttonStyle(.bordered) } + .frame(maxWidth: .infinity, maxHeight: .infinity) } } diff --git a/TablePro/Views/Settings/PluginsSettingsView.swift b/TablePro/Views/Settings/PluginsSettingsView.swift index 61188460..d81d06d4 100644 --- a/TablePro/Views/Settings/PluginsSettingsView.swift +++ b/TablePro/Views/Settings/PluginsSettingsView.swift @@ -19,12 +19,15 @@ struct PluginsSettingsView: View { .padding(.horizontal, 16) .padding(.top, 12) - switch selectedTab { - case .installed: - InstalledPluginsView() - case .browse: - BrowsePluginsView() + Group { + switch selectedTab { + case .installed: + InstalledPluginsView() + case .browse: + BrowsePluginsView() + } } + .frame(maxWidth: .infinity, maxHeight: .infinity) } } } From 48dd573962585cce69d0df3ed768562366434c6d Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:14:25 +0700 Subject: [PATCH 12/16] refactor: polish plugin settings UI layout and consistency --- .../Settings/Plugins/BrowsePluginsView.swift | 63 +++++++++---------- .../Plugins/InstalledPluginsView.swift | 2 +- .../Views/Settings/PluginsSettingsView.swift | 1 + 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index 84e90538..34d141bf 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -24,25 +24,7 @@ struct BrowsePluginsView: View { } var body: some View { - VStack(spacing: 0) { - HStack { - TextField("Search plugins...", text: $searchText) - .textFieldStyle(.roundedBorder) - Picker("Category", selection: $selectedCategory) { - Text("All").tag(RegistryCategory?.none) - ForEach(RegistryCategory.allCases) { category in - Text(category.displayName).tag(RegistryCategory?.some(category)) - } - } - .fixedSize() - } - .padding(.horizontal, 12) - .padding(.vertical, 8) - - Divider() - - mainContent - } + mainContent .task { if registryClient.fetchState == .idle { await registryClient.fetchManifest() @@ -73,21 +55,38 @@ struct BrowsePluginsView: View { case .loaded: let plugins = registryClient.search(query: searchText, category: selectedCategory) - if plugins.isEmpty { - ContentUnavailableView.search(text: searchText) - .frame(maxWidth: .infinity, maxHeight: .infinity) - } else { - HSplitView { - List(plugins, selection: $selectedPluginId) { plugin in - browseRow(plugin) - .tag(plugin.id) + HSplitView { + VStack(spacing: 0) { + HStack(spacing: 6) { + TextField("Search...", text: $searchText) + .textFieldStyle(.roundedBorder) + Picker("", selection: $selectedCategory) { + Text("All").tag(RegistryCategory?.none) + ForEach(RegistryCategory.allCases) { category in + Text(category.displayName).tag(RegistryCategory?.some(category)) + } + } + .labelsHidden() + .fixedSize() + } + .padding(.horizontal, 8) + .padding(.vertical, 6) + + if plugins.isEmpty { + ContentUnavailableView.search(text: searchText) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else { + List(plugins, selection: $selectedPluginId) { plugin in + browseRow(plugin) + .tag(plugin.id) + } + .listStyle(.inset) } - .listStyle(.inset(alternatesRowBackgrounds: true)) - .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) - - detailContent - .frame(minWidth: 340) } + .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) + + detailContent + .frame(minWidth: 340) } case .failed(let message): diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 75a6f43d..2d41e2c3 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -91,7 +91,7 @@ struct InstalledPluginsView: View { .tag(plugin.id) } } - .listStyle(.inset(alternatesRowBackgrounds: true)) + .listStyle(.inset) .safeAreaInset(edge: .bottom, spacing: 0) { listBottomBar } diff --git a/TablePro/Views/Settings/PluginsSettingsView.swift b/TablePro/Views/Settings/PluginsSettingsView.swift index d81d06d4..1fc6aaee 100644 --- a/TablePro/Views/Settings/PluginsSettingsView.swift +++ b/TablePro/Views/Settings/PluginsSettingsView.swift @@ -18,6 +18,7 @@ struct PluginsSettingsView: View { .labelsHidden() .padding(.horizontal, 16) .padding(.top, 12) + .padding(.bottom, 8) Group { switch selectedTab { From 599345d973fd7041f4f1618ceb2532b92575840c Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Fri, 13 Mar 2026 23:18:10 +0700 Subject: [PATCH 13/16] refactor: remove dead RegistryPluginRow and update docs for toggle location --- .../Settings/Plugins/RegistryPluginRow.swift | 93 ------------------- docs/customization/settings.mdx | 2 +- 2 files changed, 1 insertion(+), 94 deletions(-) delete mode 100644 TablePro/Views/Settings/Plugins/RegistryPluginRow.swift diff --git a/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift b/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift deleted file mode 100644 index 9ef21093..00000000 --- a/TablePro/Views/Settings/Plugins/RegistryPluginRow.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// RegistryPluginRow.swift -// TablePro -// - -import SwiftUI - -struct RegistryPluginRow: View { - let plugin: RegistryPlugin - let isInstalled: Bool - let installProgress: InstallProgress? - let onInstall: () -> Void - - var body: some View { - HStack(spacing: 10) { - pluginIcon(plugin.iconName ?? "puzzlepiece") - .frame(width: 24, height: 24) - .foregroundStyle(.secondary) - - VStack(alignment: .leading, spacing: 2) { - HStack(spacing: 4) { - Text(plugin.name) - .fontWeight(.medium) - - if plugin.isVerified { - Image(systemName: "checkmark.seal.fill") - .foregroundStyle(.blue) - .font(.caption) - } - } - - Text("v\(plugin.version) · \(plugin.author.name)") - .font(.caption) - .foregroundStyle(.secondary) - } - - Spacer() - - actionButton - } - .padding(.vertical, 8) - } - - @ViewBuilder - private func pluginIcon(_ name: String) -> some View { - if NSImage(systemSymbolName: name, accessibilityDescription: nil) != nil { - Image(systemName: name) - } else { - Image(name) - .renderingMode(.template) - } - } - - @ViewBuilder - private var actionButton: some View { - if isInstalled { - Text("Installed") - .font(.caption) - .foregroundStyle(.secondary) - .padding(.horizontal, 8) - .padding(.vertical, 4) - .background(.secondary.opacity(0.1), in: RoundedRectangle(cornerRadius: 6)) - } else if let progress = installProgress { - switch progress.phase { - case .downloading(let fraction): - ProgressView(value: fraction) - .frame(width: 60) - .progressViewStyle(.linear) - - case .installing: - ProgressView() - .controlSize(.small) - - case .completed: - Image(systemName: "checkmark.circle.fill") - .foregroundStyle(.green) - - case .failed: - Button("Retry") { - onInstall() - } - .buttonStyle(.bordered) - .controlSize(.small) - } - } else { - Button("Install") { - onInstall() - } - .buttonStyle(.bordered) - .controlSize(.small) - } - } -} diff --git a/docs/customization/settings.mdx b/docs/customization/settings.mdx index 68ac329c..4b95d132 100644 --- a/docs/customization/settings.mdx +++ b/docs/customization/settings.mdx @@ -387,7 +387,7 @@ TablePro ships with 8 built-in database driver plugins: | Redis | Redis | 6379 | | Oracle | Oracle | 1521 | -Each plugin has a toggle to enable or disable it. Disabled plugins hide their database type from the connection dialog and prevent connections to that database type. +Select a plugin to enable or disable it using the toggle in the detail pane. Disabled plugins hide their database type from the connection dialog and prevent connections to that database type. ### Plugin Details From 818a202f31e39c4ebdbbea7299c63182a12a3abb Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sat, 14 Mar 2026 11:19:51 +0700 Subject: [PATCH 14/16] feat: enrich plugin list rows with version, status badges, and download counts --- CHANGELOG.md | 3 +- .../Registry/DownloadCountService.swift | 38 +-------- TablePro/Resources/Localizable.xcstrings | 16 +++- .../Settings/Plugins/BrowsePluginsView.swift | 79 +++++++++++++++++-- .../Plugins/InstalledPluginsView.swift | 34 ++++++-- 5 files changed, 118 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3533bca..375fae5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Redesigned Plugins settings tab with HSplitView master-detail layout: plugin list on the left, detail pane on the right, matching macOS conventions +- Redesigned Plugins settings tab with HSplitView master-detail layout: plugin list on the left, detail pane on the right, matching macOS conventions. Plugin rows now show version, author/capability, and install status at a glance +- Download counts in browse tab now always fetch latest from GitHub API (5-minute in-memory cooldown per session) - Replaced ~40 hardcoded `DatabaseType` switches across ~20 UI files with dynamic plugin property lookups via `PluginManager`, so third-party plugins get correct UI behavior (colors, labels, editor language, feature toggles) automatically - ConnectionFormView now fully dynamic: pgpass toggle, password visibility, and SSH/SSL tab visibility all driven by plugin metadata (`FieldSection`, `hidesPassword`, `supportsSSH`/`supportsSSL`) instead of hardcoded type checks - Replaced `AppState.isMongoDB`/`isRedis` booleans with `AppState.editorLanguage: EditorLanguage` for extensible editor language detection diff --git a/TablePro/Core/Plugins/Registry/DownloadCountService.swift b/TablePro/Core/Plugins/Registry/DownloadCountService.swift index da563794..8cc39d91 100644 --- a/TablePro/Core/Plugins/Registry/DownloadCountService.swift +++ b/TablePro/Core/Plugins/Registry/DownloadCountService.swift @@ -11,12 +11,10 @@ final class DownloadCountService { static let shared = DownloadCountService() private var counts: [String: Int] = [:] + private var lastFetchDate: Date? + private static let cooldown: TimeInterval = 300 // 5 minutes private static let logger = Logger(subsystem: "com.TablePro", category: "DownloadCountService") - private static let cacheKey = "downloadCountsCache" - private static let cacheDateKey = "downloadCountsCacheDate" - private static let cacheTTL: TimeInterval = 3_600 // 1 hour - // swiftlint:disable:next force_unwrapping private static let releasesURL = URL(string: "https://api.github.com/repos/datlechin/TablePro/releases?per_page=100")! @@ -27,8 +25,6 @@ final class DownloadCountService { config.timeoutIntervalForRequest = 15 config.timeoutIntervalForResource = 30 self.session = URLSession(configuration: config) - - loadCache() } // MARK: - Public @@ -40,8 +36,7 @@ final class DownloadCountService { func fetchCounts(for manifest: RegistryManifest?) async { guard let manifest else { return } - if isCacheValid() { - Self.logger.debug("Using cached download counts") + if let lastFetchDate, Date().timeIntervalSince(lastFetchDate) < Self.cooldown { return } @@ -60,7 +55,7 @@ final class DownloadCountService { } counts = totals - saveCache(totals) + lastFetchDate = Date() Self.logger.info("Fetched download counts for \(totals.count) plugin(s)") } catch { Self.logger.error("Failed to fetch download counts: \(error.localizedDescription)") @@ -102,31 +97,6 @@ final class DownloadCountService { return map } - // MARK: - Cache - - private func isCacheValid() -> Bool { - guard let cacheDate = UserDefaults.standard.object(forKey: Self.cacheDateKey) as? Date else { - return false - } - return Date().timeIntervalSince(cacheDate) < Self.cacheTTL - } - - private func loadCache() { - guard isCacheValid(), - let data = UserDefaults.standard.data(forKey: Self.cacheKey), - let cached = try? JSONDecoder().decode([String: Int].self, from: data) else { - counts = [:] - return - } - counts = cached - } - - private func saveCache(_ totals: [String: Int]) { - if let data = try? JSONEncoder().encode(totals) { - UserDefaults.standard.set(data, forKey: Self.cacheKey) - UserDefaults.standard.set(Date(), forKey: Self.cacheDateKey) - } - } } // MARK: - GitHub API Models diff --git a/TablePro/Resources/Localizable.xcstrings b/TablePro/Resources/Localizable.xcstrings index c2a5c056..f0af5501 100644 --- a/TablePro/Resources/Localizable.xcstrings +++ b/TablePro/Resources/Localizable.xcstrings @@ -274,6 +274,16 @@ } } }, + "%@ %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + } + } + }, "%@ cannot be empty" : { "localizations" : { "vi" : { @@ -7636,6 +7646,9 @@ } } } + }, + "Filter..." : { + }, "Filters" : { "localizations" : { @@ -14124,6 +14137,7 @@ } }, "Search plugins..." : { + "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -17156,7 +17170,6 @@ } }, "User" : { - "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { @@ -17237,7 +17250,6 @@ } }, "v%@" : { - "extractionState" : "stale", "localizations" : { "vi" : { "stringUnit" : { diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index 34d141bf..90e26179 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -111,18 +111,81 @@ struct BrowsePluginsView: View { @ViewBuilder private func browseRow(_ plugin: RegistryPlugin) -> some View { - HStack(spacing: 6) { + HStack(spacing: 8) { pluginIcon(plugin.iconName ?? "puzzlepiece") - .frame(width: 16) + .font(.title3) + .frame(width: 24, height: 24) + .foregroundStyle(.secondary) + + VStack(alignment: .leading, spacing: 2) { + HStack(spacing: 4) { + Text(plugin.name) + .lineLimit(1) + if plugin.isVerified { + Image(systemName: "checkmark.seal.fill") + .foregroundStyle(.blue) + .font(.caption2) + } + } + + HStack(spacing: 4) { + Text("v\(plugin.version)") + Text("·") + Text(plugin.author.name) + .lineLimit(1) + if let count = downloadCountService.downloadCount(for: plugin.id) { + Text("·") + Text("\(Image(systemName: "arrow.down.circle")) \(formattedCount(count))") + } + } + .font(.caption) .foregroundStyle(.secondary) - Text(plugin.name) - .lineLimit(1) - if plugin.isVerified { - Image(systemName: "checkmark.seal.fill") - .foregroundStyle(.blue) - .font(.caption2) } + + Spacer() + + rowStatusBadge(for: plugin) + } + .padding(.vertical, 2) + } + + // MARK: - Row Status Badge + + @ViewBuilder + private func rowStatusBadge(for plugin: RegistryPlugin) -> some View { + if isPluginInstalled(plugin.id) { + Text("Installed") + .font(.caption2) + .foregroundStyle(.secondary) + } else if let progress = installTracker.state(for: plugin.id) { + switch progress.phase { + case .downloading(let fraction): + ProgressView(value: fraction) + .frame(width: 40) + .progressViewStyle(.linear) + case .installing: + ProgressView() + .controlSize(.mini) + case .completed: + Image(systemName: "checkmark.circle.fill") + .foregroundStyle(.green) + .font(.caption) + case .failed: + Button("Retry") { installPlugin(plugin) } + .controlSize(.mini) + } + } else { + Button("Install") { installPlugin(plugin) } + .buttonStyle(.bordered) + .controlSize(.mini) + } + } + + private func formattedCount(_ count: Int) -> String { + if count >= 1000 { + return String(format: "%.1fk", Double(count) / 1000.0) } + return "\(count)" } // MARK: - Detail diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index c33fec6c..0955ac33 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -32,7 +32,6 @@ struct InstalledPluginsView: View { pluginList .frame(minWidth: 200, idealWidth: 240, maxWidth: 280) - detailPane .frame(minWidth: 340) } @@ -146,14 +145,35 @@ struct InstalledPluginsView: View { @ViewBuilder private func pluginRow(_ plugin: PluginEntry) -> some View { - HStack(spacing: 6) { + HStack(spacing: 8) { pluginIcon(plugin.iconName) - .frame(width: 16) - .foregroundStyle(plugin.isEnabled ? .primary : .tertiary) - Text(plugin.name) - .lineLimit(1) - .foregroundStyle(plugin.isEnabled ? .primary : .secondary) + .font(.title3) + .frame(width: 24, height: 24) + .foregroundStyle(plugin.isEnabled ? .secondary : .tertiary) + + VStack(alignment: .leading, spacing: 2) { + Text(plugin.name) + .lineLimit(1) + .foregroundStyle(plugin.isEnabled ? .primary : .secondary) + + HStack(spacing: 4) { + Text("v\(plugin.version)") + if let capability = plugin.capabilities.first { + Text("·") + Text(capability.displayName) + } + } + .font(.caption) + .foregroundStyle(.secondary) + } + + Spacer() + + Text(plugin.source == .builtIn ? String(localized: "Built-in") : String(localized: "User")) + .font(.caption2) + .foregroundStyle(.secondary) } + .padding(.vertical, 2) } @ViewBuilder From 9d71e2938611919ed3f950cbf9c756e77a8a5042 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sat, 14 Mar 2026 11:23:11 +0700 Subject: [PATCH 15/16] docs: update plugin settings docs for enriched rows (en, vi, zh) --- docs/customization/settings.mdx | 4 ++-- docs/vi/customization/settings.mdx | 6 +++--- docs/zh/customization/settings.mdx | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/customization/settings.mdx b/docs/customization/settings.mdx index 4b95d132..f1085a47 100644 --- a/docs/customization/settings.mdx +++ b/docs/customization/settings.mdx @@ -372,7 +372,7 @@ Manage database driver plugins from the **Plugins** tab in Settings. ### Installed Plugins -The **Installed** tab uses a split-view layout: the plugin list on the left, and the detail pane on the right. +The **Installed** tab shows plugins in a split-view: list on the left, details on the right. Each row shows the plugin's version, capability, and whether it's built-in or user-installed. Filter by name using the search field above the list. TablePro ships with 8 built-in database driver plugins: @@ -395,7 +395,7 @@ Select a plugin in the list to view its details in the right pane: version, bund ### Browse plugins -The **Browse** tab also uses a split-view layout. Search and filter plugins by category using the controls at the top. Select a plugin in the list to view its full details and install it from the right pane. +The **Browse** tab uses the same split-view. Each row shows version, author, download count, and install status. Filter by name or category using the controls above the list. Click a plugin for full details, or hit the Install button right from the list. ### Installing Third-Party Plugins diff --git a/docs/vi/customization/settings.mdx b/docs/vi/customization/settings.mdx index cc5d9eb9..4cf9dc11 100644 --- a/docs/vi/customization/settings.mdx +++ b/docs/vi/customization/settings.mdx @@ -370,7 +370,7 @@ Quản lý plugin driver database từ tab **Plugins** trong Settings. ### Plugin Đã cài -Tab **Installed** sử dụng bố cục chia đôi: danh sách plugin bên trái và chi tiết bên phải. +Tab **Installed** hiển thị plugin theo bố cục chia đôi: danh sách bên trái, chi tiết bên phải. Mỗi dòng cho thấy phiên bản, khả năng và nguồn gốc (tích hợp sẵn hay do người dùng cài). Lọc theo tên bằng ô tìm kiếm phía trên danh sách. TablePro đi kèm 8 plugin driver database tích hợp sẵn: @@ -385,7 +385,7 @@ TablePro đi kèm 8 plugin driver database tích hợp sẵn: | Redis | Redis | 6379 | | Oracle | Oracle | 1521 | -Mỗi plugin có nút bật/tắt. Plugin bị tắt sẽ ẩn loại database khỏi hộp thoại kết nối và ngăn kết nối đến loại database đó. +Chọn plugin để bật/tắt bằng công tắc trong khung chi tiết. Plugin bị tắt sẽ ẩn loại database khỏi hộp thoại kết nối và ngăn kết nối đến loại database đó. ### Chi tiết Plugin @@ -393,7 +393,7 @@ Chọn plugin trong danh sách để xem chi tiết ở khung bên phải: phiê ### Duyệt plugin -Tab **Browse** cũng sử dụng bố cục chia đôi. Tìm kiếm và lọc plugin theo danh mục bằng các điều khiển ở phía trên. Chọn plugin trong danh sách để xem chi tiết đầy đủ và cài đặt từ khung bên phải. +Tab **Browse** cũng dùng bố cục chia đôi. Mỗi dòng cho thấy phiên bản, tác giả, lượt tải và trạng thái cài đặt. Lọc theo tên hoặc danh mục bằng các điều khiển phía trên. Nhấn vào plugin để xem chi tiết, hoặc bấm Install ngay từ danh sách. ### Cài đặt Plugin Bên thứ ba diff --git a/docs/zh/customization/settings.mdx b/docs/zh/customization/settings.mdx index 60552489..23e66135 100644 --- a/docs/zh/customization/settings.mdx +++ b/docs/zh/customization/settings.mdx @@ -359,7 +359,7 @@ TablePro 使用 [Sparkle](https://sparkle-project.org/) 进行更新。当有可 ### 已安装插件 -**已安装**标签页使用分栏布局:左侧为插件列表,右侧为详情面板。 +**已安装**标签页采用分栏布局:左侧列表,右侧详情。每行显示版本、功能类型和来源(内置/用户安装)。用列表上方的搜索框按名称筛选。 TablePro 内置 8 个数据库驱动插件: @@ -374,7 +374,7 @@ TablePro 内置 8 个数据库驱动插件: | Redis | Redis | 6379 | | Oracle | Oracle | 1521 | -每个插件都有开关按钮来启用或禁用。禁用的插件会在连接对话框中隐藏其数据库类型,并阻止连接到该类型的数据库。 +选择插件后,在详情面板中使用开关来启用或禁用。禁用的插件会在连接对话框中隐藏其数据库类型,并阻止连接到该类型的数据库。 ### 插件详情 @@ -382,7 +382,7 @@ TablePro 内置 8 个数据库驱动插件: ### 浏览插件 -**浏览**标签页同样使用分栏布局。使用顶部的搜索和分类筛选控件查找插件。在列表中选择插件即可查看完整详情并从右侧面板安装。 +**浏览**标签页同样分栏布局。每行显示版本、作者、下载次数和安装状态。用上方的搜索和分类筛选查找插件。点击查看详情,或直接在列表里点 Install 安装。 ### 安装第三方插件 From 7f767023b003fdd7527b7841feb0ea065d9a04ee Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sat, 14 Mar 2026 11:27:03 +0700 Subject: [PATCH 16/16] =?UTF-8?q?fix:=20address=20PR=20review=20=E2=80=94?= =?UTF-8?q?=20extract=20PluginIconView,=20fix=20disabled=20condition,=20ad?= =?UTF-8?q?d=20accessibility=20and=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TablePro/Resources/Localizable.xcstrings | 22646 ++++++++-------- .../Settings/Plugins/BrowsePluginsView.swift | 15 +- .../Plugins/InstalledPluginsView.swift | 15 +- .../Settings/Plugins/PluginIconView.swift | 19 + 4 files changed, 11318 insertions(+), 11377 deletions(-) create mode 100644 TablePro/Views/Settings/Plugins/PluginIconView.swift diff --git a/TablePro/Resources/Localizable.xcstrings b/TablePro/Resources/Localizable.xcstrings index f0af5501..f014a5a4 100644 --- a/TablePro/Resources/Localizable.xcstrings +++ b/TablePro/Resources/Localizable.xcstrings @@ -1,17841 +1,17785 @@ { - "sourceLanguage" : "en", - "strings" : { - "" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "" + "sourceLanguage": "en", + "strings": { + "": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "" } } } }, - "--" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "--" + "--": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "--" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "--" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "--" } } } }, - "—" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" + "—": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "—" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "—" } } } }, - ".%@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : ".%@" + ".%@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": ".%@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : ".%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": ".%@" } } } }, - "·" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "·" + "·": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "·" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "·" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "·" } } } }, - "''" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "''" + "''": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "''" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "''" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "''" } } } }, - "\"%@\" will be removed from your system. This action cannot be undone." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "\"%@\" sẽ bị xoá khỏi hệ thống. Hành động này không thể hoàn tác." + "\"%@\" will be removed from your system. This action cannot be undone.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "\"%@\" sẽ bị xoá khỏi hệ thống. Hành động này không thể hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "\"%@\" 将从您的系统中移除。此操作无法撤销。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "\"%@\" 将从您的系统中移除。此操作无法撤销。" } } } }, - "(%@)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%@)" + "(%@)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "(%@)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%@)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "(%@)" } } } }, - "(%lld %@)" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "(%1$lld %2$@)" + "(%lld %@)": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "(%1$lld %2$@)" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%1$lld %2$@)" + "vi": { + "stringUnit": { + "state": "translated", + "value": "(%1$lld %2$@)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%lld %@)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "(%lld %@)" } } } }, - "(%lld active)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%lld đang hoạt động)" + "(%lld active)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "(%lld đang hoạt động)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%lld 活跃)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "(%lld 活跃)" } } } }, - "(%lld hidden)" : { - - }, - "(%lld)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%lld)" + "(%lld hidden)": {}, + "(%lld)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "(%lld)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "(%lld)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "(%lld)" } } } }, - "(optional)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "(tùy chọn)" + "(optional)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "(tùy chọn)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "(可选)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "(可选)" } } } }, - "/path/to/agent.sock" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "/path/to/agent.sock" + "/path/to/agent.sock": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "/path/to/agent.sock" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "/path/to/agent.sock" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "/path/to/agent.sock" } } } }, - "/path/to/ca-cert.pem" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "/đường/dẫn/tới/ca-cert.pem" + "/path/to/ca-cert.pem": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "/đường/dẫn/tới/ca-cert.pem" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "/path/to/ca-cert.pem" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "/path/to/ca-cert.pem" } } } }, - "/path/to/database.sqlite" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "/đường/dẫn/tới/database.sqlite" + "/path/to/database.sqlite": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "/đường/dẫn/tới/database.sqlite" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "/path/to/database.sqlite" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "/path/to/database.sqlite" } } } }, - "%@ (%lld/%lld)" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ (%2$lld/%3$lld)" + "%@ (%lld/%lld)": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@ (%2$lld/%3$lld)" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@ (%2$lld/%3$lld)" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$@ (%2$lld/%3$lld)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ (%lld/%lld)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ (%lld/%lld)" } } } }, - "%@ %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@" + "%@ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@" } } } }, - "%@ cannot be empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ không được để trống" + "%@ cannot be empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ không được để trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 不能为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 不能为空" } } } }, - "%@ cannot be negative" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ không được là số âm" + "%@ cannot be negative": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ không được là số âm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 不能为负数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 不能为负数" } } } }, - "%@ download" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ lượt tải" + "%@ download": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ lượt tải" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 次下载" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 次下载" } } } }, - "%@ downloads" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ lượt tải" + "%@ downloads": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ lượt tải" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 次下载" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 次下载" } } } }, - "%@ is already assigned to \"%@\". Reassigning will remove it from that action." : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ is already assigned to \"%2$@\". Reassigning will remove it from that action." + "%@ is already assigned to \"%@\". Reassigning will remove it from that action.": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@ is already assigned to \"%2$@\". Reassigning will remove it from that action." } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@ đã được gán cho \"%2$@\". Gán lại sẽ xóa phím tắt khỏi hành động đó." + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$@ đã được gán cho \"%2$@\". Gán lại sẽ xóa phím tắt khỏi hành động đó." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 已分配给 \"%@\"。重新分配将从该操作中移除它。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 已分配给 \"%@\"。重新分配将从该操作中移除它。" } } } }, - "%@ ms" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ ms" + "%@ ms": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ ms" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ ms" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ ms" } } } }, - "%@ must be %lld characters or less" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ must be %2$lld characters or less" + "%@ must be %lld characters or less": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@ must be %2$lld characters or less" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@ phải có %2$lld ký tự trở xuống" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$@ phải có %2$lld ký tự trở xuống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 必须为 %lld 个字符或更少" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 必须为 %lld 个字符或更少" } } } }, - "%@ must be between %@ and %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ must be between %2$@ and %3$@" + "%@ must be between %@ and %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@ must be between %2$@ and %3$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@ phải nằm trong khoảng %2$@ đến %3$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$@ phải nằm trong khoảng %2$@ đến %3$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 必须在 %@ 和 %@ 之间" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 必须在 %@ 和 %@ 之间" } } } }, - "%@ Preview" : { - - }, - "%@ rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ dòng" + "%@ Preview": {}, + "%@ rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 行" } } } }, - "%@ s" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ giây" + "%@ s": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ giây" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 秒" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 秒" } } } }, - "%@ seconds" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ giây" + "%@ seconds": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ giây" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ 秒" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 秒" } } } }, - "%@, %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@, %2$@" + "%@, %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@, %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@, %@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@, %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@, %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@, %@" } } } }, - "%@: %lld" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@: %2$lld" + "%@: %lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@: %2$lld" } } } }, - "%@." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@." + "%@.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@." } } } }, - "%@/%@ rows" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@/%2$@ rows" + "%@/%@ rows": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$@/%2$@ rows" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@/%2$@ dòng" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$@/%2$@ dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@/%@ 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@/%@ 行" } } } }, - "%@ms" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ms" + "%@ms": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@ms" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@ms" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ms" } } } }, - "%@s" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@s" + "%@s": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%@s" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%@s" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@s" } } } }, - "%lld" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld" + "%lld": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld" } } } }, - "%lld in · %lld out" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld in · %2$lld out" + "%lld in · %lld out": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld in · %2$lld out" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld vào · %lld ra" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld vào · %lld ra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 输入 · %lld 输出" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 输入 · %lld 输出" } } } }, - "%lld in / %lld out tokens" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld in / %2$lld out tokens" + "%lld in / %lld out tokens": { + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld in / %2$lld out tokens" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$lld vào / %2$lld ra token" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$lld vào / %2$lld ra token" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 输入 / %lld 输出 token" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 输入 / %lld 输出 token" } } } }, - "%lld of %lld" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld of %2$lld" + "%lld of %lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld of %2$lld" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$lld / %2$lld" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$lld / %2$lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld / %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld / %lld" } } } }, - "%lld of %lld rows selected" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld of %2$lld rows selected" + "%lld of %lld rows selected": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld of %2$lld rows selected" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã chọn %1$lld trong %2$lld dòng" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã chọn %1$lld trong %2$lld dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已选择 %lld / %lld 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已选择 %lld / %lld 行" } } } }, - "%lld pt" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld pt" + "%lld pt": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld pt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld pt" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld pt" } } } }, - "%lld row%@ affected" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld row%2$@ affected" + "%lld row%@ affected": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld row%2$@ affected" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld dòng%@ bị ảnh hưởng" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld dòng%@ bị ảnh hưởng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 行%@受影响" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 行%@受影响" } } } }, - "%lld seconds" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld giây" + "%lld seconds": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld giây" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 秒" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 秒" } } } }, - "%lld skipped (no options)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld bị bỏ qua (không có tùy chọn)" + "%lld skipped (no options)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld bị bỏ qua (không có tùy chọn)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 已跳过(无选项)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 已跳过(无选项)" } } } }, - "%lld statements" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld câu lệnh" + "%lld statements": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld câu lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 条语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 条语句" } } } }, - "%lld statements executed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã thực thi %lld câu lệnh" + "%lld statements executed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã thực thi %lld câu lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已执行 %lld 条语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已执行 %lld 条语句" } } } }, - "%lld table%@ to export" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld table%2$@ to export" + "%lld table%@ to export": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld table%2$@ to export" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld bảng%@ để xuất" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld bảng%@ để xuất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 个表%@待导出" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 个表%@待导出" } } } }, - "%lld tables" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld bảng" + "%lld tables": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lld bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 个表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld 个表" } } } }, - "%lld-%lld of %@ rows" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld-%2$lld of %3$@ rows" + "%lld-%lld of %@ rows": { + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld-%2$lld of %3$@ rows" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$lld-%2$lld trong %3$@ dòng" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$lld-%2$lld trong %3$@ dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld-%lld / %@ 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld-%lld / %@ 行" } } } }, - "%lld-%lld of %@%@ rows" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld-%2$lld of %3$@%4$@ rows" + "%lld-%lld of %@%@ rows": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lld-%2$lld of %3$@%4$@ rows" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$lld-%2$lld của %3$@%4$@ dòng" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$lld-%2$lld của %3$@%4$@ dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld-%lld / %@%@ 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lld-%lld / %@%@ 行" } } } }, - "%lld%%" : { - - }, - "%lldm %llds" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lldm %2$llds" + "%lld%%": {}, + "%lldm %llds": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "%1$lldm %2$llds" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lldm %llds" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%lldm %llds" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lldm %llds" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%lldm %llds" } } } }, - "•" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "•" + "•": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "•" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "•" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "•" } } } }, - "••••••••" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "••••••••" + "••••••••": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "••••••••" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "••••••••" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "••••••••" } } } }, - "© 2026 Ngo Quoc Dat.\n%@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "© 2026 Ngo Quoc Dat.\n%@" + "© 2026 Ngo Quoc Dat.\n%@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "© 2026 Ngo Quoc Dat.\n%@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "© 2026 Ngo Quoc Dat.\n%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "© 2026 Ngo Quoc Dat.\n%@" } } } }, - "<1ms" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "<1ms" + "<1ms": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "<1ms" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "<1ms" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "<1ms" } } } }, - "=" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "=" + "=": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "=" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "=" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "=" } } } }, - "~/.pgpass found — matching entry exists" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm thấy ~/.pgpass — có entry khớp" + "~/.pgpass found — matching entry exists": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm thấy ~/.pgpass — có entry khớp" } } } }, - "~/.pgpass found — no matching entry" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm thấy ~/.pgpass — không có entry khớp" + "~/.pgpass found — no matching entry": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm thấy ~/.pgpass — không có entry khớp" } } } }, - "~/.pgpass has incorrect permissions (needs chmod 0600)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "~/.pgpass có quyền không đúng (cần chmod 0600)" + "~/.pgpass has incorrect permissions (needs chmod 0600)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "~/.pgpass có quyền không đúng (cần chmod 0600)" } } } }, - "~/.pgpass not found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy ~/.pgpass" + "~/.pgpass not found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy ~/.pgpass" } } } }, - "~/.ssh/id_rsa" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "~/.ssh/id_rsa" + "~/.ssh/id_rsa": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "~/.ssh/id_rsa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "~/.ssh/id_rsa" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "~/.ssh/id_rsa" } } } }, - "⌘K" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "⌘K" + "⌘K": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "⌘K" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "⌘K" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "⌘K" } } } }, - "⌘T" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "⌘T" + "⌘T": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "⌘T" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "⌘T" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "⌘T" } } } }, - "0" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "0" + "0": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "0" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "0" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "0" } } } }, - "1" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1" + "1": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "1" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "1" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "1" } } } }, - "1 John Doe john@example.com NULL" : { - - }, - "1 (no batching)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1 (không gom nhóm)" + "1 John Doe john@example.com NULL": {}, + "1 (no batching)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "1 (không gom nhóm)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "1(不分批)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "1(不分批)" } } } }, - "1 year" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1 năm" + "1 year": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "1 năm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "1 年" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "1 年" } } } }, - "1,000" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1,000" + "1,000": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "1,000" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "1,000" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "1,000" } } } }, - "1,000 rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1.000 dòng" + "1,000 rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "1.000 dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "1,000 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "1,000 行" } } } }, - "2" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "2" + "2": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "2" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "2" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "2" } } } }, - "2 spaces" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "2 dấu cách" + "2 spaces": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "2 dấu cách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "2 个空格" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "2 个空格" } } } }, - "3" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "3" + "3": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "3" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "3" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "3" } } } }, - "4 spaces" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "4 dấu cách" + "4 spaces": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "4 dấu cách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "4 个空格" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "4 个空格" } } } }, - "5,000" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "5,000" + "5,000": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "5,000" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "5,000" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "5,000" } } } }, - "5,000 rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "5.000 dòng" + "5,000 rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "5.000 dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "5,000 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "5,000 行" } } } }, - "6" : { - - }, - "7 days" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "7 ngày" + "6": {}, + "7 days": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "7 ngày" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "7 天" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "7 天" } } } }, - "8" : { - - }, - "8 spaces" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "8 dấu cách" + "8": {}, + "8 spaces": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "8 dấu cách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "8 个空格" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "8 个空格" } } } }, - "10,000" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "10,000" + "10,000": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "10,000" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "10,000" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "10,000" } } } }, - "10,000 rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "10.000 dòng" + "10,000 rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "10.000 dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "10,000 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "10,000 行" } } } }, - "22" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "22" + "22": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "22" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "22" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "22" } } } }, - "30 days" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "30 ngày" + "30 days": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "30 ngày" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "30 天" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "30 天" } } } }, - "30s" : { - - }, - "60s" : { - - }, - "90 days" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "90 ngày" + "30s": {}, + "60s": {}, + "90 days": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "90 ngày" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "90 天" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "90 天" } } } }, - "100" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "100" + "100": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "100" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "100" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "100" } } } }, - "100 rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "100 dòng" + "100 rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "100 dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "100 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "100 行" } } } }, - "500" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "500" + "500": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "500" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "500" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "500" } } } }, - "500 rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "500 dòng" + "500 rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "500 dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "500 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "500 行" } } } }, - "A built-in plugin \"%@\" already provides this bundle ID" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin tích hợp \"%@\" đã cung cấp bundle ID này" + "A built-in plugin \"%@\" already provides this bundle ID": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin tích hợp \"%@\" đã cung cấp bundle ID này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "内置插件 \"%@\" 已提供此 bundle ID" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "内置插件 \"%@\" 已提供此 bundle ID" } } } }, - "A fast, lightweight native macOS database client" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ứng dụng quản lý cơ sở dữ liệu gốc macOS nhanh và nhẹ" + "A fast, lightweight native macOS database client": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ứng dụng quản lý cơ sở dữ liệu gốc macOS nhanh và nhẹ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "快速、轻量的原生 macOS 数据库客户端" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "快速、轻量的原生 macOS 数据库客户端" } } } }, - "About TablePro" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giới thiệu TablePro" + "About TablePro": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giới thiệu TablePro" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关于 TablePro" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关于 TablePro" } } } }, - "Accent Color:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Màu nhấn:" + "Accent Color:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Màu nhấn:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "强调色:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "强调色:" } } } }, - "Activate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích hoạt" + "Activate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích hoạt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "激活" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "激活" } } } }, - "Activation Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích hoạt thất bại" + "Activation Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích hoạt thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "激活失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "激活失败" } } } }, - "Active" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang hoạt động" + "Active": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang hoạt động" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "活跃" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "活跃" } } } }, - "Active Connections" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối đang hoạt động" + "Active Connections": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối đang hoạt động" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "活跃连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "活跃连接" } } } }, - "ACTIVE CONNECTIONS" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "KẾT NỐI ĐANG HOẠT ĐỘNG" + "ACTIVE CONNECTIONS": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "KẾT NỐI ĐANG HOẠT ĐỘNG" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "活跃连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "活跃连接" } } } }, - "Add Check Constraint" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm ràng buộc kiểm tra" + "Add Check Constraint": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm ràng buộc kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加检查约束" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加检查约束" } } } }, - "Add Column" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm cột" + "Add Column": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加列" } } } }, - "Add columns first" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm cột trước" + "Add columns first": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm cột trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请先添加列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "请先添加列" } } } }, - "Add filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm bộ lọc" + "Add filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加筛选" } } } }, - "Add Filter (Cmd+Shift+F)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm bộ lọc (Cmd+Shift+F)" + "Add Filter (Cmd+Shift+F)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm bộ lọc (Cmd+Shift+F)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加筛选 (Cmd+Shift+F)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加筛选 (Cmd+Shift+F)" } } } }, - "Add Foreign Key" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm khóa ngoại" + "Add Foreign Key": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm khóa ngoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加外键" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加外键" } } } }, - "Add Index" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm chỉ mục" + "Add Index": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm chỉ mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加索引" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加索引" } } } }, - "Add indexes to improve query performance on frequently searched columns" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm chỉ mục để cải thiện hiệu suất truy vấn trên các cột thường xuyên tìm kiếm" + "Add indexes to improve query performance on frequently searched columns": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm chỉ mục để cải thiện hiệu suất truy vấn trên các cột thường xuyên tìm kiếm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加索引以提升常用搜索列的查询性能" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加索引以提升常用搜索列的查询性能" } } } }, - "Add Jump Host" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm Jump Host" + "Add Jump Host": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm Jump Host" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加跳板机" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加跳板机" } } } }, - "Add Provider" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm nhà cung cấp" + "Add Provider": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm nhà cung cấp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加提供商" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加提供商" } } } }, - "Add Row" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm dòng" + "Add Row": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加行" } } } }, - "Add validation rules to ensure data integrity" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thêm quy tắc xác thực để đảm bảo tính toàn vẹn dữ liệu" + "Add validation rules to ensure data integrity": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thêm quy tắc xác thực để đảm bảo tính toàn vẹn dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加验证规则以确保数据完整性" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "添加验证规则以确保数据完整性" } } } }, - "admin" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "admin" + "admin": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "admin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "admin" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "admin" } } } }, - "Agent Socket" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agent Socket" + "Agent Socket": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Agent Socket" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agent Socket" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Agent Socket" } } } }, - "AI" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI" + "AI": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI" } } } }, - "AI Chat" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI Chat" + "AI Chat": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "AI Chat" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI 对话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI 对话" } } } }, - "AI is disabled for this connection." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI bị tắt cho kết nối này." + "AI is disabled for this connection.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "AI bị tắt cho kết nối này." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此连接已禁用 AI。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此连接已禁用 AI。" } } } }, - "AI Policy" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chính sách AI" + "AI Policy": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chính sách AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI 策略" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI 策略" } } } }, - "AI Provider" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhà cung cấp AI" + "AI Provider": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhà cung cấp AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI 提供商" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI 提供商" } } } }, - "AI-powered SQL completions appear as ghost text while typing. Press Tab to accept, Escape to dismiss." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gợi ý SQL bằng AI xuất hiện dưới dạng văn bản mờ khi gõ. Nhấn Tab để chấp nhận, Escape để bỏ qua." + "AI-powered SQL completions appear as ghost text while typing. Press Tab to accept, Escape to dismiss.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gợi ý SQL bằng AI xuất hiện dưới dạng văn bản mờ khi gõ. Nhấn Tab để chấp nhận, Escape để bỏ qua." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI 驱动的 SQL 补全在输入时以虚影文本显示。按 Tab 接受,按 Escape 关闭。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI 驱动的 SQL 补全在输入时以虚影文本显示。按 Tab 接受,按 Escape 关闭。" } } } }, - "Alert" : { - - }, - "Alert (Full)" : { - - }, - "Algorithm" : { - - }, - "All" : { - - }, - "All %lld rows selected" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã chọn tất cả %lld dòng" + "Alert": {}, + "Alert (Full)": {}, + "Algorithm": {}, + "All": {}, + "All %lld rows selected": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã chọn tất cả %lld dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已选择全部 %lld 行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已选择全部 %lld 行" } } } }, - "All columns" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tất cả cột" + "All columns": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tất cả cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "所有列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "所有列" } } } }, - "ALL DATABASES" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TẤT CẢ CƠ SỞ DỮ LIỆU" + "ALL DATABASES": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TẤT CẢ CƠ SỞ DỮ LIỆU" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "所有数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "所有数据库" } } } }, - "All rights reserved." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã đăng ký bản quyền." + "All rights reserved.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã đăng ký bản quyền." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保留所有权利。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保留所有权利。" } } } }, - "ALL SCHEMAS" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TẤT CẢ SCHEMA" + "ALL SCHEMAS": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TẤT CẢ SCHEMA" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "所有 SCHEMA" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "所有 SCHEMA" } } } }, - "All Time" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tất cả" + "All Time": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tất cả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "所有时间" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "所有时间" } } } }, - "Allow" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cho phép" + "Allow": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cho phép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "允许" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "允许" } } } }, - "Allow AI Access" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cho phép truy cập AI" + "Allow AI Access": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cho phép truy cập AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "允许 AI 访问" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "允许 AI 访问" } } } }, - "Also handles" : { - - }, - "Also handles:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cũng hỗ trợ:" + "Also handles": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cũng xử lý" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "还支持:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "兼容类型" } } } }, - "Always" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Luôn luôn" + "Also handles:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cũng hỗ trợ:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "始终" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "还支持:" } } } }, - "Always Allow" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Luôn cho phép" + "Always": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Luôn luôn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "始终允许" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "始终" } } } }, - "and" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "và" + "Always Allow": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Luôn cho phép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "和" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "始终允许" } } } }, - "AND" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "AND" + "and": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "và" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AND" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "和" } } } }, - "API Key" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "API Key" + "AND": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "AND" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API Key" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AND" } } } }, - "Appearance" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giao diện" + "API Key": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "API Key" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "外观" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "API Key" } } } }, - "Appearance:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giao diện:" + "Appearance": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giao diện" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "外观:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "外观" } } } }, - "Apply All" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Áp dụng tất cả" + "Appearance:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giao diện:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全部应用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "外观:" } } } }, - "Apply Changes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Áp dụng thay đổi" + "Apply All": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Áp dụng tất cả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "应用更改" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全部应用" } } } }, - "Apply this filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Áp dụng bộ lọc này" + "Apply Changes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Áp dụng thay đổi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "应用此筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "应用更改" } } } }, - "Apply This Filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Áp dụng bộ lọc này" + "Apply this filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Áp dụng bộ lọc này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "应用此筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "应用此筛选" } } } }, - "Are you sure you want to delete \"%@\"?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn có chắc muốn xóa \"%@\" không?" + "Apply This Filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Áp dụng bộ lọc này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "确定要删除 \"%@\" 吗?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "应用此筛选" } } } }, - "Are you sure you want to disconnect from this database?" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn có chắc muốn ngắt kết nối khỏi cơ sở dữ liệu này không?" + "Are you sure you want to delete \"%@\"?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn có chắc muốn xóa \"%@\" không?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "确定要断开与此数据库的连接吗?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "确定要删除 \"%@\" 吗?" } } } }, - "Are you sure you want to execute this query?\n\n%@" : { - - }, - "Ask about your database..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hỏi về cơ sở dữ liệu của bạn..." + "Are you sure you want to disconnect from this database?": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn có chắc muốn ngắt kết nối khỏi cơ sở dữ liệu này không?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "询问您的数据库..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "确定要断开与此数据库的连接吗?" } } } }, - "Ask AI about your database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hỏi AI về cơ sở dữ liệu của bạn" + "Are you sure you want to execute this query?\n\n%@": {}, + "Ask about your database...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hỏi về cơ sở dữ liệu của bạn..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "向 AI 询问您的数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "询问您的数据库..." } } } }, - "Ask AI to Fix" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhờ AI sửa lỗi" + "Ask AI about your database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hỏi AI về cơ sở dữ liệu của bạn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "让 AI 修复" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "向 AI 询问您的数据库" } } } }, - "Ask Each Time" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hỏi mỗi lần" + "Ask AI to Fix": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhờ AI sửa lỗi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每次询问" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "让 AI 修复" } } } }, - "Auth" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác thực" + "Ask Each Time": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hỏi mỗi lần" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "认证" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每次询问" } } } }, - "Authenticate to execute database operations" : { - - }, - "Authentication" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác thực" + "Auth": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác thực" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "身份验证" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "认证" } } } }, - "Authentication failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác thực thất bại: %@" + "Authenticate to execute database operations": {}, + "Authentication": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác thực" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "身份验证失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "身份验证" } } } }, - "Authentication failed. Check your API key." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác thực thất bại. Kiểm tra API key của bạn." + "Authentication failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác thực thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "身份验证失败。请检查您的 API key。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "身份验证失败:%@" } } } }, - "Authentication required to execute operations" : { - - }, - "Authentication required to execute write operations" : { - - }, - "Author" : { - - }, - "AUTO" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TỰ ĐỘNG" + "Authentication failed. Check your API key.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác thực thất bại. Kiểm tra API key của bạn." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自动" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "身份验证失败。请检查您的 API key。" } } } }, - "Auto cleanup on startup" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự động dọn dẹp khi khởi động" + "Authentication required to execute operations": {}, + "Authentication required to execute write operations": {}, + "Author": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tác giả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启动时自动清理" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "作者" } } } }, - "Auto Generate" : { - - }, - "Auto Inc" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự tăng" + "AUTO": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TỰ ĐỘNG" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自增" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自动" } } } }, - "Auto Increment" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự động tăng" + "Auto cleanup on startup": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự động dọn dẹp khi khởi động" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自动递增" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "启动时自动清理" } } } }, - "Auto-indent" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự động thụt lề" + "Auto Generate": {}, + "Auto Inc": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự tăng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自动缩进" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自增" } } } }, - "Auto-show inspector on row select" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự động hiện thanh kiểm tra khi chọn dòng" + "Auto Increment": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự động tăng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选中行时自动显示检查器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自动递增" } } } }, - "Automatically check for updates" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự động kiểm tra cập nhật" + "Auto-indent": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự động thụt lề" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自动检查更新" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自动缩进" } } } }, - "Avg Row" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TB dòng" + "Auto-show inspector on row select": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự động hiện thanh kiểm tra khi chọn dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "平均行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选中行时自动显示检查器" } } } }, - "Base32-encoded secret from your authenticator setup" : { - - }, - "bastion.example.com" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "bastion.example.com" + "Automatically check for updates": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự động kiểm tra cập nhật" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "bastion.example.com" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自动检查更新" } } } }, - "between" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "giữa" + "Avg Row": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TB dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "介于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "平均行" } } } }, - "Blue" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xanh dương" + "Base32-encoded secret from your authenticator setup": {}, + "bastion.example.com": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "bastion.example.com" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "蓝色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "bastion.example.com" } } } }, - "Browse" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Duyệt" + "between": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "giữa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "浏览" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "介于" } } } }, - "Browse..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Duyệt..." + "Blue": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xanh dương" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "浏览..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "蓝色" } } } }, - "Built-in" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tích hợp sẵn" + "Browse": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Duyệt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "内置" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "浏览" } } } }, - "Built-in plugins cannot be uninstalled" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể gỡ cài đặt plugin tích hợp sẵn" + "Browse...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Duyệt..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法卸载内置插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "浏览..." } } } }, - "Bundle ID" : { - + "Built-in": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tích hợp sẵn" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "内置" + } + } + } }, - "Bundle ID:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bundle ID:" + "Built-in plugins cannot be uninstalled": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể gỡ cài đặt plugin tích hợp sẵn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bundle ID:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法卸载内置插件" } } } }, - "CA Cert" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chứng chỉ CA" + "Bundle ID": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bundle ID" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CA 证书" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Bundle ID" } } } }, - "CA Certificate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chứng chỉ CA" + "Bundle ID:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bundle ID:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CA 证书" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Bundle ID:" } } } }, - "Cancel" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy" + "CA Cert": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chứng chỉ CA" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "取消" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "CA 证书" } } } }, - "Cannot execute write queries: connection is read-only" : { - + "CA Certificate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chứng chỉ CA" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "CA 证书" + } + } + } }, - "Cannot format empty SQL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể định dạng SQL trống" + "Cancel": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法格式化空 SQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "取消" } } } }, - "Capabilities" : { - + "Cannot execute write queries: connection is read-only": {}, + "Cannot format empty SQL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể định dạng SQL trống" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法格式化空 SQL" + } + } + } }, - "Capabilities:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tính năng:" + "Capabilities": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khả năng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "功能:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "功能" } } } }, - "Cascade" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cascade" + "Capabilities:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tính năng:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cascade" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "功能:" } } } }, - "Category" : { - + "Cascade": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cascade" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cascade" + } + } + } }, - "Cell Renderer" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trình hiển thị ô" + "Category": {}, + "Cell Renderer": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trình hiển thị ô" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "单元格渲染器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "单元格渲染器" } } } }, - "Cell Value" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị ô" + "Cell Value": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị ô" } } } }, - "Change Color" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đổi màu" + "Change Color": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đổi màu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "更改颜色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "更改颜色" } } } }, - "Change File" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đổi tệp" + "Change File": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đổi tệp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "更改文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "更改文件" } } } }, - "Change File..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đổi tệp..." + "Change File...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đổi tệp..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "更改文件..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "更改文件..." } } } }, - "Character Set" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bộ ký tự" + "Character Set": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bộ ký tự" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字符集" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "字符集" } } } }, - "Charset (e.g., utf8mb4)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bộ ký tự (vd: utf8mb4)" + "Charset (e.g., utf8mb4)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bộ ký tự (vd: utf8mb4)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字符集(如 utf8mb4)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "字符集(如 utf8mb4)" } } } }, - "Chat" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chat" + "Chat": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chat" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "对话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "对话" } } } }, - "Check for Updates..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra cập nhật..." + "Check for Updates...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểm tra cập nhật..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "检查更新..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "检查更新..." } } } }, - "Choose a query from the list\nto see its full content here." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn một truy vấn từ danh sách\nđể xem nội dung đầy đủ tại đây." + "Choose a query from the list\nto see its full content here.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn một truy vấn từ danh sách\nđể xem nội dung đầy đủ tại đây." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "从列表中选择一个查询\n以在此处查看其完整内容。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从列表中选择一个查询\n以在此处查看其完整内容。" } } } }, - "Clear" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa" + "Clear": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除" } } } }, - "Clear All" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa tất cả" + "Clear All": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa tất cả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全部清除" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全部清除" } } } }, - "Clear all history" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xoá toàn bộ lịch sử" + "Clear all history": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xoá toàn bộ lịch sử" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除全部历史" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除全部历史" } } } }, - "Clear All History?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa toàn bộ lịch sử?" + "Clear All History?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa toàn bộ lịch sử?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除全部历史?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除全部历史?" } } } }, - "Clear all query history" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa toàn bộ lịch sử truy vấn" + "Clear all query history": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa toàn bộ lịch sử truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除全部查询历史" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除全部查询历史" } } } }, - "Clear Conversation" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa hội thoại" + "Clear Conversation": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa hội thoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除对话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除对话" } } } }, - "Clear History..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa lịch sử..." + "Clear History...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa lịch sử..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除历史..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除历史..." } } } }, - "Clear Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xoá truy vấn" + "Clear Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xoá truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除查询" } } } }, - "Clear Query (⌘+Delete)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa truy vấn (⌘+Delete)" + "Clear Query (⌘+Delete)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa truy vấn (⌘+Delete)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除查询 (⌘+Delete)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除查询 (⌘+Delete)" } } } }, - "Clear Recents" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xoá gần đây" + "Clear Recents": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xoá gần đây" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除最近记录" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除最近记录" } } } }, - "Clear search" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa tìm kiếm" + "Clear search": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa tìm kiếm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除搜索" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除搜索" } } } }, - "Clear Search" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa tìm kiếm" + "Clear Search": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa tìm kiếm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除搜索" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除搜索" } } } }, - "Clear Selection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bỏ chọn" + "Clear Selection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bỏ chọn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "取消选择" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "取消选择" } } } }, - "Clear table filter" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa bộ lọc bảng" + "Clear table filter": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa bộ lọc bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除表筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除表筛选" } } } }, - "Click + to add a relationship between this table and another" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấn + để thêm mối quan hệ giữa bảng này và bảng khác" + "Click + to add a relationship between this table and another": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấn + để thêm mối quan hệ giữa bảng này và bảng khác" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "点击 + 添加此表与其他表之间的关系" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "点击 + 添加此表与其他表之间的关系" } } } }, - "Click + to create your first connection" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấn + để tạo kết nối đầu tiên" + "Click + to create your first connection": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấn + để tạo kết nối đầu tiên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "点击 + 创建您的第一个连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "点击 + 创建您的第一个连接" } } } }, - "Click a table" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấn vào một bảng" + "Click a table": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấn vào một bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "点击一个表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "点击一个表" } } } }, - "Click to load models" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấp để tải danh sách model" + "Click to load models": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấp để tải danh sách model" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "点击加载模型" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "点击加载模型" } } } }, - "Click to show all tables with metadata" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấn để hiện tất cả bảng với siêu dữ liệu" + "Click to show all tables with metadata": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấn để hiện tất cả bảng với siêu dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "点击显示所有表及其元数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "点击显示所有表及其元数据" } } } }, - "Client Cert" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chứng chỉ máy khách" + "Client Cert": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chứng chỉ máy khách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "客户端证书" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "客户端证书" } } } }, - "Client Certificates (Optional)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chứng chỉ máy khách (Tùy chọn)" + "Client Certificates (Optional)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chứng chỉ máy khách (Tùy chọn)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "客户端证书(可选)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "客户端证书(可选)" } } } }, - "Client Key" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khóa máy khách" + "Client Key": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khóa máy khách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "客户端密钥" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "客户端密钥" } } } }, - "Clipboard is empty or contains no text data." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bộ nhớ tạm trống hoặc không chứa dữ liệu văn bản." + "Clipboard is empty or contains no text data.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bộ nhớ tạm trống hoặc không chứa dữ liệu văn bản." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "剪贴板为空或不包含文本数据。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "剪贴板为空或不包含文本数据。" } } } }, - "Close" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đóng" + "Close": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đóng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭" } } } }, - "Close (ESC)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đóng (ESC)" + "Close (ESC)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đóng (ESC)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭 (ESC)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭 (ESC)" } } } }, - "Close Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đóng tab" + "Close Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đóng tab" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭标签页" } } } }, - "Closing this tab will discard all unsaved changes." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đóng tab này sẽ hủy tất cả thay đổi chưa lưu." + "Closing this tab will discard all unsaved changes.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đóng tab này sẽ hủy tất cả thay đổi chưa lưu." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭此标签页将丢弃所有未保存的更改。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭此标签页将丢弃所有未保存的更改。" } } } }, - "CMD" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CMD" + "CMD": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CMD" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CMD" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "CMD" } } } }, - "Collation" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đối chiếu" + "Collation": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đối chiếu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "排序规则" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "排序规则" } } } }, - "Color" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Màu sắc" + "Color": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Màu sắc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "颜色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "颜色" } } } }, - "Color %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Màu %@" + "Color %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Màu %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "颜色 %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "颜色 %@" } } } }, - "Column" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột" + "Column": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列" } } } }, - "Column count mismatch on line %lld: expected %lld columns, found %lld." : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Column count mismatch on line %1$lld: expected %2$lld columns, found %3$lld." + "Column count mismatch on line %lld: expected %lld columns, found %lld.": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Column count mismatch on line %1$lld: expected %2$lld columns, found %3$lld." } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số cột không khớp ở dòng %1$lld: mong đợi %2$lld cột, tìm thấy %3$lld." + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số cột không khớp ở dòng %1$lld: mong đợi %2$lld cột, tìm thấy %3$lld." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "第 %lld 行列数不匹配:期望 %lld 列,实际 %lld 列。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "第 %lld 行列数不匹配:期望 %lld 列,实际 %lld 列。" } } } }, - "Column Details" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chi tiết cột" + "Column Details": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chi tiết cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列详情" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列详情" } } } }, - "Column name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên cột" + "Column name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列名" } } } }, - "Column Name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên cột" + "Column Name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列名" } } } }, - "Column: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột: %@" + "Column: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列:%@" } } } }, - "Columns" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột" + "Columns": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列" } } } }, - "Columns (comma-separated)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Các cột (phân tách bằng dấu phẩy)" + "Columns (comma-separated)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Các cột (phân tách bằng dấu phẩy)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "列(逗号分隔)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列(逗号分隔)" } } } }, - "Comfortable" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thoải mái" + "Comfortable": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thoải mái" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "舒适" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "舒适" } } } }, - "Command Preview" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước lệnh" + "Command Preview": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "命令预览" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "命令预览" } } } }, - "Comment" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ghi chú" + "Comment": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ghi chú" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "注释" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "注释" } } } }, - "Compact" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thu gọn" + "Compact": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thu gọn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "紧凑" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "紧凑" } } } }, - "Compress the file using Gzip" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nén tệp bằng Gzip" + "Compress the file using Gzip": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nén tệp bằng Gzip" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用 Gzip 压缩文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "使用 Gzip 压缩文件" } } } }, - "Config Host" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Máy chủ cấu hình" + "Config Host": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Máy chủ cấu hình" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "配置主机" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "配置主机" } } } }, - "Configure an AI provider in Settings to start chatting." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cấu hình nhà cung cấp AI trong Cài đặt để bắt đầu trò chuyện." + "Configure an AI provider in Settings to start chatting.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cấu hình nhà cung cấp AI trong Cài đặt để bắt đầu trò chuyện." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在设置中配置 AI 提供商以开始对话。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在设置中配置 AI 提供商以开始对话。" } } } }, - "Connect" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối" + "Connect": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接" } } } }, - "Connect Anyway" : { - - }, - "Connected" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã kết nối" + "Connect Anyway": {}, + "Connected": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已连接" } } } }, - "Connecting" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang kết nối" + "Connecting": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接中" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接中" } } } }, - "Connecting..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang kết nối..." + "Connecting...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang kết nối..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接中..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接中..." } } } }, - "Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối" + "Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接" } } } }, - "Connection Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối thất bại" + "Connection Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接失败" } } } }, - "Connection lost" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mất kết nối" + "Connection lost": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mất kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接丢失" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接丢失" } } } }, - "Connection name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên kết nối" + "Connection name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接名称" } } } }, - "Connection Not Found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy kết nối" + "Connection Not Found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到连接" } } } }, - "Connection Status" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trạng thái kết nối" + "Connection Status": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trạng thái kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接状态" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接状态" } } } }, - "Connection successful" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối thành công" + "Connection successful": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối thành công" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接成功" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接成功" } } } }, - "Connection Switcher" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển đổi kết nối" + "Connection Switcher": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển đổi kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换连接" } } } }, - "Connection test failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra kết nối thất bại" + "Connection test failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểm tra kết nối thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接测试失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接测试失败" } } } }, - "Connection Test Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra kết nối thất bại" + "Connection Test Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểm tra kết nối thất bại" } } } }, - "Connection URL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "URL kết nối" + "Connection URL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "URL kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接 URL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接 URL" } } } }, - "Connection URL cannot be empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "URL kết nối không được để trống" + "Connection URL cannot be empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "URL kết nối không được để trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接 URL 不能为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接 URL 不能为空" } } } }, - "Connection URL must include a host" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "URL kết nối phải bao gồm host" + "Connection URL must include a host": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "URL kết nối phải bao gồm host" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接 URL 必须包含主机" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接 URL 必须包含主机" } } } }, - "Constraint name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên ràng buộc" + "Constraint name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên ràng buộc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "约束名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "约束名称" } } } }, - "contains" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "chứa" + "contains": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "chứa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包含" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包含" } } } }, - "Context" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ngữ cảnh" + "Context": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ngữ cảnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上下文" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上下文" } } } }, - "Continue" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tiếp tục" + "Continue": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tiếp tục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "继续" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "继续" } } } }, - "Conversation History" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lịch sử hội thoại" + "Conversation History": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lịch sử hội thoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "对话历史" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "对话历史" } } } }, - "Convert line break to space" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển xuống dòng thành dấu cách" + "Convert line break to space": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển xuống dòng thành dấu cách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将换行转换为空格" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将换行转换为空格" } } } }, - "Convert NULL to empty" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển NULL thành rỗng" + "Convert NULL to empty": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển NULL thành rỗng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将 NULL 转换为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将 NULL 转换为空" } } } }, - "Convert NULL to EMPTY" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển NULL thành RỖNG" + "Convert NULL to EMPTY": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển NULL thành RỖNG" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将 NULL 转换为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将 NULL 转换为空" } } } }, - "Copied" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã sao chép" + "Copied": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã sao chép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已复制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已复制" } } } }, - "Copied!" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã sao chép!" + "Copied!": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã sao chép!" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已复制!" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已复制!" } } } }, - "Copy" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép" + "Copy": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制" } } } }, - "Copy All" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép tất cả" + "Copy All": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép tất cả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全部复制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全部复制" } } } }, - "Copy as" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép dạng" + "Copy as": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép dạng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制为" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制为" } } } }, - "Copy as URL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép dạng URL" + "Copy as URL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép dạng URL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制为 URL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制为 URL" } } } }, - "Copy Column Name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép tên cột" + "Copy Column Name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép tên cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制列名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制列名" } } } }, - "Copy Name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép tên" + "Copy Name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép tên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制名称" } } } }, - "Copy Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép truy vấn" + "Copy Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制查询" } } } }, - "Copy SQL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép SQL" + "Copy SQL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制 SQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制 SQL" } } } }, - "Copy this statement to clipboard" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép câu lệnh này vào bộ nhớ tạm" + "Copy this statement to clipboard": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép câu lệnh này vào bộ nhớ tạm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将此语句复制到剪贴板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将此语句复制到剪贴板" } } } }, - "Copy Value" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép giá trị" + "Copy Value": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sao chép giá trị" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制值" } } } }, - "Copy with Headers" : { - - }, - "Could not fetch plugin registry" : { - - }, - "Count all rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đếm tất cả hàng" + "Copy with Headers": {}, + "Could not fetch plugin registry": {}, + "Count all rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đếm tất cả hàng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "统计全部行数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "统计全部行数" } } } }, - "Counting..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang đếm..." + "Counting...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang đếm..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "统计中..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "统计中..." } } } }, - "Create" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo" + "Create": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建" } } } }, - "Create a connection to get started" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo kết nối để bắt đầu" + "Create a connection to get started": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo kết nối để bắt đầu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建连接以开始使用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建连接以开始使用" } } } }, - "Create a connection to get started with\nyour databases." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo kết nối để bắt đầu sử dụng\ncơ sở dữ liệu của bạn." + "Create a connection to get started with\nyour databases.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo kết nối để bắt đầu sử dụng\ncơ sở dữ liệu của bạn." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建连接以开始使用\n您的数据库。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建连接以开始使用\n您的数据库。" } } } }, - "Create connection..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo kết nối..." + "Create connection...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo kết nối..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建连接..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建连接..." } } } }, - "Create Database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo cơ sở dữ liệu" + "Create Database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建数据库" } } } }, - "Create new database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo cơ sở dữ liệu mới" + "Create new database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo cơ sở dữ liệu mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建新数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建新数据库" } } } }, - "Create New Group" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo nhóm mới" + "Create New Group": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo nhóm mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建新分组" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建新分组" } } } }, - "Create New Group..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo nhóm mới..." + "Create New Group...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo nhóm mới..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建新分组..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建新分组..." } } } }, - "Create New Tag" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo thẻ mới" + "Create New Tag": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo thẻ mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建新标签" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建新标签" } } } }, - "Create New Tag..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo thẻ mới..." + "Create New Tag...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo thẻ mới..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建新标签..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建新标签..." } } } }, - "Create New View..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo view mới..." + "Create New View...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo view mới..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建新视图..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建新视图..." } } } }, - "Created" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã tạo" + "Created": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã tạo" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已创建" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已创建" } } } }, - "Creating..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang tạo..." + "Creating...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang tạo..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建中..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建中..." } } } }, - "CRITICAL: Transaction rollback failed - database may be in inconsistent state: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "NGHIÊM TRỌNG: Hoàn tác giao dịch thất bại - cơ sở dữ liệu có thể ở trạng thái không nhất quán: %@" + "CRITICAL: Transaction rollback failed - database may be in inconsistent state: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "NGHIÊM TRỌNG: Hoàn tác giao dịch thất bại - cơ sở dữ liệu có thể ở trạng thái không nhất quán: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "严重:事务回滚失败 - 数据库可能处于不一致状态:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "严重:事务回滚失败 - 数据库可能处于不一致状态:%@" } } } }, - "CURDATE()" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CURDATE()" + "CURDATE()": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CURDATE()" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CURDATE()" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "CURDATE()" } } } }, - "current" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "hiện tại" + "current": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "hiện tại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当前" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当前" } } } }, - "Current database: %@ (⌘K to switch)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu hiện tại: %@ (⌘K để chuyển)" + "Current database: %@ (⌘K to switch)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu hiện tại: %@ (⌘K để chuyển)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当前数据库:%@(⌘K 切换)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当前数据库:%@(⌘K 切换)" } } } }, - "Current database: %@ (read-only, ⌘K to switch)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu hiện tại: %@ (chỉ đọc, ⌘K để chuyển)" + "Current database: %@ (read-only, ⌘K to switch)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu hiện tại: %@ (chỉ đọc, ⌘K để chuyển)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当前数据库:%@(只读,⌘K 切换)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当前数据库:%@(只读,⌘K 切换)" } } } }, - "Current schema: %@ (⌘K to switch)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema hiện tại: %@ (⌘K để chuyển)" + "Current schema: %@ (⌘K to switch)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Schema hiện tại: %@ (⌘K để chuyển)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当前 schema:%@(⌘K 切换)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当前 schema:%@(⌘K 切换)" } } } }, - "Current schema: %@ (read-only, ⌘K to switch)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema hiện tại: %@ (chỉ đọc, ⌘K để chuyển)" + "Current schema: %@ (read-only, ⌘K to switch)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Schema hiện tại: %@ (chỉ đọc, ⌘K để chuyển)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当前 schema:%@(只读,⌘K 切换)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当前 schema:%@(只读,⌘K 切换)" } } } }, - "CURRENT_TIMESTAMP()" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CURRENT_TIMESTAMP()" + "CURRENT_TIMESTAMP()": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CURRENT_TIMESTAMP()" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CURRENT_TIMESTAMP()" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "CURRENT_TIMESTAMP()" } } } }, - "Cursor position %lld exceeds SQL length (%lld)" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Cursor position %1$lld exceeds SQL length (%2$lld)" + "Cursor position %lld exceeds SQL length (%lld)": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Cursor position %1$lld exceeds SQL length (%2$lld)" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vị trí con trỏ %1$lld vượt quá độ dài SQL (%2$lld)" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Vị trí con trỏ %1$lld vượt quá độ dài SQL (%2$lld)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "光标位置 %lld 超出 SQL 长度(%lld)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "光标位置 %lld 超出 SQL 长度(%lld)" } } } }, - "CURTIME()" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CURTIME()" + "CURTIME()": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CURTIME()" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CURTIME()" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "CURTIME()" } } } }, - "Custom" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tùy chỉnh" + "Custom": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tùy chỉnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自定义" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自定义" } } } }, - "Custom Path" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đường dẫn tùy chỉnh" + "Custom Path": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đường dẫn tùy chỉnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自定义路径" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自定义路径" } } } }, - "Cut" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cắt" + "Cut": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cắt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "剪切" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "剪切" } } } }, - "Dark" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tối" + "Dark": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "深色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "深色" } } } }, - "Data" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dữ liệu" + "Data": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据" } } } }, - "Data grid" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưới dữ liệu" + "Data grid": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưới dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据网格" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据网格" } } } }, - "Data Grid" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưới dữ liệu" + "Data Grid": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưới dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据网格" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据网格" } } } }, - "Data Size" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích thước dữ liệu" + "Data Size": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích thước dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据大小" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据大小" } } } }, - "Data Type:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểu dữ liệu:" + "Data Type:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểu dữ liệu:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据类型:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据类型:" } } } }, - "Database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu" + "Database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库" } } } }, - "Database Driver" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trình điều khiển cơ sở dữ liệu" + "Database Driver": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trình điều khiển cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库驱动" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库驱动" } } } }, - "Database Drivers" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trình điều khiển cơ sở dữ liệu" + "Database Drivers": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trình điều khiển cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库驱动" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库驱动" } } } }, - "Database File" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tệp cơ sở dữ liệu" + "Database File": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tệp cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库文件" } } } }, - "Database file not found: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy tệp cơ sở dữ liệu: %@" + "Database file not found: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy tệp cơ sở dữ liệu: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到数据库文件: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到数据库文件: %@" } } } }, - "Database Index: %lld" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chỉ mục cơ sở dữ liệu: %lld" + "Database Index: %lld": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chỉ mục cơ sở dữ liệu: %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库索引: %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库索引: %lld" } } } }, - "Database Name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên cơ sở dữ liệu" + "Database Name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库名称" } } } }, - "Database Switch Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển cơ sở dữ liệu thất bại" + "Database Switch Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển cơ sở dữ liệu thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换数据库失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换数据库失败" } } } }, - "Database Switcher" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển đổi cơ sở dữ liệu" + "Database Switcher": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển đổi cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库切换器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库切换器" } } } }, - "Database Type" : { - - }, - "Database Type:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Loại cơ sở dữ liệu:" + "Database Type": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Loại Database" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库类型:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库类型" } } } }, - "Database type: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Loại cơ sở dữ liệu: %@" + "Database Type:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Loại cơ sở dữ liệu:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库类型: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库类型:" } } } }, - "database_name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "database_name" + "Database type: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Loại cơ sở dữ liệu: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "database_name" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库类型: %@" } } } }, - "Database: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu: %@" + "database_name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "database_name" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "database_name" } } } }, - "Database/Schema:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu/Schema:" + "Database: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库/Schema:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库: %@" } } } }, - "Databases" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu" + "Database/Schema:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu/Schema:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库/Schema:" } } } }, - "Date format:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng ngày:" + "Databases": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "日期格式:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据库" } } } }, - "Deactivate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy kích hoạt" + "Date format:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng ngày:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "日期格式:" } } } }, - "Deactivate License?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy kích hoạt giấy phép?" + "Deactivate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy kích hoạt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停用许可证?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "停用" } } } }, - "Deactivate..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy kích hoạt..." + "Deactivate License?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy kích hoạt giấy phép?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停用..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "停用许可证?" } } } }, - "Deactivated" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã hủy kích hoạt" + "Deactivate...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy kích hoạt..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已停用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "停用..." } } } }, - "Deactivation Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy kích hoạt thất bại" + "Deactivated": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã hủy kích hoạt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停用失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已停用" } } } }, - "Decimal" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thập phân" + "Deactivation Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy kích hoạt thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "十进制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "停用失败" } } } }, - "Default" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mặc định" + "Decimal": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thập phân" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "十进制" } } } }, - "DEFAULT" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "MẶC ĐỊNH" + "Default": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认" } } } }, - "Default Column" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột mặc định" + "DEFAULT": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "MẶC ĐỊNH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认" } } } }, - "Default connection policy" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chính sách kết nối mặc định" + "Default Column": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认连接策略" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认列" } } } }, - "Default Operator" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toán tử mặc định" + "Default connection policy": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chính sách kết nối mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认运算符" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认连接策略" } } } }, - "Default page size:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích thước trang mặc định:" + "Default Operator": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Toán tử mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认页面大小:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认运算符" } } } }, - "Default Port" : { - - }, - "Default Port:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cổng mặc định:" + "Default page size:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích thước trang mặc định:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认端口:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认页面大小:" } } } }, - "Default value" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị mặc định" + "Default Port": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cổng mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认端口" } } } }, - "Default Value" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị mặc định" + "Default Port:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cổng mặc định:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认端口:" } } } }, - "Default:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mặc định:" + "Default value": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认值" } } } }, - "Delete" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa" + "Default Value": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认值" } } } }, - "Delete \"%@\"" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa \"%@\"" + "Default:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mặc định:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除「%@」" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "默认:" } } } }, - "Delete (⌫)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa (⌫)" + "Delete": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除 (⌫)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除" } } } }, - "Delete Check Constraint" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa ràng buộc kiểm tra" + "Delete \"%@\"": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa \"%@\"" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除检查约束" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除「%@」" } } } }, - "Delete Column" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa cột" + "Delete (⌫)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa (⌫)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除 (⌫)" } } } }, - "Delete Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa kết nối" + "Delete Check Constraint": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa ràng buộc kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除检查约束" } } } }, - "Delete Foreign Key" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa khóa ngoại" + "Delete Column": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除外键" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除列" } } } }, - "Delete Group" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa nhóm" + "Delete Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除分组" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除连接" } } } }, - "Delete Index" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa chỉ mục" + "Delete Foreign Key": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa khóa ngoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除索引" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除外键" } } } }, - "Delete Preset" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa mẫu đặt trước" + "Delete Group": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa nhóm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除预设" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除分组" } } } }, - "Delimiter" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dấu phân cách" + "Delete Index": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa chỉ mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "分隔符" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除索引" } } } }, - "Details" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chi tiết" + "Delete Preset": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa mẫu đặt trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "详情" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除预设" } } } }, - "Digits" : { - - }, - "Disable foreign key checks" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tắt kiểm tra khóa ngoại" + "Delimiter": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dấu phân cách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "禁用外键检查" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "分隔符" } } } }, - "Disabled" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã tắt" + "Details": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chi tiết" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已禁用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "详情" } } } }, - "Discard" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy bỏ" + "Digits": {}, + "Disable foreign key checks": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tắt kiểm tra khóa ngoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "丢弃" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "禁用外键检查" } } } }, - "Discard Changes?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy bỏ thay đổi?" + "Disabled": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã tắt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "丢弃更改?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已禁用" } } } }, - "Discard Unsaved Changes?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hủy bỏ thay đổi chưa lưu?" + "Discard": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy bỏ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "丢弃未保存的更改?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "丢弃" } } } }, - "Disconnect" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ngắt kết nối" + "Discard Changes?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy bỏ thay đổi?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "断开连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "丢弃更改?" } } } }, - "Disconnected" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã ngắt kết nối" + "Discard Unsaved Changes?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hủy bỏ thay đổi chưa lưu?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已断开连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "丢弃未保存的更改?" } } } }, - "Dismiss" : { - + "Disconnect": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ngắt kết nối" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "断开连接" + } + } + } }, - "Display" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị" + "Disconnected": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã ngắt kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已断开连接" } } } }, - "Do you want to save changes?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn có muốn lưu thay đổi?" + "Dismiss": {}, + "Display": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "是否保存更改?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示" } } } }, - "Documentation" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tài liệu" + "Do you want to save changes?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn có muốn lưu thay đổi?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文档" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "是否保存更改?" } } } }, - "Don't Allow" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không cho phép" + "Documentation": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tài liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不允许" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文档" } } } }, - "Don't Save" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không lưu" + "Don't Allow": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không cho phép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不保存" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不允许" } } } }, - "Don't show this again" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không hiện lại" + "Don't Save": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không lưu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不再显示" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不保存" } } } }, - "Downloads" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lượt tải" + "Don't show this again": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không hiện lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下载次数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不再显示" } } } }, - "Drop" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa" + "Downloads": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lượt tải" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "下载次数" } } } }, - "Drop %lld tables" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa %lld bảng" + "Drop": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除 %lld 个表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除" } } } }, - "Drop all tables that depend on this table" : { - + "Drop %lld tables": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa %lld bảng" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除 %lld 个表" + } + } + } }, - "Drop table '%@'" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa bảng '%@'" + "Drop all tables that depend on this table": {}, + "Drop table '%@'": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa bảng '%@'" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除表 '%@'" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除表 '%@'" } } } }, - "Drop View" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa view" + "Drop View": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa view" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除视图" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除视图" } } } }, - "Duplicate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhân bản" + "Duplicate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhân bản" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制" } } } }, - "Duplicate Existing Table" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhân bản bảng hiện có" + "Duplicate Existing Table": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhân bản bảng hiện có" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制现有表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制现有表" } } } }, - "Duplicate filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhân đôi bộ lọc" + "Duplicate filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhân đôi bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制筛选条件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制筛选条件" } } } }, - "Duplicate Filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhân bản bộ lọc" + "Duplicate Filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhân bản bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制筛选条件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制筛选条件" } } } }, - "Duplicate Row" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhân bản dòng" + "Duplicate Row": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhân bản dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制行" } } } }, - "Duplicate Table Structure" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhân bản cấu trúc bảng" + "Duplicate Table Structure": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhân bản cấu trúc bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制表结构" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制表结构" } } } }, - "Each SQLite file is a separate database.\nTo open a different database, create a new connection." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mỗi tệp SQLite là một cơ sở dữ liệu riêng.\nĐể mở cơ sở dữ liệu khác, hãy tạo kết nối mới." + "Each SQLite file is a separate database.\nTo open a different database, create a new connection.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mỗi tệp SQLite là một cơ sở dữ liệu riêng.\nĐể mở cơ sở dữ liệu khác, hãy tạo kết nối mới." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每个 SQLite 文件是一个独立的数据库。\n要打开其他数据库,请创建新连接。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每个 SQLite 文件是一个独立的数据库。\n要打开其他数据库,请创建新连接。" } } } }, - "Edit" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa" + "Edit": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑" } } } }, - "Edit Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa kết nối" + "Edit Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑连接" } } } }, - "Edit Details (Double-click)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa chi tiết (Nhấp đúp)" + "Edit Details (Double-click)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa chi tiết (Nhấp đúp)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑详情(双击)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑详情(双击)" } } } }, - "Edit Provider" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa nhà cung cấp" + "Edit Provider": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa nhà cung cấp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑提供商" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑提供商" } } } }, - "Edit Row" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa dòng" + "Edit Row": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑行" } } } }, - "Edit View Definition" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa định nghĩa view" + "Edit View Definition": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa định nghĩa view" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑视图定义" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑视图定义" } } } }, - "Editing" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang sửa" + "Editing": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang sửa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑中" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑中" } } } }, - "Editor" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trình soạn thảo" + "Editor": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trình soạn thảo" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编辑器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑器" } } } }, - "Email:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Email:" + "Email:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Email:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "邮箱:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "邮箱:" } } } }, - "Empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trống" + "Empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "空" } } } }, - "Empty Redis command" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lệnh Redis trống" + "Empty Redis command": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lệnh Redis trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redis 命令为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Redis 命令为空" } } } }, - "Enable inline suggestions" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật gợi ý trực tiếp" + "Enable inline suggestions": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật gợi ý trực tiếp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用行内建议" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "启用行内建议" } } } }, - "Enable preview tabs" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật tab xem trước" + "Enable preview tabs": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật tab xem trước" } } } }, - "Enable SSH Tunnel" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật đường hầm SSH" + "Enable SSH Tunnel": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật đường hầm SSH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用 SSH 隧道" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "启用 SSH 隧道" } } } }, - "Enabled" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã bật" + "Enabled": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã bật" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已启用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已启用" } } } }, - "Encoding:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mã hóa:" + "Encoding:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mã hóa:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "编码:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编码:" } } } }, - "Endpoint" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Endpoint" + "Endpoint": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Endpoint" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Endpoint" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Endpoint" } } } }, - "ends with" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "kết thúc bằng" + "ends with": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "kết thúc bằng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "以...结尾" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "以...结尾" } } } }, - "Engine" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Engine" + "Engine": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Engine" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Engine" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Engine" } } } }, - "Engine (e.g., InnoDB)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Engine (vd: InnoDB)" + "Engine (e.g., InnoDB)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Engine (vd: InnoDB)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Engine(如 InnoDB)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Engine(如 InnoDB)" } } } }, - "Enter a name for this filter preset" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập tên cho mẫu bộ lọc này" + "Enter a name for this filter preset": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập tên cho mẫu bộ lọc này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "输入此筛选预设的名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "输入此筛选预设的名称" } } } }, - "Enter a new name for the group." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập tên mới cho nhóm." + "Enter a new name for the group.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập tên mới cho nhóm." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "输入分组的新名称。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "输入分组的新名称。" } } } }, - "Enter database name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập tên cơ sở dữ liệu" + "Enter database name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập tên cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "输入数据库名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "输入数据库名称" } } } }, - "Enter the TOTP verification code for SSH authentication." : { - - }, - "equals" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "bằng" + "Enter the TOTP verification code for SSH authentication.": {}, + "equals": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "bằng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "等于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "等于" } } } }, - "Error" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi" + "Error": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "错误" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "错误" } } } }, - "Error Applying Changes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi áp dụng thay đổi" + "Error Applying Changes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi áp dụng thay đổi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "应用更改时出错" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "应用更改时出错" } } } }, - "Error:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi:" + "Error:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "错误:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "错误:" } } } }, - "Error: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi: %@" + "Error: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "错误: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "错误: %@" } } } }, - "Error: Selected path is not a regular file" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi: Đường dẫn đã chọn không phải tệp thông thường" + "Error: Selected path is not a regular file": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi: Đường dẫn đã chọn không phải tệp thông thường" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "错误: 所选路径不是常规文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "错误: 所选路径不是常规文件" } } } }, - "EU Long (31/12/2024 23:59:59)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Châu Âu dài (31/12/2024 23:59:59)" + "EU Long (31/12/2024 23:59:59)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Châu Âu dài (31/12/2024 23:59:59)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "欧洲长格式 (31/12/2024 23:59:59)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "欧洲长格式 (31/12/2024 23:59:59)" } } } }, - "EU Short (31/12/2024)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Châu Âu ngắn (31/12/2024)" + "EU Short (31/12/2024)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Châu Âu ngắn (31/12/2024)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "欧洲短格式 (31/12/2024)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "欧洲短格式 (31/12/2024)" } } } }, - "Every table needs at least one column. Click + to get started" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mỗi bảng cần ít nhất một cột. Nhấn + để bắt đầu" + "Every table needs at least one column. Click + to get started": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mỗi bảng cần ít nhất một cột. Nhấn + để bắt đầu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每个表至少需要一列。点击 + 开始添加" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每个表至少需要一列。点击 + 开始添加" } } } }, - "Execute" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thực thi" + "Execute": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thực thi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "执行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "执行" } } } }, - "Execute All" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thực thi tất cả" + "Execute All": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thực thi tất cả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全部执行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全部执行" } } } }, - "Execute all statements in a single transaction. If any statement fails, all changes are rolled back." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thực thi tất cả câu lệnh trong một giao dịch. Nếu bất kỳ câu lệnh nào thất bại, tất cả thay đổi sẽ được hoàn tác." + "Execute all statements in a single transaction. If any statement fails, all changes are rolled back.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thực thi tất cả câu lệnh trong một giao dịch. Nếu bất kỳ câu lệnh nào thất bại, tất cả thay đổi sẽ được hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在单个事务中执行所有语句。如果任一语句失败,所有更改将回滚。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在单个事务中执行所有语句。如果任一语句失败,所有更改将回滚。" } } } }, - "Execute Query" : { - - }, - "Executed %lld statements" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã thực thi %lld câu lệnh" + "Execute Query": {}, + "Executed %lld statements": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã thực thi %lld câu lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已执行 %lld 条语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已执行 %lld 条语句" } } } }, - "Executing" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang thực thi" + "Executing": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang thực thi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "执行中" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "执行中" } } } }, - "Executing..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang thực thi..." + "Executing...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang thực thi..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在执行..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在执行..." } } } }, - "Expired" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hết hạn" + "Expired": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hết hạn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已过期" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已过期" } } } }, - "Explain" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giải thích" + "Explain": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giải thích" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "解释" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "解释" } } } }, - "EXPLAIN is not supported for this database type." : { - - }, - "Explain Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giải thích truy vấn" + "EXPLAIN is not supported for this database type.": {}, + "Explain Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giải thích truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "解释查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "解释查询" } } } }, - "Explain this SQL query:\n\n```sql\n%@\n```" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giải thích chi tiết câu truy vấn SQL sau:\n\n```sql\n%@\n```" + "Explain this SQL query:\n\n```sql\n%@\n```": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giải thích chi tiết câu truy vấn SQL sau:\n\n```sql\n%@\n```" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请解释以下 SQL 查询:\n\n```sql\n%@\n```" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "请解释以下 SQL 查询:\n\n```sql\n%@\n```" } } } }, - "Explain with AI" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giải thích với AI" + "Explain with AI": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giải thích với AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI 解释" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI 解释" } } } }, - "export" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "xuất" + "export": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "xuất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出" } } } }, - "Export" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất" + "Export": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出" } } } }, - "Export completed successfully" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất dữ liệu thành công" + "Export completed successfully": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất dữ liệu thành công" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出成功" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出成功" } } } }, - "Export data" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất dữ liệu" + "Export data": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出数据" } } } }, - "Export Data" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất dữ liệu" + "Export Data": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出数据" } } } }, - "Export Data (⌘⇧E)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất dữ liệu (⌘⇧E)" + "Export Data (⌘⇧E)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất dữ liệu (⌘⇧E)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出数据 (⌘⇧E)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出数据 (⌘⇧E)" } } } }, - "Export Error" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi xuất dữ liệu" + "Export Error": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi xuất dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出错误" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出错误" } } } }, - "Export failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất thất bại: %@" + "Export failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出失败: %@" } } } }, - "Export Format" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng xuất" + "Export Format": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng xuất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出格式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出格式" } } } }, - "Export format '%@' not found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy định dạng xuất '%@'" + "Export format '%@' not found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy định dạng xuất '%@'" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到导出格式 '%@'" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到导出格式 '%@'" } } } }, - "Export Formats" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng xuất" + "Export Formats": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng xuất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出格式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出格式" } } } }, - "Export multiple tables" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất nhiều bảng" + "Export multiple tables": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất nhiều bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出多个表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出多个表" } } } }, - "Export table" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất bảng" + "Export table": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出表" } } } }, - "Export..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất..." + "Export...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导出..." } } } }, - "Exports data as mongosh-compatible scripts. Drop, Indexes, and Data options are configured per collection in the collection list." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất dữ liệu dưới dạng script tương thích mongosh. Tùy chọn Drop, Indexes và Data được cấu hình cho từng collection trong danh sách collection." + "Exports data as mongosh-compatible scripts. Drop, Indexes, and Data options are configured per collection in the collection list.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuất dữ liệu dưới dạng script tương thích mongosh. Tùy chọn Drop, Indexes và Data được cấu hình cho từng collection trong danh sách collection." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将数据导出为 mongosh 兼容的脚本。Drop、Indexes 和 Data 选项可在集合列表中按集合配置。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将数据导出为 mongosh 兼容的脚本。Drop、Indexes 和 Data 选项可在集合列表中按集合配置。" } } } }, - "Expression (e.g., age >= 0)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Biểu thức (vd: age >= 0)" + "Expression (e.g., age >= 0)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Biểu thức (vd: age >= 0)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表达式(如 age >= 0)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表达式(如 age >= 0)" } } } }, - "Failed at line %lld" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thất bại tại dòng %lld" + "Failed at line %lld": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thất bại tại dòng %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在第 %lld 行失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在第 %lld 行失败" } } } }, - "Failed to compress data" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể nén dữ liệu" + "Failed to compress data": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể nén dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "压缩数据失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "压缩数据失败" } } } }, - "Failed to decompress .gz file" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giải nén tệp .gz thất bại" + "Failed to decompress .gz file": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giải nén tệp .gz thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "解压 .gz 文件失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "解压 .gz 文件失败" } } } }, - "Failed to decompress file: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giải nén tệp thất bại: %@" + "Failed to decompress file: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giải nén tệp thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "解压文件失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "解压文件失败: %@" } } } }, - "Failed to delete template: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa mẫu thất bại: %@" + "Failed to delete template: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa mẫu thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除模板失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除模板失败: %@" } } } }, - "Failed to encode content as UTF-8" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể mã hóa nội dung thành UTF-8" + "Failed to encode content as UTF-8": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể mã hóa nội dung thành UTF-8" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法将内容编码为 UTF-8" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法将内容编码为 UTF-8" } } } }, - "Failed to fetch table structure: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lấy cấu trúc bảng thất bại: %@" + "Failed to fetch table structure: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lấy cấu trúc bảng thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "获取表结构失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "获取表结构失败: %@" } } } }, - "Failed to import DDL: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập DDL thất bại: %@" + "Failed to import DDL: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập DDL thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入 DDL 失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入 DDL 失败: %@" } } } }, - "Failed to Load" : { - - }, - "Failed to load databases" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải danh sách cơ sở dữ liệu thất bại" + "Failed to Load": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载数据库列表失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载失败" } } } }, - "Failed to load databases: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải danh sách cơ sở dữ liệu thất bại: %@" + "Failed to load databases": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải danh sách cơ sở dữ liệu thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载数据库列表失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载数据库列表失败" } } } }, - "Failed to load plugin registry" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể tải danh sách plugin" + "Failed to load databases: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải danh sách cơ sở dữ liệu thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法加载插件注册表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载数据库列表失败: %@" } } } }, - "Failed to load preview using encoding: %@. Try selecting a different text encoding from the encoding picker and reload the preview." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải bản xem trước thất bại với mã hóa: %@. Hãy thử chọn mã hóa văn bản khác và tải lại bản xem trước." + "Failed to load plugin registry": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể tải danh sách plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用编码 %@ 加载预览失败。请尝试从编码选择器中选择其他文本编码并重新加载预览。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法加载插件注册表" } } } }, - "Failed to load preview using encoding: %@. Try selecting a different text encoding." : { - - }, - "Failed to load preview: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải bản xem trước thất bại: %@" + "Failed to load preview using encoding: %@. Try selecting a different text encoding from the encoding picker and reload the preview.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải bản xem trước thất bại với mã hóa: %@. Hãy thử chọn mã hóa văn bản khác và tải lại bản xem trước." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载预览失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "使用编码 %@ 加载预览失败。请尝试从编码选择器中选择其他文本编码并重新加载预览。" } } } }, - "Failed to load schemas" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể tải danh sách schema" + "Failed to load preview using encoding: %@. Try selecting a different text encoding.": {}, + "Failed to load preview: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải bản xem trước thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法加载 Schema 列表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载预览失败: %@" } } } }, - "Failed to load tables: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải danh sách bảng thất bại: %@" + "Failed to load schemas": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể tải danh sách schema" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载表列表失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法加载 Schema 列表" } } } }, - "Failed to load template: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải mẫu thất bại: %@" + "Failed to load tables: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải danh sách bảng thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载模板失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载表列表失败: %@" } } } }, - "Failed to open SSH channel for port forwarding" : { - + "Failed to load template: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải mẫu thất bại: %@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载模板失败: %@" + } + } + } }, - "Failed to parse any columns from table '%@'. Check console for debug info." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể phân tích cột từ bảng '%@'. Kiểm tra console để xem thông tin gỡ lỗi." + "Failed to open SSH channel for port forwarding": {}, + "Failed to parse any columns from table '%@'. Check console for debug info.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể phân tích cột từ bảng '%@'. Kiểm tra console để xem thông tin gỡ lỗi." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法从表 '%@' 解析任何列。请检查控制台获取调试信息。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法从表 '%@' 解析任何列。请检查控制台获取调试信息。" } } } }, - "Failed to parse plugin registry" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể phân tích danh sách plugin" + "Failed to parse plugin registry": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể phân tích danh sách plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法解析插件注册表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法解析插件注册表" } } } }, - "Failed to parse statement at line %lld: %@" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Failed to parse statement at line %1$lld: %2$@" + "Failed to parse statement at line %lld: %@": { + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Failed to parse statement at line %1$lld: %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phân tích câu lệnh thất bại tại dòng %1$lld: %2$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phân tích câu lệnh thất bại tại dòng %1$lld: %2$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在第 %lld 行解析语句失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在第 %lld 行解析语句失败: %@" } } } }, - "Failed to read file: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đọc tệp thất bại: %@" + "Failed to read file: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đọc tệp thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "读取文件失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "读取文件失败: %@" } } } }, - "Failed to Save Changes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu thay đổi thất bại" + "Failed to Save Changes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu thay đổi thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存更改失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存更改失败" } } } }, - "Failed to save template: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu mẫu thất bại: %@" + "Failed to save template: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu mẫu thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存模板失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存模板失败: %@" } } } }, - "Failed to write file: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không thể ghi tệp: %@" + "Failed to write file: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không thể ghi tệp: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "写入文件失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "写入文件失败: %@" } } } }, - "false" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "false" + "false": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "false" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "false" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "false" } } } }, - "FALSE" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "FALSE" + "FALSE": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "FALSE" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "FALSE" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "FALSE" } } } }, - "Feature Routing" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định tuyến tính năng" + "Feature Routing": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định tuyến tính năng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "功能路由" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "功能路由" } } } }, - "FIELDS" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TRƯỜNG" + "FIELDS": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TRƯỜNG" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字段" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "字段" } } } }, - "FIELDS (%lld)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CÁC TRƯỜNG (%lld)" + "FIELDS (%lld)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CÁC TRƯỜNG (%lld)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字段 (%lld)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "字段 (%lld)" } } } }, - "File" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tệp" + "File": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tệp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文件" } } } }, - "File name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên tệp" + "File name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên tệp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文件名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文件名" } } } }, - "File not found" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy tệp" + "File not found": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy tệp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到文件" } } } }, - "File Path" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đường dẫn tệp" + "File Path": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đường dẫn tệp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文件路径" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文件路径" } } } }, - "Filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bộ lọc" + "Filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选" } } } }, - "Filter column: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột lọc: %@" + "Filter column: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột lọc: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选列: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选列: %@" } } } }, - "Filter logic mode" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chế độ logic bộ lọc" + "Filter logic mode": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chế độ logic bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选逻辑模式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选逻辑模式" } } } }, - "Filter operator: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toán tử lọc: %@" + "Filter operator: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Toán tử lọc: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选运算符: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选运算符: %@" } } } }, - "Filter presets" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt sẵn bộ lọc" + "Filter presets": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt sẵn bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选预设" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选预设" } } } }, - "Filter settings" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt bộ lọc" + "Filter settings": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选设置" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选设置" } } } }, - "Filter Settings" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt bộ lọc" + "Filter Settings": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选设置" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选设置" } } } }, - "Filter with column" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lọc theo cột" + "Filter with column": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lọc theo cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "按列筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "按列筛选" } } } }, - "Filter..." : { - - }, - "Filters" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bộ lọc" + "Filter...": {}, + "Filters": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "筛选条件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "筛选条件" } } } }, - "Fix Error" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sửa lỗi" + "Fix Error": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sửa lỗi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "修复错误" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "修复错误" } } } }, - "Font" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phông chữ" + "Font": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phông chữ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字体" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "字体" } } } }, - "Font:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phông chữ:" + "Font:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phông chữ:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字体:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "字体:" } } } }, - "Forever" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mãi mãi" + "Forever": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mãi mãi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "永久" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "永久" } } } }, - "Format Query (⌥⌘F)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng truy vấn (⌥⌘F)" + "Format Query (⌥⌘F)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng truy vấn (⌥⌘F)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "格式化查询 (⌥⌘F)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "格式化查询 (⌥⌘F)" } } } }, - "Format:" : { - - }, - "Formatter error: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi định dạng: %@" + "Format:": {}, + "Formatter error: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi định dạng: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "格式化错误: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "格式化错误: %@" } } } }, - "Formatting not supported for %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không hỗ trợ định dạng cho %@" + "Formatting not supported for %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không hỗ trợ định dạng cho %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不支持 %@ 的格式化" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不支持 %@ 的格式化" } } } }, - "General" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tổng quát" + "General": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tổng quát" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "通用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "通用" } } } }, - "Generated WHERE Clause" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mệnh đề WHERE đã tạo" + "Generated WHERE Clause": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mệnh đề WHERE đã tạo" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "生成的 WHERE 子句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "生成的 WHERE 子句" } } } }, - "Generation failed." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo phản hồi thất bại." + "Generation failed.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo phản hồi thất bại." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "生成失败。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "生成失败。" } } } }, - "Get help writing queries, explaining schemas, or fixing errors." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhận trợ giúp viết truy vấn, giải thích schema hoặc sửa lỗi." + "Get help writing queries, explaining schemas, or fixing errors.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhận trợ giúp viết truy vấn, giải thích schema hoặc sửa lỗi." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "获取编写查询、解释 Schema 或修复错误方面的帮助。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "获取编写查询、解释 Schema 或修复错误方面的帮助。" } } } }, - "Get Started" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bắt đầu" + "Get Started": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bắt đầu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "开始使用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "开始使用" } } } }, - "Go" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi" + "Go": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "前往" } } } }, - "Go to Settings…" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi đến Cài đặt…" + "Go to Settings…": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đi đến Cài đặt…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往设置…" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "前往设置…" } } } }, - "Graphite" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Than chì" + "Graphite": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Than chì" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "石墨" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "石墨" } } } }, - "Gray" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xám" + "Gray": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xám" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "灰色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "灰色" } } } }, - "greater or equal" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "lớn hơn hoặc bằng" + "greater or equal": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "lớn hơn hoặc bằng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "大于或等于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "大于或等于" } } } }, - "greater than" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "lớn hơn" + "greater than": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "lớn hơn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "大于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "大于" } } } }, - "Green" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xanh lá" + "Green": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xanh lá" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "绿色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "绿色" } } } }, - "Group" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhóm" + "Group": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhóm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "分组" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "分组" } } } }, - "Group name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên nhóm" + "Group name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên nhóm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "分组名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "分组名称" } } } }, - "Help improve TablePro by sharing anonymous usage statistics (no personal data or queries)." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giúp cải thiện TablePro bằng cách chia sẻ thống kê sử dụng ẩn danh (không có dữ liệu cá nhân hay truy vấn nào)." + "Help improve TablePro by sharing anonymous usage statistics (no personal data or queries).": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giúp cải thiện TablePro bằng cách chia sẻ thống kê sử dụng ẩn danh (không có dữ liệu cá nhân hay truy vấn nào)." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "通过分享匿名使用统计数据帮助改进 TablePro(不包含个人数据或查询内容)。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "通过分享匿名使用统计数据帮助改进 TablePro(不包含个人数据或查询内容)。" } } } }, - "Hide All" : { - - }, - "Hide Column" : { - - }, - "Higher values create fewer INSERT statements, resulting in smaller files and faster imports" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị cao hơn tạo ít câu lệnh INSERT hơn, giúp tệp nhỏ hơn và nhập nhanh hơn" + "Hide All": {}, + "Hide Column": {}, + "Higher values create fewer INSERT statements, resulting in smaller files and faster imports": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị cao hơn tạo ít câu lệnh INSERT hơn, giúp tệp nhỏ hơn và nhập nhanh hơn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "值越大,生成的 INSERT 语句越少,文件更小,导入更快" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "值越大,生成的 INSERT 语句越少,文件更小,导入更快" } } } }, - "Highlight current line" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đánh dấu dòng hiện tại" + "Highlight current line": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đánh dấu dòng hiện tại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "高亮当前行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "高亮当前行" } } } }, - "History" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lịch sử" + "History": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lịch sử" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "历史记录" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "历史记录" } } } }, - "history entries" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "mục lịch sử" + "history entries": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "mục lịch sử" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "条历史记录" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "条历史记录" } } } }, - "history entry" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "mục lịch sử" + "history entry": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "mục lịch sử" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "条历史记录" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "条历史记录" } } } }, - "Homepage" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trang chủ" + "Homepage": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trang chủ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "主页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "主页" } } } }, - "Host" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Máy chủ" + "Host": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Máy chủ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "主机" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "主机" } } } }, - "Ignore foreign key checks" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bỏ qua kiểm tra khóa ngoại" + "Ignore foreign key checks": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bỏ qua kiểm tra khóa ngoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "忽略外键检查" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "忽略外键检查" } } } }, - "Import" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập" + "Import": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入" } } } }, - "Import cancelled by user" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Người dùng đã hủy nhập" + "Import cancelled by user": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Người dùng đã hủy nhập" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "用户已取消导入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用户已取消导入" } } } }, - "Import data" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập dữ liệu" + "Import data": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入数据" } } } }, - "Import Data" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập dữ liệu" + "Import Data": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入数据" } } } }, - "Import Data (⌘⇧I)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập dữ liệu (⌘⇧I)" + "Import Data (⌘⇧I)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập dữ liệu (⌘⇧I)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入数据 (⌘⇧I)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入数据 (⌘⇧I)" } } } }, - "Import Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập thất bại" + "Import Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入失败" } } } }, - "Import failed at line %lld: %@" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Import failed at line %1$lld: %2$@" + "Import failed at line %lld: %@": { + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Import failed at line %1$lld: %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập thất bại tại dòng %1$lld: %2$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập thất bại tại dòng %1$lld: %2$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在第 %lld 行导入失败: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在第 %lld 行导入失败: %@" } } } }, - "Import Format" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng nhập" + "Import Format": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng nhập" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入格式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入格式" } } } }, - "Import Formats" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng nhập" + "Import Formats": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng nhập" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入格式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入格式" } } } }, - "Import from DDL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập từ DDL" + "Import from DDL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập từ DDL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "从 DDL 导入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从 DDL 导入" } } } }, - "Import from URL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập từ URL" + "Import from URL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập từ URL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "从 URL 导入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从 URL 导入" } } } }, - "Import Not Supported" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không hỗ trợ nhập" + "Import Not Supported": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không hỗ trợ nhập" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不支持导入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不支持导入" } } } }, - "Import SQL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập SQL" + "Import SQL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入 SQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入 SQL" } } } }, - "Import Successful" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập thành công" + "Import Successful": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập thành công" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入成功" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入成功" } } } }, - "Import..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập..." + "Import...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入..." } } } }, - "Importing..." : { - - }, - "in list" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "trong danh sách" + "Importing...": {}, + "in list": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "trong danh sách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在列表中" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在列表中" } } } }, - "Include column headers" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bao gồm tiêu đề cột" + "Include column headers": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bao gồm tiêu đề cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包含列标题" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包含列标题" } } } }, - "Include current query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bao gồm truy vấn hiện tại" + "Include current query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bao gồm truy vấn hiện tại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包含当前查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包含当前查询" } } } }, - "Include database schema" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bao gồm schema cơ sở dữ liệu" + "Include database schema": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bao gồm schema cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包含数据库 Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包含数据库 Schema" } } } }, - "Include NULL values" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bao gồm giá trị NULL" + "Include NULL values": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bao gồm giá trị NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包含 NULL 值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包含 NULL 值" } } } }, - "Include query results" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bao gồm kết quả truy vấn" + "Include query results": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bao gồm kết quả truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包含查询结果" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包含查询结果" } } } }, - "INDEX" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CHỈ MỤC" + "INDEX": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CHỈ MỤC" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "索引" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "索引" } } } }, - "Index name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên chỉ mục" + "Index name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên chỉ mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "索引名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "索引名称" } } } }, - "Index Size" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích thước chỉ mục" + "Index Size": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích thước chỉ mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "索引大小" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "索引大小" } } } }, - "Indexes" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chỉ mục" + "Indexes": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chỉ mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "索引" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "索引" } } } }, - "Inline Suggestions" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gợi ý nội tuyến" + "Inline Suggestions": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gợi ý nội tuyến" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行内建议" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行内建议" } } } }, - "Insert" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chèn" + "Insert": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chèn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插入" } } } }, - "INSERT Statement(s)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Câu lệnh INSERT" + "INSERT Statement(s)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Câu lệnh INSERT" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "INSERT 语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "INSERT 语句" } } } }, - "Inspector" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thanh kiểm tra" + "Inspector": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thanh kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "检查器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "检查器" } } } }, - "Install" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt" + "Install": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "安装" } } } }, - "Install from File..." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt từ tập tin..." + "Install from File...": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt từ tập tin..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "从文件安装..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从文件安装..." } } } }, - "Install Plugin" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt Plugin" + "Install Plugin": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt Plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "安装插件" } } } }, - "Install plugin from file" : { - - }, - "Installation Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt thất bại" + "Install plugin from file": {}, + "Installation Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "安装失败" } } } }, - "Installed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã cài đặt" + "Installed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã cài đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已安装" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已安装" } } } }, - "Installed Plugins" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin đã cài đặt" + "Installed Plugins": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin đã cài đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已安装的插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已安装的插件" } } } }, - "Installing..." : { - - }, - "Invalid argument: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đối số không hợp lệ: %@" + "Installing...": {}, + "Invalid argument: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đối số không hợp lệ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无效的参数: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无效的参数: %@" } } } }, - "Invalid connection URL format" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng URL kết nối không hợp lệ" + "Invalid connection URL format": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng URL kết nối không hợp lệ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接 URL 格式无效" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接 URL 格式无效" } } } }, - "Invalid data format: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng dữ liệu không hợp lệ: %@" + "Invalid data format: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng dữ liệu không hợp lệ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "数据格式无效: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "数据格式无效: %@" } } } }, - "Invalid endpoint: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Endpoint không hợp lệ: %@" + "Invalid endpoint: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Endpoint không hợp lệ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无效的 Endpoint: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无效的 Endpoint: %@" } } } }, - "Invalid file encoding. Try a different encoding option." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mã hóa tệp không hợp lệ. Hãy thử tùy chọn mã hóa khác." + "Invalid file encoding. Try a different encoding option.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mã hóa tệp không hợp lệ. Hãy thử tùy chọn mã hóa khác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文件编码无效。请尝试其他编码选项。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文件编码无效。请尝试其他编码选项。" } } } }, - "Invalid JSON" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "JSON không hợp lệ" + "Invalid JSON": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "JSON không hợp lệ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无效的 JSON" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无效的 JSON" } } } }, - "Invalid JSON: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "JSON không hợp lệ: %@" + "Invalid JSON: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "JSON không hợp lệ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无效的 JSON: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无效的 JSON: %@" } } } }, - "Invalid MongoDB syntax: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cú pháp MongoDB không hợp lệ: %@" + "Invalid MongoDB syntax: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cú pháp MongoDB không hợp lệ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无效的 MongoDB 语法: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无效的 MongoDB 语法: %@" } } } }, - "Invalid plugin bundle: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin bundle không hợp lệ: %@" + "Invalid plugin bundle: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin bundle không hợp lệ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无效的插件包: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无效的插件包: %@" } } } }, - "Invalid username or password" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên đăng nhập hoặc mật khẩu không hợp lệ" + "Invalid username or password": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên đăng nhập hoặc mật khẩu không hợp lệ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "用户名或密码无效" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用户名或密码无效" } } } }, - "is empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "trống" + "is empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "为空" } } } }, - "is not empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "không trống" + "is not empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "không trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不为空" } } } }, - "is not NULL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "không phải NULL" + "is not NULL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "không phải NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不为 NULL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不为 NULL" } } } }, - "is NULL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "là NULL" + "is NULL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "là NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "为 NULL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "为 NULL" } } } }, - "ISO 8601 (2024-12-31 23:59:59)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "ISO 8601 (2024-12-31 23:59:59)" + "ISO 8601 (2024-12-31 23:59:59)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "ISO 8601 (2024-12-31 23:59:59)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "ISO 8601 (2024-12-31 23:59:59)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "ISO 8601 (2024-12-31 23:59:59)" } } } }, - "ISO Date (2024-12-31)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "ISO ngày (2024-12-31)" + "ISO Date (2024-12-31)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "ISO ngày (2024-12-31)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "ISO 日期 (2024-12-31)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "ISO 日期 (2024-12-31)" } } } }, - "Items" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mục" + "Items": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "项目" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "项目" } } } }, - "Jump Hosts" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jump Host" + "Jump Hosts": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Jump Host" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jump Host" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Jump Host" } } } }, - "Jump hosts are connected in order before reaching the SSH server above. Only key and agent auth are supported for jumps." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jump host được kết nối theo thứ tự trước khi đến SSH server phía trên. Chỉ hỗ trợ xác thực bằng khoá và agent cho các jump." + "Jump hosts are connected in order before reaching the SSH server above. Only key and agent auth are supported for jumps.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Jump host được kết nối theo thứ tự trước khi đến SSH server phía trên. Chỉ hỗ trợ xác thực bằng khoá và agent cho các jump." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jump Host 按顺序连接后再连接到上方的 SSH 服务器。跳转仅支持密钥和 Agent 认证。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Jump Host 按顺序连接后再连接到上方的 SSH 服务器。跳转仅支持密钥和 Agent 认证。" } } } }, - "Keep entries for:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giữ mục trong:" + "Keep entries for:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giữ mục trong:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保留记录:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保留记录:" } } } }, - "Keep leading zeros in ZIP codes, phone numbers, and IDs by outputting all values as strings" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giữ số 0 đầu trong mã bưu chính, số điện thoại và ID bằng cách xuất tất cả giá trị dưới dạng chuỗi" + "Keep leading zeros in ZIP codes, phone numbers, and IDs by outputting all values as strings": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giữ số 0 đầu trong mã bưu chính, số điện thoại và ID bằng cách xuất tất cả giá trị dưới dạng chuỗi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "通过将所有值输出为字符串来保留邮编、电话号码和 ID 中的前导零" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "通过将所有值输出为字符串来保留邮编、电话号码和 ID 中的前导零" } } } }, - "Key File" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tệp khóa" + "Key File": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tệp khóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "密钥文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "密钥文件" } } } }, - "Keyboard" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bàn phím" + "Keyboard": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bàn phím" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "键盘" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "键盘" } } } }, - "Keyboard Interactive" : { - - }, - "Keys are provided by the SSH agent (e.g. 1Password, ssh-agent)." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khóa được cung cấp bởi SSH agent (ví dụ: 1Password, ssh-agent)." + "Keyboard Interactive": {}, + "Keys are provided by the SSH agent (e.g. 1Password, ssh-agent).": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khóa được cung cấp bởi SSH agent (ví dụ: 1Password, ssh-agent)." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "密钥由 SSH Agent 提供(如 1Password、ssh-agent)。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "密钥由 SSH Agent 提供(如 1Password、ssh-agent)。" } } } }, - "Language:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ngôn ngữ:" + "Language:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ngôn ngữ:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "语言:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "语言:" } } } }, - "Last query execution summary" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tổng kết thực thi truy vấn gần nhất" + "Last query execution summary": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tổng kết thực thi truy vấn gần nhất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上次查询执行摘要" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上次查询执行摘要" } } } }, - "Last query execution time" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thời gian thực thi truy vấn gần nhất" + "Last query execution time": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thời gian thực thi truy vấn gần nhất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上次查询执行时间" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上次查询执行时间" } } } }, - "Last query took %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn trước mất %@" + "Last query took %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn trước mất %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上次查询耗时 %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上次查询耗时 %@" } } } }, - "Last query: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn gần nhất: %@" + "Last query: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn gần nhất: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上次查询: %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上次查询: %@" } } } }, - "Latency: %lldms" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ trễ: %lldms" + "Latency: %lldms": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ trễ: %lldms" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "延迟: %lldms" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "延迟: %lldms" } } } }, - "Length" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ dài" + "Length": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ dài" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "长度" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "长度" } } } }, - "Length:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ dài:" + "Length:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ dài:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "长度:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "长度:" } } } }, - "less or equal" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "nhỏ hơn hoặc bằng" + "less or equal": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "nhỏ hơn hoặc bằng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "小于或等于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "小于或等于" } } } }, - "less than" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "nhỏ hơn" + "less than": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "nhỏ hơn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "小于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "小于" } } } }, - "License" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giấy phép" + "License": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giấy phép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "许可证" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "许可证" } } } }, - "License Key:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mã giấy phép:" + "License Key:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mã giấy phép:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "许可证密钥:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "许可证密钥:" } } } }, - "Light" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sáng" + "Light": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sáng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "浅色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "浅色" } } } }, - "Limit" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giới hạn" + "Limit": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giới hạn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "限制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "限制" } } } }, - "Line break" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuống dòng" + "Line break": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xuống dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "换行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "换行" } } } }, - "Load" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải" + "Load": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载" } } } }, - "Load in Editor" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải vào trình soạn thảo" + "Load in Editor": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải vào trình soạn thảo" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在编辑器中加载" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在编辑器中加载" } } } }, - "Load Table Template" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải mẫu bảng" + "Load Table Template": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải mẫu bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载表模板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载表模板" } } } }, - "Load Template" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải mẫu" + "Load Template": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải mẫu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加载模板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "加载模板" } } } }, - "Loading databases..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang tải cơ sở dữ liệu..." + "Loading databases...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang tải cơ sở dữ liệu..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在加载数据库..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在加载数据库..." } } } }, - "Loading plugins..." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang tải plugin..." + "Loading plugins...": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang tải plugin..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在加载插件..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在加载插件..." } } } }, - "Loading schemas..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang tải schema..." + "Loading schemas...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang tải schema..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在加载 Schema..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在加载 Schema..." } } } }, - "Loading tables..." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang tải danh sách bảng..." + "Loading tables...": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang tải danh sách bảng..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在加载表..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在加载表..." } } } }, - "Loading..." : { - - }, - "localhost" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "localhost" + "Loading...": {}, + "localhost": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "localhost" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "localhost" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "localhost" } } } }, - "Maintenance" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bảo trì" + "Maintenance": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bảo trì" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "维护" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "维护" } } } }, - "Majority" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Majority" + "Majority": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Majority" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Majority" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Majority" } } } }, - "Manage Connections..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quản lý kết nối..." + "Manage Connections...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Quản lý kết nối..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "管理连接..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理连接..." } } } }, - "Manage Tags" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quản lý thẻ" + "Manage Tags": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Quản lý thẻ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "管理标签" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理标签" } } } }, - "Manual" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thủ công" + "Manual": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thủ công" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "手动" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "手动" } } } }, - "Match ALL filters (AND) or ANY filter (OR)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khớp TẤT CẢ bộ lọc (AND) hoặc BẤT KỲ bộ lọc (OR)" + "Match ALL filters (AND) or ANY filter (OR)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khớp TẤT CẢ bộ lọc (AND) hoặc BẤT KỲ bộ lọc (OR)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "匹配所有筛选条件 (AND) 或任意筛选条件 (OR)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "匹配所有筛选条件 (AND) 或任意筛选条件 (OR)" } } } }, - "matches regex" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "khớp regex" + "matches regex": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "khớp regex" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "匹配正则" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "匹配正则" } } } }, - "Max %lld characters" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tối đa %lld ký tự" + "Max %lld characters": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tối đa %lld ký tự" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最多 %lld 个字符" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "最多 %lld 个字符" } } } }, - "Max schema tables: %lld" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số bảng tối đa: %lld" + "Max schema tables: %lld": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số bảng tối đa: %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema 最大表数:%lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Schema 最大表数:%lld" } } } }, - "Maximum days cannot be negative" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số ngày tối đa không được là số âm" + "Maximum days cannot be negative": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số ngày tối đa không được là số âm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大天数不能为负数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "最大天数不能为负数" } } } }, - "Maximum entries cannot be negative" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số mục tối đa không được là số âm" + "Maximum entries cannot be negative": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số mục tối đa không được là số âm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大条目数不能为负数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "最大条目数不能为负数" } } } }, - "Maximum entries:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số mục tối đa:" + "Maximum entries:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số mục tối đa:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大条目数:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "最大条目数:" } } } }, - "Maximum time to wait for a query to complete. Set to 0 for no limit. Applied to new connections." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thời gian chờ tối đa để truy vấn hoàn thành. Đặt 0 để không giới hạn. Áp dụng cho kết nối mới." + "Maximum time to wait for a query to complete. Set to 0 for no limit. Applied to new connections.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thời gian chờ tối đa để truy vấn hoàn thành. Đặt 0 để không giới hạn. Áp dụng cho kết nối mới." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "等待查询完成的最长时间。设为 0 表示不限制。应用于新连接。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "等待查询完成的最长时间。设为 0 表示不限制。应用于新连接。" } } } }, - "METADATA" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SIÊU DỮ LIỆU" + "METADATA": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SIÊU DỮ LIỆU" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "元数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "元数据" } } } }, - "Method" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phương thức" + "Method": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phương thức" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "方法" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "方法" } } } }, - "Missing argument: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thiếu đối số: %@" + "Missing argument: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thiếu đối số: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "缺少参数:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "缺少参数:%@" } } } }, - "Model" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Model" + "Model": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Model" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Model" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Model" } } } }, - "Model not found: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy model: %@" + "Model not found: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy model: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到模型:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到模型:%@" } } } }, - "Modified" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã sửa đổi" + "Modified": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã sửa đổi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已修改" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已修改" } } } }, - "MongoDB" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "MongoDB" + "MongoDB": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "MongoDB" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "MongoDB" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "MongoDB" } } } }, - "Move Down" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Di chuyển xuống" + "Move Down": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Di chuyển xuống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下移" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "下移" } } } }, - "Move Down (⌘↓)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Di chuyển xuống (⌘↓)" + "Move Down (⌘↓)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Di chuyển xuống (⌘↓)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下移 (⌘↓)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "下移 (⌘↓)" } } } }, - "Move Up" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Di chuyển lên" + "Move Up": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Di chuyển lên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上移" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上移" } } } }, - "Move Up (⌘↑)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Di chuyển lên (⌘↑)" + "Move Up (⌘↑)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Di chuyển lên (⌘↑)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上移 (⌘↑)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上移 (⌘↑)" } } } }, - "MQL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQL" + "MQL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "MQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "MQL" } } } }, - "MQL Preview" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước MQL" + "MQL Preview": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước MQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQL 预览" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "MQL 预览" } } } }, - "Multiple values" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhiều giá trị" + "Multiple values": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhiều giá trị" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "多个值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "多个值" } } } }, - "Name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên" + "Name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "名称" } } } }, - "Navigate to referenced row" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi đến dòng được tham chiếu" + "Navigate to referenced row": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đi đến dòng được tham chiếu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "跳转到引用行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "跳转到引用行" } } } }, - "Nearest" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nearest" + "Nearest": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nearest" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nearest" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Nearest" } } } }, - "Network error: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi mạng: %@" + "Network error: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi mạng: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "网络错误:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "网络错误:%@" } } } }, - "Never" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không bao giờ" + "Never": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không bao giờ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "从不" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从不" } } } }, - "New Chat" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cuộc trò chuyện mới" + "New Chat": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cuộc trò chuyện mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建对话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建对话" } } } }, - "New Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối mới" + "New Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建连接" } } } }, - "New Connection (⌘N)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối mới (⌘N)" + "New Connection (⌘N)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối mới (⌘N)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建连接 (⌘N)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建连接 (⌘N)" } } } }, - "New Connection..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối mới..." + "New Connection...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối mới..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建连接..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建连接..." } } } }, - "New Conversation" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hội thoại mới" + "New Conversation": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hội thoại mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建会话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建会话" } } } }, - "New Group" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhóm mới" + "New Group": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhóm mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建分组" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建分组" } } } }, - "New Jump Host" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jump Host mới" + "New Jump Host": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Jump Host mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建 Jump Host" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建 Jump Host" } } } }, - "New query tab" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab truy vấn mới" + "New query tab": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab truy vấn mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建查询标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建查询标签页" } } } }, - "New Query Tab" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab truy vấn mới" + "New Query Tab": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab truy vấn mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建查询标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建查询标签页" } } } }, - "New Query Tab (⌘T)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab truy vấn mới (⌘T)" + "New Query Tab (⌘T)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab truy vấn mới (⌘T)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建查询标签页 (⌘T)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建查询标签页 (⌘T)" } } } }, - "New Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab mới" + "New Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建标签页" } } } }, - "New View..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "View mới..." + "New View...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "View mới..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建视图..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建视图..." } } } }, - "Next Page (⌘])" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trang sau (⌘])" + "Next Page (⌘])": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trang sau (⌘])" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下一页 (⌘])" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "下一页 (⌘])" } } } }, - "Next Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab tiếp" + "Next Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab tiếp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下一个标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "下一个标签页" } } } }, - "Next Tab (Alt)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab tiếp theo (Alt)" + "Next Tab (Alt)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab tiếp theo (Alt)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下一个标签页 (Alt)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "下一个标签页 (Alt)" } } } }, - "No %@" : { - - }, - "No active connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có kết nối đang hoạt động" + "No %@": {}, + "No active connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có kết nối đang hoạt động" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无活动连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无活动连接" } } } }, - "No AI provider configured. Go to Settings > AI to add one." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa cấu hình nhà cung cấp AI. Vào Cài đặt > AI để thêm." + "No AI provider configured. Go to Settings > AI to add one.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa cấu hình nhà cung cấp AI. Vào Cài đặt > AI để thêm." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未配置 AI 提供商。前往设置 > AI 添加。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尚未配置 AI 提供商。前往设置 > AI 添加。" } } } }, - "No available local port for SSH tunnel" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có cổng nội bộ khả dụng cho đường hầm SSH" + "No available local port for SSH tunnel": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có cổng nội bộ khả dụng cho đường hầm SSH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有可用的本地端口用于 SSH 隧道" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "没有可用的本地端口用于 SSH 隧道" } } } }, - "No changes to preview" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có thay đổi để xem trước" + "No changes to preview": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có thay đổi để xem trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无可预览的更改" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无可预览的更改" } } } }, - "No Check Constraints" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có ràng buộc kiểm tra" + "No Check Constraints": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có ràng buộc kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无检查约束" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无检查约束" } } } }, - "No Columns Defined" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có cột nào" + "No Columns Defined": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có cột nào" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未定义列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尚未定义列" } } } }, - "No Connections" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có kết nối" + "No Connections": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无连接" } } } }, - "No connections yet" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có kết nối nào" + "No connections yet": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có kết nối nào" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "暂无连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "暂无连接" } } } }, - "No database connection" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa kết nối cơ sở dữ liệu" + "No database connection": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa kết nối cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未连接数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未连接数据库" } } } }, - "No databases found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy cơ sở dữ liệu" + "No databases found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到数据库" } } } }, - "No databases match \"%@\"" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có cơ sở dữ liệu nào khớp \"%@\"" + "No databases match \"%@\"": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có cơ sở dữ liệu nào khớp \"%@\"" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有匹配 \"%@\" 的数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "没有匹配 \"%@\" 的数据库" } } } }, - "No DDL available" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có DDL" + "No DDL available": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có DDL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无可用 DDL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无可用 DDL" } } } }, - "No export formats available. Enable export plugins in Settings > Plugins." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có định dạng xuất khả dụng. Bật plugin xuất trong Cài đặt > Plugin." + "No export formats available. Enable export plugins in Settings > Plugins.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có định dạng xuất khả dụng. Bật plugin xuất trong Cài đặt > Plugin." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无可用的导出格式。请在设置 > 插件中启用导出插件。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无可用的导出格式。请在设置 > 插件中启用导出插件。" } } } }, - "No Foreign Keys Yet" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có khóa ngoại" + "No Foreign Keys Yet": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có khóa ngoại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚无外键" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尚无外键" } } } }, - "No Indexes Defined" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có chỉ mục" + "No Indexes Defined": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có chỉ mục" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未定义索引" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尚未定义索引" } } } }, - "No limit" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không giới hạn" + "No limit": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không giới hạn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不限制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不限制" } } } }, - "No matching %@" : { - - }, - "No matching connections" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có kết nối nào khớp" + "No matching %@": {}, + "No matching connections": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có kết nối nào khớp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配连接" } } } }, - "No Matching Connections" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có kết nối phù hợp" + "No Matching Connections": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có kết nối phù hợp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配连接" } } } }, - "No matching databases" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có cơ sở dữ liệu nào khớp" + "No matching databases": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có cơ sở dữ liệu nào khớp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配数据库" } } } }, - "No matching fields" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có trường khớp" + "No matching fields": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có trường khớp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配字段" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配字段" } } } }, - "No matching objects" : { - - }, - "No Matching Queries" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có truy vấn phù hợp" + "No matching objects": {}, + "No Matching Queries": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có truy vấn phù hợp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配查询" } } } }, - "No matching schemas" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có schema khớp" + "No matching schemas": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có schema khớp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配 Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配 Schema" } } } }, - "No matching tables" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có bảng nào khớp" + "No matching tables": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có bảng nào khớp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无匹配表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无匹配表" } } } }, - "No model selected" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa chọn model" + "No model selected": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa chọn model" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未选择模型" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未选择模型" } } } }, - "No models loaded" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa tải mô hình nào" + "No models loaded": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa tải mô hình nào" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未加载模型" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未加载模型" } } } }, - "No objects found" : { - - }, - "No objects match \"%@\"" : { - - }, - "No parts found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy phân vùng" + "No objects found": {}, + "No objects match \"%@\"": {}, + "No parts found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy phân vùng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到分区" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到分区" } } } }, - "No pending changes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có thay đổi nào" + "No pending changes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có thay đổi nào" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无待处理的更改" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无待处理的更改" } } } }, - "No plugins found" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy plugin" + "No plugins found": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到插件" } } } }, - "No primary key selected (not recommended)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa chọn khóa chính (không khuyến nghị)" + "No primary key selected (not recommended)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa chọn khóa chính (không khuyến nghị)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未选择主键(不推荐)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未选择主键(不推荐)" } } } }, - "No providers configured" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa cấu hình nhà cung cấp" + "No providers configured": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa cấu hình nhà cung cấp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未配置提供商" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未配置提供商" } } } }, - "No query executed yet" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa thực hiện truy vấn nào" + "No query executed yet": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa thực hiện truy vấn nào" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未执行查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尚未执行查询" } } } }, - "No Query History Yet" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có lịch sử truy vấn" + "No Query History Yet": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có lịch sử truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "暂无查询历史" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "暂无查询历史" } } } }, - "No rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có dòng" + "No rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无行" } } } }, - "No saved connection named \"%@\"." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có kết nối đã lưu tên \"%@\"." + "No saved connection named \"%@\".": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có kết nối đã lưu tên \"%@\"." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有名为 \"%@\" 的已保存连接。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "没有名为 \"%@\" 的已保存连接。" } } } }, - "No saved templates" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có mẫu đã lưu" + "No saved templates": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có mẫu đã lưu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无已保存的模板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无已保存的模板" } } } }, - "No schemas found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy schema" + "No schemas found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy schema" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到 Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到 Schema" } } } }, - "No schemas match \"%@\"" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có schema khớp \"%@\"" + "No schemas match \"%@\"": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có schema khớp \"%@\"" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有匹配 \"%@\" 的 Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "没有匹配 \"%@\" 的 Schema" } } } }, - "No selection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa chọn" + "No selection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa chọn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未选择" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未选择" } } } }, - "No Selection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa chọn" + "No Selection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa chọn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未选择" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未选择" } } } }, - "No SSL encryption" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không mã hóa SSL" + "No SSL encryption": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không mã hóa SSL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无 SSL 加密" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无 SSL 加密" } } } }, - "No Tables" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có bảng" + "No Tables": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无表" } } } }, - "No tables selected for export" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có bảng nào được chọn để xuất" + "No tables selected for export": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có bảng nào được chọn để xuất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未选择要导出的表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未选择要导出的表" } } } }, - "No tabs open" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có tab nào mở" + "No tabs open": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có tab nào mở" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有打开的标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "没有打开的标签页" } } } }, - "No valid rows found in clipboard data." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy dòng hợp lệ trong dữ liệu bộ nhớ tạm." + "No valid rows found in clipboard data.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy dòng hợp lệ trong dữ liệu bộ nhớ tạm." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "剪贴板数据中未找到有效行。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "剪贴板数据中未找到有效行。" } } } }, - "No values found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy giá trị" + "No values found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy giá trị" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到值" } } } }, - "None" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không" + "None": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无" } } } }, - "Normal" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bình thường" + "Normal": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bình thường" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正常" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正常" } } } }, - "Not connected" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa kết nối" + "Not connected": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未连接" } } } }, - "Not connected to ClickHouse" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa kết nối đến ClickHouse" + "Not connected to ClickHouse": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa kết nối đến ClickHouse" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未连接到 ClickHouse" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未连接到 ClickHouse" } } } }, - "Not connected to database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa kết nối cơ sở dữ liệu" + "Not connected to database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa kết nối cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未连接到数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未连接到数据库" } } } }, - "not contains" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "không chứa" + "not contains": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "không chứa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不包含" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不包含" } } } }, - "not equals" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "không bằng" + "not equals": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "không bằng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不等于" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不等于" } } } }, - "not in list" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "không trong danh sách" + "not in list": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "không trong danh sách" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不在列表中" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不在列表中" } } } }, - "NOT NULL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "NOT NULL" + "NOT NULL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "NOT NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NOT NULL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NOT NULL" } } } }, - "Not supported for this database." : { - - }, - "Not supported for this database. Use CASCADE instead." : { - - }, - "Not supported for TRUNCATE with this database" : { - - }, - "NOW()" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "NOW()" + "Not supported for this database.": {}, + "Not supported for this database. Use CASCADE instead.": {}, + "Not supported for TRUNCATE with this database": {}, + "NOW()": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "NOW()" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NOW()" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NOW()" } } } }, - "NULL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "NULL" + "NULL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NULL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NULL" } } } }, - "NULL display cannot be empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị NULL không được để trống" + "NULL display cannot be empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị NULL không được để trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NULL 显示不能为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NULL 显示不能为空" } } } }, - "NULL display contains invalid characters (newlines/tabs)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị NULL chứa ký tự không hợp lệ (xuống dòng/tab)" + "NULL display contains invalid characters (newlines/tabs)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị NULL chứa ký tự không hợp lệ (xuống dòng/tab)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NULL 显示包含无效字符(换行符/制表符)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NULL 显示包含无效字符(换行符/制表符)" } } } }, - "NULL display must be %lld characters or less" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị NULL phải có %lld ký tự trở xuống" + "NULL display must be %lld characters or less": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị NULL phải có %lld ký tự trở xuống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NULL 显示不能超过 %lld 个字符" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NULL 显示不能超过 %lld 个字符" } } } }, - "NULL display:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị NULL:" + "NULL display:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị NULL:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "NULL 显示:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "NULL 显示:" } } } }, - "Nullable" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cho phép NULL" + "Nullable": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cho phép NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "允许 NULL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "允许 NULL" } } } }, - "Number of documents per insertMany statement. Higher values create fewer statements." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số lượng document cho mỗi câu lệnh insertMany. Giá trị cao hơn tạo ít câu lệnh hơn." + "Number of documents per insertMany statement. Higher values create fewer statements.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số lượng document cho mỗi câu lệnh insertMany. Giá trị cao hơn tạo ít câu lệnh hơn." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每个 insertMany 语句的文档数量。值越大生成的语句越少。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每个 insertMany 语句的文档数量。值越大生成的语句越少。" } } } }, - "Offset" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vị trí bắt đầu" + "Offset": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Vị trí bắt đầu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "偏移量" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "偏移量" } } } }, - "OK" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" + "OK": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "OK" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "OK" } } } }, - "On Delete" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi xóa" + "On Delete": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khi xóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除时" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "删除时" } } } }, - "On Update" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi cập nhật" + "On Update": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khi cập nhật" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "更新时" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "更新时" } } } }, - "Open" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở" + "Open": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开" } } } }, - "Open %@ Editor" : { - - }, - "Open Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở kết nối" + "Open %@ Editor": {}, + "Open Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开连接" } } } }, - "Open containing folder" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở thư mục chứa" + "Open containing folder": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở thư mục chứa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开所在文件夹" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开所在文件夹" } } } }, - "Open database" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở cơ sở dữ liệu" + "Open database": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开数据库" } } } }, - "Open Database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở cơ sở dữ liệu" + "Open Database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开数据库" } } } }, - "Open Database (⌘K)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở cơ sở dữ liệu (⌘K)" + "Open Database (⌘K)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở cơ sở dữ liệu (⌘K)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开数据库 (⌘K)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开数据库 (⌘K)" } } } }, - "Open Database..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở cơ sở dữ liệu..." + "Open Database...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở cơ sở dữ liệu..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开数据库..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开数据库..." } } } }, - "Open MQL Editor" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở trình soạn MQL" + "Open MQL Editor": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở trình soạn MQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开 MQL 编辑器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开 MQL 编辑器" } } } }, - "Open Redis CLI" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở Redis CLI" + "Open Redis CLI": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở Redis CLI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开 Redis CLI" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开 Redis CLI" } } } }, - "Open Schema" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở Schema" + "Open Schema": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở Schema" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开 Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开 Schema" } } } }, - "Open SQL Editor" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở trình soạn SQL" + "Open SQL Editor": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở trình soạn SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开 SQL 编辑器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "打开 SQL 编辑器" } } } }, - "Operation cancelled by user" : { - - }, - "Optimize Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tối ưu truy vấn" + "Operation cancelled by user": {}, + "Optimize Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tối ưu truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "优化查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "优化查询" } } } }, - "Optimize this SQL query for better performance:\n\n```sql\n%@\n```" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đề xuất tối ưu hóa cho câu truy vấn SQL sau:\n\n```sql\n%@\n```" + "Optimize this SQL query for better performance:\n\n```sql\n%@\n```": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đề xuất tối ưu hóa cho câu truy vấn SQL sau:\n\n```sql\n%@\n```" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "优化以下 SQL 查询以提升性能:\n\n```sql\n%@\n```" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "优化以下 SQL 查询以提升性能:\n\n```sql\n%@\n```" } } } }, - "Optimize with AI" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tối ưu với AI" + "Optimize with AI": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tối ưu với AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "AI 优化" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "AI 优化" } } } }, - "Optional description" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mô tả tùy chọn" + "Optional description": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mô tả tùy chọn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "可选描述" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "可选描述" } } } }, - "Options" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tùy chọn" + "Options": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tùy chọn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选项" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选项" } } } }, - "OR" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "OR" + "OR": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "OR" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "OR" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "OR" } } } }, - "Oracle" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Oracle" + "Oracle": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Oracle" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Oracle" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Oracle" } } } }, - "Orange" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cam" + "Orange": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cam" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "橙色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "橙色" } } } }, - "Other" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khác" + "Other": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khác" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "其他" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "其他" } } } }, - "Page size must be between %@ and %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Page size must be between %1$@ and %2$@" + "Page size must be between %@ and %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Page size must be between %1$@ and %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích thước trang phải nằm trong khoảng %1$@ đến %2$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích thước trang phải nằm trong khoảng %1$@ đến %2$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "页面大小必须在 %@ 和 %@ 之间" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "页面大小必须在 %@ 和 %@ 之间" } } } }, - "Pagination" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phân trang" + "Pagination": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phân trang" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "分页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "分页" } } } }, - "Pagination Settings" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt phân trang" + "Pagination Settings": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt phân trang" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "分页设置" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "分页设置" } } } }, - "Panel State" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trạng thái bảng điều khiển" + "Panel State": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trạng thái bảng điều khiển" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "面板状态" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "面板状态" } } } }, - "Partition" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phân vùng" + "Partition": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phân vùng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "分区" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "分区" } } } }, - "Passphrase" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cụm mật khẩu" + "Passphrase": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cụm mật khẩu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "密码短语" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "密码短语" } } } }, - "Password" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mật khẩu" + "Password": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mật khẩu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "密码" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "密码" } } } }, - "Password is sent via keyboard-interactive challenge-response." : { - - }, - "Paste" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dán" + "Password is sent via keyboard-interactive challenge-response.": {}, + "Paste": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dán" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "粘贴" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "粘贴" } } } }, - "Paste a connection URL to auto-fill the form fields." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dán URL kết nối để tự động điền các trường trong biểu mẫu." + "Paste a connection URL to auto-fill the form fields.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dán URL kết nối để tự động điền các trường trong biểu mẫu." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "粘贴连接 URL 以自动填充表单字段。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "粘贴连接 URL 以自动填充表单字段。" } } } }, - "Paste your CREATE TABLE statement below:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dán câu lệnh CREATE TABLE bên dưới:" + "Paste your CREATE TABLE statement below:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dán câu lệnh CREATE TABLE bên dưới:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在下方粘贴 CREATE TABLE 语句:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在下方粘贴 CREATE TABLE 语句:" } } } }, - "pending delete" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "chờ xóa" + "pending delete": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "chờ xóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "待删除" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "待删除" } } } }, - "pending truncate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "chờ truncate" + "pending truncate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "chờ truncate" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "待清空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "待清空" } } } }, - "Period" : { - - }, - "Pink" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hồng" + "Period": {}, + "Pink": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hồng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "粉色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "粉色" } } } }, - "Please select a column" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vui lòng chọn một cột" + "Please select a column": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Vui lòng chọn một cột" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请选择一列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "请选择一列" } } } }, - "Plugin '%@' has an invalid descriptor: %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Plugin '%1$@' has an invalid descriptor: %2$@" + "Plugin '%@' has an invalid descriptor: %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Plugin '%1$@' has an invalid descriptor: %2$@" } } } }, - "Plugin checksum does not match expected value" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Checksum plugin không khớp với giá trị mong đợi" + "Plugin checksum does not match expected value": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Checksum plugin không khớp với giá trị mong đợi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件校验和与期望值不匹配" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件校验和与期望值不匹配" } } } }, - "Plugin code signature verification failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác minh chữ ký mã plugin thất bại: %@" + "Plugin code signature verification failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác minh chữ ký mã plugin thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件代码签名验证失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件代码签名验证失败:%@" } } } }, - "Plugin does not contain a compatible binary for this architecture" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin không chứa tập tin nhị phân tương thích cho kiến trúc này" + "Plugin does not contain a compatible binary for this architecture": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin không chứa tập tin nhị phân tương thích cho kiến trúc này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件不包含兼容此架构的二进制文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件不包含兼容此架构的二进制文件" } } } }, - "Plugin download failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tải plugin thất bại: %@" + "Plugin download failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tải plugin thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件下载失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件下载失败:%@" } } } }, - "Plugin Installation Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt Plugin thất bại" + "Plugin Installation Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt Plugin thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件安装失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件安装失败" } } } }, - "Plugin installation failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cài đặt plugin thất bại: %@" + "Plugin installation failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cài đặt plugin thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件安装失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件安装失败:%@" } } } }, - "Plugin not found" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy plugin" + "Plugin not found": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到插件" } } } }, - "Plugin Not Installed" : { - - }, - "Plugin requires app version %@ or later, but current version is %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Plugin requires app version %1$@ or later, but current version is %2$@" + "Plugin Not Installed": {}, + "Plugin requires app version %@ or later, but current version is %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Plugin requires app version %1$@ or later, but current version is %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin yêu cầu ứng dụng phiên bản %@ trở lên, nhưng phiên bản hiện tại là %@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin yêu cầu ứng dụng phiên bản %@ trở lên, nhưng phiên bản hiện tại là %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件需要应用版本 %@ 或更高,但当前版本为 %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件需要应用版本 %@ 或更高,但当前版本为 %@" } } } }, - "Plugin requires PluginKit version %lld, but app provides version %lld" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Plugin requires PluginKit version %1$lld, but app provides version %2$lld" + "Plugin requires PluginKit version %lld, but app provides version %lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Plugin requires PluginKit version %1$lld, but app provides version %2$lld" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin yêu cầu PluginKit phiên bản %lld, nhưng ứng dụng cung cấp phiên bản %lld" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin yêu cầu PluginKit phiên bản %lld, nhưng ứng dụng cung cấp phiên bản %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件需要 PluginKit 版本 %lld,但应用提供的版本为 %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件需要 PluginKit 版本 %lld,但应用提供的版本为 %lld" } } } }, - "Plugins" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin" + "Plugins": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件" } } } }, - "Port" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cổng" + "Port": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cổng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "端口" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "端口" } } } }, - "postgresql://user:password@host:5432/database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "postgresql://user:password@host:5432/database" + "postgresql://user:password@host:5432/database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "postgresql://user:password@host:5432/database" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "postgresql://user:password@host:5432/database" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "postgresql://user:password@host:5432/database" } } } }, - "Potentially Dangerous Queries" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn có thể nguy hiểm" + "Potentially Dangerous Queries": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn có thể nguy hiểm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "潜在危险查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "潜在危险查询" } } } }, - "Potentially Dangerous Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn có thể nguy hiểm" + "Potentially Dangerous Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn có thể nguy hiểm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "潜在危险查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "潜在危险查询" } } } }, - "Pre-Connect Script" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Script pre-connect" + "Pre-Connect Script": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Script pre-connect" } } } }, - "Pre-connect script failed (exit %d): %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Pre-connect script failed (exit %1$d): %2$@" + "Pre-connect script failed (exit %d): %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Pre-connect script failed (exit %1$d): %2$@" } } } }, - "Pre-connect script failed (exit %lld): %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Script pre-connect thất bại (exit %lld): %@" + "Pre-connect script failed (exit %lld): %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Script pre-connect thất bại (exit %lld): %@" } } } }, - "Pre-connect script failed with exit code %d" : { - - }, - "Pre-connect script failed with exit code %lld" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Script pre-connect thất bại với exit code %lld" + "Pre-connect script failed with exit code %d": {}, + "Pre-connect script failed with exit code %lld": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Script pre-connect thất bại với exit code %lld" } } } }, - "Pre-connect script timed out after 10 seconds" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Script pre-connect hết thời gian chờ sau 10 giây" + "Pre-connect script timed out after 10 seconds": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Script pre-connect hết thời gian chờ sau 10 giây" } } } }, - "Precision" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ chính xác" + "Precision": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ chính xác" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "精度" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "精度" } } } }, - "Precision:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ chính xác:" + "Precision:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ chính xác:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "精度:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "精度:" } } } }, - "Preserve all values as strings" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giữ nguyên tất cả giá trị dưới dạng chuỗi" + "Preserve all values as strings": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giữ nguyên tất cả giá trị dưới dạng chuỗi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将所有值保留为字符串" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将所有值保留为字符串" } } } }, - "Preset Name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên mẫu đặt trước" + "Preset Name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên mẫu đặt trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预设名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预设名称" } } } }, - "Pretty Print" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng đẹp" + "Pretty Print": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Định dạng đẹp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "格式化输出" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "格式化输出" } } } }, - "Pretty print (formatted output)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "In đẹp (đầu ra có định dạng)" + "Pretty print (formatted output)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "In đẹp (đầu ra có định dạng)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "格式化输出(带格式)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "格式化输出(带格式)" } } } }, - "Prevent CSV formula injection by prefixing values starting with =, +, -, @ with a single quote" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ngăn chặn chèn công thức CSV bằng cách thêm dấu nháy đơn trước các giá trị bắt đầu bằng =, +, -, @" + "Prevent CSV formula injection by prefixing values starting with =, +, -, @ with a single quote": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ngăn chặn chèn công thức CSV bằng cách thêm dấu nháy đơn trước các giá trị bắt đầu bằng =, +, -, @" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "通过在以 =、+、-、@ 开头的值前添加单引号来防止 CSV 公式注入" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "通过在以 =、+、-、@ 开头的值前添加单引号来防止 CSV 公式注入" } } } }, - "Prevent write operations (INSERT, UPDATE, DELETE, DROP, etc.)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ngăn chặn thao tác ghi (INSERT, UPDATE, DELETE, DROP, v.v.)" + "Prevent write operations (INSERT, UPDATE, DELETE, DROP, etc.)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ngăn chặn thao tác ghi (INSERT, UPDATE, DELETE, DROP, v.v.)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "禁止写操作(INSERT、UPDATE、DELETE、DROP 等)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "禁止写操作(INSERT、UPDATE、DELETE、DROP 等)" } } } }, - "Preview" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước" + "Preview": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览" } } } }, - "Preview %@" : { - - }, - "Preview %@ (⌘⇧P)" : { - - }, - "Preview Commands" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước lệnh" + "Preview %@": {}, + "Preview %@ (⌘⇧P)": {}, + "Preview Commands": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览命令" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览命令" } } } }, - "Preview Commands (⌘⇧P)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước lệnh (⌘⇧P)" + "Preview Commands (⌘⇧P)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước lệnh (⌘⇧P)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览命令 (⌘⇧P)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览命令 (⌘⇧P)" } } } }, - "Preview MQL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước MQL" + "Preview MQL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước MQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览 MQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览 MQL" } } } }, - "Preview MQL (⌘⇧P)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước MQL (⌘⇧P)" + "Preview MQL (⌘⇧P)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước MQL (⌘⇧P)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览 MQL (⌘⇧P)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览 MQL (⌘⇧P)" } } } }, - "Preview Schema Changes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước thay đổi cấu trúc" + "Preview Schema Changes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước thay đổi cấu trúc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览结构更改" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览结构更改" } } } }, - "Preview SQL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước SQL" + "Preview SQL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览 SQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览 SQL" } } } }, - "Preview SQL (⌘⇧P)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước SQL (⌘⇧P)" + "Preview SQL (⌘⇧P)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước SQL (⌘⇧P)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "预览 SQL (⌘⇧P)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "预览 SQL (⌘⇧P)" } } } }, - "Previous Page (⌘[)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trang trước (⌘[)" + "Previous Page (⌘[)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trang trước (⌘[)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上一页 (⌘[)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上一页 (⌘[)" } } } }, - "Previous Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab trước" + "Previous Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上一个标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上一个标签页" } } } }, - "Previous Tab (Alt)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab trước (Alt)" + "Previous Tab (Alt)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab trước (Alt)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上一个标签页 (Alt)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上一个标签页 (Alt)" } } } }, - "Primary" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primary" + "Primary": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Primary" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primary" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Primary" } } } }, - "Primary Preferred" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primary Preferred" + "Primary Preferred": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Primary Preferred" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primary Preferred" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Primary Preferred" } } } }, - "Privacy" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quyền riêng tư" + "Privacy": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Quyền riêng tư" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "隐私" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "隐私" } } } }, - "Private Key" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khóa riêng tư" + "Private Key": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khóa riêng tư" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "私钥" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "私钥" } } } }, - "Prompt at Connect" : { - - }, - "Providers" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhà cung cấp" + "Prompt at Connect": {}, + "Providers": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhà cung cấp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "提供商" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "提供商" } } } }, - "Purple" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tím" + "Purple": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tím" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "紫色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "紫色" } } } }, - "Put field names in the first row" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt tên trường ở dòng đầu tiên" + "Put field names in the first row": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt tên trường ở dòng đầu tiên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "将字段名放在第一行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将字段名放在第一行" } } } }, - "Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn" + "Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "查询" } } } }, - "Query cancelled" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã hủy truy vấn" + "Query cancelled": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã hủy truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查询已取消" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "查询已取消" } } } }, - "Query executed successfully" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn thực thi thành công" + "Query executed successfully": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn thực thi thành công" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查询执行成功" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "查询执行成功" } } } }, - "Query executing" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang thực hiện truy vấn" + "Query executing": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang thực hiện truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在执行查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在执行查询" } } } }, - "Query executing..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang thực thi truy vấn..." + "Query executing...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang thực thi truy vấn..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在执行查询..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在执行查询..." } } } }, - "Query Execution" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thực thi truy vấn" + "Query Execution": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thực thi truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查询执行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "查询执行" } } } }, - "Query Execution Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thực thi truy vấn thất bại" + "Query Execution Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thực thi truy vấn thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查询执行失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "查询执行失败" } } } }, - "Query timeout:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thời gian chờ truy vấn:" + "Query timeout:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thời gian chờ truy vấn:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查询超时:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "查询超时:" } } } }, - "Quick search across all columns..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kiếm nhanh trên tất cả các cột..." + "Quick search across all columns...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm kiếm nhanh trên tất cả các cột..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "快速搜索所有列..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "快速搜索所有列..." } } } }, - "Quick Switcher" : { - - }, - "Quick Switcher (⌘P)" : { - - }, - "Quick Switcher..." : { - - }, - "Quote" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dấu ngoặc kép" + "Quick Switcher": {}, + "Quick Switcher (⌘P)": {}, + "Quick Switcher...": {}, + "Quote": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dấu ngoặc kép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "引号" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "引号" } } } }, - "Quote if needed" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt trong ngoặc kép nếu cần" + "Quote if needed": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt trong ngoặc kép nếu cần" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "按需加引号" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "按需加引号" } } } }, - "Rate limited. Please try again later." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã vượt giới hạn tốc độ. Vui lòng thử lại sau." + "Rate limited. Please try again later.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã vượt giới hạn tốc độ. Vui lòng thử lại sau." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请求频率超限。请稍后再试。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "请求频率超限。请稍后再试。" } } } }, - "Raw SQL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL thô" + "Raw SQL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SQL thô" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "原始 SQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "原始 SQL" } } } }, - "Raw SQL cannot be empty" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL thô không được để trống" + "Raw SQL cannot be empty": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SQL thô không được để trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "原始 SQL 不能为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "原始 SQL 不能为空" } } } }, - "Read Preference" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Read Preference" + "Read Preference": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Read Preference" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Read Preference" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Read Preference" } } } }, - "Read-only" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chỉ đọc" + "Read-only": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chỉ đọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "只读" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "只读" } } } }, - "Read-Only" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chỉ đọc" + "Read-Only": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chỉ đọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "只读" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "只读" } } } }, - "Read-only connection" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối chỉ đọc" + "Read-only connection": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối chỉ đọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "只读连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "只读连接" } } } }, - "Reassign" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gán lại" + "Reassign": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gán lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新分配" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重新分配" } } } }, - "RECENT" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "GẦN ĐÂY" + "RECENT": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "GẦN ĐÂY" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最近" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "最近" } } } }, - "Recent Conversations" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cuộc trò chuyện gần đây" + "Recent Conversations": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cuộc trò chuyện gần đây" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最近的会话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "最近的会话" } } } }, - "Reconnect" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối lại" + "Reconnect": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重新连接" } } } }, - "Reconnect failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối lại thất bại: %@" + "Reconnect failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối lại thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新连接失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重新连接失败:%@" } } } }, - "Reconnect to Database" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối lại cơ sở dữ liệu" + "Reconnect to Database": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối lại cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新连接数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重新连接数据库" } } } }, - "Recording shortcut" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đang ghi phím tắt" + "Recording shortcut": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đang ghi phím tắt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在录制快捷键" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在录制快捷键" } } } }, - "Red" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đỏ" + "Red": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đỏ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "红色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "红色" } } } }, - "Redis" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redis" + "Redis": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Redis" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redis" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Redis" } } } }, - "Redo" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm lại" + "Redo": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重做" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重做" } } } }, - "Ref Columns" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột tham chiếu" + "Ref Columns": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột tham chiếu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "引用列" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "引用列" } } } }, - "Ref Table" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bảng tham chiếu" + "Ref Table": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bảng tham chiếu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "引用表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "引用表" } } } }, - "Referenced columns (comma-separated)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cột tham chiếu (phân tách bằng dấu phẩy)" + "Referenced columns (comma-separated)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cột tham chiếu (phân tách bằng dấu phẩy)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "引用列(逗号分隔)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "引用列(逗号分隔)" } } } }, - "Referenced table" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bảng tham chiếu" + "Referenced table": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bảng tham chiếu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "引用表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "引用表" } } } }, - "Refresh" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới" + "Refresh": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "刷新" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "刷新" } } } }, - "Refresh (⌘R)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới (⌘R)" + "Refresh (⌘R)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm mới (⌘R)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "刷新 (⌘R)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "刷新 (⌘R)" } } } }, - "Refresh data" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới dữ liệu" + "Refresh data": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm mới dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "刷新数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "刷新数据" } } } }, - "Refresh database list" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới danh sách cơ sở dữ liệu" + "Refresh database list": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm mới danh sách cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "刷新数据库列表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "刷新数据库列表" } } } }, - "Refreshing will discard all unsaved changes." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới sẽ hủy tất cả thay đổi chưa lưu." + "Refreshing will discard all unsaved changes.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm mới sẽ hủy tất cả thay đổi chưa lưu." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "刷新将丢弃所有未保存的更改。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "刷新将丢弃所有未保存的更改。" } } } }, - "Regenerate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo lại" + "Regenerate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新生成" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重新生成" } } } }, - "Remove filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa bộ lọc" + "Remove filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "移除筛选" } } } }, - "Remove Filter" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa bộ lọc" + "Remove Filter": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xóa bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "移除筛选" } } } }, - "Remove license from this machine" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gỡ giấy phép khỏi máy này" + "Remove license from this machine": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gỡ giấy phép khỏi máy này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "从此设备移除许可证" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从此设备移除许可证" } } } }, - "Rename" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đổi tên" + "Rename": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đổi tên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重命名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重命名" } } } }, - "Rename Group" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đổi tên nhóm" + "Rename Group": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đổi tên nhóm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重命名分组" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重命名分组" } } } }, - "Reopen Last Session" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở lại phiên làm việc trước" + "Reopen Last Session": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mở lại phiên làm việc trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新打开上次会话" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重新打开上次会话" } } } }, - "Replication lag: %llds" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ trễ sao chép: %llds" + "Replication lag: %llds": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ trễ sao chép: %llds" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制延迟:%llds" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复制延迟:%llds" } } } }, - "Require SSL, skip verification" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Yêu cầu SSL, bỏ qua xác minh" + "Require SSL, skip verification": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Yêu cầu SSL, bỏ qua xác minh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "要求 SSL,跳过验证" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "要求 SSL,跳过验证" } } } }, - "Requires" : { - - }, - "Reset to Defaults" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khôi phục mặc định" + "Requires": {}, + "Reset to Defaults": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khôi phục mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "恢复默认" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "恢复默认" } } } }, - "Restart TablePro for the language change to take full effect." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khởi động lại TablePro để thay đổi ngôn ngữ có hiệu lực hoàn toàn." + "Restart TablePro for the language change to take full effect.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khởi động lại TablePro để thay đổi ngôn ngữ có hiệu lực hoàn toàn." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重启 TablePro 以使语言更改完全生效。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重启 TablePro 以使语言更改完全生效。" } } } }, - "Restart TablePro to fully unload removed plugins." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khởi động lại TablePro để gỡ hoàn toàn các plugin đã xoá." + "Restart TablePro to fully unload removed plugins.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khởi động lại TablePro để gỡ hoàn toàn các plugin đã xoá." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重启 TablePro 以完全卸载已移除的插件。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重启 TablePro 以完全卸载已移除的插件。" } } } }, - "Retention" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu giữ" + "Retention": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu giữ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保留" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保留" } } } }, - "Retry" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thử lại" + "Retry": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thử lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重试" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重试" } } } }, - "Retry Install" : { - - }, - "Reuse clean table tab" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tái sử dụng tab bảng trống" + "Retry Install": {}, + "Reuse clean table tab": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tái sử dụng tab bảng trống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复用空白表标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "复用空白表标签页" } } } }, - "Right-click to show all %@" : { - - }, - "Right-click to show all tables" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấn chuột phải để hiện tất cả bảng" + "Right-click to show all %@": {}, + "Right-click to show all tables": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấn chuột phải để hiện tất cả bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右键单击显示所有表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "右键单击显示所有表" } } } }, - "root" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "root" + "root": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "root" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "root" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "root" } } } }, - "Row %lld" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hàng %lld" + "Row %lld": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hàng %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行 %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行 %lld" } } } }, - "Row %lld, column %lld: %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Row %1$lld, column %2$lld: %3$@" + "Row %lld, column %lld: %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Row %1$lld, column %2$lld: %3$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hàng %lld, cột %lld: %@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hàng %lld, cột %lld: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行 %lld,列 %lld:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行 %lld,列 %lld:%@" } } } }, - "Row Details" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chi tiết dòng" + "Row Details": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chi tiết dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行详情" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行详情" } } } }, - "Row height:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chiều cao dòng:" + "Row height:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chiều cao dòng:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行高:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行高:" } } } }, - "Row number" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số hàng" + "Row number": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số hàng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行号" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行号" } } } }, - "Rows" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dòng" + "Rows": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "行" } } } }, - "Rows per INSERT" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dòng mỗi INSERT" + "Rows per INSERT": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dòng mỗi INSERT" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每条 INSERT 的行数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每条 INSERT 的行数" } } } }, - "Rows per insertMany" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Số dòng mỗi insertMany" + "Rows per insertMany": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Số dòng mỗi insertMany" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每条 insertMany 的行数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每条 insertMany 的行数" } } } }, - "Run a query to see execution time" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chạy truy vấn để xem thời gian thực thi" + "Run a query to see execution time": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chạy truy vấn để xem thời gian thực thi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "运行查询以查看执行时间" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "运行查询以查看执行时间" } } } }, - "Run in New Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chạy trong tab mới" + "Run in New Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chạy trong tab mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在新标签页中运行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在新标签页中运行" } } } }, - "Safe Mode" : { - - }, - "Safe Mode (Full)" : { - - }, - "Safe Mode: %@" : { - - }, - "Same options will be applied to all selected tables." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cùng tùy chọn sẽ được áp dụng cho tất cả bảng đã chọn." + "Safe Mode": {}, + "Safe Mode (Full)": {}, + "Safe Mode: %@": {}, + "Same options will be applied to all selected tables.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cùng tùy chọn sẽ được áp dụng cho tất cả bảng đã chọn." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "相同选项将应用于所有选中的表。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "相同选项将应用于所有选中的表。" } } } }, - "Sanitize formula-like values" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm sạch giá trị giống công thức" + "Sanitize formula-like values": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm sạch giá trị giống công thức" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清理类公式值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清理类公式值" } } } }, - "Save" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu" + "Save": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存" } } } }, - "Save and load filter presets" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu và tải mẫu bộ lọc" + "Save and load filter presets": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu và tải mẫu bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存和加载筛选预设" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存和加载筛选预设" } } } }, - "Save Anyway" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vẫn lưu" + "Save Anyway": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Vẫn lưu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "仍然保存" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "仍然保存" } } } }, - "Save as Preset..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu dưới dạng mẫu..." + "Save as Preset...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu dưới dạng mẫu..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "另存为预设..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "另存为预设..." } } } }, - "Save as Template" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu dưới dạng mẫu" + "Save as Template": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu dưới dạng mẫu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "另存为模板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "另存为模板" } } } }, - "Save Changes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu thay đổi" + "Save Changes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu thay đổi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存更改" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存更改" } } } }, - "Save Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu thất bại" + "Save Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存失败" } } } }, - "Save Filter Preset" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu mẫu bộ lọc" + "Save Filter Preset": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu mẫu bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存筛选预设" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存筛选预设" } } } }, - "Save Sidebar Changes" : { - - }, - "Save Table Template" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu mẫu bảng" + "Save Sidebar Changes": {}, + "Save Table Template": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lưu mẫu bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存表模板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "保存表模板" } } } }, - "Saved Connections" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối đã lưu" + "Saved Connections": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối đã lưu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已保存的连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已保存的连接" } } } }, - "SAVED CONNECTIONS" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "KẾT NỐI ĐÃ LƯU" + "SAVED CONNECTIONS": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "KẾT NỐI ĐÃ LƯU" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已保存的连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已保存的连接" } } } }, - "Scale" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tỉ lệ" + "Scale": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tỉ lệ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "小数位数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "小数位数" } } } }, - "Scale:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tỉ lệ:" + "Scale:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tỉ lệ:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "小数位数:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "小数位数:" } } } }, - "Schema" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema" + "Schema": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Schema" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Schema" } } } }, - "Schema Switch Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển schema thất bại" + "Schema Switch Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển schema thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换 Schema 失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换 Schema 失败" } } } }, - "Schemas" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema" + "Schemas": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Schema" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schema" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Schema" } } } }, - "Search columns..." : { - - }, - "Search databases..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm cơ sở dữ liệu..." + "Search columns...": {}, + "Search databases...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm cơ sở dữ liệu..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索数据库..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索数据库..." } } } }, - "Search for connection..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kết nối..." + "Search for connection...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm kết nối..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索连接..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索连接..." } } } }, - "Search for field..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm trường..." + "Search for field...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm trường..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索字段..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索字段..." } } } }, - "Search or type..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kiếm hoặc nhập..." + "Search or type...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm kiếm hoặc nhập..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索或输入..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索或输入..." } } } }, - "Search plugins..." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kiếm plugin..." + "Search plugins...": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm kiếm plugin..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索插件..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索插件..." } } } }, - "Search queries..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm truy vấn..." + "Search queries...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm truy vấn..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索查询..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索查询..." } } } }, - "Search schemas..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm schema..." + "Search schemas...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm schema..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索 Schema..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索 Schema..." } } } }, - "Search shortcuts..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm phím tắt..." + "Search shortcuts...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm phím tắt..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索快捷键..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索快捷键..." } } } }, - "Search tables, views, databases..." : { - - }, - "Search..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kiếm..." + "Search tables, views, databases...": {}, + "Search...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tìm kiếm..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "搜索..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "搜索..." } } } }, - "Second value is required for BETWEEN" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị thứ hai là bắt buộc cho BETWEEN" + "Second value is required for BETWEEN": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị thứ hai là bắt buộc cho BETWEEN" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "BETWEEN 需要第二个值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "BETWEEN 需要第二个值" } } } }, - "Secondary" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondary" + "Secondary": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Secondary" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondary" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Secondary" } } } }, - "Secondary Preferred" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondary Preferred" + "Secondary Preferred": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Secondary Preferred" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondary Preferred" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Secondary Preferred" } } } }, - "SELECT * FROM users WHERE id = 1;" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SELECT * FROM users WHERE id = 1;" + "SELECT * FROM users WHERE id = 1;": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SELECT * FROM users WHERE id = 1;" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SELECT * FROM users WHERE id = 1;" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SELECT * FROM users WHERE id = 1;" } } } }, - "Select a Plugin" : { - + "Select a Plugin": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn một Plugin" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择一个插件" + } + } + } }, - "Select a plugin to view details" : { - + "Select a plugin to view details": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn plugin để xem chi tiết" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择插件查看详情" + } + } + } }, - "Select a Query" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn một truy vấn" + "Select a Query": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn một truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择一个查询" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择一个查询" } } } }, - "Select a row or table to view details" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn một hàng hoặc bảng để xem chi tiết" + "Select a row or table to view details": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn một hàng hoặc bảng để xem chi tiết" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择一行或一个表以查看详情" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择一行或一个表以查看详情" } } } }, - "Select a table to copy its structure:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn bảng để sao chép cấu trúc:" + "Select a table to copy its structure:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn bảng để sao chép cấu trúc:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择要复制结构的表:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择要复制结构的表:" } } } }, - "Select All" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn tất cả" + "Select All": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn tất cả" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全选" } } } }, - "Select filter for %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn bộ lọc cho %@" + "Select filter for %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn bộ lọc cho %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "为 %@ 选择筛选条件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "为 %@ 选择筛选条件" } } } }, - "Select Plugin" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn Plugin" + "Select Plugin": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn Plugin" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择插件" } } } }, - "Select SQL File..." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn tệp SQL..." + "Select SQL File...": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn tệp SQL..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择 SQL 文件..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择 SQL 文件..." } } } }, - "Select Tab %lld" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chọn tab %lld" + "Select Tab %lld": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chọn tab %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择标签页 %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择标签页 %lld" } } } }, - "Send Message" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gửi tin nhắn" + "Send Message": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gửi tin nhắn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "发送消息" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "发送消息" } } } }, - "Server" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Máy chủ" + "Server": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Máy chủ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "服务器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "服务器" } } } }, - "Server error (%lld): %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Server error (%1$lld): %2$@" + "Server error (%lld): %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Server error (%1$lld): %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi máy chủ (%1$lld): %2$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi máy chủ (%1$lld): %2$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "服务器错误 (%lld):%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "服务器错误 (%lld):%@" } } } }, - "Service Name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên dịch vụ" + "Service Name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên dịch vụ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "服务名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "服务名称" } } } }, - "Set DEFAULT" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt DEFAULT" + "Set DEFAULT": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt DEFAULT" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设为 DEFAULT" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设为 DEFAULT" } } } }, - "Set EMPTY" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt TRỐNG" + "Set EMPTY": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt TRỐNG" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设为空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设为空" } } } }, - "Set NULL" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt NULL" + "Set NULL": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt NULL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设为 NULL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设为 NULL" } } } }, - "Set special value" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt giá trị đặc biệt" + "Set special value": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt giá trị đặc biệt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设置特殊值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设置特殊值" } } } }, - "Set Up AI Provider" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thiết lập nhà cung cấp AI" + "Set Up AI Provider": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thiết lập nhà cung cấp AI" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设置 AI 提供商" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设置 AI 提供商" } } } }, - "Set Value" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đặt giá trị" + "Set Value": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đặt giá trị" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设置值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设置值" } } } }, - "Share anonymous usage data" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chia sẻ dữ liệu sử dụng ẩn danh" + "Share anonymous usage data": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chia sẻ dữ liệu sử dụng ẩn danh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "共享匿名使用数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "共享匿名使用数据" } } } }, - "Shell script to run before connecting. Non-zero exit aborts connection." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Shell script chạy trước khi kết nối. Exit code khác 0 sẽ hủy kết nối." + "Shell script to run before connecting. Non-zero exit aborts connection.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Shell script chạy trước khi kết nối. Exit code khác 0 sẽ hủy kết nối." } } } }, - "Shortcut Conflict" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xung đột phím tắt" + "Shortcut Conflict": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xung đột phím tắt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "快捷键冲突" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "快捷键冲突" } } } }, - "Shortcut recorder" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ghi phím tắt" + "Shortcut recorder": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Ghi phím tắt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "快捷键录制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "快捷键录制" } } } }, - "Show All" : { - - }, - "Show All %@" : { - - }, - "Show All Collections" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị tất cả Collection" + "Show All": {}, + "Show All %@": {}, + "Show All Collections": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị tất cả Collection" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示所有集合" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示所有集合" } } } }, - "Show All Databases" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị tất cả cơ sở dữ liệu" + "Show All Databases": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiển thị tất cả cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示所有数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示所有数据库" } } } }, - "Show All Tables" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện tất cả bảng" + "Show All Tables": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện tất cả bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示所有表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示所有表" } } } }, - "Show alternate row backgrounds" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện nền xen kẽ dòng" + "Show alternate row backgrounds": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện nền xen kẽ dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示交替行背景" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示交替行背景" } } } }, - "Show line numbers" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện số dòng" + "Show line numbers": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện số dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示行号" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示行号" } } } }, - "Show Next Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện tab tiếp" + "Show Next Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện tab tiếp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示下一个标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示下一个标签页" } } } }, - "Show Previous Tab" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện tab trước" + "Show Previous Tab": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện tab trước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示上一个标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示上一个标签页" } } } }, - "Show Structure" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện cấu trúc" + "Show Structure": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện cấu trúc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示结构" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示结构" } } } }, - "Show Welcome Screen" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện màn hình chào mừng" + "Show Welcome Screen": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện màn hình chào mừng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示欢迎屏幕" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示欢迎屏幕" } } } }, - "Show Welcome Window" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiện cửa sổ chào mừng" + "Show Welcome Window": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hiện cửa sổ chào mừng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示欢迎窗口" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示欢迎窗口" } } } }, - "Sidebar Panel" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thanh bên" + "Sidebar Panel": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thanh bên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "侧边栏" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "侧边栏" } } } }, - "Silent" : { - - }, - "Single-clicking a table opens a temporary tab that gets replaced on next click." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấp một lần vào bảng sẽ mở tab tạm thời, tab này sẽ được thay thế khi nhấp tiếp." + "Silent": {}, + "Single-clicking a table opens a temporary tab that gets replaced on next click.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhấp một lần vào bảng sẽ mở tab tạm thời, tab này sẽ được thay thế khi nhấp tiếp." } } } }, - "Size" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích thước" + "Size": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích thước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "大小" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "大小" } } } }, - "SIZE" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "KÍCH THƯỚC" + "SIZE": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "KÍCH THƯỚC" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "大小" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "大小" } } } }, - "Size:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kích thước:" + "Size:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kích thước:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "大小:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "大小:" } } } }, - "Skip" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bỏ qua" + "Skip": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bỏ qua" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "跳过" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "跳过" } } } }, - "Software Update" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cập nhật phần mềm" + "Software Update": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cập nhật phần mềm" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "软件更新" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "软件更新" } } } }, - "Source:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nguồn:" + "Source:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nguồn:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "来源:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "来源:" } } } }, - "Spacious" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rộng rãi" + "Spacious": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Rộng rãi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "宽松" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "宽松" } } } }, - "SQL" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL" + "SQL": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SQL" } } } }, - "SQL commands to run after connecting, e.g. SET time_zone = 'Asia/Ho_Chi_Minh'. One per line or separated by semicolons." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Các lệnh SQL chạy sau khi kết nối, ví dụ SET time_zone = 'Asia/Ho_Chi_Minh'. Mỗi dòng một lệnh hoặc phân cách bằng dấu chấm phẩy." + "SQL commands to run after connecting, e.g. SET time_zone = 'Asia/Ho_Chi_Minh'. One per line or separated by semicolons.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Các lệnh SQL chạy sau khi kết nối, ví dụ SET time_zone = 'Asia/Ho_Chi_Minh'. Mỗi dòng một lệnh hoặc phân cách bằng dấu chấm phẩy." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接后执行的 SQL 命令,例如 SET time_zone = 'Asia/Ho_Chi_Minh'。每行一条或用分号分隔。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接后执行的 SQL 命令,例如 SET time_zone = 'Asia/Ho_Chi_Minh'。每行一条或用分号分隔。" } } } }, - "SQL Dialect" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phương ngữ SQL" + "SQL Dialect": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phương ngữ SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL 方言" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SQL 方言" } } } }, - "SQL Functions" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hàm SQL" + "SQL Functions": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hàm SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL 函数" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SQL 函数" } } } }, - "SQL import is not supported for %@ connections." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập SQL không được hỗ trợ cho kết nối %@." + "SQL import is not supported for %@ connections.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập SQL không được hỗ trợ cho kết nối %@." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不支持对 %@ 连接进行 SQL 导入。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不支持对 %@ 连接进行 SQL 导入。" } } } }, - "SQL Preview" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem trước SQL" + "SQL Preview": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem trước SQL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL 预览" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SQL 预览" } } } }, - "SQL Server" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL Server" + "SQL Server": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SQL Server" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQL Server" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SQL Server" } } } }, - "SQLite is file-based" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQLite dựa trên tệp" + "SQLite is file-based": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SQLite dựa trên tệp" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SQLite 基于文件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SQLite 基于文件" } } } }, - "SSH Agent" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH Agent" + "SSH Agent": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SSH Agent" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH Agent" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH Agent" } } } }, - "SSH authentication failed. Check your credentials or private key." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác thực SSH thất bại. Kiểm tra thông tin đăng nhập hoặc khóa riêng tư." + "SSH authentication failed. Check your credentials or private key.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác thực SSH thất bại. Kiểm tra thông tin đăng nhập hoặc khóa riêng tư." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH 认证失败。请检查您的凭据或私钥。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH 认证失败。请检查您的凭据或私钥。" } } } }, - "SSH command not found. Please ensure OpenSSH is installed." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không tìm thấy lệnh SSH. Vui lòng đảm bảo OpenSSH đã được cài đặt." + "SSH command not found. Please ensure OpenSSH is installed.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không tìm thấy lệnh SSH. Vui lòng đảm bảo OpenSSH đã được cài đặt." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到 SSH 命令。请确保已安装 OpenSSH。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未找到 SSH 命令。请确保已安装 OpenSSH。" } } } }, - "SSH connection timed out" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kết nối SSH đã hết thời gian" + "SSH connection timed out": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kết nối SSH đã hết thời gian" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH 连接超时" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH 连接超时" } } } }, - "SSH Host" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Máy chủ SSH" + "SSH Host": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Máy chủ SSH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH 主机" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH 主机" } } } }, - "SSH Host Key Changed" : { - - }, - "SSH host key verification failed" : { - - }, - "SSH Port" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cổng SSH" + "SSH Host Key Changed": {}, + "SSH host key verification failed": {}, + "SSH Port": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cổng SSH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH 端口" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH 端口" } } } }, - "SSH Tunnel" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đường hầm SSH" + "SSH Tunnel": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đường hầm SSH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH 隧道" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH 隧道" } } } }, - "SSH tunnel already exists for connection: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đường hầm SSH đã tồn tại cho kết nối: %@" + "SSH tunnel already exists for connection: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đường hầm SSH đã tồn tại cho kết nối: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连接已存在 SSH 隧道:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "连接已存在 SSH 隧道:%@" } } } }, - "SSH tunnel creation failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạo đường hầm SSH thất bại: %@" + "SSH tunnel creation failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạo đường hầm SSH thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "创建 SSH 隧道失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "创建 SSH 隧道失败:%@" } } } }, - "SSH User" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Người dùng SSH" + "SSH User": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Người dùng SSH" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSH 用户" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSH 用户" } } } }, - "ssh.example.com" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "ssh.example.com" + "ssh.example.com": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "ssh.example.com" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "ssh.example.com" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "ssh.example.com" } } } }, - "SSL Mode" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chế độ SSL" + "SSL Mode": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chế độ SSL" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSL 模式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSL 模式" } } } }, - "SSL/TLS" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSL/TLS" + "SSL/TLS": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "SSL/TLS" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "SSL/TLS" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "SSL/TLS" } } } }, - "starts with" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "bắt đầu bằng" + "starts with": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "bắt đầu bằng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "以...开头" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "以...开头" } } } }, - "Startup Commands" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lệnh khởi động" + "Startup Commands": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lệnh khởi động" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启动命令" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "启动命令" } } } }, - "statement" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "câu lệnh" + "statement": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "câu lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "条语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "条语句" } } } }, - "Statement %lld" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Câu lệnh %lld" + "Statement %lld": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Câu lệnh %lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "语句 %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "语句 %lld" } } } }, - "Statement %lld of %lld" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Statement %1$lld of %2$lld" + "Statement %lld of %lld": { + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Statement %1$lld of %2$lld" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Câu lệnh %1$lld / %2$lld" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Câu lệnh %1$lld / %2$lld" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "语句 %lld / %lld" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "语句 %lld / %lld" } } } }, - "Statement:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Câu lệnh:" + "Statement:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Câu lệnh:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "语句:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "语句:" } } } }, - "statements" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "câu lệnh" + "statements": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "câu lệnh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "条语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "条语句" } } } }, - "STATISTICS" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "THỐNG KÊ" + "STATISTICS": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "THỐNG KÊ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "统计信息" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "统计信息" } } } }, - "Status" : { - - }, - "Stop" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dừng" + "Status": {}, + "Stop": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dừng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停止" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "停止" } } } }, - "Stop Generating" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dừng tạo phản hồi" + "Stop Generating": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Dừng tạo phản hồi" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停止生成" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "停止生成" } } } }, - "Streaming failed: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phát trực tuyến thất bại: %@" + "Streaming failed: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phát trực tuyến thất bại: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "流式传输失败:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "流式传输失败:%@" } } } }, - "Structure" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cấu trúc" + "Structure": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cấu trúc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "结构" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "结构" } } } }, - "Structure, Drop, and Data options are configured per table in the table list." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tùy chọn Cấu trúc, Xóa và Dữ liệu được cấu hình cho từng bảng trong danh sách bảng." + "Structure, Drop, and Data options are configured per table in the table list.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tùy chọn Cấu trúc, Xóa và Dữ liệu được cấu hình cho từng bảng trong danh sách bảng." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "结构、删除和数据选项在表列表中按表单独配置。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "结构、删除和数据选项在表列表中按表单独配置。" } } } }, - "Success" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thành công" + "Success": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thành công" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "成功" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "成功" } } } }, - "Suspended" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạm ngưng" + "Suspended": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạm ngưng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已暂停" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已暂停" } } } }, - "Switch connection" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển kết nối" + "Switch connection": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换连接" } } } }, - "Switch Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển kết nối" + "Switch Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换连接" } } } }, - "Switch Connection (⌘⌥C)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển kết nối (⌘⌥C)" + "Switch Connection (⌘⌥C)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển kết nối (⌘⌥C)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换连接 (⌘⌥C)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换连接 (⌘⌥C)" } } } }, - "Switch Connection..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển kết nối..." + "Switch Connection...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển kết nối..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换连接..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换连接..." } } } }, - "Switch Database" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển cơ sở dữ liệu" + "Switch Database": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển cơ sở dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换数据库" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换数据库" } } } }, - "Switch Database (⌘K)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chuyển cơ sở dữ liệu (⌘K)" + "Switch Database (⌘K)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chuyển cơ sở dữ liệu (⌘K)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换数据库 (⌘K)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换数据库 (⌘K)" } } } }, - "System" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hệ thống" + "System": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hệ thống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "系统" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "系统" } } } }, - "System Reserved Shortcut" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phím tắt hệ thống" + "System Reserved Shortcut": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phím tắt hệ thống" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "系统保留快捷键" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "系统保留快捷键" } } } }, - "System Table" : { - - }, - "Tab Behavior" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hành vi tab" + "System Table": {}, + "Tab Behavior": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hành vi tab" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "标签页行为" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "标签页行为" } } } }, - "Tab width:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Độ rộng tab:" + "Tab width:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Độ rộng tab:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "制表符宽度:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "制表符宽度:" } } } }, - "Table" : { - - }, - "Table '%@' has no columns or does not exist" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bảng '%@' không có cột hoặc không tồn tại" + "Table": {}, + "Table '%@' has no columns or does not exist": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bảng '%@' không có cột hoặc không tồn tại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表 '%@' 没有列或不存在" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表 '%@' 没有列或不存在" } } } }, - "Table creation options not available" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tùy chọn tạo bảng không khả dụng" + "Table creation options not available": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tùy chọn tạo bảng không khả dụng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表创建选项不可用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表创建选项不可用" } } } }, - "Table Info" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thông tin bảng" + "Table Info": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thông tin bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表信息" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表信息" } } } }, - "Table Name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên bảng" + "Table Name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表名" } } } }, - "Table: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bảng: %@" + "Table: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bảng: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表:%@" } } } }, - "TablePro" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TablePro" + "TablePro": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TablePro" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "TablePro" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "TablePro" } } } }, - "Tables" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bảng" + "Tables": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表" } } } }, - "Tablespace" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tablespace" + "Tablespace": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tablespace" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "表空间" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "表空间" } } } }, - "Tabs" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tab" + "Tabs": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tab" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "标签页" } } } }, - "Tag" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhãn" + "Tag": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhãn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "标签" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "标签" } } } }, - "Tag name" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên thẻ" + "Tag name": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên thẻ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "标签名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "标签名称" } } } }, - "Tag: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thẻ: %@" + "Tag: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thẻ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "标签:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "标签:%@" } } } }, - "Template" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mẫu" + "Template": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mẫu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "模板" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "模板" } } } }, - "Template Name" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên mẫu" + "Template Name": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên mẫu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "模板名称" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "模板名称" } } } }, - "Temporarily disable foreign key constraints during import. Useful for importing data with circular dependencies." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tạm thời tắt ràng buộc khóa ngoại trong quá trình nhập. Hữu ích khi nhập dữ liệu có phụ thuộc vòng." + "Temporarily disable foreign key constraints during import. Useful for importing data with circular dependencies.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tạm thời tắt ràng buộc khóa ngoại trong quá trình nhập. Hữu ích khi nhập dữ liệu có phụ thuộc vòng." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入时临时禁用外键约束。适用于导入具有循环依赖的数据。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "导入时临时禁用外键约束。适用于导入具有循环依赖的数据。" } } } }, - "Test" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra" + "Test": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "测试" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "测试" } } } }, - "Test Connection" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra kết nối" + "Test Connection": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểm tra kết nối" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "测试连接" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "测试连接" } } } }, - "The %@ plugin is not installed. Would you like to download it from the plugin marketplace?" : { - - }, - "The %@ plugin is not installed. You can download it from the plugin marketplace." : { - - }, - "The authenticity of host '%@' can't be established.\n\n%@ key fingerprint is:\n%@\n\nAre you sure you want to continue connecting?" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "The authenticity of host '%1$@' can't be established.\n\n%2$@ key fingerprint is:\n%3$@\n\nAre you sure you want to continue connecting?" + "The %@ plugin is not installed. Would you like to download it from the plugin marketplace?": {}, + "The %@ plugin is not installed. You can download it from the plugin marketplace.": {}, + "The authenticity of host '%@' can't be established.\n\n%@ key fingerprint is:\n%@\n\nAre you sure you want to continue connecting?": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "The authenticity of host '%1$@' can't be established.\n\n%2$@ key fingerprint is:\n%3$@\n\nAre you sure you want to continue connecting?" } } } }, - "The following %lld queries may permanently modify or delete data. This action cannot be undone.\n\n%@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "The following %1$lld queries may permanently modify or delete data. This action cannot be undone.\n\n%2$@" + "The following %lld queries may permanently modify or delete data. This action cannot be undone.\n\n%@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "The following %1$lld queries may permanently modify or delete data. This action cannot be undone.\n\n%2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$lld truy vấn sau có thể thay đổi hoặc xóa dữ liệu vĩnh viễn. Hành động này không thể hoàn tác.\n\n%2$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "%1$lld truy vấn sau có thể thay đổi hoặc xóa dữ liệu vĩnh viễn. Hành động này không thể hoàn tác.\n\n%2$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "以下 %lld 个查询可能会永久修改或删除数据。此操作无法撤销。\n\n%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "以下 %lld 个查询可能会永久修改或删除数据。此操作无法撤销。\n\n%@" } } } }, - "The text is not valid JSON. Save anyway?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nội dung không phải JSON hợp lệ. Vẫn lưu?" + "The text is not valid JSON. Save anyway?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nội dung không phải JSON hợp lệ. Vẫn lưu?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文本不是有效的 JSON。仍然保存?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文本不是有效的 JSON。仍然保存?" } } } }, - "Themes" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giao diện" + "Themes": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giao diện" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "主题" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "主题" } } } }, - "This database has no %@ yet." : { - - }, - "This database has no tables yet." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cơ sở dữ liệu này chưa có bảng nào." + "This database has no %@ yet.": {}, + "This database has no tables yet.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Cơ sở dữ liệu này chưa có bảng nào." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此数据库还没有表。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此数据库还没有表。" } } } }, - "This DELETE query has no WHERE clause and will delete ALL rows in the table. This action cannot be undone." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn DELETE này không có mệnh đề WHERE và sẽ xóa TẤT CẢ dòng trong bảng. Thao tác này không thể hoàn tác." + "This DELETE query has no WHERE clause and will delete ALL rows in the table. This action cannot be undone.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn DELETE này không có mệnh đề WHERE và sẽ xóa TẤT CẢ dòng trong bảng. Thao tác này không thể hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此 DELETE 查询没有 WHERE 子句,将删除表中的所有行。此操作无法撤销。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此 DELETE 查询没有 WHERE 子句,将删除表中的所有行。此操作无法撤销。" } } } }, - "This DROP query will permanently remove database objects. This action cannot be undone." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn DROP này sẽ xóa vĩnh viễn các đối tượng cơ sở dữ liệu. Thao tác này không thể hoàn tác." + "This DROP query will permanently remove database objects. This action cannot be undone.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn DROP này sẽ xóa vĩnh viễn các đối tượng cơ sở dữ liệu. Thao tác này không thể hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此 DROP 查询将永久删除数据库对象。此操作无法撤销。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此 DROP 查询将永久删除数据库对象。此操作无法撤销。" } } } }, - "This Month" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tháng này" + "This Month": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tháng này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "本月" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "本月" } } } }, - "This operation is not supported" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thao tác này không được hỗ trợ" + "This operation is not supported": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thao tác này không được hỗ trợ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不支持此操作" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不支持此操作" } } } }, - "This plugin requires TablePro %@ or later" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugin này yêu cầu TablePro %@ trở lên" + "This plugin requires TablePro %@ or later": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Plugin này yêu cầu TablePro %@ trở lên" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此插件需要 TablePro %@ 或更高版本" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此插件需要 TablePro %@ 或更高版本" } } } }, - "This query may permanently modify or delete data." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn này có thể sửa đổi hoặc xóa dữ liệu vĩnh viễn." + "This query may permanently modify or delete data.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn này có thể sửa đổi hoặc xóa dữ liệu vĩnh viễn." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此查询可能会永久修改或删除数据。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此查询可能会永久修改或删除数据。" } } } }, - "This shortcut is reserved by macOS and cannot be assigned." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phím tắt này được macOS dành riêng và không thể gán." + "This shortcut is reserved by macOS and cannot be assigned.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phím tắt này được macOS dành riêng và không thể gán." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此快捷键已被 macOS 保留,无法分配。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此快捷键已被 macOS 保留,无法分配。" } } } }, - "This SQL query failed with an error. Please fix it.\n\nQuery:\n```sql\n%@\n```\n\nError: %@" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "This SQL query failed with an error. Please fix it.\n\nQuery:\n```sql\n%1$@\n```\n\nError: %2$@" + "This SQL query failed with an error. Please fix it.\n\nQuery:\n```sql\n%@\n```\n\nError: %@": { + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "This SQL query failed with an error. Please fix it.\n\nQuery:\n```sql\n%1$@\n```\n\nError: %2$@" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Câu truy vấn SQL sau đã thất bại với lỗi. Vui lòng sửa lỗi.\n\nTruy vấn:\n```sql\n%1$@\n```\n\nLỗi: %2$@" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Câu truy vấn SQL sau đã thất bại với lỗi. Vui lòng sửa lỗi.\n\nTruy vấn:\n```sql\n%1$@\n```\n\nLỗi: %2$@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此 SQL 查询执行失败并报错。请修复。\n\n查询:\n```sql\n%@\n```\n\n错误:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此 SQL 查询执行失败并报错。请修复。\n\n查询:\n```sql\n%@\n```\n\n错误:%@" } } } }, - "This TRUNCATE query will permanently delete all rows in the table. This action cannot be undone." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truy vấn TRUNCATE này sẽ xóa vĩnh viễn tất cả dòng trong bảng. Thao tác này không thể hoàn tác." + "This TRUNCATE query will permanently delete all rows in the table. This action cannot be undone.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truy vấn TRUNCATE này sẽ xóa vĩnh viễn tất cả dòng trong bảng. Thao tác này không thể hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此 TRUNCATE 查询将永久删除表中的所有行。此操作无法撤销。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此 TRUNCATE 查询将永久删除表中的所有行。此操作无法撤销。" } } } }, - "This Week" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tuần này" + "This Week": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tuần này" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "本周" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "本周" } } } }, - "This will permanently delete %lld %@. This action cannot be undone." : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "This will permanently delete %1$lld %2$@. This action cannot be undone." + "This will permanently delete %lld %@. This action cannot be undone.": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "This will permanently delete %1$lld %2$@. This action cannot be undone." } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thao tác này sẽ xóa vĩnh viễn %1$lld %2$@. Không thể hoàn tác." + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thao tác này sẽ xóa vĩnh viễn %1$lld %2$@. Không thể hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此操作将永久删除 %lld 个%@。无法撤销。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此操作将永久删除 %lld 个%@。无法撤销。" } } } }, - "This will permanently delete all query history entries. This action cannot be undone." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thao tác này sẽ xóa vĩnh viễn toàn bộ lịch sử truy vấn. Không thể hoàn tác." + "This will permanently delete all query history entries. This action cannot be undone.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thao tác này sẽ xóa vĩnh viễn toàn bộ lịch sử truy vấn. Không thể hoàn tác." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此操作将永久删除所有查询历史记录。无法撤销。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此操作将永久删除所有查询历史记录。无法撤销。" } } } }, - "This will remove the license from this machine. You can reactivate later." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thao tác này sẽ gỡ giấy phép khỏi máy này. Bạn có thể kích hoạt lại sau." + "This will remove the license from this machine. You can reactivate later.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thao tác này sẽ gỡ giấy phép khỏi máy này. Bạn có thể kích hoạt lại sau." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "此操作将从本机移除许可证。您可以稍后重新激活。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此操作将从本机移除许可证。您可以稍后重新激活。" } } } }, - "TIMESTAMPS" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "THỜI GIAN" + "TIMESTAMPS": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "THỜI GIAN" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "时间戳" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "时间戳" } } } }, - "to view data" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "để xem dữ liệu" + "to view data": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "để xem dữ liệu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "以查看数据" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "以查看数据" } } } }, - "Today" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hôm nay" + "Today": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hôm nay" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "今天" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "今天" } } } }, - "Toggle AI Chat" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt AI Chat" + "Toggle AI Chat": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt AI Chat" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换 AI 聊天" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换 AI 聊天" } } } }, - "Toggle AI Chat (⌘⇧L)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt AI Chat (⌘⇧L)" + "Toggle AI Chat (⌘⇧L)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt AI Chat (⌘⇧L)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换 AI 聊天 (⌘⇧L)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换 AI 聊天 (⌘⇧L)" } } } }, - "Toggle filters" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt bộ lọc" + "Toggle filters": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换筛选" } } } }, - "Toggle Filters" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt bộ lọc" + "Toggle Filters": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt bộ lọc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换筛选" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换筛选" } } } }, - "Toggle Filters (⌘F)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt bộ lọc (⌘F)" + "Toggle Filters (⌘F)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt bộ lọc (⌘F)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换筛选 (⌘F)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换筛选 (⌘F)" } } } }, - "Toggle Filters (Cmd+F)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt bộ lọc (Cmd+F)" + "Toggle Filters (Cmd+F)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt bộ lọc (Cmd+F)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换筛选 (Cmd+F)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换筛选 (Cmd+F)" } } } }, - "Toggle History" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt lịch sử" + "Toggle History": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt lịch sử" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换历史记录" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换历史记录" } } } }, - "Toggle inspector" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt thanh kiểm tra" + "Toggle inspector": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt thanh kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换检查器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换检查器" } } } }, - "Toggle Inspector" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt thanh kiểm tra" + "Toggle Inspector": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt thanh kiểm tra" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换检查器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换检查器" } } } }, - "Toggle Inspector (⌘⌥B)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt thanh kiểm tra (⌘⌥B)" + "Toggle Inspector (⌘⌥B)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt thanh kiểm tra (⌘⌥B)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换检查器 (⌘⌥B)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换检查器 (⌘⌥B)" } } } }, - "Toggle query history" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt lịch sử truy vấn" + "Toggle query history": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt lịch sử truy vấn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换查询历史" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换查询历史" } } } }, - "Toggle Query History (⌘⇧H)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt lịch sử truy vấn (⌘⇧H)" + "Toggle Query History (⌘⇧H)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt lịch sử truy vấn (⌘⇧H)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换查询历史 (⌘⇧H)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换查询历史 (⌘⇧H)" } } } }, - "Toggle Query History (⌘Y)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt lịch sử truy vấn (⌘Y)" + "Toggle Query History (⌘Y)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt lịch sử truy vấn (⌘Y)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换查询历史 (⌘Y)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换查询历史 (⌘Y)" } } } }, - "Toggle Table Browser" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt trình duyệt bảng" + "Toggle Table Browser": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bật/tắt trình duyệt bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换表浏览器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换表浏览器" } } } }, - "Total Size" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tổng kích thước" + "Total Size": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tổng kích thước" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "总大小" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "总大小" } } } }, - "TOTP" : { - - }, - "TOTP Secret" : { - - }, - "true" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "true" + "TOTP": {}, + "TOTP Secret": {}, + "true": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "true" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "true" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "true" } } } }, - "TRUE" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "TRUE" + "TRUE": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "TRUE" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "TRUE" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "TRUE" } } } }, - "Truncate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truncate" + "Truncate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truncate" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清空" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清空" } } } }, - "Truncate %lld tables" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm trống %lld bảng" + "Truncate %lld tables": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm trống %lld bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清空 %lld 个表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清空 %lld 个表" } } } }, - "Truncate all tables linked by foreign keys" : { - - }, - "Truncate Table" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Truncate bảng" + "Truncate all tables linked by foreign keys": {}, + "Truncate Table": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Truncate bảng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清空表" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清空表" } } } }, - "Truncate table '%@'" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm trống bảng '%@'" + "Truncate table '%@'": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Làm trống bảng '%@'" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清空表 '%@'" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清空表 '%@'" } } } }, - "Trust" : { - - }, - "Try a different search term" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thử từ khoá tìm kiếm khác" + "Trust": {}, + "Try a different search term": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thử từ khoá tìm kiếm khác" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尝试其他搜索词" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尝试其他搜索词" } } } }, - "Try adjusting your search terms\nor date filter." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thử điều chỉnh từ khoá tìm kiếm\nhoặc bộ lọc ngày." + "Try adjusting your search terms\nor date filter.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thử điều chỉnh từ khoá tìm kiếm\nhoặc bộ lọc ngày." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尝试调整搜索词\n或日期筛选。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "尝试调整搜索词\n或日期筛选。" } } } }, - "Try Again" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thử lại" + "Try Again": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thử lại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重试" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重试" } } } }, - "Two-Factor Authentication" : { - - }, - "Type" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểu" + "Two-Factor Authentication": {}, + "Type": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kiểu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "类型" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "类型" } } } }, - "Type shortcut..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập phím tắt..." + "Type shortcut...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Nhập phím tắt..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "输入快捷键..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "输入快捷键..." } } } }, - "Undo" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hoàn tác" + "Undo": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hoàn tác" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "撤销" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "撤销" } } } }, - "Undo Delete" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hoàn tác xóa" + "Undo Delete": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Hoàn tác xóa" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "撤销删除" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "撤销删除" } } } }, - "Uninstall" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gỡ cài đặt" + "Uninstall": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gỡ cài đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "卸载" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "卸载" } } } }, - "Uninstall %@" : { - - }, - "Uninstall Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gỡ cài đặt thất bại" + "Uninstall %@": {}, + "Uninstall Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gỡ cài đặt thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "卸载失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "卸载失败" } } } }, - "Uninstall plugin" : { - - }, - "Uninstall Plugin?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gỡ cài đặt Plugin?" + "Uninstall plugin": {}, + "Uninstall Plugin?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Gỡ cài đặt Plugin?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "卸载插件?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "卸载插件?" } } } }, - "Unique" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Duy nhất" + "Unique": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Duy nhất" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "唯一" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "唯一" } } } }, - "UNIQUE" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "UNIQUE" + "UNIQUE": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "UNIQUE" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "UNIQUE" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "UNIQUE" } } } }, - "Unknown error" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lỗi không xác định" + "Unknown error": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lỗi không xác định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未知错误" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未知错误" } } } }, - "Unknown SSH Host" : { - - }, - "Unlicensed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chưa có giấy phép" + "Unknown SSH Host": {}, + "Unlicensed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chưa có giấy phép" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未授权" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未授权" } } } }, - "Unlimited" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không giới hạn" + "Unlimited": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không giới hạn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无限制" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无限制" } } } }, - "Unset" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bỏ đặt" + "Unset": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bỏ đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "取消设置" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "取消设置" } } } }, - "Unsigned" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không dấu" + "Unsigned": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không dấu" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无符号" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无符号" } } } }, - "Unsupported database scheme: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scheme cơ sở dữ liệu không được hỗ trợ: %@" + "Unsupported database scheme: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Scheme cơ sở dữ liệu không được hỗ trợ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不支持的数据库方案:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不支持的数据库方案:%@" } } } }, - "Unsupported MongoDB method: %@" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phương thức MongoDB không được hỗ trợ: %@" + "Unsupported MongoDB method: %@": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phương thức MongoDB không được hỗ trợ: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不支持的 MongoDB 方法:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不支持的 MongoDB 方法:%@" } } } }, - "Unsupported schema operation: %@" : { - - }, - "Untitled" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không có tiêu đề" + "Unsupported schema operation: %@": {}, + "Untitled": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Không có tiêu đề" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未命名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未命名" } } } }, - "UPDATE Statement(s)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Câu lệnh UPDATE" + "UPDATE Statement(s)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Câu lệnh UPDATE" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "UPDATE 语句" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "UPDATE 语句" } } } }, - "Updated" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã cập nhật" + "Updated": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã cập nhật" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已更新" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已更新" } } } }, - "US Long (12/31/2024 11:59:59 PM)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mỹ dài (12/31/2024 11:59:59 PM)" + "US Long (12/31/2024 11:59:59 PM)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mỹ dài (12/31/2024 11:59:59 PM)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "美式长格式 (12/31/2024 11:59:59 PM)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "美式长格式 (12/31/2024 11:59:59 PM)" } } } }, - "US Short (12/31/2024)" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mỹ ngắn (12/31/2024)" + "US Short (12/31/2024)": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mỹ ngắn (12/31/2024)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "美式短格式 (12/31/2024)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "美式短格式 (12/31/2024)" } } } }, - "Use ~/.pgpass" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sử dụng ~/.pgpass" + "Use ~/.pgpass": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sử dụng ~/.pgpass" } } } }, - "Use Default" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mặc định" + "Use Default": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mặc định" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用默认" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "使用默认" } } } }, - "Use SSL if available" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sử dụng SSL nếu có" + "Use SSL if available": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Sử dụng SSL nếu có" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "可用时使用 SSL" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "可用时使用 SSL" } } } }, - "User" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Người dùng" + "User": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Người dùng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "用户" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用户" } } } }, - "User-installed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Người dùng cài đặt" + "User-installed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Người dùng cài đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "用户安装" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用户安装" } } } }, - "username" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "username" + "username": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "username" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "username" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "username" } } } }, - "Username" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tên người dùng" + "Username": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tên người dùng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "用户名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用户名" } } } }, - "UTC_TIMESTAMP()" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "UTC_TIMESTAMP()" + "UTC_TIMESTAMP()": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "UTC_TIMESTAMP()" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "UTC_TIMESTAMP()" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "UTC_TIMESTAMP()" } } } }, - "v%@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "v%@" + "v%@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "v%@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "v%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "v%@" } } } }, - "v%@ · %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "v%1$@ · %2$@" + "v%@ · %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "v%1$@ · %2$@" } } } }, - "v%@+" : { - - }, - "Validation Failed" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác thực thất bại" + "v%@+": {}, + "Validation Failed": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác thực thất bại" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "验证失败" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "验证失败" } } } }, - "Value" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị" + "Value": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "值" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "值" } } } }, - "Value is required" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giá trị là bắt buộc" + "Value is required": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Giá trị là bắt buộc" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "值为必填项" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "值为必填项" } } } }, - "Verification Code Required" : { - - }, - "Verified" : { - - }, - "Verified by TablePro" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đã xác minh bởi TablePro" + "Verification Code Required": {}, + "Verified": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã xác minh" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已通过 TablePro 验证" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已验证" } } } }, - "Verify certificate and hostname" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác minh chứng chỉ và tên máy chủ" + "Verified by TablePro": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Đã xác minh bởi TablePro" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "验证证书和主机名" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已通过 TablePro 验证" } } } }, - "Verify server certificate" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xác minh chứng chỉ máy chủ" + "Verify certificate and hostname": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác minh chứng chỉ và tên máy chủ" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "验证服务器证书" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "验证证书和主机名" } } } }, - "Version" : { - + "Verify server certificate": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xác minh chứng chỉ máy chủ" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "验证服务器证书" + } + } + } }, - "Version %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phiên bản %@" + "Version": {}, + "Version %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phiên bản %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "版本 %@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "版本 %@" } } } }, - "Version %@ (Build %@)" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Version %1$@ (Build %2$@)" + "Version %@ (Build %@)": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Version %1$@ (Build %2$@)" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phiên bản %1$@ (Bản dựng %2$@)" + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phiên bản %1$@ (Bản dựng %2$@)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "版本 %@(构建 %@)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "版本 %@(构建 %@)" } } } }, - "Version:" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phiên bản:" + "Version:": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Phiên bản:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "版本:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "版本:" } } } }, - "View" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem" + "View": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Xem" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "视图" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "视图" } } } }, - "View: %@" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chế độ xem: %@" + "View: %@": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chế độ xem: %@" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "视图:%@" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "视图:%@" } } } }, - "Vim mode" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chế độ Vim" + "Vim mode": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chế độ Vim" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vim 模式" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Vim 模式" } } } }, - "WARNING: Failed to re-enable foreign key checks: %@. Please manually verify FK constraints are enabled." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "CẢNH BÁO: Bật lại kiểm tra khóa ngoại thất bại: %@. Vui lòng kiểm tra thủ công rằng ràng buộc FK đã được bật." + "WARNING: Failed to re-enable foreign key checks: %@. Please manually verify FK constraints are enabled.": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "CẢNH BÁO: Bật lại kiểm tra khóa ngoại thất bại: %@. Vui lòng kiểm tra thủ công rằng ràng buộc FK đã được bật." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "警告:重新启用外键检查失败:%@。请手动验证外键约束已启用。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "警告:重新启用外键检查失败:%@。请手动验证外键约束已启用。" } } } }, - "WARNING: The host key for '%@' has changed!\n\nThis could mean someone is doing something malicious, or the server was reinstalled.\n\nPrevious fingerprint: %@\nCurrent fingerprint: %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "WARNING: The host key for '%1$@' has changed!\n\nThis could mean someone is doing something malicious, or the server was reinstalled.\n\nPrevious fingerprint: %2$@\nCurrent fingerprint: %3$@" + "WARNING: The host key for '%@' has changed!\n\nThis could mean someone is doing something malicious, or the server was reinstalled.\n\nPrevious fingerprint: %@\nCurrent fingerprint: %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "WARNING: The host key for '%1$@' has changed!\n\nThis could mean someone is doing something malicious, or the server was reinstalled.\n\nPrevious fingerprint: %2$@\nCurrent fingerprint: %3$@" } } } }, - "Website" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trang web" + "Website": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Trang web" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "网站" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "网站" } } } }, - "Welcome to TablePro" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chào mừng đến với TablePro" + "Welcome to TablePro": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Chào mừng đến với TablePro" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "欢迎使用 TablePro" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "欢迎使用 TablePro" } } } }, - "What you can do" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn có thể làm gì" + "What you can do": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn có thể làm gì" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您可以做什么" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "您可以做什么" } } } }, - "When enabled, clicking a new table replaces the current clean table tab instead of opening a new tab" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi bật, nhấp vào bảng mới sẽ thay thế tab bảng trống hiện tại thay vì mở tab mới" + "When enabled, clicking a new table replaces the current clean table tab instead of opening a new tab": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khi bật, nhấp vào bảng mới sẽ thay thế tab bảng trống hiện tại thay vì mở tab mới" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用后,点击新表将替换当前空白表标签页,而不是打开新标签页" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "启用后,点击新表将替换当前空白表标签页,而不是打开新标签页" } } } }, - "When enabled, clicking a table in the sidebar will replace the current tab if it has no unsaved changes and you haven't interacted with it (sorted, filtered, etc.)." : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi bật, nhấp vào bảng trong thanh bên sẽ thay thế tab hiện tại nếu không có thay đổi chưa lưu và bạn chưa tương tác với nó (sắp xếp, lọc, v.v.)." + "When enabled, clicking a table in the sidebar will replace the current tab if it has no unsaved changes and you haven't interacted with it (sorted, filtered, etc.).": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khi bật, nhấp vào bảng trong thanh bên sẽ thay thế tab hiện tại nếu không có thay đổi chưa lưu và bạn chưa tương tác với nó (sắp xếp, lọc, v.v.)." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用后,点击侧边栏中的表将替换当前标签页(如果没有未保存的更改且您未与之交互过,如排序、筛选等)。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "启用后,点击侧边栏中的表将替换当前标签页(如果没有未保存的更改且您未与之交互过,如排序、筛选等)。" } } } }, - "When TablePro starts:" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi TablePro khởi động:" + "When TablePro starts:": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Khi TablePro khởi động:" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "TablePro 启动时:" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "TablePro 启动时:" } } } }, - "WHERE clause..." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mệnh đề WHERE..." + "WHERE clause...": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Mệnh đề WHERE..." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "WHERE 子句..." + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "WHERE 子句..." } } } }, - "With Headers" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kèm tiêu đề" + "With Headers": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Kèm tiêu đề" } } } }, - "Word wrap" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tự động xuống dòng" + "Word wrap": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Tự động xuống dòng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自动换行" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "自动换行" } } } }, - "Wrap in transaction (BEGIN/COMMIT)" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bọc trong giao dịch (BEGIN/COMMIT)" + "Wrap in transaction (BEGIN/COMMIT)": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bọc trong giao dịch (BEGIN/COMMIT)" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "包裹在事务中 (BEGIN/COMMIT)" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "包裹在事务中 (BEGIN/COMMIT)" } } } }, - "Write Concern" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Write Concern" + "Write Concern": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Write Concern" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Write Concern" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Write Concern" } } } }, - "Yellow" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vàng" + "Yellow": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Vàng" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "黄色" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "黄色" } } } }, - "You" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn" + "You": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "你" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "你" } } } }, - "You can re-enable this in Settings" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn có thể bật lại trong Cài đặt" + "You can re-enable this in Settings": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn có thể bật lại trong Cài đặt" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您可以在设置中重新启用" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "您可以在设置中重新启用" } } } }, - "You have unsaved changes to the table structure. Refreshing will discard these changes." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn có thay đổi chưa lưu trong cấu trúc bảng. Làm mới sẽ hủy các thay đổi này." + "You have unsaved changes to the table structure. Refreshing will discard these changes.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn có thay đổi chưa lưu trong cấu trúc bảng. Làm mới sẽ hủy các thay đổi này." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您有未保存的表结构更改。刷新将丢弃这些更改。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "您有未保存的表结构更改。刷新将丢弃这些更改。" } } } }, - "You will be prompted for a verification code each time you connect." : { - - }, - "You're all set!" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn đã sẵn sàng!" + "You will be prompted for a verification code each time you connect.": {}, + "You're all set!": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Bạn đã sẵn sàng!" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "一切就绪!" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "一切就绪!" } } } }, - "Your changes will be lost if you don't save them." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thay đổi của bạn sẽ bị mất nếu không lưu." + "Your changes will be lost if you don't save them.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Thay đổi của bạn sẽ bị mất nếu không lưu." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "如果不保存,您的更改将会丢失。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "如果不保存,您的更改将会丢失。" } } } }, - "Your database schema and query data will be sent to the AI provider for analysis. Allow for this connection?" : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lược đồ cơ sở dữ liệu và dữ liệu truy vấn sẽ được gửi đến nhà cung cấp AI để phân tích. Cho phép kết nối này?" + "Your database schema and query data will be sent to the AI provider for analysis. Allow for this connection?": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Lược đồ cơ sở dữ liệu và dữ liệu truy vấn sẽ được gửi đến nhà cung cấp AI để phân tích. Cho phép kết nối này?" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您的数据库结构和查询数据将被发送给 AI 提供商进行分析。是否允许此连接?" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "您的数据库结构和查询数据将被发送给 AI 提供商进行分析。是否允许此连接?" } } } }, - "Your executed queries will\nappear here for quick access." : { - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Các truy vấn đã thực thi sẽ\nxuất hiện ở đây để truy cập nhanh." + "Your executed queries will\nappear here for quick access.": { + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Các truy vấn đã thực thi sẽ\nxuất hiện ở đây để truy cập nhanh." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已执行的查询将\n显示在此处以便快速访问。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已执行的查询将\n显示在此处以便快速访问。" } } } }, - "Zero Fill" : { - "extractionState" : "stale", - "localizations" : { - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Điền số 0" + "Zero Fill": { + "extractionState": "stale", + "localizations": { + "vi": { + "stringUnit": { + "state": "translated", + "value": "Điền số 0" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "零填充" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "零填充" } } } } }, - "version" : "1.0" -} \ No newline at end of file + "version": "1.0" +} diff --git a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift index 90e26179..d319b228 100644 --- a/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift +++ b/TablePro/Views/Settings/Plugins/BrowsePluginsView.swift @@ -3,7 +3,6 @@ // TablePro // -import AppKit import SwiftUI struct BrowsePluginsView: View { @@ -112,7 +111,7 @@ struct BrowsePluginsView: View { @ViewBuilder private func browseRow(_ plugin: RegistryPlugin) -> some View { HStack(spacing: 8) { - pluginIcon(plugin.iconName ?? "puzzlepiece") + PluginIconView(name: plugin.iconName ?? "puzzlepiece") .font(.title3) .frame(width: 24, height: 24) .foregroundStyle(.secondary) @@ -213,18 +212,6 @@ struct BrowsePluginsView: View { } } - // MARK: - Plugin Icon - - @ViewBuilder - private func pluginIcon(_ name: String) -> some View { - if NSImage(systemSymbolName: name, accessibilityDescription: nil) != nil { - Image(systemName: name) - } else { - Image(name) - .renderingMode(.template) - } - } - // MARK: - Helpers private func isPluginInstalled(_ pluginId: String) -> Bool { diff --git a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift index 0955ac33..b40de9d3 100644 --- a/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift +++ b/TablePro/Views/Settings/Plugins/InstalledPluginsView.swift @@ -124,7 +124,7 @@ struct InstalledPluginsView: View { .frame(width: 24, height: 20) } .buttonStyle(.borderless) - .disabled(selectedPluginId == nil || selectedPlugin?.source == .builtIn) + .disabled(selectedPlugin == nil || selectedPlugin?.source == .builtIn) .accessibilityLabel( selectedPlugin.map { String(localized: "Uninstall \($0.name)") } ?? String(localized: "Uninstall plugin") @@ -146,7 +146,7 @@ struct InstalledPluginsView: View { @ViewBuilder private func pluginRow(_ plugin: PluginEntry) -> some View { HStack(spacing: 8) { - pluginIcon(plugin.iconName) + PluginIconView(name: plugin.iconName) .font(.title3) .frame(width: 24, height: 24) .foregroundStyle(plugin.isEnabled ? .secondary : .tertiary) @@ -176,16 +176,6 @@ struct InstalledPluginsView: View { .padding(.vertical, 2) } - @ViewBuilder - private func pluginIcon(_ name: String) -> some View { - if NSImage(systemSymbolName: name, accessibilityDescription: nil) != nil { - Image(systemName: name) - } else { - Image(name) - .renderingMode(.template) - } - } - // MARK: - Detail Pane private var selectedPlugin: PluginEntry? { @@ -209,6 +199,7 @@ struct InstalledPluginsView: View { .toggleStyle(.switch) .labelsHidden() .controlSize(.small) + .accessibilityLabel(String(localized: "Enable \(selected.name)")) } Text("v\(selected.version) · \(selected.source == .builtIn ? String(localized: "Built-in") : String(localized: "User-installed"))") diff --git a/TablePro/Views/Settings/Plugins/PluginIconView.swift b/TablePro/Views/Settings/Plugins/PluginIconView.swift new file mode 100644 index 00000000..56cf9182 --- /dev/null +++ b/TablePro/Views/Settings/Plugins/PluginIconView.swift @@ -0,0 +1,19 @@ +// +// PluginIconView.swift +// TablePro + +import AppKit +import SwiftUI + +struct PluginIconView: View { + let name: String + + var body: some View { + if NSImage(systemSymbolName: name, accessibilityDescription: nil) != nil { + Image(systemName: name) + } else { + Image(name) + .renderingMode(.template) + } + } +}