"action.addPosition" = "Add Position";
"action.back" = "Back";
"action.backHelp" = "Back (Esc)";
"action.cancel" = "Cancel";
"action.clearPosition" = "Remove Position";
"action.copyAsImage" = "Copy as Image";
"action.copyAsText" = "Copy as Text";
"action.delete" = "Delete";
"action.done" = "Done";
"action.editPosition" = "Edit Position";
"action.more" = "More";
"action.openGitHub" = "GitHub Project";
"action.openWebsite" = "Official Website";
"action.pinWindow" = "Pin as Window";
"action.unpinWindow" = "Unpin Window";
"action.pinToMenuBar" = "Show in Menu Bar";
"action.quitPulse" = "Quit Pulse";
"action.refreshNow" = "Refresh";
"action.retry" = "Retry";
"action.save" = "Save";
"action.saveHelp" = "Save (Return)";
"action.share" = "Share";

"diagnostics.copy" = "Copy Diagnostic Log";

"assetType.fund" = "Fund";
"assetType.index" = "Index";
"assetType.crypto" = "Crypto";

"chart.close" = "Close";
"chart.high" = "High";
"chart.low" = "Low";
"chart.noData" = "No data";
"chart.noPeriodData" = "No %@ data is available for this symbol.";
"chart.open" = "Open";
"chart.volume" = "Volume";

"detail.period" = "Period";
"detail.section.about" = "About";
"detail.section.market" = "Market Data";
"detail.section.position" = "Position";
"detail.section.trend" = "Chart";

"duration.seconds" = "%d sec";

"empty.watchlist" = "Search for a symbol to get started";

"error.client" = "This data source couldn’t complete the request: %@";
"error.network" = "Can’t connect to the data source: %@";
"error.rateLimited" = "Too many requests. Try again in about a minute.";
"error.symbolNotFound" = "Symbol not found";
"error.unsupported" = "No enabled data source supports this request.";

"language.system" = "System Default";

"index.sp500" = "S&P 500 Index";
"index.nasdaqComposite" = "Nasdaq Composite";
"index.dowJonesIndustrial" = "Dow Jones Industrial Average";
"index.nasdaq100" = "Nasdaq 100 Index";
"index.vix" = "CBOE Volatility Index";
"index.russell1000" = "Russell 1000 Index";
"index.russell2000" = "Russell 2000 Index";
"index.hangSeng" = "Hang Seng Index";
"index.hangSengTech" = "Hang Seng TECH Index";
"index.shanghaiComposite" = "Shanghai Composite";
"index.shenzhenComponent" = "Shenzhen Component Index";
"index.chiNext" = "ChiNext Index";

"market.hk" = "HK";
"market.crypto" = "Crypto";
"market.sh" = "SH";
"market.sz" = "SZ";
"market.timeZone.cn" = "Shanghai";
"market.timeZone.hk" = "Hong Kong";
"market.timeZone.us" = "New York";
"market.timeZone.utc" = "UTC";
"market.us" = "US";

"marketState.overnight" = "Overnight";
"marketState.postMarket" = "Post";
"marketState.preMarket" = "Pre";

"menuBarMode.compact" = "Compact (Icon Only)";
"menuBarMode.rotate" = "Cycle Symbols";
"menuBarMode.single" = "Single Symbol";

"metric.changePercent" = "Change %";
"metric.todayPnL" = "Day P&L";
"metric.totalPnL" = "Total P&L";

"position.indexLegacyNotice" = "This index contains legacy position data. Indices aren’t directly tradable; once removed, it can’t be added again.";

"number.compact.hundredMillion" = "%@B";
"number.compact.billion" = "%@B";
"number.compact.million" = "%@M";
"number.compact.thousand" = "%@K";
"number.compact.tenThousand" = "%@K";

"period.day" = "Daily";
"period.hour1" = "1 Hour";
"period.minute1" = "Intraday";
"period.minute15" = "15 Min";
"period.minute30" = "30 Min";
"period.minute5" = "5 Min";
"period.month" = "Monthly";
"period.week" = "Weekly";

"position.closed" = "Closed";
"profile.loadFailed" = "Couldn’t load the description";
"profile.unavailable" = "No description available";
"position.cost" = "Avg. Cost";
"position.costPrice" = "Average Cost";
"position.editTitle" = "Edit Position";
"position.marketValue" = "Market Value";
"position.notSet" = "No position added";
"position.quantity" = "Quantity";
"position.waitingQuote" = "Waiting for market data…";

