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