添加使用自签证书登录功能 (#495)

* 添加Icon识别

* 添加自选证书选择

* 更新TokenView
This commit is contained in:
Poker 2024-06-10 13:20:23 +08:00 committed by GitHub
parent ab9f020d81
commit 2474bfc867
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 660 additions and 551 deletions

View File

@ -0,0 +1,24 @@
<UserControl
x:Class="Pixeval.Controls.DialogContent.CertificateRequiredDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:fluent="using:FluentIcons.WinUI"
xmlns:local="using:Pixeval.Controls.DialogContent"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Spacing="10">
<TextBlock x:Uid="/LoginPage/CertificateRequiredDialogContent" TextWrapping="WrapWholeWords" />
<AutoSuggestBox
x:Name="PathBox"
x:Uid="/LoginPage/CertificateRequiredDialogPath"
QueryIcon="{fluent:SymbolIcon Symbol=MoreHorizontal,
FontSize={StaticResource SmallIconFontSize}}"
QuerySubmitted="PathBox_OnQuerySubmitted" />
<PasswordBox x:Name="PasswordBox" x:Uid="/LoginPage/CertificateRequiredDialogPassword" />
<InfoBar
x:Name="InfoBar"
x:Uid="/LoginPage/CertificateRequiredDialogInvalidInfoBar"
Severity="Error" />
</StackPanel>
</UserControl>

View File

@ -0,0 +1,34 @@
using System;
using System.Security.Cryptography.X509Certificates;
using Microsoft.UI.Xaml.Controls;
using Pixeval.Controls.Windowing;
using WinUI3Utilities;
namespace Pixeval.Controls.DialogContent;
public sealed partial class CertificateRequiredDialog : UserControl
{
public CertificateRequiredDialog() => InitializeComponent();
public X509Certificate2? X509Certificate2 { get; private set; }
public bool CheckCertificate()
{
try
{
X509Certificate2 = new X509Certificate2(PathBox.Text, PasswordBox.Password, X509KeyStorageFlags.UserKeySet);
return true;
}
catch
{
InfoBar.IsOpen = true;
return false;
}
}
private async void PathBox_OnQuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs e)
{
if (await WindowFactory.GetWindowForElement(this).PickSingleFileAsync() is { } file)
PathBox.Text = file.Path;
}
}

View File

@ -2,17 +2,43 @@
x:Class="Pixeval.Controls.DialogContent.CheckExitedDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:fluent="using:FluentIcons.WinUI"
xmlns:local="using:Pixeval.Controls.DialogContent"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Spacing="10">
<TextBlock x:Uid="/CheckExitedContentDialog/MainTextBlock" TextWrapping="WrapWholeWords" />
<HyperlinkButton x:Uid="/CheckExitedContentDialog/ClearConfig" Click="ClearConfig_OnClicked" />
<HyperlinkButton x:Uid="/CheckExitedContentDialog/ClearContext" Click="ClearContext_OnClicked" />
<HyperlinkButton x:Uid="/CheckExitedContentDialog/OpenLocalFolder" Click="OpenLocalFolder_OnClicked" />
<HyperlinkButton x:Uid="/CheckExitedContentDialog/OpenRoamingFolder" Click="OpenRoamingFolder_OnClicked" />
<HyperlinkButton x:Uid="/CheckExitedContentDialog/OpenLogFolder" Click="OpenLogFolder_OnClicked" />
<HyperlinkButton Click="ClearConfig_OnClicked">
<controls:DockPanel HorizontalSpacing="10">
<fluent:SymbolIcon controls:DockPanel.Dock="Left" Symbol="Apps" />
<TextBlock x:Uid="/CheckExitedContentDialog/ClearConfig" />
</controls:DockPanel>
</HyperlinkButton>
<HyperlinkButton Click="ClearContext_OnClicked">
<controls:DockPanel HorizontalSpacing="10">
<fluent:SymbolIcon controls:DockPanel.Dock="Left" Symbol="SignOut" />
<TextBlock x:Uid="/CheckExitedContentDialog/ClearContext" />
</controls:DockPanel>
</HyperlinkButton>
<HyperlinkButton Click="OpenLocalFolder_OnClicked">
<controls:DockPanel HorizontalSpacing="10">
<fluent:SymbolIcon controls:DockPanel.Dock="Left" Symbol="FolderBriefcase" />
<TextBlock x:Uid="/CheckExitedContentDialog/OpenLocalFolder" VerticalAlignment="Center" />
</controls:DockPanel>
</HyperlinkButton>
<HyperlinkButton Click="OpenRoamingFolder_OnClicked">
<controls:DockPanel HorizontalSpacing="10">
<fluent:SymbolIcon controls:DockPanel.Dock="Left" Symbol="FolderList" />
<TextBlock x:Uid="/CheckExitedContentDialog/OpenRoamingFolder" />
</controls:DockPanel>
</HyperlinkButton>
<HyperlinkButton Click="OpenLogFolder_OnClicked">
<controls:DockPanel HorizontalSpacing="10">
<fluent:SymbolIcon controls:DockPanel.Dock="Left" Symbol="FolderGlobe" />
<TextBlock x:Uid="/CheckExitedContentDialog/OpenLogFolder" />
</controls:DockPanel>
</HyperlinkButton>
</StackPanel>
</UserControl>

View File

@ -22,23 +22,23 @@ using System.Security.Cryptography.X509Certificates;
namespace Pixeval.Pages.Login;
public class CertificateManager(X509Certificate2 certificate)
public static class CertificateManager
{
public void Install(StoreName storeName, StoreLocation storeLocation)
public static void Install(this X509Certificate2 certificate, StoreName storeName, StoreLocation storeLocation)
{
using var store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
}
public void Uninstall(StoreName storeName, StoreLocation storeLocation)
public static void Uninstall(this X509Certificate2 certificate, StoreName storeName, StoreLocation storeLocation)
{
using var store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadWrite);
store.Remove(certificate);
}
public bool Query(StoreName storeName, StoreLocation storeLocation)
public static bool Query(this X509Certificate2 certificate, StoreName storeName, StoreLocation storeLocation)
{
using var store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);

View File

