繁体   English   中英

单轨城堡魔法

[英]Castle Monorail magic

我正在从事的项目支持多种语言环境。 该解决方案基于使用一些Castle Monorail机制。 适当的控制器类标记如下:

[资源(“ pageResx”,“ ... Controllers.Static”)]

其中,StaticTemplate是控制器名称前缀,资源文件位于“ .. \\ Resources \\ Controllers \\ StaticTemplate *”中。

另一方面,StatiController继承自BaseController类,该类标记如下:

[LocalizationFilter(RequestStore.Session,“ locale”)]

因此,用户的语言环境存储在会话中。 就是这样。 最后一步是NVelocity vm-file,其中采用如下所示的适当资源:

$ pageResx.Buttons_Download

这样,从文件'.. \\ Resources \\ Controllers \\ Static.de.resx中获取具有locale ='de'的用户的ID ='Buttons_Download'的资源字符串。

但是,项目中还有另一个地方要进行本地化-构建电子邮件。 此处实现了以下逻辑:

public class EmailPersonalizer : IEmailPersonalizer
{
    ...
    printJobResourceManager = new ResourceManager("...Resources.PrintJob", 
                                        typeof (EmailPersonalizer).Assembly);
    public string ToLocalizedString(string resourceId, VendorUser user, 
          params object[] args)
    {
        ...
        var resourceString = printJobResourceManager.GetString(resourceId, 
                                    culture);
        ...
    }
    ...
}

给定参数值,即可正确评估resourceString。 但...

魔术来了。 没有用于巴西语言环境的资源文件。 后缀为“ pt-BR”。 也有葡萄牙语语言环境,但没有适当的资源文件-没有“ pt”文件。 在查看页面方面,Monorail从pt-BR文件中为pt-user获取本地化资源。 但是实现电子邮件构造的逻辑无法做到这一点。 相反,它是从以前的“ en”的基本资源获取本地化的字符串。

我了解了用于映射资源的.NET机制( http://msdn.microsoft.com/zh-cn/library/sb6a8618.aspx )。 但未能找到单轨铁路的描述。

问题是单轨铁路车(或任何人)如何将“ pt”映射到“ pt-BR”? 我应该怎么做才能在外部实现相同的逻辑?

提前致谢

我假设这是在访问者网络上下文之外运行的吗? 为了使.NET从您的资源中获取适当的字符串,您将需要更改当前线程的区域性:

var culture = CultureInfo.CreateSpecificCulture( "pt" );
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

我看到您在通话中传递了文化:

 var resourceString = printJobResourceManager.GetString(resourceId, 
                                culture);

您是说即使您使用适当的区域性发送,此调用也会返回磨损的结果?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM