mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2025-05-24 19:54:22 -04:00
Use null
as the default locale, which resolves to the current system default locale (#1185)
This commit is contained in:
parent
982ba6a76c
commit
057beaacd6
5 changed files with 26 additions and 18 deletions
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -118,8 +117,12 @@ public abstract class ExportCommandBase : DiscordCommandBase
|
||||||
)]
|
)]
|
||||||
public string DateFormat { get; init; } = "MM/dd/yyyy h:mm tt";
|
public string DateFormat { get; init; } = "MM/dd/yyyy h:mm tt";
|
||||||
|
|
||||||
[CommandOption("locale", Description = "Locale to use when formatting dates and numbers.")]
|
[CommandOption(
|
||||||
public string Locale { get; init; } = CultureInfo.CurrentCulture.Name;
|
"locale",
|
||||||
|
Description = "Locale to use when formatting dates and numbers. "
|
||||||
|
+ "If not specified, the default system locale will be used."
|
||||||
|
)]
|
||||||
|
public string? Locale { get; init; }
|
||||||
|
|
||||||
[CommandOption("utc", Description = "Normalize all timestamps to UTC+0.")]
|
[CommandOption("utc", Description = "Normalize all timestamps to UTC+0.")]
|
||||||
public bool IsUtcNormalizationEnabled { get; init; } = false;
|
public bool IsUtcNormalizationEnabled { get; init; } = false;
|
||||||
|
|
|
@ -8,6 +8,7 @@ using DiscordChatExporter.Core.Discord.Data;
|
||||||
using DiscordChatExporter.Core.Exporting.Filtering;
|
using DiscordChatExporter.Core.Exporting.Filtering;
|
||||||
using DiscordChatExporter.Core.Exporting.Partitioning;
|
using DiscordChatExporter.Core.Exporting.Partitioning;
|
||||||
using DiscordChatExporter.Core.Utils;
|
using DiscordChatExporter.Core.Utils;
|
||||||
|
using DiscordChatExporter.Core.Utils.Extensions;
|
||||||
|
|
||||||
namespace DiscordChatExporter.Core.Exporting;
|
namespace DiscordChatExporter.Core.Exporting;
|
||||||
|
|
||||||
|
@ -39,9 +40,9 @@ public partial class ExportRequest
|
||||||
|
|
||||||
public bool ShouldReuseAssets { get; }
|
public bool ShouldReuseAssets { get; }
|
||||||
|
|
||||||
public string Locale { get; }
|
public string? Locale { get; }
|
||||||
|
|
||||||
public CultureInfo CultureInfo { get; }
|
public CultureInfo? CultureInfo { get; }
|
||||||
|
|
||||||
public bool IsUtcNormalizationEnabled { get; }
|
public bool IsUtcNormalizationEnabled { get; }
|
||||||
|
|
||||||
|
@ -58,7 +59,7 @@ public partial class ExportRequest
|
||||||
bool shouldFormatMarkdown,
|
bool shouldFormatMarkdown,
|
||||||
bool shouldDownloadAssets,
|
bool shouldDownloadAssets,
|
||||||
bool shouldReuseAssets,
|
bool shouldReuseAssets,
|
||||||
string locale,
|
string? locale,
|
||||||
bool isUtcNormalizationEnabled
|
bool isUtcNormalizationEnabled
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -83,7 +84,7 @@ public partial class ExportRequest
|
||||||
? FormatPath(assetsDirPath, Guild, Channel, After, Before)
|
? FormatPath(assetsDirPath, Guild, Channel, After, Before)
|
||||||
: $"{OutputFilePath}_Files{Path.DirectorySeparatorChar}";
|
: $"{OutputFilePath}_Files{Path.DirectorySeparatorChar}";
|
||||||
|
|
||||||
CultureInfo = CultureInfo.GetCultureInfo(Locale);
|
CultureInfo = Locale?.Pipe(CultureInfo.GetCultureInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,15 @@ public class LocaleToDisplayNameConverter : IValueConverter
|
||||||
{
|
{
|
||||||
public static LocaleToDisplayNameConverter Instance { get; } = new();
|
public static LocaleToDisplayNameConverter Instance { get; } = new();
|
||||||
|
|
||||||
public object? Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
|
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) =>
|
||||||
value is string locale ? CultureInfo.GetCultureInfo(locale).DisplayName : null;
|
value is string locale && !string.IsNullOrWhiteSpace(locale)
|
||||||
|
? CultureInfo.GetCultureInfo(locale).DisplayName
|
||||||
|
: "System default";
|
||||||
|
|
||||||
public object ConvertBack(
|
public object ConvertBack(
|
||||||
object value,
|
object? value,
|
||||||
Type targetType,
|
Type targetType,
|
||||||
object parameter,
|
object? parameter,
|
||||||
CultureInfo culture
|
CultureInfo culture
|
||||||
) => throw new NotSupportedException();
|
) => throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Cogwheel;
|
using Cogwheel;
|
||||||
using DiscordChatExporter.Core.Exporting;
|
using DiscordChatExporter.Core.Exporting;
|
||||||
|
@ -21,7 +20,7 @@ public partial class SettingsService()
|
||||||
|
|
||||||
public ThreadInclusionMode ThreadInclusionMode { get; set; } = ThreadInclusionMode.None;
|
public ThreadInclusionMode ThreadInclusionMode { get; set; } = ThreadInclusionMode.None;
|
||||||
|
|
||||||
public string Locale { get; set; } = CultureInfo.CurrentCulture.Name;
|
public string? Locale { get; set; }
|
||||||
|
|
||||||
public bool IsUtcNormalizationEnabled { get; set; }
|
public bool IsUtcNormalizationEnabled { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using DiscordChatExporter.Core.Utils.Extensions;
|
||||||
using DiscordChatExporter.Gui.Models;
|
using DiscordChatExporter.Gui.Models;
|
||||||
using DiscordChatExporter.Gui.Services;
|
using DiscordChatExporter.Gui.Services;
|
||||||
using DiscordChatExporter.Gui.ViewModels.Framework;
|
using DiscordChatExporter.Gui.ViewModels.Framework;
|
||||||
|
@ -37,10 +37,11 @@ public class SettingsViewModel(SettingsService settingsService) : DialogScreen
|
||||||
set => settingsService.ThreadInclusionMode = value;
|
set => settingsService.ThreadInclusionMode = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These items have to be non-nullable because WPF ComboBox doesn't allow a null value to be selected
|
||||||
public IReadOnlyList<string> AvailableLocales { get; } = new[]
|
public IReadOnlyList<string> AvailableLocales { get; } = new[]
|
||||||
{
|
{
|
||||||
// Current locale
|
// Current locale (maps to null downstream)
|
||||||
CultureInfo.CurrentCulture.Name,
|
"",
|
||||||
// Locales supported by the Discord app
|
// Locales supported by the Discord app
|
||||||
"da-DK",
|
"da-DK",
|
||||||
"de-DE",
|
"de-DE",
|
||||||
|
@ -73,10 +74,12 @@ public class SettingsViewModel(SettingsService settingsService) : DialogScreen
|
||||||
"ko-KR"
|
"ko-KR"
|
||||||
}.Distinct(StringComparer.OrdinalIgnoreCase).ToArray();
|
}.Distinct(StringComparer.OrdinalIgnoreCase).ToArray();
|
||||||
|
|
||||||
|
// This has to be non-nullable because WPF ComboBox doesn't allow a null value to be selected
|
||||||
public string Locale
|
public string Locale
|
||||||
{
|
{
|
||||||
get => settingsService.Locale;
|
get => settingsService.Locale ?? "";
|
||||||
set => settingsService.Locale = value;
|
// Important to reduce empty strings to nulls, because empty strings don't correspond to valid cultures
|
||||||
|
set => settingsService.Locale = value.NullIfWhiteSpace();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsUtcNormalizationEnabled
|
public bool IsUtcNormalizationEnabled
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue