servicestack,Razor,servicestack" /> servicestack,Razor,servicestack" />

如何使用ServiceStack Razor呈现本地化内容页?

如何使用ServiceStack Razor呈现本地化内容页?,razor,servicestack,Razor,servicestack,我需要为每个区域性使用单独的default.cshtml。例如,default.en.cshtml、default.dk.cshtml等。应根据当前请求区域性在中选择正确的内容页 使用ServiceStack实现这一点的最佳方法是什么?IVirtualPathProvider实现 解决了适用于我: Plugins.Add(new CultureAwareRazorFormat()) 已添加到AppHost 相关资料: public class CultureAwareRazorFormat

我需要为每个区域性使用单独的default.cshtml。例如,default.en.cshtml、default.dk.cshtml等。应根据当前请求区域性在中选择正确的内容页

使用ServiceStack实现这一点的最佳方法是什么?IVirtualPathProvider实现

解决了适用于我:

Plugins.Add(new CultureAwareRazorFormat()) 
已添加到AppHost

相关资料:

public class CultureAwareRazorFormat : RazorFormat
{
    public override ServiceStack.Razor.Managers.RazorPageResolver CreatePageResolver()
    {
        return base.CreatePageResolver();
    }

    public override ServiceStack.Razor.Managers.RazorViewManager CreateViewManager()
    {
        return new CultureAwareRazorViewManager(this, VirtualPathProvider);
    }
}


public class CultureAwareRazorViewManager : RazorViewManager
{
    public CultureAwareRazorViewManager(IRazorConfig viewConfig, IVirtualPathProvider virtualPathProvider) : base(viewConfig, virtualPathProvider)
    {

    }

    public override RazorPage GetPage(string absolutePath)
    {
        var extension = VirtualPathUtility.GetExtension(absolutePath);
        if (extension != null)
        {
            string path = absolutePath.Remove(absolutePath.IndexOf(extension, System.StringComparison.Ordinal));
            var localizedPage = TryGetLocalizedPage(path, extension, Thread.CurrentThread.CurrentUICulture);
            if (localizedPage != null) return localizedPage;
        }

        return base.GetPage(absolutePath);
    }

    private RazorPage TryGetLocalizedPage(string path, string extension, CultureInfo culture)
    {
        var result = base.GetPage(path + "." + culture.ToString().ToLower() + extension);
        if (result != null) return result;

        result = base.GetPage(path + "." + culture.TwoLetterISOLanguageName + extension);
        if (result != null) return result;

        result = base.GetPage(path + "." + culture.ThreeLetterISOLanguageName + extension);
        if (result != null) return result;

        return null;
    }

}