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 );
}
}