@ -144,11 +144,12 @@ public sealed partial class LoginPage
{
try
{
await _viewModel.WebView2LoginAsync(this, useNewAccount, () => DispatcherQueue.TryEnqueue(SuccessNavigating));
await _viewModel.WebView2LoginAsync(HWnd, useNewAccount, () => DispatcherQueue.TryEnqueue(SuccessNavigating));
_viewModel.AdvancePhase(LoginPageViewModel.LoginPhaseEnum.WaitingForUserInput);
}
catch (Exception exception)
{
_ = await this.CreateAcknowledgementAsync(LoginPageResources.ErrorWhileLoggingInTitle,
_ = await HWnd.CreateAcknowledgementAsync(LoginPageResources.ErrorWhileLoggingInTitle,
LoginPageResources.ErrorWhileLogginInContentFormatted.Format(exception + "\n" + exception.StackTrace));
_viewModel.CloseWindow();
}

View File

@ -38,6 +38,7 @@ using Microsoft.Win32;
using Pixeval.AppManagement;
using Pixeval.Attributes;
using Pixeval.Bypass;
using Pixeval.Controls.DialogContent;
using Pixeval.Controls.Windowing;
using Pixeval.CoreApi;
using Pixeval.CoreApi.Preference;
@ -136,16 +137,14 @@ public partial class LoginPageViewModel(UIElement owner) : ObservableObject
{
AdvancePhase(LoginPhaseEnum.CheckingCertificateInstallation);
using var cert = await AppInfo.GetFakeCaRootCertificateAsync();
var fakeCertMgr = new CertificateManager(cert);
return fakeCertMgr.Query(StoreName.Root, StoreLocation.CurrentUser);
return cert.Query(StoreName.Root, StoreLocation.CurrentUser);
}
public async Task InstallFakeRootCertificateAsync()
{
AdvancePhase(LoginPhaseEnum.InstallingCertificate);
using var cert = await AppInfo.GetFakeCaRootCertificateAsync();
var fakeCertMgr = new CertificateManager(cert);
fakeCertMgr.Install(StoreName.Root, StoreLocation.CurrentUser);
cert.Install(StoreName.Root, StoreLocation.CurrentUser);
}
private static int NegotiatePort(int preferPort = 49152)
@ -164,7 +163,7 @@ public partial class LoginPageViewModel(UIElement owner) : ObservableObject
return preferPort;
}
public async Task WebView2LoginAsync(UserControl userControl, bool useNewAccount, Action navigated)
public async Task WebView2LoginAsync(ulong hWnd, bool useNewAccount, Action navigated)
{
var arguments = "";
var port = NegotiatePort();
@ -172,14 +171,13 @@ public partial class LoginPageViewModel(UIElement owner) : ObservableObject
var proxyServer = null as PixivAuthenticationProxyServer;
if (EnableDomainFronting)
{
if (!await EnsureCertificateIsInstalled(userControl))
if (await EnsureCertificateIsInstalled(hWnd) is not { } cert)
return;
proxyServer = PixivAuthenticationProxyServer.Create(IPAddress.Loopback, port,
await AppInfo.GetFakeServerCertificateAsync());
proxyServer = PixivAuthenticationProxyServer.Create(IPAddress.Loopback, port, cert);
arguments += $" --ignore-certificate-errors --proxy-server=127.0.0.1:{port}";
}
if (!await EnsureWebView2IsInstalled(userControl))
if (!await EnsureWebView2IsInstalled(hWnd))
return;
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", arguments);
WebView = new();
@ -257,30 +255,40 @@ public partial class LoginPageViewModel(UIElement owner) : ObservableObject
WebView.Source = new Uri(PixivAuth.GenerateWebPageUrl(verifier));
}
private async Task<bool> EnsureCertificateIsInstalled(UIElement userControl)
private async Task<X509Certificate2?> EnsureCertificateIsInstalled(ulong hWnd)
{
if (!await CheckFakeRootCertificateInstallationAsync())
{
var dialogResult = await userControl.CreateOkCancelAsync(LoginPageResources.RootCertificateInstallationRequiredTitle,
LoginPageResources.RootCertificateInstallationRequiredContent);
if (dialogResult is ContentDialogResult.Primary)
var content = new CertificateRequiredDialog();
var cd = hWnd.CreateContentDialog(
LoginPageResources.RootCertificateInstallationRequiredTitle,
content,
LoginPageResources.RootCertificateInstallationRequiredPrimaryButtonText,
LoginPageResources.RootCertificateInstallationRequiredSecondaryButtonText,
MessageContentDialogResources.CancelButtonContent);
cd.PrimaryButtonClick += (_, e) => e.Cancel = !content.CheckCertificate();
var dialogResult = await cd.ShowAsync();
switch (dialogResult)
{
await InstallFakeRootCertificateAsync();
}
else
{
CloseWindow();
return false;
case ContentDialogResult.Primary:
return content.X509Certificate2;
case ContentDialogResult.Secondary:
await InstallFakeRootCertificateAsync();
break;
default:
return null;
}
}
return true;
return await AppInfo.GetFakeServerCertificateAsync();
}
private async Task<bool> EnsureWebView2IsInstalled(UIElement userControl)
private async Task<bool> EnsureWebView2IsInstalled(ulong hWnd)
{
if (!CheckWebView2Installation())
{
var dialogResult = await userControl.CreateOkCancelAsync(LoginPageResources.WebView2InstallationRequiredTitle,
var dialogResult = await hWnd.CreateOkCancelAsync(LoginPageResources.WebView2InstallationRequiredTitle,
LoginPageResources.WebView2InstallationRequiredContent);
if (dialogResult is ContentDialogResult.Primary)
{

View File

@ -21,7 +21,7 @@
<PackageReference Include="CommunityToolkit.Labs.WinUI.Controls.MarkdownTextBlock" Version="0.1.240517-build.1678" />
<PackageReference Include="CommunityToolkit.Labs.WinUI.Shimmer" Version="0.1.240517-build.1678" />
<PackageReference Include="CommunityToolkit.Labs.WinUI.TitleBar" Version="0.0.1-build.1678" />
<PackageReference Include="CommunityToolkit.Labs.WinUI.TokenView" Version="0.1.230830" />
<PackageReference Include="CommunityToolkit.Labs.WinUI.TokenView" Version="0.1.240517-build.1678" />
<PackageReference Include="CommunityToolkit.WinUI.Behaviors" Version="8.0.240109" />
<PackageReference Include="CommunityToolkit.WinUI.Collections" Version="8.0.240109" />
<PackageReference Include="CommunityToolkit.WinUI.Animations" Version="8.1.240606-rc" />
@ -132,16 +132,6 @@
<ProjectCapability Include="Msix" />
</ItemGroup>
<ItemGroup>
<None Remove="Controls\Download\DownloadView.xaml" />
</ItemGroup>
<ItemGroup>
<Page Update="Controls\Download\DownloadView.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>

View File

@ -3,9 +3,9 @@
"ContentDialog/PrimaryButtonText": "Exit the application",
"ContentDialog/CloseButtonText": "Continue entering the application",
"MainTextBlock/Text": "Detected that the last time the software exited in a way that didn\u0027t work properly, you can (A restart of the app is required after clearing the settings):",
"ClearConfig/Content": "Clear application settings",
"ClearContext/Content": "Clear the session",
"OpenLocalFolder/Content": "Open local folder",
"OpenRoamingFolder/Content": "Open roaming folder",
"OpenLogFolder/Content": "Open log folder"
}
"ClearConfig/Text": "Clear application settings",
"ClearContext/Text": "Clear the session",
"OpenLocalFolder/Text": "Open local folder",
"OpenRoamingFolder/Text": "Open roaming folder",
"OpenLogFolder/Text": "Open log folder"
}

View File

@ -1,35 +1,40 @@
{
"ErrorWhileLoggingInTitle": "Login process aborted: error occured.",
"ErrorWhileLogginInContentFormatted": "The app is about to exit, error message\n{0}",
"LoginPhaseCheckingCertificateInstallation": "Checking certificate installation...",
"LoginPhaseCheckingWebView2Installation": "Ensuring WebView2 installed...",
"LoginPhaseInstallingCertificate": "Installing certificate, please confirm in the dialog...",
"LoginPhaseRefreshing": "Refreshing session...",
"LoginPhaseSuccessNavigating": "Login success, navigating to the welcome page",
"LoginPhaseWaitingForUserInput": "Waiting for user input",
"SubmitButton/Content": "Login",
"RefreshTokenBox/PlaceholderText": "Refresh token",
"UserNameBox/PlaceholderText": "Email or pixiv ID",
"PasswordBox/PlaceholderText": "Password",
"DisableDomainFrontingToggleSwitch/OnContent": "Enable",
"RefreshingSessionFailedTitle": "Failed to refresh session",
"FetchingSessionFailedContent": "Please restart the app\nIf this problem persists, contact the developer for further help.",
"FetchingSessionFailedTitle": "Failed to fetch session",
"RootCertificateInstallationRequiredContent": "The certificate must be installed in order to login, the private key of this certificate is guaranteed not to be distributed, confirming this means you will accept the installation, please click OK in the dialog, if you refuse to install the certificate, you will not be able to use this app",
"RootCertificateInstallationRequiredTitle": "You need to install the certificate to login",
"WebView2InstallationRequiredContent": "WebView2 is required to log in using this method. By clicking OK the browser will be opened to download the WebView2 Runtime automatically, please restart the app after the installation.",
"WebView2InstallationRequiredTitle": "WebView2 is required to log in using this method",
"WebViewHelp/ToolTipService/ToolTip": "WebView2 is required to log in using this method.\nAfter you input the account and password, the app will keep it in the local storage\n\nClick on the \u0022Login\u0022 button will open WebView2 to login automaticallyHowever, if the error occurred while executing the script, or a captcha popped up, you will need to complete the login process manually\n\nIf you don\u0027t trust the app, you can leave the text box empty, click login, and manually fill your credentials in the WebView\n\nDomain FrontingDisabling this will force the app to use the system proxy. If you cannot access Pixiv properly, then it is better not to disable this option.",
"SubmitWithNewAccountButton/Text": "Login with another account",
"RefreshTokenButton/Content": "Login with refresh token",
"BrowserButton/Content": "Login via Chrome/Edge (beta \uD83E\uDDEA)",
"WebViewButton/Content": "Login via Webview",
"DisableDomainFrontingToggleSwitch/Header": "Domain fronting",
"DisableDomainFrontingToggleSwitch/OffContent": "Disable",
"RefreshingSessionFailedContent": "Please login again\nIf this issue recurs, please contact the developer for a solution",
"WebViewLoginTip/Title": "Attention",
"WebViewLoginTip/Message": "WebView2 is required to use this method",
"BrowserLoginTip/Title": "Attention",
"BrowserLoginTip/Message": "reCAPTCHA may be invisible when using this method",
"BrowserHelp/ToolTipService/ToolTip": "Clicking Login will log you in using an external Chromium kernel browser such as Chrome or Edge. If this method fails, you can use other methods to try to login.\n\nDomain fronting: Disabling this will use the current local IE proxy. If you do not have direct access to pixiv at this time, you should not disable this option!"
}
"ErrorWhileLoggingInTitle": "Login process aborted: error occured.",
"ErrorWhileLogginInContentFormatted": "The app is about to exit, error message\n{0}",
"LoginPhaseCheckingCertificateInstallation": "Checking certificate installation...",
"LoginPhaseCheckingWebView2Installation": "Ensuring WebView2 installed...",
"LoginPhaseInstallingCertificate": "Installing certificate, please confirm in the dialog...",
"LoginPhaseRefreshing": "Refreshing session...",
"LoginPhaseSuccessNavigating": "Login success, navigating to the welcome page",
"LoginPhaseWaitingForUserInput": "Waiting for user input",
"SubmitButton/Content": "Login",
"RefreshTokenBox/PlaceholderText": "Refresh token",
"UserNameBox/PlaceholderText": "Email or pixiv ID",
"PasswordBox/PlaceholderText": "Password",
"DisableDomainFrontingToggleSwitch/OnContent": "Enable",
"RefreshingSessionFailedTitle": "Failed to refresh session",
"FetchingSessionFailedContent": "Please restart the app\nIf this problem persists, contact the developer for further help.",
"FetchingSessionFailedTitle": "Failed to fetch session",
"CertificateRequiredDialogContent/Text": "The certificate must be installed in order to login, the private key of this certificate is guaranteed not to be distributed, click \"Use Pixeval\u0027s certificate\" to the installation\nYou can also choose to provide your own valid certificate by entering your certificate path and password in the text box below and selecting \"Use your own certificate\". If you are still unable to connect to Pixiv after this, you have provided the invalid certificate",
"RootCertificateInstallationRequiredTitle": "You need to install the certificate to login",
"WebView2InstallationRequiredContent": "WebView2 is required to log in using this method. By clicking OK the browser will be opened to download the WebView2 Runtime automatically, please restart the app after the installation.",
"WebView2InstallationRequiredTitle": "WebView2 is required to log in using this method",
"WebViewHelp/ToolTipService/ToolTip": "WebView2 is required to log in using this method.\nAfter you input the account and password, the app will keep it in the local storage\n\nClick on the \u0022Login\u0022 button will open WebView2 to login automaticallyHowever, if the error occurred while executing the script, or a captcha popped up, you will need to complete the login process manually\n\nIf you don\u0027t trust the app, you can leave the text box empty, click login, and manually fill your credentials in the WebView\n\nDomain FrontingDisabling this will force the app to use the system proxy. If you cannot access Pixiv properly, then it is better not to disable this option.",
"SubmitWithNewAccountButton/Text": "Login with another account",
"RefreshTokenButton/Content": "Login with refresh token",
"BrowserButton/Content": "Login via Chrome/Edge (beta \uD83E\uDDEA)",
"WebViewButton/Content": "Login via Webview",
"DisableDomainFrontingToggleSwitch/Header": "Domain fronting",
"DisableDomainFrontingToggleSwitch/OffContent": "Disable",
"RefreshingSessionFailedContent": "Please login again\nIf this issue recurs, please contact the developer for a solution",
"WebViewLoginTip/Title": "Attention",
"WebViewLoginTip/Message": "WebView2 is required to use this method",
"BrowserLoginTip/Title": "Attention",
"BrowserLoginTip/Message": "reCAPTCHA may be invisible when using this method",
"BrowserHelp/ToolTipService/ToolTip": "Clicking Login will log you in using an external Chromium kernel browser such as Chrome or Edge. If this method fails, you can use other methods to try to login.\n\nDomain fronting: Disabling this will use the current local IE proxy. If you do not have direct access to pixiv at this time, you should not disable this option!",
"RootCertificateInstallationRequiredSecondaryButtonText": "Use Pixeval\u0027s certificate",
"RootCertificateInstallationRequiredPrimaryButtonText": "Use your own certificate",
"CertificateRequiredDialogPath/PlaceholderText": "Certificate path",
"CertificateRequiredDialogPassword/PlaceholderText": "Certificate password",
"CertificateRequiredDialogInvalidInfoBar/Title": "Incorrect certificate path or password"
}

View File

@ -1,204 +1,204 @@
{
"AppDescriptionTextBlock/Text": "Pixeval is a third-party Pixiv client developed on top of Windows UI 3. It provides extra functionalities in addition to standard pixiv experiencesincluding local collections and domain fronting in China mainland\n\n You can find more information about Pixeval below",
"AppFontFamilyComboBox/PlaceholderText": "Select font",
"AppFontFamilyEntry/Header": "Font settings (take effect after restart the app)",
"AppLanguageEntry/Header": "Language settings (take effect after restart the app)",
"OpenLanguageSettingsHyperlinkButton/Content": "Open system language settings",
"AppLanguageEntryComboBox/PlaceholderText": "Select language",
"ApplicationSettingsGroup/Text": "Application",
"BackdropEntry/Header": "Background material",
"BrowseHistoriesCleared": "History records deleted",
"BrowsingExperienceSettingsGroup/Text": "User Experiences",
"CheckingForUpdate": "Checking update...",
"DownloadingUpdate": "Downloading update...",
"Unzipping": "Unzipping",
"IsUpToDate": "Your app is already at newest version",
"IsInsider": "You\u0027re using the insider version",
"MajorUpdateAvailable": "Major update available",
"MinorUpdateAvailable": "Minor update available",
"BuildUpdateAvailable": "Build update available",
"UnknownUpdateState": "Unknown update state",
"UpdateApp": "App Update",
"LanguageSystemDefault": "System default",
"DownloadedAndWaitingToInstall": "App version {0} is downloadedwould you like to install it now? You can also choose to install later manually in the temporary folder",
"InstallCanceled": "Installation cancelled",
"UpdateFailed": "Installation failed",
"UpdateFailedInTempFolder": "Update failed, you can find the file in temporary folder",
"DownloadPathMacroEntry/Header": "Default download location",
"DownloadPathMacroTextBox/PlaceholderText": "Download path",
"DefaultSearchSortOptionEntry/Description": "Default sort strategy while searching",
"DefaultSearchSortOptionEntry/Header": "Default sort stratege",
"DefaultSearchTagMatchOptionEntry/Description": "Indicates how does the app match result with the keyword/tag",
"DefaultSearchTagMatchOptionEntry/Header": "Default tag match stratege",
"PixivNameResolverHeader/Text": "Name resolver",
"PixivNameResolverDescription/Text": "The app will resolve domain to the following IP addresses after domain fronting is enabled",
"DefaultSelectedTabEntry/Description": "The default tab that will be selected on app start",
"DefaultSelectedTabEntry/Header": "Default tab",
"DeleteBrowseHistoriesButton/Content": "Clear",
"DeleteBrowseHistoriesEntry/Description": "By clicking on this button you will delete all browsing histories",
"DeleteBrowseHistoriesEntry/Header": "Clear browsing histories",
"DeleteDownloadHistoriesButton/Content": "Clear",
"DeleteDownloadHistoriesEntry/Description": "By clicking on this button you will delete all the download histories",
"DeleteDownloadHistoriesEntry/Header": "Clear download histories",
"DeleteSearchHistoriesButton/Content": "Clear",
"DeleteSearchHistoriesEntry/Description": "By clicking on this button you will delete all search histories",
"DeleteSearchHistoriesEntry/Header": "Clear search histories",
"EnableDomainFrontingEntry/Description": "Disabling this setting may cause the app to broken on countries or regions that blocked Pixiv",
"EnableDomainFrontingEntry/Header": "Enable domain fronting",
"DonateDeveloperHyperlinkButton/Content": "Donate the developers",
"DownloadHistoriesCleared": "Download history cleared",
"DownloadMacroInvalidInfoBar/Title": "Failed to parse the macro",
"DownloadMacroInvalidInfoBarInputCannotBeBlank": "Input cannot be blank",
"DownloadMacroInvalidInfoBarMacroInvalidFormatted": "{0}, please re-enter the macro after correction",
"DownloadSettingsGroup/Text": "Download",
"DownloadUpdateAutomaticallyEntry/Description": "Metered networks excluded",
"DownloadUpdateAutomaticallyEntry/Header": "Download update automatically",
"FeedbackByEmailHyperlinkButton/Content": "Contact the developers",
"ViewingRestrictionEntry/Header": "Viewing restriction",
"GitHubRepositoryHyperlinkButton/Content": "GitHub repository",
"ItemsViewLayoutTypeEntry/Description": "The grid layout constraints images in the same width and height, while flow layout only forces vertical alignments",
"ItemsViewLayoutTypeEntry/Header": "Alignment rules for thumbnails",
"ImageMirrorServerEntry/Description": "Mirror host for downloading images, leave this empty if you don\u0027t understand",
"ImageMirrorServerEntry/Header": "Host or the mirror site",
"ImageMirrorServerTextBox/PlaceholderText": "Hostname",
"JoinFeedbackGroupHyperlinkButton/Content": "Join the feedback group",
"LastCheckedPrefix": "Last checked: ",
"MaxDownloadConcurrencyLevelEntry/Description": "This setting entry sets the threshold of the maximum parallel download tasks, the max value will be the number of your CPU cores. Notice: A higher value may cause the system to be unresponsive on low-end PCs",
"MaxDownloadConcurrencyLevelEntry/Header": "Maximum parallel download task",
"MaximumBrowseHistoryRecordsEntry/Description": "Oldest records will be deleted once the total records exceed this number",
"MaximumBrowseHistoryRecordsEntry/Header": "Maximum browsing history record",
"MaximumBrowseHistoryRecordsNumerBox/PlaceholderText": "[10, 200]",
"MaximumDownloadHistoryRecordsEntry/Description": "Oldest records will be deleted once the total records exceed this number",
"MaximumDownloadHistoryRecordsEntry/Header": "Maximum download history record",
"MaximumDownloadHistoryRecordsNumberBox/PlaceholderText": "[10, 200]",
"MaximumSearchHistoryRecordsEntry/Description": "Oldest records will be deleted once the total records exceed this number",
"MaximumSearchHistoryRecordsEntry/Header": "Maximum search history record",
"MaximumSearchHistoryRecordsNumberBox/PlaceholderText": "[10, 50]",
"MaximumSuggestionBoxSearchHistoryEntry/Description": "The search history entries in the search box will be limited by this setting (sorted by date)",
"MaximumSuggestionBoxSearchHistoryEntry/Header": "Maximum search history entry in the search box",
"MiscSettingsGroup/Text": "Miscellaneous",
"OpenFontSettingsHyperlinkButton/Content": "Open system font setting",
"OverwriteDownloadedFileEntry/Description": "The old file with same name will be overwritten once this setting is turned on",
"OverwriteDownloadedFileEntry/Header": "Overwrite downloaded files",
"PerformSignOutButton/Content": "Sign out",
"ReleaseNotesHyperlinkButton/Content": "Update log",
"ReportBugHyperlinkButton/Content": "File an issue on GitHub",
"CheckForUpdatesButton/Content": "Check update",
"GitHubCheckForUpdatesEntry/Header": "Get update from GitHub",
"BugReportEntry/Header": "Feedback",
"BugReportEntry/Description": "Report bugs/feature requests (Please include logs in bug reports)",
"BugReportChannelsEntry/Header": "Bug report channel",
"BugReportChannelsEntry/Description": "You can report bugs through following channels",
"GitHubBugReportEntry/ToolTipService/ToolTip": "Report bugs on GitHub",
"EMailBugReportEntry/ToolTipService/ToolTip": "Report bugs by sending Email",
"QQBugReportEntry/ToolTipService/ToolTip": "Report bugs in QQ group",
"OpenLogEntry/Header": "Open log folder",
"OpenLogEntry/Description": "Please include newest file in this folder while reporting bugs",
"OpenTempEntry/Header": "Open temporary folder",
"OpenTempEntry/Description": "Temporary files are stored here and will be delected each time the app starts",
"OpenLocalEntry/Header": "Open local folder",
"OpenLocalEntry/Description": "Files under this folder are important and not meant to be modified",
"OpenRoamingEntry/Header": "Open roaming folder",
"ResetDefaultSettingsButton/Content": "Reset settings",
"ResetDefaultSettingsEntry/Description": "By clicking on this button you will reset all settings, this operation is irreversible",
"ResetDefaultSettingsEntry/Header": "Reset default setting",
"ResetSettingConfirmationDialogContent": "This operation is irreversible",
"ResetSettingConfirmationDialogTitle": "Are you sure you want to reset all settings?",
"ReverseSearchApiKeyEntry/Header": "SauceNAO API Key",
"ReverseSearchApiKeyEntryDescriptionHyperlinkButton/Content": "You can acquire and API Key at here (requires sign up/login)",
"ReverseSearchApiKeyTextBox/PlaceholderText": "API Key",
"ReverseSearchResultSimilarityThresholdEntry/Description": "Threshold of the likelihood of the reverse search, higher value indicates higher similarities, results lower than this value will be ignored",
"ReverseSearchResultSimilarityThresholdEntry/Header": "Reverse search threshold",
"SearchDurationEntry/Description": "The search results will be limited into a specific date range, this setting will be isgnored if \u0022Use precise search range\u0022 is enabled",
"SearchDurationEntry/Header": "Search range limit",
"SearchEndDateEntry/Description": "The search result will contain only the works published before this setting, the value is at least 1 day after the start date",
"SearchEndDateEntry/Header": "End date",
"SearchHistoriesCleared": "Search history cleared",
"SearchSettingsGroup/Text": "Search",
"SearchStartCalendarDatePicker/PlaceholderText": "Start date",
"SearchStartDateEntry/Description": "The search result will contain only the works published after this setting",
"SearchStartDateEntry/Header": "Start date",
"SessionSettingsGroup/Text": "Session",
"SignOutConfirmationDialogContent": "This operation is irreversible",
"SignOutConfirmationDialogTitle": "Are you sure you want to sign out",
"SignOutEntry/Description": "By signing out, you will lose your cache, cross-device synchronisation, and personal data before the app exits",
"SignOutEntry/Header": "Sign out",
"SpotlightSearchPageLimitNumberBox/PlaceholderText": "[1, 100]",
"TargetAPIPlatformEntry/Description": "Which API platform will be used during request? Keep default if you don\u0027t understand",
"TargetAPIPlatformEntry/Header": "Target API platform",
"ThemeEntry/Header": "Application theme",
"ThemeEntryDescriptionHyperlinkButton/Content": "Open system theme settings",
"ThumbnailDirectionEntry/Description": "The direction of the thumbnail",
"ThumbnailDirectionEntry/Header": "Thumbnail direction",
"TitleTextBlock/Text": "Pixeval Settings",
"UseFileCacheEntry/Description": "By enabling this setting, the app reduces network requests and improves user experiences, however, more CPU resources is required and frequent disk I/O is expected",
"UseFileCacheEntry/Header": "Use file cache",
"UsePreciseRangeForSearchEntry/Description": "Use a precise date range while searching, the search result will be confined within the given date range, by enabling this the app will ignore \u0022Search range limit\u0022 setting",
"UsePreciseRangeForSearchEntry/Header": "Use precise search range",
"VersionSettingsGroup/Text": "Version",
"ViewPixevalWebsiteHyperlinkButton/Content": "Pixeval website",
"WorkDownloadFormatEntry/Description": "Set the format of the downloaded works",
"WorkDownloadFormatEntry/Header": "Work format",
"DownloadPathMacroEntry/Description": "See Download Macros instructions on the help page",
"RankOptionEntry/Description": "Ranking parameters",
"RankOptionEntry/Header": "Default ranking option",
"SimpleWorkTypeEntry/Description": "Type of work to be shown by default",
"SimpleWorkTypeEntry/Header": "Default work type",
"IllustrationOptionEntry/Header": "Illustration",
"MangaOptionEntry/Header": "Manga",
"UgoiraOptionEntry/Header": "Ugoira",
"NovelOptionEntry/Header": "Novel",
"DeleteFileCacheEntry/Header": "Delete caches",
"DeleteFileCacheEntry/Description": "Delete all file caches",
"DeleteHistoriesEntry/Header": "Delete histories",
"FileCacheCleared": "Caches cleared",
"ViewingRestrictionEntry/Description": "Configure your Pixiv account to block or display R-18/R-18G/AI-generated content",
"BlockedTagsTokenizingTextBox/PlaceholderText": "Blocked tags",
"BlockedTagsEntry/Description": "Blocked tags will not be displayed in Pixeval (Use comma to separate them)",
"BlockedTagsEntry/Header": "Global blocked tags",
"RateEntry/Description": "Like Pixeval? Give a 5-⭐️ in Microsoft Store~",
"RateEntry/Header": "Rate Pixeval",
"DownloadWhenBookmarkedEntry/Description": "The work will be automatically downloaded as soon as you bookmark it.",
"DownloadWhenBookmarkedEntry/Header": "Automatic download when added to bookmark",
"MsStoreCheckForUpdatesEntry/Header": "Search for updates from Microsoft Store",
"OpenRoamingEntry/Description": "This directory contains important configuration files. Please do not modify them",
"BrowseOriginalImageEntry/Description": "This option requires more bandwidth and loading time, but you\u0027ll get a better experience and faster download speed",
"BrowseOriginalImageEntry/Header": "View original images",
"ProxyTypeEntry/Description": "When domain fronting is disabled, this proxy will be used by Pixeval",
"ProxyTypeEntry/Header": "Proxy type",
"ProxyTextBoxEntry/Description": "Protocols will be ignored",
"ProxyTextBoxEntry/Header": "Proxy server",
"ProxyTextBoxErrorUri": "The URI of the proxy server is incorrect, please correct it",
"NovelFontFamilyComboBox/PlaceholderText": "Select a font",
"NovelFontWeightComboBox/PlaceholderText": "Select font weight",
"NovelSettingsFontFamilyEntry/Header": "Font family",
"NovelSettingsFontColorEntry/Header": "Font color",
"NovelSettingsFontColorEntry/Description": "Body font color",
"NovelSettingsBackgroundEntry/Header": "Background color",
"NovelSettingsBackgroundEntry/Description": "Page background color",
"NovelSettingsFontWeightEntry/Header": "Font weight",
"NovelSettingsFontWeightEntry/Description": "Body font weight",
"NovelSettingsFontSizeEntry/Header": "Font size",
"NovelSettingsFontSizeEntry/Description": "Body font size",
"NovelSettingsLineHeightEntry/Header": "Line height",
"NovelSettingsLineHeightEntry/Description": "Body line spacing",
"NovelSettingsMaxWidthEntry/Header": "Page width",
"NovelSettingsMaxWidthEntry/Description": "Maximum page width",
"MacroCopiedToClipboard": "Macros copied to the clipboard",
"ExtMacroTooltip": "File extension, like .jpg, .png, etc. Note that the macro already includes the dot \u0027.\u0027 in front of the extension. This macro MUST be used on the file name",
"IdMacroTooltip": "Work ID",
"TitleMacroTooltip": "Work title",
"ArtistIdMacroTooltip": "Author ID",
"ArtistNameMacroTooltip": "Author name",
"PublishYearMacroTooltip": "Year of publication",
"PublishMonthMacroTooltip": "Month of publication",
"PublishDayMacroTooltip": "Day of publication",
"IfMangaMacroTooltip": "This marco will be replaced by its argument if it\u0027s a manga",
"IfR18MacroTooltip": "This marco will be replaced by its argument in the case of restricted work (R18 or R18G)",
"IfR18GMacroTooltip": "This marco will be replaced by its argument if it is a R18G work",
"IfAiMacroTooltip": "This marco will be replaced by its argument in the case of AI-generated work",
"IfIllustMacroTooltip": "This marco will be replaced by its argument if it\u0027s an illustration",
"IfNovelMacroTooltip": "This marco will be replaced by its argument if it\u0027s a novel",
"IfGifMacroTooltip": "This marco will be replaced by its argument if it\u0027s an animated image",
"MangaIndexMacroTooltip": "This marco will be replaced by the index of the current image in the manga. This macro MUST be used with the @{if_manga=} macro, and MUST be used on the file name"
}
"AppDescriptionTextBlock/Text": "Pixeval is a third-party Pixiv client developed on top of Windows UI 3. It provides extra functionalities in addition to standard pixiv experiencesincluding local collections and domain fronting in China mainland\n\n You can find more information about Pixeval below",
"AppFontFamilyComboBox/PlaceholderText": "Select font",
"AppFontFamilyEntry/Header": "Font settings (take effect after restart the app)",
"AppLanguageEntry/Header": "Language settings (take effect after restart the app)",
"OpenLanguageSettingsHyperlinkButton/Content": "Open system language settings",
"AppLanguageEntryComboBox/PlaceholderText": "Select language",
"ApplicationSettingsGroup/Text": "Application",
"BackdropEntry/Header": "Background material",
"BrowseHistoriesCleared": "History records deleted",
"BrowsingExperienceSettingsGroup/Text": "User Experiences",
"CheckingForUpdate": "Checking update...",
"DownloadingUpdate": "Downloading update...",
"Unzipping": "Unzipping",
"IsUpToDate": "Your app is already at newest version",
"IsInsider": "You\u0027re using the insider version",
"MajorUpdateAvailable": "Major update available",
"MinorUpdateAvailable": "Minor update available",
"BuildUpdateAvailable": "Build update available",
"UnknownUpdateState": "Unknown update state",
"UpdateApp": "App Update",
"LanguageSystemDefault": "System default",
"DownloadedAndWaitingToInstall": "App version {0} is downloadedwould you like to install it now? You can also choose to install later manually in the temporary folder",
"InstallCanceled": "Installation cancelled",
"UpdateFailed": "Installation failed",
"UpdateFailedInTempFolder": "Update failed, you can find the file in temporary folder",
"DownloadPathMacroEntry/Header": "Default download location",
"DownloadPathMacroTextBox/PlaceholderText": "Download path",
"DefaultSearchSortOptionEntry/Description": "Default sort strategy while searching",
"DefaultSearchSortOptionEntry/Header": "Default sort stratege",
"DefaultSearchTagMatchOptionEntry/Description": "Indicates how does the app match result with the keyword/tag",
"DefaultSearchTagMatchOptionEntry/Header": "Default tag match stratege",
"PixivNameResolverHeader/Text": "Name resolver",
"PixivNameResolverDescription/Text": "The app will resolve domain to the following IP addresses after domain fronting is enabled",
"DefaultSelectedTabEntry/Description": "The default tab that will be selected on app start",
"DefaultSelectedTabEntry/Header": "Default tab",
"DeleteBrowseHistoriesButton/Content": "Clear",
"DeleteBrowseHistoriesEntry/Description": "By clicking on this button you will delete all browsing histories",
"DeleteBrowseHistoriesEntry/Header": "Clear browsing histories",
"DeleteDownloadHistoriesButton/Content": "Clear",
"DeleteDownloadHistoriesEntry/Description": "By clicking on this button you will delete all the download histories",
"DeleteDownloadHistoriesEntry/Header": "Clear download histories",
"DeleteSearchHistoriesButton/Content": "Clear",
"DeleteSearchHistoriesEntry/Description": "By clicking on this button you will delete all search histories",
"DeleteSearchHistoriesEntry/Header": "Clear search histories",
"EnableDomainFrontingEntry/Description": "Disabling this setting may cause the app to broken on countries or regions that blocked Pixiv",
"EnableDomainFrontingEntry/Header": "Enable domain fronting",
"DonateDeveloperHyperlinkButton/Content": "Donate the developers",
"DownloadHistoriesCleared": "Download history cleared",
"DownloadMacroInvalidInfoBar/Title": "Failed to parse the macro",
"DownloadMacroInvalidInfoBarInputCannotBeBlank": "Input cannot be blank",
"DownloadMacroInvalidInfoBarMacroInvalidFormatted": "{0}, please re-enter the macro after correction",
"DownloadSettingsGroup/Text": "Download",
"DownloadUpdateAutomaticallyEntry/Description": "Metered networks excluded",
"DownloadUpdateAutomaticallyEntry/Header": "Download update automatically",
"FeedbackByEmailHyperlinkButton/Content": "Contact the developers",
"ViewingRestrictionEntry/Header": "Viewing restriction",
"GitHubRepositoryHyperlinkButton/Content": "GitHub repository",
"ItemsViewLayoutTypeEntry/Description": "The grid layout constraints images in the same width and height, while flow layout only forces vertical alignments",
"ItemsViewLayoutTypeEntry/Header": "Alignment rules for thumbnails",
"ImageMirrorServerEntry/Description": "Mirror host for downloading images, leave this empty if you don\u0027t understand",
"ImageMirrorServerEntry/Header": "Host or the mirror site",
"ImageMirrorServerTextBox/PlaceholderText": "Hostname",
"JoinFeedbackGroupHyperlinkButton/Content": "Join the feedback group",
"LastCheckedPrefix": "Last checked: ",
"MaxDownloadConcurrencyLevelEntry/Description": "This setting entry sets the threshold of the maximum parallel download tasks, the max value will be the number of your CPU cores. Notice: A higher value may cause the system to be unresponsive on low-end PCs",
"MaxDownloadConcurrencyLevelEntry/Header": "Maximum parallel download task",
"MaximumBrowseHistoryRecordsEntry/Description": "Oldest records will be deleted once the total records exceed this number",
"MaximumBrowseHistoryRecordsEntry/Header": "Maximum browsing history record",
"MaximumBrowseHistoryRecordsNumerBox/PlaceholderText": "[10, 200]",
"MaximumDownloadHistoryRecordsEntry/Description": "Oldest records will be deleted once the total records exceed this number",
"MaximumDownloadHistoryRecordsEntry/Header": "Maximum download history record",
"MaximumDownloadHistoryRecordsNumberBox/PlaceholderText": "[10, 200]",
"MaximumSearchHistoryRecordsEntry/Description": "Oldest records will be deleted once the total records exceed this number",
"MaximumSearchHistoryRecordsEntry/Header": "Maximum search history record",
"MaximumSearchHistoryRecordsNumberBox/PlaceholderText": "[10, 50]",
"MaximumSuggestionBoxSearchHistoryEntry/Description": "The search history entries in the search box will be limited by this setting (sorted by date)",
"MaximumSuggestionBoxSearchHistoryEntry/Header": "Maximum search history entry in the search box",
"MiscSettingsGroup/Text": "Miscellaneous",
"OpenFontSettingsHyperlinkButton/Content": "Open system font setting",
"OverwriteDownloadedFileEntry/Description": "The old file with same name will be overwritten once this setting is turned on",
"OverwriteDownloadedFileEntry/Header": "Overwrite downloaded files",
"PerformSignOutButton/Content": "Sign out",
"ReleaseNotesHyperlinkButton/Content": "Update log",
"ReportBugHyperlinkButton/Content": "File an issue on GitHub",
"CheckForUpdatesButton/Content": "Check update",
"GitHubCheckForUpdatesEntry/Header": "Get update from GitHub",
"BugReportEntry/Header": "Feedback",
"BugReportEntry/Description": "Report bugs/feature requests (Please include logs in bug reports)",
"BugReportChannelsEntry/Header": "Bug report channel",
"BugReportChannelsEntry/Description": "You can report bugs through following channels",
"GitHubBugReportEntry/ToolTipService/ToolTip": "Report bugs on GitHub",
"EMailBugReportEntry/ToolTipService/ToolTip": "Report bugs by sending Email",
"QQBugReportEntry/ToolTipService/ToolTip": "Report bugs in QQ group",
"OpenLogEntry/Header": "Open log folder",
"OpenLogEntry/Description": "Please include newest file in this folder while reporting bugs",
"OpenTempEntry/Header": "Open temporary folder",
"OpenTempEntry/Description": "Temporary files are stored here and will be delected each time the app starts",
"OpenLocalEntry/Header": "Open local folder",
"OpenLocalEntry/Description": "Files under this folder are important and not meant to be modified",
"OpenRoamingEntry/Header": "Open roaming folder",
"ResetDefaultSettingsButton/Content": "Reset settings",
"ResetDefaultSettingsEntry/Description": "By clicking on this button you will reset all settings, this operation is irreversible",
"ResetDefaultSettingsEntry/Header": "Reset default setting",
"ResetSettingConfirmationDialogContent": "This operation is irreversible",
"ResetSettingConfirmationDialogTitle": "Are you sure you want to reset all settings?",
"ReverseSearchApiKeyEntry/Header": "SauceNAO API Key",
"ReverseSearchApiKeyEntryDescriptionHyperlinkButton/Content": "You can acquire and API Key at here (requires sign up/login)",
"ReverseSearchApiKeyTextBox/PlaceholderText": "API Key",
"ReverseSearchResultSimilarityThresholdEntry/Description": "Threshold of the likelihood of the reverse search, higher value indicates higher similarities, results lower than this value will be ignored",
"ReverseSearchResultSimilarityThresholdEntry/Header": "Reverse search threshold",
"SearchDurationEntry/Description": "The search results will be limited into a specific date range, this setting will be isgnored if \u0022Use precise search range\u0022 is enabled",
"SearchDurationEntry/Header": "Search range limit",
"SearchEndDateEntry/Description": "The search result will contain only the works published before this setting, the value is at least 1 day after the start date",
"SearchEndDateEntry/Header": "End date",
"SearchHistoriesCleared": "Search history cleared",
"SearchSettingsGroup/Text": "Search",
"SearchStartCalendarDatePicker/PlaceholderText": "Start date",
"SearchStartDateEntry/Description": "The search result will contain only the works published after this setting",
"SearchStartDateEntry/Header": "Start date",
"SessionSettingsGroup/Text": "Session",
"SignOutConfirmationDialogContent": "This operation is irreversible",
"SignOutConfirmationDialogTitle": "Are you sure you want to sign out",
"SignOutEntry/Description": "Sign out and exit app",
"SignOutEntry/Header": "Sign out",
"SpotlightSearchPageLimitNumberBox/PlaceholderText": "[1, 100]",
"TargetAPIPlatformEntry/Description": "Which API platform will be used during request? Keep default if you don\u0027t understand",
"TargetAPIPlatformEntry/Header": "Target API platform",
"ThemeEntry/Header": "Application theme",
"ThemeEntryDescriptionHyperlinkButton/Content": "Open system theme settings",
"ThumbnailDirectionEntry/Description": "The direction of the thumbnail",
"ThumbnailDirectionEntry/Header": "Thumbnail direction",
"TitleTextBlock/Text": "Pixeval Settings",
"UseFileCacheEntry/Description": "By enabling this setting, the app reduces network requests and improves user experiences, however, more CPU resources is required and frequent disk I/O is expected",
"UseFileCacheEntry/Header": "Use file cache",
"UsePreciseRangeForSearchEntry/Description": "Use a precise date range while searching, the search result will be confined within the given date range, by enabling this the app will ignore \u0022Search range limit\u0022 setting",
"UsePreciseRangeForSearchEntry/Header": "Use precise search range",
"VersionSettingsGroup/Text": "Version",
"ViewPixevalWebsiteHyperlinkButton/Content": "Pixeval website",
"WorkDownloadFormatEntry/Description": "Set the format of the downloaded works",
"WorkDownloadFormatEntry/Header": "Work format",
"DownloadPathMacroEntry/Description": "See Download Macros instructions on the help page",
"RankOptionEntry/Description": "Ranking parameters",
"RankOptionEntry/Header": "Default ranking option",
"SimpleWorkTypeEntry/Description": "Type of work to be shown by default",
"SimpleWorkTypeEntry/Header": "Default work type",
"IllustrationOptionEntry/Header": "Illustration",
"MangaOptionEntry/Header": "Manga",
"UgoiraOptionEntry/Header": "Ugoira",
"NovelOptionEntry/Header": "Novel",
"DeleteFileCacheEntry/Header": "Delete caches",
"DeleteFileCacheEntry/Description": "Delete all file caches",
"DeleteHistoriesEntry/Header": "Delete histories",
"FileCacheCleared": "Caches cleared",
"ViewingRestrictionEntry/Description": "Configure your Pixiv account to block or display R-18/R-18G/AI-generated content",
"BlockedTagsTokenizingTextBox/PlaceholderText": "Blocked tags",
"BlockedTagsEntry/Description": "Blocked tags will not be displayed in Pixeval (Use comma to separate them)",
"BlockedTagsEntry/Header": "Global blocked tags",
"RateEntry/Description": "Like Pixeval? Give a 5-⭐️ in Microsoft Store~",
"RateEntry/Header": "Rate Pixeval",
"DownloadWhenBookmarkedEntry/Description": "The work will be automatically downloaded as soon as you bookmark it.",
"DownloadWhenBookmarkedEntry/Header": "Automatic download when added to bookmark",
"MsStoreCheckForUpdatesEntry/Header": "Search for updates from Microsoft Store",
"OpenRoamingEntry/Description": "This directory contains important configuration files. Please do not modify them",
"BrowseOriginalImageEntry/Description": "This option requires more bandwidth and loading time, but you\u0027ll get a better experience and faster download speed",
"BrowseOriginalImageEntry/Header": "View original images",
"ProxyTypeEntry/Description": "When domain fronting is disabled, this proxy will be used by Pixeval",
"ProxyTypeEntry/Header": "Proxy type",
"ProxyTextBoxEntry/Description": "Protocols will be ignored",
"ProxyTextBoxEntry/Header": "Proxy server",
"ProxyTextBoxErrorUri": "The URI of the proxy server is incorrect, please correct it",
"NovelFontFamilyComboBox/PlaceholderText": "Select a font",
"NovelFontWeightComboBox/PlaceholderText": "Select font weight",
"NovelSettingsFontFamilyEntry/Header": "Font family",
"NovelSettingsFontColorEntry/Header": "Font color",
"NovelSettingsFontColorEntry/Description": "Body font color",
"NovelSettingsBackgroundEntry/Header": "Background color",
"NovelSettingsBackgroundEntry/Description": "Page background color",
"NovelSettingsFontWeightEntry/Header": "Font weight",
"NovelSettingsFontWeightEntry/Description": "Body font weight",
"NovelSettingsFontSizeEntry/Header": "Font size",
"NovelSettingsFontSizeEntry/Description": "Body font size",
"NovelSettingsLineHeightEntry/Header": "Line height",
"NovelSettingsLineHeightEntry/Description": "Body line spacing",
"NovelSettingsMaxWidthEntry/Header": "Page width",
"NovelSettingsMaxWidthEntry/Description": "Maximum page width",
"MacroCopiedToClipboard": "Macros copied to the clipboard",
"ExtMacroTooltip": "File extension, like .jpg, .png, etc. Note that the macro already includes the dot \u0027.\u0027 in front of the extension. This macro MUST be used on the file name",
"IdMacroTooltip": "Work ID",
"TitleMacroTooltip": "Work title",
"ArtistIdMacroTooltip": "Author ID",
"ArtistNameMacroTooltip": "Author name",
"PublishYearMacroTooltip": "Year of publication",
"PublishMonthMacroTooltip": "Month of publication",
"PublishDayMacroTooltip": "Day of publication",
"IfMangaMacroTooltip": "This marco will be replaced by its argument if it\u0027s a manga",
"IfR18MacroTooltip": "This marco will be replaced by its argument in the case of restricted work (R18 or R18G)",
"IfR18GMacroTooltip": "This marco will be replaced by its argument if it is a R18G work",
"IfAiMacroTooltip": "This marco will be replaced by its argument in the case of AI-generated work",
"IfIllustMacroTooltip": "This marco will be replaced by its argument if it\u0027s an illustration",
"IfNovelMacroTooltip": "This marco will be replaced by its argument if it\u0027s a novel",
"IfGifMacroTooltip": "This marco will be replaced by its argument if it\u0027s an animated image",
"MangaIndexMacroTooltip": "This marco will be replaced by the index of the current image in the manga. This macro MUST be used with the @{if_manga=} macro, and MUST be used on the file name"
}

View File

@ -3,9 +3,9 @@
"ContentDialog/PrimaryButtonText": "Quitter l'application",
"ContentDialog/CloseButtonText": "Continuer à utiliser",
"MainTextBlock/Text": "Il est détecté que l'application n'ait pas été terminé correctement, vous pouvez essayer de (redémarrage nécessaire):",
"ClearConfig/Content": "Remise à zéro de configuration de l'application",
"ClearContext/Content": "Remise à zéro de session",
"OpenLocalFolder/Content": "Ouvrir le répertoire local",
"OpenRoamingFolder/Content": "Ouvrir le répertoire synchronisé",
"OpenLogFolder/Content": "Ouvrir le répertoire des logs"
"ClearConfig/Text": "Remise à zéro de configuration de l'application",
"ClearContext/Text": "Remise à zéro de session",
"OpenLocalFolder/Text": "Ouvrir le répertoire local",
"OpenRoamingFolder/Text": "Ouvrir le répertoire synchronisé",
"OpenLogFolder/Text": "Ouvrir le répertoire des logs"
}

View File

@ -1,35 +1,40 @@
{
"ErrorWhileLoggingInTitle": "Erreur d\u0027authentification",
"ErrorWhileLogginInContentFormatted": "L\u0027application va quitter. Voici le message d\u0027erreur:\n{0}",
"LoginPhaseCheckingCertificateInstallation": "Vérification de certificat en cours...",
"LoginPhaseCheckingWebView2Installation": "Vérification de WebView2 en cours...",
"LoginPhaseInstallingCertificate": "Installation de certificat, veuillez confirmer dans le popup...",
"LoginPhaseRefreshing": "Rafraichir la session actuelle en cours...",
"LoginPhaseSuccessNavigating": "Authentification avec succès, navigation vers la page d\u0027accueil en cours",
"LoginPhaseWaitingForUserInput": "Entrée de l\u0027utilisateur en attente",
"SubmitWithNewAccountButton/Text": "Authentification avec un autre compte",
"SubmitButton/Content": "S\u0027authentifier",
"RefreshTokenButton/Content": "Authentification avec token unique",
"BrowserButton/Content": "Authentification avec Chrome/Edge (beta\uD83E\uDDEA)",
"WebViewButton/Content": "Authentification avec WebView",
"RefreshTokenBox/PlaceholderText": "Rafraichir le token",
"UserNameBox/PlaceholderText": "Addresse email ou ID pixiv",
"PasswordBox/PlaceholderText": "Mot de passe",
"DisableDomainFrontingToggleSwitch/Header": "Domain fronting",
"DisableDomainFrontingToggleSwitch/OnContent": "Activer",
"DisableDomainFrontingToggleSwitch/OffContent": "Désactiver",
"RefreshingSessionFailedContent": "Veuillez re-authentifier\nVeuillez contacter les développeurs en cas de problème récurrent",
"RefreshingSessionFailedTitle": "Rafraichissement de session échoué",
"FetchingSessionFailedContent": "Veuillez redémarrer l\u0027application\n Veuillez contacter les développeurs en cas de problème récurrent",
"FetchingSessionFailedTitle": "Récupération de session échouée",
"RootCertificateInstallationRequiredContent": "Une installation de certificat est nécessaire pour l\u0027authentification. Ce certificat sera utilisé exclusivement pour le fonctionnement de Pixeval et ne sera jamais communiqué en dehors de votre appareil. Si vous confirmer, vous acceptez de l\u0027installer. Vous ne pouvez pas utilisez Pixeval sans l\u0027installation de certificat.",
"RootCertificateInstallationRequiredTitle": "Aucun certificat détecté",
"WebView2InstallationRequiredContent": "L\u0027utilisation de cette méthode d\u0027authentification nécessite une installation de WebView2, si vous confirmer, le téléchargement de Runtime WebView2 va commencer. Veuillez ensuite l\u0027installer via l\u0027exécution de l\u0027EXE puis relancer l\u0027application.",
"WebViewLoginTip/Title": "Attention",
"WebViewLoginTip/Message": "Cette méthode nécessite une installation de WebView2",
"BrowserLoginTip/Title": "Attention",
"BrowserLoginTip/Message": "Il se peut que le reCAPTCHA ne soit pas affiché",
"WebView2InstallationRequiredTitle": "Il semble que vous n\u0027avez pas d\u0027installation de Runtime WebView2",
"WebViewHelp/ToolTipService/ToolTip": "L\u0027utilisation de cette méthode d\u0027authentification nécessite une installation de WebView2.\n Votre compte et mot de passe seront enregistrés localement dans Pixeval.\n\n L\u0027authentification s\u0027effectuera dès que vous cliquez sur le bouton, avec l\u0027aide de WebView. Vous n\u0027avez rien à faire. Mais il est possible que le script n\u0027arrive pas à exécuter donc vous devrez rentrer des codes de vérification par exemple. \n\n Si vous n\u0027avez pas de confiance, vous pouvez toujours les laisser vide et cliquez le bouton d\u0027authentification manuellement, puis entrez vos crédentiels dans le WebView de Pixiv sécurisé. \n\n Domain fronting: Vous utiliserez le proxy de votre navigateur par défaut si vous le déactivez. Si vous n\u0027arrivez pas à se connecter sur Pixiv, peut être vous ne devez pas le désactiver. ",
"BrowserHelp/ToolTipService/ToolTip": "Cliquez le bouton d\u0027Authentification pour s\u0027authentifier avec des navigateurs externs (Chrome/Edge/...), si vous n\u0027arrivez pas à vous authentifier, vous pouvez utiliser d\u0027autres manières de authentification. \n\n Domain fronting: Vous utiliserez le proxy de votre navigateur par défaut si vous le déactivez. Si vous n\u0027arrivez pas à se connecter sur Pixiv, peut être vous ne devez pas le désactiver. "
}
"ErrorWhileLoggingInTitle": "Erreur d\u0027authentification",
"ErrorWhileLogginInContentFormatted": "L\u0027application va quitter. Voici le message d\u0027erreur:\n{0}",
"LoginPhaseCheckingCertificateInstallation": "Vérification de certificat en cours...",
"LoginPhaseCheckingWebView2Installation": "Vérification de WebView2 en cours...",
"LoginPhaseInstallingCertificate": "Installation de certificat, veuillez confirmer dans le popup...",
"LoginPhaseRefreshing": "Rafraichir la session actuelle en cours...",
"LoginPhaseSuccessNavigating": "Authentification avec succès, navigation vers la page d\u0027accueil en cours",
"LoginPhaseWaitingForUserInput": "Entrée de l\u0027utilisateur en attente",
"SubmitWithNewAccountButton/Text": "Authentification avec un autre compte",
"SubmitButton/Content": "S\u0027authentifier",
"RefreshTokenButton/Content": "Authentification avec token unique",
"BrowserButton/Content": "Authentification avec Chrome/Edge (beta\uD83E\uDDEA)",
"WebViewButton/Content": "Authentification avec WebView",
"RefreshTokenBox/PlaceholderText": "Rafraichir le token",
"UserNameBox/PlaceholderText": "Addresse email ou ID pixiv",
"PasswordBox/PlaceholderText": "Mot de passe",
"DisableDomainFrontingToggleSwitch/Header": "Domain fronting",
"DisableDomainFrontingToggleSwitch/OnContent": "Activer",
"DisableDomainFrontingToggleSwitch/OffContent": "Désactiver",
"RefreshingSessionFailedContent": "Veuillez re-authentifier\nVeuillez contacter les développeurs en cas de problème récurrent",
"RefreshingSessionFailedTitle": "Rafraichissement de session échoué",
"FetchingSessionFailedContent": "Veuillez redémarrer l\u0027application\n Veuillez contacter les développeurs en cas de problème récurrent",
"FetchingSessionFailedTitle": "Récupération de session échouée",
"RootCertificateInstallationRequiredSecondaryButtonText": "Utiliser le cert. de Pixeval",
"RootCertificateInstallationRequiredPrimaryButtonText": "Utiliser mon cert.",
"CertificateRequiredDialogContent/Text": "Une installation de certificat est nécessaire pour l'authentification. Ce certificat sera utilisé exclusivement pour le fonctionnement de Pixeval et ne sera jamais communiqué en dehors de votre appareil. Si vous confirmez en choisissant \"Utiliser le cert. de Pixeval\", vous acceptez de l'installer.\nVous pouvez également choisir votre propre certificat en saisissant sa localisation et son mot de passe en sélectionnant l'option \"Utiliser mon cert.\". Si votre certificat n'est pas valide, une erreur de connexion surviendra.",
"CertificateRequiredDialogPath/PlaceholderText": "localisation du certificat",
"CertificateRequiredDialogPassword/PlaceholderText": "mot de passe associé (à ce certificat)",
"CertificateRequiredDialogInvalidInfoBar/Title": "le certificat n'existe pas (dans cette addresse) ou mot de passe incorrect",
"RootCertificateInstallationRequiredTitle": "Aucun certificat détecté",
"WebView2InstallationRequiredContent": "L\u0027utilisation de cette méthode d\u0027authentification nécessite une installation de WebView2, si vous confirmer, le téléchargement de Runtime WebView2 va commencer. Veuillez ensuite l\u0027installer via l\u0027exécution de l\u0027EXE puis relancer l\u0027application.",
"WebViewLoginTip/Title": "Attention",
"WebViewLoginTip/Message": "Cette méthode nécessite une installation de WebView2",
"BrowserLoginTip/Title": "Attention",
"BrowserLoginTip/Message": "Il se peut que le reCAPTCHA ne soit pas affiché",
"WebView2InstallationRequiredTitle": "Il semble que vous n\u0027avez pas d\u0027installation de Runtime WebView2",
"WebViewHelp/ToolTipService/ToolTip": "L\u0027utilisation de cette méthode d\u0027authentification nécessite une installation de WebView2.\n Votre compte et mot de passe seront enregistrés localement dans Pixeval.\n\n L\u0027authentification s\u0027effectuera dès que vous cliquez sur le bouton, avec l\u0027aide de WebView. Vous n\u0027avez rien à faire. Mais il est possible que le script n\u0027arrive pas à exécuter donc vous devrez rentrer des codes de vérification par exemple. \n\n Si vous n\u0027avez pas de confiance, vous pouvez toujours les laisser vide et cliquez le bouton d\u0027authentification manuellement, puis entrez vos crédentiels dans le WebView de Pixiv sécurisé. \n\n Domain fronting: Vous utiliserez le proxy de votre navigateur par défaut si vous le déactivez. Si vous n\u0027arrivez pas à se connecter sur Pixiv, peut être vous ne devez pas le désactiver. ",
"BrowserHelp/ToolTipService/ToolTip": "Cliquez le bouton d\u0027Authentification pour s\u0027authentifier avec des navigateurs externs (Chrome/Edge/...), si vous n\u0027arrivez pas à vous authentifier, vous pouvez utiliser d\u0027autres manières de authentification. \n\n Domain fronting: Vous utiliserez le proxy de votre navigateur par défaut si vous le déactivez. Si vous n\u0027arrivez pas à se connecter sur Pixiv, peut être vous ne devez pas le désactiver. "
}

