Files
LanMountainDesktop/LanMountainDesktop.Launcher/Resources/Strings.en-US.resx

231 lines
24 KiB
Plaintext
Raw Normal View History

合并对设置系统的更新 (#11) * Add Windows system chrome patchers (Harmony) Introduce support for toggling the system chrome on Windows using Harmony patchers. Adds Lib.Harmony.Thin to package props and project, new patcher infrastructure (ChromePatchState, PatcherEntrance) and two Harmony patches that disable FluentAvalonia's Windows chrome when configured. Program.cs now loads the chrome setting and installs patchers conditionally on Windows/x86-x64. Settings viewmodel and view updated: expose IsWindowsOs, require restart on appearance changes, migrate SettingsWindow to FAAppWindow and adapt titlebar/layout (include Windows caption placeholder and footer menu items). Also add a .gitkeep and a build log file. * Refactor settings window UI and theming Improve theming and layout for the Settings window and related services. - MaterialSurfaceService: add special material parameters for SettingsWindowBackground (lower alpha, no blur) and avoid hot-switching real backdrops for non-settings windows. - GlassEffectService: add AdaptiveSettingsWindowTintBrush + ResolveSettingsWindowTintAlpha to provide optional content tinting tied to system material mode. - SettingsWindowService: refactor theme application into ApplyThemeVariantAndResources, ensure settings window material is applied at show/activate times, and tidy theme/resource application flow. - SettingsWindow.axaml / .axaml.cs: restructure title bar (separate Grid.Row=0 border) and FANavigationView host, add pane-footer toggle button for :minimal layout, use dynamic corner radius resource, and update toggle/visibility/icon logic and responsive layout code. - SettingsPages: remove some IconText usages and adjust margins; use DesignCornerRadiusLg for update card corner radius. - Add NuGet.Config to set local globalPackagesFolder and ignore .nuget/packages in .gitignore. These changes aim to improve visuals, avoid backdrop overdraw, and make the settings window behavior consistent across themes and layouts. * Add localization and localize settings pages Add many new localization keys (en-US and zh-CN) for notifications, developer tools, about page, status bar, and video wallpaper. Update Notification, Dev, About and StatusBar view models to use LocalizationService, expose localized ObservableProperties, and refresh localized text at construction. Localize selection options and test notification texts, and fix notification severity handling. Wire up XAML to the new localized properties (About/Dev/StatusBar pages) and update the settings page title for notifications. Also adjust copyright line generation and replace hardcoded placeholders with bound Watermark properties. * Redesign settings window with fluent shell & search Rebuild the settings window as a Fluent shell: adds a custom 48-DIP titlebar with Back, pane toggle, icon/title, search box, restart/more menu, and caption-button spacer; moves compact pane toggle into the titlebar and preserves FANavigationView as the primary navigation surface. Introduces a SettingsSearchService (with UI AutoComplete integration, search indexing, navigation-by-result, and search result highlighting) plus focused tests for search filtering and theme material normalization. Adds navigation history/back stack, updates SettingsViewModels for new bindings and localization keys, and updates General/Apearance pages to expose new strings and options. Implements an "auto" system material mode: default in AppSettingsSnapshot, new MaterialAuto constants and normalization/resolution logic in ThemeAppearanceValues, WindowMaterialService and MaterialSurfaceService adjustments to prefer Mica on Win11 and Acrylic on Win10 using TransparencyLevelHint. GlassEffectService and AppearanceThemeService updated to use effective material mode and to track live theme state changes. Adds localization entries (en-US, zh-CN), spec/tasks docs, and other UI/style tweaks to support the redesign. * fix.修折叠与展开按钮 * Add OOBE startup presentation and settings merge Introduce a new OOBE step for "Startup & Presentation" that exposes startup and UI preferences in OobeWindow (toggles for taskbar, slide/fade transitions, fused popup, and autostart). Add HostAppSettingsOobeMerger to read/write Host settings.json (PascalCase fields) and MergeStartupPresentation behavior, plus LauncherWindowsStartupService to sync the current Launcher into the Windows Run key on Windows. Wire UI handlers, persist choices on Next, and load defaults when entering the step. Include unit tests for the merger, adjust SettingsWindow navigation pane/toggle handling, and update docs/LAUNCHER.md to describe the new OOBE step and implementation files. * Move whiteboard persistence to file storage Switch whiteboard note storage from legacy DB rows to per-note JSON files and add migration support. Update WhiteboardNoteSnapshot schema (version bump, viewport, canvas, expires, PathSvgData) and change IWhiteboardNotePersistenceService.SaveNote to return bool to surface write failures (e.g. read-only files). Implement file-based WhiteboardNotePersistenceService with legacy DB migration/cleanup, retention handling, and logging. Add comprehensive unit tests for persistence, stroke path builder, SVG import and viewport helper. Also add ThirdParty/DotNetCampus.InkCanvas project and reference it in the main csproj, and bump PostHog package to 2.6.0. * Introduce render gate and chart caching Replace UI DispatcherTimer polling with a StudySnapshotRenderGate across multiple widgets to queue and apply only the latest analytics snapshot; components updated include StudyDeductionReasonsWidget, StudyEnvironmentWidget, StudyInterruptDensityWidget, StudyNoiseCurveWidget. Add StudySnapshotRenderGate implementation to coordinate rendering and monitoring leases and update subscription/lease lifecycle handling (subscribe/unsubscribe, Acquire/Dispose leases, Clear/Dispose gate). Rewrite chart controls (StudyNoiseCurveChartControl and StudyNoiseDistributionScatterChartControl) to use stable logical-time origins, split series into static vs dynamic tails, add geometry/sample caching, stable jitter/coordinate mapping helpers, and expose internal helpers & counts for testing. Add unit tests (StudyComponentRenderingTests) covering the render gate and chart behaviors (layer counts, logical X mapping, stable jitter, cache rebuild). These changes improve rendering correctness and performance by avoiding redundant renders and enabling deterministic chart layout. * Use MaterialColorSnapshot in appearance flow Introduce unified material/color spec and tests, and refactor appearance plumbing to use MaterialColorSnapshot as the single source of truth. Add .trae material-color-service spec/checklist/tasks and integration/unit tests for plugin mapping and appearance VM behavior. AppearanceChangedEvent extended with new appearance change flags and HasChanged logic. ComponentEditorMaterialThemeAdapter rewritten to accept MaterialColorSnapshot and derive palette from snapshot data. Simplify AppearanceSettingsPageViewModel and related view code: remove legacy preview/custom-seed UI logic, preserve material/color fields when updating theme or corner radius, and update save calls to use with-expressions. Update ComponentEditorWindow to use adapter-provided OnPrimary brush and minor docs updates. * Add material color services, plugin DTOs, and tests Introduce IPC wire-format appearance DTOs (PluginIsolation.Contracts) and clarify they are distinct from the runtime PluginSdk snapshot. Update PluginSdk comments to document the runtime-facing snapshot shape. Change ComponentColorSchemeHelper to use the HostMaterialColorProvider and add an overload that accepts a MaterialColorSnapshot. Add new services and pipelines (MaterialColorService, MaterialSurfaceService, WindowMaterialService, WallpaperColorPipeline) and refactor AppearanceThemeService to depend on MaterialColorService while removing legacy internal implementations. Add multiple unit tests (ComponentColorSchemeHelper, PluginAppearanceBoundary, SettingsCatalogService, WallpaperSettingsPageViewModel) and update localization resources with new material_color and wallpaper keys. * Add CODE_WIKI and update localization Add a comprehensive CODE_WIKI.md documenting project architecture, modules, startup flow, plugin system, testing and developer workflows. Update localization resources (en-US.json, zh-CN.json) with new/translated keys for wallpaper controls (custom color UI), material & color settings (semantic roles, surfaces, refresh/polling state), appearance (corner radius), status bar font size options, privacy policy text, component library labels, clock settings, and new language entry (Korean). Also modify settings-related ViewModels and Settings page views to surface these new features and texts (MaterialColorSettingsPageViewModel.cs, SettingsViewModels.cs, WallpaperSettingsPageViewModel.cs, MainWindow.SettingsHardCut.Stubs.cs, ComponentsSettingsPage.axaml, WallpaperSettingsPage.axaml). * Add Data settings page and storage scanner Introduce a new "Data" settings page to visualize and manage local app storage. Adds DataStorageService (scanning, disk info, clean operations), DataSettingsPageViewModel, XAML view and code-behind, and HexToColor/HexToBrush converters; registers converters in App.axaml. Also update localization strings for the new page and add icon mapping so the settings entry uses the Database icon. Enables per-category and global cleaning workflows and formatted size display. * Add IPC backoff/retries and safer disposal Introduce exponential backoff, jitter and retry logic across IPC components to improve robustness and avoid tight retry loops; make disposal idempotent and add connection guards. Key changes: - LauncherCoordinatorIpcServer / LauncherIpcServer: add backoff constants, ComputeBackoff(), consecutive error tracking and delayed retries with jitter. - LanMountainDesktopIpcClient / LauncherIpcClient: add connect retry loops, timeouts, delayed retries, improved error logging, and use ArrayPool for buffered async writes; ensure proper cleanup on failures. - PublicIpcHostService: add disposed flag, guard OnPeerConnected and Dispose, and clear connected peers on dispose. - Add many auto-generated commit analysis docs under docs/auto_commit_md and new scripts for analyzing/generating commit docs. These changes aim to make IPC connection handling more resilient and resource-safe. * Add preview controls and settings UI tweaks Introduce GridPreviewControl and CornerRadiusPreviewControl for visual previews and wire them into the Components settings (add ScreenAspectRatio, CornerRadiusPreviewValue, and screen aspect init). Refactor ComponentsSettingsPage UI to show live previews. Improve DataSettingsPage layout and storage bar logic (use item percentages directly, include remaining segment, adjust visuals and visibility triggers). Simplify LauncherSettingsPage header/appearance layout. Add SECURITY_AUDIT_REPORT.md, analysis summary, mockup HTML, and a local .claude settings file. * Add install checkpoint/resume and DDSS workflows Introduce install checkpoint support and resume logic for updates, plus related locking and validation. Adds InstallCheckpoint model, AppJsonContext serialization, and UpdatePaths helpers for deployment lock, apply-in-progress lock and install-checkpoint path. UpdateEngineService gains checkpoint load/save/delete, incoming-state validation, resume logic for PLONDS and legacy updates, apply lock handling, and safer cleanup; ApplyPendingPlondsUpdateAsync and ApplyPendingUpdate flow updated accordingly. Add DeploymentLock contract and extend UpdateState with pause/resume/cancel helpers. Tests updated to cover stale/valid checkpoint resume and legacy/PLONDS flows. CI: enhance ddss-publish to detect release channel, validate S3 assets, prepare and atomically publish channel pointer; add ddss-rollback workflow to publish rollbacks; adjust plonds-build concurrency and release events. * changed.更了好多 * fix.消息盒子媒体播放器组件服务修复 * change.重做天气,为回到系统提供自定义功能。 * feat.airapp与融合桌面 * feat.动画优化与更新界面 * feat.数字时钟,白板功能修复 * feat.完善了时钟轻应用,为启动器提供了多语言支持 * feat.发布与打包优化 * changed.天气选项卡更新
2026-05-19 07:55:21 +08:00
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="type" type="xsd:string" use="optional" />
<xsd:attribute name="mimetype" type="xsd:string" use="optional" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype"><value>text/microsoft-resx</value></resheader>
<resheader name="version"><value>2.0</value></resheader>
<resheader name="reader"><value>System.Resources.ResXResourceReader, System.Windows.Forms</value></resheader>
<resheader name="writer"><value>System.Resources.ResXResourceWriter, System.Windows.Forms</value></resheader>
<data name="Splash_Title" xml:space="preserve"><value>LanMountain Desktop</value></data>
<data name="Splash_AppName" xml:space="preserve"><value>LanMountain Desktop</value></data>
<data name="Splash_StatusInitializing" xml:space="preserve"><value>Initializing...</value></data>
<data name="Splash_DebugPreview" xml:space="preserve"><value>[Debug Mode] Splash Preview</value></data>
<data name="Error_Title" xml:space="preserve"><value>LanMountain Desktop</value></data>
<data name="Error_TitleCannotConfirm" xml:space="preserve"><value>Launcher could not confirm startup</value></data>
<data name="Error_MessageNotReached" xml:space="preserve"><value>LanMountain Desktop did not reach the expected startup state.</value></data>
<data name="Error_SuggestionTitle" xml:space="preserve"><value>Startup recovery</value></data>
<data name="Error_SuggestionMessage" xml:space="preserve"><value>You can inspect logs, wait for the current process, or activate the running desktop instance.</value></data>
<data name="Error_DiagnosticHeader" xml:space="preserve"><value>Diagnostic details</value></data>
<data name="Error_ButtonOpenLogs" xml:space="preserve"><value>Open Logs</value></data>
<data name="Error_ButtonCopy" xml:space="preserve"><value>Copy</value></data>
<data name="Error_ButtonWait" xml:space="preserve"><value>Wait</value></data>
<data name="Error_ButtonExit" xml:space="preserve"><value>Exit</value></data>
<data name="Error_ButtonRetry" xml:space="preserve"><value>Retry</value></data>
<data name="Error_ButtonActivate" xml:space="preserve"><value>Activate</value></data>
<data name="Error_DebugTitle" xml:space="preserve"><value>[Debug] Launcher error</value></data>
<data name="Error_HostNotFoundTitle" xml:space="preserve"><value>Launcher could not find the desktop executable</value></data>
<data name="Error_HostNotFoundMessage" xml:space="preserve"><value>Pick another executable in debug mode, inspect logs, or retry after fixing the deployment path.</value></data>
<data name="Error_GenericRetryMessage" xml:space="preserve"><value>Inspect logs, then retry once the previous startup attempt has fully finished.</value></data>
<data name="Error_GenericNoRetryMessage" xml:space="preserve"><value>Inspect logs or exit. Launcher will avoid creating another desktop process while the old one is still running.</value></data>
<data name="Error_PendingTitle" xml:space="preserve"><value>Startup is still pending</value></data>
<data name="Error_PendingMessage" xml:space="preserve"><value>The desktop process is still running, so Launcher will not start a second instance.</value></data>
<data name="Error_PendingMessageWithPid" xml:space="preserve"><value>The desktop process is still running, so Launcher will not start a second instance. Current host PID: {0}.</value></data>
<data name="MultiInstance_Title" xml:space="preserve"><value>LanMountain Desktop</value></data>
<data name="MultiInstance_AlreadyRunning" xml:space="preserve"><value>LanMountain Desktop is already running</value></data>
<data name="MultiInstance_AlreadyRunningMessage" xml:space="preserve"><value>Launcher found an existing desktop instance and did not start another process.</value></data>
<data name="MultiInstance_RepeatedLaunchTitle" xml:space="preserve"><value>Repeated launch</value></data>
<data name="MultiInstance_RepeatedLaunchMessage" xml:space="preserve"><value>Your current setting is to show this prompt without opening the desktop automatically.</value></data>
<data name="MultiInstance_NoSecondProcess" xml:space="preserve"><value>No second Host process was created.</value></data>
<data name="MultiInstance_ButtonCopy" xml:space="preserve"><value>Copy</value></data>
<data name="MultiInstance_ButtonClose" xml:space="preserve"><value>Close</value></data>
<data name="MultiInstance_ButtonOpenDesktop" xml:space="preserve"><value>Open desktop</value></data>
<data name="MultiInstance_DetailsFormat" xml:space="preserve"><value>Existing host PID: {0}&#10;Shell state: {1}&#10;No second Host process was created.</value></data>
<data name="DataLocation_Title" xml:space="preserve"><value>Choose Data Location</value></data>
<data name="DataLocation_ChooseLocation" xml:space="preserve"><value>Choose Data Location</value></data>
<data name="DataLocation_ChooseLocationDesc" xml:space="preserve"><value>Choose where launcher and desktop data should be stored. You can change this later in settings.</value></data>
<data name="DataLocation_NotWritable" xml:space="preserve"><value>App folder is not writable</value></data>
<data name="DataLocation_NotWritableDesc" xml:space="preserve"><value>The current install directory requires elevated permissions. Data will be stored in the system user profile instead.</value></data>
<data name="DataLocation_SystemProfile" xml:space="preserve"><value>Store in the system user profile (Recommended)</value></data>
<data name="DataLocation_SystemProfileDesc" xml:space="preserve"><value>Data stays tied to the current Windows user and remains intact across app reinstalls and updates.</value></data>
<data name="DataLocation_Portable" xml:space="preserve"><value>Store next to the app</value></data>
<data name="DataLocation_PortableDesc" xml:space="preserve"><value>Useful for portable installs. The whole app folder can be moved to another machine together with its data.</value></data>
<data name="DataLocation_ButtonCancel" xml:space="preserve"><value>Cancel</value></data>
<data name="DataLocation_ButtonConfirm" xml:space="preserve"><value>Confirm</value></data>
<data name="DataLocation_MigrateWarning" xml:space="preserve"><value>Existing system data was detected. Choosing portable mode will migrate the current data automatically.</value></data>
<data name="Loading_Title" xml:space="preserve"><value>LanMountain Desktop - Loading Details</value></data>
<data name="Loading_StartingDesktop" xml:space="preserve"><value>Starting LanMountain Desktop</value></data>
<data name="Loading_StatusInitializing" xml:space="preserve"><value>Initializing...</value></data>
<data name="Loading_StatusPreparing" xml:space="preserve"><value>Preparing components</value></data>
<data name="Loading_LoadingItems" xml:space="preserve"><value>Loading Items</value></data>
<data name="Loading_Done" xml:space="preserve"><value>Done</value></data>
<data name="Loading_ErrorOccurred" xml:space="preserve"><value>An error occurred while loading.</value></data>
<data name="Loading_ButtonDetails" xml:space="preserve"><value>Details</value></data>
<data name="Loading_ButtonCancel" xml:space="preserve"><value>Cancel</value></data>
<data name="Loading_StageReady" xml:space="preserve"><value>Ready</value></data>
<data name="Loading_ItemPlugin" xml:space="preserve"><value>Loading plugins...</value></data>
<data name="Loading_ItemComponent" xml:space="preserve"><value>Loading components...</value></data>
<data name="Loading_ItemResource" xml:space="preserve"><value>Loading resources...</value></data>
<data name="Loading_ItemData" xml:space="preserve"><value>Loading data...</value></data>
<data name="Loading_ItemDownload" xml:space="preserve"><value>Downloading...</value></data>
<data name="Loading_ItemProcess" xml:space="preserve"><value>Processing...</value></data>
<data name="Loading_ItemComplete" xml:space="preserve"><value>Done</value></data>
<data name="Loading_TypePlugin" xml:space="preserve"><value>Plugin</value></data>
<data name="Loading_TypeComponent" xml:space="preserve"><value>Component</value></data>
<data name="Loading_TypeResource" xml:space="preserve"><value>Resource</value></data>
<data name="Loading_TypeData" xml:space="preserve"><value>Data</value></data>
<data name="Loading_TypeNetwork" xml:space="preserve"><value>Network</value></data>
<data name="Loading_TypeSettings" xml:space="preserve"><value>Settings</value></data>
<data name="Loading_TypeSystem" xml:space="preserve"><value>System</value></data>
<data name="Loading_TypeOther" xml:space="preserve"><value>Other</value></data>
<data name="Update_Title" xml:space="preserve"><value>LanMountain Desktop - Update</value></data>
<data name="Update_AppName" xml:space="preserve"><value>LanMountain Desktop</value></data>
<data name="Update_StatusUpdate" xml:space="preserve"><value>Update</value></data>
<data name="Update_StatusUpdating" xml:space="preserve"><value>Updating, please wait...</value></data>
<data name="Update_Complete" xml:space="preserve"><value>Update complete</value></data>
<data name="Update_Failed" xml:space="preserve"><value>Update failed</value></data>
<data name="Update_FailedMessage" xml:space="preserve"><value>An error occurred during the update</value></data>
<data name="Update_DebugTitle" xml:space="preserve"><value>[Debug Mode] Update Page</value></data>
<data name="Update_DebugMessage" xml:space="preserve"><value>Preview update progress interface</value></data>
<data name="Update_Verifying" xml:space="preserve"><value>Verifying update...</value></data>
<data name="Update_ApplyingPlugins" xml:space="preserve"><value>Applying plugin upgrades...</value></data>
<data name="Update_CleaningUp" xml:space="preserve"><value>Cleaning up old deployments...</value></data>
<data name="DebugDebug_Title" xml:space="preserve"><value>Debug Mode</value></data>
<data name="DebugDebug_SettingsTitle" xml:space="preserve"><value>Debug Settings</value></data>
<data name="DebugDebug_DevMode" xml:space="preserve"><value>Developer Mode</value></data>
<data name="DebugDebug_DevModeDesc" xml:space="preserve"><value>Automatically scan dev directories when enabled</value></data>
<data name="DebugDebug_On" xml:space="preserve"><value>On</value></data>
<data name="DebugDebug_Off" xml:space="preserve"><value>Off</value></data>
<data name="DebugDebug_AppPath" xml:space="preserve"><value>App Path</value></data>
<data name="DebugDebug_NotSelected" xml:space="preserve"><value>Not selected</value></data>
<data name="DebugDebug_Browse" xml:space="preserve"><value>Browse...</value></data>
<data name="DebugDebug_Warning" xml:space="preserve"><value>This feature is for developers only</value></data>
<data name="DebugDebug_ButtonCancel" xml:space="preserve"><value>Cancel</value></data>
<data name="DebugDebug_ButtonOk" xml:space="preserve"><value>OK</value></data>
<data name="DebugDebug_SelectExeDialog" xml:space="preserve"><value>Select LanMountainDesktop host executable</value></data>
2026-06-05 23:38:32 +08:00
<data name="DebugDebug_BackgroundImage" xml:space="preserve"><value>Splash image</value></data>
<data name="DebugDebug_BackgroundImageDesc" xml:space="preserve"><value>Choose an image to show on the splash screen. It will be copied into the Launcher data directory.</value></data>
<data name="DebugDebug_BackgroundImageNotSet" xml:space="preserve"><value>No splash image selected</value></data>
<data name="DebugDebug_BackgroundImageSaved" xml:space="preserve"><value>Splash image saved. The current splash screen will refresh immediately.</value></data>
<data name="DebugDebug_BackgroundImageCleared" xml:space="preserve"><value>Splash image cleared.</value></data>
<data name="DebugDebug_BackgroundImageSaveFailedFormat" xml:space="preserve"><value>Image setting failed: {0}</value></data>
<data name="DebugDebug_BackgroundImageReadyFormat" xml:space="preserve"><value>Current splash image is ready ({0} x {1}).</value></data>
<data name="DebugDebug_BackgroundImageInvalidFormat" xml:space="preserve"><value>Current splash image is unavailable: {0}</value></data>
<data name="DebugDebug_Clear" xml:space="preserve"><value>Clear</value></data>
<data name="DebugDebug_SelectImageDialog" xml:space="preserve"><value>Select splash image</value></data>
<data name="DebugDebug_ImageFiles" xml:space="preserve"><value>Image files</value></data>
合并对设置系统的更新 (#11) * Add Windows system chrome patchers (Harmony) Introduce support for toggling the system chrome on Windows using Harmony patchers. Adds Lib.Harmony.Thin to package props and project, new patcher infrastructure (ChromePatchState, PatcherEntrance) and two Harmony patches that disable FluentAvalonia's Windows chrome when configured. Program.cs now loads the chrome setting and installs patchers conditionally on Windows/x86-x64. Settings viewmodel and view updated: expose IsWindowsOs, require restart on appearance changes, migrate SettingsWindow to FAAppWindow and adapt titlebar/layout (include Windows caption placeholder and footer menu items). Also add a .gitkeep and a build log file. * Refactor settings window UI and theming Improve theming and layout for the Settings window and related services. - MaterialSurfaceService: add special material parameters for SettingsWindowBackground (lower alpha, no blur) and avoid hot-switching real backdrops for non-settings windows. - GlassEffectService: add AdaptiveSettingsWindowTintBrush + ResolveSettingsWindowTintAlpha to provide optional content tinting tied to system material mode. - SettingsWindowService: refactor theme application into ApplyThemeVariantAndResources, ensure settings window material is applied at show/activate times, and tidy theme/resource application flow. - SettingsWindow.axaml / .axaml.cs: restructure title bar (separate Grid.Row=0 border) and FANavigationView host, add pane-footer toggle button for :minimal layout, use dynamic corner radius resource, and update toggle/visibility/icon logic and responsive layout code. - SettingsPages: remove some IconText usages and adjust margins; use DesignCornerRadiusLg for update card corner radius. - Add NuGet.Config to set local globalPackagesFolder and ignore .nuget/packages in .gitignore. These changes aim to improve visuals, avoid backdrop overdraw, and make the settings window behavior consistent across themes and layouts. * Add localization and localize settings pages Add many new localization keys (en-US and zh-CN) for notifications, developer tools, about page, status bar, and video wallpaper. Update Notification, Dev, About and StatusBar view models to use LocalizationService, expose localized ObservableProperties, and refresh localized text at construction. Localize selection options and test notification texts, and fix notification severity handling. Wire up XAML to the new localized properties (About/Dev/StatusBar pages) and update the settings page title for notifications. Also adjust copyright line generation and replace hardcoded placeholders with bound Watermark properties. * Redesign settings window with fluent shell & search Rebuild the settings window as a Fluent shell: adds a custom 48-DIP titlebar with Back, pane toggle, icon/title, search box, restart/more menu, and caption-button spacer; moves compact pane toggle into the titlebar and preserves FANavigationView as the primary navigation surface. Introduces a SettingsSearchService (with UI AutoComplete integration, search indexing, navigation-by-result, and search result highlighting) plus focused tests for search filtering and theme material normalization. Adds navigation history/back stack, updates SettingsViewModels for new bindings and localization keys, and updates General/Apearance pages to expose new strings and options. Implements an "auto" system material mode: default in AppSettingsSnapshot, new MaterialAuto constants and normalization/resolution logic in ThemeAppearanceValues, WindowMaterialService and MaterialSurfaceService adjustments to prefer Mica on Win11 and Acrylic on Win10 using TransparencyLevelHint. GlassEffectService and AppearanceThemeService updated to use effective material mode and to track live theme state changes. Adds localization entries (en-US, zh-CN), spec/tasks docs, and other UI/style tweaks to support the redesign. * fix.修折叠与展开按钮 * Add OOBE startup presentation and settings merge Introduce a new OOBE step for "Startup & Presentation" that exposes startup and UI preferences in OobeWindow (toggles for taskbar, slide/fade transitions, fused popup, and autostart). Add HostAppSettingsOobeMerger to read/write Host settings.json (PascalCase fields) and MergeStartupPresentation behavior, plus LauncherWindowsStartupService to sync the current Launcher into the Windows Run key on Windows. Wire UI handlers, persist choices on Next, and load defaults when entering the step. Include unit tests for the merger, adjust SettingsWindow navigation pane/toggle handling, and update docs/LAUNCHER.md to describe the new OOBE step and implementation files. * Move whiteboard persistence to file storage Switch whiteboard note storage from legacy DB rows to per-note JSON files and add migration support. Update WhiteboardNoteSnapshot schema (version bump, viewport, canvas, expires, PathSvgData) and change IWhiteboardNotePersistenceService.SaveNote to return bool to surface write failures (e.g. read-only files). Implement file-based WhiteboardNotePersistenceService with legacy DB migration/cleanup, retention handling, and logging. Add comprehensive unit tests for persistence, stroke path builder, SVG import and viewport helper. Also add ThirdParty/DotNetCampus.InkCanvas project and reference it in the main csproj, and bump PostHog package to 2.6.0. * Introduce render gate and chart caching Replace UI DispatcherTimer polling with a StudySnapshotRenderGate across multiple widgets to queue and apply only the latest analytics snapshot; components updated include StudyDeductionReasonsWidget, StudyEnvironmentWidget, StudyInterruptDensityWidget, StudyNoiseCurveWidget. Add StudySnapshotRenderGate implementation to coordinate rendering and monitoring leases and update subscription/lease lifecycle handling (subscribe/unsubscribe, Acquire/Dispose leases, Clear/Dispose gate). Rewrite chart controls (StudyNoiseCurveChartControl and StudyNoiseDistributionScatterChartControl) to use stable logical-time origins, split series into static vs dynamic tails, add geometry/sample caching, stable jitter/coordinate mapping helpers, and expose internal helpers & counts for testing. Add unit tests (StudyComponentRenderingTests) covering the render gate and chart behaviors (layer counts, logical X mapping, stable jitter, cache rebuild). These changes improve rendering correctness and performance by avoiding redundant renders and enabling deterministic chart layout. * Use MaterialColorSnapshot in appearance flow Introduce unified material/color spec and tests, and refactor appearance plumbing to use MaterialColorSnapshot as the single source of truth. Add .trae material-color-service spec/checklist/tasks and integration/unit tests for plugin mapping and appearance VM behavior. AppearanceChangedEvent extended with new appearance change flags and HasChanged logic. ComponentEditorMaterialThemeAdapter rewritten to accept MaterialColorSnapshot and derive palette from snapshot data. Simplify AppearanceSettingsPageViewModel and related view code: remove legacy preview/custom-seed UI logic, preserve material/color fields when updating theme or corner radius, and update save calls to use with-expressions. Update ComponentEditorWindow to use adapter-provided OnPrimary brush and minor docs updates. * Add material color services, plugin DTOs, and tests Introduce IPC wire-format appearance DTOs (PluginIsolation.Contracts) and clarify they are distinct from the runtime PluginSdk snapshot. Update PluginSdk comments to document the runtime-facing snapshot shape. Change ComponentColorSchemeHelper to use the HostMaterialColorProvider and add an overload that accepts a MaterialColorSnapshot. Add new services and pipelines (MaterialColorService, MaterialSurfaceService, WindowMaterialService, WallpaperColorPipeline) and refactor AppearanceThemeService to depend on MaterialColorService while removing legacy internal implementations. Add multiple unit tests (ComponentColorSchemeHelper, PluginAppearanceBoundary, SettingsCatalogService, WallpaperSettingsPageViewModel) and update localization resources with new material_color and wallpaper keys. * Add CODE_WIKI and update localization Add a comprehensive CODE_WIKI.md documenting project architecture, modules, startup flow, plugin system, testing and developer workflows. Update localization resources (en-US.json, zh-CN.json) with new/translated keys for wallpaper controls (custom color UI), material & color settings (semantic roles, surfaces, refresh/polling state), appearance (corner radius), status bar font size options, privacy policy text, component library labels, clock settings, and new language entry (Korean). Also modify settings-related ViewModels and Settings page views to surface these new features and texts (MaterialColorSettingsPageViewModel.cs, SettingsViewModels.cs, WallpaperSettingsPageViewModel.cs, MainWindow.SettingsHardCut.Stubs.cs, ComponentsSettingsPage.axaml, WallpaperSettingsPage.axaml). * Add Data settings page and storage scanner Introduce a new "Data" settings page to visualize and manage local app storage. Adds DataStorageService (scanning, disk info, clean operations), DataSettingsPageViewModel, XAML view and code-behind, and HexToColor/HexToBrush converters; registers converters in App.axaml. Also update localization strings for the new page and add icon mapping so the settings entry uses the Database icon. Enables per-category and global cleaning workflows and formatted size display. * Add IPC backoff/retries and safer disposal Introduce exponential backoff, jitter and retry logic across IPC components to improve robustness and avoid tight retry loops; make disposal idempotent and add connection guards. Key changes: - LauncherCoordinatorIpcServer / LauncherIpcServer: add backoff constants, ComputeBackoff(), consecutive error tracking and delayed retries with jitter. - LanMountainDesktopIpcClient / LauncherIpcClient: add connect retry loops, timeouts, delayed retries, improved error logging, and use ArrayPool for buffered async writes; ensure proper cleanup on failures. - PublicIpcHostService: add disposed flag, guard OnPeerConnected and Dispose, and clear connected peers on dispose. - Add many auto-generated commit analysis docs under docs/auto_commit_md and new scripts for analyzing/generating commit docs. These changes aim to make IPC connection handling more resilient and resource-safe. * Add preview controls and settings UI tweaks Introduce GridPreviewControl and CornerRadiusPreviewControl for visual previews and wire them into the Components settings (add ScreenAspectRatio, CornerRadiusPreviewValue, and screen aspect init). Refactor ComponentsSettingsPage UI to show live previews. Improve DataSettingsPage layout and storage bar logic (use item percentages directly, include remaining segment, adjust visuals and visibility triggers). Simplify LauncherSettingsPage header/appearance layout. Add SECURITY_AUDIT_REPORT.md, analysis summary, mockup HTML, and a local .claude settings file. * Add install checkpoint/resume and DDSS workflows Introduce install checkpoint support and resume logic for updates, plus related locking and validation. Adds InstallCheckpoint model, AppJsonContext serialization, and UpdatePaths helpers for deployment lock, apply-in-progress lock and install-checkpoint path. UpdateEngineService gains checkpoint load/save/delete, incoming-state validation, resume logic for PLONDS and legacy updates, apply lock handling, and safer cleanup; ApplyPendingPlondsUpdateAsync and ApplyPendingUpdate flow updated accordingly. Add DeploymentLock contract and extend UpdateState with pause/resume/cancel helpers. Tests updated to cover stale/valid checkpoint resume and legacy/PLONDS flows. CI: enhance ddss-publish to detect release channel, validate S3 assets, prepare and atomically publish channel pointer; add ddss-rollback workflow to publish rollbacks; adjust plonds-build concurrency and release events. * changed.更了好多 * fix.消息盒子媒体播放器组件服务修复 * change.重做天气,为回到系统提供自定义功能。 * feat.airapp与融合桌面 * feat.动画优化与更新界面 * feat.数字时钟,白板功能修复 * feat.完善了时钟轻应用,为启动器提供了多语言支持 * feat.发布与打包优化 * changed.天气选项卡更新
2026-05-19 07:55:21 +08:00
<data name="Oobe_Title" xml:space="preserve"><value>Welcome to LanMountain Desktop</value></data>
<data name="Oobe_WelcomeTitle" xml:space="preserve"><value>Welcome to LanMountain Desktop</value></data>
<data name="Oobe_WelcomeSubtitle" xml:space="preserve"><value>Your desktop, more than one side</value></data>
<data name="Oobe_ButtonGetStarted" xml:space="preserve"><value>Get Started</value></data>
<data name="Oobe_AppearanceTitle" xml:space="preserve"><value>Personalize Your Desktop</value></data>
<data name="Oobe_AppearanceDesc" xml:space="preserve"><value>Choose your preferred theme style. You can change it anytime in settings.</value></data>
<data name="Oobe_AppearanceMode" xml:space="preserve"><value>Appearance Mode</value></data>
<data name="Oobe_LightMode" xml:space="preserve"><value>Light Mode</value></data>
<data name="Oobe_DarkMode" xml:space="preserve"><value>Dark Mode</value></data>
<data name="Oobe_ThemeColor" xml:space="preserve"><value>Theme Color</value></data>
<data name="Oobe_MonetSource" xml:space="preserve"><value>Monet Color Source</value></data>
<data name="Oobe_MonetFromWallpaper" xml:space="preserve"><value>Extract from wallpaper</value></data>
<data name="Oobe_MonetFromCustomImage" xml:space="preserve"><value>Extract from custom image</value></data>
<data name="Oobe_MonetDisabled" xml:space="preserve"><value>Don't use Monet colors</value></data>
<data name="Oobe_DataLocationTitle" xml:space="preserve"><value>Choose Data Location</value></data>
<data name="Oobe_SystemProfile" xml:space="preserve"><value>Store in the system user profile (Recommended)</value></data>
<data name="Oobe_SystemProfileDesc" xml:space="preserve"><value>Data stays tied to the current Windows user and remains intact across app reinstalls and updates.</value></data>
<data name="Oobe_Portable" xml:space="preserve"><value>Store next to the app</value></data>
<data name="Oobe_PortableDesc" xml:space="preserve"><value>Useful for portable installs. The whole app folder can be moved to another machine together with its data.</value></data>
<data name="Oobe_NotWritable" xml:space="preserve"><value>Cannot save to app directory</value></data>
<data name="Oobe_NotWritableDesc" xml:space="preserve"><value>The current install directory requires elevated permissions. Data will be stored in the system user profile instead.</value></data>
<data name="Oobe_StartupTitle" xml:space="preserve"><value>Startup &amp; Display</value></data>
<data name="Oobe_ShowInTaskbar" xml:space="preserve"><value>Show main desktop window in taskbar</value></data>
<data name="Oobe_SlideTransition" xml:space="preserve"><value>Show main window with slide transition</value></data>
<data name="Oobe_FadeTransition" xml:space="preserve"><value>Use fade-in transition on startup</value></data>
<data name="Oobe_FusedDesktop" xml:space="preserve"><value>Fused desktop with swipe gesture</value></data>
<data name="Oobe_AutoStart" xml:space="preserve"><value>Automatically start LanMountain Desktop on Windows login</value></data>
<data name="Oobe_PrivacyTitle" xml:space="preserve"><value>Information &amp; Privacy</value></data>
<data name="Oobe_CrashReports" xml:space="preserve"><value>Send anonymous crash reports</value></data>
<data name="Oobe_UsageStats" xml:space="preserve"><value>Send anonymous usage statistics</value></data>
<data name="Oobe_PrivacyTrackingId" xml:space="preserve"><value>Privacy Tracking ID</value></data>
<data name="Oobe_Agree" xml:space="preserve"><value>Agree</value></data>
<data name="Oobe_PrivacyPolicyLink" xml:space="preserve"><value>LanMountain Desktop Telemetry Privacy Data Collection Agreement</value></data>
<data name="Oobe_ButtonBack" xml:space="preserve"><value>Back</value></data>
<data name="Oobe_ButtonNext" xml:space="preserve"><value>Next</value></data>
<data name="Oobe_CompleteTitle" xml:space="preserve"><value>Welcome to LanMountain Desktop</value></data>
<data name="Oobe_CompleteSubtitle" xml:space="preserve"><value>Your desktop, more than one side</value></data>
<data name="Oobe_MonetDesc" xml:space="preserve"><value>Automatically extract theme colors from your wallpaper for a seamless desktop experience</value></data>
<data name="Oobe_MonetFromWallpaperDesc" xml:space="preserve"><value>Analyze current wallpaper colors to generate a theme</value></data>
<data name="Oobe_MonetFromCustomImageDesc" xml:space="preserve"><value>Choose an image as the color source</value></data>
<data name="Oobe_MonetDisabledDesc" xml:space="preserve"><value>Use a fixed preset theme color</value></data>
<data name="Oobe_DataLocationDesc" xml:space="preserve"><value>Decide where to store app data. You can change this anytime in settings.</value></data>
<data name="Oobe_StartupDesc" xml:space="preserve"><value>These options can be changed anytime in the desktop app Settings. Slide-in entrance is only available on Windows.</value></data>
<data name="Oobe_ShowInTaskbarDesc" xml:space="preserve"><value>When enabled, a taskbar entry remains when minimized; when disabled, rely more on the tray icon.</value></data>
<data name="Oobe_SlideTransitionDesc" xml:space="preserve"><value>Slide in from screen edge; mutually exclusive with fade-in.</value></data>
<data name="Oobe_FadeTransitionDesc" xml:space="preserve"><value>Recommended when slide-in is not enabled.</value></data>
<data name="Oobe_FusedDesktopDesc" xml:space="preserve"><value>Enable fused desktop and three-finger swipe gesture for edge pop-in and related experimental features (same as developer options in Settings).</value></data>
<data name="Oobe_AutoStartDesc" xml:space="preserve"><value>Register this launcher as the current user's startup item (same registry entry as the optional installer task).</value></data>
<data name="Oobe_AutoStartDescNonWindows" xml:space="preserve"><value>Only the preference is saved on this platform; use the system's app auto-start settings for actual auto-start behavior.</value></data>
<data name="Oobe_PrivacyDesc" xml:space="preserve"><value>Choose whether to participate in the telemetry program and review the privacy policy</value></data>
<data name="Oobe_CrashReportsDesc" xml:space="preserve"><value>Help improve app stability; no personal identity information is included</value></data>
<data name="Oobe_UsageStatsDesc" xml:space="preserve"><value>Help understand feature usage and optimize product experience</value></data>
<data name="Oobe_PrivacyTrackingIdDesc" xml:space="preserve"><value>This ID is used to anonymously identify your device and does not contain any personal information</value></data>
<data name="Oobe_PrivacyAgreementNote" xml:space="preserve"><value>You must read and agree to the privacy policy before enabling telemetry features. Telemetry data is used solely to improve app stability and optimize product experience, and does not contain any personal identity information.</value></data>
<data name="Oobe_TypingAppName" xml:space="preserve"><value>LanMountain Desktop</value></data>
<data name="Oobe_TypingNextGen" xml:space="preserve"><value>Next Gen</value></data>
<data name="Oobe_TypingDashboard" xml:space="preserve"><value>Interactive Dashboard</value></data>
<data name="Oobe_MigrationDetected" xml:space="preserve"><value>Existing data detected. It will be migrated automatically when portable mode is selected.</value></data>
<data name="Migration_Title" xml:space="preserve"><value>LanMountain Desktop - Version Migration</value></data>
<data name="Migration_DetectedOldVersion" xml:space="preserve"><value>Old version detected</value></data>
<data name="Migration_DetectedDesc" xml:space="preserve"><value>An older version of LanMountain Desktop (0.8.4) was detected on your system. Uninstalling it is recommended to avoid conflicts.</value></data>
<data name="Migration_Version" xml:space="preserve"><value>Version: </value></data>
<data name="Migration_Location" xml:space="preserve"><value>Location: </value></data>
<data name="Migration_Type" xml:space="preserve"><value>Type: </value></data>
<data name="Migration_Installed" xml:space="preserve"><value>Installed</value></data>
<data name="Migration_UninstallNote" xml:space="preserve"><value>Uninstalling the old version will not affect the new version. Your personal data will be preserved.</value></data>
<data name="Migration_ButtonViewLocation" xml:space="preserve"><value>View Location</value></data>
<data name="Migration_ButtonSkip" xml:space="preserve"><value>Skip for now</value></data>
<data name="Migration_ButtonUninstall" xml:space="preserve"><value>Uninstall Old Version</value></data>
<data name="Migration_Portable" xml:space="preserve"><value>Portable</value></data>
<data name="Migration_Unknown" xml:space="preserve"><value>Unknown</value></data>
<data name="Migration_DetectedDescFormat" xml:space="preserve"><value>An older version of LanMountain Desktop ({0}) was detected on your system. The new version uses a completely new architecture. Uninstalling the old version is recommended for a better experience.</value></data>
<data name="Privacy_Title" xml:space="preserve"><value>LanMountain Desktop Telemetry Privacy Data Collection Agreement</value></data>
<data name="Privacy_Header" xml:space="preserve"><value>LanMountain Desktop Telemetry Privacy Data Collection Agreement</value></data>
<data name="Privacy_Description" xml:space="preserve"><value>Please read the following agreement carefully to understand how we collect, use, and protect your data</value></data>
<data name="Privacy_ButtonClose" xml:space="preserve"><value>Close</value></data>
<data name="DevDebug_Title" xml:space="preserve"><value>Developer Debug Window</value></data>
<data name="DevDebug_Splash" xml:space="preserve"><value>Splash Screen</value></data>
<data name="DevDebug_Error" xml:space="preserve"><value>Error Page</value></data>
<data name="DevDebug_Update" xml:space="preserve"><value>Update Page</value></data>
<data name="DevDebug_Oobe" xml:space="preserve"><value>OOBE Page</value></data>
<data name="DevDebug_DataLocation" xml:space="preserve"><value>Data Location</value></data>
<data name="DevDebug_EnableFeature" xml:space="preserve"><value>Enable Feature</value></data>
<data name="DevDebug_Open" xml:space="preserve"><value>Open</value></data>
<data name="DevDebug_SetAllViewMode" xml:space="preserve"><value>Set All to View Mode</value></data>
<data name="DevDebug_SetAllFunctionMode" xml:space="preserve"><value>Set All to Function Mode</value></data>
<data name="DevDebug_Close" xml:space="preserve"><value>Close</value></data>
<data name="Coordinator_SlowDeviceMessage" xml:space="preserve"><value>The device is slow and still starting up. Please wait.</value></data>
<data name="Coordinator_RunningHostMessage" xml:space="preserve"><value>The desktop process is still running. Launcher will continue waiting and will not start again.</value></data>
<data name="Preview_SplashInitializing" xml:space="preserve"><value>Initializing...</value></data>
<data name="Preview_SplashCheckingUpdates" xml:space="preserve"><value>Checking updates...</value></data>
<data name="Preview_SplashCheckingPlugins" xml:space="preserve"><value>Checking plugins...</value></data>
<data name="Preview_SplashLaunchingHost" xml:space="preserve"><value>Launching host...</value></data>
<data name="Preview_SplashReady" xml:space="preserve"><value>Ready</value></data>
<data name="Preview_ErrorMessage" xml:space="preserve"><value>[Preview] This is the launcher error window preview.</value></data>
<data name="Preview_UpdateProcessing" xml:space="preserve"><value>Processing {0}...</value></data>
<data name="Preview_ActivationConnecting" xml:space="preserve"><value>Connecting to the active launcher...</value></data>
</root>