using System.Globalization; using System.Linq; using Microsoft.Extensions.Localization; using Util.Localization.Resources.ResourceTypes; using Util.Localization.ResourceTypes; using Xunit; namespace Util.Localization.Tests; /// /// Json字符串定位器测试 /// public class StringLocalizerTest { /// /// Json资源文件字符串定位器1 /// private readonly IStringLocalizer _resource1Localizer; /// /// Json资源文件字符串定位器101 /// private readonly IStringLocalizer _resource101Localizer; /// /// Json资源文件字符串定位器2 /// private readonly IStringLocalizer _resource2Localizer; /// /// Json资源文件字符串定位器102 /// private readonly IStringLocalizer _resource102Localizer; /// /// Json资源文件字符串定位器3 /// private readonly IStringLocalizer _resource3Localizer; /// /// Json资源文件字符串定位器4 /// private readonly IStringLocalizer _resource4Localizer; /// /// Json资源文件字符串定位器41 /// private readonly IStringLocalizer _resource41Localizer; /// /// Json资源文件字符串定位器5 /// private readonly IStringLocalizer _resource5Localizer; /// /// Json资源文件字符串定位器 - 非泛型 /// private readonly IStringLocalizer _localizer; /// /// Json资源文件字符串定位器6 /// private readonly IStringLocalizer _resource6Localizer; /// /// 测试初始化 /// public StringLocalizerTest( IStringLocalizer resource1Localizer, IStringLocalizer resource101Localizer, IStringLocalizer resource2Localizer, IStringLocalizer resource102Localizer, IStringLocalizer resource3Localizer, IStringLocalizer resource4Localizer, IStringLocalizer resource41Localizer, IStringLocalizer resource5Localizer, IStringLocalizer localizer, IStringLocalizer resource6Localizer ) { _resource1Localizer = resource1Localizer; _resource101Localizer = resource101Localizer; _resource2Localizer = resource2Localizer; _resource102Localizer = resource102Localizer; _resource3Localizer = resource3Localizer; _resource4Localizer = resource4Localizer; _resource41Localizer = resource41Localizer; _resource5Localizer = resource5Localizer; _localizer = localizer; _resource6Localizer = resource6Localizer; } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes.Resource1.en-US.json /// [Fact] public void Test_1() { CultureInfo.CurrentUICulture = new CultureInfo( "en-US" ); var value = _resource1Localizer["Hello"]; Assert.Equal( "hi", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes.Resource1.zh-CN.json /// [Fact] public void Test_2() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource1Localizer["Hello"]; Assert.Equal( "哈楼", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources2\ResourceTypes.Resource101.en-US.json /// [Fact] public void Test_3() { CultureInfo.CurrentUICulture = new CultureInfo( "en-US" ); var value = _resource101Localizer["Hello"]; Assert.Equal( "hi", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources2\ResourceTypes.Resource101.zh-CN.json /// [Fact] public void Test_4() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource101Localizer["Hello"]; Assert.Equal( "哈楼", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes\Resource2.en-US.json /// [Fact] public void Test_5() { CultureInfo.CurrentUICulture = new CultureInfo( "en-US" ); var value = _resource2Localizer["Hello"]; Assert.Equal( "hi", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes\Resource2.zh-CN.json /// [Fact] public void Test_6() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource2Localizer["Hello"]; Assert.Equal( "哈楼", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources2\ResourceTypes\Resource102.zh-CN.json /// [Fact] public void Test_7() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource102Localizer["Hello"]; Assert.Equal( "哈罗", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes\Resource3.zh-Hans.json /// [Fact] public void Test_8() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource3Localizer["Hello"]; Assert.Equal( "哈哈", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes\Resource4.zh.json /// [Fact] public void Test_9() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource4Localizer["Hello"]; Assert.Equal( "嘿嘿", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\ResourceTypes\Resource4.Resource41.zh-CN.json /// [Fact] public void Test_10() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource41Localizer["Hello"]; Assert.Equal( "嘻嘻", value ); } /// /// 测试获取本地化字符串值 - 带参数 - 读取 Resources\ResourceTypes\Resource2.zh-CN.json /// [Fact] public void Test_11() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource2Localizer["Hello,{0},{1},World", "你", "我"]; Assert.Equal( "哈楼,你,我,世界", value ); } /// /// 测试获取本地化字符串值 - 读取 Resources\zh.json /// [Fact] public void Test_12() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _localizer["Hello"]; Assert.Equal( "呜呜", value ); } /// /// 测试获取本地化字符串值 - 资源6未设置, 读取 Resources\zh.json /// [Fact] public void Test_13() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource6Localizer["Hello"]; Assert.Equal( "呜呜", value ); } /// /// 测试获取本地化字符串值 - 未找到返回名称 /// [Fact] public void Test_14() { CultureInfo.CurrentUICulture = new CultureInfo( "en-US" ); var value = _resource1Localizer["HelloWorld2"]; Assert.Equal( "HelloWorld2", value ); } /// /// 测试获取本地化字符串值 - 性能测试 /// [Fact] public void Test_15() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); for ( int i = 0; i < 10000; i++ ) { var value = _localizer["Hello"]; Assert.Equal( "呜呜", value ); } } /// /// 测试获取全部本地化字符串 - 不包含父区域 /// [Fact] public void TestGetAllStrings_1() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource5Localizer.GetAllStrings( false ).ToList(); Assert.Equal( 2, value.Count ); var resource = value.Find( t => t.Name == "Hello" ); Assert.Equal( "哈楼", resource?.Value ); Assert.Equal( "Resources.ResourceTypes.Resource5", resource?.SearchedLocation ); Assert.False( resource?.ResourceNotFound ); } /// /// 测试获取全部本地化字符串 - 包含父区域 /// [Fact] public void TestGetAllStrings_2() { CultureInfo.CurrentUICulture = new CultureInfo( "zh-CN" ); var value = _resource5Localizer.GetAllStrings( true ).ToList(); Assert.Equal( 6, value.Count ); var resource = value.Find( t => t.Name == "Hello3" ); Assert.Equal( "哈楼3", resource?.Value ); Assert.Equal( "Resources.ResourceTypes.Resource5", resource?.SearchedLocation ); Assert.False( resource?.ResourceNotFound ); } }