View File

@ -146,7 +146,7 @@
"SessionSettingsGroup/Text": "Configurations de session",
"SignOutConfirmationDialogContent": "Cette opération est irréversible",
"SignOutConfirmationDialogTitle": "Etes-vous sûr de vous déconnecter?",
"SignOutEntry/Description": "Quitter l\u0027application. Vos caches et toutes les informations personnelles y compris synchronisation entre appareils seront supprimées",
"SignOutEntry/Description": "Me déconnecter et quitter l\u0027application",
"SignOutEntry/Header": "Déconnecter",
"SpotlightSearchPageLimitNumberBox/PlaceholderText": "Limitation de nombre de pages des spotlight parmi [1, 100]",
"TargetAPIPlatformEntry/Description": "Spécifiez quelle plateforme d\u0027API utilisée pour envoyer les requêtes. Si vous n\u0027en connaissez pas, veuillez à la laisser vide",
@ -185,7 +185,7 @@
"NovelSettingsMaxWidthEntry/Header": "Largeur de page",
"NovelSettingsMaxWidthEntry/Description": "Largeur maximale de page",
"MacroCopiedToClipboard": "Le macro a été copié sur le clipboard",
"ExtMacroTooltip": "Extensions des fichiers, e.g. .jpg, .png, etc. A noter que ce macro contient déjà les points devant les suffixes \".\", ce macro doit uniquement être utilisé dans les noms de fichier",
"ExtMacroTooltip": "Extensions des fichiers, e.g. .jpg, .png, etc. A noter que ce macro contient déjà les points devant les suffixes \u0022.\u0022, ce macro doit uniquement être utilisé dans les noms de fichier",
"IdMacroTooltip": "ID d\u0027art",
"TitleMacroTooltip": "Titre d\u0027art",
"ArtistIdMacroTooltip": "ID d\u0027auteur",
@ -200,5 +200,5 @@
"IfIllustMacroTooltip": "Ce marco sera remplacé par son argument s\u0027il s\u0027agit d\u0027une illustration",
"IfNovelMacroTooltip": "Ce marco sera remplacé par son argument s\u0027il s\u0027agit d\u0027un roman",
"IfGifMacroTooltip": "Ce marco sera remplacé par son argument s\u0027il s\u0027agit d\u0027une image animée",
"MangaIndexMacroTooltip": "Ce macro sera remplacé par l'indice de l'illustration courante dans la collection (n-ième illust.). Il faut l'utiliser avec le macro '@{if_manga=} et sur les noms de fichier"
}
"MangaIndexMacroTooltip": "Ce macro sera remplacé par l\u0027indice de l\u0027illustration courante dans la collection (n-ième illust.). Il faut l\u0027utiliser avec le macro \u0027@{if_manga=} et sur les noms de fichier"
}

View File

@ -1,20 +1,19 @@
{
"ErrorWhileLoggingInTitle": "Ошибка входа в систему",
"ErrorWhileLogginInContentFormatted": "Приложение будет закрыто, вот информация об ошибке:\n{0}",
"LoginPhaseCheckingCertificateInstallation": "Проверка установки сертификата...",
"LoginPhaseCheckingWebView2Installation": "Проверка установки WebView2...",
"LoginPhaseInstallingCertificate": "Установка сертификата, пожалуйста, подтвердите в открывшемся диалоговом окне...",
"LoginPhaseRefreshing": "Обновление сессии...",
"LoginPhaseSuccessNavigating": "Успешный вход, переход на главную страницу",
"LoginPhaseWaitingForUserInput": "Ожидание ввода пользователя",
"SubmitButton/Content": "Войти",
"UserNameBox/PlaceholderText": "Email или pixiv ID",
"PasswordBox/PlaceholderText": "Пароль",
"RefreshingSessionFailedTitle": "Не удалось обновить сессию",
"FetchingSessionFailedContent": "Перезапустите приложение\nЕсли проблема повторяется, обратитесь к разработчику",
"FetchingSessionFailedTitle": "Не удалось получить сессию",
"RootCertificateInstallationRequiredContent": "Для нормального входа необходимо установить сертификат. Приватный ключ сертификата не будет распространяться. Выбором \u0027Подтвердить\u0027 вы соглашаетесь с установкой сертификата. Пожалуйста, подтвердите/нажмите OK в следующем диалоговом окне. Если вы откажетесь, использование приложения будет невозможно.",
"RootCertificateInstallationRequiredTitle": "Требуется установка корневого сертификата",
"SubmitWithNewAccountButton/Text": "Войти без аккаунта",
"RefreshingSessionFailedContent": "Пожалуйста, войдите снова"
}
"ErrorWhileLoggingInTitle": "Ошибка входа в систему",
"ErrorWhileLogginInContentFormatted": "Приложение будет закрыто, вот информация об ошибке:\n{0}",
"LoginPhaseCheckingCertificateInstallation": "Проверка установки сертификата...",
"LoginPhaseCheckingWebView2Installation": "Проверка установки WebView2...",
"LoginPhaseInstallingCertificate": "Установка сертификата, пожалуйста, подтвердите в открывшемся диалоговом окне...",
"LoginPhaseRefreshing": "Обновление сессии...",
"LoginPhaseSuccessNavigating": "Успешный вход, переход на главную страницу",
"LoginPhaseWaitingForUserInput": "Ожидание ввода пользователя",
"SubmitButton/Content": "Войти",
"UserNameBox/PlaceholderText": "Email или pixiv ID",
"PasswordBox/PlaceholderText": "Пароль",
"RefreshingSessionFailedTitle": "Не удалось обновить сессию",
"FetchingSessionFailedContent": "Перезапустите приложение\nЕсли проблема повторяется, обратитесь к разработчику",
"FetchingSessionFailedTitle": "Не удалось получить сессию",
"RootCertificateInstallationRequiredTitle": "Требуется установка корневого сертификата",
"SubmitWithNewAccountButton/Text": "Войти без аккаунта",
"RefreshingSessionFailedContent": "Пожалуйста, войдите снова"
}

