更改jQuery Datatables Buttons语言

时间:2016-02-05 11:08:07

标签: jquery asp.net-mvc razor datatables

我在我的MVC剃须刀网页上使用了非常出色的jQuery Datatables控件。国际化运作良好,但不包括按钮文本。 所以我的脚本是

$(document).ready(function () {
    $('#resultsTable').dataTable({
        dom: 'frtiBp',
        "language": {
            "url": "@ResourceHelper.GetResourceValue(ResourceKeys.DATATABLE_LANG_FILE)"
        },
        buttons: [
            'copy', 'csv', 'excel'
        ]
    });
});

ResourceHelper将获取一个像url一样的文件 通用/数据表/ 1.10.10 /插件/国际化/ English.json 要么 公共/数据表/ 1.10.10 /插件/ I18N / Chinese.json

取决于语言

我可以将字符串放入我的资源助手

中的按钮文本中
        "language": {
            "url": "@ResourceHelper.GetResourceValue(ResourceKeys.DATATABLE_LANG_FILE)",
            "buttons": {
                copy: '@ResourceHelper.GetResourceValue(ResourceKeys.COPY)',
                csv: '@ResourceHelper.GetResourceValue(ResourceKeys.SAVECSV)',
                excel: '@ResourceHelper.GetResourceValue(ResourceKeys.SAVE_EXCEL)'
            }
        },

这些解析为正确的值,但我喜欢将所有表语言的东西放在DataTables语言文件中的一个位置,而不是在我的资源文件和数据表文件之间拆分。我在本地得到它们所以我可以编辑它们但是有可能吗?还是有另一种方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

当您在JS中使用like作为字符串时,您的问题可能是Resources的编译问题。 一种可能的方法是为Resources提供javascript服务。在我们的例子中,我们使用了angularjs,但即使你不使用angularjs也是如此。

<强> 1。添加一个MVC控制器,返回按键和值列出的资源

<强> TranslateResourcesController.cs

public class TranslateResourcesController : Controller
{
    // GET: TranslateResources
    public JsonResult Index()
    {
        return Json(Resources.Resource.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, false, true).Cast<DictionaryEntry>().ToDictionary(v => v.Key, v => v.Value), JsonRequestBehavior.AllowGet);
    }
}

<强> 2。添加.js文件(服务)

(function ()
{
    "use strict";
    var mainApp = angular.module("mainApp",[]);

    function TranslateResourcesService(restangular)
    {
        //Call .cs controller (same could be done using ajax or $http)
       var controllerName = "TranslateResources";
       var url = window.applicationBaseFullUrl + controllerName;
       var service = restangular.oneUrl(controllerName, url).get().$object;
       return service;
    }
    mainApp.factory("TranslateResourcesService", ["Restangular", TranslateResourcesService]);

    function TranslateResourcesController($scope, TranslateResourcesService)
    {
        $scope.TranslateResourcesService = TranslateResourcesService;
    }

    mainApp.controller("TranslateResourcesController", ["$scope", "TranslateResourcesService", TranslateResourcesController]);


})();

现在使用JS服务,或者在这种情况下我分配给angularjs控制器以全局使用它。

用法:

<button type="reset" class="btn btn-danger">{{TranslateResourcesService.COPY_BUTTON}}</button>