@ -0,0 +1,34 @@ |
|||
/.vs/AIK_WPFWin7/config/applicationhost.config |
|||
/.vs/AIK_WPFWin7/DesignTimeBuild/.dtbcache.v2 |
|||
/.vs/AIK_WPFWin7/FileContentIndex/220b08dd-7cab-4b06-b9ce-e2ff55f551fb.vsidx |
|||
/.vs/AIK_WPFWin7/FileContentIndex/7e16a2b3-374f-48b6-9586-0bfc63662446.vsidx |
|||
/.vs/AIK_WPFWin7/FileContentIndex/c1197851-d2be-4a27-a29f-f6dc9281684b.vsidx |
|||
/.vs/AIK_WPFWin7/FileContentIndex/e63df965-b67f-4efb-8b76-73728081e2d1.vsidx |
|||
/.vs/AIK_WPFWin7/FileContentIndex/ffe84a3e-16f3-47c8-9ac2-14fa66df514f.vsidx |
|||
/.vs/AIK_WPFWin7/v17/.futdcache.v2 |
|||
/.vs/AIK_WPFWin7/v17/.suo |
|||
/.vs/AIK_WPFWin7/v17/DocumentLayout.json |
|||
/.vs/AIK_WPFWin7/v17/fileList.bin |
|||
/.vs/AIK_WPFWin7/v18/.futdcache.v2 |
|||
/.vs/AIK_WPFWin7/v18/.suo |
|||
/.vs/AIK_WPFWin7/v18/DocumentLayout.backup.json |
|||
/.vs/AIK_WPFWin7/v18/DocumentLayout.json |
|||
/.vs/AIK_WPFWin7/v18/fileList.bin |
|||
/.vs/ProjectEvaluation/aik_wpfwin7.metadata.v10.bin |
|||
/.vs/ProjectEvaluation/aik_wpfwin7.projects.v10.bin |
|||
/.vs/ProjectEvaluation/aik_wpfwin7.strings.v10.bin |
|||
|
|||
# 编译生成目录(bin/obj) |
|||
[Bb]in/ |
|||
[Oo]bj/ |
|||
[Dd]ebug/ |
|||
[Rr]elease/ |
|||
x64/ |
|||
x86/ |
|||
bld/ |
|||
[Bb]uild/ |
|||
GeneratedFiles/ |
|||
*.user |
|||
*.suo |
|||
*.userosscache |
|||
*.sln.docstates |
|||
@ -0,0 +1,88 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net48</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<UseWPF>true</UseWPF> |
|||
<Assembly>AIK.Assets</Assembly> |
|||
<LangVersion>12</LangVersion> |
|||
|
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<None Remove="Fonts\iconfont.ttf" /> |
|||
<None Remove="Fonts\iconfont1.ttf" /> |
|||
<None Remove="Images\AIK.png" /> |
|||
<None Remove="Images\AIKChina.ico" /> |
|||
<None Remove="Images\AIKChina.png" /> |
|||
<None Remove="Images\AIKInternationl.ico" /> |
|||
<None Remove="Images\AIKInternationl.png" /> |
|||
<None Remove="Images\k3-tpms.png" /> |
|||
<None Remove="Images\K3tpms.svg" /> |
|||
<None Remove="Images\k3_tool.png" /> |
|||
<None Remove="Images\k3_tool_logo.png" /> |
|||
<None Remove="Images\logo.ico" /> |
|||
<None Remove="Images\logo.png" /> |
|||
<None Remove="Images\useravatar.png" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<EmbeddedResource Include="Images\AIKChina.ico"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Images\AIKChina.png"> |
|||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Images\AIKInternationl.ico"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Images\AIKInternationl.png"> |
|||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<Resource Include="Images\k3-tpms.png" /> |
|||
<Resource Include="Images\k3_tool.png"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</Resource> |
|||
<EmbeddedResource Include="Images\logo.png"> |
|||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Resource Include="Fonts\iconfont.ttf"> |
|||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> |
|||
</Resource> |
|||
<Resource Include="Fonts\iconfont1.ttf"> |
|||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> |
|||
</Resource> |
|||
<Resource Include="Images\AIK.png"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</Resource> |
|||
<Resource Include="Images\k3_tool_logo.png"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</Resource> |
|||
<Resource Include="Images\useravatar.png"> |
|||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> |
|||
</Resource> |
|||
<EmbeddedResource Include="Images\logo.ico"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Page Update="Styles\LoadingStyle.xaml"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</Page> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Reference Include="PresentationCore" /> |
|||
<Reference Include="PresentationFramework" /> |
|||
<Reference Include="WindowsBase" /> |
|||
<Reference Include="System.Xaml" /> |
|||
<Reference Include="System" /> |
|||
<Reference Include="System.Core" /> |
|||
<Reference Include="Microsoft.CSharp" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 284 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 413 KiB |
|
After Width: | Height: | Size: 679 KiB |
@ -0,0 +1,119 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Intelligentes Schluesselwerkzeug</system:String> |
|||
<system:String x:Key="Settings">Einstellungen</system:String> |
|||
<system:String x:Key="Language">Sprache</system:String> |
|||
<system:String x:Key="AppSettings">App-Einstellungen</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Grundparameter und Praeferenzen der Anwendung konfigurieren</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Oberflaecheneinstellungen</system:String> |
|||
<system:String x:Key="CacheSettings">Cache-Einstellungen</system:String> |
|||
<system:String x:Key="ClearCache">Daten-Cache leeren</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Oberflaechensprache:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Schluesselmodellliste</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Speichern</system:String> |
|||
<system:String x:Key="CancelButton">Abbrechen</system:String> |
|||
<system:String x:Key="ConfirmButton">Bestaetigen</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Nach Markenname, Englisch oder Pinyin suchen...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Nach Fahrzeugschluesselname, Englisch oder Pinyin suchen...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Untergeraet:</system:String> |
|||
<system:String x:Key="Frequency">Frequenz:</system:String> |
|||
<system:String x:Key="Chip">Chip:</system:String> |
|||
<system:String x:Key="Time">Zeit:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Informationen</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Einstellungen erfolgreich gespeichert</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Kontakt per WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Kontakt per E-Mail</system:String> |
|||
<system:String x:Key="ContactWechatCopy">WeChat kopiert</system:String> |
|||
<system:String x:Key="ContactEmailCopy">E-Mail kopiert</system:String> |
|||
<system:String x:Key="PhoneNumber">Telefonnummer</system:String> |
|||
<system:String x:Key="Integral">Punkte</system:String> |
|||
<system:String x:Key="Logout">Abmelden</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Geraeteaktualisierung</system:String> |
|||
<system:String x:Key="CurrentVersion">Aktuelle Version</system:String> |
|||
<system:String x:Key="NewVersion">Neue Version</system:String> |
|||
<system:String x:Key="DeviceStatus">Geraetestatus</system:String> |
|||
<system:String x:Key="DeviceName">Geraetename</system:String> |
|||
<system:String x:Key="UpgradeNow">Jetzt aktualisieren</system:String> |
|||
<system:String x:Key="GetVersion">Version abrufen</system:String> |
|||
<system:String x:Key="AppVersion">App-Version</system:String> |
|||
<system:String x:Key="ServerVersion">Serverversion</system:String> |
|||
<system:String x:Key="DeviceVersion">Geraeteversion</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Versionsaktualisierung</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Aktualisierungen fuer Firmware, Anwendung und Geraeteversionen</system:String> |
|||
<system:String x:Key="BurnLog">Schreibprotokoll</system:String> |
|||
<system:String x:Key="KeyBurnLog">Schluesselschreibprotokoll</system:String> |
|||
<system:String x:Key="IntegralRecharge">Punkte aufladen</system:String> |
|||
<system:String x:Key="MembershipOpen">Mitgliedschaft</system:String> |
|||
<system:String x:Key="IntegralRecord">Punkteverlauf</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Ihre Punkte</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Aufladebetrag eingeben</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Zahlungsmethode auswählen</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Bezahlen</system:String> |
|||
|
|||
<system:String x:Key="RemoteDetection">Fernbedienungserkennung</system:String> |
|||
<system:String x:Key="RemoteCopy">Fernbedienung kopieren</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS / Festcode kopieren</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Klicken Sie unten auf die Test-Schaltflaeche, um die Frequenz zu erkennen. Nachdem das Geraet verbunden ist, druecken Sie eine Taste am Untergeraet innerhalb der Testreichweite. Danach wird die Frequenz angezeigt.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Klicken Sie unten auf die Test-Schaltflaeche, um die Frequenz zu erkennen. Nachdem das Geraet verbunden ist, druecken Sie eine Taste am Untergeraet innerhalb der Testreichweite. Danach wird die Frequenz angezeigt.</system:String> |
|||
<system:String x:Key="Mode">Modus:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Erkennung</system:String> |
|||
<system:String x:Key="SkipThisKey">Diese Taste ueberspringen</system:String> |
|||
<system:String x:Key="Recheck">Erneut pruefen</system:String> |
|||
<system:String x:Key="StartCopying">Kopieren starten</system:String> |
|||
<system:String x:Key="Lock">Verriegeln</system:String> |
|||
<system:String x:Key="Unlock">Entriegeln</system:String> |
|||
<system:String x:Key="Trunk">Kofferraum</system:String> |
|||
<system:String x:Key="Panic">Panik</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Keine passende Marke gefunden</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Kein passender Suchbegriff gefunden</system:String> |
|||
<system:String x:Key="NoKeyData">Keine Schluesseldaten verfuegbar</system:String> |
|||
|
|||
<system:String x:Key="Data">Daten:</system:String> |
|||
<system:String x:Key="Type">Typ:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Bitrate:</system:String> |
|||
<system:String x:Key="BitCode">Bitlaenge:</system:String> |
|||
|
|||
<system:String x:Key="StartBurning">Programmierung starten</system:String> |
|||
<system:String x:Key="Tip">Hinweis</system:String> |
|||
<system:String x:Key="HomeTip">Empfehlen Sie es Ihren Freunden! Scannen Sie den QR-Code mit WeChat, QQ usw., um die App herunterzuladen und zu installieren.</system:String> |
|||
<system:String x:Key="Slogan">Wir werden Schlosser auch weiterhin wie gewohnt unterstuetzen.</system:String> |
|||
<system:String x:Key="ScanToDownload">Scannen Sie, um die mobile App herunterzuladen</system:String> |
|||
<system:String x:Key="GetLatestInfo">Neueste Informationen und Support erhalten</system:String> |
|||
<system:String x:Key="ViewMore">Mehr anzeigen</system:String> |
|||
<system:String x:Key="Loading">Laden...</system:String> |
|||
<system:String x:Key="CloudData">Cloud-Daten</system:String> |
|||
<system:String x:Key="UpdateNow">Jetzt aktualisieren</system:String> |
|||
<system:String x:Key="UpdateLater">Spaeter aktualisieren</system:String> |
|||
<system:String x:Key="NewVersionFound">Neue Version gefunden</system:String> |
|||
<system:String x:Key="UpdateTips">Update-Hinweise</system:String> |
|||
|
|||
<system:String x:Key="CloudDataSyncTitle">Cloud-Daten-Synchronisierung</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Waehrend der Synchronisierung der Cloud-Daten wird das Geraet neu gestartet und die Verbindung wird voruebergehend getrennt. Das ist normal. Bitte warten Sie, bis das System die Geraetefunktionen erneut initialisiert hat.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Zur Verbesserung der Geraetestabilitaet koennen Sie die Systemeinstellungen anpassen: Systemsteuerung -> Energieoptionen -> Energiesparplaneinstellungen aendern -> Erweiterte Energieeinstellungen aendern -> USB-Einstellungen -> Einstellung fuer selektives USB-Energiesparen -> [Deaktiviert]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Hinweis: Fuehren Sie den Vorgang nur bei verbundenem Geraet aus</system:String> |
|||
<system:String x:Key="OpenUDiskTest">USB-Laufwerk oeffnen (Test)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">USB-Laufwerk schliessen (Test)</system:String> |
|||
<system:String x:Key="SelectFileButton">Datei auswaehlen</system:String> |
|||
<system:String x:Key="SelectFolderButton">Ordner auswaehlen</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Geraet aktiv halten</system:String> |
|||
<system:String x:Key="SyncCloudData">Cloud-Daten synchronisieren</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,117 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<!-- 应用程序字符串 --> |
|||
<system:String x:Key="AppTitle">AIK.Smart Key Tool</system:String> |
|||
<system:String x:Key="Settings">Settings</system:String> |
|||
<system:String x:Key="Language">Language</system:String> |
|||
<system:String x:Key="AppSettings">App Settings</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Configure the basic parameters and preferences of the application</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Interface Settings</system:String> |
|||
<system:String x:Key="CacheSettings">Cache Settings</system:String> |
|||
<system:String x:Key="ClearCache">ClearCache</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Interface Language:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Key Model List</system:String> |
|||
<!-- 按钮文本 --> |
|||
<system:String x:Key="SaveButton">Save</system:String> |
|||
<system:String x:Key="CancelButton">Cancel</system:String> |
|||
<system:String x:Key="ConfirmButton">Confirm</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Search by brand name, English, or pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Search vehicle key name, English, or pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Series:</system:String> |
|||
<system:String x:Key="Frequency">Frequency:</system:String> |
|||
<system:String x:Key="Chip">Chip:</system:String> |
|||
<system:String x:Key="Time">Time:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Information</system:String> |
|||
|
|||
<!-- 消息文本 --> |
|||
<system:String x:Key="SaveSuccess">Settings saved successfully</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Contact us on wechat</system:String> |
|||
<system:String x:Key="ContactEmail">Contact us by email</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Contact us by email Copy Success</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Contact us by email Copy Success</system:String> |
|||
<system:String x:Key="PhoneNumber">PhoneNumber</system:String> |
|||
<system:String x:Key="Integral">Integral</system:String> |
|||
<system:String x:Key="Logout">Log out</system:String> |
|||
<system:String x:Key="DeviceUpdate">DeviceUpdate</system:String> |
|||
<system:String x:Key="CurrentVersion">CurrentVersion</system:String> |
|||
<system:String x:Key="NewVersion">NewVersion</system:String> |
|||
<system:String x:Key="DeviceStatus">DeviceStatus</system:String> |
|||
<system:String x:Key="DeviceName">DeviceName</system:String> |
|||
<system:String x:Key="UpgradeNow">Upgrade</system:String> |
|||
<system:String x:Key="GetVersion">get version</system:String> |
|||
<system:String x:Key="AppVersion">AppVersion</system:String> |
|||
<system:String x:Key="ServerVersion">ServerVersion</system:String> |
|||
<system:String x:Key="DeviceVersion">DeviceVersion</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Version upgrade</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Upgrades for firmware, application and device versions</system:String> |
|||
<system:String x:Key="BurnLog">Burn Log</system:String> |
|||
<system:String x:Key="KeyBurnLog">Key Burn Log</system:String> |
|||
<system:String x:Key="IntegralRecharge">Integral Recharge</system:String> |
|||
<system:String x:Key="MembershipOpen">Membership</system:String> |
|||
<system:String x:Key="IntegralRecord">Integral Record</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Your Points</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Enter recharge amount</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Select payment method</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Pay</system:String> |
|||
<system:String x:Key="RemoteDetection">Remote Detection</system:String> |
|||
<system:String x:Key="RemoteCopy">Remote Copy</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS / Fixed-Code Copy</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Click the Test button below to detect the frequency. After connecting the device, press a button on the sub-unit within the testable range, and the frequency will be displayed.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Click the Test button below to detect the frequency. After connecting the device, press a button on the sub-unit within the testable range, and the frequency will be displayed.</system:String> |
|||
<system:String x:Key="Mode">Mode:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Detection</system:String> |
|||
<system:String x:Key="SkipThisKey">Skip this key</system:String> |
|||
<system:String x:Key="Recheck">Recheck</system:String> |
|||
<system:String x:Key="StartCopying">Start copying</system:String> |
|||
<system:String x:Key="Lock">Lock</system:String> |
|||
<system:String x:Key="Unlock">Unlock</system:String> |
|||
<system:String x:Key="Trunk">Trunk</system:String> |
|||
<system:String x:Key="Panic">Panic</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">No matching brand found</system:String> |
|||
<system:String x:Key="TryOtherKeywords">No matching brand found</system:String> |
|||
<system:String x:Key="NoKeyData">No key data available</system:String> |
|||
|
|||
<system:String x:Key="Data">Data:</system:String> |
|||
<system:String x:Key="Type">Type:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Bitrate:</system:String> |
|||
<system:String x:Key="BitCode">Bit length:</system:String> |
|||
<system:String x:Key="StartBurning">Start Burning</system:String> |
|||
<system:String x:Key="Tip">Tip</system:String> |
|||
<system:String x:Key="HomeTip">Recommend it to your friends! Scan the QR code with WeChat, QQ, etc. to download and install.</system:String> |
|||
<system:String x:Key="Slogan">We will continue to support locksmiths as always.</system:String> |
|||
<system:String x:Key="ScanToDownload">Scan to download the mobile app</system:String> |
|||
<system:String x:Key="GetLatestInfo">Get the latest news and support</system:String> |
|||
<system:String x:Key="ViewMore">View More</system:String> |
|||
<system:String x:Key="Loading">Loading...</system:String> |
|||
<system:String x:Key="CloudData">Cloud Data</system:String> |
|||
<system:String x:Key="UpdateNow">Update Now</system:String> |
|||
<system:String x:Key="UpdateLater">Update Later</system:String> |
|||
<system:String x:Key="NewVersionFound">New Version Found</system:String> |
|||
<system:String x:Key="UpdateTips">Update Tips</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Cloud Data Sync</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">During cloud data sync, the device will restart and the connection will temporarily disconnect. This is normal. Please wait for the system to reinitialize the device functions.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">To improve device stability, adjust the system settings: Control Panel -> Power Options -> Change plan settings -> Change advanced power settings -> USB settings -> USB selective suspend setting -> [Disabled]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Reminder: Please operate while the device is connected</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Open USB Drive (Test)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Close USB Drive (Test)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Select File</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Select Folder</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Keep Device Alive</system:String> |
|||
<system:String x:Key="SyncCloudData">Sync Cloud Data</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<!-- 应用程序字符串 --> |
|||
<system:String x:Key="AppTitle">AIK.Herramienta de Llave Inteligente</system:String> |
|||
<system:String x:Key="Settings">Configuración</system:String> |
|||
<system:String x:Key="Language">Idioma</system:String> |
|||
<system:String x:Key="AppSettings">Configuración de la Aplicación</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Configurar los parámetros básicos y preferencias de la aplicación</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Configuración de Interfaz</system:String> |
|||
<system:String x:Key="CacheSettings">Configuración de Caché</system:String> |
|||
<system:String x:Key="ClearCache">Limpiar Caché de Datos</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Idioma de la interfaz:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Lista de Modelos de Llave</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Guardar</system:String> |
|||
<system:String x:Key="CancelButton">Cancelar</system:String> |
|||
<system:String x:Key="ConfirmButton">Confirmar</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Buscar nombre de marca, inglés o pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Buscar nombre de llave de vehículo, inglés o pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Llave Remota:</system:String> |
|||
<system:String x:Key="Frequency">Frecuencia:</system:String> |
|||
<system:String x:Key="Chip">Información de Referencia:</system:String> |
|||
<system:String x:Key="Time">Hora:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Información de Referencia</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Configuración guardada correctamente</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Contáctanos por WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Contáctanos por Correo Electrónico</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Copiar WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Copiar Correo Electrónico</system:String> |
|||
<system:String x:Key="PhoneNumber">Teléfono Móvil</system:String> |
|||
<system:String x:Key="Integral">Puntos</system:String> |
|||
<system:String x:Key="Logout">Cerrar sesión</system:String> |
|||
<system:String x:Key="DeviceUpdate">Actualización de Dispositivo</system:String> |
|||
<system:String x:Key="CurrentVersion">Versión Actual</system:String> |
|||
<system:String x:Key="NewVersion">Última Versión</system:String> |
|||
<system:String x:Key="DeviceStatus">Estado del Dispositivo</system:String> |
|||
<system:String x:Key="DeviceName">Nombre del Dispositivo</system:String> |
|||
<system:String x:Key="UpgradeNow">Actualizar Ahora</system:String> |
|||
<system:String x:Key="GetVersion">Obtener Versión</system:String> |
|||
<system:String x:Key="AppVersion">Versión de la APP</system:String> |
|||
<system:String x:Key="ServerVersion">Versión del Servidor</system:String> |
|||
<system:String x:Key="DeviceVersion">Versión del Dispositivo</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Centro de Actualización</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Actualización de firmware, aplicación, dispositivo, etc.</system:String> |
|||
<system:String x:Key="BurnLog">Registro de grabación</system:String> |
|||
<system:String x:Key="KeyBurnLog">Registro de grabación de llaves</system:String> |
|||
<system:String x:Key="IntegralRecharge">Recarga de puntos</system:String> |
|||
<system:String x:Key="MembershipOpen">Membresía</system:String> |
|||
<system:String x:Key="IntegralRecord">Registro de puntos</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Tus puntos</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Ingrese el importe de recarga</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Seleccione método de pago</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Pagar</system:String> |
|||
<system:String x:Key="RemoteDetection">Detección Remota</system:String> |
|||
<system:String x:Key="RemoteCopy">Copia Remota</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Copia HCS / Código Fijo</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Haga clic en el botón Probar de abajo para detectar la frecuencia. Tras conectar el dispositivo, pulse un botón en la unidad secundaria dentro del rango de prueba y se mostrará la frecuencia.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Haga clic en el botón Probar de abajo para detectar la frecuencia. Tras conectar el dispositivo, pulse un botón en la unidad secundaria dentro del rango de prueba y se mostrará la frecuencia.</system:String> |
|||
<system:String x:Key="Mode">Modo:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Detección</system:String> |
|||
<system:String x:Key="SkipThisKey">Omitir esta tecla</system:String> |
|||
<system:String x:Key="Recheck">Volver a comprobar</system:String> |
|||
<system:String x:Key="StartCopying">Iniciar copia</system:String> |
|||
<system:String x:Key="Lock">Cerrar con llave</system:String> |
|||
<system:String x:Key="Unlock">Desbloquear</system:String> |
|||
<system:String x:Key="Trunk">Maletero</system:String> |
|||
<system:String x:Key="Panic">Buscar vehículo</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">No se encontró ninguna marca coincidente</system:String> |
|||
<system:String x:Key="TryOtherKeywords">No se encontró ninguna marca coincidente</system:String> |
|||
<system:String x:Key="NoKeyData">Sin datos de la llave disponibles</system:String> |
|||
|
|||
<system:String x:Key="Data">Datos:</system:String> |
|||
<system:String x:Key="Type">Tipo:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Tasa de bits:</system:String> |
|||
<system:String x:Key="BitCode">Longitud en bits:</system:String> |
|||
<system:String x:Key="StartBurning">Iniciar Programación</system:String> |
|||
<system:String x:Key="Tip">Consejo</system:String> |
|||
<system:String x:Key="HomeTip">¡Recomiéndalo a tus amigos! Escanea el código QR con WeChat, QQ, etc. para descargar e instalar.</system:String> |
|||
<system:String x:Key="Slogan">Seguiremos apoyando a los cerrajeros como siempre.</system:String> |
|||
<system:String x:Key="ScanToDownload">Escanea para descargar la aplicación móvil</system:String> |
|||
<system:String x:Key="GetLatestInfo">Obtén las últimas noticias y soporte</system:String> |
|||
<system:String x:Key="ViewMore">Ver más</system:String> |
|||
<system:String x:Key="Loading">Cargando...</system:String> |
|||
<system:String x:Key="CloudData">Datos en la Nube</system:String> |
|||
<system:String x:Key="UpdateNow">Actualizar Ahora</system:String> |
|||
<system:String x:Key="UpdateLater">Actualizar Más Tarde</system:String> |
|||
<system:String x:Key="NewVersionFound">Nueva Versión Encontrada</system:String> |
|||
<system:String x:Key="UpdateTips">Consejos de Actualización</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Sincronización de datos en la nube</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Durante la sincronización de datos en la nube, el dispositivo se reiniciará y la conexión se desconectará temporalmente. Esto es normal. Espere pacientemente a que el sistema reinicialice las funciones del dispositivo.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Para mejorar la estabilidad del dispositivo, ajuste la configuración del sistema: Panel de control -> Opciones de energía -> Cambiar la configuración del plan -> Cambiar la configuración avanzada de energía -> Configuración de USB -> Configuración de suspensión selectiva de USB -> [Deshabilitado]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Recordatorio: realice la operación mientras el dispositivo esté conectado</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Abrir unidad USB (prueba)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Cerrar unidad USB (prueba)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Seleccionar archivo</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Seleccionar carpeta</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Mantener el dispositivo activo</system:String> |
|||
<system:String x:Key="SyncCloudData">Sincronizar datos en la nube</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. ابزار کلید هوشمند</system:String> |
|||
<system:String x:Key="Settings">تنظیمات</system:String> |
|||
<system:String x:Key="Language">زبان</system:String> |
|||
<system:String x:Key="AppSettings">تنظیمات برنامه</system:String> |
|||
<system:String x:Key="AppSettingsDescription">پیکربندی پارامترهای اصلی و ترجیحات برنامه</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">تنظیمات رابط</system:String> |
|||
<system:String x:Key="CacheSettings">تنظیمات کش</system:String> |
|||
<system:String x:Key="ClearCache">پاک کردن کش دادهها</system:String> |
|||
<system:String x:Key="InterfaceLanguage">زبان رابط:</system:String> |
|||
<system:String x:Key="KeyModelTitle">لیست مدلهای کلید</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">ذخیره</system:String> |
|||
<system:String x:Key="CancelButton">لغو</system:String> |
|||
<system:String x:Key="ConfirmButton">تایید</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">جستجوی نام برند، انگلیسی یا پینیین...</system:String> |
|||
<system:String x:Key="SearchKeyModel">جستجوی نام کلید خودرو، انگلیسی یا پینیین...</system:String> |
|||
|
|||
<system:String x:Key="Remote">دستگاه فرعی:</system:String> |
|||
<system:String x:Key="Frequency">فرکانس:</system:String> |
|||
<system:String x:Key="Chip">اطلاعات مرجع:</system:String> |
|||
<system:String x:Key="Time">زمان:</system:String> |
|||
<system:String x:Key="ID">شناسه:</system:String> |
|||
|
|||
<system:String x:Key="Information">اطلاعات مرجع</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">تنظیمات با موفقیت ذخیره شد</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">تماس با ما از طریق ویچت</system:String> |
|||
<system:String x:Key="ContactEmail">تماس با ما از طریق ایمیل</system:String> |
|||
<system:String x:Key="ContactWechatCopy">کپی ویچت</system:String> |
|||
<system:String x:Key="ContactEmailCopy">کپی ایمیل</system:String> |
|||
<system:String x:Key="PhoneNumber">تلفن همراه</system:String> |
|||
<system:String x:Key="Integral">امتیاز</system:String> |
|||
<system:String x:Key="Logout">خروج</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">بهروزرسانی دستگاه</system:String> |
|||
<system:String x:Key="CurrentVersion">نسخه فعلی</system:String> |
|||
<system:String x:Key="NewVersion">آخرین نسخه</system:String> |
|||
<system:String x:Key="DeviceStatus">وضعیت دستگاه</system:String> |
|||
<system:String x:Key="DeviceName">نام دستگاه</system:String> |
|||
<system:String x:Key="UpgradeNow">اکنون بهروزرسانی کنید</system:String> |
|||
<system:String x:Key="GetVersion">دریافت نسخه</system:String> |
|||
<system:String x:Key="AppVersion">نسخه برنامه</system:String> |
|||
<system:String x:Key="ServerVersion">نسخه سرور</system:String> |
|||
<system:String x:Key="DeviceVersion">نسخه دستگاه</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">مرکز بهروزرسانی</system:String> |
|||
<system:String x:Key="UpdateCenterTips">بهروزرسانی فیلموار، برنامه، دستگاه و غیره</system:String> |
|||
<system:String x:Key="BurnLog">گزارش سوزنده</system:String> |
|||
<system:String x:Key="KeyBurnLog">تاریخچه سوزنده کلید</system:String> |
|||
<system:String x:Key="IntegralRecharge">شارژ امتیاز</system:String> |
|||
<system:String x:Key="MembershipOpen">عضویت</system:String> |
|||
<system:String x:Key="IntegralRecord">سابقه امتیاز</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">امتیازهای شما</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">مبلغ شارژ را وارد کنید</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">روش پرداخت را انتخاب کنید</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">پرداخت ویچت</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">پرداخت</system:String> |
|||
<system:String x:Key="RemoteDetection">تشخیص از راه دور</system:String> |
|||
<system:String x:Key="RemoteCopy">کپی از راه دور</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">کپی HCS / کد ثابت</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">برای تشخیص فرکانس، روی دکمهٔ تست زیر کلیک کنید. پس از اتصال دستگاه، یکی از دکمههای واحد فرعی را در محدودهٔ قابل تست فشار دهید تا فرکانس نمایش داده شود.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">برای تشخیص فرکانس، روی دکمهٔ تست زیر کلیک کنید. پس از اتصال دستگاه، یکی از دکمههای واحد فرعی را در محدودهٔ قابل تست فشار دهید تا فرکانس نمایش داده شود.</system:String> |
|||
<system:String x:Key="Mode">حالت:</system:String> |
|||
|
|||
<system:String x:Key="Detection">تشخیص</system:String> |
|||
<system:String x:Key="SkipThisKey">رد کردن این کلید</system:String> |
|||
<system:String x:Key="Recheck">بررسی مجدد</system:String> |
|||
<system:String x:Key="StartCopying">شروع کپی</system:String> |
|||
<system:String x:Key="Lock">قفل کردن</system:String> |
|||
<system:String x:Key="Unlock">باز کردن قفل</system:String> |
|||
<system:String x:Key="Trunk">صندوق عقب</system:String> |
|||
<system:String x:Key="Panic">دکمه پانیک</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">هیچ برند مطابقی یافت نشد</system:String> |
|||
<system:String x:Key="TryOtherKeywords">هیچ برند مطابقی یافت نشد</system:String> |
|||
<system:String x:Key="NoKeyData">دادههای کلید در دسترس نیست</system:String> |
|||
|
|||
<system:String x:Key="Data">دادهها:</system:String> |
|||
<system:String x:Key="Type">نوع:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">نرخ بیت:</system:String> |
|||
<system:String x:Key="BitCode">طول بیت:</system:String> |
|||
<system:String x:Key="StartBurning">شروع برنامهریزی</system:String> |
|||
<system:String x:Key="Tip">نکته</system:String> |
|||
<system:String x:Key="HomeTip">به دوستان خود پیشنهاد دهید! با استفاده از ویچت، کیوکیو و غیره کد QR را اسکن کنید تا دانلود و نصب شود.</system:String> |
|||
<system:String x:Key="Slogan">همچون گذشته، همچنان از قفلسازان عزیز حمایت خواهیم کرد.</system:String> |
|||
<system:String x:Key="ScanToDownload">برای دانلود برنامه موبایل اسکن کنید</system:String> |
|||
<system:String x:Key="GetLatestInfo">جدیدترین اخبار و پشتیبانی را دریافت کنید</system:String> |
|||
<system:String x:Key="ViewMore">مشاهده بیشتر</system:String> |
|||
<system:String x:Key="Loading">در حال بارگذاری...</system:String> |
|||
<system:String x:Key="CloudData">دادههای ابری</system:String> |
|||
<system:String x:Key="UpdateNow">اکنون بهروزرسانی کنید</system:String> |
|||
<system:String x:Key="UpdateLater">بعداً بهروزرسانی کنید</system:String> |
|||
<system:String x:Key="NewVersionFound">نسخه جدید پیدا شد</system:String> |
|||
<system:String x:Key="UpdateTips">نکات بهروزرسانی</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">همگامسازی دادههای ابری</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">در هنگام همگامسازی دادههای ابری، دستگاه راهاندازی مجدد میشود و اتصال بهطور موقت قطع خواهد شد. این طبیعی است. لطفاً با حوصله منتظر بمانید تا سیستم عملکردهای دستگاه را دوباره مقداردهی کند.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">برای افزایش پایداری دستگاه، تنظیمات سیستم را تغییر دهید: کنترل پنل -> گزینههای برق -> تغییر تنظیمات طرح -> تغییر تنظیمات پیشرفته برق -> تنظیمات USB -> تنظیم تعلیق انتخابی USB -> [غیرفعال]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">یادآوری: لطفاً عملیات را زمانی انجام دهید که دستگاه متصل است</system:String> |
|||
<system:String x:Key="OpenUDiskTest">باز کردن درایو USB (آزمایشی)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">بستن درایو USB (آزمایشی)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 انتخاب فایل</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 انتخاب پوشه</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">دستگاه را فعال نگه دارید</system:String> |
|||
<system:String x:Key="SyncCloudData">همگامسازی دادههای ابری</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Outil de clés intelligent</system:String> |
|||
<system:String x:Key="Settings">Paramètres</system:String> |
|||
<system:String x:Key="Language">Langue</system:String> |
|||
<system:String x:Key="AppSettings">Paramètres de l'application</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Configurer les paramètres de base et les préférences de l'application</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Paramètres d'interface</system:String> |
|||
<system:String x:Key="CacheSettings">Paramètres du cache</system:String> |
|||
<system:String x:Key="ClearCache">Effacer le cache de données</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Langue de l'interface :</system:String> |
|||
<system:String x:Key="KeyModelTitle">Liste des modèles de clés</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Enregistrer</system:String> |
|||
<system:String x:Key="CancelButton">Annuler</system:String> |
|||
<system:String x:Key="ConfirmButton">Confirmer</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Rechercher un nom de marque, en anglais ou en pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Rechercher un nom de clé de véhicule, en anglais ou en pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Sous-unité :</system:String> |
|||
<system:String x:Key="Frequency">Fréquence :</system:String> |
|||
<system:String x:Key="Chip">Informations de référence :</system:String> |
|||
<system:String x:Key="Time">Heure :</system:String> |
|||
<system:String x:Key="ID">ID :</system:String> |
|||
|
|||
<system:String x:Key="Information">Informations de référence</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Paramètres enregistrés avec succès</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Contactez-nous sur WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Contactez-nous par e-mail</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Copier WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Copier l'e-mail</system:String> |
|||
<system:String x:Key="PhoneNumber">Téléphone</system:String> |
|||
<system:String x:Key="Integral">Points</system:String> |
|||
<system:String x:Key="Logout">Déconnexion</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Mise à jour de l'appareil</system:String> |
|||
<system:String x:Key="CurrentVersion">Version actuelle</system:String> |
|||
<system:String x:Key="NewVersion">Dernière version</system:String> |
|||
<system:String x:Key="DeviceStatus">État de l'appareil</system:String> |
|||
<system:String x:Key="DeviceName">Nom de l'appareil</system:String> |
|||
<system:String x:Key="UpgradeNow">Mettre à jour maintenant</system:String> |
|||
<system:String x:Key="GetVersion">Obtenir la version</system:String> |
|||
<system:String x:Key="AppVersion">Version de l'application</system:String> |
|||
<system:String x:Key="ServerVersion">Version du serveur</system:String> |
|||
<system:String x:Key="DeviceVersion">Version de l'appareil</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Mises à jour de version</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Mises à jour du firmware, de l'application, de l'appareil, etc.</system:String> |
|||
<system:String x:Key="BurnLog">Journal d'écriture</system:String> |
|||
<system:String x:Key="KeyBurnLog">Historique d'écriture des clés</system:String> |
|||
<system:String x:Key="IntegralRecharge">Recharger des points</system:String> |
|||
<system:String x:Key="MembershipOpen">Adhésion</system:String> |
|||
<system:String x:Key="IntegralRecord">Historique des points</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Vos points</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Saisir le montant de recharge</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Sélectionnez le mode de paiement</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Payer</system:String> |
|||
<system:String x:Key="RemoteDetection">Détection à distance</system:String> |
|||
<system:String x:Key="RemoteCopy">Copie à distance</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Copie HCS / Code fixe</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Cliquez sur le bouton Tester ci-dessous pour détecter la fréquence. Après avoir connecté l’appareil, appuyez sur un bouton de l’unité secondaire à portée de test, et la fréquence s’affichera.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Cliquez sur le bouton Tester ci-dessous pour détecter la fréquence. Après avoir connecté l’appareil, appuyez sur un bouton de l’unité secondaire à portée de test, et la fréquence s’affichera.</system:String> |
|||
<system:String x:Key="Mode">Mode :</system:String> |
|||
|
|||
<system:String x:Key="Detection">Détection</system:String> |
|||
<system:String x:Key="SkipThisKey">Ignorer cette touche</system:String> |
|||
<system:String x:Key="Recheck">Revérifier</system:String> |
|||
<system:String x:Key="StartCopying">Commencer la copie</system:String> |
|||
<system:String x:Key="Lock">Verrouiller</system:String> |
|||
<system:String x:Key="Unlock">Déverrouiller</system:String> |
|||
<system:String x:Key="Trunk">Coffre</system:String> |
|||
<system:String x:Key="Panic">Recherche de véhicule</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Aucune marque correspondante trouvée</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Aucune marque correspondante trouvée</system:String> |
|||
<system:String x:Key="NoKeyData">Aucune donnée de clé disponible</system:String> |
|||
|
|||
<system:String x:Key="Data">Données :</system:String> |
|||
<system:String x:Key="Type">Type :</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Débit binaire :</system:String> |
|||
<system:String x:Key="BitCode">Longueur en bits :</system:String> |
|||
<system:String x:Key="StartBurning">Démarrer la programmation</system:String> |
|||
<system:String x:Key="Tip">Astuce</system:String> |
|||
<system:String x:Key="HomeTip">Recommandez-le à vos amis ! Scannez le code QR avec WeChat, QQ, etc. pour télécharger et installer.</system:String> |
|||
<system:String x:Key="Slogan">Nous continuerons à accompagner les serruriers comme toujours.</system:String> |
|||
<system:String x:Key="ScanToDownload">Scannez pour télécharger l’application mobile</system:String> |
|||
<system:String x:Key="GetLatestInfo">Obtenez les dernières actualités et le support</system:String> |
|||
<system:String x:Key="ViewMore">Voir plus</system:String> |
|||
<system:String x:Key="Loading">Chargement...</system:String> |
|||
<system:String x:Key="CloudData">Données Cloud</system:String> |
|||
<system:String x:Key="UpdateNow">Mettre à Jour Maintenant</system:String> |
|||
<system:String x:Key="UpdateLater">Mettre à Jour Plus Tard</system:String> |
|||
<system:String x:Key="NewVersionFound">Nouvelle Version Trouvée</system:String> |
|||
<system:String x:Key="UpdateTips">Conseils de Mise à Jour</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Synchronisation des données cloud</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Pendant la synchronisation des données cloud, l'appareil redémarrera et la connexion sera temporairement interrompue. C'est normal. Veuillez patienter pendant que le système réinitialise les fonctions de l'appareil.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Pour améliorer la stabilité de l'appareil, ajustez les paramètres système : Panneau de configuration -> Options d’alimentation -> Modifier les paramètres du mode -> Modifier les paramètres d’alimentation avancés -> Paramètres USB -> Paramètre de suspension sélective USB -> [Désactivé]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Rappel : veuillez effectuer l’opération lorsque l'appareil est connecté</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Ouvrir la clé USB (test)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Fermer la clé USB (test)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Sélectionner un fichier</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Sélectionner un dossier</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Maintenir l'appareil actif</system:String> |
|||
<system:String x:Key="SyncCloudData">Synchroniser les données cloud</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. כלי מפתח חכם</system:String> |
|||
<system:String x:Key="Settings">הגדרות</system:String> |
|||
<system:String x:Key="Language">שפה</system:String> |
|||
<system:String x:Key="AppSettings">הגדרות אפליקציה</system:String> |
|||
<system:String x:Key="AppSettingsDescription">הגדרת פרמטרים ו העדפות בסיסיות לאפליקציה</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">הגדרות ממשק</system:String> |
|||
<system:String x:Key="CacheSettings">הגדרות מטמון</system:String> |
|||
<system:String x:Key="ClearCache">נקה מטמון נתונים</system:String> |
|||
<system:String x:Key="InterfaceLanguage">שפת ממשק:</system:String> |
|||
<system:String x:Key="KeyModelTitle">רשימת דגמי מפתחות</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">שמור</system:String> |
|||
<system:String x:Key="CancelButton">בטל</system:String> |
|||
<system:String x:Key="ConfirmButton">אישור</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">חפש שם מותג, אנגלית או פיניין...</system:String> |
|||
<system:String x:Key="SearchKeyModel">חפש שם מפתח רכב, אנגלית או פיניין...</system:String> |
|||
|
|||
<system:String x:Key="Remote">יחידת משנה:</system:String> |
|||
<system:String x:Key="Frequency">תדר:</system:String> |
|||
<system:String x:Key="Chip">מידע רפרנטי:</system:String> |
|||
<system:String x:Key="Time">זמן:</system:String> |
|||
<system:String x:Key="ID">מזהה:</system:String> |
|||
|
|||
<system:String x:Key="Information">מידע רפרנטי</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">ההגדרות נשמרו בהצלחה</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">צור איתנו קשר בויצ'אט</system:String> |
|||
<system:String x:Key="ContactEmail">צור איתנו קשר באימייל</system:String> |
|||
<system:String x:Key="ContactWechatCopy">העתק ויצ'אט</system:String> |
|||
<system:String x:Key="ContactEmailCopy">העתק אימייל</system:String> |
|||
<system:String x:Key="PhoneNumber">טלפון</system:String> |
|||
<system:String x:Key="Integral">נקודות</system:String> |
|||
<system:String x:Key="Logout">התנתק</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">עדכון התקן</system:String> |
|||
<system:String x:Key="CurrentVersion">גרסה נוכחית</system:String> |
|||
<system:String x:Key="NewVersion">גרסה חדשה</system:String> |
|||
<system:String x:Key="DeviceStatus">מצב התקן</system:String> |
|||
<system:String x:Key="DeviceName">שם התקן</system:String> |
|||
<system:String x:Key="UpgradeNow">עדכן כעת</system:String> |
|||
<system:String x:Key="GetVersion">קבל גרסה</system:String> |
|||
<system:String x:Key="AppVersion">גרסה של האפליקציה</system:String> |
|||
<system:String x:Key="ServerVersion">גרסה של השרת</system:String> |
|||
<system:String x:Key="DeviceVersion">גרסה של ההתקן</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">מרכז עדכונים</system:String> |
|||
<system:String x:Key="UpdateCenterTips">עדכוני פירמה, אפליקציה, התקן וכו'</system:String> |
|||
<system:String x:Key="BurnLog">יומן תהליך</system:String> |
|||
<system:String x:Key="KeyBurnLog">היסטוריה של תהליך מפתחות</system:String> |
|||
<system:String x:Key="IntegralRecharge">טעינת נקודות</system:String> |
|||
<system:String x:Key="MembershipOpen">מנוי</system:String> |
|||
<system:String x:Key="IntegralRecord">רשומת נקודות</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">הנקודות שלך</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">הזן סכום טעינה</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">בחר אמצעי תשלום</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">שלם</system:String> |
|||
<system:String x:Key="RemoteDetection">זיהוי מרחוק</system:String> |
|||
<system:String x:Key="RemoteCopy">העתקה מרחוק</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">העתקת HCS / קוד קבוע</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">לחצו על כפתור הבדיקה להלן כדי לזהות את התדר. לאחר חיבור המכשיר, לחצו על כפתור ביחידת המשנה בתוך טווח הבדיקה, והתדר יוצג.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">לחצו על כפתור הבדיקה להלן כדי לזהות את התדר. לאחר חיבור המכשיר, לחצו על כפתור ביחידת המשנה בתוך טווח הבדיקה, והתדר יוצג.</system:String> |
|||
<system:String x:Key="Mode">מצב:</system:String> |
|||
|
|||
<system:String x:Key="Detection">זיהוי</system:String> |
|||
<system:String x:Key="SkipThisKey">דלג על מקש זה</system:String> |
|||
<system:String x:Key="Recheck">בדוק שוב</system:String> |
|||
<system:String x:Key="StartCopying">התחל העתקה</system:String> |
|||
<system:String x:Key="Lock">לנעול</system:String> |
|||
<system:String x:Key="Unlock">פתח נעילה</system:String> |
|||
<system:String x:Key="Trunk">תא מטען</system:String> |
|||
<system:String x:Key="Panic">מצא רכב</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">לא נמצאה מותג תואם</system:String> |
|||
<system:String x:Key="TryOtherKeywords">לא נמצאה מותג תואם</system:String> |
|||
<system:String x:Key="NoKeyData">אין נתוני מפתח זמינים</system:String> |
|||
|
|||
<system:String x:Key="Data">נתונים:</system:String> |
|||
<system:String x:Key="Type">סוג:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">קצב סיביות:</system:String> |
|||
<system:String x:Key="BitCode">אורך הסיביות:</system:String> |
|||
<system:String x:Key="StartBurning">התחל תכנות</system:String> |
|||
<system:String x:Key="Tip">טיפ</system:String> |
|||
<system:String x:Key="HomeTip">המלץ לחבריך! סרוק את קוד ה-QR עם WeChat, QQ וכו' כדי להוריד ולהתקין.</system:String> |
|||
<system:String x:Key="Slogan">נמשיך לתמוך בנגרי המפתחות כרגיל.</system:String> |
|||
<system:String x:Key="ScanToDownload">סרוק כדי להוריד את האפליקציה לנייד</system:String> |
|||
<system:String x:Key="GetLatestInfo">קבל את העדכונים והתמיכה האחרונים</system:String> |
|||
<system:String x:Key="ViewMore">הצג עוד</system:String> |
|||
<system:String x:Key="Loading">טוען...</system:String> |
|||
<system:String x:Key="CloudData">נתונים בענן</system:String> |
|||
<system:String x:Key="UpdateNow">עדכן עכשיו</system:String> |
|||
<system:String x:Key="UpdateLater">עדכן מאוחר יותר</system:String> |
|||
<system:String x:Key="NewVersionFound">נמצאה גרסה חדשה</system:String> |
|||
<system:String x:Key="UpdateTips">טיפים לעדכון</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">סנכרון נתוני ענן</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">במהלך סנכרון נתוני הענן, המכשיר יופעל מחדש והחיבור יתנתק באופן זמני. זה תקין. אנא המתן בסבלנות בזמן שהמערכת מאתחלת מחדש את פונקציות המכשיר.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">כדי לשפר את יציבות המכשיר, שנה את הגדרות המערכת: לוח הבקרה -> אפשרויות צריכת חשמל -> שנה הגדרות תוכנית -> שנה הגדרות צריכת חשמל מתקדמות -> הגדרות USB -> הגדרת השהיה סלקטיבית של USB -> [מושבת]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">תזכורת: יש לבצע את הפעולה כשהמכשיר מחובר</system:String> |
|||
<system:String x:Key="OpenUDiskTest">פתח כונן USB (בדיקה)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">סגור כונן USB (בדיקה)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 בחר קובץ</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 בחר תיקייה</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">השאר את המכשיר פעיל</system:String> |
|||
<system:String x:Key="SyncCloudData">סנכרן נתוני ענן</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. स्मार्ट की टूल</system:String> |
|||
<system:String x:Key="Settings">सेटिंग्स</system:String> |
|||
<system:String x:Key="Language">भाषा</system:String> |
|||
<system:String x:Key="AppSettings">ऐप सेटिंग्स</system:String> |
|||
<system:String x:Key="AppSettingsDescription">ऐप के मूल पैरामीटर और पसंद कॉन्फ़िगर करें</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">इंटरफ़ेस सेटिंग्स</system:String> |
|||
<system:String x:Key="CacheSettings">कैश सेटिंग्स</system:String> |
|||
<system:String x:Key="ClearCache">डेटा कैश साफ़ करें</system:String> |
|||
<system:String x:Key="InterfaceLanguage">इंटरफ़ेस भाषा:</system:String> |
|||
<system:String x:Key="KeyModelTitle">की मॉडल सूची</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">सहेजें</system:String> |
|||
<system:String x:Key="CancelButton">रद्द करें</system:String> |
|||
<system:String x:Key="ConfirmButton">पुष्टि करें</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">ब्रांड नाम, अंग्रेजी या पिनयिन में खोजें...</system:String> |
|||
<system:String x:Key="SearchKeyModel">वाहन की नाम, अंग्रेजी या पिनयिन में खोजें...</system:String> |
|||
|
|||
<system:String x:Key="Remote">उपकरण:</system:String> |
|||
<system:String x:Key="Frequency">आवृत्ति:</system:String> |
|||
<system:String x:Key="Chip">संदर्भ जानकारी:</system:String> |
|||
<system:String x:Key="Time">समय:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">संदर्भ जानकारी</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">सेटिंग्स सफलतापूर्वक सहेजी गई</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">हमसे वीचैट पर संपर्क करें</system:String> |
|||
<system:String x:Key="ContactEmail">हमसे ईमेल पर संपर्क करें</system:String> |
|||
<system:String x:Key="ContactWechatCopy">वीचैट कॉपी करें</system:String> |
|||
<system:String x:Key="ContactEmailCopy">ईमेल कॉपी करें</system:String> |
|||
<system:String x:Key="PhoneNumber">मोबाइल</system:String> |
|||
<system:String x:Key="Integral">अंक</system:String> |
|||
<system:String x:Key="Logout">लॉग आउट</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">डिवाइस अपडेट</system:String> |
|||
<system:String x:Key="CurrentVersion">वर्तमान संस्करण</system:String> |
|||
<system:String x:Key="NewVersion">नवीनतम संस्करण</system:String> |
|||
<system:String x:Key="DeviceStatus">डिवाइस स्थिति</system:String> |
|||
<system:String x:Key="DeviceName">डिवाइस नाम</system:String> |
|||
<system:String x:Key="UpgradeNow">अभी अपडेट करें</system:String> |
|||
<system:String x:Key="GetVersion">संस्करण प्राप्त करें</system:String> |
|||
<system:String x:Key="AppVersion">ऐप संस्करण</system:String> |
|||
<system:String x:Key="ServerVersion">सर्वर संस्करण</system:String> |
|||
<system:String x:Key="DeviceVersion">डिवाइस संस्करण</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">संस्करण अपडेट</system:String> |
|||
<system:String x:Key="UpdateCenterTips">फ़र्मवेयर, ऐप, डिवाइस आदि के अपडेट</system:String> |
|||
<system:String x:Key="BurnLog">बर्न लॉग</system:String> |
|||
<system:String x:Key="KeyBurnLog">की बर्न लॉग</system:String> |
|||
<system:String x:Key="IntegralRecharge">पॉइंट रिचार्ज</system:String> |
|||
<system:String x:Key="MembershipOpen">सदस्यता</system:String> |
|||
<system:String x:Key="IntegralRecord">पॉइंट रिकॉर्ड</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">आपके पॉइंट</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">रिचार्ज राशि दर्ज करें</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">भुगतान विधि चुनें</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">भुगतान</system:String> |
|||
<system:String x:Key="RemoteDetection">रिमोट डिटेक्शन</system:String> |
|||
<system:String x:Key="RemoteCopy">रिमोट कॉपी</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS / फिक्स्ड-कोड कॉपी</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">आवृत्ति का पता लगाने के लिए नीचे दिए गए टेस्ट बटन पर क्लिक करें। डिवाइस कनेक्ट करने के बाद, टेस्ट रेंज के भीतर सब-यूनिट का कोई बटन दबाएं, और आवृत्ति दिखाई देगी।</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">आवृत्ति का पता लगाने के लिए नीचे दिए गए टेस्ट बटन पर क्लिक करें। डिवाइस कनेक्ट करने के बाद, टेस्ट रेंज के भीतर सब-यूनिट का कोई बटन दबाएं, और आवृत्ति दिखाई देगी।</system:String> |
|||
<system:String x:Key="Mode">मोड:</system:String> |
|||
|
|||
<system:String x:Key="Detection">पता लगाना</system:String> |
|||
<system:String x:Key="SkipThisKey">इस कुंजी को छोड़ें</system:String> |
|||
<system:String x:Key="Recheck">फिर से जांचें</system:String> |
|||
<system:String x:Key="StartCopying">कॉपी करना शुरू करें</system:String> |
|||
<system:String x:Key="Lock">ताला लगाएं</system:String> |
|||
<system:String x:Key="Unlock">ताला खोलें</system:String> |
|||
<system:String x:Key="Trunk">ट्रंक</system:String> |
|||
<system:String x:Key="Panic">आपातकालीन बजर</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">कोई मेल खाने वाला ब्रांड नहीं मिला</system:String> |
|||
<system:String x:Key="TryOtherKeywords">कोई मेल खाने वाला ब्रांड नहीं मिला</system:String> |
|||
<system:String x:Key="NoKeyData">कुंजी डेटा उपलब्ध नहीं है</system:String> |
|||
|
|||
<system:String x:Key="Data">डेटा:</system:String> |
|||
<system:String x:Key="Type">प्रकार:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">बिटरेट:</system:String> |
|||
<system:String x:Key="BitCode">बिट लंबाई:</system:String> |
|||
<system:String x:Key="StartBurning">प्रोग्रामिंग शुरू करें</system:String> |
|||
<system:String x:Key="Tip">सुझाव</system:String> |
|||
<system:String x:Key="HomeTip">इसे अपने दोस्तों को अवश्य बताएं! WeChat, QQ आदि से QR कोड स्कैन करके डाउनलोड और इंस्टॉल करें।</system:String> |
|||
<system:String x:Key="Slogan">हम हमेशा की तरह लॉकस्मिथ्स का समर्थन करते रहेंगे।</system:String> |
|||
<system:String x:Key="ScanToDownload">मोबाइल ऐप डाउनलोड करने के लिए स्कैन करें</system:String> |
|||
<system:String x:Key="GetLatestInfo">नवीनतम जानकारी और सहायता प्राप्त करें</system:String> |
|||
<system:String x:Key="ViewMore">अधिक देखें</system:String> |
|||
<system:String x:Key="Loading">लोड हो रहा है...</system:String> |
|||
<system:String x:Key="CloudData">क्लाउड डेटा</system:String> |
|||
<system:String x:Key="UpdateNow">अभी अपडेट करें</system:String> |
|||
<system:String x:Key="UpdateLater">बाद में अपडेट करें</system:String> |
|||
<system:String x:Key="NewVersionFound">नew वर्जन पाया गया</system:String> |
|||
<system:String x:Key="UpdateTips">अपडेट टिप्स</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">क्लाउड डेटा सिंक</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">क्लाउड डेटा सिंक करते समय, डिवाइस रीस्टार्ट होगा और कनेक्शन अस्थायी रूप से टूट जाएगा। यह सामान्य है। सिस्टम के डिवाइस फ़ंक्शन को दोबारा प्रारंभ करने तक कृपया धैर्य रखें।</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">डिवाइस की स्थिरता बढ़ाने के लिए सिस्टम सेटिंग समायोजित करें: कंट्रोल पैनल -> पावर ऑप्शंस -> प्लान सेटिंग बदलें -> उन्नत पावर सेटिंग बदलें -> USB सेटिंग्स -> USB सेलेक्टिव सस्पेंड सेटिंग -> [अक्षम]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">याद दिलाना: कृपया डिवाइस कनेक्टेड होने पर ही ऑपरेशन करें</system:String> |
|||
<system:String x:Key="OpenUDiskTest">USB ड्राइव खोलें (परीक्षण)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">USB ड्राइव बंद करें (परीक्षण)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 फ़ाइल चुनें</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 फ़ोल्डर चुनें</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">डिवाइस को सक्रिय रखें</system:String> |
|||
<system:String x:Key="SyncCloudData">क्लाउड डेटा सिंक करें</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Alat Kunci Cerdas</system:String> |
|||
<system:String x:Key="Settings">Pengaturan</system:String> |
|||
<system:String x:Key="Language">Bahasa</system:String> |
|||
<system:String x:Key="AppSettings">Pengaturan Aplikasi</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Konfigurasi parameter dasar dan preferensi aplikasi</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Pengaturan Antarmuka</system:String> |
|||
<system:String x:Key="CacheSettings">Pengaturan Cache</system:String> |
|||
<system:String x:Key="ClearCache">Hapus cache data</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Bahasa antarmuka:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Daftar Model Kunci</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Simpan</system:String> |
|||
<system:String x:Key="CancelButton">Batal</system:String> |
|||
<system:String x:Key="ConfirmButton">Konfirmasi</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Cari nama merek, bahasa Inggris, atau pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Cari nama kunci kendaraan, bahasa Inggris, atau pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Subunit:</system:String> |
|||
<system:String x:Key="Frequency">Frekuensi:</system:String> |
|||
<system:String x:Key="Chip">Informasi Referensi:</system:String> |
|||
<system:String x:Key="Time">Waktu:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Informasi Referensi</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Pengaturan berhasil disimpan</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Hubungi kami via WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Hubungi kami via Email</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Salin WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Salin Email</system:String> |
|||
<system:String x:Key="PhoneNumber">Telepon Seluler</system:String> |
|||
<system:String x:Key="Integral">Poin</system:String> |
|||
<system:String x:Key="Logout">Keluar</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Pembaruan Perangkat</system:String> |
|||
<system:String x:Key="CurrentVersion">Versi Saat Ini</system:String> |
|||
<system:String x:Key="NewVersion">Versi Terbaru</system:String> |
|||
<system:String x:Key="DeviceStatus">Status Perangkat</system:String> |
|||
<system:String x:Key="DeviceName">Nama Perangkat</system:String> |
|||
<system:String x:Key="UpgradeNow">Perbarui Sekarang</system:String> |
|||
<system:String x:Key="GetVersion">Dapatkan Versi</system:String> |
|||
<system:String x:Key="AppVersion">Versi Aplikasi</system:String> |
|||
<system:String x:Key="ServerVersion">Versi Server</system:String> |
|||
<system:String x:Key="DeviceVersion">Versi Perangkat</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Pembaruan Versi</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Pembaruan firmware, aplikasi, perangkat, dll.</system:String> |
|||
<system:String x:Key="BurnLog">Log Pembakaran</system:String> |
|||
<system:String x:Key="KeyBurnLog">Riwayat Pembakaran Kunci</system:String> |
|||
<system:String x:Key="IntegralRecharge">Isi ulang poin</system:String> |
|||
<system:String x:Key="MembershipOpen">Keanggotaan</system:String> |
|||
<system:String x:Key="IntegralRecord">Riwayat poin</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Poin Anda</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Masukkan jumlah isi ulang</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Pilih metode pembayaran</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Bayar</system:String> |
|||
<system:String x:Key="RemoteDetection">Deteksi Jarak Jauh</system:String> |
|||
<system:String x:Key="RemoteCopy">Salin Remote</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Salin HCS / Kode Tetap</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Klik tombol Uji di bawah untuk mendeteksi frekuensi. Setelah menghubungkan perangkat, tekan tombol pada unit sekunder dalam jangkauan pengujian, dan frekuensinya akan ditampilkan.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Klik tombol Uji di bawah untuk mendeteksi frekuensi. Setelah menghubungkan perangkat, tekan tombol pada unit sekunder dalam jangkauan pengujian, dan frekuensinya akan ditampilkan.</system:String> |
|||
<system:String x:Key="Mode">Mode:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Deteksi</system:String> |
|||
<system:String x:Key="SkipThisKey">Lewati kunci ini</system:String> |
|||
<system:String x:Key="Recheck">Periksa ulang</system:String> |
|||
<system:String x:Key="StartCopying">Mulai menyalin</system:String> |
|||
<system:String x:Key="Lock">Kunci</system:String> |
|||
<system:String x:Key="Unlock">Buka kunci</system:String> |
|||
<system:String x:Key="Trunk">Bagasi</system:String> |
|||
<system:String x:Key="Panic">Cari mobil</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Tidak ada merek yang cocok ditemukan</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Tidak ada merek yang cocok ditemukan</system:String> |
|||
<system:String x:Key="NoKeyData">Tidak ada data kunci tersedia</system:String> |
|||
|
|||
<system:String x:Key="Data">Data:</system:String> |
|||
<system:String x:Key="Type">Jenis:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Laju bit:</system:String> |
|||
<system:String x:Key="BitCode">Panjang bit:</system:String> |
|||
<system:String x:Key="StartBurning">Mulai Pemrograman</system:String> |
|||
<system:String x:Key="Tip">Tips</system:String> |
|||
<system:String x:Key="HomeTip">Rekomendasikan ke teman Anda! Pindai kode QR dengan WeChat, QQ, dll. untuk mengunduh dan menginstal.</system:String> |
|||
<system:String x:Key="Slogan">Kami akan terus mendukung para tukang kunci seperti biasa.</system:String> |
|||
<system:String x:Key="ScanToDownload">Pindai untuk mengunduh aplikasi seluler</system:String> |
|||
<system:String x:Key="GetLatestInfo">Dapatkan berita terbaru dan dukungan</system:String> |
|||
<system:String x:Key="ViewMore">Lihat lainnya</system:String> |
|||
<system:String x:Key="Loading">Memuat...</system:String> |
|||
<system:String x:Key="CloudData">Data Cloud</system:String> |
|||
<system:String x:Key="UpdateNow">Perbarui Sekarang</system:String> |
|||
<system:String x:Key="UpdateLater">Perbarui Nanti</system:String> |
|||
<system:String x:Key="NewVersionFound">Versi Baru Ditemukan</system:String> |
|||
<system:String x:Key="UpdateTips">Tips Pembaruan</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Sinkronisasi data cloud</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Saat menyinkronkan data cloud, perangkat akan dimulai ulang dan koneksi akan terputus sementara. Ini normal. Harap tunggu dengan sabar hingga sistem menginisialisasi ulang fungsi perangkat.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Untuk meningkatkan stabilitas perangkat, sesuaikan pengaturan sistem: Control Panel -> Opsi Daya -> Ubah pengaturan paket -> Ubah pengaturan daya lanjutan -> Pengaturan USB -> Pengaturan penangguhan selektif USB -> [Dinonaktifkan]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Pengingat: Harap lakukan operasi saat perangkat terhubung</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Buka drive USB (uji)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Tutup drive USB (uji)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Pilih file</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Pilih folder</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Jaga perangkat tetap aktif</system:String> |
|||
<system:String x:Key="SyncCloudData">Sinkronkan data cloud</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. स्मार्ट की टूल</system:String> |
|||
<system:String x:Key="Settings">सेटिंग्स</system:String> |
|||
<system:String x:Key="Language">भाषा</system:String> |
|||
<system:String x:Key="AppSettings">ऐप सेटिंग्स</system:String> |
|||
<system:String x:Key="AppSettingsDescription">ऐप के मूल पैरामीटर और पसंद कॉन्फ़िगर करें</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">इंटरफ़ेस सेटिंग्स</system:String> |
|||
<system:String x:Key="CacheSettings">कैश सेटिंग्स</system:String> |
|||
<system:String x:Key="ClearCache">डेटा कैश साफ़ करें</system:String> |
|||
<system:String x:Key="InterfaceLanguage">इंटरफ़ेस भाषा:</system:String> |
|||
<system:String x:Key="KeyModelTitle">की मॉडल सूची</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">सहेजें</system:String> |
|||
<system:String x:Key="CancelButton">रद्द करें</system:String> |
|||
<system:String x:Key="ConfirmButton">पुष्टि करें</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">ब्रांड नाम, अंग्रेजी या पिनयिन में खोजें...</system:String> |
|||
<system:String x:Key="SearchKeyModel">वाहन की नाम, अंग्रेजी या पिनयिन में खोजें...</system:String> |
|||
|
|||
<system:String x:Key="Remote">उपकरण:</system:String> |
|||
<system:String x:Key="Frequency">आवृत्ति:</system:String> |
|||
<system:String x:Key="Chip">संदर्भ जानकारी:</system:String> |
|||
<system:String x:Key="Time">समय:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">संदर्भ जानकारी</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">सेटिंग्स सफलतापूर्वक सहेजी गई</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">हमसे वीचैट पर संपर्क करें</system:String> |
|||
<system:String x:Key="ContactEmail">हमसे ईमेल पर संपर्क करें</system:String> |
|||
<system:String x:Key="ContactWechatCopy">वीचैट कॉपी करें</system:String> |
|||
<system:String x:Key="ContactEmailCopy">ईमेल कॉपी करें</system:String> |
|||
<system:String x:Key="PhoneNumber">मोबाइल</system:String> |
|||
<system:String x:Key="Integral">अंक</system:String> |
|||
<system:String x:Key="Logout">लॉग आउट</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">डिवाइस अपडेट</system:String> |
|||
<system:String x:Key="CurrentVersion">वर्तमान संस्करण</system:String> |
|||
<system:String x:Key="NewVersion">नवीनतम संस्करण</system:String> |
|||
<system:String x:Key="DeviceStatus">डिवाइस स्थिति</system:String> |
|||
<system:String x:Key="DeviceName">डिवाइस नाम</system:String> |
|||
<system:String x:Key="UpgradeNow">अभी अपडेट करें</system:String> |
|||
<system:String x:Key="GetVersion">संस्करण प्राप्त करें</system:String> |
|||
<system:String x:Key="AppVersion">ऐप संस्करण</system:String> |
|||
<system:String x:Key="ServerVersion">सर्वर संस्करण</system:String> |
|||
<system:String x:Key="DeviceVersion">डिवाइस संस्करण</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">संस्करण अपडेट</system:String> |
|||
<system:String x:Key="UpdateCenterTips">फ़र्मवेयर, ऐप, डिवाइस आदि के अपडेट</system:String> |
|||
<system:String x:Key="BurnLog">बर्न लॉग</system:String> |
|||
<system:String x:Key="KeyBurnLog">की बर्न लॉग</system:String> |
|||
<system:String x:Key="IntegralRecharge">पॉइंट रिचार्ज</system:String> |
|||
<system:String x:Key="MembershipOpen">सदस्यता</system:String> |
|||
<system:String x:Key="IntegralRecord">पॉइंट रिकॉर्ड</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">आपके पॉइंट</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">रिचार्ज राशि दर्ज करें</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">भुगतान विधि चुनें</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">भुगतान</system:String> |
|||
<system:String x:Key="RemoteDetection">रिमोट डिटेक्शन</system:String> |
|||
<system:String x:Key="RemoteCopy">रिमोट कॉपी</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS / फिक्स्ड-कोड कॉपी</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">आवृत्ति का पता लगाने के लिए नीचे दिए गए टेस्ट बटन पर क्लिक करें। डिवाइस कनेक्ट करने के बाद, टेस्ट रेंज के भीतर सब-यूनिट का कोई बटन दबाएं, और आवृत्ति दिखाई देगी।</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">आवृत्ति का पता लगाने के लिए नीचे दिए गए टेस्ट बटन पर क्लिक करें। डिवाइस कनेक्ट करने के बाद, टेस्ट रेंज के भीतर सब-यूनिट का कोई बटन दबाएं, और आवृत्ति दिखाई देगी।</system:String> |
|||
<system:String x:Key="Mode">मोड:</system:String> |
|||
|
|||
<system:String x:Key="Detection">पता लगाना</system:String> |
|||
<system:String x:Key="SkipThisKey">इस कुंजी को छोड़ें</system:String> |
|||
<system:String x:Key="Recheck">फिर से जांचें</system:String> |
|||
<system:String x:Key="StartCopying">कॉपी करना शुरू करें</system:String> |
|||
<system:String x:Key="Lock">ताला लगाएं</system:String> |
|||
<system:String x:Key="Unlock">ताला खोलें</system:String> |
|||
<system:String x:Key="Trunk">ट्रंक</system:String> |
|||
<system:String x:Key="Panic">आपातकालीन बजर</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">कोई मेल खाने वाला ब्रांड नहीं मिला</system:String> |
|||
<system:String x:Key="TryOtherKeywords">कोई मेल खाने वाला ब्रांड नहीं मिला</system:String> |
|||
<system:String x:Key="NoKeyData">कुंजी डेटा उपलब्ध नहीं है</system:String> |
|||
|
|||
<system:String x:Key="Data">डेटा:</system:String> |
|||
<system:String x:Key="Type">प्रकार:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">बिटरेट:</system:String> |
|||
<system:String x:Key="BitCode">बिट लंबाई:</system:String> |
|||
<system:String x:Key="StartBurning">प्रोग्रामिंग शुरू करें</system:String> |
|||
<system:String x:Key="Tip">सुझाव</system:String> |
|||
<system:String x:Key="HomeTip">इसे अपने दोस्तों को अवश्य बताएं! WeChat, QQ आदि से QR कोड स्कैन करके डाउनलोड और इंस्टॉल करें।</system:String> |
|||
<system:String x:Key="Slogan">हम हमेशा की तरह लॉकस्मिथ्स का समर्थन करते रहेंगे।</system:String> |
|||
<system:String x:Key="ScanToDownload">मोबाइल ऐप डाउनलोड करने के लिए स्कैन करें</system:String> |
|||
<system:String x:Key="GetLatestInfo">नवीनतम जानकारी और सहायता प्राप्त करें</system:String> |
|||
<system:String x:Key="ViewMore">अधिक देखें</system:String> |
|||
<system:String x:Key="Loading">लोड हो रहा है...</system:String> |
|||
<system:String x:Key="CloudData">क्लाउड डेटा</system:String> |
|||
<system:String x:Key="UpdateNow">अभी अपडेट करें</system:String> |
|||
<system:String x:Key="UpdateLater">बाद में अपडेट करें</system:String> |
|||
<system:String x:Key="NewVersionFound">नew वर्जन पाया गया</system:String> |
|||
<system:String x:Key="UpdateTips">अपडेट टिप्स</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">क्लाउड डेटा सिंक</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">क्लाउड डेटा सिंक करते समय, डिवाइस रीस्टार्ट होगा और कनेक्शन अस्थायी रूप से टूट जाएगा। यह सामान्य है। सिस्टम के डिवाइस फ़ंक्शन को दोबारा प्रारंभ करने तक कृपया धैर्य रखें।</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">डिवाइस की स्थिरता बढ़ाने के लिए सिस्टम सेटिंग समायोजित करें: कंट्रोल पैनल -> पावर ऑप्शंस -> प्लान सेटिंग बदलें -> उन्नत पावर सेटिंग बदलें -> USB सेटिंग्स -> USB सेलेक्टिव सस्पेंड सेटिंग -> [अक्षम]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">याद दिलाना: कृपया डिवाइस कनेक्टेड होने पर ही ऑपरेशन करें</system:String> |
|||
<system:String x:Key="OpenUDiskTest">USB ड्राइव खोलें (परीक्षण)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">USB ड्राइव बंद करें (परीक्षण)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 फ़ाइल चुनें</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 फ़ोल्डर चुनें</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">डिवाइस को सक्रिय रखें</system:String> |
|||
<system:String x:Key="SyncCloudData">क्लाउड डेटा सिंक करें</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Strumente Chiave Intelligente</system:String> |
|||
<system:String x:Key="Settings">Impostazioni</system:String> |
|||
<system:String x:Key="Language">Lingua</system:String> |
|||
<system:String x:Key="AppSettings">Impostazioni App</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Configura parametri di base e preferenze dell'app</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Impostazioni Interfaccia</system:String> |
|||
<system:String x:Key="CacheSettings">Impostazioni Cache</system:String> |
|||
<system:String x:Key="ClearCache">Cancella cache dati</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Lingua interfaccia:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Elenco Modelli Chiave</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Salva</system:String> |
|||
<system:String x:Key="CancelButton">Annulla</system:String> |
|||
<system:String x:Key="ConfirmButton">Conferma</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Cerca nome marca, inglese o pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Cerca nome chiave veicolo, inglese o pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Sottounità:</system:String> |
|||
<system:String x:Key="Frequency">Frequenza:</system:String> |
|||
<system:String x:Key="Chip">Informazioni Riferimento:</system:String> |
|||
<system:String x:Key="Time">Ora:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Informazioni Riferimento</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Impostazioni salvate correttamente</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Contattaci via WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Contattaci via Email</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Copia WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Copia Email</system:String> |
|||
<system:String x:Key="PhoneNumber">Telefono</system:String> |
|||
<system:String x:Key="Integral">Punti</system:String> |
|||
<system:String x:Key="Logout">Esci</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Aggiornamento Dispositivo</system:String> |
|||
<system:String x:Key="CurrentVersion">Versione Corrente</system:String> |
|||
<system:String x:Key="NewVersion">Ultima Versione</system:String> |
|||
<system:String x:Key="DeviceStatus">Stato Dispositivo</system:String> |
|||
<system:String x:Key="DeviceName">Nome Dispositivo</system:String> |
|||
<system:String x:Key="UpgradeNow">Aggiorna Ora</system:String> |
|||
<system:String x:Key="GetVersion">Ottieni Versione</system:String> |
|||
<system:String x:Key="AppVersion">Versione App</system:String> |
|||
<system:String x:Key="ServerVersion">Versione Server</system:String> |
|||
<system:String x:Key="DeviceVersion">Versione Dispositivo</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Aggiornamenti Versione</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Aggiornamenti firmware, app, dispositivo ecc.</system:String> |
|||
<system:String x:Key="BurnLog">Log Scrittura</system:String> |
|||
<system:String x:Key="KeyBurnLog">Cronologia Scrittura Chiave</system:String> |
|||
<system:String x:Key="IntegralRecharge">Ricarica punti</system:String> |
|||
<system:String x:Key="MembershipOpen">Abbonamento</system:String> |
|||
<system:String x:Key="IntegralRecord">Storico punti</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">I tuoi punti</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Inserisci importo ricarica</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Seleziona metodo di pagamento</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Paga</system:String> |
|||
<system:String x:Key="RemoteDetection">Rilevamento Remoto</system:String> |
|||
<system:String x:Key="RemoteCopy">Copia Telecomando</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Copia HCS / Codice Fisso</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Fai clic sul pulsante Test qui sotto per rilevare la frequenza. Dopo aver collegato il dispositivo, premi un tasto sull'unità secondaria entro la distanza di test e la frequenza verrà visualizzata.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Fai clic sul pulsante Test qui sotto per rilevare la frequenza. Dopo aver collegato il dispositivo, premi un tasto sull'unità secondaria entro la distanza di test e la frequenza verrà visualizzata.</system:String> |
|||
<system:String x:Key="Mode">Modalità:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Rilevamento</system:String> |
|||
<system:String x:Key="SkipThisKey">Salta questo tasto</system:String> |
|||
<system:String x:Key="Recheck">Ricontrolla</system:String> |
|||
<system:String x:Key="StartCopying">Avvia copia</system:String> |
|||
<system:String x:Key="Lock">Blocca</system:String> |
|||
<system:String x:Key="Unlock">Sblocca</system:String> |
|||
<system:String x:Key="Trunk">Baule</system:String> |
|||
<system:String x:Key="Panic">Cerca veicolo</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Nessun marchio corrispondente trovato</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Nessun marchio corrispondente trovato</system:String> |
|||
<system:String x:Key="NoKeyData">Nessun dato chiave disponibile</system:String> |
|||
|
|||
<system:String x:Key="Data">Dati:</system:String> |
|||
<system:String x:Key="Type">Tipo:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Bitrate:</system:String> |
|||
<system:String x:Key="BitCode">Lunghezza in bit:</system:String> |
|||
<system:String x:Key="StartBurning">Avvia Programmazione</system:String> |
|||
<system:String x:Key="Tip">Suggerimento</system:String> |
|||
<system:String x:Key="HomeTip">Consiglalo ai tuoi amici! Scansiona il codice QR con WeChat, QQ, ecc. per scaricare e installare.</system:String> |
|||
<system:String x:Key="Slogan">Continueremo a supportare i fabbri come sempre.</system:String> |
|||
<system:String x:Key="ScanToDownload">Scansiona per scaricare l’app mobile</system:String> |
|||
<system:String x:Key="GetLatestInfo">Ottieni le ultime novità e il supporto</system:String> |
|||
<system:String x:Key="ViewMore">Visualizza altro</system:String> |
|||
<system:String x:Key="Loading">Caricamento...</system:String> |
|||
<system:String x:Key="CloudData">Dati Cloud</system:String> |
|||
<system:String x:Key="UpdateNow">Aggiorna Ora</system:String> |
|||
<system:String x:Key="UpdateLater">Aggiorna Più Tardi</system:String> |
|||
<system:String x:Key="NewVersionFound">Nuova Versione Trovata</system:String> |
|||
<system:String x:Key="UpdateTips">Suggerimenti per l'Aggiornamento</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Sincronizzazione dati cloud</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Durante la sincronizzazione dei dati cloud, il dispositivo si riavvierà e la connessione verrà temporaneamente interrotta. È normale. Attendere pazientemente che il sistema reinizializzi le funzioni del dispositivo.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Per migliorare la stabilità del dispositivo, regolare le impostazioni di sistema: Pannello di controllo -> Opzioni risparmio energia -> Modifica impostazioni combinazione -> Cambia impostazioni avanzate risparmio energia -> Impostazioni USB -> Impostazione sospensione selettiva USB -> [Disattivato]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Promemoria: eseguire l’operazione mentre il dispositivo è connesso</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Apri unità USB (test)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Chiudi unità USB (test)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Seleziona file</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Seleziona cartella</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Mantieni attivo il dispositivo</system:String> |
|||
<system:String x:Key="SyncCloudData">Sincronizza dati cloud</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. 스마트 키 도구</system:String> |
|||
<system:String x:Key="Settings">설정</system:String> |
|||
<system:String x:Key="Language">언어</system:String> |
|||
<system:String x:Key="AppSettings">앱 설정</system:String> |
|||
<system:String x:Key="AppSettingsDescription">앱의 기본 매개변수 및 환경설정 구성</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">인터페이스 설정</system:String> |
|||
<system:String x:Key="CacheSettings">캐시 설정</system:String> |
|||
<system:String x:Key="ClearCache">데이터 캐시 삭제</system:String> |
|||
<system:String x:Key="InterfaceLanguage">인터페이스 언어:</system:String> |
|||
<system:String x:Key="KeyModelTitle">키 모델 목록</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">저장</system:String> |
|||
<system:String x:Key="CancelButton">취소</system:String> |
|||
<system:String x:Key="ConfirmButton">확인</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">브랜드 이름, 영어 또는 병음 검색...</system:String> |
|||
<system:String x:Key="SearchKeyModel">차량 키 이름, 영어 또는 병음 검색...</system:String> |
|||
|
|||
<system:String x:Key="Remote">서브 유닛:</system:String> |
|||
<system:String x:Key="Frequency">주파수:</system:String> |
|||
<system:String x:Key="Chip">참조 정보:</system:String> |
|||
<system:String x:Key="Time">시간:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">참조 정보</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">설정이 성공적으로 저장되었습니다</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">위챗으로 문의하기</system:String> |
|||
<system:String x:Key="ContactEmail">이메일로 문의하기</system:String> |
|||
<system:String x:Key="ContactWechatCopy">위챗 복사</system:String> |
|||
<system:String x:Key="ContactEmailCopy">이메일 복사</system:String> |
|||
<system:String x:Key="PhoneNumber">휴대폰</system:String> |
|||
<system:String x:Key="Integral">포인트</system:String> |
|||
<system:String x:Key="Logout">로그아웃</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">장치 업데이트</system:String> |
|||
<system:String x:Key="CurrentVersion">현재 버전</system:String> |
|||
<system:String x:Key="NewVersion">최신 버전</system:String> |
|||
<system:String x:Key="DeviceStatus">장치 상태</system:String> |
|||
<system:String x:Key="DeviceName">장치 이름</system:String> |
|||
<system:String x:Key="UpgradeNow">지금 업그레이드</system:String> |
|||
<system:String x:Key="GetVersion">버전 확인</system:String> |
|||
<system:String x:Key="AppVersion">앱 버전</system:String> |
|||
<system:String x:Key="ServerVersion">서버 버전</system:String> |
|||
<system:String x:Key="DeviceVersion">장치 버전</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">버전 업데이트</system:String> |
|||
<system:String x:Key="UpdateCenterTips">펌웨어, 앱, 장치 등 업데이트</system:String> |
|||
<system:String x:Key="BurnLog">소각 로그</system:String> |
|||
<system:String x:Key="KeyBurnLog">키 소각 기록</system:String> |
|||
<system:String x:Key="IntegralRecharge">포인트 충전</system:String> |
|||
<system:String x:Key="MembershipOpen">멤버십</system:String> |
|||
<system:String x:Key="IntegralRecord">포인트 기록</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">내 포인트</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">충전 금액 입력</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">결제 방법 선택</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">결제</system:String> |
|||
<system:String x:Key="RemoteDetection">원격 감지</system:String> |
|||
<system:String x:Key="RemoteCopy">리모컨 복사</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS / 고정 코드 복사</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">아래의 테스트 버튼을 클릭하여 주파수를 감지하세요. 장치를 연결한 후, 테스트 가능 거리 내에서 서브 유닛의 버튼을 누르면 주파수가 표시됩니다.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">아래의 테스트 버튼을 클릭하여 주파수를 감지하세요. 장치를 연결한 후, 테스트 가능 거리 내에서 서브 유닛의 버튼을 누르면 주파수가 표시됩니다.</system:String> |
|||
<system:String x:Key="Mode">모드:</system:String> |
|||
|
|||
<system:String x:Key="Detection">감지</system:String> |
|||
<system:String x:Key="SkipThisKey">이 키 건너뛰기</system:String> |
|||
<system:String x:Key="Recheck">재확인</system:String> |
|||
<system:String x:Key="StartCopying">복사 시작</system:String> |
|||
<system:String x:Key="Lock">잠금</system:String> |
|||
<system:String x:Key="Unlock">잠금 해제</system:String> |
|||
<system:String x:Key="Trunk">트렁크</system:String> |
|||
<system:String x:Key="Panic">찾기</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">일치하는 브랜드 없음</system:String> |
|||
<system:String x:Key="TryOtherKeywords">일치하는 브랜드 없음</system:String> |
|||
<system:String x:Key="NoKeyData">키 데이터 없음</system:String> |
|||
|
|||
<system:String x:Key="Data">데이터:</system:String> |
|||
<system:String x:Key="Type">유형:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">비트레이트:</system:String> |
|||
<system:String x:Key="BitCode">비트 길이:</system:String> |
|||
<system:String x:Key="StartBurning">프로그래밍 시작</system:String> |
|||
<system:String x:Key="Tip">팁</system:String> |
|||
<system:String x:Key="HomeTip">친구들에게 추천하세요! 위챗, QQ 등으로 QR 코드를 스캔하여 다운로드 및 설치하세요.</system:String> |
|||
<system:String x:Key="Slogan">앞으로도 자물쇠 기술자 여러분을 항상 지원하겠습니다.</system:String> |
|||
<system:String x:Key="ScanToDownload">모바일 앱 다운로드를 위해 스캔하세요</system:String> |
|||
<system:String x:Key="GetLatestInfo">최신 소식과 지원 정보를 확인하세요</system:String> |
|||
<system:String x:Key="ViewMore">더 보기</system:String> |
|||
<system:String x:Key="Loading">로딩 중...</system:String> |
|||
<system:String x:Key="CloudData">클라우드 데이터</system:String> |
|||
<system:String x:Key="UpdateNow">지금 업데이트</system:String> |
|||
<system:String x:Key="UpdateLater">나중에 업데이트</system:String> |
|||
<system:String x:Key="NewVersionFound">새 버전 발견</system:String> |
|||
<system:String x:Key="UpdateTips">업데이트 팁</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">클라우드 데이터 동기화</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">클라우드 데이터를 동기화하는 동안 장치가 재시작되고 연결이 일시적으로 끊어집니다. 이는 정상적인 현상입니다. 시스템이 장치 기능을 다시 초기화할 때까지 잠시 기다려 주세요.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">장치 안정성을 높이려면 시스템 설정을 조정하세요: 제어판 -> 전원 옵션 -> 절전 계획 설정 변경 -> 고급 전원 관리 옵션 설정 변경 -> USB 설정 -> USB 선택적 절전 모드 설정 -> [사용 안 함]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">알림: 장치가 연결된 상태에서 작업해 주세요</system:String> |
|||
<system:String x:Key="OpenUDiskTest">USB 드라이브 열기(테스트)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">USB 드라이브 닫기(테스트)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 파일 선택</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 폴더 선택</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">장치 활성 상태 유지</system:String> |
|||
<system:String x:Key="SyncCloudData">클라우드 데이터 동기화</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Alat Kunci Pintar</system:String> |
|||
<system:String x:Key="Settings">Tetapan</system:String> |
|||
<system:String x:Key="Language">Bahasa</system:String> |
|||
<system:String x:Key="AppSettings">Tetapan Aplikasi</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Konfigurasi parameter asas dan keutamaan aplikasi</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Tetapan Antara Muka</system:String> |
|||
<system:String x:Key="CacheSettings">Tetapan Cache</system:String> |
|||
<system:String x:Key="ClearCache">Padam cache data</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Bahasa antara muka:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Senarai Model Kunci</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Simpan</system:String> |
|||
<system:String x:Key="CancelButton">Batal</system:String> |
|||
<system:String x:Key="ConfirmButton">Sahkan</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Cari nama jenama, Bahasa Inggeris atau pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Cari nama kunci kenderaan, Bahasa Inggeris atau pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Subunit:</system:String> |
|||
<system:String x:Key="Frequency">Frekuensi:</system:String> |
|||
<system:String x:Key="Chip">Maklumat Rujukan:</system:String> |
|||
<system:String x:Key="Time">Masa:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Maklumat Rujukan</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Tetapan berjaya disimpan</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Hubungi kami melalui WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Hubungi kami melalui Emel</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Salin WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Salin Emel</system:String> |
|||
<system:String x:Key="PhoneNumber">Telefon Bimbit</system:String> |
|||
<system:String x:Key="Integral">Poin</system:String> |
|||
<system:String x:Key="Logout">Log Keluar</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Kemas Kini Peranti</system:String> |
|||
<system:String x:Key="CurrentVersion">Versi Semasa</system:String> |
|||
<system:String x:Key="NewVersion">Versi Terkini</system:String> |
|||
<system:String x:Key="DeviceStatus">Status Peranti</system:String> |
|||
<system:String x:Key="DeviceName">Nama Peranti</system:String> |
|||
<system:String x:Key="UpgradeNow">Kemas Kini Sekarang</system:String> |
|||
<system:String x:Key="GetVersion">Dapatkan Versi</system:String> |
|||
<system:String x:Key="AppVersion">Versi Aplikasi</system:String> |
|||
<system:String x:Key="ServerVersion">Versi Pelayan</system:String> |
|||
<system:String x:Key="DeviceVersion">Versi Peranti</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Kemas Kini Versi</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Kemas kini firmware, aplikasi, peranti dan lain-lain</system:String> |
|||
<system:String x:Key="BurnLog">Log Penulisan</system:String> |
|||
<system:String x:Key="KeyBurnLog">Sejarah Penulisan Kunci</system:String> |
|||
<system:String x:Key="IntegralRecharge">Tambah nilai mata</system:String> |
|||
<system:String x:Key="MembershipOpen">Keahlian</system:String> |
|||
<system:String x:Key="IntegralRecord">Rekod mata</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Mata anda</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Masukkan jumlah tambah nilai</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Pilih kaedah pembayaran</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Bayar</system:String> |
|||
<system:String x:Key="RemoteDetection">Pengesanan Jauh</system:String> |
|||
<system:String x:Key="RemoteCopy">Salinan Remote</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Salinan HCS / Kod Tetap</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Klik butang Uji di bawah untuk mengesan frekuensi. Selepas menyambungkan peranti, tekan but pada unit sekunder dalam julat ujian, dan frekuensi akan dipaparkan.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Klik butang Uji di bawah untuk mengesan frekuensi. Selepas menyambungkan peranti, tekan but pada unit sekunder dalam julat ujian, dan frekuensi akan dipaparkan.</system:String> |
|||
<system:String x:Key="Mode">Mod:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Pengesanan</system:String> |
|||
<system:String x:Key="SkipThisKey">Langkau kekunci ini</system:String> |
|||
<system:String x:Key="Recheck">Semak semula</system:String> |
|||
<system:String x:Key="StartCopying">Mula menyalin</system:String> |
|||
<system:String x:Key="Lock">Kunci</system:String> |
|||
<system:String x:Key="Unlock">Buka kunci</system:String> |
|||
<system:String x:Key="Trunk">But</system:String> |
|||
<system:String x:Key="Panic">Cari kereta</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Tiada jenama sepadan dijumpai</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Tiada jenama sepadan dijumpai</system:String> |
|||
<system:String x:Key="NoKeyData">Tiada data kunci tersedia</system:String> |
|||
|
|||
<system:String x:Key="Data">Data:</system:String> |
|||
<system:String x:Key="Type">Jenis:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Kadar bit:</system:String> |
|||
<system:String x:Key="BitCode">Panjang bit:</system:String> |
|||
<system:String x:Key="StartBurning">Mulakan Pengaturcaraan</system:String> |
|||
<system:String x:Key="Tip">Petua</system:String> |
|||
<system:String x:Key="HomeTip">Cadangkan kepada rakan anda! Imbas kod QR dengan WeChat, QQ, dsb. untuk muat turun dan pasang.</system:String> |
|||
<system:String x:Key="Slogan">Kami akan terus menyokong tukang kunci seperti biasa.</system:String> |
|||
<system:String x:Key="ScanToDownload">Imbas untuk memuat turun aplikasi mudah alih</system:String> |
|||
<system:String x:Key="GetLatestInfo">Dapatkan maklumat terkini dan sokongan</system:String> |
|||
<system:String x:Key="ViewMore">Lihat Lebih Banyak</system:String> |
|||
<system:String x:Key="Loading">Memuat...</system:String> |
|||
<system:String x:Key="CloudData">Data Awan</system:String> |
|||
<system:String x:Key="UpdateNow">Kemas Kini Sekarang</system:String> |
|||
<system:String x:Key="UpdateLater">Kemas Kini Kemudian</system:String> |
|||
<system:String x:Key="NewVersionFound">Versi Baru Ditemui</system:String> |
|||
<system:String x:Key="UpdateTips">Tips Kemas Kini</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Penyegerakan data awan</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Semasa menyegerakkan data awan, peranti akan dimulakan semula dan sambungan akan terputus buat sementara waktu. Ini adalah perkara biasa. Sila tunggu dengan sabar sehingga sistem memulakan semula fungsi peranti.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Untuk meningkatkan kestabilan peranti, laraskan tetapan sistem: Panel Kawalan -> Pilihan Kuasa -> Tukar tetapan pelan -> Tukar tetapan kuasa lanjutan -> Tetapan USB -> Tetapan penggantungan terpilih USB -> [Dilumpuhkan]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Peringatan: Sila lakukan operasi semasa peranti disambungkan</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Buka pemacu USB (ujian)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Tutup pemacu USB (ujian)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Pilih fail</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Pilih folder</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Pastikan peranti kekal aktif</system:String> |
|||
<system:String x:Key="SyncCloudData">Segerakkan data awan</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Inteligentne Narzędzie do Kluczy</system:String> |
|||
<system:String x:Key="Settings">Ustawienia</system:String> |
|||
<system:String x:Key="Language">Język</system:String> |
|||
<system:String x:Key="AppSettings">Ustawienia aplikacji</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Skonfiguruj podstawowe parametry i preferencje aplikacji</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Ustawienia interfejsu</system:String> |
|||
<system:String x:Key="CacheSettings">Ustawienia pamięci podręcznej</system:String> |
|||
<system:String x:Key="ClearCache">Wyczyść dane w pamięci podręcznej</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Język interfejsu:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Lista modeli kluczy</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Zapisz</system:String> |
|||
<system:String x:Key="CancelButton">Anuluj</system:String> |
|||
<system:String x:Key="ConfirmButton">Potwierdź</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Szukaj marki, nazwy angielskiej lub pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Szukaj nazwy klucza pojazdu, nazwy angielskiej lub pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Podrzędny:</system:String> |
|||
<system:String x:Key="Frequency">Częstotliwość:</system:String> |
|||
<system:String x:Key="Chip">Informacje referencyjne:</system:String> |
|||
<system:String x:Key="Time">Czas:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Informacje referencyjne</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Ustawienia zapisane pomyślnie</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Skontaktuj się z nami przez WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Skontaktuj się z nami przez e-mail</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Kopiuj WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Kopiuj e-mail</system:String> |
|||
<system:String x:Key="PhoneNumber">Telefon</system:String> |
|||
<system:String x:Key="Integral">Punkty</system:String> |
|||
<system:String x:Key="Logout">Wyloguj</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Aktualizacja urządzenia</system:String> |
|||
<system:String x:Key="CurrentVersion">Bieżąca wersja</system:String> |
|||
<system:String x:Key="NewVersion">Najnowsza wersja</system:String> |
|||
<system:String x:Key="DeviceStatus">Stan urządzenia</system:String> |
|||
<system:String x:Key="DeviceName">Nazwa urządzenia</system:String> |
|||
<system:String x:Key="UpgradeNow">Aktualizuj teraz</system:String> |
|||
<system:String x:Key="GetVersion">Pobierz wersję</system:String> |
|||
<system:String x:Key="AppVersion">Wersja aplikacji</system:String> |
|||
<system:String x:Key="ServerVersion">Wersja serwera</system:String> |
|||
<system:String x:Key="DeviceVersion">Wersja urządzenia</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Aktualizacje wersji</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Aktualizacje oprogramowania sprzętowego (firmware), aplikacji oraz urządzeń</system:String> |
|||
<system:String x:Key="BurnLog">Dziennik programowania</system:String> |
|||
<system:String x:Key="KeyBurnLog">Dziennik programowania kluczy</system:String> |
|||
<system:String x:Key="IntegralRecharge">Doładuj punkty</system:String> |
|||
<system:String x:Key="MembershipOpen">Członkostwo</system:String> |
|||
<system:String x:Key="IntegralRecord">Historia punktów</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Twoje punkty</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Wprowadź kwotę doładowania</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Wybierz metodę płatności</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Zapłać</system:String> |
|||
<system:String x:Key="RemoteDetection">Wykrywanie zdalne</system:String> |
|||
<system:String x:Key="RemoteCopy">Kopiowanie pilota</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Kopiowanie HCS / kodu stałego</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Kliknij poniższy przycisk Test, aby wykryć częstotliwość. Po podłączeniu urządzenia naciśnij przycisk na jednostce podrzędnej w zasięgu testowym, a częstotliwość zostanie wyświetlona.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Kliknij poniższy przycisk Test, aby wykryć częstotliwość. Po podłączeniu urządzenia naciśnij przycisk na jednostce podrzędnej w zasięgu testowym, a częstotliwość zostanie wyświetlona.</system:String> |
|||
<system:String x:Key="Mode">Tryb:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Wykrywanie</system:String> |
|||
<system:String x:Key="SkipThisKey">Pomiń ten klucz</system:String> |
|||
<system:String x:Key="Recheck">Sprawdź ponownie</system:String> |
|||
<system:String x:Key="StartCopying">Rozpocznij kopiowanie</system:String> |
|||
<system:String x:Key="Lock">Zablokuj</system:String> |
|||
<system:String x:Key="Unlock">Odblokuj</system:String> |
|||
<system:String x:Key="Trunk">Bagażnik</system:String> |
|||
<system:String x:Key="Panic">Szukaj samochodu</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Nie znaleziono pasującej marki</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Nie znaleziono pasującej marki</system:String> |
|||
<system:String x:Key="NoKeyData">Brak danych klucza</system:String> |
|||
|
|||
<system:String x:Key="Data">Dane:</system:String> |
|||
<system:String x:Key="Type">Typ:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Szybkość transmisji:</system:String> |
|||
<system:String x:Key="BitCode">Długość bitowa:</system:String> |
|||
<system:String x:Key="StartBurning">Rozpocznij programowanie</system:String> |
|||
<system:String x:Key="Tip">Wskazówka</system:String> |
|||
<system:String x:Key="HomeTip">Poleć znajomym! Zeskanuj kod QR za pomocą WeChat, QQ itp., aby pobrać i zainstalować.</system:String> |
|||
<system:String x:Key="Slogan">Będziemy nadal wspierać ślusarzy tak jak dotychczas.</system:String> |
|||
<system:String x:Key="ScanToDownload">Zeskanuj, aby pobrać aplikację mobilną</system:String> |
|||
<system:String x:Key="GetLatestInfo">Uzyskaj najnowsze informacje i wsparcie</system:String> |
|||
<system:String x:Key="ViewMore">Pokaż więcej</system:String> |
|||
<system:String x:Key="Loading">Ładowanie...</system:String> |
|||
<system:String x:Key="CloudData">Dane Chmurowe</system:String> |
|||
<system:String x:Key="UpdateNow">Aktualizuj Teraz</system:String> |
|||
<system:String x:Key="UpdateLater">Aktualizuj Później</system:String> |
|||
<system:String x:Key="NewVersionFound">Znaleziono Nową Wersję</system:String> |
|||
<system:String x:Key="UpdateTips">Wskazówki Dotyczące Aktualizacji</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Synchronizacja danych w chmurze</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Podczas synchronizacji danych w chmurze urządzenie uruchomi się ponownie, a połączenie zostanie tymczasowo przerwane. To normalne. Proszę cierpliwie poczekać, aż system ponownie zainicjalizuje funkcje urządzenia.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Aby zwiększyć stabilność urządzenia, dostosuj ustawienia systemowe: Panel sterowania -> Opcje zasilania -> Zmień ustawienia planu -> Zmień zaawansowane ustawienia zasilania -> Ustawienia USB -> Ustawienie wstrzymania selektywnego USB -> [Wyłączone]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Przypomnienie: wykonuj operację, gdy urządzenie jest podłączone</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Otwórz dysk USB (test)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Zamknij dysk USB (test)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Wybierz plik</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Wybierz folder</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Utrzymuj urządzenie aktywne</system:String> |
|||
<system:String x:Key="SyncCloudData">Synchronizuj dane w chmurze</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Ferramenta Inteligente de Chaves</system:String> |
|||
<system:String x:Key="Settings">Configurações</system:String> |
|||
<system:String x:Key="Language">Idioma</system:String> |
|||
<system:String x:Key="AppSettings">Configurações do Aplicativo</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Configure os parâmetros básicos e preferências do aplicativo</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Configurações da Interface</system:String> |
|||
<system:String x:Key="CacheSettings">Configurações de Cache</system:String> |
|||
<system:String x:Key="ClearCache">Limpar cache de dados</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Idioma da interface:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Lista de Modelos de Chaves</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Salvar</system:String> |
|||
<system:String x:Key="CancelButton">Cancelar</system:String> |
|||
<system:String x:Key="ConfirmButton">Confirmar</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Buscar marca, nome em inglês ou pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Buscar nome da chave, termo em inglês ou pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Subunidade:</system:String> |
|||
<system:String x:Key="Frequency">Frequência:</system:String> |
|||
<system:String x:Key="Chip">Informações de referência:</system:String> |
|||
<system:String x:Key="Time">Hora:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Informações de Referência</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Configurações salvas com sucesso</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Contate-nos pelo WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Contate-nos por e-mail</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Copiar WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Copiar e-mail</system:String> |
|||
<system:String x:Key="PhoneNumber">Celular</system:String> |
|||
<system:String x:Key="Integral">Pontos</system:String> |
|||
<system:String x:Key="Logout">Sair</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Atualização do Dispositivo</system:String> |
|||
<system:String x:Key="CurrentVersion">Versão Atual</system:String> |
|||
<system:String x:Key="NewVersion">Nova Versão</system:String> |
|||
<system:String x:Key="DeviceStatus">Status do Dispositivo</system:String> |
|||
<system:String x:Key="DeviceName">Nome do Dispositivo</system:String> |
|||
<system:String x:Key="UpgradeNow">Atualizar Agora</system:String> |
|||
<system:String x:Key="GetVersion">Obter Versão</system:String> |
|||
<system:String x:Key="AppVersion">Versão do Aplicativo</system:String> |
|||
<system:String x:Key="ServerVersion">Versão do Servidor</system:String> |
|||
<system:String x:Key="DeviceVersion">Versão do Dispositivo</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Atualizações de Versão</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Atualizações de firmware, aplicativo, dispositivo, etc.</system:String> |
|||
<system:String x:Key="BurnLog">Registro de Gravação</system:String> |
|||
<system:String x:Key="KeyBurnLog">Histórico de Gravação de Chaves</system:String> |
|||
<system:String x:Key="IntegralRecharge">Recarga de pontos</system:String> |
|||
<system:String x:Key="MembershipOpen">Assinatura</system:String> |
|||
<system:String x:Key="IntegralRecord">Registro de pontos</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Seus pontos</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Insira o valor da recarga</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Selecione a forma de pagamento</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Pagar</system:String> |
|||
<system:String x:Key="RemoteDetection">Detecção Remota</system:String> |
|||
<system:String x:Key="RemoteCopy">Cópia Remota</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Cópia HCS / Código Fixo</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Clique no botão Testar abaixo para detectar a frequência. Após conectar o dispositivo, pressione um botão na unidade secundária dentro do alcance testável e a frequência será exibida.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Clique no botão Testar abaixo para detectar a frequência. Após conectar o dispositivo, pressione um botão na unidade secundária dentro do alcance testável e a frequência será exibida.</system:String> |
|||
<system:String x:Key="Mode">Modo:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Detecção</system:String> |
|||
<system:String x:Key="SkipThisKey">Ignorar esta tecla</system:String> |
|||
<system:String x:Key="Recheck">Reverificar</system:String> |
|||
<system:String x:Key="StartCopying">Iniciar cópia</system:String> |
|||
<system:String x:Key="Lock">Travar</system:String> |
|||
<system:String x:Key="Unlock">Destravar</system:String> |
|||
<system:String x:Key="Trunk">Porta-malas</system:String> |
|||
<system:String x:Key="Panic">Busca-carro</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Nenhuma marca correspondente encontrada</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Nenhuma marca correspondente encontrada</system:String> |
|||
<system:String x:Key="NoKeyData">Sem dados da chave disponíveis</system:String> |
|||
|
|||
<system:String x:Key="Data">Dados:</system:String> |
|||
<system:String x:Key="Type">Tipo:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Taxa de bits:</system:String> |
|||
<system:String x:Key="BitCode">Comprimento em bits:</system:String> |
|||
<system:String x:Key="StartBurning">Iniciar Gravação</system:String> |
|||
<system:String x:Key="Tip">Dica</system:String> |
|||
<system:String x:Key="HomeTip">Indique aos seus amigos! Escaneie o QR Code com WeChat, QQ, etc. para baixar e instalar.</system:String> |
|||
<system:String x:Key="Slogan">Continuaremos apoiando os chaveiros como sempre.</system:String> |
|||
<system:String x:Key="ScanToDownload">Escaneie para baixar o app móvel</system:String> |
|||
<system:String x:Key="GetLatestInfo">Receba as últimas novidades e suporte</system:String> |
|||
<system:String x:Key="ViewMore">Ver mais</system:String> |
|||
<system:String x:Key="Loading">Carregando...</system:String> |
|||
<system:String x:Key="CloudData">Dados na Nuvem</system:String> |
|||
<system:String x:Key="UpdateNow">Atualizar Agora</system:String> |
|||
<system:String x:Key="UpdateLater">Atualizar Mais Tarde</system:String> |
|||
<system:String x:Key="NewVersionFound">Nova Versão Encontrada</system:String> |
|||
<system:String x:Key="UpdateTips">Dicas de Atualização</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Sincronização de dados na nuvem</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Durante a sincronização de dados na nuvem, o dispositivo será reiniciado e a conexão será temporariamente interrompida. Isso é normal. Aguarde pacientemente enquanto o sistema reinicializa as funções do dispositivo.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Para melhorar a estabilidade do dispositivo, ajuste as configurações do sistema: Painel de Controle -> Opções de Energia -> Alterar configurações do plano -> Alterar configurações avançadas de energia -> Configurações USB -> Configuração de suspensão seletiva de USB -> [Desabilitado]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Lembrete: execute a operação com o dispositivo conectado</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Abrir unidade USB (teste)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Fechar unidade USB (teste)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Selecionar arquivo</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Selecionar pasta</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Manter dispositivo ativo</system:String> |
|||
<system:String x:Key="SyncCloudData">Sincronizar dados na nuvem</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<!-- 应用程序字符串 --> |
|||
<system:String x:Key="AppTitle">AIK.Ferramenta de Chave Inteligente</system:String> |
|||
<system:String x:Key="Settings">Configurações</system:String> |
|||
<system:String x:Key="Language">Idioma</system:String> |
|||
<system:String x:Key="AppSettings">Configurações do Aplicativo</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Configurar parâmetros básicos e preferências do aplicativo</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Configurações de Interface</system:String> |
|||
<system:String x:Key="CacheSettings">Configurações de Cache</system:String> |
|||
<system:String x:Key="ClearCache">Limpar Cache de Dados</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Idioma da Interface:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Lista de Modelos de Chave</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Salvar</system:String> |
|||
<system:String x:Key="CancelButton">Cancelar</system:String> |
|||
<system:String x:Key="ConfirmButton">Confirmar</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Pesquisar nome da marca, inglês ou pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Pesquisar nome da chave do veículo, inglês ou pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Chave Remota:</system:String> |
|||
<system:String x:Key="Frequency">Frequência:</system:String> |
|||
<system:String x:Key="Chip">Informações de Referência:</system:String> |
|||
<system:String x:Key="Time">Hora:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Informações de Referência</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Configurações salvas com sucesso</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Contate-nos pelo WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Contate-nos pelo E-mail</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Copiar WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Copiar E-mail</system:String> |
|||
<system:String x:Key="PhoneNumber">Telefone Celular</system:String> |
|||
<system:String x:Key="Integral">Pontos</system:String> |
|||
<system:String x:Key="Logout">Sair</system:String> |
|||
<system:String x:Key="DeviceUpdate">Atualização do Dispositivo</system:String> |
|||
<system:String x:Key="CurrentVersion">Versão Atual</system:String> |
|||
<system:String x:Key="NewVersion">Última Versão</system:String> |
|||
<system:String x:Key="DeviceStatus">Status do Dispositivo</system:String> |
|||
<system:String x:Key="DeviceName">Nome do Dispositivo</system:String> |
|||
<system:String x:Key="UpgradeNow">Atualizar Agora</system:String> |
|||
<system:String x:Key="GetVersion">Obter Versão</system:String> |
|||
<system:String x:Key="AppVersion">Versão do APP</system:String> |
|||
<system:String x:Key="ServerVersion">Versão do Servidor</system:String> |
|||
<system:String x:Key="DeviceVersion">Versão do Dispositivo</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Centro de Atualização</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Atualização de firmware, aplicativo, dispositivo, etc.</system:String> |
|||
<system:String x:Key="BurnLog">Registro de gravação</system:String> |
|||
<system:String x:Key="KeyBurnLog">Registro de gravação de chaves</system:String> |
|||
<system:String x:Key="IntegralRecharge">Recarga de pontos</system:String> |
|||
<system:String x:Key="MembershipOpen">Assinatura</system:String> |
|||
<system:String x:Key="IntegralRecord">Registro de pontos</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Os seus pontos</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Introduza o valor da recarga</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Selecione o método de pagamento</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Pagar</system:String> |
|||
<system:String x:Key="RemoteDetection">Detecção Remota</system:String> |
|||
<system:String x:Key="RemoteCopy">Cópia Remota</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Cópia HCS / Código Fixo</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Clique no botão Testar abaixo para detetar a frequência. Após ligar o dispositivo, prima um botão na unidade secundária dentro do alcance testável e a frequência será exibida.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Clique no botão Testar abaixo para detetar a frequência. Após ligar o dispositivo, prima um botão na unidade secundária dentro do alcance testável e a frequência será exibida.</system:String> |
|||
<system:String x:Key="Mode">Modo:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Detecção</system:String> |
|||
<system:String x:Key="SkipThisKey">Ignorar esta tecla</system:String> |
|||
<system:String x:Key="Recheck">Reverificar</system:String> |
|||
<system:String x:Key="StartCopying">Iniciar cópia</system:String> |
|||
<system:String x:Key="Lock">Trancar</system:String> |
|||
<system:String x:Key="Unlock">Destrancar</system:String> |
|||
<system:String x:Key="Trunk">Porta-malas</system:String> |
|||
<system:String x:Key="Panic">Busca-carro</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Nenhuma marca correspondente encontrada</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Nenhuma marca correspondente encontrada</system:String> |
|||
<system:String x:Key="NoKeyData">Sem dados da chave disponíveis</system:String> |
|||
|
|||
<system:String x:Key="Data">Dados:</system:String> |
|||
<system:String x:Key="Type">Tipo:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Taxa de bits:</system:String> |
|||
<system:String x:Key="BitCode">Comprimento em bits:</system:String> |
|||
<system:String x:Key="StartBurning">Iniciar Programação</system:String> |
|||
<system:String x:Key="Tip">Dica</system:String> |
|||
<system:String x:Key="HomeTip">Recomende aos seus amigos! Digitalize o código QR com WeChat, QQ, etc. para descarregar e instalar.</system:String> |
|||
<system:String x:Key="Slogan">Continuaremos a apoiar os serralheiros como sempre.</system:String> |
|||
<system:String x:Key="ScanToDownload">Digitalize para descarregar a aplicação móvel</system:String> |
|||
<system:String x:Key="GetLatestInfo">Obtenha as últimas notícias e suporte</system:String> |
|||
<system:String x:Key="ViewMore">Ver mais</system:String> |
|||
<system:String x:Key="Loading">Carregando...</system:String> |
|||
<system:String x:Key="CloudData">Dados na Nuvem</system:String> |
|||
<system:String x:Key="UpdateNow">Atualizar Agora</system:String> |
|||
<system:String x:Key="UpdateLater">Atualizar Mais Tarde</system:String> |
|||
<system:String x:Key="NewVersionFound">Nova Versão Encontrada</system:String> |
|||
<system:String x:Key="UpdateTips">Dicas de Atualização</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Sincronização de dados na nuvem</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Durante a sincronização de dados na nuvem, o dispositivo irá reiniciar e a ligação será temporariamente interrompida. Isto é normal. Aguarde pacientemente enquanto o sistema reinicializa as funções do dispositivo.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Para melhorar a estabilidade do dispositivo, ajuste as definições do sistema: Painel de Controlo -> Opções de Energia -> Alterar definições do plano -> Alterar definições avançadas de energia -> Definições USB -> Definição de suspensão seletiva de USB -> [Desativado]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Lembrete: execute a operação com o dispositivo ligado</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Abrir unidade USB (teste)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Fechar unidade USB (teste)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Selecionar ficheiro</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Selecionar pasta</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Manter dispositivo ativo</system:String> |
|||
<system:String x:Key="SyncCloudData">Sincronizar dados na nuvem</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,115 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Интеллектуальный инструмент для ключей</system:String> |
|||
<system:String x:Key="Settings">Настройки</system:String> |
|||
<system:String x:Key="Language">Язык</system:String> |
|||
<system:String x:Key="AppSettings">Настройки приложения</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Настройка основных параметров и предпочтений приложения</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Настройки интерфейса</system:String> |
|||
<system:String x:Key="CacheSettings">Настройки кэша</system:String> |
|||
<system:String x:Key="ClearCache">Очистить кэш данных</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Язык интерфейса:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Список моделей ключей</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Сохранить</system:String> |
|||
<system:String x:Key="CancelButton">Отмена</system:String> |
|||
<system:String x:Key="ConfirmButton">Подтвердить</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Поиск по названию бренда, английскому или пиньиню...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Поиск по названию автомобильного ключа, английскому или пиньиню...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Подчинённое устройство:</system:String> |
|||
<system:String x:Key="Frequency">Частота:</system:String> |
|||
<system:String x:Key="Chip">Справочная информация:</system:String> |
|||
<system:String x:Key="Time">Время:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Справочная информация</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Настройки успешно сохранены</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Связаться через WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Связаться по электронной почте</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Копировать WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Копировать email</system:String> |
|||
<system:String x:Key="PhoneNumber">Телефон</system:String> |
|||
<system:String x:Key="Integral">Баллы</system:String> |
|||
<system:String x:Key="Logout">Выйти</system:String> |
|||
<system:String x:Key="DeviceUpdate">Обновление устройства</system:String> |
|||
<system:String x:Key="CurrentVersion">Текущая версия</system:String> |
|||
<system:String x:Key="NewVersion">Последняя версия</system:String> |
|||
<system:String x:Key="DeviceStatus">Состояние устройства</system:String> |
|||
<system:String x:Key="DeviceName">Название устройства</system:String> |
|||
<system:String x:Key="UpgradeNow">Обновить сейчас</system:String> |
|||
<system:String x:Key="GetVersion">Получить версию</system:String> |
|||
<system:String x:Key="AppVersion">Версия приложения</system:String> |
|||
<system:String x:Key="ServerVersion">Версия сервера</system:String> |
|||
<system:String x:Key="DeviceVersion">Версия устройства</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Центр обновлений</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Обновление прошивки, приложения, устройства и др.</system:String> |
|||
<system:String x:Key="BurnLog">Журнал записи</system:String> |
|||
<system:String x:Key="KeyBurnLog">Журнал записи ключей</system:String> |
|||
<system:String x:Key="IntegralRecharge">Пополнение баллов</system:String> |
|||
<system:String x:Key="MembershipOpen">Подписка</system:String> |
|||
<system:String x:Key="IntegralRecord">История баллов</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Ваши баллы</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Введите сумму пополнения</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Выберите способ оплаты</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Оплатить</system:String> |
|||
<system:String x:Key="RemoteDetection">Удаленное обнаружение</system:String> |
|||
<system:String x:Key="RemoteCopy">Копирование пульта</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Копирование HCS / фиксированного кода</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Нажмите кнопку «Тест» ниже, чтобы определить частоту. После подключения устройства нажмите кнопку на дочернем блоке в пределах тестового диапазона, и частота отобразится.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Нажмите кнопку «Тест» ниже, чтобы определить частоту. После подключения устройства нажмите кнопку на дочернем блоке в пределах тестового диапазона, и частота отобразится.</system:String> |
|||
<system:String x:Key="Mode">Режим:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Обнаружение</system:String> |
|||
<system:String x:Key="SkipThisKey">Пропустить эту кнопку</system:String> |
|||
<system:String x:Key="Recheck">Повторная проверка</system:String> |
|||
<system:String x:Key="StartCopying">Начать копирование</system:String> |
|||
<system:String x:Key="Lock">Заблокировать</system:String> |
|||
<system:String x:Key="Unlock">Разблокировать</system:String> |
|||
<system:String x:Key="Trunk">Багажник</system:String> |
|||
<system:String x:Key="Panic">Поиск автомобиля</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Соответствующий бренд не найден</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Соответствующий бренд не найден</system:String> |
|||
<system:String x:Key="NoKeyData">Данные ключа недоступны</system:String> |
|||
|
|||
<system:String x:Key="Data">Данные:</system:String> |
|||
<system:String x:Key="Type">Тип:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Битрейт:</system:String> |
|||
<system:String x:Key="BitCode">Длина в битах:</system:String> |
|||
<system:String x:Key="StartBurning">Начать программирование</system:String> |
|||
<system:String x:Key="Tip">Совет</system:String> |
|||
<system:String x:Key="HomeTip">Порекомендуйте друзьям! Отсканируйте QR-код с помощью WeChat, QQ и т.д., чтобы скачать и установить.</system:String> |
|||
<system:String x:Key="Slogan">Мы и дальше будем надежно поддерживать мастеров-ключников, как всегда.</system:String> |
|||
<system:String x:Key="ScanToDownload">Отсканируйте, чтобы скачать мобильное приложение</system:String> |
|||
<system:String x:Key="GetLatestInfo">Получайте последние новости и поддержку</system:String> |
|||
<system:String x:Key="ViewMore">Показать ещё</system:String> |
|||
<system:String x:Key="Loading">Загрузка...</system:String> |
|||
<system:String x:Key="CloudData">Облачные Данные</system:String> |
|||
<system:String x:Key="UpdateNow">Обновить Сейчас</system:String> |
|||
<system:String x:Key="UpdateLater">Обновить Позже</system:String> |
|||
<system:String x:Key="NewVersionFound">Найдена Новая Версия</system:String> |
|||
<system:String x:Key="UpdateTips">Советы по Обновлению</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Синхронизация облачных данных</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Во время синхронизации облачных данных устройство перезагрузится, а соединение будет временно прервано. Это нормально. Пожалуйста, подождите, пока система повторно инициализирует функции устройства.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Чтобы повысить стабильность устройства, измените параметры системы: Панель управления -> Электропитание -> Настройка схемы электропитания -> Изменить дополнительные параметры питания -> Параметры USB -> Параметр временного отключения USB-порта -> [Отключено]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Напоминание: выполняйте операцию, когда устройство подключено</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Открыть USB-накопитель (тест)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Закрыть USB-накопитель (тест)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Выбрать файл</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Выбрать папку</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Поддерживать устройство активным</system:String> |
|||
<system:String x:Key="SyncCloudData">Синхронизировать облачные данные</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. เครื่องมือกุญแจอัจฉริยะ</system:String> |
|||
<system:String x:Key="Settings">การตั้งค่า</system:String> |
|||
<system:String x:Key="Language">ภาษา</system:String> |
|||
<system:String x:Key="AppSettings">การตั้งค่าแอป</system:String> |
|||
<system:String x:Key="AppSettingsDescription">กำหนดค่าพารามิเตอร์และตัวเลือกพื้นฐานของแอป</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">การตั้งค่าอินเตอร์เฟซ</system:String> |
|||
<system:String x:Key="CacheSettings">การตั้งค่าแคช</system:String> |
|||
<system:String x:Key="ClearCache">ล้างแคชข้อมูล</system:String> |
|||
<system:String x:Key="InterfaceLanguage">ภาษาอินเตอร์เฟซ:</system:String> |
|||
<system:String x:Key="KeyModelTitle">รายการรุ่นกุญแจ</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">บันทึก</system:String> |
|||
<system:String x:Key="CancelButton">ยกเลิก</system:String> |
|||
<system:String x:Key="ConfirmButton">ยืนยัน</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">ค้นหาชื่อแบรนด์ ภาษาอังกฤษ หรือ พินอิน...</system:String> |
|||
<system:String x:Key="SearchKeyModel">ค้นหาชื่อกุญแจรถ ภาษาอังกฤษ หรือ พินอิน...</system:String> |
|||
|
|||
<system:String x:Key="Remote">หน่วยย่อย:</system:String> |
|||
<system:String x:Key="Frequency">ความถี่:</system:String> |
|||
<system:String x:Key="Chip">ข้อมูลอ้างอิง:</system:String> |
|||
<system:String x:Key="Time">เวลา:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">ข้อมูลอ้างอิง</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">บันทึกการตั้งค่าเรียบร้อยแล้ว</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">ติดต่อเราผ่าน WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">ติดต่อเราผ่านอีเมล</system:String> |
|||
<system:String x:Key="ContactWechatCopy">คัดลอก WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">คัดลอกอีเมล</system:String> |
|||
<system:String x:Key="PhoneNumber">โทรศัพท์มือถือ</system:String> |
|||
<system:String x:Key="Integral">คะแนน</system:String> |
|||
<system:String x:Key="Logout">ออกจากระบบ</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">อัปเดตอุปกรณ์</system:String> |
|||
<system:String x:Key="CurrentVersion">เวอร์ชันปัจจุบัน</system:String> |
|||
<system:String x:Key="NewVersion">เวอร์ชันล่าสุด</system:String> |
|||
<system:String x:Key="DeviceStatus">สถานะอุปกรณ์</system:String> |
|||
<system:String x:Key="DeviceName">ชื่ออุปกรณ์</system:String> |
|||
<system:String x:Key="UpgradeNow">อัปเดตเดี๋ยวนี้</system:String> |
|||
<system:String x:Key="GetVersion">ดูเวอร์ชัน</system:String> |
|||
<system:String x:Key="AppVersion">เวอร์ชันแอป</system:String> |
|||
<system:String x:Key="ServerVersion">เวอร์ชันเซิร์ฟเวอร์</system:String> |
|||
<system:String x:Key="DeviceVersion">เวอร์ชันอุปกรณ์</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">ศูนย์อัปเดตเวอร์ชัน</system:String> |
|||
<system:String x:Key="UpdateCenterTips">อัปเดตเฟิร์มแวร์ แอป อุปกรณ์ เป็นต้น</system:String> |
|||
<system:String x:Key="BurnLog">บันทึกการเขียนข้อมูล</system:String> |
|||
<system:String x:Key="KeyBurnLog">ประวัติการเขียนข้อมูลกุญแจ</system:String> |
|||
<system:String x:Key="IntegralRecharge">เติมคะแนน</system:String> |
|||
<system:String x:Key="MembershipOpen">สมาชิก</system:String> |
|||
<system:String x:Key="IntegralRecord">ประวัติคะแนน</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">คะแนนของคุณ</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">ป้อนจำนวนเงินที่ต้องการเติม</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">เลือกวิธีการชำระเงิน</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">ชำระเงิน</system:String> |
|||
<system:String x:Key="RemoteDetection">ตรวจจับระยะไกล</system:String> |
|||
<system:String x:Key="RemoteCopy">คัดลอกสัญญาณรีโมท</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">คัดลอก HCS / รหัสคงที่</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">คลิกปุ่มทดสอบด้านล่างเพื่อตรวจจับความถี่ เมื่อเชื่อมต่ออุปกรณ์แล้ว กดปุ่มบนยูนิตย่อยภายในระยะที่สามารถทดสอบได้ ความถี่จะแสดงขึ้นทันที</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">คลิกปุ่มทดสอบด้านล่างเพื่อตรวจจับความถี่ เมื่อเชื่อมต่ออุปกรณ์แล้ว กดปุ่มบนยูนิตย่อยภายในระยะที่สามารถทดสอบได้ ความถี่จะแสดงขึ้นทันที</system:String> |
|||
<system:String x:Key="Mode">โหมด:</system:String> |
|||
|
|||
<system:String x:Key="Detection">การตรวจจับ</system:String> |
|||
<system:String x:Key="SkipThisKey">ข้ามปุ่มนี้</system:String> |
|||
<system:String x:Key="Recheck">ตรวจสอบอีกครั้ง</system:String> |
|||
<system:String x:Key="StartCopying">เริ่มคัดลอก</system:String> |
|||
<system:String x:Key="Lock">ล็อก</system:String> |
|||
<system:String x:Key="Unlock">เปิดล็อก</system:String> |
|||
<system:String x:Key="Trunk">ท้ายรถ</system:String> |
|||
<system:String x:Key="Panic">ค้นหารถ</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">ไม่พบยี่ห้อที่ตรงกัน</system:String> |
|||
<system:String x:Key="TryOtherKeywords">ไม่พบยี่ห้อที่ตรงกัน</system:String> |
|||
<system:String x:Key="NoKeyData">ไม่มีข้อมูลกุญแจ</system:String> |
|||
|
|||
<system:String x:Key="Data">ข้อมูล:</system:String> |
|||
<system:String x:Key="Type">ประเภท:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">อัตราบิต:</system:String> |
|||
<system:String x:Key="BitCode">ความยาวบิต:</system:String> |
|||
<system:String x:Key="StartBurning">เริ่มการโปรแกรม</system:String> |
|||
<system:String x:Key="Tip">เคล็ดลับ</system:String> |
|||
<system:String x:Key="HomeTip">แนะนำให้เพื่อนของคุณ! สแกนรหัส QR ด้วย WeChat, QQ ฯลฯ เพื่อดาวน์โหลดและติดตั้ง</system:String> |
|||
<system:String x:Key="Slogan">เราจะยังคงสนับสนุนช่างกุญแจทุกท่านอย่างเต็มที่เหมือนเช่นเคย</system:String> |
|||
<system:String x:Key="ScanToDownload">สแกนเพื่อดาวน์โหลดแอปมือถือ</system:String> |
|||
<system:String x:Key="GetLatestInfo">รับข่าวสารและบริการสนับสนุนล่าสุด</system:String> |
|||
<system:String x:Key="ViewMore">ดูเพิ่มเติม</system:String> |
|||
<system:String x:Key="Loading">กำลังโหลด...</system:String> |
|||
<system:String x:Key="CloudData">ข้อมูลในคลาวด์</system:String> |
|||
<system:String x:Key="UpdateNow">อัปเดตตอนนี้</system:String> |
|||
<system:String x:Key="UpdateLater">อัปเดตภายหลัง</system:String> |
|||
<system:String x:Key="NewVersionFound">พบเวอร์ชั่นใหม่</system:String> |
|||
<system:String x:Key="UpdateTips">คำแนะนำในการอัปเดต</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">ซิงค์ข้อมูลคลาวด์</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">ระหว่างการซิงค์ข้อมูลคลาวด์ อุปกรณ์จะรีสตาร์ตและการเชื่อมต่อจะถูกตัดชั่วคราว ซึ่งเป็นเรื่องปกติ โปรดรออย่างอดทนให้ระบบเริ่มต้นฟังก์ชันของอุปกรณ์ใหม่</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">เพื่อเพิ่มความเสถียรของอุปกรณ์ ให้ปรับการตั้งค่าระบบ: แผงควบคุม -> ตัวเลือกการใช้พลังงาน -> เปลี่ยนการตั้งค่าแผน -> เปลี่ยนการตั้งค่าพลังงานขั้นสูง -> การตั้งค่า USB -> การตั้งค่าการระงับแบบเลือกได้ของ USB -> [ปิดใช้งาน]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">คำเตือน: โปรดดำเนินการขณะอุปกรณ์เชื่อมต่ออยู่</system:String> |
|||
<system:String x:Key="OpenUDiskTest">เปิดไดรฟ์ USB (ทดสอบ)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">ปิดไดรฟ์ USB (ทดสอบ)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 เลือกไฟล์</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 เลือกโฟลเดอร์</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">คงการทำงานของอุปกรณ์</system:String> |
|||
<system:String x:Key="SyncCloudData">ซิงค์ข้อมูลคลาวด์</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Akıllı Anahtar Aracı</system:String> |
|||
<system:String x:Key="Settings">Ayarlar</system:String> |
|||
<system:String x:Key="Language">Dil</system:String> |
|||
<system:String x:Key="AppSettings">Uygulama Ayarları</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Uygulamanın temel parametrelerini ve tercihlerini yapılandırın</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Arayüz Ayarları</system:String> |
|||
<system:String x:Key="CacheSettings">Önbellek Ayarları</system:String> |
|||
<system:String x:Key="ClearCache">Veri önbelleğini temizle</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Arayüz dili:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Anahtar Modeli Listesi</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Kaydet</system:String> |
|||
<system:String x:Key="CancelButton">İptal</system:String> |
|||
<system:String x:Key="ConfirmButton">Onayla</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Marka adı, İngilizce veya pinyin ile arama...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Araç anahtarı adı, İngilizce veya pinyin ile arama...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Alt birim:</system:String> |
|||
<system:String x:Key="Frequency">Frekans:</system:String> |
|||
<system:String x:Key="Chip">Referans bilgileri:</system:String> |
|||
<system:String x:Key="Time">Zaman:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Referans Bilgileri</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Ayarlar başarıyla kaydedildi</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">WeChat üzerinden bizimle iletişime geçin</system:String> |
|||
<system:String x:Key="ContactEmail">E-posta ile bizimle iletişime geçin</system:String> |
|||
<system:String x:Key="ContactWechatCopy">WeChat'i kopyala</system:String> |
|||
<system:String x:Key="ContactEmailCopy">E-postayı kopyala</system:String> |
|||
<system:String x:Key="PhoneNumber">Cep telefonu</system:String> |
|||
<system:String x:Key="Integral">Puan</system:String> |
|||
<system:String x:Key="Logout">Çıkış yap</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Cihaz Güncellemesi</system:String> |
|||
<system:String x:Key="CurrentVersion">Geçerli Sürüm</system:String> |
|||
<system:String x:Key="NewVersion">En Son Sürüm</system:String> |
|||
<system:String x:Key="DeviceStatus">Cihaz Durumu</system:String> |
|||
<system:String x:Key="DeviceName">Cihaz Adı</system:String> |
|||
<system:String x:Key="UpgradeNow">Şimdi Güncelle</system:String> |
|||
<system:String x:Key="GetVersion">Sürümü Al</system:String> |
|||
<system:String x:Key="AppVersion">Uygulama Sürümü</system:String> |
|||
<system:String x:Key="ServerVersion">Sunucu Sürümü</system:String> |
|||
<system:String x:Key="DeviceVersion">Cihaz Sürümü</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Sürüm Güncellemeleri</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Firmware, uygulama, cihaz güncellemeleri vb.</system:String> |
|||
<system:String x:Key="BurnLog">Yazma Kaydı</system:String> |
|||
<system:String x:Key="KeyBurnLog">Anahtar Yazma Geçmişi</system:String> |
|||
<system:String x:Key="IntegralRecharge">Puan yükleme</system:String> |
|||
<system:String x:Key="MembershipOpen">Üyelik</system:String> |
|||
<system:String x:Key="IntegralRecord">Puan geçmişi</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Puanlarınız</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Yükleme tutarını girin</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Ödeme yöntemini seçin</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Öde</system:String> |
|||
<system:String x:Key="RemoteDetection">Uzaktan Algılama</system:String> |
|||
<system:String x:Key="RemoteCopy">Uzaktan Kopyalama</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS / Sabit Kod Kopyalama</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Frekansı algılamak için aşağıdaki Test düğmesine tıklayın. Cihazı bağladıktan sonra, test edilebilir mesafe içinde alt ünitenin bir tuşuna basın; frekans ekranda gösterilecektir.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Frekansı algılamak için aşağıdaki Test düğmesine tıklayın. Cihazı bağladıktan sonra, test edilebilir mesafe içinde alt ünitenin bir tuşuna basın; frekans ekranda gösterilecektir.</system:String> |
|||
<system:String x:Key="Mode">Mod:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Tespit</system:String> |
|||
<system:String x:Key="SkipThisKey">Bu tuşu atla</system:String> |
|||
<system:String x:Key="Recheck">Yeniden kontrol et</system:String> |
|||
<system:String x:Key="StartCopying">Kopyalamayı başlat</system:String> |
|||
<system:String x:Key="Lock">Kilitle</system:String> |
|||
<system:String x:Key="Unlock">Kilidi aç</system:String> |
|||
<system:String x:Key="Trunk">Bagajlık</system:String> |
|||
<system:String x:Key="Panic">Araç bulma</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Eşleşen marka bulunamadı</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Eşleşen marka bulunamadı</system:String> |
|||
<system:String x:Key="NoKeyData">Anahtar verisi yok</system:String> |
|||
|
|||
<system:String x:Key="Data">Veri:</system:String> |
|||
<system:String x:Key="Type">Tür:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Bit hızı:</system:String> |
|||
<system:String x:Key="BitCode">Bit uzunluğu:</system:String> |
|||
<system:String x:Key="StartBurning">Programlamayı Başlat</system:String> |
|||
<system:String x:Key="Tip">İpucu</system:String> |
|||
<system:String x:Key="HomeTip">Arkadaşlarınıza önerin! WeChat, QQ vb. ile QR kodunu tarayarak indirip kurun.</system:String> |
|||
<system:String x:Key="Slogan">Çilingirlere her zaman olduğu gibi destek vermeye devam edeceğiz.</system:String> |
|||
<system:String x:Key="ScanToDownload">Mobil uygulamayı indirmek için tarayın</system:String> |
|||
<system:String x:Key="GetLatestInfo">En son haberleri ve desteği alın</system:String> |
|||
<system:String x:Key="ViewMore">Daha fazla görüntüle</system:String> |
|||
<system:String x:Key="Loading">Yükleniyor...</system:String> |
|||
<system:String x:Key="CloudData">Bulut Verileri</system:String> |
|||
<system:String x:Key="UpdateNow">Şimdi Güncelle</system:String> |
|||
<system:String x:Key="UpdateLater">Daha Sonra Güncelle</system:String> |
|||
<system:String x:Key="NewVersionFound">Yeni Sürüm Bulundu</system:String> |
|||
<system:String x:Key="UpdateTips">Güncelleme İpuçları</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Bulut veri senkronizasyonu</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Bulut verileri senkronize edilirken cihaz yeniden başlatılır ve bağlantı geçici olarak kesilir. Bu normaldir. Lütfen sistem cihaz işlevlerini yeniden başlatırken sabırla bekleyin.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Cihaz kararlılığını artırmak için sistem ayarlarını düzenleyin: Denetim Masası -> Güç Seçenekleri -> Plan ayarlarını değiştir -> Gelişmiş güç ayarlarını değiştir -> USB ayarları -> USB seçmeli askıya alma ayarı -> [Devre Dışı]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Uyarı: Lütfen işlemi cihaz bağlıyken gerçekleştirin</system:String> |
|||
<system:String x:Key="OpenUDiskTest">USB sürücüsünü aç (test)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">USB sürücüsünü kapat (test)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Dosya seç</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Klasör seç</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Cihazı etkin tut</system:String> |
|||
<system:String x:Key="SyncCloudData">Bulut verilerini senkronize et</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Інтелектуальні ключі. Інструменти</system:String> |
|||
<system:String x:Key="Settings">Налаштування</system:String> |
|||
<system:String x:Key="Language">Мова</system:String> |
|||
<system:String x:Key="AppSettings">Налаштування додатка</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Налаштування базових параметрів та вподобань додатка</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Налаштування інтерфейсу</system:String> |
|||
<system:String x:Key="CacheSettings">Налаштування кешу</system:String> |
|||
<system:String x:Key="ClearCache">Очистити кеш даних</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Мова інтерфейсу:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Список моделей ключів</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Зберегти</system:String> |
|||
<system:String x:Key="CancelButton">Скасувати</system:String> |
|||
<system:String x:Key="ConfirmButton">Підтвердити</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Пошук назви бренду, англійською або піньїном...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Пошук назви автомобільного ключа, англійською або піньїном...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Підмодуль:</system:String> |
|||
<system:String x:Key="Frequency">Частота:</system:String> |
|||
<system:String x:Key="Chip">Довідкові відомості:</system:String> |
|||
<system:String x:Key="Time">Час:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Довідкові відомості</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Налаштування успішно збережено</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Зв'яжіться з нами через WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Зв'яжіться з нами через Email</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Копіювати WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Копіювати Email</system:String> |
|||
<system:String x:Key="PhoneNumber">Мобільний телефон</system:String> |
|||
<system:String x:Key="Integral">Бали</system:String> |
|||
<system:String x:Key="Logout">Вийти</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Оновлення пристрою</system:String> |
|||
<system:String x:Key="CurrentVersion">Поточна версія</system:String> |
|||
<system:String x:Key="NewVersion">Остання версія</system:String> |
|||
<system:String x:Key="DeviceStatus">Стан пристрою</system:String> |
|||
<system:String x:Key="DeviceName">Назва пристрою</system:String> |
|||
<system:String x:Key="UpgradeNow">Оновити зараз</system:String> |
|||
<system:String x:Key="GetVersion">Перевірити версію</system:String> |
|||
<system:String x:Key="AppVersion">Версія додатка</system:String> |
|||
<system:String x:Key="ServerVersion">Версія сервера</system:String> |
|||
<system:String x:Key="DeviceVersion">Версія пристрою</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Центр оновлень</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Оновлення прошивки, додатка, пристроїв тощо</system:String> |
|||
<system:String x:Key="BurnLog">Журнал запису</system:String> |
|||
<system:String x:Key="KeyBurnLog">Історія запису ключа</system:String> |
|||
<system:String x:Key="IntegralRecharge">Поповнення балів</system:String> |
|||
<system:String x:Key="MembershipOpen">Підписка</system:String> |
|||
<system:String x:Key="IntegralRecord">Історія балів</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Ваші бали</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Введіть суму поповнення</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Виберіть спосіб оплати</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Оплатити</system:String> |
|||
<system:String x:Key="RemoteDetection">Віддалене виявлення</system:String> |
|||
<system:String x:Key="RemoteCopy">Копіювання пульта</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Копіювання HCS / фіксованого коду</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Натисніть кнопку «Тест» нижче, щоб визначити частоту. Після підключення пристрою натисніть кнопку на дочірньому пристрої в межах тестової дистанції — частота буде відображена.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Натисніть кнопку «Тест» нижче, щоб визначити частоту. Після підключення пристрою натисніть кнопку на дочірньому пристрої в межах тестової дистанції — частота буде відображена.</system:String> |
|||
<system:String x:Key="Mode">Режим:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Виявлення</system:String> |
|||
<system:String x:Key="SkipThisKey">Пропустити цю клавішу</system:String> |
|||
<system:String x:Key="Recheck">Перевірити знову</system:String> |
|||
<system:String x:Key="StartCopying">Почати копіювання</system:String> |
|||
<system:String x:Key="Lock">Заблокувати</system:String> |
|||
<system:String x:Key="Unlock">Розблокувати</system:String> |
|||
<system:String x:Key="Trunk">Багажник</system:String> |
|||
<system:String x:Key="Panic">Пошук автомобіля</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Відповідний бренд не знайдено</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Відповідний бренд не знайдено</system:String> |
|||
<system:String x:Key="NoKeyData">Дані ключа недоступні</system:String> |
|||
|
|||
<system:String x:Key="Data">Дані:</system:String> |
|||
<system:String x:Key="Type">Тип:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Бітрейт:</system:String> |
|||
<system:String x:Key="BitCode">Довжина в бітах:</system:String> |
|||
<system:String x:Key="StartBurning">Bắt đầu lập trình</system:String> |
|||
<system:String x:Key="Tip">Порада</system:String> |
|||
<system:String x:Key="HomeTip">Рекомендуйте друзям! Відскануйте QR-код за допомогою WeChat, QQ тощо, щоб завантажити та встановити.</system:String> |
|||
<system:String x:Key="Slogan">Ми й надалі будемо підтримувати слюсарів, як і раніше.</system:String> |
|||
<system:String x:Key="ScanToDownload">Відскануйте, щоб завантажити мобільний додаток</system:String> |
|||
<system:String x:Key="GetLatestInfo">Отримуйте останні новини та підтримку</system:String> |
|||
<system:String x:Key="ViewMore">Показати більше</system:String> |
|||
<system:String x:Key="Loading">Завантаження...</system:String> |
|||
<system:String x:Key="CloudData">Хмарні Дані</system:String> |
|||
<system:String x:Key="UpdateNow">Оновити Тепер</system:String> |
|||
<system:String x:Key="UpdateLater">Оновити Пізніше</system:String> |
|||
<system:String x:Key="NewVersionFound">Знайдено Нову Версію</system:String> |
|||
<system:String x:Key="UpdateTips">Поради з Оновлення</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Синхронізація хмарних даних</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Під час синхронізації хмарних даних пристрій перезавантажиться, а з’єднання буде тимчасово перервано. Це нормально. Будь ласка, зачекайте, доки система повторно ініціалізує функції пристрою.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Щоб підвищити стабільність пристрою, змініть параметри системи: Панель керування -> Електроживлення -> Змінити параметри плану -> Змінити додаткові параметри живлення -> Параметри USB -> Параметр вибіркового призупинення USB -> [Вимкнено]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Нагадування: виконуйте операцію, коли пристрій підключено</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Відкрити USB-накопичувач (тест)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Закрити USB-накопичувач (тест)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Вибрати файл</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Вибрати папку</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Підтримувати пристрій активним</system:String> |
|||
<system:String x:Key="SyncCloudData">Синхронізувати хмарні дані</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,116 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK. Công cụ khóa thông minh</system:String> |
|||
<system:String x:Key="Settings">Cài đặt</system:String> |
|||
<system:String x:Key="Language">Ngôn ngữ</system:String> |
|||
<system:String x:Key="AppSettings">Cài đặt ứng dụng</system:String> |
|||
<system:String x:Key="AppSettingsDescription">Cấu hình tham số cơ bản và tùy chọn ứng dụng</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">Cài đặt giao diện</system:String> |
|||
<system:String x:Key="CacheSettings">Cài đặt bộ nhớ đệm</system:String> |
|||
<system:String x:Key="ClearCache">Xóa bộ nhớ đệm dữ liệu</system:String> |
|||
<system:String x:Key="InterfaceLanguage">Ngôn ngữ giao diện:</system:String> |
|||
<system:String x:Key="KeyModelTitle">Danh sách mô hình khóa</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">Lưu</system:String> |
|||
<system:String x:Key="CancelButton">Hủy</system:String> |
|||
<system:String x:Key="ConfirmButton">Xác nhận</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">Tìm kiếm tên thương hiệu, tiếng Anh hoặc pinyin...</system:String> |
|||
<system:String x:Key="SearchKeyModel">Tìm kiếm tên khóa xe, tiếng Anh hoặc pinyin...</system:String> |
|||
|
|||
<system:String x:Key="Remote">Đơn vị phụ:</system:String> |
|||
<system:String x:Key="Frequency">Tần số:</system:String> |
|||
<system:String x:Key="Chip">Thông tin tham chiếu:</system:String> |
|||
<system:String x:Key="Time">Thời gian:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">Thông tin tham chiếu</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">Cài đặt đã được lưu thành công</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">Liên hệ chúng tôi qua WeChat</system:String> |
|||
<system:String x:Key="ContactEmail">Liên hệ chúng tôi qua Email</system:String> |
|||
<system:String x:Key="ContactWechatCopy">Sao chép WeChat</system:String> |
|||
<system:String x:Key="ContactEmailCopy">Sao chép Email</system:String> |
|||
<system:String x:Key="PhoneNumber">Điện thoại di động</system:String> |
|||
<system:String x:Key="Integral">Điểm</system:String> |
|||
<system:String x:Key="Logout">Đăng xuất</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">Cập nhật thiết bị</system:String> |
|||
<system:String x:Key="CurrentVersion">Phiên bản hiện tại</system:String> |
|||
<system:String x:Key="NewVersion">Phiên bản mới nhất</system:String> |
|||
<system:String x:Key="DeviceStatus">Trạng thái thiết bị</system:String> |
|||
<system:String x:Key="DeviceName">Tên thiết bị</system:String> |
|||
<system:String x:Key="UpgradeNow">Nâng cấp ngay</system:String> |
|||
<system:String x:Key="GetVersion">Lấy phiên bản</system:String> |
|||
<system:String x:Key="AppVersion">Phiên bản ứng dụng</system:String> |
|||
<system:String x:Key="ServerVersion">Phiên bản máy chủ</system:String> |
|||
<system:String x:Key="DeviceVersion">Phiên bản thiết bị</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">Trung tâm cập nhật phiên bản</system:String> |
|||
<system:String x:Key="UpdateCenterTips">Cập nhật firmware, ứng dụng, thiết bị, v.v.</system:String> |
|||
<system:String x:Key="BurnLog">Nhật ký ghi</system:String> |
|||
<system:String x:Key="KeyBurnLog">Lịch sử ghi khóa</system:String> |
|||
<system:String x:Key="IntegralRecharge">Nạp điểm</system:String> |
|||
<system:String x:Key="MembershipOpen">Thành viên</system:String> |
|||
<system:String x:Key="IntegralRecord">Lịch sử điểm</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">Điểm của bạn</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">Nhập số tiền nạp</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">Chọn phương thức thanh toán</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">WeChat Pay</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">Thanh toán</system:String> |
|||
<system:String x:Key="RemoteDetection">Phát hiện từ xa</system:String> |
|||
<system:String x:Key="RemoteCopy">Sao chép điều khiển từ xa</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">Sao chép HCS / Mã cố định</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">Nhấp vào nút Kiểm tra bên dưới để phát hiện tần số. Sau khi kết nối thiết bị, nhấn một phím trên thiết bị phụ trong phạm vi kiểm tra được, tần số sẽ hiển thị ngay lập tức.</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">Nhấp vào nút Kiểm tra bên dưới để phát hiện tần số. Sau khi kết nối thiết bị, nhấn một phím trên thiết bị phụ trong phạm vi kiểm tra được, tần số sẽ hiển thị ngay lập tức.</system:String> |
|||
<system:String x:Key="Mode">Chế độ:</system:String> |
|||
|
|||
<system:String x:Key="Detection">Phát hiện</system:String> |
|||
<system:String x:Key="SkipThisKey">Bỏ qua phím này</system:String> |
|||
<system:String x:Key="Recheck">Kiểm tra lại</system:String> |
|||
<system:String x:Key="StartCopying">Bắt đầu sao chép</system:String> |
|||
<system:String x:Key="Lock">Khóa</system:String> |
|||
<system:String x:Key="Unlock">Mở khóa</system:String> |
|||
<system:String x:Key="Trunk">Cốp xe</system:String> |
|||
<system:String x:Key="Panic">Tìm xe</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">Không tìm thấy thương hiệu phù hợp</system:String> |
|||
<system:String x:Key="TryOtherKeywords">Không tìm thấy thương hiệu phù hợp</system:String> |
|||
<system:String x:Key="NoKeyData">Không có dữ liệu chìa khóa</system:String> |
|||
|
|||
<system:String x:Key="Data">Dữ liệu:</system:String> |
|||
<system:String x:Key="Type">Loại:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">Tốc độ bit:</system:String> |
|||
<system:String x:Key="BitCode">Độ dài bit:</system:String> |
|||
<system:String x:Key="StartBurning">Bắt đầu lập trình</system:String> |
|||
<system:String x:Key="Tip">Mẹo</system:String> |
|||
<system:String x:Key="HomeTip">Giới thiệu cho bạn bè của bạn! Quét mã QR bằng WeChat, QQ, v.v. để tải về và cài đặt.</system:String> |
|||
<system:String x:Key="Slogan">Chúng tôi sẽ tiếp tục đồng hành cùng thợ khóa như vẫn thường làm.</system:String> |
|||
<system:String x:Key="ScanToDownload">Quét để tải ứng dụng di động</system:String> |
|||
<system:String x:Key="GetLatestInfo">Nhận thông tin mới nhất và hỗ trợ</system:String> |
|||
<system:String x:Key="ViewMore">Xem thêm</system:String> |
|||
<system:String x:Key="Loading">Đang tải...</system:String> |
|||
<system:String x:Key="CloudData">Dữ Liệu Điện Tử</system:String> |
|||
<system:String x:Key="UpdateNow">Cập Nhật Ngay</system:String> |
|||
<system:String x:Key="UpdateLater">Cập Nhật Sau</system:String> |
|||
<system:String x:Key="NewVersionFound">Tìm Thấy Phiên Bản Mới</system:String> |
|||
<system:String x:Key="UpdateTips">Mẹo Cập Nhật</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">Đồng bộ dữ liệu đám mây</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">Trong quá trình đồng bộ dữ liệu đám mây, thiết bị sẽ khởi động lại và kết nối sẽ tạm thời bị ngắt. Đây là hiện tượng bình thường. Vui lòng kiên nhẫn chờ hệ thống khởi tạo lại các chức năng của thiết bị.</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">Để tăng độ ổn định của thiết bị, hãy điều chỉnh cài đặt hệ thống: Bảng điều khiển -> Tùy chọn nguồn -> Thay đổi cài đặt gói -> Thay đổi cài đặt nguồn nâng cao -> Cài đặt USB -> Cài đặt tạm ngưng chọn lọc USB -> [Đã tắt]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">Nhắc nhở: Vui lòng thao tác khi thiết bị đã được kết nối</system:String> |
|||
<system:String x:Key="OpenUDiskTest">Mở ổ USB (thử nghiệm)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">Đóng ổ USB (thử nghiệm)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 Chọn tệp</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 Chọn thư mục</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">Giữ thiết bị hoạt động</system:String> |
|||
<system:String x:Key="SyncCloudData">Đồng bộ dữ liệu đám mây</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,118 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:system="clr-namespace:System;assembly=mscorlib"> |
|||
<system:String x:Key="AppTitle">AIK.智能钥匙工具</system:String> |
|||
<system:String x:Key="Settings">设置</system:String> |
|||
<system:String x:Key="Language">语言</system:String> |
|||
<system:String x:Key="AppSettings">应用设置</system:String> |
|||
<system:String x:Key="AppSettingsDescription">配置应用程序的基本参数和偏好设置</system:String> |
|||
|
|||
<system:String x:Key="InterfaceSettings">界面设置</system:String> |
|||
<system:String x:Key="CacheSettings">缓存设置</system:String> |
|||
<system:String x:Key="ClearCache">清除数据缓存</system:String> |
|||
<system:String x:Key="InterfaceLanguage">界面语言:</system:String> |
|||
<system:String x:Key="KeyModelTitle">钥匙型号列表</system:String> |
|||
|
|||
<system:String x:Key="SaveButton">保存</system:String> |
|||
<system:String x:Key="CancelButton">取消</system:String> |
|||
<system:String x:Key="ConfirmButton">确认</system:String> |
|||
|
|||
<system:String x:Key="SearchCarBrand">搜索品牌名称、英文或拼音...</system:String> |
|||
<system:String x:Key="SearchKeyModel">搜索车辆钥匙名称、英文或拼音...</system:String> |
|||
|
|||
<system:String x:Key="Remote">子机:</system:String> |
|||
<system:String x:Key="Frequency">频率:</system:String> |
|||
<system:String x:Key="Chip">参考信息:</system:String> |
|||
<system:String x:Key="Time">时间:</system:String> |
|||
<system:String x:Key="ID">ID:</system:String> |
|||
|
|||
<system:String x:Key="Information">参考信息</system:String> |
|||
|
|||
<system:String x:Key="SaveSuccess">设置保存成功</system:String> |
|||
|
|||
<system:String x:Key="ContactWechat">微信联系我们</system:String> |
|||
<system:String x:Key="ContactEmail">邮箱联系我们</system:String> |
|||
<system:String x:Key="ContactWechatCopy">微信复制</system:String> |
|||
<system:String x:Key="ContactEmailCopy">邮箱复制</system:String> |
|||
<system:String x:Key="PhoneNumber">手机</system:String> |
|||
<system:String x:Key="Integral">积分</system:String> |
|||
<system:String x:Key="Logout">登出</system:String> |
|||
|
|||
<system:String x:Key="DeviceUpdate">设备升级</system:String> |
|||
<system:String x:Key="CurrentVersion">当前版本</system:String> |
|||
<system:String x:Key="NewVersion">最新版本</system:String> |
|||
<system:String x:Key="DeviceStatus">设备状态</system:String> |
|||
<system:String x:Key="DeviceName">设备名称</system:String> |
|||
<system:String x:Key="UpgradeNow">立即升级</system:String> |
|||
<system:String x:Key="GetVersion">获取版本</system:String> |
|||
<system:String x:Key="AppVersion">APP版本</system:String> |
|||
<system:String x:Key="ServerVersion">服务器版本</system:String> |
|||
<system:String x:Key="DeviceVersion">设备版本</system:String> |
|||
<system:String x:Key="UpdateCenterTitle">版本升级</system:String> |
|||
<system:String x:Key="UpdateCenterTips">固件、应用、设备等版本升级</system:String> |
|||
<system:String x:Key="BurnLog">烧录记录</system:String> |
|||
<system:String x:Key="KeyBurnLog">钥匙烧录记录</system:String> |
|||
<system:String x:Key="IntegralRecharge">积分充值</system:String> |
|||
<system:String x:Key="MembershipOpen">会员开通</system:String> |
|||
<system:String x:Key="IntegralRecord">积分记录</system:String> |
|||
<system:String x:Key="RechargeCurrentIntegral">您的积分</system:String> |
|||
<system:String x:Key="RechargeAmountTitle">请输入充值金额</system:String> |
|||
<system:String x:Key="RechargePaymentMethodTitle">请选择支付方式</system:String> |
|||
<system:String x:Key="PaymentMethodWechat">微信支付</system:String> |
|||
<system:String x:Key="PaymentMethodPaypal">PayPal</system:String> |
|||
<system:String x:Key="RechargePayButton">支付</system:String> |
|||
|
|||
<system:String x:Key="RemoteDetection">遥控检测</system:String> |
|||
<system:String x:Key="RemoteCopy">遥控拷贝</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopy">HCS/固定码拷贝</system:String> |
|||
<system:String x:Key="HCSFixedCodeCopyTips">点击下方检测按钮检测频率,连接设备后,按下子机按键并在可测试距离内,即能显示频率</system:String> |
|||
<system:String x:Key="RemoteDetectionTips">点击下方检测按钮检测频率,连接设备后,按下子机按键并在可测试距离内,即能显示频率</system:String> |
|||
<system:String x:Key="Mode">模式:</system:String> |
|||
|
|||
<system:String x:Key="Detection">检测</system:String> |
|||
<system:String x:Key="SkipThisKey">跳过此键</system:String> |
|||
<system:String x:Key="Recheck">重新检测</system:String> |
|||
<system:String x:Key="StartCopying">开始拷贝</system:String> |
|||
<system:String x:Key="Lock">锁车</system:String> |
|||
<system:String x:Key="Unlock">开锁</system:String> |
|||
<system:String x:Key="Trunk">后备箱</system:String> |
|||
<system:String x:Key="Panic">寻车</system:String> |
|||
|
|||
<system:String x:Key="TryOtherBrands">没有找到匹配的品牌</system:String> |
|||
<system:String x:Key="TryOtherKeywords">没有找到匹配的品牌</system:String> |
|||
<system:String x:Key="NoKeyData">暂无钥匙数据</system:String> |
|||
|
|||
<system:String x:Key="Data">数据:</system:String> |
|||
<system:String x:Key="Type">类型:</system:String> |
|||
<system:String x:Key="ChannelCodeRate">码率:</system:String> |
|||
<system:String x:Key="BitCode">位数:</system:String> |
|||
|
|||
<system:String x:Key="StartBurning">开始烧录</system:String> |
|||
<system:String x:Key="Tip">提示</system:String> |
|||
<system:String x:Key="HomeTip">推荐给你的朋友吧,使用微信、qq等扫描二维码,即可下载安装</system:String> |
|||
<system:String x:Key="Slogan">我们将一如既往的为广大锁匠保驾护航</system:String> |
|||
<system:String x:Key="ScanToDownload">扫码下载移动端</system:String> |
|||
<system:String x:Key="GetLatestInfo">获取最新资讯与服务支持</system:String> |
|||
<system:String x:Key="ViewMore">查看更多</system:String> |
|||
<system:String x:Key="Loading">加载中...</system:String> |
|||
<system:String x:Key="CloudData">云数据</system:String> |
|||
<system:String x:Key="UpdateNow">立即更新</system:String> |
|||
<system:String x:Key="UpdateLater">稍后更新</system:String> |
|||
<system:String x:Key="NewVersionFound">发现新版本</system:String> |
|||
<system:String x:Key="UpdateTips">更新提示</system:String> |
|||
<system:String x:Key="CloudDataSyncTitle">云数据同步</system:String> |
|||
<system:String x:Key="CloudDataSyncHint">同步云数据时,设备会重启,连接会暂时断开属于正常现象,请耐心等待系统初始化设备功能</system:String> |
|||
<system:String x:Key="CloudDataSyncPowerHint">增加设备稳定性,可调系统设置:控制面板 -> 电源选项 -> 更改计划设置 -> 更改高级电源设置 -> USB 设置 -> USB 选择性暂停设置 -> [已禁用]</system:String> |
|||
<system:String x:Key="CloudDataSyncReminder">提醒:请在设备已连接状态下进行操作</system:String> |
|||
<system:String x:Key="OpenUDiskTest">打开U盘(测试)</system:String> |
|||
<system:String x:Key="CloseUDiskTest">关闭U盘(测试)</system:String> |
|||
<system:String x:Key="SelectFileButton">📁 选择文件</system:String> |
|||
<system:String x:Key="SelectFolderButton">📂 选择文件夹</system:String> |
|||
<system:String x:Key="KeepDeviceAlive">持续保活(设备)</system:String> |
|||
<system:String x:Key="SyncCloudData">同步云数据</system:String> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,29 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<Style x:Key="BannerButtonStyle" TargetType="Button"> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="BorderBrush" Value="White"/> |
|||
<Setter Property="BorderThickness" Value="1"/> |
|||
<Setter Property="Foreground" Value="White"/> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="Padding" Value="12,6"/> |
|||
<Setter Property="Cursor" Value="Hand"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border Background="{TemplateBinding Background}" |
|||
BorderBrush="{TemplateBinding BorderBrush}" |
|||
BorderThickness="{TemplateBinding BorderThickness}" |
|||
CornerRadius="4"> |
|||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Style.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter Property="Background" Value="#33FFFFFF"/> |
|||
</Trigger> |
|||
</Style.Triggers> |
|||
</Style> |
|||
</ResourceDictionary> |
|||
@ -0,0 +1,169 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<Style TargetType="Button" x:Key="NormalButtonStyle"> |
|||
<Setter Property="Effect"> |
|||
<Setter.Value> |
|||
<DropShadowEffect BlurRadius="10" Color="#333" ShadowDepth="0" Opacity="0.1"/> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Setter Property="Foreground" Value="White"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border BorderBrush="#16a1ff" BorderThickness="0" CornerRadius="5" ClipToBounds="True"> |
|||
<Border.Background> |
|||
<LinearGradientBrush StartPoint="0,1" EndPoint="1,0"> |
|||
<GradientStop Color="#16a1ff" Offset="0.3"/> |
|||
<GradientStop Color="#01c8fe" Offset="1"/> |
|||
</LinearGradientBrush> |
|||
</Border.Background> |
|||
<Grid> |
|||
<Border CornerRadius="5"> |
|||
<Border.Background> |
|||
<RadialGradientBrush Center="0,1" GradientOrigin="0,1" RadiusX="0.4" RadiusY="0.8"> |
|||
<GradientStop Color="#88b4fee7" Offset="0.2"/> |
|||
<GradientStop Color="Transparent" Offset="1"/> |
|||
</RadialGradientBrush> |
|||
</Border.Background> |
|||
</Border> |
|||
<Border Background="#11000000" CornerRadius="5" Visibility="Collapsed" Name="mask"/> |
|||
|
|||
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" |
|||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> |
|||
</Grid> |
|||
</Border> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter TargetName="mask" Property="Visibility" Value="Visible"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<Style TargetType="Button" x:Key="WindowControlButtonStyle"> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Grid Background="Transparent"> |
|||
<Border Background="#11000000" Visibility="Collapsed" Name="mask"/> |
|||
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" |
|||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> |
|||
</Grid> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter TargetName="mask" Property="Visibility" Value="Visible"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<Style TargetType="Button" x:Key="WindowMaxControlButtonStyle"> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Grid Background="Transparent"> |
|||
<Border Background="#11000000" Visibility="Collapsed" Name="mask"/> |
|||
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" |
|||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> |
|||
</Grid> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter TargetName="mask" Property="Visibility" Value="Visible"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<!--最大化、还原状态|图标切换--> |
|||
<Style.Triggers> |
|||
<DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Value="Maximized"> |
|||
<Setter Property="Content" Value=""/> |
|||
</DataTrigger> |
|||
<DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Value="Normal"> |
|||
<Setter Property="Content" Value=""/> |
|||
</DataTrigger> |
|||
</Style.Triggers> |
|||
</Style> |
|||
|
|||
<Style x:Key="GenerateK3ButtonStyle" TargetType="Button"> |
|||
<Setter Property="Background"> |
|||
<Setter.Value> |
|||
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> |
|||
<GradientStop Color="#FF0099FF" Offset="0"/> |
|||
<GradientStop Color="#FF0078D7" Offset="1"/> |
|||
</LinearGradientBrush> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Setter Property="Foreground" Value="White"/> |
|||
<Setter Property="BorderBrush" Value="#FF0066B3"/> |
|||
<Setter Property="BorderThickness" Value="1"/> |
|||
<Setter Property="Padding" Value="20,12"/> |
|||
<Setter Property="Margin" Value="10"/> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="FontWeight" Value="SemiBold"/> |
|||
<Setter Property="Cursor" Value="Hand"/> |
|||
<Setter Property="HorizontalContentAlignment" Value="Center"/> |
|||
<Setter Property="VerticalContentAlignment" Value="Center"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border x:Name="border" |
|||
Background="{TemplateBinding Background}" |
|||
BorderBrush="{TemplateBinding BorderBrush}" |
|||
BorderThickness="{TemplateBinding BorderThickness}" |
|||
CornerRadius="8" |
|||
SnapsToDevicePixels="True"> |
|||
<ContentPresenter x:Name="contentPresenter" |
|||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" |
|||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" |
|||
Margin="{TemplateBinding Padding}" |
|||
RecognizesAccessKey="True" |
|||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> |
|||
</Border> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter TargetName="border" Property="Background"> |
|||
<Setter.Value> |
|||
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> |
|||
<GradientStop Color="#FF33ADFF" Offset="0"/> |
|||
<GradientStop Color="#FF0095FF" Offset="1"/> |
|||
</LinearGradientBrush> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Setter TargetName="border" Property="BorderBrush" Value="#FF008CE6"/> |
|||
<Setter TargetName="border" Property="Effect"> |
|||
<Setter.Value> |
|||
<DropShadowEffect BlurRadius="10" |
|||
ShadowDepth="0" |
|||
Color="#400099FF" |
|||
Opacity="0.6"/> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Trigger> |
|||
<Trigger Property="IsPressed" Value="True"> |
|||
<Setter TargetName="border" Property="Background"> |
|||
<Setter.Value> |
|||
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> |
|||
<GradientStop Color="#FF0066CC" Offset="0"/> |
|||
<GradientStop Color="#FF0052A3" Offset="1"/> |
|||
</LinearGradientBrush> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Setter TargetName="border" Property="BorderBrush" Value="#FF004C99"/> |
|||
<Setter TargetName="contentPresenter" Property="Margin" Value="20,13,20,11"/> |
|||
</Trigger> |
|||
<Trigger Property="IsEnabled" Value="False"> |
|||
<Setter TargetName="border" Property="Background" Value="#FFCCCCCC"/> |
|||
<Setter TargetName="border" Property="BorderBrush" Value="#FF999999"/> |
|||
<Setter TargetName="contentPresenter" Property="TextElement.Foreground" Value="#FF666666"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
</ResourceDictionary> |
|||
@ -0,0 +1,22 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<!-- 提示语小标题样式 --> |
|||
<Style x:Key="HintTitleStyle" TargetType="TextBlock"> |
|||
<Setter Property="Foreground" Value="#546E7A"/> |
|||
<Setter Property="FontSize" Value="16"/> |
|||
<Setter Property="FontWeight" Value="Bold"/> |
|||
<Setter Property="HorizontalAlignment" Value="Left"/> |
|||
<Setter Property="Margin" Value="0,0,0,5"/> |
|||
</Style> |
|||
|
|||
<!-- 提示语正文样式 --> |
|||
<Style x:Key="HintContentStyle" TargetType="TextBlock"> |
|||
<Setter Property="Foreground" Value="#78909C"/> |
|||
<Setter Property="FontSize" Value="13"/> |
|||
<Setter Property="FontWeight" Value="Normal"/> |
|||
<Setter Property="TextWrapping" Value="Wrap"/> |
|||
<Setter Property="HorizontalAlignment" Value="Left"/> |
|||
<Setter Property="LineHeight" Value="20"/> |
|||
<Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> |
|||
</Style> |
|||
</ResourceDictionary> |
|||
@ -0,0 +1,343 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<!-- BoolToVisibility Converter --> |
|||
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/> |
|||
|
|||
<!-- 基础加载样式 --> |
|||
<Style x:Key="BaseLoadingIndicatorStyle" TargetType="Control"> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="#80FFFFFF" |
|||
CornerRadius="8" |
|||
VerticalAlignment="Center" |
|||
HorizontalAlignment="Center" |
|||
Padding="20"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<ProgressBar IsIndeterminate="True" |
|||
Width="60" |
|||
Height="6" |
|||
Background="#E0E0E0" |
|||
Foreground="#0078D7" |
|||
Margin="0,0,0,10"/> |
|||
<TextBlock Text="加载中..." |
|||
HorizontalAlignment="Center" |
|||
Foreground="#666666" |
|||
FontSize="14"/> |
|||
</StackPanel> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<!-- 小型加载样式 --> |
|||
<Style x:Key="SmallLoadingIndicatorStyle" TargetType="Control" BasedOn="{StaticResource BaseLoadingIndicatorStyle}"> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="#80FFFFFF" |
|||
CornerRadius="4" |
|||
VerticalAlignment="Center" |
|||
HorizontalAlignment="Center" |
|||
Padding="10"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<ProgressBar IsIndeterminate="True" |
|||
Width="40" |
|||
Height="4" |
|||
Background="#E0E0E0" |
|||
Foreground="#0078D7" |
|||
Margin="0,0,0,5"/> |
|||
<TextBlock Text="加载中..." |
|||
HorizontalAlignment="Center" |
|||
Foreground="#666666" |
|||
FontSize="12"/> |
|||
</StackPanel> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<!-- 大型加载样式 --> |
|||
<Style x:Key="LargeLoadingIndicatorStyle" TargetType="Control" BasedOn="{StaticResource BaseLoadingIndicatorStyle}"> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="#80FFFFFF" |
|||
CornerRadius="12" |
|||
VerticalAlignment="Center" |
|||
HorizontalAlignment="Center" |
|||
Padding="30"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<ProgressBar IsIndeterminate="True" |
|||
Width="80" |
|||
Height="8" |
|||
Background="#E0E0E0" |
|||
Foreground="#0078D7" |
|||
Margin="0,0,0,15"/> |
|||
<TextBlock Text="加载中,请稍候..." |
|||
HorizontalAlignment="Center" |
|||
Foreground="#666666" |
|||
FontSize="16"/> |
|||
</StackPanel> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<Style x:Key="LoadingIndicatorStyle" TargetType="Control"> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="#80FFFFFF" |
|||
CornerRadius="8" |
|||
VerticalAlignment="Center" |
|||
HorizontalAlignment="Center" |
|||
Padding="20"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<ProgressBar IsIndeterminate="True" |
|||
Width="60" |
|||
Height="6" |
|||
Background="#E0E0E0" |
|||
Foreground="#0078D7" |
|||
Margin="0,0,0,10"/> |
|||
<TextBlock Text="加载中..." |
|||
HorizontalAlignment="Center" |
|||
Foreground="#666666" |
|||
FontSize="14"/> |
|||
</StackPanel> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<!-- 改良版经典旋转圆圈样式 --> |
|||
<Style x:Key="ClassicSpinnerStyle" TargetType="Control"> |
|||
<Setter Property="Foreground" Value="#0078D7"/> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="Padding" Value="16"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="{TemplateBinding Background}" |
|||
CornerRadius="{TemplateBinding Tag}" |
|||
Padding="{TemplateBinding Padding}"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<!-- 旋转圆圈 --> |
|||
<Grid Width="40" Height="40" |
|||
HorizontalAlignment="Center"> |
|||
<Ellipse x:Name="SpinnerCircle" |
|||
Width="32" Height="32" |
|||
Stroke="{TemplateBinding Foreground}" |
|||
StrokeThickness="3" |
|||
StrokeDashArray="1 4" |
|||
StrokeDashCap="Round" |
|||
RenderTransformOrigin="0.5,0.5"> |
|||
<Ellipse.RenderTransform> |
|||
<RotateTransform Angle="0"/> |
|||
</Ellipse.RenderTransform> |
|||
</Ellipse> |
|||
|
|||
<!-- 内圈点缀 --> |
|||
<Ellipse Width="8" Height="8" |
|||
Fill="{TemplateBinding Foreground}" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Top" |
|||
Margin="0,2,0,0"> |
|||
<Ellipse.RenderTransform> |
|||
<RotateTransform Angle="0"/> |
|||
</Ellipse.RenderTransform> |
|||
</Ellipse> |
|||
</Grid> |
|||
|
|||
<!-- 加载文字 --> |
|||
<TextBlock x:Name="LoadingText" |
|||
Text="加载中..." |
|||
Foreground="#666666" |
|||
FontSize="14" |
|||
FontWeight="Normal" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"/> |
|||
</StackPanel> |
|||
</Border> |
|||
|
|||
<ControlTemplate.Triggers> |
|||
<EventTrigger RoutedEvent="Loaded"> |
|||
<BeginStoryboard> |
|||
<Storyboard> |
|||
<!-- 主圆圈旋转动画 --> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="SpinnerCircle" |
|||
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)" |
|||
From="0" To="360" Duration="0:0:0.8" |
|||
RepeatBehavior="Forever"/> |
|||
|
|||
<!-- 内圈点旋转动画 --> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="SpinnerCircle" |
|||
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)" |
|||
From="0" To="360" Duration="0:0:0.8" |
|||
RepeatBehavior="Forever"/> |
|||
|
|||
<!-- 文字淡入动画 --> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="LoadingText" |
|||
Storyboard.TargetProperty="Opacity" |
|||
From="0" To="1" Duration="0:0:0.3"/> |
|||
</Storyboard> |
|||
</BeginStoryboard> |
|||
</EventTrigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
<!-- 带动态点的旋转样式 --> |
|||
<Style x:Key="ClassicSpinnerWithDotsStyle" TargetType="Control"> |
|||
<Setter Property="Foreground" Value="#0078D7"/> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="Padding" Value="20"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="{TemplateBinding Background}" |
|||
CornerRadius="{TemplateBinding Tag}" |
|||
Padding="{TemplateBinding Padding}"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<!-- 旋转容器 --> |
|||
<Grid Width="48" Height="48" |
|||
Margin="0,0,0,12"> |
|||
<Ellipse x:Name="MainSpinner" |
|||
Width="40" Height="40" |
|||
Stroke="{TemplateBinding Foreground}" |
|||
StrokeThickness="2.5" |
|||
StrokeDashArray="0.8 6" |
|||
StrokeDashCap="Round" |
|||
RenderTransformOrigin="0.5,0.5"> |
|||
<Ellipse.RenderTransform> |
|||
<RotateTransform Angle="0"/> |
|||
</Ellipse.RenderTransform> |
|||
</Ellipse> |
|||
</Grid> |
|||
|
|||
<!-- 加载文字带动态点 --> |
|||
<StackPanel Orientation="Horizontal" |
|||
HorizontalAlignment="Center"> |
|||
<TextBlock Text="加载中" |
|||
Foreground="#555555" |
|||
FontSize="13" |
|||
FontWeight="Medium"/> |
|||
<TextBlock x:Name="Dot1" Text="." Foreground="#555555" FontSize="16" FontWeight="Bold" Opacity="0.3" Margin="2,0,0,0"/> |
|||
<TextBlock x:Name="Dot2" Text="." Foreground="#555555" FontSize="16" FontWeight="Bold" Opacity="0.6" Margin="2,0,0,0"/> |
|||
<TextBlock x:Name="Dot3" Text="." Foreground="#555555" FontSize="16" FontWeight="Bold" Opacity="1" Margin="2,0,0,0"/> |
|||
</StackPanel> |
|||
</StackPanel> |
|||
</Border> |
|||
|
|||
<ControlTemplate.Triggers> |
|||
<EventTrigger RoutedEvent="Loaded"> |
|||
<BeginStoryboard> |
|||
<Storyboard> |
|||
<!-- 主圆圈旋转动画 --> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="MainSpinner" |
|||
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)" |
|||
From="0" To="360" Duration="0:0:1.2" |
|||
RepeatBehavior="Forever"/> |
|||
|
|||
<!-- 动态点动画 --> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="Dot1" |
|||
Storyboard.TargetProperty="Opacity" |
|||
From="0.3" To="1" Duration="0:0:0.4" |
|||
AutoReverse="True" RepeatBehavior="Forever"/> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="Dot2" |
|||
Storyboard.TargetProperty="Opacity" |
|||
From="0.6" To="1" Duration="0:0:0.4" |
|||
BeginTime="0:0:0.2" |
|||
AutoReverse="True" RepeatBehavior="Forever"/> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="Dot3" |
|||
Storyboard.TargetProperty="Opacity" |
|||
From="1" To="0.3" Duration="0:0:0.4" |
|||
BeginTime="0:0:0.4" |
|||
AutoReverse="True" RepeatBehavior="Forever"/> |
|||
</Storyboard> |
|||
</BeginStoryboard> |
|||
</EventTrigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
<!-- 简约版旋转样式 --> |
|||
<Style x:Key="SimpleSpinnerStyle" TargetType="Control"> |
|||
<Setter Property="Foreground" Value="#0078D7"/> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="Padding" Value="16"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Control"> |
|||
<Border Background="{TemplateBinding Background}" |
|||
CornerRadius="{TemplateBinding Tag}" |
|||
Padding="{TemplateBinding Padding}"> |
|||
<StackPanel Orientation="Vertical" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"> |
|||
<!-- 简约旋转圆 --> |
|||
<Ellipse x:Name="SimpleSpinner" |
|||
Width="28" Height="28" |
|||
Stroke="{TemplateBinding Foreground}" |
|||
StrokeThickness="2" |
|||
StrokeDashArray="1 3" |
|||
StrokeDashCap="Round" |
|||
RenderTransformOrigin="0.5,0.5" |
|||
Margin="0,0,0,10"> |
|||
<Ellipse.RenderTransform> |
|||
<RotateTransform Angle="0"/> |
|||
</Ellipse.RenderTransform> |
|||
</Ellipse> |
|||
|
|||
<!-- 简约文字 --> |
|||
<TextBlock Text="加载中..." |
|||
Foreground="#777777" |
|||
FontSize="12" |
|||
HorizontalAlignment="Center"/> |
|||
</StackPanel> |
|||
</Border> |
|||
|
|||
<ControlTemplate.Triggers> |
|||
<EventTrigger RoutedEvent="Loaded"> |
|||
<BeginStoryboard> |
|||
<Storyboard> |
|||
<DoubleAnimation |
|||
Storyboard.TargetName="SimpleSpinner" |
|||
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)" |
|||
From="0" To="360" Duration="0:0:0.9" |
|||
RepeatBehavior="Forever"/> |
|||
</Storyboard> |
|||
</BeginStoryboard> |
|||
</EventTrigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,142 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<ControlTemplate x:Key="MyScrollViewer" TargetType="{x:Type ScrollViewer}"> |
|||
<!--View区域背景色--> |
|||
<Grid x:Name="Grid" Background="{TemplateBinding Background}" Margin="5"> |
|||
<Grid.ColumnDefinitions> |
|||
<ColumnDefinition Width="*"/> |
|||
<ColumnDefinition Width="Auto"/> |
|||
</Grid.ColumnDefinitions> |
|||
<Grid.RowDefinitions> |
|||
<RowDefinition Height="*"/> |
|||
<RowDefinition Height="Auto"/> |
|||
</Grid.RowDefinitions> |
|||
<Rectangle x:Name="Corner" Grid.Column="1" Fill="White" Grid.Row="1"/> |
|||
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/> |
|||
<ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}" Style="{DynamicResource MyScrollBarStyle}"/> |
|||
<ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}" Style="{DynamicResource MyScrollBarStyle}"/> |
|||
</Grid> |
|||
</ControlTemplate> |
|||
|
|||
|
|||
<SolidColorBrush x:Key="ScrollBarDisabledBackground" Color="#F4F4F4"/> |
|||
|
|||
<Style x:Key="VerticalScrollBarPageButton" TargetType="{x:Type RepeatButton}"> |
|||
<Setter Property="OverridesDefaultStyle" Value="true"/> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="Focusable" Value="false"/> |
|||
<Setter Property="IsTabStop" Value="false"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="{x:Type RepeatButton}"> |
|||
<Rectangle Fill="{TemplateBinding Background}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"/> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
<!--滚动条颜色、圆角等设置--> |
|||
<Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}"> |
|||
<Setter Property="OverridesDefaultStyle" Value="true"/> |
|||
<Setter Property="IsTabStop" Value="false"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="{x:Type Thumb}"> |
|||
<!--滚动条颜色和圆角设置--> |
|||
<Rectangle Name="thumbRect" Fill="#c2e0fa" RadiusX="3" RadiusY="3"/> |
|||
<!--鼠标拉动滚动条时的颜色--> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter Property="Fill" Value="CornflowerBlue" TargetName="thumbRect" /> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
<Style x:Key="HorizontalScrollBarPageButton" TargetType="{x:Type RepeatButton}"> |
|||
<Setter Property="OverridesDefaultStyle" Value="true"/> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="Focusable" Value="false"/> |
|||
<Setter Property="IsTabStop" Value="false"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="{x:Type RepeatButton}"> |
|||
<Rectangle Fill="{TemplateBinding Background}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"/> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
<Style x:Key="MyScrollBarStyle" TargetType="{x:Type ScrollBar}"> |
|||
<Setter Property="Background" Value="AliceBlue"/> |
|||
<Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/> |
|||
<Setter Property="Stylus.IsFlicksEnabled" Value="false"/> |
|||
<!--滚动条宽度--> |
|||
<Setter Property="Width" Value="8"/> |
|||
<Setter Property="MinWidth" Value="6"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="{x:Type ScrollBar}"> |
|||
<!--滚动条背景色--> |
|||
<Grid x:Name="Bg" Background="#ffffff" SnapsToDevicePixels="true" Width="8"> |
|||
<Grid.RowDefinitions> |
|||
<RowDefinition /> |
|||
</Grid.RowDefinitions> |
|||
<Track x:Name="PART_Track" IsDirectionReversed="true" IsEnabled="{TemplateBinding IsMouseOver}"> |
|||
<Track.DecreaseRepeatButton> |
|||
<RepeatButton Command="{x:Static ScrollBar.PageUpCommand}" Style="{StaticResource VerticalScrollBarPageButton}"/> |
|||
</Track.DecreaseRepeatButton> |
|||
<Track.IncreaseRepeatButton> |
|||
<RepeatButton Command="{x:Static ScrollBar.PageDownCommand}" Style="{StaticResource VerticalScrollBarPageButton}"/> |
|||
</Track.IncreaseRepeatButton> |
|||
<Track.Thumb> |
|||
<Thumb Style="{StaticResource ScrollBarThumb}"/> |
|||
</Track.Thumb> |
|||
</Track> |
|||
</Grid> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsEnabled" Value="false"> |
|||
<Setter Property="Background" TargetName="Bg" Value="{StaticResource ScrollBarDisabledBackground}"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Style.Triggers> |
|||
<Trigger Property="Orientation" Value="Horizontal"> |
|||
<Setter Property="Width" Value="Auto"/> |
|||
<Setter Property="MinWidth" Value="0"/> |
|||
<Setter Property="Height" Value="6"/> |
|||
<Setter Property="MinHeight" Value="6"/> |
|||
<Setter Property="Background" Value="AliceBlue"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="{x:Type ScrollBar}"> |
|||
<Grid x:Name="Bg" Background="Red" SnapsToDevicePixels="true"> |
|||
<Grid.ColumnDefinitions> |
|||
<ColumnDefinition /> |
|||
</Grid.ColumnDefinitions> |
|||
<Track x:Name="PART_Track" IsEnabled="{TemplateBinding IsMouseOver}"> |
|||
<Track.DecreaseRepeatButton> |
|||
<RepeatButton Command="{x:Static ScrollBar.PageLeftCommand}" Style="{StaticResource HorizontalScrollBarPageButton}"/> |
|||
</Track.DecreaseRepeatButton> |
|||
<Track.IncreaseRepeatButton> |
|||
<RepeatButton Command="{x:Static ScrollBar.PageRightCommand}" Style="{StaticResource HorizontalScrollBarPageButton}"/> |
|||
</Track.IncreaseRepeatButton> |
|||
<Track.Thumb> |
|||
<Thumb Style="{StaticResource ScrollBarThumb}" /> |
|||
</Track.Thumb> |
|||
</Track> |
|||
</Grid> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsEnabled" Value="false"> |
|||
<Setter Property="Background" TargetName="Bg" Value="{StaticResource ScrollBarDisabledBackground}"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Trigger> |
|||
</Style.Triggers> |
|||
</Style> |
|||
|
|||
</ResourceDictionary> |
|||
@ -0,0 +1,209 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
|
|||
<!-- 现代化淡蓝色主题颜色 --> |
|||
<Color x:Key="PrimaryBlue">#0078D7</Color> |
|||
<Color x:Key="LightBlue">#E3F2FD</Color> |
|||
<Color x:Key="SoftBlue">#BBDEFB</Color> |
|||
<Color x:Key="AccentBlue">#2196F3</Color> |
|||
<Color x:Key="WarningOrange">#FF9800</Color> |
|||
<Color x:Key="ErrorRed">#F44336</Color> |
|||
<Color x:Key="SuccessGreen">#4CAF50</Color> |
|||
<Color x:Key="NeutralGray">#607D8B</Color> |
|||
<SolidColorBrush x:Key="PrimaryBlueBrush" Color="{StaticResource PrimaryBlue}"/> |
|||
<SolidColorBrush x:Key="LightBlueBrush" Color="{StaticResource LightBlue}"/> |
|||
<SolidColorBrush x:Key="SoftBlueBrush" Color="{StaticResource SoftBlue}"/> |
|||
<SolidColorBrush x:Key="AccentBlueBrush" Color="{StaticResource AccentBlue}"/> |
|||
<SolidColorBrush x:Key="WarningBrush" Color="{StaticResource WarningOrange}"/> |
|||
<SolidColorBrush x:Key="ErrorBrush" Color="{StaticResource ErrorRed}"/> |
|||
<SolidColorBrush x:Key="SuccessBrush" Color="{StaticResource SuccessGreen}"/> |
|||
<SolidColorBrush x:Key="NeutralBrush" Color="{StaticResource NeutralGray}"/> |
|||
<!-- 空状态样式 --> |
|||
<Style x:Key="EmptyStateContainerStyle" TargetType="Border"> |
|||
<Setter Property="Background" Value="#FFF9F9F9"/> |
|||
<Setter Property="CornerRadius" Value="8"/> |
|||
<Setter Property="BorderBrush" Value="#FFE0E0E0"/> |
|||
<Setter Property="BorderThickness" Value="1"/> |
|||
<Setter Property="Padding" Value="20"/> |
|||
</Style> |
|||
|
|||
<Style x:Key="EmptyStateIconStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="48"/> |
|||
<Setter Property="Foreground" Value="#FFCCCCCC"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="Margin" Value="0,0,0,10"/> |
|||
<Setter Property="FontFamily" Value="Segoe MDL2 Assets"/> |
|||
</Style> |
|||
|
|||
<Style x:Key="EmptyStateTextStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="Foreground" Value="#FF666666"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="TextAlignment" Value="Center"/> |
|||
<Setter Property="TextWrapping" Value="Wrap"/> |
|||
<Setter Property="Margin" Value="0,0,0,15"/> |
|||
</Style> |
|||
<!-- 错误状态样式 --> |
|||
<Style x:Key="ErrorStateContainerStyle" TargetType="Border"> |
|||
<Setter Property="Background" Value="#FFFEF2F2"/> |
|||
<Setter Property="CornerRadius" Value="8"/> |
|||
<Setter Property="BorderBrush" Value="#FFE57373"/> |
|||
<Setter Property="BorderThickness" Value="1"/> |
|||
<Setter Property="Padding" Value="20"/> |
|||
</Style> |
|||
|
|||
<Style x:Key="ErrorStateIconStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="48"/> |
|||
<Setter Property="Foreground" Value="#FFD32F2F"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="Margin" Value="0,0,0,10"/> |
|||
<Setter Property="FontFamily" Value="Segoe MDL2 Assets"/> |
|||
</Style> |
|||
|
|||
<Style x:Key="ErrorStateTextStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="Foreground" Value="#FFD32F2F"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="TextAlignment" Value="Center"/> |
|||
<Setter Property="TextWrapping" Value="Wrap"/> |
|||
<Setter Property="Margin" Value="0,0,0,15"/> |
|||
</Style> |
|||
|
|||
<!-- 现代化错误状态样式(带滚动支持) --> |
|||
<Style x:Key="ModernErrorStateContainerStyle" TargetType="Border"> |
|||
<Setter Property="Background" Value="#FFFEF7F7"/> |
|||
<Setter Property="CornerRadius" Value="12"/> |
|||
<Setter Property="BorderBrush" Value="#FFFDEDED"/> |
|||
<Setter Property="BorderThickness" Value="2"/> |
|||
<Setter Property="Padding" Value="30"/> |
|||
<Setter Property="Effect"> |
|||
<Setter.Value> |
|||
<DropShadowEffect BlurRadius="20" ShadowDepth="2" Opacity="0.1" Color="{StaticResource ErrorRed}"/> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<Style x:Key="ModernErrorStateIconStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="64"/> |
|||
<Setter Property="Foreground" Value="{StaticResource ErrorBrush}"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="Margin" Value="0,0,0,10"/> |
|||
<Setter Property="FontFamily" Value="Segoe Fluent Icons"/> |
|||
<Setter Property="Opacity" Value="0.9"/> |
|||
</Style> |
|||
|
|||
<Style x:Key="ModernErrorStateTitleStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="18"/> |
|||
<Setter Property="Foreground" Value="{StaticResource ErrorBrush}"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="TextAlignment" Value="Center"/> |
|||
<Setter Property="TextWrapping" Value="Wrap"/> |
|||
<Setter Property="Margin" Value="0,0,0,8"/> |
|||
<Setter Property="FontWeight" Value="SemiBold"/> |
|||
</Style> |
|||
|
|||
<Style x:Key="ModernErrorStateTextStyle" TargetType="TextBlock"> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="Foreground" Value="#FF795548"/> |
|||
<Setter Property="HorizontalAlignment" Value="Center"/> |
|||
<Setter Property="TextAlignment" Value="Center"/> |
|||
<Setter Property="TextWrapping" Value="Wrap"/> |
|||
<Setter Property="Margin" Value="0,0,0,5"/> |
|||
<Setter Property="LineHeight" Value="20"/> |
|||
</Style> |
|||
|
|||
<!-- 可滚动错误状态容器样式 --> |
|||
<Style x:Key="ScrollableErrorStateContainerStyle" TargetType="Border"> |
|||
<Setter Property="Background" Value="#FFFEF7F7"/> |
|||
<Setter Property="CornerRadius" Value="12"/> |
|||
<Setter Property="BorderBrush" Value="#FFFDEDED"/> |
|||
<Setter Property="BorderThickness" Value="2"/> |
|||
<Setter Property="Padding" Value="0"/> |
|||
<Setter Property="Effect"> |
|||
<Setter.Value> |
|||
<DropShadowEffect BlurRadius="20" ShadowDepth="2" Opacity="0.1" Color="{StaticResource ErrorRed}"/> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<!-- 错误状态内容容器 --> |
|||
<Style x:Key="ErrorContentContainerStyle" TargetType="StackPanel"> |
|||
<!--<Setter Property="Padding" Value="30,40,30,30"/>--> |
|||
<Setter Property="MaxHeight" Value="400"/> |
|||
<!-- 设置最大高度,超过时显示滚动条 --> |
|||
</Style> |
|||
<!-- 关闭按钮样式 --> |
|||
<Style x:Key="CloseButtonStyle" TargetType="Button"> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="BorderThickness" Value="0"/> |
|||
<Setter Property="Foreground" Value="#FF666666"/> |
|||
<Setter Property="Width" Value="28"/> |
|||
<Setter Property="Height" Value="28"/> |
|||
<Setter Property="Padding" Value="0"/> |
|||
<Setter Property="HorizontalAlignment" Value="Right"/> |
|||
<Setter Property="VerticalAlignment" Value="Top"/> |
|||
<Setter Property="Cursor" Value="Hand"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border x:Name="Border" |
|||
Background="{TemplateBinding Background}" |
|||
CornerRadius="14"> |
|||
<TextBlock x:Name="CloseIcon" |
|||
Text="" |
|||
FontFamily="Segoe MDL2 Assets" |
|||
FontSize="12" |
|||
Foreground="{TemplateBinding Foreground}" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"/> |
|||
</Border> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter TargetName="Border" Property="Background" Value="#FFE0E0E0"/> |
|||
<Setter TargetName="CloseIcon" Property="Foreground" Value="#FF333333"/> |
|||
</Trigger> |
|||
<Trigger Property="IsPressed" Value="True"> |
|||
<Setter TargetName="Border" Property="Background" Value="#FFCCCCCC"/> |
|||
<Setter TargetName="CloseIcon" Property="Foreground" Value="#FF000000"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<!-- 错误状态关闭按钮样式 --> |
|||
<Style x:Key="ErrorCloseButtonStyle" TargetType="Button" BasedOn="{StaticResource CloseButtonStyle}"> |
|||
<Setter Property="Foreground" Value="{StaticResource ErrorBrush}"/> |
|||
<Setter Property="Opacity" Value="0.7"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border x:Name="Border" |
|||
Background="Transparent" |
|||
CornerRadius="14"> |
|||
<TextBlock x:Name="CloseIcon" |
|||
Text="" |
|||
FontFamily="Segoe MDL2 Assets" |
|||
FontSize="12" |
|||
Foreground="{TemplateBinding Foreground}" |
|||
HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"/> |
|||
</Border> |
|||
<ControlTemplate.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter TargetName="Border" Property="Background" Value="{StaticResource ErrorBrush}"/> |
|||
<Setter TargetName="CloseIcon" Property="Foreground" Value="White"/> |
|||
<Setter Property="Opacity" Value="1"/> |
|||
</Trigger> |
|||
<Trigger Property="IsPressed" Value="True"> |
|||
<Setter TargetName="Border" Property="Background" Value="#FFD32F2F"/> |
|||
<Setter TargetName="CloseIcon" Property="Foreground" Value="White"/> |
|||
<Setter Property="Opacity" Value="1"/> |
|||
</Trigger> |
|||
</ControlTemplate.Triggers> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
</ResourceDictionary> |
|||
@ -0,0 +1,52 @@ |
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<Style x:Key="VideoControlButtonStyle" TargetType="Button"> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="BorderThickness" Value="0"/> |
|||
<Setter Property="Foreground" Value="White"/> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="Width" Value="40"/> |
|||
<Setter Property="Height" Value="40"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border Background="{TemplateBinding Background}" |
|||
CornerRadius="20"> |
|||
<ContentPresenter HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"/> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Style.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter Property="Background" Value="#444"/> |
|||
</Trigger> |
|||
</Style.Triggers> |
|||
</Style> |
|||
|
|||
<Style x:Key="VideoControlCloseButtonStyle" TargetType="Button"> |
|||
<Setter Property="Background" Value="Transparent"/> |
|||
<Setter Property="BorderThickness" Value="0"/> |
|||
<Setter Property="Foreground" Value="White"/> |
|||
<Setter Property="FontSize" Value="14"/> |
|||
<Setter Property="Width" Value="40"/> |
|||
<Setter Property="Height" Value="40"/> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate TargetType="Button"> |
|||
<Border Background="{TemplateBinding Background}" |
|||
CornerRadius="20"> |
|||
<ContentPresenter HorizontalAlignment="Center" |
|||
VerticalAlignment="Center"/> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
<Style.Triggers> |
|||
<Trigger Property="IsMouseOver" Value="True"> |
|||
<Setter Property="Background" Value="#FFE81123"/> |
|||
</Trigger> |
|||
</Style.Triggers> |
|||
</Style> |
|||
</ResourceDictionary> |
|||
@ -0,0 +1,29 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net48</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<UseWPF>true</UseWPF> |
|||
<LangVersion>12</LangVersion> |
|||
|
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.19" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\AIK.Service\AIK.Service.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Reference Include="PresentationCore" /> |
|||
<Reference Include="PresentationFramework" /> |
|||
<Reference Include="WindowsBase" /> |
|||
<Reference Include="System.Xaml" /> |
|||
<Reference Include="System" /> |
|||
<Reference Include="System.Core" /> |
|||
<Reference Include="Microsoft.CSharp" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,63 @@ |
|||
using Microsoft.Xaml.Behaviors; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows; |
|||
using System.Windows.Input; |
|||
|
|||
namespace AIK.Behaviors |
|||
{ |
|||
public class ClickBehavior : Behavior<FrameworkElement> |
|||
{ |
|||
public static readonly DependencyProperty CommandProperty = |
|||
DependencyProperty.Register(nameof(Command), typeof(ICommand), typeof(ClickBehavior)); |
|||
|
|||
public static readonly DependencyProperty CommandParameterProperty = |
|||
DependencyProperty.Register(nameof(CommandParameter), typeof(object), typeof(ClickBehavior)); |
|||
|
|||
public ICommand Command |
|||
{ |
|||
get => (ICommand)GetValue(CommandProperty); |
|||
set => SetValue(CommandProperty, value); |
|||
} |
|||
|
|||
public object CommandParameter |
|||
{ |
|||
get => GetValue(CommandParameterProperty); |
|||
set => SetValue(CommandParameterProperty, value); |
|||
} |
|||
|
|||
protected override void OnAttached() |
|||
{ |
|||
base.OnAttached(); |
|||
AssociatedObject.MouseLeftButtonDown += OnMouseLeftButtonDown; |
|||
AssociatedObject.Loaded += OnLoaded; |
|||
} |
|||
|
|||
protected override void OnDetaching() |
|||
{ |
|||
base.OnDetaching(); |
|||
AssociatedObject.MouseLeftButtonDown -= OnMouseLeftButtonDown; |
|||
AssociatedObject.Loaded -= OnLoaded; |
|||
} |
|||
|
|||
private void OnLoaded(object sender, RoutedEventArgs e) |
|||
{ |
|||
// 调试信息
|
|||
//System.Diagnostics.Debug.WriteLine($"ClickBehavior loaded on {AssociatedObject.GetType().Name}");
|
|||
//System.Diagnostics.Debug.WriteLine($"Command: {Command}");
|
|||
//System.Diagnostics.Debug.WriteLine($"CommandParameter: {CommandParameter}");
|
|||
} |
|||
|
|||
private void OnMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) |
|||
{ |
|||
if (Command?.CanExecute(CommandParameter) == true) |
|||
{ |
|||
Command.Execute(CommandParameter); |
|||
e.Handled = true; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,259 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows; |
|||
using System.Windows.Controls; |
|||
using System.Windows.Data; |
|||
using System.Windows.Media; |
|||
|
|||
namespace AIK.Behaviors |
|||
{ |
|||
public static class PlaceholderBehavior |
|||
{ |
|||
#region 依赖属性定义
|
|||
private static readonly DependencyPropertyKey IsPlaceholderActivePropertyKey = |
|||
DependencyProperty.RegisterAttachedReadOnly( |
|||
"IsPlaceholderActive", |
|||
typeof(bool), |
|||
typeof(PlaceholderBehavior), |
|||
new PropertyMetadata(false)); |
|||
|
|||
public static readonly DependencyProperty IsPlaceholderActiveProperty = IsPlaceholderActivePropertyKey.DependencyProperty; |
|||
|
|||
public static readonly DependencyProperty PlaceholderTextProperty = |
|||
DependencyProperty.RegisterAttached( |
|||
"PlaceholderText", |
|||
typeof(string), |
|||
typeof(PlaceholderBehavior), |
|||
new PropertyMetadata(string.Empty, OnPlaceholderTextChanged)); |
|||
|
|||
// 添加一个属性来存储原始绑定
|
|||
private static readonly DependencyProperty OriginalBindingProperty = |
|||
DependencyProperty.RegisterAttached( |
|||
"OriginalBinding", |
|||
typeof(Binding), |
|||
typeof(PlaceholderBehavior)); |
|||
|
|||
// 添加一个属性来标记是否正在设置Placeholder
|
|||
private static readonly DependencyProperty IsSettingPlaceholderProperty = |
|||
DependencyProperty.RegisterAttached( |
|||
"IsSettingPlaceholder", |
|||
typeof(bool), |
|||
typeof(PlaceholderBehavior), |
|||
new PropertyMetadata(false)); |
|||
#endregion
|
|||
|
|||
#region 公共方法
|
|||
public static bool GetIsPlaceholderActive(DependencyObject obj) |
|||
{ |
|||
return (bool)obj.GetValue(IsPlaceholderActiveProperty); |
|||
} |
|||
|
|||
public static string GetPlaceholderText(DependencyObject obj) |
|||
{ |
|||
return (string)obj.GetValue(PlaceholderTextProperty); |
|||
} |
|||
|
|||
public static void SetPlaceholderText(DependencyObject obj, string value) |
|||
{ |
|||
obj.SetValue(PlaceholderTextProperty, value); |
|||
} |
|||
#endregion
|
|||
|
|||
#region 私有方法
|
|||
private static bool GetIsSettingPlaceholder(DependencyObject obj) |
|||
{ |
|||
return (bool)obj.GetValue(IsSettingPlaceholderProperty); |
|||
} |
|||
|
|||
private static void SetIsSettingPlaceholder(DependencyObject obj, bool value) |
|||
{ |
|||
obj.SetValue(IsSettingPlaceholderProperty, value); |
|||
} |
|||
|
|||
private static Binding GetOriginalBinding(DependencyObject obj) |
|||
{ |
|||
return (Binding)obj.GetValue(OriginalBindingProperty); |
|||
} |
|||
|
|||
private static void SetOriginalBinding(DependencyObject obj, Binding value) |
|||
{ |
|||
obj.SetValue(OriginalBindingProperty, value); |
|||
} |
|||
#endregion
|
|||
|
|||
#region 事件处理
|
|||
private static void OnPlaceholderTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) |
|||
{ |
|||
if (d is TextBox textBox) |
|||
{ |
|||
// 确保只注册一次事件
|
|||
textBox.Loaded -= OnTextBoxLoaded; |
|||
textBox.GotFocus -= OnTextBoxGotFocus; |
|||
textBox.LostFocus -= OnTextBoxLostFocus; |
|||
textBox.TextChanged -= OnTextBoxTextChanged; |
|||
|
|||
textBox.Loaded += OnTextBoxLoaded; |
|||
textBox.GotFocus += OnTextBoxGotFocus; |
|||
textBox.LostFocus += OnTextBoxLostFocus; |
|||
textBox.TextChanged += OnTextBoxTextChanged; |
|||
|
|||
// 保存原始绑定
|
|||
var binding = BindingOperations.GetBinding(textBox, TextBox.TextProperty); |
|||
if (binding != null) |
|||
{ |
|||
SetOriginalBinding(textBox, binding); |
|||
} |
|||
|
|||
// 如果已经加载,立即初始化
|
|||
if (textBox.IsLoaded) |
|||
{ |
|||
InitializePlaceholder(textBox); |
|||
} |
|||
} |
|||
} |
|||
|
|||
private static void OnTextBoxLoaded(object sender, RoutedEventArgs e) |
|||
{ |
|||
InitializePlaceholder((TextBox)sender); |
|||
} |
|||
|
|||
private static void OnTextBoxGotFocus(object sender, RoutedEventArgs e) |
|||
{ |
|||
var textBox = (TextBox)sender; |
|||
if (GetIsPlaceholderActive(textBox)) |
|||
{ |
|||
// 标记开始设置Placeholder,避免触发数据源更新
|
|||
SetIsSettingPlaceholder(textBox, true); |
|||
|
|||
// 移除placeholder
|
|||
textBox.Text = string.Empty; |
|||
textBox.SetValue(IsPlaceholderActivePropertyKey, false); |
|||
textBox.Foreground = Brushes.Black; |
|||
|
|||
// 恢复数据绑定
|
|||
RestoreBinding(textBox); |
|||
|
|||
SetIsSettingPlaceholder(textBox, false); |
|||
} |
|||
} |
|||
|
|||
private static void OnTextBoxLostFocus(object sender, RoutedEventArgs e) |
|||
{ |
|||
var textBox = (TextBox)sender; |
|||
if (string.IsNullOrEmpty(textBox.Text)) |
|||
{ |
|||
ShowPlaceholder(textBox); |
|||
} |
|||
} |
|||
|
|||
private static void OnTextBoxTextChanged(object sender, TextChangedEventArgs e) |
|||
{ |
|||
var textBox = (TextBox)sender; |
|||
|
|||
// 如果正在设置Placeholder,不处理TextChanged事件
|
|||
if (GetIsSettingPlaceholder(textBox)) |
|||
return; |
|||
|
|||
// 只有在不是placeholder状态时才处理
|
|||
if (!GetIsPlaceholderActive(textBox)) |
|||
{ |
|||
// 如果文本变为空,显示placeholder
|
|||
if (string.IsNullOrEmpty(textBox.Text) && !textBox.IsFocused) |
|||
{ |
|||
ShowPlaceholder(textBox); |
|||
} |
|||
else |
|||
{ |
|||
// 正常文本变化,确保数据绑定是激活的
|
|||
EnsureBindingActive(textBox); |
|||
} |
|||
} |
|||
} |
|||
#endregion
|
|||
|
|||
#region 核心方法
|
|||
private static void InitializePlaceholder(TextBox textBox) |
|||
{ |
|||
// 检查当前文本是否为空或者就是Placeholder文本
|
|||
var currentText = textBox.Text; |
|||
var placeholderText = GetPlaceholderText(textBox); |
|||
|
|||
if (string.IsNullOrEmpty(currentText) || currentText == placeholderText) |
|||
{ |
|||
ShowPlaceholder(textBox); |
|||
} |
|||
} |
|||
|
|||
private static void ShowPlaceholder(TextBox textBox) |
|||
{ |
|||
var placeholderText = GetPlaceholderText(textBox); |
|||
if (!string.IsNullOrEmpty(placeholderText)) |
|||
{ |
|||
// 标记开始设置Placeholder
|
|||
SetIsSettingPlaceholder(textBox, true); |
|||
|
|||
// 临时解除数据绑定,避免触发数据源更新
|
|||
SuspendBinding(textBox); |
|||
|
|||
// 设置Placeholder文本
|
|||
textBox.Text = placeholderText; |
|||
textBox.SetValue(IsPlaceholderActivePropertyKey, true); |
|||
textBox.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xA0, 0xAE, 0xC0)); |
|||
|
|||
SetIsSettingPlaceholder(textBox, false); |
|||
} |
|||
} |
|||
|
|||
// 临时解除数据绑定
|
|||
private static void SuspendBinding(TextBox textBox) |
|||
{ |
|||
// 清除绑定,但保留绑定表达式
|
|||
var bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty); |
|||
if (bindingExpression != null) |
|||
{ |
|||
// 保存原始绑定(如果还没有保存的话)
|
|||
if (GetOriginalBinding(textBox) == null) |
|||
{ |
|||
var binding = BindingOperations.GetBinding(textBox, TextBox.TextProperty); |
|||
SetOriginalBinding(textBox, binding); |
|||
} |
|||
|
|||
// 清除绑定,这样设置文本就不会更新数据源
|
|||
BindingOperations.ClearBinding(textBox, TextBox.TextProperty); |
|||
} |
|||
} |
|||
|
|||
// 恢复数据绑定
|
|||
private static void RestoreBinding(TextBox textBox) |
|||
{ |
|||
var originalBinding = GetOriginalBinding(textBox); |
|||
if (originalBinding != null) |
|||
{ |
|||
// 恢复原始绑定
|
|||
textBox.SetBinding(TextBox.TextProperty, originalBinding); |
|||
|
|||
// 立即更新数据源为空值
|
|||
var bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty); |
|||
bindingExpression?.UpdateSource(); |
|||
} |
|||
} |
|||
|
|||
// 确保数据绑定是激活的
|
|||
private static void EnsureBindingActive(TextBox textBox) |
|||
{ |
|||
var currentBinding = BindingOperations.GetBinding(textBox, TextBox.TextProperty); |
|||
var originalBinding = GetOriginalBinding(textBox); |
|||
|
|||
// 如果没有当前绑定但有原始绑定,恢复绑定
|
|||
if (currentBinding == null && originalBinding != null) |
|||
{ |
|||
textBox.SetBinding(TextBox.TextProperty, originalBinding); |
|||
} |
|||
} |
|||
#endregion
|
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,38 @@ |
|||
using AIK.Service.IService; |
|||
using Microsoft.Xaml.Behaviors; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows; |
|||
|
|||
namespace AIK.Behaviors |
|||
{ |
|||
public class ViewModelInitializationBehavior : Behavior<FrameworkElement> |
|||
{ |
|||
protected override void OnAttached() |
|||
{ |
|||
base.OnAttached(); |
|||
AssociatedObject.Loaded += OnViewLoaded; |
|||
} |
|||
|
|||
protected override void OnDetaching() |
|||
{ |
|||
AssociatedObject.Loaded -= OnViewLoaded; |
|||
base.OnDetaching(); |
|||
} |
|||
|
|||
private async void OnViewLoaded(object sender, RoutedEventArgs e) |
|||
{ |
|||
if (AssociatedObject.DataContext is ILoadAware loadAware) |
|||
{ |
|||
await loadAware.OnLoadedAsync(); |
|||
} |
|||
//else if (AssociatedObject.DataContext is IInitializable initializable)
|
|||
//{
|
|||
// await initializable.InitializeAsync();
|
|||
//}
|
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
using AIK.Service.IService; |
|||
using Microsoft.Xaml.Behaviors; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows; |
|||
|
|||
namespace AIK.Behaviors |
|||
{ |
|||
public class ViewModelInitializationWindowBehavior : Behavior<Window> |
|||
{ |
|||
protected override void OnAttached() |
|||
{ |
|||
base.OnAttached(); |
|||
AssociatedObject.Loaded += OnViewLoaded; |
|||
AssociatedObject.Loaded += OnViewModelRequestClose; |
|||
} |
|||
|
|||
protected override void OnDetaching() |
|||
{ |
|||
AssociatedObject.Loaded -= OnViewLoaded; |
|||
AssociatedObject.Loaded -= OnViewModelRequestClose; |
|||
base.OnDetaching(); |
|||
} |
|||
|
|||
private async void OnViewLoaded(object sender, RoutedEventArgs e) |
|||
{ |
|||
if (AssociatedObject.DataContext is ILoadAware loadAware) |
|||
{ |
|||
await loadAware.OnLoadedAsync(); |
|||
} |
|||
} |
|||
private void OnViewModelRequestClose(object? sender, EventArgs e) |
|||
{ |
|||
AssociatedObject?.Dispatcher.Invoke(() => |
|||
{ |
|||
if (AssociatedObject.IsVisible) |
|||
AssociatedObject.Close(); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net48</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<UseWPF>true</UseWPF> |
|||
<LangVersion>12</LangVersion> |
|||
|
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<None Remove="Resources\Close the U disk.bin" /> |
|||
<None Remove="Resources\eot.bin" /> |
|||
<None Remove="Resources\Open the U disk.bin" /> |
|||
<None Remove="Resources\usb connect.bin" /> |
|||
<None Remove="Resources\usb create remote.bin" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<EmbeddedResource Include="Resources\Close the U disk.bin"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Resources\eot.bin"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Resources\Open the U disk.bin"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Resources\usb connect.bin"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
<EmbeddedResource Include="Resources\usb create remote.bin"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</EmbeddedResource> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> |
|||
<PackageReference Include="System.Text.Json" Version="6.0.0" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Compile Update="Properties\Settings.Designer.cs"> |
|||
<DesignTimeSharedInput>True</DesignTimeSharedInput> |
|||
<AutoGen>True</AutoGen> |
|||
<DependentUpon>Settings.settings</DependentUpon> |
|||
</Compile> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<None Update="Properties\Settings.settings"> |
|||
<Generator>PublicSettingsSingleFileGenerator</Generator> |
|||
<LastGenOutput>Settings.Designer.cs</LastGenOutput> |
|||
</None> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Reference Include="PresentationCore" /> |
|||
<Reference Include="PresentationFramework" /> |
|||
<Reference Include="WindowsBase" /> |
|||
<Reference Include="System.Xaml" /> |
|||
<Reference Include="System" /> |
|||
<Reference Include="System.Core" /> |
|||
<Reference Include="System.Net.Http" /> |
|||
<Reference Include="Microsoft.CSharp" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,240 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Diagnostics; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.AIKProtocol |
|||
{ |
|||
public class AIKCommunication |
|||
{ |
|||
/// <summary>
|
|||
/// 数据包总包数
|
|||
/// </summary>
|
|||
public int TotalPackets { get; set; } = 0; |
|||
/// <summary>
|
|||
/// 发送的文件数据(bin文件)
|
|||
/// </summary>
|
|||
public byte[] FileData { get; set; } |
|||
/// <summary>
|
|||
/// 当前正在发送包的索引
|
|||
/// </summary>
|
|||
public int CurrentIndex { get; set; } = 0; |
|||
|
|||
private readonly object _sendLock = new object(); |
|||
private bool _isSending = false; |
|||
/// <summary>
|
|||
/// 所有数据包是否完成发送
|
|||
/// </summary>
|
|||
private bool _isAllSendSuccess = false; |
|||
#region 数据包发送
|
|||
/// <summary>
|
|||
/// 发送起始码,建立连接使用
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public byte[] GetStartFrame() |
|||
{ |
|||
var buf = new byte[8] { 0XA5, 0X5E, 0XAA, 0XBB, 0XCC, 0XDD, 0X00, 0X00 }; |
|||
return buf; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 发送头帧
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public async Task SendHeader(string sourceitem) |
|||
{ |
|||
List<byte> bytes = new List<byte>(); |
|||
bytes.Add(0x01); |
|||
bytes.Add(0x00); |
|||
bytes.Add(0xFF); |
|||
int lastSlashIndex = sourceitem.LastIndexOf('/'); |
|||
string fileName = lastSlashIndex >= 0 ? sourceitem.Substring(lastSlashIndex + 1) : sourceitem; |
|||
byte[] filenamedata = Encoding.Default.GetBytes(fileName); |
|||
bytes.AddRange(filenamedata); |
|||
bytes.Add(0x00); |
|||
//string sourceitem = "/keys/bin/1.bin";
|
|||
//string sourceitem = "/keys/bin/(7926)AiLiSheng47DaiA_DaiZuoYouCeHuaMen13NianHou.bin";
|
|||
//FileData = await WebHelper.GetVehKeyBin(sourceitem);
|
|||
if (FileData == null) |
|||
{ |
|||
return; |
|||
} |
|||
TotalPackets = FileData.Length / 1024; |
|||
byte[] DataBuffdata = Encoding.Default.GetBytes(FileData.Length.ToString()); |
|||
bytes.AddRange(DataBuffdata); |
|||
bytes.Add(0x00); |
|||
if (bytes.Count < 128) |
|||
{ |
|||
int copi = 128 + 3 - bytes.Count; |
|||
for (int i = 0; i < copi; i++) |
|||
{ |
|||
bytes.Add(0x00); |
|||
} |
|||
} |
|||
var cdata = new byte[128]; |
|||
Array.Copy(bytes.ToArray(), 3, cdata, 0, 128); |
|||
var crc = ProtocolHelper.CalculateCRC16(cdata); |
|||
var CRCHigh = (byte)((crc >> 8) & 0xFF); |
|||
var CRCLow = (byte)(crc & 0xFF); |
|||
bytes.Add((byte)CRCHigh); |
|||
bytes.Add((byte)CRCLow); |
|||
|
|||
var rdata = bytes.ToArray(); |
|||
await WriteLargeDataFrame(rdata, 100); |
|||
} |
|||
/// <summary>
|
|||
/// 发送数据帧
|
|||
/// </summary>
|
|||
/// <param name="page"></param>
|
|||
/// <returns></returns>
|
|||
public async Task<bool> SendDataFrame(int page) |
|||
{ |
|||
bool flag = false; |
|||
var rdata = GetSendDataFrame(page, FileData); |
|||
bool success = await WriteLargeDataFrame(rdata.ToArray(), 100); |
|||
if (success) |
|||
{ |
|||
flag = true; |
|||
} |
|||
else |
|||
{ |
|||
Debug.WriteLine("TestData发送失败"); |
|||
} |
|||
return flag; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 发送结束帧
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public async Task SendEOTFrame() |
|||
{ |
|||
var rdata = new byte[133]; |
|||
rdata[0] = 0x01; |
|||
rdata[1] = 0x00; |
|||
rdata[2] = 0xFF; |
|||
await WriteLargeDataFrame(rdata, 100); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 根据包页及文件数据获取数据帧
|
|||
/// </summary>
|
|||
/// <param name="page"></param>
|
|||
/// <param name="filedata"></param>
|
|||
/// <returns></returns>
|
|||
private List<byte> GetSendDataFrame(int page, byte[] filedata) |
|||
{ |
|||
try |
|||
{ |
|||
var bytes = new List<byte>(); |
|||
if (page == filedata.Length / 1024 && filedata.Length % 1024 == 0) |
|||
{ |
|||
return bytes; |
|||
} |
|||
bytes.Add(0x02); |
|||
bytes.Add((byte)(page)); |
|||
bytes.Add((byte)~(page)); |
|||
if (page == filedata.Length / 1024 - 1 && filedata.Length % 1024 <= 128 && filedata.Length % 1024 > 0) |
|||
{ |
|||
var cdata = new byte[128]; |
|||
Array.Copy(filedata, page * 1024, cdata, 0, filedata.Length - page * 1024); |
|||
var crc = ProtocolHelper.CalculateCRC16(cdata); |
|||
var CRCHigh = (byte)((crc >> 8) & 0xFF); |
|||
var CRCLow = (byte)(crc & 0xFF); |
|||
bytes.AddRange(cdata); |
|||
bytes.Add((byte)CRCHigh); |
|||
bytes.Add((byte)CRCLow); |
|||
} |
|||
else |
|||
{ |
|||
var cdata = new byte[1024]; |
|||
var arrarycount = 1024; |
|||
if (filedata.Length - page * 1024 > 0 && filedata.Length - page * 1024 < 1024) |
|||
{ |
|||
arrarycount = filedata.Length - page * 1024; |
|||
} |
|||
Array.Copy(filedata, page * 1024, cdata, 0, arrarycount); |
|||
var crc = ProtocolHelper.CalculateCRC16(cdata); |
|||
var CRCHigh = (byte)((crc >> 8) & 0xFF); |
|||
var CRCLow = (byte)(crc & 0xFF); |
|||
bytes.AddRange(cdata); |
|||
bytes.Add((byte)CRCHigh); |
|||
bytes.Add((byte)CRCLow); |
|||
} |
|||
return bytes; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
throw; |
|||
} |
|||
|
|||
} |
|||
#endregion
|
|||
|
|||
#region 写入数据帧
|
|||
/// <summary>
|
|||
/// 分包发送大数据
|
|||
/// </summary>
|
|||
public async Task<bool> WriteLargeDataFrame(byte[] data, int maxPacketSize = 100) |
|||
{ |
|||
try |
|||
{ |
|||
Debug.WriteLine($"开始发送数据,总长度: {data.Length} 字节,分包大小: {maxPacketSize} 字节"); |
|||
|
|||
int totalPackets = (int)Math.Ceiling((double)data.Length / maxPacketSize); |
|||
int successfulPackets = 0; |
|||
|
|||
for (int i = 0; i < totalPackets; i++) |
|||
{ |
|||
int offset = i * maxPacketSize; |
|||
int length = Math.Min(maxPacketSize, data.Length - offset); |
|||
byte[] packet = new byte[length]; |
|||
Array.Copy(data, offset, packet, 0, length); |
|||
|
|||
bool packetSuccess = await WritePacketDataFrame(packet, i + 1, totalPackets); |
|||
if (packetSuccess) |
|||
{ |
|||
successfulPackets++; |
|||
} |
|||
else |
|||
{ |
|||
Debug.WriteLine($"第 {i + 1} 包发送失败"); |
|||
// 可以选择重试或直接失败
|
|||
// return false;
|
|||
} |
|||
|
|||
// 添加小延迟,避免发送过快
|
|||
await Task.Delay(30); |
|||
} |
|||
|
|||
bool overallSuccess = successfulPackets == totalPackets; |
|||
Debug.WriteLine($"数据发送完成: {successfulPackets}/{totalPackets} 包成功"); |
|||
return overallSuccess; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Debug.WriteLine($"发送大数据异常: {ex.Message}"); |
|||
return false; |
|||
} |
|||
} |
|||
/// <summary>
|
|||
/// 发送单个数据包
|
|||
/// </summary>
|
|||
private async Task<bool> WritePacketDataFrame(byte[] packet, int packetNumber, int totalPackets) |
|||
{ |
|||
try |
|||
{ |
|||
return true; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Debug.WriteLine($"发送第 {packetNumber} 包异常: {ex.Message}"); |
|||
return false; |
|||
} |
|||
} |
|||
#endregion
|
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,476 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Diagnostics; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Reflection; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.AIKProtocol |
|||
{ |
|||
public static class K3ToolUSBProtocol |
|||
{ |
|||
private static int _totalPackets; |
|||
private static byte[]? _fileData; |
|||
private static byte[]? _endEOTData; |
|||
private static byte[]? _connectData; |
|||
private static byte[]? _createRemoteData; |
|||
private static byte[]? _closetheUdiskData; |
|||
private static byte[]? _opentheUdiskData; |
|||
private static readonly object _lockObject = new object(); |
|||
public static readonly string ConnectFileName = "usb connect.bin"; |
|||
public static readonly string CreateRemoteFileName = "usb create remote.bin"; |
|||
public static int TotalPackets |
|||
{ |
|||
get => _totalPackets; |
|||
set => _totalPackets = value; |
|||
} |
|||
|
|||
public static byte[] FileData |
|||
{ |
|||
get => _fileData ?? Array.Empty<byte>(); |
|||
set |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_fileData = value; |
|||
// 当 FileData 不为空时,自动计算 TotalPackets
|
|||
if (_fileData != null && _fileData.Length > 0) |
|||
{ |
|||
_totalPackets = (int)Math.Ceiling(_fileData.Length / 1024.0); |
|||
} |
|||
else |
|||
{ |
|||
_totalPackets = 0; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public static byte[] EndEOTData |
|||
{ |
|||
get |
|||
{ |
|||
if (_endEOTData == null || _endEOTData.Length == 0) |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
// 双重检查锁定
|
|||
if (_endEOTData == null || _endEOTData.Length == 0) |
|||
{ |
|||
_endEOTData = GetBinData(ResourceEOTName); |
|||
} |
|||
} |
|||
} |
|||
return _endEOTData; |
|||
} |
|||
set => _endEOTData = value; |
|||
} |
|||
|
|||
public static byte[] ConnectData |
|||
{ |
|||
get |
|||
{ |
|||
if (_connectData == null || _connectData.Length == 0) |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
// 双重检查锁定
|
|||
if (_connectData == null || _connectData.Length == 0) |
|||
{ |
|||
_connectData = GetBinData(ResourceConnectName); |
|||
} |
|||
} |
|||
} |
|||
return _connectData; |
|||
} |
|||
set => _connectData = value; |
|||
} |
|||
|
|||
public static byte[] CreateRemoteData |
|||
{ |
|||
get |
|||
{ |
|||
if (_createRemoteData == null || _createRemoteData.Length == 0) |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
// 双重检查锁定
|
|||
if (_createRemoteData == null || _createRemoteData.Length == 0) |
|||
{ |
|||
_createRemoteData = GetBinData(ResourceCreateRemoteName); |
|||
} |
|||
} |
|||
} |
|||
return _createRemoteData; |
|||
} |
|||
set => _createRemoteData = value; |
|||
} |
|||
|
|||
public static byte[] ClosetheUdiskData |
|||
{ |
|||
get |
|||
{ |
|||
if (_closetheUdiskData == null || _closetheUdiskData.Length == 0) |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
// 双重检查锁定
|
|||
if (_closetheUdiskData == null || _closetheUdiskData.Length == 0) |
|||
{ |
|||
_closetheUdiskData = GetBinData(ResourceClosetheUdiskName); |
|||
} |
|||
} |
|||
} |
|||
return _closetheUdiskData; |
|||
} |
|||
set => _closetheUdiskData = value; |
|||
} |
|||
|
|||
public static byte[] OpentheUdiskData |
|||
{ |
|||
get |
|||
{ |
|||
if (_opentheUdiskData == null || _opentheUdiskData.Length == 0) |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
// 双重检查锁定
|
|||
if (_opentheUdiskData == null || _opentheUdiskData.Length == 0) |
|||
{ |
|||
_opentheUdiskData = GetBinData(ResourceOpentheUdiskName); |
|||
} |
|||
} |
|||
} |
|||
return _opentheUdiskData; |
|||
} |
|||
set => _opentheUdiskData = value; |
|||
} |
|||
|
|||
public static string ResourceEOTName { get; set; } = "AIK.Common.Resources.eot.bin"; |
|||
public static string ResourceConnectName { get; set; } = "AIK.Common.Resources.usb connect.bin"; |
|||
public static string ResourceCreateRemoteName { get; set; } = "AIK.Common.Resources.usb create remote.bin"; |
|||
|
|||
public static string ResourceClosetheUdiskName { get; set; } = "AIK.Common.Resources.Close the U disk.bin"; |
|||
|
|||
public static string ResourceOpentheUdiskName { get; set; } = "AIK.Common.Resources.Open the U disk.bin"; |
|||
#region 头帧
|
|||
public static byte[] GetSendHeader(string sourceitem) |
|||
{ |
|||
// 保持原有实现
|
|||
List<byte> bytes = new List<byte>(); |
|||
bytes.Add(0x01); |
|||
bytes.Add(0x00); |
|||
bytes.Add(0xFF); |
|||
|
|||
int lastSlashIndex = sourceitem.LastIndexOf('/'); |
|||
string fileName = lastSlashIndex >= 0 ? sourceitem.Substring(lastSlashIndex + 1) : sourceitem; |
|||
byte[] filenamedata = Encoding.GetEncoding(936).GetBytes(fileName); |
|||
bytes.AddRange(filenamedata); |
|||
bytes.Add(0x00); |
|||
|
|||
if (FileData == null) return new byte[0]; |
|||
|
|||
TotalPackets = (int)Math.Ceiling(FileData.Length / 1024.0); |
|||
byte[] dataLengthData = Encoding.GetEncoding(936).GetBytes(FileData.Length.ToString()); |
|||
bytes.AddRange(dataLengthData); |
|||
bytes.Add(0x00); |
|||
|
|||
// 填充到128字节
|
|||
if (bytes.Count < 128 + 3) |
|||
{ |
|||
bytes.AddRange(new byte[128 + 3 - bytes.Count]); |
|||
} |
|||
|
|||
var cdata = new byte[128]; |
|||
Array.Copy(bytes.ToArray(), 3, cdata, 0, 128); |
|||
var crc = ProtocolHelper.CalculateCRC16(cdata); |
|||
bytes.Add((byte)((crc >> 8) & 0xFF)); |
|||
bytes.Add((byte)(crc & 0xFF)); |
|||
|
|||
return bytes.ToArray(); |
|||
} |
|||
#endregion
|
|||
|
|||
#region 数据帧
|
|||
public static List<byte> GetSendDataFrame(int page, byte[] filedata) |
|||
{ |
|||
try |
|||
{ |
|||
var bytes = new List<byte>(); |
|||
if (page >= TotalPackets) return bytes; |
|||
|
|||
bytes.Add(0x02); |
|||
bytes.Add((byte)(page + 1)); |
|||
bytes.Add((byte)~(page + 1)); |
|||
|
|||
int dataStart = page * 1024; |
|||
int dataLength = Math.Min(1024, filedata.Length - dataStart); |
|||
var frameData = new byte[1024]; |
|||
Array.Copy(filedata, dataStart, frameData, 0, dataLength); |
|||
|
|||
var crc = ProtocolHelper.CalculateCRC16(frameData); |
|||
bytes.AddRange(frameData); |
|||
bytes.Add((byte)((crc >> 8) & 0xFF)); |
|||
bytes.Add((byte)(crc & 0xFF)); |
|||
|
|||
return bytes; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Debug.WriteLine($"生成数据帧错误: {ex.Message}"); |
|||
return new List<byte>(); |
|||
} |
|||
} |
|||
#endregion
|
|||
|
|||
#region 资源文件帧
|
|||
/// <summary>
|
|||
/// 获取bin文件转成byte数组
|
|||
/// </summary>
|
|||
/// <param name="resourceName"></param>
|
|||
/// <returns></returns>
|
|||
private static byte[] GetBinData(string resourceName) |
|||
{ |
|||
try |
|||
{ |
|||
var assembly = Assembly.GetExecutingAssembly(); |
|||
|
|||
// 查看所有资源名称(调试用)
|
|||
// var names = assembly.GetManifestResourceNames();
|
|||
|
|||
using var stream = assembly.GetManifestResourceStream(resourceName); |
|||
if (stream == null) |
|||
throw new FileNotFoundException($"未找到嵌入资源: {resourceName}"); |
|||
using var ms = new MemoryStream(); |
|||
stream.CopyTo(ms); |
|||
return ms.ToArray(); |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
return Array.Empty<byte>(); |
|||
} |
|||
|
|||
} |
|||
|
|||
#region Connect帧
|
|||
/// <summary>
|
|||
/// 手动刷新 Connect 数据(强制重新加载)
|
|||
/// </summary>
|
|||
public static void RefreshConnectData() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_connectData = GetBinData(ResourceConnectName); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 清除缓存的 Connect 数据(下次访问时会重新加载)
|
|||
/// </summary>
|
|||
public static void ClearConnectDataCache() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_connectData = null; |
|||
} |
|||
} |
|||
#endregion
|
|||
|
|||
#region CreateRemote帧
|
|||
/// <summary>
|
|||
/// 手动刷新 CreateRemote 数据(强制重新加载)
|
|||
/// </summary>
|
|||
public static void RefreshCreateRemoteData() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_createRemoteData = GetBinData(ResourceCreateRemoteName); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 清除缓存的 CreateRemote数据(下次访问时会重新加载)
|
|||
/// </summary>
|
|||
public static void ClearCreateRemoteDataCache() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_createRemoteData = null; |
|||
} |
|||
} |
|||
#endregion
|
|||
|
|||
#region EOT帧
|
|||
/// <summary>
|
|||
/// 手动刷新 EOT 数据(强制重新加载)
|
|||
/// </summary>
|
|||
public static void RefreshEndEOTData() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_endEOTData = GetBinData(ResourceEOTName); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 清除缓存的 EOT 数据(下次访问时会重新加载)
|
|||
/// </summary>
|
|||
public static void ClearEndEOTDataCache() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_endEOTData = null; |
|||
} |
|||
} |
|||
#endregion
|
|||
#endregion
|
|||
|
|||
#region 最终结束帧
|
|||
/// <summary>
|
|||
/// 最终结束帧
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public static byte[] GetEndDataFrame() |
|||
{ |
|||
var bytes = new byte[133]; |
|||
bytes[0] = 0x01; |
|||
bytes[1] = 0x00; |
|||
bytes[2] = 0xFF; |
|||
// 其余128字节默认为0,无需手动设置
|
|||
return bytes; |
|||
} |
|||
#endregion
|
|||
|
|||
#region 工具方法
|
|||
/// <summary>
|
|||
/// 设置文件数据(自动计算 TotalPackets)
|
|||
/// </summary>
|
|||
/// <param name="fileData">文件数据</param>
|
|||
public static void SetFileData(byte[] fileData) |
|||
{ |
|||
FileData = fileData; // 这会自动触发 TotalPackets 计算
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 从文件路径加载数据(自动计算 TotalPackets)
|
|||
/// </summary>
|
|||
/// <param name="filePath">文件路径</param>
|
|||
public static void LoadFileData(string filePath) |
|||
{ |
|||
if (!File.Exists(filePath)) |
|||
throw new FileNotFoundException($"文件不存在: {filePath}"); |
|||
|
|||
var fileData = File.ReadAllBytes(filePath); |
|||
FileData = fileData; // 自动计算 TotalPackets
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取指定文件的总包数(不设置到全局状态)
|
|||
/// </summary>
|
|||
/// <param name="fileData">文件数据</param>
|
|||
/// <returns>总包数</returns>
|
|||
public static int GetTotalPackets(byte[] fileData) |
|||
{ |
|||
return (int)Math.Ceiling(fileData.Length / 1024.0); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 重置所有状态
|
|||
/// </summary>
|
|||
public static void Reset() |
|||
{ |
|||
lock (_lockObject) |
|||
{ |
|||
_totalPackets = 0; |
|||
_fileData = null; |
|||
_endEOTData = null; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将 UTF-8 字符串转换为 GBK 编码的字节数组
|
|||
/// </summary>
|
|||
public static byte[] Utf8StringToGbkBytes(string utf8Text) |
|||
{ |
|||
if (utf8Text == null) return null; |
|||
return Encoding.GetEncoding(936).GetBytes(utf8Text); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将 UTF-8 字节数组转换为 GBK 字节数组
|
|||
/// </summary>
|
|||
public static byte[] Utf8BytesToGbkBytes(byte[] utf8Bytes) |
|||
{ |
|||
if (utf8Bytes == null || utf8Bytes.Length == 0) return utf8Bytes; |
|||
|
|||
// 1. UTF-8 字节 → 字符串(Unicode)
|
|||
string text = Encoding.UTF8.GetString(utf8Bytes); |
|||
|
|||
// 2. 字符串 → GBK 字节
|
|||
return Encoding.GetEncoding(936).GetBytes(text); |
|||
} |
|||
#endregion
|
|||
|
|||
#region 验证设备响应数据包
|
|||
|
|||
private static readonly byte[] NakSignature = { 0x6E, 0x61, 0x6B, 0x00 }; // "nak"
|
|||
private static readonly byte[] AckSignature = { 0x61, 0x63, 0x6B, 0x00 }; // "ack"
|
|||
private static readonly byte[] AckcSignature = { 0x61, 0x63, 0x6B, 0x63, 0x00 }; // "ackc"
|
|||
/// <summary>
|
|||
/// NAK响应结果
|
|||
/// </summary>
|
|||
/// <param name="buffer">usb hid 返回包</param>
|
|||
/// <returns></returns>
|
|||
public static bool IsNakResponse(List<byte> buffer) => ContainsSubsequence(buffer.ToArray(), NakSignature); |
|||
|
|||
/// <summary>
|
|||
/// ACKC响应结果
|
|||
/// </summary>
|
|||
/// <param name="buffer">usb hid 返回包</param>
|
|||
/// <returns></returns>
|
|||
public static bool IsAckcResponse(List<byte> buffer) => ContainsSubsequence(buffer.ToArray(), AckcSignature); |
|||
|
|||
/// <summary>
|
|||
/// ACK响应结果
|
|||
/// </summary>
|
|||
/// <param name="buffer">usb hid 返回包</param>
|
|||
/// <returns></returns>
|
|||
public static bool IsReadyForDataFrameResponse(List<byte> buffer) => ContainsSubsequence(buffer.ToArray(), AckSignature); |
|||
|
|||
private static bool ContainsSubsequence(ReadOnlySpan<byte> buffer, ReadOnlySpan<byte> pattern) |
|||
{ |
|||
if (buffer.Length != 195) return false; |
|||
if (pattern.Length == 0) return false; |
|||
if (buffer.Length < pattern.Length) return false; |
|||
|
|||
for (int i = 0; i <= buffer.Length - pattern.Length; i++) |
|||
{ |
|||
if (buffer.Slice(i, pattern.Length).SequenceEqual(pattern)) |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
#endregion
|
|||
|
|||
#region 查询固件版本
|
|||
/// <summary>
|
|||
/// 查询固件版本version query
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public static byte[] VersionQuery() |
|||
{ |
|||
string str = "0100FF6765742076657200300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC85"; |
|||
byte[] content = new byte[str.Length / 2]; |
|||
for (int i = 0; i < content.Length; i++) |
|||
{ |
|||
content[i] = Convert.ToByte(str.Substring(i * 2, 2), 16); |
|||
} |
|||
return content; |
|||
} |
|||
#endregion
|
|||
|
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.AIKProtocol |
|||
{ |
|||
public static class ProtocolHelper |
|||
{ |
|||
public static ushort CalculateCRC16(IEnumerable<byte> data) |
|||
{ |
|||
if (data == null || !data.Any()) |
|||
return 0; |
|||
|
|||
ushort crc = 0; |
|||
foreach (byte b in data) |
|||
{ |
|||
crc ^= (ushort)(b << 8); |
|||
for (int i = 0; i < 8; i++) |
|||
{ |
|||
if ((crc & 0x8000) != 0) |
|||
{ |
|||
crc = (ushort)((crc << 1) ^ 0x1021); |
|||
} |
|||
else |
|||
{ |
|||
crc = (ushort)(crc << 1); |
|||
} |
|||
} |
|||
} |
|||
return crc; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common |
|||
{ |
|||
public static class CommonString |
|||
{ |
|||
public static string BinCacheDirectory = Path.Combine( |
|||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), |
|||
"AIKKey", |
|||
"BinCache" |
|||
); |
|||
public static string ImageCacheDirectory = Path.Combine( |
|||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), |
|||
"AIKKey", |
|||
"ImageCache" |
|||
); |
|||
public static string CloudCacheDirectory = Path.Combine( |
|||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), |
|||
"AIKKey", |
|||
"CloudCache" |
|||
); |
|||
} |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
public enum FileServiceType |
|||
{ |
|||
OBD, |
|||
BIN, |
|||
CloudData |
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
public enum HidConnectionState |
|||
{ |
|||
Disconnected, // 初始/断开状态
|
|||
DeviceOpened, // HID 打开成功,待发 Connect
|
|||
AwaitingResponse, // 已发 Connect,等待应答
|
|||
Ready // 握手完成,可传业务数据
|
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
public enum HidOperationTypeEnum |
|||
{ |
|||
None = 0, |
|||
DeviceUpdate, |
|||
DeviceVersion, |
|||
RemoteGeneration |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
public enum MenuFunction |
|||
{ |
|||
RemoteGeneration, // 遥控生成
|
|||
RemoteCopy, // 遥控拷贝
|
|||
RemoteDetection, // 遥控检测
|
|||
ChipIdentificationCopy, // 芯片识别拷贝
|
|||
ChipGeneration, // 芯片生成
|
|||
AccessCardCopy, // 门禁卡拷贝
|
|||
KeyUnlock, // 钥匙解锁
|
|||
TirePressure, // 胎压功能
|
|||
MatchingFunction, // 匹配功能
|
|||
ChipWriteStart, // 芯片写启动
|
|||
Programmer, // 编程器
|
|||
AntiTheftData // 防盗资料
|
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
public enum MessageTypeEnum |
|||
{ |
|||
Info, |
|||
Warning, |
|||
Error, |
|||
Success |
|||
} |
|||
} |
|||
@ -0,0 +1,64 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
/// <summary>
|
|||
/// USB协议流转小阶段
|
|||
/// </summary>
|
|||
public enum TransferPhase |
|||
{ |
|||
Idle, |
|||
Phase1_SendingHeader, // 发送头帧
|
|||
Phase2_WaitingForHeaderAck, // 等待头帧确认
|
|||
Phase3_SendingDataFrames, // 发送数据帧
|
|||
Phase4_WaitingForDataFrameAck, // 等待数据帧确认
|
|||
Phase5_WaitingForFinalDataAck, // 等待最后一个数据帧确认
|
|||
Phase6_SendingEOT, // 发送 EOT
|
|||
Phase7_WaitingForNak, // 等待 NAK
|
|||
Phase8_SendingFinalEOT, // 发送最终 EOT
|
|||
Phase9_WaitingForAckc, // 等待 ACKC
|
|||
Phase10_SendEndFrame, // 发送结束帧
|
|||
Phase11_WaitingForComplete, // 等待最终确认
|
|||
Completed |
|||
} |
|||
public enum ResponseType |
|||
{ |
|||
ReadyForData, |
|||
Nak, |
|||
Ackc, |
|||
Unknown |
|||
} |
|||
/// <summary>
|
|||
/// 连接流程大阶段(每个大阶段都会走完小阶段)
|
|||
/// </summary>
|
|||
public enum BigTransferPhase |
|||
{ |
|||
None, |
|||
Phase1_Connect, // 大阶段1:设备连接(含初始化/校验)
|
|||
Phase2_Generate, // 大阶段2:数据生成(遥控生成)
|
|||
Phase3_Write, // 大阶段3:数据写入(将生成的数据写入设备)
|
|||
} |
|||
public record HidResponseReceivedEventArgs(byte[] Data); |
|||
public record HidLogMessageEventArgs(string Message, bool IsError = false); |
|||
|
|||
public class BigPhaseChangedEventArgs : EventArgs |
|||
{ |
|||
public BigTransferPhase CurrentPhase { get; } |
|||
public BigTransferPhase PreviousPhase { get; } |
|||
public int CompletedPhases { get; } |
|||
public int TotalPhases { get; } |
|||
|
|||
public BigPhaseChangedEventArgs(BigTransferPhase current, BigTransferPhase previous, int completed, int total) |
|||
{ |
|||
CurrentPhase = current; |
|||
PreviousPhase = previous; |
|||
CompletedPhases = completed; |
|||
TotalPhases = total; |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Enum |
|||
{ |
|||
public enum UserStatus |
|||
{ |
|||
NotLoggedIn, // 未登录
|
|||
LoggedInOffline, // 已登录但离线
|
|||
LoggedInOnline // 已登录且在线
|
|||
} |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Event |
|||
{ |
|||
public class ConnectionStateChangedEventArgs : EventArgs |
|||
{ |
|||
public bool IsConnected { get; } |
|||
public string Message { get; } |
|||
|
|||
public ConnectionStateChangedEventArgs(bool isConnected, string message) |
|||
{ |
|||
IsConnected = isConnected; |
|||
Message = message; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Event |
|||
{ |
|||
public class HidReconnectEventArgs : EventArgs |
|||
{ |
|||
public int CurrentAttempt { get; } |
|||
public int MaxAttempts { get; } |
|||
|
|||
public HidReconnectEventArgs(int currentAttempt, int maxAttempts) |
|||
{ |
|||
CurrentAttempt = currentAttempt; |
|||
MaxAttempts = maxAttempts; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
using System; |
|||
using System.Collections.Concurrent; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows.Media.Imaging; |
|||
|
|||
namespace AIK.Common |
|||
{ |
|||
public static class GlobalImageCache |
|||
{ |
|||
private static readonly ConcurrentDictionary<string, BitmapImage> _imgListKey = new ConcurrentDictionary<string, BitmapImage>(); |
|||
|
|||
public static BitmapImage GetOrAdd(string url, Func<string, BitmapImage> valueFactory) |
|||
{ |
|||
return _imgListKey.GetOrAdd(url, valueFactory); |
|||
} |
|||
|
|||
public static bool TryGetValue(string key, out BitmapImage value) |
|||
{ |
|||
return _imgListKey.TryGetValue(key, out value); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.IconString |
|||
{ |
|||
public static class IconStringHelper |
|||
{ |
|||
public static string InfoIcon => "\uE616"; // 信息图标
|
|||
public static string WarningIcon => "\uE604"; |
|||
public static string ErrorIcon => "\uE603"; |
|||
public static string SuccessIcon => "\uE703"; |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.IconString |
|||
{ |
|||
public static class MessageColors |
|||
{ |
|||
// 建议使用十六进制或 Brush(根据 UI 框架)
|
|||
public static string Info => "#1890FF"; // 蓝色
|
|||
public static string Warning => "#FAAD14"; // 橙色
|
|||
public static string Error => "#FF4D4F"; // 红色
|
|||
public static string Success => "#52C41A"; // 绿色
|
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using AIK.Common.Enum; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.IconString |
|||
{ |
|||
public static class MessageStyle |
|||
{ |
|||
public static (string Icon, string Color) GetByType(MessageTypeEnum type) |
|||
{ |
|||
return type switch |
|||
{ |
|||
MessageTypeEnum.Info => (IconStringHelper.InfoIcon, MessageColors.Info), |
|||
MessageTypeEnum.Warning => (IconStringHelper.WarningIcon, MessageColors.Warning), |
|||
MessageTypeEnum.Error => (IconStringHelper.ErrorIcon, MessageColors.Error), |
|||
MessageTypeEnum.Success => (IconStringHelper.SuccessIcon, MessageColors.Success), |
|||
_ => (IconStringHelper.InfoIcon, MessageColors.Info), // 默认 info
|
|||
}; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows.Media.Imaging; |
|||
|
|||
namespace AIK.Common |
|||
{ |
|||
public class ImageUtils |
|||
{ |
|||
/// <summary>
|
|||
/// 从文件路径加载图像(同步)
|
|||
/// </summary>
|
|||
public static BitmapImage LoadFromFile(string filePath) |
|||
{ |
|||
var bitmap = new BitmapImage(); |
|||
using (var stream = File.OpenRead(filePath)) |
|||
{ |
|||
bitmap.BeginInit(); |
|||
bitmap.StreamSource = stream; |
|||
bitmap.CacheOption = BitmapCacheOption.OnLoad; |
|||
bitmap.EndInit(); |
|||
} |
|||
return bitmap; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 从字节数组加载图像
|
|||
/// </summary>
|
|||
public static BitmapImage LoadFromBytes(byte[] imageData) |
|||
{ |
|||
using (var ms = new MemoryStream(imageData)) |
|||
{ |
|||
return StreamToBitmapImage(ms); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 从任意Stream加载图像(不负责关闭流)
|
|||
/// </summary>
|
|||
public static BitmapImage StreamToBitmapImage(Stream stream) |
|||
{ |
|||
if (stream.CanSeek) stream.Position = 0; |
|||
|
|||
var bitmap = new BitmapImage(); |
|||
bitmap.BeginInit(); |
|||
bitmap.StreamSource = stream; |
|||
bitmap.CacheOption = BitmapCacheOption.OnLoad; |
|||
bitmap.EndInit(); |
|||
return bitmap; |
|||
} |
|||
|
|||
public static BitmapImage StreamToBitmapImageFull(Stream stream) |
|||
{ |
|||
if (stream == null) return null; |
|||
try |
|||
{ |
|||
if (stream.CanSeek) stream.Position = 0; |
|||
using var memoryStream = new MemoryStream(); |
|||
stream.CopyTo(memoryStream); |
|||
memoryStream.Position = 0; |
|||
var bitmap = new BitmapImage(); |
|||
bitmap.BeginInit(); |
|||
bitmap.StreamSource = stream; |
|||
bitmap.CacheOption = BitmapCacheOption.OnLoad; |
|||
bitmap.EndInit(); |
|||
bitmap.Freeze(); |
|||
|
|||
return bitmap; |
|||
} |
|||
catch (Exception) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Interface |
|||
{ |
|||
public interface IFileDialogService |
|||
{ |
|||
Task<string?> OpenFileAsync(string title = "选择文件"); |
|||
Task<string?> SelectFolderAsync(string description = "请选择文件夹"); |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
using AIK.Common.Enum; |
|||
using AIK.Common.IconString; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Interface |
|||
{ |
|||
public interface IModalDialogService |
|||
{ |
|||
Task ShowProgressAsync( |
|||
Func<IProgress<double>, CancellationToken, Task<(bool, string)>> work, |
|||
string title = "请稍候", |
|||
string message = "正在烧录...", |
|||
bool canCancel = true); |
|||
|
|||
Task ShowDialogAsync( |
|||
string title = "请稍候", |
|||
string message = "正在处理...", |
|||
MessageTypeEnum typeEnum = MessageTypeEnum.Info, |
|||
bool canCancel = true, bool isAutoClose = true, int closeTime = 3000); |
|||
|
|||
Task ShowTipsDialogAsync( |
|||
string message = "已完成", |
|||
MessageTypeEnum typeEnum = MessageTypeEnum.Info, |
|||
bool canCancel = true, bool isAutoClose = true, int closeTime = 3000); |
|||
|
|||
Task ShowQRCodeDialogAsync( |
|||
IServiceProvider serviceProvider, |
|||
string title = "请稍候", |
|||
string message = "正在处理...", |
|||
MessageTypeEnum typeEnum = MessageTypeEnum.Info, |
|||
bool canCancel = true, bool isAutoClose = true, int closeTime = 3000); |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Interface |
|||
{ |
|||
public interface IQRCodeService |
|||
{ |
|||
byte[] GenerateQRCodeWithLogo(string text, string logoPath, int pixelsPerModule = 10); |
|||
} |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
using AIK.Common.Language; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Interface |
|||
{ |
|||
public interface ISettingsService |
|||
{ |
|||
UserPreferences Load(); |
|||
void Save(UserPreferences settings); |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
using AIK.Common.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Interface |
|||
{ |
|||
public interface IUpdateService |
|||
{ |
|||
#region 原生更新-界面无自定义
|
|||
/// <summary>
|
|||
/// 手动检查更新
|
|||
/// </summary>
|
|||
/// <returns>更新结果</returns>
|
|||
Task<UpdateProgressDto> CheckForUpdateAsync(); |
|||
|
|||
/// <summary>
|
|||
/// 原版更新(无自定义界面)
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public Task StartUpdateProcess(); |
|||
#endregion
|
|||
#region 新自定义更新-界面可自定义
|
|||
/// <summary>
|
|||
/// 新自定义更新(检查更新)
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public Task<UpdateInfoResult> GetUpdateInfoAsync(); |
|||
/// <summary>
|
|||
/// 自定义更新
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public Task CheckForUpdate(); |
|||
#endregion
|
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
// <auto-generated/>
|
|||
// Polyfill for record types with init-only setters (required by .NET Framework 4.8)
|
|||
namespace System.Runtime.CompilerServices |
|||
{ |
|||
internal static class IsExternalInit { } |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Language |
|||
{ |
|||
public class UserPreferences |
|||
{ |
|||
public string Language { get; set; } = "zh"; |
|||
|
|||
/// <summary>
|
|||
/// 设备唯一标识(UUID V4,卸载重装保持不变)。
|
|||
/// 用于 AI 客服 JSBridge 的 sid 参数。
|
|||
/// </summary>
|
|||
public string DeviceId { get; set; } = string.Empty; |
|||
|
|||
// 可扩展其他设置:Theme, WindowSize 等
|
|||
} |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Models |
|||
{ |
|||
/// <summary>
|
|||
/// 自定义更新界面使用类
|
|||
/// </summary>
|
|||
public class UpdateInfoResult |
|||
{ |
|||
public bool IsUpdateAvailable { get; set; } |
|||
public string LatestVersion { get; set; } |
|||
public string CurrentVersion { get; set; } |
|||
public string DownloadUrl { get; set; } |
|||
public string ChangeLog { get; set; } |
|||
public bool IsMandatory { get; set; } |
|||
|
|||
public string VersionEnContent { get; set; } |
|||
|
|||
public string VersionContent { get; set; } |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.Models |
|||
{ |
|||
/// <summary>
|
|||
/// 更新进度传输对象(跨程序集传递,无第三方依赖)(AutoUpdater.Net 不暴露下载进度,暂无进度条)
|
|||
/// </summary>
|
|||
public class UpdateProgressDto |
|||
{ |
|||
public bool IsAvailable { get; set; } |
|||
public string? CurrentVersion { get; set; } |
|||
public string? LatestVersion { get; set; } |
|||
public string? Status { get; set; } |
|||
public bool HasError { get; set; } |
|||
public string? ErrorMessage { get; set; } |
|||
|
|||
public string? DownloadUrl { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,50 @@ |
|||
//------------------------------------------------------------------------------
|
|||
// <auto-generated>
|
|||
// 此代码由工具生成。
|
|||
// 运行时版本:4.0.30319.42000
|
|||
//
|
|||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
|||
// 重新生成代码,这些更改将会丢失。
|
|||
// </auto-generated>
|
|||
//------------------------------------------------------------------------------
|
|||
|
|||
namespace AIK.Common.Properties { |
|||
|
|||
|
|||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
|||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")] |
|||
public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { |
|||
|
|||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); |
|||
|
|||
public static Settings Default { |
|||
get { |
|||
return defaultInstance; |
|||
} |
|||
} |
|||
|
|||
[global::System.Configuration.UserScopedSettingAttribute()] |
|||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
|||
[global::System.Configuration.DefaultSettingValueAttribute("zh")] |
|||
public string Language { |
|||
get { |
|||
return ((string)(this["Language"])); |
|||
} |
|||
set { |
|||
this["Language"] = value; |
|||
} |
|||
} |
|||
|
|||
[global::System.Configuration.UserScopedSettingAttribute()] |
|||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
|||
[global::System.Configuration.DefaultSettingValueAttribute("")] |
|||
public string DeviceId { |
|||
get { |
|||
return ((string)(this["DeviceId"])); |
|||
} |
|||
set { |
|||
this["DeviceId"] = value; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
<?xml version='1.0' encoding='utf-8'?> |
|||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="AIK.Common.Properties" GeneratedClassName="Settings"> |
|||
<Profiles /> |
|||
<Settings> |
|||
<Setting Name="Language" Type="System.String" Scope="User"> |
|||
<Value Profile="(Default)">zh</Value> |
|||
</Setting> |
|||
<Setting Name="DeviceId" Type="System.String" Scope="User"> |
|||
<Value Profile="(Default)" /> |
|||
</Setting> |
|||
</Settings> |
|||
</SettingsFile> |
|||
@ -0,0 +1,69 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.StompNet |
|||
{ |
|||
/// <summary>
|
|||
/// STOMP帧结构
|
|||
/// </summary>
|
|||
public static class StompFrameHelper |
|||
{ |
|||
private static readonly byte[] NullByte = { 0 }; |
|||
|
|||
public static byte[] BuildFrame(string command, Dictionary<string, string>? headers = null, string? body = null) |
|||
{ |
|||
var sb = new StringBuilder(); |
|||
sb.Append(command).Append('\n'); |
|||
|
|||
if (headers != null) |
|||
{ |
|||
foreach (var header in headers) |
|||
{ |
|||
sb.Append($"{header.Key}:{header.Value}").Append("\n"); |
|||
} |
|||
} |
|||
|
|||
sb.Append("\n"); // 空行
|
|||
sb.Append("\u0000"); // 结束符
|
|||
var headerBytes = Encoding.UTF8.GetBytes(sb.ToString()); |
|||
|
|||
return headerBytes; |
|||
} |
|||
|
|||
public static (string command, Dictionary<string, string> headers, string body)? ParseFrame(byte[] data) |
|||
{ |
|||
if (data.Length == 0 || data[data.Length - 1] != 0) return null; |
|||
|
|||
var text = Encoding.UTF8.GetString(data, 0, data.Length - 1); // 去掉
|
|||
var parts = text.Split(new[] { "\r\n\r\n", "\n\n" }, 2, StringSplitOptions.None); |
|||
|
|||
if (parts.Length < 1) return null; |
|||
|
|||
var headerSection = parts[0]; |
|||
var body = parts.Length > 1 ? parts[1] : ""; |
|||
|
|||
var lines = headerSection.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); |
|||
if (lines.Length == 0) return null; |
|||
|
|||
var command = lines[0].Trim(); |
|||
var headers = new Dictionary<string, string>(); |
|||
|
|||
for (int i = 1; i < lines.Length; i++) |
|||
{ |
|||
var line = lines[i]; |
|||
var idx = line.IndexOf(':'); |
|||
if (idx > 0) |
|||
{ |
|||
var key = line.Substring(0, idx).Trim(); |
|||
var value = line.Substring(idx + 1).Trim(); |
|||
headers[key] = value; |
|||
} |
|||
} |
|||
|
|||
return (command, headers, body); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.SysCommon |
|||
{ |
|||
public class ComStringHelper |
|||
{ |
|||
public static string K3ToolDirectory = "received_data"; |
|||
} |
|||
} |
|||
@ -0,0 +1,74 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Net.NetworkInformation; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.SysCommon |
|||
{ |
|||
public static class MacAddressHelper |
|||
{ |
|||
/// <summary>
|
|||
/// 获取主物理网卡的 MAC 地址(格式:00-1A-2B-3C-4D-5E)
|
|||
/// </summary>
|
|||
public static string GetPrimaryMacAddress() |
|||
{ |
|||
try |
|||
{ |
|||
var activeAdapters = NetworkInterface |
|||
.GetAllNetworkInterfaces() |
|||
.Where(nic => |
|||
nic.OperationalStatus == OperationalStatus.Up && |
|||
nic.NetworkInterfaceType is NetworkInterfaceType.Ethernet or NetworkInterfaceType.Wireless80211 && |
|||
!IsVirtualOrLoopback(nic)) |
|||
.OrderByDescending(nic => nic.Speed) // 优先有线 > 无线
|
|||
.ToList(); |
|||
|
|||
var primary = activeAdapters.FirstOrDefault() |
|||
?? NetworkInterface.GetAllNetworkInterfaces() |
|||
.FirstOrDefault(nic => !IsVirtualOrLoopback(nic)); |
|||
|
|||
if (primary?.GetPhysicalAddress().GetAddressBytes().Length > 0 is true) |
|||
{ |
|||
return FormatMacAddress(primary.GetPhysicalAddress().GetAddressBytes()); |
|||
} |
|||
|
|||
return "未检测到有效物理网卡"; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
return $"获取失败: {ex.Message}"; |
|||
} |
|||
} |
|||
|
|||
private static bool IsVirtualOrLoopback(NetworkInterface nic) |
|||
{ |
|||
if (nic.NetworkInterfaceType == NetworkInterfaceType.Loopback) |
|||
return true; |
|||
|
|||
string desc = nic.Description.ToLowerInvariant(); |
|||
return desc.Contains("virtual") || |
|||
desc.Contains("vmware") || |
|||
desc.Contains("vbox") || |
|||
desc.Contains("hyper-v") || |
|||
desc.Contains("bluetooth") || |
|||
desc.Contains("tunnel") || |
|||
desc.Contains("isatap") || |
|||
desc.Contains("6to4") || |
|||
desc.Contains("teredo"); |
|||
} |
|||
|
|||
private static string FormatMacAddress(ReadOnlySpan<byte> macBytes) |
|||
{ |
|||
// 使用 Span 高效构建格式化字符串(.NET 8 推荐)
|
|||
var result = new StringBuilder(macBytes.Length * 3 - 1); |
|||
for (int i = 0; i < macBytes.Length; i++) |
|||
{ |
|||
if (i > 0) result.Append('-'); |
|||
result.Append($"{macBytes[i]:X2}"); |
|||
} |
|||
return result.ToString(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Text.Json; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.SysCommon.UserCommon |
|||
{ |
|||
public static class UserTokenHelper |
|||
{ |
|||
public static (bool Success, long? UserId, long? Exp) ParseJwtPayload(string jwt) |
|||
{ |
|||
try |
|||
{ |
|||
var parts = jwt.Split('.'); |
|||
if (parts.Length != 3) return (false, null, null); |
|||
|
|||
var payloadJson = Base64UrlDecode(parts[1]); |
|||
using var doc = JsonDocument.Parse(payloadJson); |
|||
var root = doc.RootElement; |
|||
|
|||
long? userId = root.TryGetProperty("userId", out var uid) ? uid.GetInt64() : null; |
|||
long? exp = root.TryGetProperty("exp", out var e) ? e.GetInt64() : null; |
|||
|
|||
return (true, userId, exp); |
|||
} |
|||
catch |
|||
{ |
|||
return (false, null, null); |
|||
} |
|||
} |
|||
|
|||
private static string Base64UrlDecode(string input) |
|||
{ |
|||
// 补齐 padding
|
|||
string padded = input.Replace('-', '+').Replace('_', '/'); |
|||
switch (padded.Length % 4) |
|||
{ |
|||
case 2: padded += "=="; break; |
|||
case 3: padded += "="; break; |
|||
} |
|||
byte[] data = Convert.FromBase64String(padded); |
|||
return System.Text.Encoding.UTF8.GetString(data); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,66 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.SysCommon |
|||
{ |
|||
/// <summary>
|
|||
/// 自带/前缀的WebApi地址
|
|||
/// </summary>
|
|||
public static class WebApiAddress |
|||
{ |
|||
public static string Vehicle_keyBrand_List = "/prod-api/work_key/vehicle_key/brand_list"; //获取品牌列表
|
|||
public static string Vehicle_keyBrand_Detail = "/prod-api/work_key/vehicle_key/brand_detail"; //获取品牌详情
|
|||
public static string CommonProfile = "/prod-api/work_main/common/profile"; //获取用户信息
|
|||
public static string AccountLogin = "/prod-api/work_main/login";//账密登录
|
|||
public static string PhoneRegister = "/prod-api/work_main/user/phone_register";//手机号注册
|
|||
public static string EmailRegister = "/prod-api/work_main/user/user/email_register";//邮箱注册(路径按接口文档原样,含双 user)
|
|||
|
|||
#region 短信/邮箱服务(work_sms)
|
|||
public static string SendCode = "/prod-api/work_sms/sms/send_code";//发送注册验证码(GET,参数 phone)
|
|||
public static string SendLoginCode = "/prod-api/work_sms/sms/send_login";//发送登录验证码(GET,参数 phone)
|
|||
public static string CheckCode = "/prod-api/work_sms/sms/check_code";//验证验证码(GET,参数 code/phone/type)
|
|||
|
|||
// 邮箱服务(GET,成功码 code=1)
|
|||
public static string EmailSendCode = "/prod-api/work_sms/email/send_code";//发送邮箱验证码(参数 address/type)
|
|||
public static string EmailCheckCode = "/prod-api/work_sms/email/check_code";//验证邮箱验证码(参数 address/code)
|
|||
#endregion
|
|||
public static string BannerAll = "/prod-api/work_key/banner/all"; //获取首页轮播图
|
|||
public static string AppNew = "/prod-api/work_key/app/new"; //获取最新版本信息
|
|||
public static string LogList = "/prod-api/work_key/d_info/log_list";//烧录记录
|
|||
public static string Integral = "/prod-api/work_key/integral/get";//用户积分
|
|||
public static string IntegralHistroy = "/prod-api/work_key/integral/get_history";//积分记录
|
|||
public static string KeyAddInfo = "/prod-api/work_key/d_info/add_info";//用户添加烧录记录
|
|||
public static string BurnAdd = "/prod-api/work_key/burn/add";//用户添加烧录次数
|
|||
|
|||
#region 会员功能与支付积分
|
|||
public static string MembershipModuleList = "/prod-api/work_key/func/module_list"; |
|||
public static string MembershipFind = "/prod-api/work_key/func/find"; |
|||
public static string MembershipOpen = "/prod-api/work_key/func/open"; |
|||
public static string MembershipBind = "/prod-api/work_key/func/bind"; |
|||
public static string MembershipCheck = "/prod-api/work_key/func/check"; |
|||
public static string MembershipActivate = "/prod-api/work_key/func/act"; |
|||
public static string MembershipFindCount = "/prod-api/work_key/func/find_count"; |
|||
public static string MembershipAddCount = "/prod-api/work_key/func/add_count"; |
|||
public static string PayIntegralOrder = "/prod-api/work_app_mall/info/pay_integral_order"; |
|||
public static string OrderPayStatus = "/prod-api/work_app_mall/info/order_pay_status"; |
|||
public static string OrderPaypal = "/prod-api/work_key/info/order_paypal"; |
|||
#endregion
|
|||
|
|||
public static string OssDataCache = "/prod-api/work_main/oss_data/cache/type";//K3tool云数据缓存地址
|
|||
|
|||
public static string TpmsType = "/prod-api/work_key/tpms_type/type";//获取胎压类型
|
|||
|
|||
#region 工具类型(用于版本更新)
|
|||
public static string K3ToolType = "i2"; |
|||
public static string PCType = "pcwin7"; |
|||
public static string PCZipType = "pcwin7_zip"; |
|||
#endregion
|
|||
|
|||
#region oss数据缓存类型
|
|||
public static string K3ToolBin = "K3tool_bin"; |
|||
#endregion
|
|||
} |
|||
} |
|||
@ -0,0 +1,39 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.WebHelper |
|||
{ |
|||
public static class UrlHelper |
|||
{ |
|||
/// <summary>
|
|||
/// 从完整URL中提取文件名(保留URL编码,如 %28 不会转成 ()
|
|||
/// </summary>
|
|||
/// <param name="url">完整的下载链接</param>
|
|||
/// <returns>URL编码的文件名,如 "20251126055829_721_%28K3_TOOL%291.2.9.bin"</returns>
|
|||
public static string GetEncodedFileNameFromUrl(string url) |
|||
{ |
|||
if (string.IsNullOrWhiteSpace(url)) |
|||
return string.Empty; |
|||
try |
|||
{ |
|||
var uri = new Uri(url); |
|||
// Segments 是路径按 '/' 分割的数组,最后一个元素即为文件名(含原始编码)
|
|||
string[] segments = uri.Segments; |
|||
if (segments.Length == 0) |
|||
return string.Empty; |
|||
|
|||
string fileName = segments[segments.Length - 1]; |
|||
// 移除末尾可能的斜杠(虽然文件名通常不会有)
|
|||
return fileName.TrimEnd('/'); |
|||
} |
|||
catch (UriFormatException) |
|||
{ |
|||
// URL 格式无效时返回空或抛异常,根据需求调整
|
|||
return string.Empty; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,180 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Net; |
|||
using System.Net.Http; |
|||
using System.Text; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Common.WebHelper |
|||
{ |
|||
public class WebHelper |
|||
{ |
|||
|
|||
//private static string weburlTest = "https://keytest.aik518.com";
|
|||
////public static string fileurl = "https://keytest.aik518.com/prod-api/work_file/file/file_download?objectName=";
|
|||
////接口地址
|
|||
//private static string weburl = " https://key.aik518.com";
|
|||
////文件下载地址
|
|||
//public static string fileurl = " https://key.aik518.com/prod-api/work_file/file/file_download?objectName=";
|
|||
////当前平台语言
|
|||
//public static string language = "zh";
|
|||
////当前平台升级地址
|
|||
//private static string updateurl = "http://124.221.137.201:8168/update.zip";
|
|||
|
|||
//public static System.Collections.Hashtable ImgListKey = System.Collections.Hashtable.Synchronized(new System.Collections.Hashtable());
|
|||
|
|||
|
|||
|
|||
#region HttpWebRequest(请求网络资源)
|
|||
|
|||
/// <summary>
|
|||
/// 请求网络资源,返回响应的文本
|
|||
/// </summary>
|
|||
/// <param name="url">网络资源地址</param>
|
|||
public static string HttpWebRequest(string url, string parameters, int timeout, bool isPost) |
|||
{ |
|||
return HttpWebRequest(url, parameters, Encoding.GetEncoding("utf-8"), timeout, isPost); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 请求网络资源,返回响应的文本
|
|||
/// </summary>
|
|||
/// <param name="url">网络资源地址</param>
|
|||
/// <param name="parameters">提交的参数,格式:参数1=参数值1&参数2=参数值2</param>
|
|||
/// <param name="encoding">字符编码</param>
|
|||
/// <param name="isPost">是否Post提交</param>
|
|||
/// <param name="contentType">内容类型</param>
|
|||
/// <param name="cookie">Cookie容器</param>
|
|||
/// <param name="timeout">超时时间</param>
|
|||
public static string HttpWebRequest(string url, string parameters, Encoding encoding, int timeout, bool isPost = false, |
|||
string contentType = "application/x-www-form-urlencoded", CookieContainer cookie = null) |
|||
{ |
|||
var request = (HttpWebRequest)WebRequest.Create(url); |
|||
request.Timeout = timeout; |
|||
request.CookieContainer = cookie; |
|||
if (isPost) |
|||
{ |
|||
byte[] postData = encoding.GetBytes(parameters); |
|||
request.Method = "POST"; |
|||
request.ContentType = contentType; |
|||
request.ContentLength = postData.Length; |
|||
using (Stream stream = request.GetRequestStream()) |
|||
{ |
|||
stream.Write(postData, 0, postData.Length); |
|||
} |
|||
} |
|||
var response = (HttpWebResponse)request.GetResponse(); |
|||
string result; |
|||
using (Stream stream = response.GetResponseStream()) |
|||
{ |
|||
if (stream == null) |
|||
return string.Empty; |
|||
using (var reader = new StreamReader(stream, encoding)) |
|||
{ |
|||
result = reader.ReadToEnd(); |
|||
} |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region Post json请求
|
|||
public static string PostJson(string Url, string jsonParas) |
|||
{ |
|||
string strURL = Url; |
|||
//创建一个HTTP请求
|
|||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL); |
|||
//Post请求方式
|
|||
request.Method = "POST"; |
|||
//内容类型
|
|||
request.ContentType = "application/json"; |
|||
//设置参数,并进行URL编码
|
|||
string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas);
|
|||
byte[] payload; |
|||
//将Json字符串转化为字节
|
|||
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); |
|||
//设置请求的ContentLength
|
|||
request.ContentLength = payload.Length; |
|||
//发送请求,获得请求流
|
|||
Stream writer; |
|||
try |
|||
{ |
|||
using (writer = request.GetRequestStream()) |
|||
{ |
|||
//将请求参数写入流
|
|||
writer.Write(payload, 0, payload.Length); |
|||
writer.Close();//关闭请求流
|
|||
} |
|||
;//获取用于写入请求数据的Stream对象
|
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
writer = null; |
|||
} |
|||
|
|||
HttpWebResponse response; |
|||
string postContent = ""; |
|||
try |
|||
{ |
|||
//获得响应流
|
|||
using (response = (HttpWebResponse)request.GetResponse()) |
|||
{ |
|||
Stream s = response.GetResponseStream(); |
|||
// Stream postData = Request.InputStream;
|
|||
StreamReader sRead = new StreamReader(s); |
|||
postContent = sRead.ReadToEnd(); |
|||
sRead.Close(); |
|||
} |
|||
; |
|||
} |
|||
catch (WebException ex) |
|||
{ |
|||
response = ex.Response as HttpWebResponse; |
|||
} |
|||
return postContent;//返回Json数据
|
|||
} |
|||
#endregion
|
|||
|
|||
#region 异步请求
|
|||
/// <summary>
|
|||
/// 异步POST请求
|
|||
/// </summary>
|
|||
public static async Task<string> PostJsonAsync(string url, string jsonData, CancellationToken cancellationToken = default) |
|||
{ |
|||
using var client = new HttpClient(); |
|||
using var content = new StringContent(jsonData, Encoding.UTF8, "application/json"); |
|||
using var response = await client.PostAsync(url, content, cancellationToken); |
|||
response.EnsureSuccessStatusCode(); |
|||
return await response.Content.ReadAsStringAsync(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 异步HTTP请求
|
|||
/// </summary>
|
|||
public static async Task<string> HttpWebRequestAsync(string url, string data, int timeoutMs, bool isPost, CancellationToken cancellationToken = default) |
|||
{ |
|||
using var client = new HttpClient(); |
|||
client.Timeout = TimeSpan.FromMilliseconds(timeoutMs); |
|||
|
|||
if (isPost && !string.IsNullOrEmpty(data)) |
|||
{ |
|||
using var content = new StringContent(data, Encoding.UTF8, "application/json"); |
|||
using var response = await client.PostAsync(url, content, cancellationToken); |
|||
response.EnsureSuccessStatusCode(); |
|||
return await response.Content.ReadAsStringAsync(); |
|||
} |
|||
else |
|||
{ |
|||
using var response = await client.GetAsync(url, cancellationToken); |
|||
response.EnsureSuccessStatusCode(); |
|||
return await response.Content.ReadAsStringAsync(); |
|||
} |
|||
} |
|||
#endregion
|
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net48</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<UseWPF>true</UseWPF> |
|||
<LangVersion>12</LangVersion> |
|||
|
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Dapper" Version="2.1.66" /> |
|||
<PackageReference Include="System.Data.SQLite" Version="1.0.119" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Reference Include="System" /> |
|||
<Reference Include="System.Core" /> |
|||
<Reference Include="Microsoft.CSharp" /> |
|||
<Reference Include="System.Data" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.DataAccess |
|||
{ |
|||
public static class DbCore |
|||
{ |
|||
public const string CacheKey = "veh_car_data"; |
|||
public const string CacheModelKey = "veh_carmodel_data"; |
|||
public const string CacheVehModelKey = $"vehModel"; |
|||
} |
|||
} |
|||
@ -0,0 +1,194 @@ |
|||
using System.Data.SQLite; |
|||
using System; |
|||
using System.Threading; |
|||
using System.Collections.Concurrent; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.DataAccess |
|||
{ |
|||
public static class SQLiteCore |
|||
{ |
|||
private static string _databasePath; |
|||
private static bool _isInitialized = false; |
|||
private static readonly object _initLock = new object(); |
|||
// 连接池(线程安全队列),最大连接数控制为 5(SQLite 推荐)
|
|||
private static readonly ConcurrentQueue<SQLiteConnection> _connectionPool = new ConcurrentQueue<SQLiteConnection>(); |
|||
private const int MaxConnections = 5; |
|||
private static int _activeConnections = 0; |
|||
/// <summary>
|
|||
/// 初始化 SQLitePCL 和数据库路径
|
|||
/// </summary>
|
|||
private static void Initialize() |
|||
{ |
|||
lock (_initLock) |
|||
{ |
|||
if (!_isInitialized) |
|||
{ |
|||
InitializeDatabasePath(); |
|||
_isInitialized = true; |
|||
} |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取池化连接(返回包装类,支持 using 自动归还)
|
|||
/// </summary>
|
|||
public static SqlitePooledConnection GetConnection() |
|||
{ |
|||
Initialize(); |
|||
|
|||
// 尝试从池子里取空闲连接
|
|||
if (_connectionPool.TryDequeue(out var connection) && connection.State == System.Data.ConnectionState.Open) |
|||
{ |
|||
Interlocked.Decrement(ref _activeConnections); |
|||
return new SqlitePooledConnection(connection); // 用包装类包裹
|
|||
} |
|||
|
|||
// 池子里没有空闲连接,创建新连接
|
|||
if (Interlocked.Increment(ref _activeConnections) > MaxConnections) |
|||
{ |
|||
Interlocked.Decrement(ref _activeConnections); |
|||
throw new InvalidOperationException("SQLite 连接池已达最大连接数,建议优化事务执行速度或调整 MaxConnections"); |
|||
} |
|||
|
|||
var newConn = new SQLiteConnection($"Data Source={_databasePath}"); |
|||
newConn.Open(); |
|||
using (var cmd = newConn.CreateCommand()) |
|||
{ |
|||
cmd.CommandText = @"
|
|||
PRAGMA journal_mode = WAL; |
|||
PRAGMA synchronous = NORMAL; |
|||
PRAGMA foreign_keys = ON; |
|||
PRAGMA busy_timeout = 3000; |
|||
";
|
|||
cmd.ExecuteNonQuery(); |
|||
} |
|||
|
|||
return new SqlitePooledConnection(newConn); // 用包装类包裹
|
|||
} |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 将连接归还到连接池(避免重复创建)
|
|||
/// </summary>
|
|||
public static void ReturnConnection(SQLiteConnection connection) |
|||
{ |
|||
try |
|||
{ |
|||
if (connection == null || connection.State != System.Data.ConnectionState.Open) |
|||
{ |
|||
connection?.Dispose(); |
|||
Interlocked.Decrement(ref _activeConnections); |
|||
return; |
|||
} |
|||
|
|||
// 归还到池子里(供下次复用)
|
|||
_connectionPool.Enqueue(connection); |
|||
Interlocked.Decrement(ref _activeConnections); |
|||
} |
|||
catch (Exception) |
|||
{ |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 释放所有连接(程序退出时调用)
|
|||
/// </summary>
|
|||
public static void DisposePool() |
|||
{ |
|||
while (_connectionPool.TryDequeue(out var connection)) |
|||
{ |
|||
connection.Dispose(); |
|||
} |
|||
_activeConnections = 0; |
|||
} |
|||
#region 单例模式
|
|||
/// <summary>
|
|||
/// 创建配置好的数据库连接
|
|||
/// </summary>
|
|||
//public static SQLiteConnection CreateConnection()
|
|||
//{
|
|||
// InitializeSQLitePCL();
|
|||
// // 数据库文件路径
|
|||
// _databasePath = DatabasePath;
|
|||
|
|||
// // 确保目录存在
|
|||
// Directory.CreateDirectory(Path.GetDirectoryName(_databasePath));
|
|||
// var connection = new SQLiteConnection($"Data Source={_databasePath}");
|
|||
// connection.Open();
|
|||
|
|||
// // 基本优化设置
|
|||
// using (var cmd = connection.CreateCommand())
|
|||
// {
|
|||
// cmd.CommandText = @"
|
|||
// PRAGMA journal_mode = WAL;
|
|||
// PRAGMA synchronous = NORMAL;
|
|||
// PRAGMA foreign_keys = ON;
|
|||
// ";
|
|||
// cmd.ExecuteNonQuery();
|
|||
// }
|
|||
|
|||
// return connection;
|
|||
//}
|
|||
//private static void InitializeSQLitePCL()
|
|||
//{
|
|||
// lock (_initLock)
|
|||
// {
|
|||
// if (!_isInitialized)
|
|||
// {
|
|||
// try
|
|||
// {
|
|||
// _isInitialized = true;
|
|||
// Console.WriteLine("SQLitePCL initialized successfully.");
|
|||
// }
|
|||
// catch (Exception ex)
|
|||
// {
|
|||
// Console.WriteLine($"SQLitePCL initialization failed: {ex.Message}");
|
|||
// throw;
|
|||
// }
|
|||
// }
|
|||
// }
|
|||
//}
|
|||
#endregion
|
|||
private static void InitializeDatabasePath() |
|||
{ |
|||
#region(旧版本路径,未区分国内外版本)
|
|||
//_databasePath = Path.Combine(
|
|||
// Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
|||
// "AIKKey", "Cache", "aikcache.db");
|
|||
#endregion
|
|||
// 1. 获取 AppData 基础路径
|
|||
string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); |
|||
|
|||
// 2. 定义公司和应用的基础目录名
|
|||
string companyName = "AIKKey"; |
|||
string baseFolderName = "Cache"; |
|||
string databaseFileName = "aikcache.db"; |
|||
string versionFolderName; |
|||
#if CN
|
|||
versionFolderName = "CN"; // 国内版使用 "CN" 子目录
|
|||
#elif TEST
|
|||
versionFolderName = "TEST"; |
|||
#else
|
|||
versionFolderName = "Global"; // 国外版使用 "Global" 子目录
|
|||
#endif
|
|||
_databasePath = Path.Combine(appDataPath, companyName, baseFolderName, versionFolderName, databaseFileName); |
|||
// 确保目录存在
|
|||
Directory.CreateDirectory(Path.GetDirectoryName(_databasePath)); |
|||
} |
|||
public static string DatabasePath |
|||
{ |
|||
get |
|||
{ |
|||
InitializeDatabasePath(); |
|||
return _databasePath; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,50 @@ |
|||
using System.Data.SQLite; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.DataAccess |
|||
{ |
|||
public class SqlitePooledConnection : IDisposable |
|||
{ |
|||
// 内部持有真实的 SQLite 连接
|
|||
private readonly SQLiteConnection _innerConnection; |
|||
// 标记是否已释放
|
|||
private bool _disposed = false; |
|||
|
|||
/// <summary>
|
|||
/// 暴露内部连接供 Dapper 调用(核心)
|
|||
/// </summary>
|
|||
public SQLiteConnection InnerConnection => _innerConnection; |
|||
|
|||
/// <summary>
|
|||
/// 构造函数(仅由 SQLiteCore 内部创建,外部不直接实例化)
|
|||
/// </summary>
|
|||
internal SqlitePooledConnection(SQLiteConnection innerConnection) |
|||
{ |
|||
_innerConnection = innerConnection ?? throw new ArgumentNullException(nameof(innerConnection)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// using 结束时自动执行,归还连接到池
|
|||
/// </summary>
|
|||
public void Dispose() |
|||
{ |
|||
if (!_disposed) |
|||
{ |
|||
// 关键:归还连接到连接池,而非销毁
|
|||
SQLiteCore.ReturnConnection(_innerConnection); |
|||
_disposed = true; |
|||
} |
|||
} |
|||
|
|||
// 可选:暴露常用方法,简化调用(如创建命令)
|
|||
public SQLiteCommand CreateCommand() |
|||
{ |
|||
if (_disposed) throw new ObjectDisposedException(nameof(SqlitePooledConnection)); |
|||
return _innerConnection.CreateCommand(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net48</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<UseWPF>true</UseWPF> |
|||
<LangVersion>12</LangVersion> |
|||
|
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" /> |
|||
<PackageReference Include="Dapper.Contrib" Version="2.0.78" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\AIK.Common\AIK.Common.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Reference Include="System" /> |
|||
<Reference Include="System.Core" /> |
|||
<Reference Include="Microsoft.CSharp" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,32 @@ |
|||
using CommunityToolkit.Mvvm.ComponentModel; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Collections.ObjectModel; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace AIK.Models |
|||
{ |
|||
public partial class AlphabetGroup : ObservableObject |
|||
{ |
|||
[ObservableProperty] |
|||
private string letter; |
|||
|
|||
[ObservableProperty] |
|||
private ObservableCollection<AlphabetItem> items; |
|||
|
|||
public void AddRange(string[] names) |
|||
{ |
|||
foreach (var name in names) |
|||
{ |
|||
Items.Add(new AlphabetItem(name, Letter)); |
|||
} |
|||
} |
|||
public AlphabetGroup(string letter) |
|||
{ |
|||
this.letter = letter; |
|||
Items = new ObservableCollection<AlphabetItem>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
using CommunityToolkit.Mvvm.ComponentModel; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Xml.Linq; |
|||
|
|||
namespace AIK.Models |
|||
{ |
|||
public partial class AlphabetItem : ObservableObject |
|||
{ |
|||
public AlphabetItem(string name, string letter) |
|||
{ |
|||
Name = name; |
|||
Letter = letter; |
|||
} |
|||
|
|||
[ObservableProperty] |
|||
private string name; |
|||
|
|||
[ObservableProperty] |
|||
private string letter; |
|||
} |
|||
} |
|||