View File

@ -1,162 +1,161 @@
{
"AppDescriptionTextBlock/Text": "Pixeval — это сторонний клиент Pixiv, разработанный на базе WinUI 3. Он обеспечивает поддержку большинства функций Pixiv и предлагает ряд дополнительных возможностей для улучшения пользовательского опыта, включая локальное избранное и возможность просмотра без прокси в Китае и России.\n\nБольше информации о Pixeval можно найти по ссылкам ниже.",
"AppFontFamilyComboBox/PlaceholderText": "Выбор шрифта",
"AppFontFamilyEntry/Header": "Настройки шрифта (вступают в силу после перезапуска)",
"AppLanguageEntry/Header": "Настройки языка (вступают в силу после перезапуска)",
"OpenLanguageSettingsHyperlinkButton/Content": "Открыть настройки языка Windows",
"AppLanguageEntryComboBox/PlaceholderText": "Выбор языка",
"ApplicationSettingsGroup/Text": "Настройки приложения",
"BackdropEntry/Header": "Фоновая текстура приложения",
"BrowseHistoriesCleared": "История просмотров очищена",
"BrowsingExperienceSettingsGroup/Text": "Настройки просмотра",
"CheckingForUpdate": "Проверка обновлений",
"DownloadingUpdate": "Загрузка обновления",
"Unzipping": "Распаковка",
"IsUpToDate": "У вас последняя версия",
"IsInsider": "Вы используете тестовую версию",
"MajorUpdateAvailable": "Доступно крупное обновление",
"MinorUpdateAvailable": "Доступно минорное обновление",
"BuildUpdateAvailable": "Доступно обновление сборки",
"UnknownUpdateState": "Неизвестное состояние обновления",
"UpdateApp": "Обновить приложение",
"LanguageSystemDefault": "Системный язык по умолчанию",
"DownloadedAndWaitingToInstall": "Версия {0} загружена, установить сейчас? Вы также можете установить обновление вручную из временной папки",
"InstallCanceled": "Установка отменена",
"UpdateFailed": "Обновление не удалось",
"UpdateFailedInTempFolder": "Обновление не удалось, вы можете проверить установочный пакет во временной папке",
"DownloadPathMacroEntry/Header": "Путь загрузки по умолчанию",
"DownloadPathMacroTextBox/PlaceholderText": "Макрос пути загрузки",
"DefaultSearchSortOptionEntry/Header": "Стандартная сортировка",
"DefaultSearchTagMatchOptionEntry/Header": "Стандартное совпадение по ключевым словам",
"DefaultSelectedTabEntry/Description": "При запуске приложения будет выбрана вкладка по умолчанию в боковом меню главной страницы",
"DefaultSelectedTabEntry/Header": "Вкладка по умолчанию",
"DeleteBrowseHistoriesButton/Content": "Очистить историю",
"DeleteBrowseHistoriesEntry/Description": "Эта кнопка очистит всю историю просмотра",
"DeleteBrowseHistoriesEntry/Header": "Очистить историю просмотра",
"DeleteDownloadHistoriesButton/Content": "Очистить историю",
"DeleteDownloadHistoriesEntry/Description": "Эта кнопка очистит всю историю загрузок",
"DeleteDownloadHistoriesEntry/Header": "Очистить историю загрузок",
"DeleteSearchHistoriesButton/Content": "Очистить историю",
"DeleteSearchHistoriesEntry/Description": "Эта кнопка очистит всю историю поиска",
"DeleteSearchHistoriesEntry/Header": "Очистить историю поиска",
"DonateDeveloperHyperlinkButton/Content": "Поддержать разработчика",
"DownloadHistoriesCleared": "История загрузок очищена",
"DownloadMacroInvalidInfoBar/Title": "Ошибка разрешения макроса",
"DownloadMacroInvalidInfoBarInputCannotBeBlank": "Поле ввода не может быть пустым",
"DownloadMacroInvalidInfoBarMacroInvalidFormatted": "{0}, пожалуйста, исправьте и повторите ввод",
"DownloadSettingsGroup/Text": "Настройки загрузки",
"DownloadUpdateAutomaticallyEntry/Description": "За исключением сетей с оплатой за трафик",
"DownloadUpdateAutomaticallyEntry/Header": "Автоматическая загрузка обновлений",
"FeedbackByEmailHyperlinkButton/Content": "Обратная связь с разработчиком по электронной почте",
"ItemsViewLayoutTypeEntry/Description": "Выбор между сеткой, где все изображения одинакового размера, и потоковым макетом, где выравниваются только края строк",
"ItemsViewLayoutTypeEntry/Header": "Правила выравнивания миниатюр",
"ImageMirrorServerEntry/Description": "Имя хоста зеркала для загрузки изображений, оставьте пустым, если не уверены в его назначении",
"ImageMirrorServerEntry/Header": "Имя хоста зеркала изображений",
"ImageMirrorServerTextBox/PlaceholderText": "Имя хоста",
"JoinFeedbackGroupHyperlinkButton/Content": "Присоединиться к группе обратной связи",
"LastCheckedPrefix": "Последняя проверка: ",
"MaxDownloadConcurrencyLevelEntry/Description": "Этот параметр ограничивает количество одновременных задач на загрузку. Максимум — количество ядер вашего процессора. Пожалуйста, настройте с умом, так как избыточное количество может привести к зависанию системы",
"MaxDownloadConcurrencyLevelEntry/Header": "Максимальное количество одновременных загрузок",
"MaximumBrowseHistoryRecordsEntry/Description": "Если количество записей истории просмотров превысит этот предел, старые записи будут удалены",
"MaximumBrowseHistoryRecordsEntry/Header": "Ограничение истории просмотров",
"MaximumBrowseHistoryRecordsNumerBox/PlaceholderText": "Ограничение количества записей [10, 200]",
"MaximumDownloadHistoryRecordsEntry/Description": "Если количество записей истории загрузок превысит этот предел, старые записи будут удалены",
"MaximumDownloadHistoryRecordsEntry/Header": "Ограничение истории загрузок",
"MaximumDownloadHistoryRecordsNumberBox/PlaceholderText": "Ограничение количества записей [10, 200]",
"MaximumSearchHistoryRecordsEntry/Description": "Если количество записей истории поиска превысит этот предел, старые записи будут удалены",
"MaximumSearchHistoryRecordsEntry/Header": "Ограничение истории поиска",
"MaximumSearchHistoryRecordsNumberBox/PlaceholderText": "Ограничение количества записей [10, 50]",
"MaximumSuggestionBoxSearchHistoryEntry/Description": "Если количество сохраненных записей истории поиска превысит это число, в поле поиска на главной странице будут отображаться только последние записи (отсортированные по дате)",
"MaximumSuggestionBoxSearchHistoryEntry/Header": "Ограничение на количество записей в истории поиска",
"MiscSettingsGroup/Text": "Разное",
"OpenFontSettingsHyperlinkButton/Content": "Открыть настройки шрифтов Windows",
"OverwriteDownloadedFileEntry/Description": "Если этот параметр включен, при загрузке файлы будут перезаписываться, если они уже существуют",
"OverwriteDownloadedFileEntry/Header": "Перезаписывать скачанные файлы",
"PerformSignOutButton/Content": "Выход из системы",
"ReleaseNotesHyperlinkButton/Content": "Примечания к выпуску",
"ReportBugHyperlinkButton/Content": "Сообщить о проблеме на GitHub",
"CheckForUpdatesButton/Content": "Проверить обновления",
"GitHubCheckForUpdatesEntry/Header": "Проверка обновлений на GitHub",
"BugReportEntry/Header": "Сообщение о проблеме с программой",
"BugReportEntry/Description": "Отчеты о ошибках в программе или предложения по новым функциям (при сообщении об ошибках пожалуйста прилагайте соответствующие файлы журналов)",
"BugReportChannelsEntry/Header": "Каналы для сообщений об ошибках",
"BugReportChannelsEntry/Description": "Вы можете сообщить о проблеме через следующие каналы",
"GitHubBugReportEntry/ToolTipService/ToolTip": "Сообщить о проблеме на GitHub",
"EMailBugReportEntry/ToolTipService/ToolTip": "Сообщить о проблеме по электронной почте",
"QQBugReportEntry/ToolTipService/ToolTip": "Сообщить о проблеме в группе QQ",
"OpenLogEntry/Header": "Открыть папку с журналами",
"OpenLogEntry/Description": "При сообщении о проблеме с программой прилагайте соответствующие файлы журналов из этой папки",
"OpenTempEntry/Header": "Открыть временную папку",
"OpenTempEntry/Description": "Здесь хранятся временные файлы, которые удаляются при каждом запуске программы",
"OpenLocalEntry/Header": "Открыть локальную папку",
"OpenLocalEntry/Description": "Здесь хранятся важные конфигурационные файлы, пожалуйста, не изменяйте файлы в этой папке",
"OpenRoamingEntry/Header": "Открыть папку данных",
"OpenRoamingEntry/Description": "Здесь хранятся важные конфигурационные файлы, пожалуйста, не изменяйте файлы в этой папке",
"ResetDefaultSettingsButton/Content": "Сбросить настройки",
"ResetDefaultSettingsEntry/Description": "Нажатие этой кнопки сбросит все настройки к значению по умолчанию. Это действие необратимо",
"ResetDefaultSettingsEntry/Header": "Сброс настроек по умолчанию",
"ResetSettingConfirmationDialogContent": "Это действие необратимо",
"ResetSettingConfirmationDialogTitle": "Вы уверены, что хотите сбросить все настройки?",
"ReverseSearchApiKeyEntry/Header": "API ключ SauceNAO",
"ReverseSearchApiKeyEntryDescriptionHyperlinkButton/Content": "Получите API ключ SauceNAO здесь (требуется регистрация/вход)",
"ReverseSearchApiKeyTextBox/PlaceholderText": "Введите API ключ",
"ReverseSearchResultSimilarityThresholdEntry/Description": "Порог сходства результатов обратного поиска. Результаты ниже этого порога будут игнорироваться. Чем выше значение, тем больше сходство между результатами и исходным изображением",
"ReverseSearchResultSimilarityThresholdEntry/Header": "Порог сходства обратного поиска",
"SearchDurationEntry/Description": "Результаты поиска будут ограничены указанным временным диапазоном. Если включена опция «Использовать более точные ограничения диапазона поиска», этот параметр будет игнорироваться",
"SearchDurationEntry/Header": "Ограничения временного диапазона поиска",
"SearchEndDateEntry/Description": "Результаты поиска будут включать только произведения, опубликованные до этой даты. Значение этого параметра должно быть на один день больше, чем значение даты начала",
"SearchEndDateEntry/Header": "Установить конечную дату поиска",
"SearchHistoriesCleared": "История поиска очищена",
"SearchSettingsGroup/Text": "Настройки поиска",
"SearchStartCalendarDatePicker/PlaceholderText": "Начальная дата",
"SearchStartDateEntry/Description": "Результаты поиска будут включать только произведения, опубликованные после этой даты",
"SearchStartDateEntry/Header": "Установить начальную дату поиска",
"SessionSettingsGroup/Text": "Настройки сессии",
"SignOutConfirmationDialogContent": "Это действие необратимо",
"SignOutConfirmationDialogTitle": "Вы уверены, что хотите выйти?",
"SignOutEntry/Description": "Выход из системы удалит все ваши кэшированные и личные данные, включая синхронизацию между устройствами, и закроет приложение",
"SignOutEntry/Header": "Выход из системы",
"SpotlightSearchPageLimitNumberBox/PlaceholderText": "Ограничение на количество страниц [1, 100]",
"TargetAPIPlatformEntry/Description": "Указать, какой API платформы использовать для запросов. Если не уверены, оставьте значение по умолчанию",
"TargetAPIPlatformEntry/Header": "Целевая API платформа",
"ThemeEntry/Header": "Тема приложения",
"ThemeEntryDescriptionHyperlinkButton/Content": "Открыть настройки темы Windows",
"ThumbnailDirectionEntry/Description": "Направление страницы при просмотре изображений",
"ThumbnailDirectionEntry/Header": "Направление миниатюр",
"TitleTextBlock/Text": "Настройки Pixeval",
"UseFileCacheEntry/Description": "Включение этого параметра снизит потребление сетевого трафика и улучшит просмотр, но увеличит нагрузку на ЦП и диск",
"UseFileCacheEntry/Header": "Использовать файловый кэш",
"UsePreciseRangeForSearchEntry/Description": "Использовать более точные ограничения для диапазона поиска на основе конкретных дат. Если этот параметр включен, опция «Ограничения временного диапазона поиска» будет игнорироваться",
"UsePreciseRangeForSearchEntry/Header": "Использовать более точные ограничения для диапазона поиска",
"VersionSettingsGroup/Text": "Версия",
"ViewPixevalWebsiteHyperlinkButton/Content": "Веб-сайт",
"ArtistIdMacroTooltip": "ID автора",
"ArtistNameMacroTooltip": "Имя автора",
"DefaultSearchSortOptionEntry/Description": "Стандартная стратегия сортировки при поиске произведений",
"DefaultSearchTagMatchOptionEntry/Description": "Как осуществляется поиск иллюстраций по ключевым словам",
"IllustrationOptionEntry/Header": "Иллюстрации",
"NovelOptionEntry/Header": "Романы",
"PixivNameResolverHeader/Text": "Резолвер имен",
"PixivNameResolverDescription/Text": "После прямого подключения к домену, доменное имя будет разрешено к следующим IP-адресам",
"DeleteFileCacheEntry/Description": "Эта кнопка очищает все файловые кэши",
"DeleteFileCacheEntry/Header": "Очистить файловый кэш",
"FileCacheCleared": "Все файловые кэши были удалены",
"DownloadWhenBookmarkedEntry/Description": "После добавления произведения в избранное, оно будет автоматически загружено",
"DownloadWhenBookmarkedEntry/Header": "Загрузка при добавлении в избранное",
"MacroCopiedToClipboard": "Макрос скопирован в буфер обмена",
"NovelFontFamilyComboBox/PlaceholderText": "Выберите шрифт",
"NovelFontWeightComboBox/PlaceholderText": "Выберите толщину шрифта",
"NovelSettingsFontFamilyEntry/Header": "Шрифт",
"NovelSettingsFontColorEntry/Header": "Цвет шрифта",
"NovelSettingsFontColorEntry/Description": "Цвет основного текста",
"NovelSettingsBackgroundEntry/Header": "Цвет фона",
"NovelSettingsBackgroundEntry/Description": "Цвет фона страницы",
"NovelSettingsFontWeightEntry/Header": "Толщина шрифта",
"NovelSettingsFontWeightEntry/Description": "Толщина основного текста",
"NovelSettingsFontSizeEntry/Header": "Размер шрифта",
"NovelSettingsFontSizeEntry/Description": "Размер основного текста",
"NovelSettingsLineHeightEntry/Header": "Высота строки",
"NovelSettingsLineHeightEntry/Description": "Межстрочный интервал основного текста",
"NovelSettingsMaxWidthEntry/Header": "Максимальная ширина страницы",
"NovelSettingsMaxWidthEntry/Description": "Максимальная ширина страницы"
}
"AppDescriptionTextBlock/Text": "Pixeval — это сторонний клиент Pixiv, разработанный на базе WinUI 3. Он обеспечивает поддержку большинства функций Pixiv и предлагает ряд дополнительных возможностей для улучшения пользовательского опыта, включая локальное избранное и возможность просмотра без прокси в Китае и России.\n\nБольше информации о Pixeval можно найти по ссылкам ниже.",
"AppFontFamilyComboBox/PlaceholderText": "Выбор шрифта",
"AppFontFamilyEntry/Header": "Настройки шрифта (вступают в силу после перезапуска)",
"AppLanguageEntry/Header": "Настройки языка (вступают в силу после перезапуска)",
"OpenLanguageSettingsHyperlinkButton/Content": "Открыть настройки языка Windows",
"AppLanguageEntryComboBox/PlaceholderText": "Выбор языка",
"ApplicationSettingsGroup/Text": "Настройки приложения",
"BackdropEntry/Header": "Фоновая текстура приложения",
"BrowseHistoriesCleared": "История просмотров очищена",
"BrowsingExperienceSettingsGroup/Text": "Настройки просмотра",
"CheckingForUpdate": "Проверка обновлений",
"DownloadingUpdate": "Загрузка обновления",
"Unzipping": "Распаковка",
"IsUpToDate": "У вас последняя версия",
"IsInsider": "Вы используете тестовую версию",
"MajorUpdateAvailable": "Доступно крупное обновление",
"MinorUpdateAvailable": "Доступно минорное обновление",
"BuildUpdateAvailable": "Доступно обновление сборки",
"UnknownUpdateState": "Неизвестное состояние обновления",
"UpdateApp": "Обновить приложение",
"LanguageSystemDefault": "Системный язык по умолчанию",
"DownloadedAndWaitingToInstall": "Версия {0} загружена, установить сейчас? Вы также можете установить обновление вручную из временной папки",
"InstallCanceled": "Установка отменена",
"UpdateFailed": "Обновление не удалось",
"UpdateFailedInTempFolder": "Обновление не удалось, вы можете проверить установочный пакет во временной папке",
"DownloadPathMacroEntry/Header": "Путь загрузки по умолчанию",
"DownloadPathMacroTextBox/PlaceholderText": "Макрос пути загрузки",
"DefaultSearchSortOptionEntry/Header": "Стандартная сортировка",
"DefaultSearchTagMatchOptionEntry/Header": "Стандартное совпадение по ключевым словам",
"DefaultSelectedTabEntry/Description": "При запуске приложения будет выбрана вкладка по умолчанию в боковом меню главной страницы",
"DefaultSelectedTabEntry/Header": "Вкладка по умолчанию",
"DeleteBrowseHistoriesButton/Content": "Очистить историю",
"DeleteBrowseHistoriesEntry/Description": "Эта кнопка очистит всю историю просмотра",
"DeleteBrowseHistoriesEntry/Header": "Очистить историю просмотра",
"DeleteDownloadHistoriesButton/Content": "Очистить историю",
"DeleteDownloadHistoriesEntry/Description": "Эта кнопка очистит всю историю загрузок",
"DeleteDownloadHistoriesEntry/Header": "Очистить историю загрузок",
"DeleteSearchHistoriesButton/Content": "Очистить историю",
"DeleteSearchHistoriesEntry/Description": "Эта кнопка очистит всю историю поиска",
"DeleteSearchHistoriesEntry/Header": "Очистить историю поиска",
"DonateDeveloperHyperlinkButton/Content": "Поддержать разработчика",
"DownloadHistoriesCleared": "История загрузок очищена",
"DownloadMacroInvalidInfoBar/Title": "Ошибка разрешения макроса",
"DownloadMacroInvalidInfoBarInputCannotBeBlank": "Поле ввода не может быть пустым",
"DownloadMacroInvalidInfoBarMacroInvalidFormatted": "{0}, пожалуйста, исправьте и повторите ввод",
"DownloadSettingsGroup/Text": "Настройки загрузки",
"DownloadUpdateAutomaticallyEntry/Description": "За исключением сетей с оплатой за трафик",
"DownloadUpdateAutomaticallyEntry/Header": "Автоматическая загрузка обновлений",
"FeedbackByEmailHyperlinkButton/Content": "Обратная связь с разработчиком по электронной почте",
"ItemsViewLayoutTypeEntry/Description": "Выбор между сеткой, где все изображения одинакового размера, и потоковым макетом, где выравниваются только края строк",
"ItemsViewLayoutTypeEntry/Header": "Правила выравнивания миниатюр",
"ImageMirrorServerEntry/Description": "Имя хоста зеркала для загрузки изображений, оставьте пустым, если не уверены в его назначении",
"ImageMirrorServerEntry/Header": "Имя хоста зеркала изображений",
"ImageMirrorServerTextBox/PlaceholderText": "Имя хоста",
"JoinFeedbackGroupHyperlinkButton/Content": "Присоединиться к группе обратной связи",
"LastCheckedPrefix": "Последняя проверка: ",
"MaxDownloadConcurrencyLevelEntry/Description": "Этот параметр ограничивает количество одновременных задач на загрузку. Максимум — количество ядер вашего процессора. Пожалуйста, настройте с умом, так как избыточное количество может привести к зависанию системы",
"MaxDownloadConcurrencyLevelEntry/Header": "Максимальное количество одновременных загрузок",
"MaximumBrowseHistoryRecordsEntry/Description": "Если количество записей истории просмотров превысит этот предел, старые записи будут удалены",
"MaximumBrowseHistoryRecordsEntry/Header": "Ограничение истории просмотров",
"MaximumBrowseHistoryRecordsNumerBox/PlaceholderText": "Ограничение количества записей [10, 200]",
"MaximumDownloadHistoryRecordsEntry/Description": "Если количество записей истории загрузок превысит этот предел, старые записи будут удалены",
"MaximumDownloadHistoryRecordsEntry/Header": "Ограничение истории загрузок",
"MaximumDownloadHistoryRecordsNumberBox/PlaceholderText": "Ограничение количества записей [10, 200]",
"MaximumSearchHistoryRecordsEntry/Description": "Если количество записей истории поиска превысит этот предел, старые записи будут удалены",
"MaximumSearchHistoryRecordsEntry/Header": "Ограничение истории поиска",
"MaximumSearchHistoryRecordsNumberBox/PlaceholderText": "Ограничение количества записей [10, 50]",
"MaximumSuggestionBoxSearchHistoryEntry/Description": "Если количество сохраненных записей истории поиска превысит это число, в поле поиска на главной странице будут отображаться только последние записи (отсортированные по дате)",
"MaximumSuggestionBoxSearchHistoryEntry/Header": "Ограничение на количество записей в истории поиска",
"MiscSettingsGroup/Text": "Разное",
"OpenFontSettingsHyperlinkButton/Content": "Открыть настройки шрифтов Windows",
"OverwriteDownloadedFileEntry/Description": "Если этот параметр включен, при загрузке файлы будут перезаписываться, если они уже существуют",
"OverwriteDownloadedFileEntry/Header": "Перезаписывать скачанные файлы",
"PerformSignOutButton/Content": "Выход из системы",
"ReleaseNotesHyperlinkButton/Content": "Примечания к выпуску",
"ReportBugHyperlinkButton/Content": "Сообщить о проблеме на GitHub",
"CheckForUpdatesButton/Content": "Проверить обновления",
"GitHubCheckForUpdatesEntry/Header": "Проверка обновлений на GitHub",
"BugReportEntry/Header": "Сообщение о проблеме с программой",
"BugReportEntry/Description": "Отчеты о ошибках в программе или предложения по новым функциям (при сообщении об ошибках пожалуйста прилагайте соответствующие файлы журналов)",
"BugReportChannelsEntry/Header": "Каналы для сообщений об ошибках",
"BugReportChannelsEntry/Description": "Вы можете сообщить о проблеме через следующие каналы",
"GitHubBugReportEntry/ToolTipService/ToolTip": "Сообщить о проблеме на GitHub",
"EMailBugReportEntry/ToolTipService/ToolTip": "Сообщить о проблеме по электронной почте",
"QQBugReportEntry/ToolTipService/ToolTip": "Сообщить о проблеме в группе QQ",
"OpenLogEntry/Header": "Открыть папку с журналами",
"OpenLogEntry/Description": "При сообщении о проблеме с программой прилагайте соответствующие файлы журналов из этой папки",
"OpenTempEntry/Header": "Открыть временную папку",
"OpenTempEntry/Description": "Здесь хранятся временные файлы, которые удаляются при каждом запуске программы",
"OpenLocalEntry/Header": "Открыть локальную папку",
"OpenLocalEntry/Description": "Здесь хранятся важные конфигурационные файлы, пожалуйста, не изменяйте файлы в этой папке",
"OpenRoamingEntry/Header": "Открыть папку данных",
"OpenRoamingEntry/Description": "Здесь хранятся важные конфигурационные файлы, пожалуйста, не изменяйте файлы в этой папке",
"ResetDefaultSettingsButton/Content": "Сбросить настройки",
"ResetDefaultSettingsEntry/Description": "Нажатие этой кнопки сбросит все настройки к значению по умолчанию. Это действие необратимо",
"ResetDefaultSettingsEntry/Header": "Сброс настроек по умолчанию",
"ResetSettingConfirmationDialogContent": "Это действие необратимо",
"ResetSettingConfirmationDialogTitle": "Вы уверены, что хотите сбросить все настройки?",
"ReverseSearchApiKeyEntry/Header": "API ключ SauceNAO",
"ReverseSearchApiKeyEntryDescriptionHyperlinkButton/Content": "Получите API ключ SauceNAO здесь (требуется регистрация/вход)",
"ReverseSearchApiKeyTextBox/PlaceholderText": "Введите API ключ",
"ReverseSearchResultSimilarityThresholdEntry/Description": "Порог сходства результатов обратного поиска. Результаты ниже этого порога будут игнорироваться. Чем выше значение, тем больше сходство между результатами и исходным изображением",
"ReverseSearchResultSimilarityThresholdEntry/Header": "Порог сходства обратного поиска",
"SearchDurationEntry/Description": "Результаты поиска будут ограничены указанным временным диапазоном. Если включена опция «Использовать более точные ограничения диапазона поиска», этот параметр будет игнорироваться",
"SearchDurationEntry/Header": "Ограничения временного диапазона поиска",
"SearchEndDateEntry/Description": "Результаты поиска будут включать только произведения, опубликованные до этой даты. Значение этого параметра должно быть на один день больше, чем значение даты начала",
"SearchEndDateEntry/Header": "Установить конечную дату поиска",
"SearchHistoriesCleared": "История поиска очищена",
"SearchSettingsGroup/Text": "Настройки поиска",
"SearchStartCalendarDatePicker/PlaceholderText": "Начальная дата",
"SearchStartDateEntry/Description": "Результаты поиска будут включать только произведения, опубликованные после этой даты",
"SearchStartDateEntry/Header": "Установить начальную дату поиска",
"SessionSettingsGroup/Text": "Настройки сессии",
"SignOutConfirmationDialogContent": "Это действие необратимо",
"SignOutConfirmationDialogTitle": "Вы уверены, что хотите выйти?",
"SignOutEntry/Header": "Выход из системы",
"SpotlightSearchPageLimitNumberBox/PlaceholderText": "Ограничение на количество страниц [1, 100]",
"TargetAPIPlatformEntry/Description": "Указать, какой API платформы использовать для запросов. Если не уверены, оставьте значение по умолчанию",
"TargetAPIPlatformEntry/Header": "Целевая API платформа",
"ThemeEntry/Header": "Тема приложения",
"ThemeEntryDescriptionHyperlinkButton/Content": "Открыть настройки темы Windows",
"ThumbnailDirectionEntry/Description": "Направление страницы при просмотре изображений",
"ThumbnailDirectionEntry/Header": "Направление миниатюр",
"TitleTextBlock/Text": "Настройки Pixeval",
"UseFileCacheEntry/Description": "Включение этого параметра снизит потребление сетевого трафика и улучшит просмотр, но увеличит нагрузку на ЦП и диск",
"UseFileCacheEntry/Header": "Использовать файловый кэш",
"UsePreciseRangeForSearchEntry/Description": "Использовать более точные ограничения для диапазона поиска на основе конкретных дат. Если этот параметр включен, опция «Ограничения временного диапазона поиска» будет игнорироваться",
"UsePreciseRangeForSearchEntry/Header": "Использовать более точные ограничения для диапазона поиска",
"VersionSettingsGroup/Text": "Версия",
"ViewPixevalWebsiteHyperlinkButton/Content": "Веб-сайт",
"ArtistIdMacroTooltip": "ID автора",
"ArtistNameMacroTooltip": "Имя автора",
"DefaultSearchSortOptionEntry/Description": "Стандартная стратегия сортировки при поиске произведений",
"DefaultSearchTagMatchOptionEntry/Description": "Как осуществляется поиск иллюстраций по ключевым словам",
"IllustrationOptionEntry/Header": "Иллюстрации",
"NovelOptionEntry/Header": "Романы",
"PixivNameResolverHeader/Text": "Резолвер имен",
"PixivNameResolverDescription/Text": "После прямого подключения к домену, доменное имя будет разрешено к следующим IP-адресам",
"DeleteFileCacheEntry/Description": "Эта кнопка очищает все файловые кэши",
"DeleteFileCacheEntry/Header": "Очистить файловый кэш",
"FileCacheCleared": "Все файловые кэши были удалены",
"DownloadWhenBookmarkedEntry/Description": "После добавления произведения в избранное, оно будет автоматически загружено",
"DownloadWhenBookmarkedEntry/Header": "Загрузка при добавлении в избранное",
"MacroCopiedToClipboard": "Макрос скопирован в буфер обмена",
"NovelFontFamilyComboBox/PlaceholderText": "Выберите шрифт",
"NovelFontWeightComboBox/PlaceholderText": "Выберите толщину шрифта",
"NovelSettingsFontFamilyEntry/Header": "Шрифт",
"NovelSettingsFontColorEntry/Header": "Цвет шрифта",
"NovelSettingsFontColorEntry/Description": "Цвет основного текста",
"NovelSettingsBackgroundEntry/Header": "Цвет фона",
"NovelSettingsBackgroundEntry/Description": "Цвет фона страницы",
"NovelSettingsFontWeightEntry/Header": "Толщина шрифта",
"NovelSettingsFontWeightEntry/Description": "Толщина основного текста",
"NovelSettingsFontSizeEntry/Header": "Размер шрифта",
"NovelSettingsFontSizeEntry/Description": "Размер основного текста",
"NovelSettingsLineHeightEntry/Header": "Высота строки",
"NovelSettingsLineHeightEntry/Description": "Межстрочный интервал основного текста",
"NovelSettingsMaxWidthEntry/Header": "Максимальная ширина страницы",
"NovelSettingsMaxWidthEntry/Description": "Максимальная ширина страницы"
}

View File

@ -3,9 +3,9 @@
"ContentDialog/PrimaryButtonText": "关闭应用",
"ContentDialog/CloseButtonText": "继续进入应用",
"MainTextBlock/Text": "检测到上次软件以没有正常方式退出,你可以(清除设置后需要重启):",
"ClearConfig/Content": "清空设置(软件设置)",
"ClearContext/Content": "清空登录状态",
"OpenLocalFolder/Content": "打开本地文件夹",
"OpenRoamingFolder/Content": "打开漫游文件夹",
"OpenLogFolder/Content": "打开日志文件夹"
"ClearConfig/Text": "清空设置(软件设置)",
"ClearContext/Text": "清空登录状态",
"OpenLocalFolder/Text": "打开本地文件夹",
"OpenRoamingFolder/Text": "打开漫游文件夹",
"OpenLogFolder/Text": "打开日志文件夹"
}

View File

@ -1,35 +1,40 @@
{
"ErrorWhileLoggingInTitle": "登录过程出现异常",
"ErrorWhileLogginInContentFormatted": "应用程序即将退出,以下是异常信息:\n{0}",
"LoginPhaseCheckingCertificateInstallation": "正在检查证书安装情况...",
"LoginPhaseCheckingWebView2Installation": "正在检查WebView2安装情况...",
"LoginPhaseInstallingCertificate": "正在安装证书,请在打开的对话框中点击确认...",
"LoginPhaseRefreshing": "正在刷新现有会话...",
"LoginPhaseSuccessNavigating": "登录成功,正在导航到主页",
"LoginPhaseWaitingForUserInput": "等待用户输入",
"SubmitWithNewAccountButton/Text": "登录并且不使用当前账号",
"SubmitButton/Content": "登录",
"RefreshTokenButton/Content": "使用刷新令牌登录",
"BrowserButton/Content": "通过用Chrome/Edge浏览器登录测试\uD83E\uDDEA",
"WebViewButton/Content": "通过WebView登录",
"RefreshTokenBox/PlaceholderText": "刷新令牌",
"UserNameBox/PlaceholderText": "邮箱地址或pixiv ID",
"PasswordBox/PlaceholderText": "密码",
"DisableDomainFrontingToggleSwitch/Header": "域前置",
"DisableDomainFrontingToggleSwitch/OnContent": "启用",
"DisableDomainFrontingToggleSwitch/OffContent": "禁用",
"RefreshingSessionFailedContent": "请重新登录\n如果该问题反复出现请联系开发者寻求解决",
"RefreshingSessionFailedTitle": "刷新对话失败",
"FetchingSessionFailedContent": "请重新启动应用程序\n如果该问题反复出现请联系开发者寻求解决",
"FetchingSessionFailedTitle": "获取对话失败",
"RootCertificateInstallationRequiredContent": "如不安装证书则无法正常登录,本证书的私钥不会被分发,选择确认即代表您将会安装该证书,请在接下来弹出的对话框中选择确认/OK如果您拒绝安装则无法继续使用本应用",
"RootCertificateInstallationRequiredTitle": "检测到本用户尚未安装证书",
"WebView2InstallationRequiredContent": "使用本方式登录需要安装WebView2选择确认将会自动打开浏览器为您下载WebView2 Runtime请您双击exe文件安装后重启应用",
"WebViewLoginTip/Title": "注意",
"WebViewLoginTip/Message": "本方式需要安装WebView2",
"BrowserLoginTip/Title": "注意",
"BrowserLoginTip/Message": "本方式可能不会显示谷歌reCAPTCHA验证码",
"WebView2InstallationRequiredTitle": "检测到本机尚未安装WebView2 Runtime",
"WebViewHelp/ToolTipService/ToolTip": "使用本方式登录需要安装WebView2。\n填写账号、密码后软件会一直保存它们\n\n点击“登录”按钮后会打开WebView进行快速自动登录全程不需要用户操作但如果遇到脚本没有执行完毕就停止、或者需要输入验证码的情况也需要你手动完成\n\n如果你不信任软件帮你保存、填写也可以直接留空并点击“登录”然后手动在WebView中输入\n\n域前置禁用后将使用当前本机的IE代理。如果你此时不能直接访问pixiv则应该不要禁止此选项",
"BrowserHelp/ToolTipService/ToolTip": "点击登录将使用外部的Chrome或Edge等Chromium内核的浏览器登录。如果此种方法登录失败可以使用其他方法尝试登录\n\n域前置禁用后将使用当前本机的IE代理。如果你此时不能直接访问pixiv则应该不要禁止此选项"
}
"ErrorWhileLoggingInTitle": "登录过程出现异常",
"ErrorWhileLogginInContentFormatted": "应用程序即将退出,以下是异常信息:\n{0}",
"LoginPhaseCheckingCertificateInstallation": "正在检查证书安装情况...",
"LoginPhaseCheckingWebView2Installation": "正在检查WebView2安装情况...",
"LoginPhaseInstallingCertificate": "正在安装证书,请在打开的对话框中点击确认...",
"LoginPhaseRefreshing": "正在刷新现有会话...",
"LoginPhaseSuccessNavigating": "登录成功,正在导航到主页",
"LoginPhaseWaitingForUserInput": "等待用户输入",
"SubmitWithNewAccountButton/Text": "登录并且不使用当前账号",
"SubmitButton/Content": "登录",
"RefreshTokenButton/Content": "使用刷新令牌登录",
"BrowserButton/Content": "通过用Chrome/Edge浏览器登录测试\uD83E\uDDEA",
"WebViewButton/Content": "通过WebView登录",
"RefreshTokenBox/PlaceholderText": "刷新令牌",
"UserNameBox/PlaceholderText": "邮箱地址或pixiv ID",
"PasswordBox/PlaceholderText": "密码",
"DisableDomainFrontingToggleSwitch/Header": "域前置",
"DisableDomainFrontingToggleSwitch/OnContent": "启用",
"DisableDomainFrontingToggleSwitch/OffContent": "禁用",
"RefreshingSessionFailedContent": "请重新登录\n如果该问题反复出现请联系开发者寻求解决",
"RefreshingSessionFailedTitle": "刷新对话失败",
"FetchingSessionFailedContent": "请重新启动应用程序\n如果该问题反复出现请联系开发者寻求解决",
"FetchingSessionFailedTitle": "获取对话失败",
"RootCertificateInstallationRequiredSecondaryButtonText": "使用Pixeval的证书",
"RootCertificateInstallationRequiredPrimaryButtonText": "使用自己的证书",
"CertificateRequiredDialogContent/Text": "如不安装证书则无法正常登录本证书的私钥不会被分发选择“使用Pixeval的证书”即代表您将会安装该证书\n你也可以选择自己提供有效的证书请在下方文本框输入证书路径和密码并选择“使用自己的证书”。如果之后仍无法连接到Pixiv则说明提供的证书有误",
"CertificateRequiredDialogPath/PlaceholderText": "证书路径",
"CertificateRequiredDialogPassword/PlaceholderText": "证书密码",
"CertificateRequiredDialogInvalidInfoBar/Title": "证书路径错误或密码不正确",
"RootCertificateInstallationRequiredTitle": "检测到本用户尚未安装证书",
"WebView2InstallationRequiredContent": "使用本方式登录需要安装WebView2选择确认将会自动打开浏览器为您下载WebView2 Runtime请您双击exe文件安装后重启应用",
"WebViewLoginTip/Title": "注意",
"WebViewLoginTip/Message": "本方式需要安装WebView2",
"BrowserLoginTip/Title": "注意",
"BrowserLoginTip/Message": "本方式可能不会显示谷歌reCAPTCHA验证码",
"WebView2InstallationRequiredTitle": "检测到本机尚未安装WebView2 Runtime",
"WebViewHelp/ToolTipService/ToolTip": "使用本方式登录需要安装WebView2。\n填写账号、密码后软件会一直保存它们\n\n点击“登录”按钮后会打开WebView进行快速自动登录全程不需要用户操作但如果遇到脚本没有执行完毕就停止、或者需要输入验证码的情况也需要你手动完成\n\n如果你不信任软件帮你保存、填写也可以直接留空并点击“登录”然后手动在WebView中输入\n\n域前置禁用后将使用当前本机的IE代理。如果你此时不能直接访问pixiv则应该不要禁止此选项",
"BrowserHelp/ToolTipService/ToolTip": "点击登录将使用外部的Chrome或Edge等Chromium内核的浏览器登录。如果此种方法登录失败可以使用其他方法尝试登录\n\n域前置禁用后将使用当前本机的IE代理。如果你此时不能直接访问pixiv则应该不要禁止此选项"
}