"provider.capability.candles" = "Charts";
"provider.capability.profile" = "Profiles";
"provider.capability.quotes" = "Quotes";
"provider.capability.search" = "Search";
"provider.capability.streaming" = "Streaming";
"provider.summary.separator" = ", ";
"provider.enable" = "Enable this source";
"provider.refresh.interval" = "Poll interval";
"provider.refresh.title" = "Refresh";
"provider.refresh.push" = "Real-time push";
"provider.status.on" = "On";
"provider.status.off" = "Off";
"provider.status.connected" = "Connected";
"provider.status.notConnected" = "Not connected";
"provider.status.authorized" = "Authorized";
"provider.status.connecting" = "Connecting…";
"provider.status.reconnecting" = "Reconnecting…";
"provider.status.fallback" = "Fallback";
"provider.detail.capabilities" = "Capabilities";
"provider.binance" = "Binance";
"provider.composite" = "Pulse Composite";
"provider.delay.delayed" = "Delayed";
"provider.delay.partial" = "Partially real-time";
"provider.delay.realtime" = "Real-time";
"provider.delay.session" = "Depends on session entitlement";
"provider.longbridge" = "Longbridge";
"longbridge.setup.manualToggle" = "Or enter API keys manually";
"longbridge.setup.intro" = "Quotes use the market-data entitlement granted to this OpenAPI session.";
"longbridge.disconnect" = "Disconnect";
"longbridge.oauth.connect" = "Connect via Browser";
"longbridge.oauth.refresh" = "Refresh Longbridge Authorization";
"longbridge.oauth.waiting" = "Waiting for authorization…";
"longbridge.oauth.error" = "Authorization failed or timed out — try again";
"longbridge.oauth.reauthorize" = "Re-authorize Longbridge";
"longbridge.client.label" = "Authorized client ID";
"longbridge.access.delayed" = "Longbridge returned delayed access for this session. Your account entitlement may still be active; refresh authorization to renegotiate this app’s quote packages.";
"longbridge.access.downgraded" = "Longbridge returned lower access than the real-time package this app previously negotiated. Refresh authorization; Pulse will never sign you out automatically.";
"longbridge.account" = "Account";
"longbridge.credentials.manual" = "Enter API keys manually";
"longbridge.status.oauth" = "Connected (browser auth)";
"longbridge.status.apiKey" = "Configured (API keys)";
"longbridge.connection.title" = "Market data";
"longbridge.connection.waiting" = "Ready";
"longbridge.connection.connecting" = "Connecting…";
"longbridge.connection.reconnecting" = "Reconnecting…";
"longbridge.connection.connected" = "Market data connected";
"longbridge.connection.fallback" = "Using fallback";
"longbridge.connection.retry" = "Reconnect Market Data";
"longbridge.connection.fallback.help" = "Longbridge is unavailable. Pulse is temporarily using a fallback market-data source.";
"longbridge.connection.error.limit" = "Longbridge rejected the connection because the account's live-connection limit is full. Close other OpenAPI sessions, then reconnect.";
"longbridge.connection.error.authentication" = "Longbridge rejected the market-data session — the authorization may have expired or been revoked. Re-authorize below; Pulse never signs you out automatically.";
"longbridge.connection.error.rateLimit" = "Longbridge is rate-limiting connection attempts. Wait briefly, then reconnect.";
"longbridge.connection.error.network" = "The Longbridge market-data connection was interrupted. Pulse is temporarily using a fallback source.";
"longbridge.connection.error.server" = "Longbridge returned a server error. Pulse is temporarily using a fallback source.";
"longbridge.credentials.title" = "OpenAPI Credentials";
"longbridge.credentials.status.configured" = "Configured";
"longbridge.credentials.status.missing" = "Not configured";
"longbridge.credentials.save" = "Save & Verify";
"longbridge.credentials.validating" = "Verifying…";
"longbridge.credentials.clear" = "Clear Credentials";
"longbridge.credentials.error" = "Verification failed: check the credentials and whether the access token has expired";
"longbridge.credentials.help" = "Get the App Key, App Secret and Access Token from the open.longbridge.com user center. Credentials are stored only in the local Keychain.";
"provider.tencent" = "Tencent Finance";
"provider.yahoo" = "Yahoo Finance";

"quote.delay.minutes" = "Delayed ~%d min";
"quote.price.close" = "Close";
"quote.regularClose.previous" = "Prev Close";
"quote.regularClose.today" = "At Close";
"quote.price.current" = "Price";
"quote.price.overnight" = "Overnight";
"quote.price.postMarket" = "Post-market";
"quote.price.preMarket" = "Pre-market";
"quote.realtime" = "Real-time";
"quote.timing.market" = "%@";

"refresh.updatedAt" = "Updated %@";

"search.failed" = "Search failed";
"search.addToGroup" = "Add to “%@”";
"search.inGroup" = "Already in “%@”";
"search.noResults" = "No symbols found";
"action.search" = "Search Symbols";
"search.hot.title" = "Popular Symbols";
"search.viewDetail" = "View %@ quote";
"search.recent.title" = "Recent Searches";
"search.recent.clear" = "Clear";
"search.placeholder" = "Search symbols or companies";

"share.watchlist.title" = "My Watchlist";
"share.image.copyFailed" = "Couldn’t copy image";
"share.image.copySuccess" = "Image copied";
"share.range.intraday" = "Day Range";
"share.updateUnavailable" = "Waiting for quote data";
"share.text.copyFailed" = "Couldn’t copy text";
"share.text.copySuccess" = "Text copied";

"settings.general.language" = "Language";
"settings.general.launchAtLogin" = "Launch at Login";
"settings.general.anonymousAnalytics" = "Share Anonymous Usage Data";
"settings.general.anonymousAnalyticsHelp" = "Helps improve Pulse by sharing app usage and technical metadata. Symbols, watchlists, positions, searches, and credentials are never sent.";
"settings.market.colorRule" = "Gain Color";
"settings.market.greenUp" = "Green for Gains";
"settings.market.redUp" = "Red for Gains";
"settings.market.usExtendedHours" = "US Pre/Post-Market on Intraday Charts";
"settings.market.prioritizeOpenMarkets" = "Order by Market Hours";
"settings.market.prioritizeOpenMarketsHelp" = "Groups the list by market. 8:00–17:00 Beijing time runs HK → China A → US; 17:00–8:00 runs US → HK → China A. Pins stay within their market; crypto always stays last.";
"settings.menuBar.displayMode" = "Display Mode";
"settings.menuBar.firstWatchlistItem" = "First in Watchlist";
"settings.menuBar.fixedSymbol" = "Symbol";
"settings.menuBar.iconOnlyHelp" = "Only the Pulse icon appears in the menu bar.";
"settings.menuBar.rotateInterval" = "Switch Every";
"settings.menuBar.rotateGroup" = "Cycle List";
"settings.menuBar.showQuote" = "Show Prices in Menu Bar";
"settings.providers.allDisabled" = "All data sources are disabled. Quotes and search will be unavailable.";
"settings.providers.help" = "Pulse automatically chooses the best available source and switches if one fails.";
"settings.section.general" = "General";
"settings.section.market" = "Market";
"settings.section.menuBar" = "Menu Bar";
"settings.section.providers" = "Data Sources";
"settings.section.updates" = "Software Update";
"settings.title" = "Settings";
"settings.updates.check" = "Check for Updates";
"settings.updates.currentVersion" = "Current Version";

"sort.changePercent" = "Change %";
"sort.marketValue" = "Market Value";
"sort.todayPnL" = "Day P&L";
"sort.totalPnL" = "Total P&L";

"stat.high" = "High";
"stat.low" = "Low";
"stat.open" = "Open";
"stat.previousClose" = "Prev Close";
"stat.amplitude" = "Range %";
"stat.volume" = "Volume";

"status.loading" = "Loading…";
"status.healthy" = "Quotes healthy";
"status.streaming" = "Streaming live";
"status.providerFallback" = "Switching data source…";
"status.reorderHint" = "Drag any row to reorder";

"watchlist.menu.display" = "Display Metric";
"watchlist.menu.sort" = "Sort By";
"watchlist.sort.adjust" = "Adjust Order";
"watchlist.sort.adjustActive" = "Adjusting Order";
"watchlist.sort.manual" = "Custom Order";
"watchlist.sort.pinToTop" = "Pin to Top";
"watchlist.sort.pinned" = "Pinned";
"watchlist.defaultName" = "Watchlist";
"watchlist.group.delete" = "Delete List";
"watchlist.group.deleteMessage" = "Symbols that are only in this list will move to another list. Positions will not be deleted.";
"watchlist.group.deleteTitle" = "Delete “%@”?";
"watchlist.group.membership" = "Lists";
"watchlist.group.removeCurrent" = "Remove from “%@”";
"watchlist.group.nameError" = "Enter a unique list name.";
"watchlist.group.namePlaceholder" = "List Name";
"watchlist.group.new" = "New List";
"watchlist.group.rename" = "Rename List";

