From d9c3c45aa3aa2e2b87fa7af4b3aebead85f88bdb Mon Sep 17 00:00:00 2001 From: Johan Svensson Date: Tue, 10 Oct 2023 20:57:32 +0200 Subject: [PATCH] - Adjust for nullable reference types - Set version to 1.2.0 --- ...lizationResourceManager.Maui.Sample.csproj | 2 +- .../MainPage.xaml.cs | 16 +++-- .../LocalizationResourceManager.Maui.csproj | 8 +-- .../TranslateBindingExtension.cs | 65 +++++++------------ 4 files changed, 37 insertions(+), 54 deletions(-) diff --git a/LocalizationResourceManager.Maui.Sample/LocalizationResourceManager.Maui.Sample.csproj b/LocalizationResourceManager.Maui.Sample/LocalizationResourceManager.Maui.Sample.csproj index ad5bd10..a1fec9c 100644 --- a/LocalizationResourceManager.Maui.Sample/LocalizationResourceManager.Maui.Sample.csproj +++ b/LocalizationResourceManager.Maui.Sample/LocalizationResourceManager.Maui.Sample.csproj @@ -19,7 +19,7 @@ 73206c16-0bbf-4382-a442-f90b21cbca3c - 1.1.0 + 1.2.0 1 11.0 diff --git a/LocalizationResourceManager.Maui.Sample/MainPage.xaml.cs b/LocalizationResourceManager.Maui.Sample/MainPage.xaml.cs index ac20a96..39debe2 100644 --- a/LocalizationResourceManager.Maui.Sample/MainPage.xaml.cs +++ b/LocalizationResourceManager.Maui.Sample/MainPage.xaml.cs @@ -8,7 +8,15 @@ public partial class MainPage : ContentPage private int count = 0; private readonly ILocalizationResourceManager resourceManager; - public int Count => count; + public int Count + { + get => count; + set + { + count = value; + OnPropertyChanged(nameof(Count)); + } + } public LocalizedString HelloWorld { get; } public LocalizedString CurrentCulture { get; } @@ -24,11 +32,7 @@ public MainPage(ILocalizationResourceManager resourceManager) BindingContext = this; } - private void OnCounterClicked(object sender, EventArgs e) - { - count++; - OnPropertyChanged(nameof(Count)); - } + private void OnCounterClicked(object sender, EventArgs e) => Count++; private void OnToggleLanguage(object sender, EventArgs e) { diff --git a/LocalizationResourceManager.Maui/LocalizationResourceManager.Maui.csproj b/LocalizationResourceManager.Maui/LocalizationResourceManager.Maui.csproj index 29992dc..48ca287 100644 --- a/LocalizationResourceManager.Maui/LocalizationResourceManager.Maui.csproj +++ b/LocalizationResourceManager.Maui/LocalizationResourceManager.Maui.csproj @@ -27,10 +27,10 @@ https://github.com/SirJohnK/LocalizationResourceManager.Maui dotnet,dotnetmaui,localization LICENSE.txt - 1.1.0.0 - 1.1.0.0 - - Update to .NET 7. - 1.1.0 + 1.2.0.0 + 1.2.0.0 + - Add TranslateBindingExtension for custom binding with format and plural support in XAML. + 1.2.0 diff --git a/LocalizationResourceManager.Maui/TranslateBindingExtension.cs b/LocalizationResourceManager.Maui/TranslateBindingExtension.cs index 53bcce1..bb5c136 100644 --- a/LocalizationResourceManager.Maui/TranslateBindingExtension.cs +++ b/LocalizationResourceManager.Maui/TranslateBindingExtension.cs @@ -16,25 +16,25 @@ public class TranslateBindingExtension : IMarkupExtension, IMultiVa public string StringFormat { get; set; } = "{0}"; /// - public IValueConverter Converter { get; set; } = null; + public IValueConverter? Converter { get; set; } = null; /// - public object ConverterParameter { get; set; } = null; + public object? ConverterParameter { get; set; } = null; /// - public object Source { get; set; } = null; + public object? Source { get; set; } = null; /// public bool TranslateValue { get; set; } = false; /// - public string TranslateFormat { get; set; } + public string? TranslateFormat { get; set; } /// - public string TranslateOne { get; set; } + public string? TranslateOne { get; set; } /// - public string TranslateZero { get; set; } + public string? TranslateZero { get; set; } /// public object ProvideValue(IServiceProvider serviceProvider) @@ -51,70 +51,49 @@ BindingBase IMarkupExtension.ProvideValue(IServiceProvider serviceP Mode = Mode, Bindings = new Collection { - new Binding(Path, Mode, Converter, ConverterParameter, null, Source), - new Binding(nameof(LocalizationResourceManager.CurrentCulture), BindingMode.OneWay, null, null, null, LocalizationResourceManager.Current) + new Binding(Path, Mode, Converter, ConverterParameter, source: Source), + new Binding(nameof(LocalizationResourceManager.CurrentCulture), BindingMode.OneWay, source:LocalizationResourceManager.Current) } }; } public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length == 0 || values[0] == null) + var value = values?.FirstOrDefault(); + if (value is null) { - return ""; + return string.Empty; } - if (!string.IsNullOrEmpty(TranslateZero) && IsZero(values[0])) + if (!string.IsNullOrWhiteSpace(TranslateZero) && IsZero(value)) { - return LocalizationResourceManager.Current[TranslateZero, values]; + return LocalizationResourceManager.Current[TranslateZero, value]; } - if (!string.IsNullOrEmpty(TranslateOne) && IsOne(values[0])) + if (!string.IsNullOrWhiteSpace(TranslateOne) && IsOne(value)) { - return LocalizationResourceManager.Current[TranslateOne, values]; + return LocalizationResourceManager.Current[TranslateOne, value]; } - if (!string.IsNullOrEmpty(TranslateFormat)) + if (!string.IsNullOrWhiteSpace(TranslateFormat)) { - return LocalizationResourceManager.Current[TranslateFormat, values]; + return LocalizationResourceManager.Current[TranslateFormat, value]; } if (TranslateValue) { - return LocalizationResourceManager.Current[values[0].ToString()]; + return LocalizationResourceManager.Current[$"{value}"]; } - return values[0]; + return value; } - static bool IsZero(object value) - { - if (value == null) - { - return false; - } - if (value.GetType() == typeof(int) && (int)value == 0) - { - return true; - } - return false; - } + private static bool IsZero(object value) => (value is int number && number == 0); - static bool IsOne(object value) - { - if (value == null) - { - return false; - } - if (value.GetType() == typeof(int) && (int)value == 1) - { - return true; - } - return false; - } + private static bool IsOne(object value) => (value is int number && number == 1); public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } -} +} \ No newline at end of file