From 82f284b5fa022aaabb1df5580d69baf6289b2200 Mon Sep 17 00:00:00 2001 From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com> Date: Wed, 21 Feb 2024 16:32:48 +0800 Subject: [PATCH 1/3] feat: implement locale switch. --- demo/Semi.Avalonia.Demo/App.axaml | 5 +- src/Semi.Avalonia/AssemblyInfo.cs | 4 ++ .../Controls/ManagedFileChooser.axaml | 14 ++--- src/Semi.Avalonia/Locale/en-us.axaml | 7 +++ src/Semi.Avalonia/Locale/zh-cn.axaml | 7 +++ src/Semi.Avalonia/Themes/Index.axaml | 3 +- src/Semi.Avalonia/Themes/Index.axaml.cs | 55 +++++++++++++++++++ 7 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 src/Semi.Avalonia/AssemblyInfo.cs create mode 100644 src/Semi.Avalonia/Locale/en-us.axaml create mode 100644 src/Semi.Avalonia/Locale/zh-cn.axaml create mode 100644 src/Semi.Avalonia/Themes/Index.axaml.cs diff --git a/demo/Semi.Avalonia.Demo/App.axaml b/demo/Semi.Avalonia.Demo/App.axaml index 07879bb..f63be9d 100644 --- a/demo/Semi.Avalonia.Demo/App.axaml +++ b/demo/Semi.Avalonia.Demo/App.axaml @@ -1,9 +1,10 @@ + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:semi="https://irihi.tech/semi"> - + diff --git a/src/Semi.Avalonia/AssemblyInfo.cs b/src/Semi.Avalonia/AssemblyInfo.cs new file mode 100644 index 0000000..851b612 --- /dev/null +++ b/src/Semi.Avalonia/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using Avalonia.Metadata; + +[assembly:XmlnsPrefix("https://irihi.tech/semi", "semi")] +[assembly:XmlnsDefinition("https://irihi.tech/semi", "Semi.Avalonia")] \ No newline at end of file diff --git a/src/Semi.Avalonia/Controls/ManagedFileChooser.axaml b/src/Semi.Avalonia/Controls/ManagedFileChooser.axaml index 7767672..0ce233c 100644 --- a/src/Semi.Avalonia/Controls/ManagedFileChooser.axaml +++ b/src/Semi.Avalonia/Controls/ManagedFileChooser.axaml @@ -80,11 +80,11 @@ + Watermark="{DynamicResource STRING_CHOOSER_FILE_NAME}" /> - OK - + Command="{Binding Ok}" + Content="{DynamicResource STRING_CHOOSER_DIALOG_OK}" /> + Command="{Binding Cancel}" + Content="{DynamicResource STRING_CHOOSER_DIALOG_CANCEL}" /> + File name + Show hidden flies + OK + Cancel + \ No newline at end of file diff --git a/src/Semi.Avalonia/Locale/zh-cn.axaml b/src/Semi.Avalonia/Locale/zh-cn.axaml new file mode 100644 index 0000000..f4fce56 --- /dev/null +++ b/src/Semi.Avalonia/Locale/zh-cn.axaml @@ -0,0 +1,7 @@ + + 文件名 + 显示隐藏文件 + 确认 + 取消 + \ No newline at end of file diff --git a/src/Semi.Avalonia/Themes/Index.axaml b/src/Semi.Avalonia/Themes/Index.axaml index 86c4758..1b36b00 100644 --- a/src/Semi.Avalonia/Themes/Index.axaml +++ b/src/Semi.Avalonia/Themes/Index.axaml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ + diff --git a/src/Semi.Avalonia/Themes/Index.axaml.cs b/src/Semi.Avalonia/Themes/Index.axaml.cs new file mode 100644 index 0000000..a2646cf --- /dev/null +++ b/src/Semi.Avalonia/Themes/Index.axaml.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Avalonia.Styling; + +namespace Semi.Avalonia; + +public class SemiTheme: Styles +{ + private static readonly Dictionary _localeToResource = new() + { + { new CultureInfo("zh-CN"), "avares://Semi.Avalonia/Locale/zh-CN.axaml" }, + { new CultureInfo("en-US"), "avares://Semi.Avalonia/Locale/en-US.axaml" }, + }; + + private readonly IServiceProvider? sp; + public SemiTheme(IServiceProvider? provider = null) + { + sp = provider; + AvaloniaXamlLoader.Load(provider, this); + } + + private CultureInfo? _locale; + public CultureInfo? Locale + { + get => _locale; + set + { + _locale = value; + var resource = TryGetLocaleResource(value); + var d = AvaloniaXamlLoader.Load(sp, new Uri(resource)) as ResourceDictionary; + if (d is null) return; + foreach (var kv in d) + { + this.Resources.Add(kv); + } + } + } + + private static string TryGetLocaleResource(CultureInfo? locale) + { + if (locale is null) + { + return _localeToResource[new CultureInfo("zh-CN")]; + } + + if (_localeToResource.TryGetValue(locale, out var resource)) + { + return resource; + } + return _localeToResource[new CultureInfo("zh-CN")]; + } +} \ No newline at end of file From a5657a38cd3763bf9d910136dbf7fa2a70f426c8 Mon Sep 17 00:00:00 2001 From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:15:21 +0800 Subject: [PATCH 2/3] feat: TextBox default ContextMenu. --- src/Semi.Avalonia/Controls/SelectableTextBlock.axaml | 2 +- src/Semi.Avalonia/Controls/TextBox.axaml | 6 +++--- src/Semi.Avalonia/Locale/en-us.axaml | 3 +++ src/Semi.Avalonia/Locale/zh-cn.axaml | 3 +++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml b/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml index 864542c..5af71ab 100644 --- a/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml +++ b/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml @@ -7,7 +7,7 @@ diff --git a/src/Semi.Avalonia/Controls/TextBox.axaml b/src/Semi.Avalonia/Controls/TextBox.axaml index 7736ed7..cde7375 100644 --- a/src/Semi.Avalonia/Controls/TextBox.axaml +++ b/src/Semi.Avalonia/Controls/TextBox.axaml @@ -6,19 +6,19 @@ diff --git a/src/Semi.Avalonia/Locale/en-us.axaml b/src/Semi.Avalonia/Locale/en-us.axaml index b665b4a..82f5da2 100644 --- a/src/Semi.Avalonia/Locale/en-us.axaml +++ b/src/Semi.Avalonia/Locale/en-us.axaml @@ -4,4 +4,7 @@ Show hidden flies OK Cancel + Cut + Copy + Paste \ No newline at end of file diff --git a/src/Semi.Avalonia/Locale/zh-cn.axaml b/src/Semi.Avalonia/Locale/zh-cn.axaml index f4fce56..41968ac 100644 --- a/src/Semi.Avalonia/Locale/zh-cn.axaml +++ b/src/Semi.Avalonia/Locale/zh-cn.axaml @@ -4,4 +4,7 @@ 显示隐藏文件 确认 取消 + 剪切 + 复制 + 粘贴 \ No newline at end of file From cafd47f3342d199a0703fcc7bf459a3fd5bf071c Mon Sep 17 00:00:00 2001 From: rabbitism Date: Fri, 23 Feb 2024 19:39:39 +0800 Subject: [PATCH 3/3] feat: add backward compatibility. --- demo/Semi.Avalonia.Demo/App.axaml | 3 +++ src/Semi.Avalonia/Themes/Index.axaml | 2 +- src/Semi.Avalonia/Themes/SemiTheme.axaml | 19 +++++++++++++++++++ .../{Index.axaml.cs => SemiTheme.axaml.cs} | 0 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/Semi.Avalonia/Themes/SemiTheme.axaml rename src/Semi.Avalonia/Themes/{Index.axaml.cs => SemiTheme.axaml.cs} (100%) diff --git a/demo/Semi.Avalonia.Demo/App.axaml b/demo/Semi.Avalonia.Demo/App.axaml index f63be9d..3735cfb 100644 --- a/demo/Semi.Avalonia.Demo/App.axaml +++ b/demo/Semi.Avalonia.Demo/App.axaml @@ -4,6 +4,9 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:semi="https://irihi.tech/semi"> + diff --git a/src/Semi.Avalonia/Themes/Index.axaml b/src/Semi.Avalonia/Themes/Index.axaml index 1b36b00..701f381 100644 --- a/src/Semi.Avalonia/Themes/Index.axaml +++ b/src/Semi.Avalonia/Themes/Index.axaml @@ -1,4 +1,4 @@ - + diff --git a/src/Semi.Avalonia/Themes/SemiTheme.axaml b/src/Semi.Avalonia/Themes/SemiTheme.axaml new file mode 100644 index 0000000..1b36b00 --- /dev/null +++ b/src/Semi.Avalonia/Themes/SemiTheme.axaml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia/Themes/Index.axaml.cs b/src/Semi.Avalonia/Themes/SemiTheme.axaml.cs similarity index 100% rename from src/Semi.Avalonia/Themes/Index.axaml.cs rename to src/Semi.Avalonia/Themes/SemiTheme.axaml.cs