如果我创建资源Test.resx
,我可以从Razor视图访问它:
@Test.Hello
但我经常需要在Javascript文件中使用资源。因为我无法在Javascript文件中嵌入Razor,所以我通常会在页面中抓取所需的内容并在脚本中使用它,如下所示:
<script type="text/javascript">
var Hello = '@Test.Hello';
</script>
<script src="Test.js"></script>
然后在Test.js
我可以使用它:
alert(Hello);
...而不是制作大量的参考文献:
<script type="text/javascript">
var Hello = '@Test.Hello';
var How = '@Test.How';
var Are = '@Test.Are';
var You = '@Test.You';
</script>
我想获取整个资源文件的内容并使用它们创建一个Javascript对象,所以我经常这样做:
<script type="text/javascript">
var Resources = @Html.Raw(Json.Encode(ResX('Test')));
</script>
但是这提出了一个问题...函数ResX,定义(或多或少)像这样:
public static Dictionary<string, string> ResX(string source)
{
source = String.Format(@"{0}\{1}\{2}.resx"
, HttpContext.Current.Request.PhysicalApplicationPath.ToString()
, @"MyResourceFolder"
, source
);
var d = new Dictionary<string, string>();
IDictionaryEnumerator dn = (new ResXResourceReader(source)).GetEnumerator();
...
}
现在需要知道我的资源文件的位置。更糟糕的是,它将专门使用后备资源,这样如果我的客户端是德语,它将忽略Test.de.resx
。
现在,我知道我可以正确地编写文件名,但是就像GetlLocalResourceObject()
确切地知道要获取哪个文件一样,我应该能够调用一些返回正确路径的函数。
所以我的问题是:是否有一个我可以调用的方法,它会给我本地资源文件的路径(GetLocalResourceObject会使用哪个文件)?
上述的Apropos,我应该将资源文件放在MVC 5项目中?