实现GetLocalResource()

时间:2015-03-20 21:52:47

标签: c# asp.net-mvc razor internationalization resources

如果我创建资源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项目中?

0 个答案:

没有答案