Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 21931d9

Browse files
maxkoshevoipictos
andauthored
Deprecate LocalizationResourceManager.SetCulture (#766)
* Deprecate SetCulture * Add EditorBrowsableState.Never * Update src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/LocalizationResourceManager.shared.cs * Fix obsolete warning in tests * Remove unneeded line * Use new LocalizationResourceManager for tests Tests were failing from time to time because the same instance of LRM was used for all of them. And since tests are executed in parallel, this caused some issues * Siplify impicit conversion test to test only conversion itself * Return Invalidate mathod Co-authored-by: Pedro Jesus <[email protected]>
1 parent 534355f commit 21931d9

File tree

5 files changed

+29
-34
lines changed

5 files changed

+29
-34
lines changed

samples/XCT.Sample/ViewModels/SettingViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public SettingViewModel()
3838

3939
ChangeLanguageCommand = CommandFactory.Create(() =>
4040
{
41-
LocalizationResourceManager.Current.SetCulture(CultureInfo.GetCultureInfo(SelectedLanguage.CI));
41+
LocalizationResourceManager.Current.CurrentCulture = CultureInfo.GetCultureInfo(SelectedLanguage.CI);
4242
LoadLanguages();
4343
});
4444
}

src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Helpers/LocalizationResourceManagerTests/LocalizationResourceManagerTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ public class LocalizationResourceManagerTests
1111
public LocalizationResourceManagerTests()
1212
{
1313
resourceManager = new MockResourceManager();
14-
localizationManager = LocalizationResourceManager.Current;
14+
#pragma warning disable CS0618 // Type or member is obsolete
15+
localizationManager = new LocalizationResourceManager();
16+
#pragma warning restore CS0618 // Type or member is obsolete
1517
localizationManager.Init(resourceManager, initialCulture);
1618
}
1719

1820
readonly LocalizationResourceManager localizationManager;
19-
readonly ResourceManager resourceManager;
2021
readonly CultureInfo initialCulture = CultureInfo.InvariantCulture;
22+
readonly ResourceManager resourceManager;
2123

2224
[Fact]
2325
public void LocalizationResourceManager_GetCulture_Equal_Indexer()
@@ -30,11 +32,10 @@ public void LocalizationResourceManager_GetCulture_Equal_Indexer()
3032
var responceIndexerCulture1 = localizationManager[testString];
3133
var responceGetValueCulture1 = localizationManager.GetValue(testString);
3234
var responceResourceManagerCulture1 = resourceManager.GetString(testString, initialCulture);
33-
localizationManager.SetCulture(culture2);
35+
localizationManager.CurrentCulture = culture2;
3436
var responceIndexerCulture2 = localizationManager[testString];
3537
var responceGetValueCulture2 = localizationManager.GetValue(testString);
3638
var responceResourceManagerCulture2 = resourceManager.GetString(testString, culture2);
37-
resourceManager.GetString(testString, culture2);
3839

3940
// Assert
4041
Assert.Equal(responceResourceManagerCulture1, responceIndexerCulture1);

src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Helpers/LocalizedStringTests/LocalizedStringTests.cs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ public class LocalizedStringTests
1212
public LocalizedStringTests()
1313
{
1414
resourceManager = new MockResourceManager();
15-
localizationManager.Init(resourceManager);
16-
localizationManager.SetCulture(initialCulture);
15+
#pragma warning disable CS0618 // Type or member is obsolete
16+
localizationManager = new LocalizationResourceManager();
17+
#pragma warning restore CS0618 // Type or member is obsolete
18+
localizationManager.Init(resourceManager, initialCulture);
1719
}
1820

19-
readonly LocalizationResourceManager localizationManager = LocalizationResourceManager.Current;
21+
readonly LocalizationResourceManager localizationManager;
2022
readonly CultureInfo initialCulture = CultureInfo.InvariantCulture;
2123
readonly ResourceManager resourceManager;
2224
LocalizedString localizedString;
@@ -35,7 +37,7 @@ public void LocalizedStringTests_Localized_ValidImplementation()
3537
// Act
3638
var responceCulture1 = localizedString.Localized;
3739
var responceResourceManagerCulture1 = resourceManager.GetString(testString, initialCulture);
38-
localizationManager.SetCulture(culture2);
40+
localizationManager.CurrentCulture = culture2;
3941
var responceCulture2 = localizedString.Localized;
4042
var responceResourceManagerCulture2 = resourceManager.GetString(testString, culture2);
4143