View File

@ -146,7 +146,7 @@
"SessionSettingsGroup/Text": "会话设置",
"SignOutConfirmationDialogContent": "该操作将会无法撤销",
"SignOutConfirmationDialogTitle": "你确定要登出吗?",
"SignOutEntry/Description": "退出登录将会清除你的缓存与包括跨设备同步在内的所有个人信息并关闭应用程序",
"SignOutEntry/Description": "退出登录并关闭应用程序",
"SignOutEntry/Header": "退出登录",
"SpotlightSearchPageLimitNumberBox/PlaceholderText": "特辑搜索页数限制[1, 100]",
"TargetAPIPlatformEntry/Description": "指定发送请求时使用哪个平台对应的 API如果不知道这是什么意思请保持默认",

View File

@ -44,6 +44,7 @@ public static class ContentDialogBuilder
content,
okButtonContent ?? MessageContentDialogResources.OkButtonContent);
}
public static IAsyncOperation<ContentDialogResult> CreateOkCancelAsync(this ulong hWnd, object? title, object? content, string? okButtonContent = null, string? cancelButtonContent = null)
{
return WindowFactory.ForkedWindows[hWnd].Content.ShowContentDialogAsync(
@ -65,4 +66,16 @@ public static class ContentDialogBuilder
{
return WindowFactory.ForkedWindows[hWnd].Content.ShowContentDialogAsync(title, content, primaryButtonText, secondaryButtonText, closeButtonText);
}
public static ContentDialog CreateContentDialog(this ulong hWnd, object? title, object? content, string primaryButtonText = "", string secondaryButtonText = "", string closeButtonText = "")
{
var cd = WindowFactory.ForkedWindows[hWnd].Content.CreateContentDialog();
cd.Title = title;
cd.Content = content;
cd.PrimaryButtonText = primaryButtonText;
cd.SecondaryButtonText = secondaryButtonText;
cd.CloseButtonText = closeButtonText;
cd.DefaultButton = ContentDialogButton.Primary;
return cd;
}
}