"watchRow.dragHelp" = "Drag to reorder";
"watchRow.metricHelp" = "Click to cycle through Change %, Day P&L, and Total P&L";

/* Position transactions */
"trade.buy" = "Buy";
"trade.sell" = "Sell";
"trade.recordBuy" = "Record a Buy";
"trade.recordSell" = "Record a Sell";
"trade.confirmBuy" = "Confirm Buy";
"trade.confirmBuyHelp" = "Confirm Buy (Return)";
"trade.confirmSell" = "Confirm Sell";
"trade.confirmSellHelp" = "Confirm Sell (Return)";
"trade.price" = "Price";
"trade.date" = "Date";
"trade.dateToday" = "Today";
"trade.priceHintCurrent" = "Prefilled with live price";
"trade.availableToSell" = "Available: %@";
"trade.amount" = "Trade Amount";
"trade.realizedPnL" = "Realized P&L (this trade)";
"trade.resultingPosition" = "Position After Trade";
"trade.newAverageCost" = "New Avg. Cost";
"position.realizedPnL" = "Realized P&L";
"position.totalInvested" = "Total Invested";
"position.recentTransactions" = "Recent Trades";
"position.noTransactions" = "No trades recorded yet";
"position.quickEdit" = "Set Position Directly…";
"position.quickEditTitle" = "Set Position Directly";
"position.calibrationNotice" = "Saving overwrites your position with this quantity and cost, recorded as an “adjustment” — no realized P&L.";
"position.empty.title" = "No Position Yet";
"position.empty.subtitle" = "Record buys and sells — Pulse tracks cost and P&L for you";
"position.historyTrades" = "Past Trades";
"position.tradeCount" = "%d trades";
"transaction.logTitle" = "Trade Log";
"transaction.kind.buy" = "BUY";
"transaction.kind.sell" = "SELL";
"transaction.kind.adjustment" = "ADJ";
"transaction.overwrite" = "Overwrite";
"transaction.deleteConfirmTitle" = "Delete this trade?";
"transaction.deleteConfirmMessage" = "%@ %@ %@ @ %@ will be deleted; your position and P&L will be recalculated. This cannot be undone.";
"trade.dateYesterday" = "Yesterday";

"settings.section.data" = "Data";
"data.export" = "Export to Clipboard";
"data.export.done" = "Copied %d lists and %d symbols — paste it somewhere safe";
"data.import" = "Import from Clipboard";
"data.example" = "Copy Example Format";
"data.example.done" = "Example copied — edit it, copy it back, then import";
"data.example.list.stocks" = "Stocks";
"data.example.list.crypto" = "Crypto";
"data.help" = "Watchlists travel as JSON text: a list of named lists, each entry a market (us, hk, sh, sz, crypto) and a code such as NVDA, 700, or BTC/USDT. Names and trades are optional. Importing only adds what is missing.";
"data.import.confirm" = "Import";
"data.import.newList" = "new list";
"data.import.willAdd" = "Will add %d symbols and %d lists";
"data.import.someUnreadable" = "%d entries can’t be read and will be skipped";
"data.import.unchanged" = "Everything here is already in Pulse";
"data.import.done" = "Added %d symbols and %d lists";
"data.import.status.add" = "add";
"data.import.status.present" = "already here";
"data.import.status.position" = "restores trades";
"data.import.status.unknownMarket" = "unknown market";
"data.import.status.unreadable" = "can’t read";
"data.error.emptyClipboard" = "The clipboard is empty. Copy an export first, or start from the example.";
"data.error.notArchive" = "The clipboard doesn’t hold a Pulse export. Copy the example format to see what one looks like.";
"data.error.newerVersion" = "That export came from a newer version of Pulse. Update and try again.";
"data.error.noLists" = "That export has no lists in it.";
"settings.data.row" = "Import & Export";
"data.export.subtitle" = "Copy every list, order, pin, and trade as text";
"data.import.subtitle" = "Read a Pulse export and review it before it lands";
"data.format.title" = "Format";
"data.format.help" = "market is us, hk, sh, sz, or crypto; code is a ticker such as NVDA or 700, or a pair such as BTC/USDT. name, pinned, and transactions are optional.";
"data.import.status.missingCode" = "no code";