@@ -46,27 +48,17 @@ public void LocalizedStringTests_Localized_ValidImplementation()
4648
}
4749

4850
[Fact]
49-
public void LocalizedStringTests_Localized_ValidImplementation_With_Func()
51+
public void LocalizedStringTests_ImplicitConversion_ValidImplementation()
5052
{
5153
// Arrange
5254
var testString = "test";
53-
var culture2 = new CultureInfo("en");
54-
localizedString = (Func<string>)(() => localizationManager[testString]);
55-
56-
string responceOnCultureChanged = null;
57-
localizedString.PropertyChanged += (sender, args) => responceOnCultureChanged = localizedString.Localized;
55+
Func<string> generator = () => testString;
5856

5957
// Act
60-
var responceCulture1 = localizedString.Localized;
61-
var responceResourceManagerCulture1 = resourceManager.GetString(testString, initialCulture);
62-
localizationManager.SetCulture(culture2);
63-
var responceCulture2 = localizedString.Localized;
64-
var responceResourceManagerCulture2 = resourceManager.GetString(testString, culture2);
58+
localizedString = generator;
6559

6660
// Assert
67-
Assert.Equal(responceResourceManagerCulture1, responceCulture1);
68-
Assert.Equal(responceResourceManagerCulture2, responceOnCultureChanged);
69-
Assert.Equal(responceResourceManagerCulture2, responceResourceManagerCulture2);
61+
Assert.NotNull(localizedString);
7062
}
7163

7264
[Fact]

src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/TextCaseConverter.shared.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ object Convert(string value, object parameter)
3737
{
3838
TextCaseType.Lower => value?.ToLowerInvariant(),
3939
TextCaseType.Upper => value?.ToUpperInvariant(),
40-
TextCaseType.FirstUpperRestLower => !string.IsNullOrWhiteSpace(value)
40+
TextCaseType.FirstUpperRestLower => !string.IsNullOrWhiteSpace(value)
4141
? value.Substring(0, 1).ToUpperInvariant() + value.Substring(1).ToLowerInvariant()
4242
: value,
4343
_ => value

src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/LocalizationResourceManager.shared.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
using System.Globalization;
44
using System.Resources;
55
using System.Threading;
6+
using Xamarin.CommunityToolkit.ObjectModel;
67

78
namespace Xamarin.CommunityToolkit.Helpers
89
{
910
#if !NETSTANDARD1_0
10-
public class LocalizationResourceManager : INotifyPropertyChanged
11+
public class LocalizationResourceManager : ObservableObject
1112
{
1213
#pragma warning disable CS0618 // Type or member is obsolete
1314
public static LocalizationResourceManager Current { get; } = new LocalizationResourceManager();
@@ -37,18 +38,19 @@ public string GetValue(string text) =>
3738
public string this[string text] =>
3839
GetValue(text);
3940

40-
public void SetCulture(CultureInfo language)
41+
[Obsolete("Please, use " + nameof(CurrentCulture) + " to set culture")]
42+
[EditorBrowsable(EditorBrowsableState.Never)]
43+
public void SetCulture(CultureInfo language) => CurrentCulture = language;
44+
45+
public CultureInfo CurrentCulture
4146
{
42-
currentCulture = language;
43-
Invalidate();
47+
get => currentCulture;
48+
set => SetProperty(ref currentCulture, value, null);
4449
}
4550

46-
public CultureInfo CurrentCulture => currentCulture;
47-
48-
public event PropertyChangedEventHandler PropertyChanged;
49-
50-
public void Invalidate() =>
51-
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null));
51+
[Obsolete("This method is no longer needed with new implementation of " + nameof(LocalizationResourceManager) + ". Please, remove all references to it.")]
52+
[EditorBrowsable(EditorBrowsableState.Never)]
53+
public void Invalidate() => OnPropertyChanged(null);
5254
}
5355
#endif
5456
}

0 commit comments

Comments
 (0)