本地化管理器
本地化管理器 IStringLocalizerManager
接口可以管理多组字符串资源,每组资源为一个 IStringLocalizer
对象。
1、获得实例
要使用本地化管理器,首先得获取到它的实例。我们不推荐使用 new 构造一个实例,而是使用 StringLocalizerFactory
工厂类来创建一个实例。该工厂类提供一个 CreateManager 方法,可以接收一个 configName 参数,这个参数对应本地化配置(可参考 配置与扩展)中配置项的名称,如果未配置缓存配置项,则返回默认的的单例。如下所示:
[TestMethod]
public void TestCreateManager()
{
var manager = StringLocalizerFactory.CreateManager();
Assert.IsNotNull(manager); //DefaultStringLocalizerManager
}
在使用 IOC
的环境中,也可以通过构造注入或属性注入得到 IStringLocalizerManager
的实例。如下所示:
public class HomeController : Controller
{
private readonly IStringLocalizerManager _localizerManager;
public HomeController(IStringLocalizerManager localizerManager)
{
_localizerManager = localizerManager;
}
}
GetLocalizer 方法用于根据不同的名称返回一个 IStringLocalizer
对象。 IStringLocalizer
是本地化字符串访问器。允许你为不同的模块制定不同的资源文件。
2、使用资源文件
在 .Net 应用程序里可以使用资源文件实现本地化,为每一种语言建立相应后缀的资源文件。可以按不同的模块建立多个资源文件。如下所示:
资源文件 | 说明 |
---|---|
Main.Resource.zh-CN | 主功能的中文资源文件 |
Main.Resource.en-US | 主功能的英文资源文件 |
Product.Resource.zh-CN | 产品模块的中文资源文件 |
Product.Resource.en-US | 产品模块的英文资源文件 |
Order.Resource.zh-CN | 订单模块的中文资源文件 |
Order.Resource.en-US | 订单模块的英文资源文件 |
以 Order 为例,建立一个名称为 Create_Succeed 和 OrderNotExists 的资源。如下所示:
资源文件 | 名称 | 值 |
---|---|---|
Order.Resource.zh-CN | Create_Succeed | 订单创建成功! |
Order.Resource.zh-CN | OrderNotExists | 订单号 {0} 不存在! |
Order.Resource.en-US | Create_Succeed | Order created successfully. |
Order.Resource.en-US | OrderNotExists | The order {0} does not exist. |
设置 CultureInfo
信息(默认为 zh-CN)就可以获取不同语言下的字符串的值。如下所示:
[TestMethod]
public void TestGetResourceValue()
{
var manager = StringLocalizerFactory.CreateManager();
var localizer = rr.GetLocalizer("Order.Resource", this.GetType().Assembly);
var value = localizer["Create_Succeed"];
Console.WriteLine(value); //订单创建成功!
value = localizer["OrderNotExists", "NO0001"];
Console.WriteLine(value); //订单号 NO0001 不存在!
}
[TestMethod]
public void TestGetEnResourceValue()
{
var manager = StringLocalizerFactory.CreateManager();
manager.CultureInfo = CultureInfo.GetCultureInfo("en-US");
var localizer = rr.GetLocalizer("Order.Resource", this.GetType().Assembly);
var value = localizer["Create_Succeed"];
Console.WriteLine(value); //Order created successfully.
value = localizer["OrderNotExists", "NO0001"];
Console.WriteLine(value); //The order NO0001 does not exist.
}
3、使用 XML 资源文件
除了使用内嵌的资源文件,还可以使用 XML
文件,文件放在程序集目录下。如 zh-CN\Order.Resource.xml 文件的格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<strings>
<Create_Succeed>订单创建成功!</Create_Succeed>
<OrderNotExists>订单号 {0} 不存在!</OrderNotExists>
</strings>
使用 XML
资源文件应配置 XmlStringLocalizerManager
。