Client Side localization
diff --git a/src/Coevery.Web/Core/Common/Services/AutoLoadResourceFilter.cs b/src/Coevery.Web/Core/Common/Services/AutoLoadResourceFilter.cs
index 370c514..ae72db3 100644
--- a/src/Coevery.Web/Core/Common/Services/AutoLoadResourceFilter.cs
+++ b/src/Coevery.Web/Core/Common/Services/AutoLoadResourceFilter.cs
@@ -4,6 +4,7 @@
 using System.Web;
 using System.Web.Mvc;
 using Coevery.DisplayManagement;
+using Coevery.DisplayManagement.Shapes;
 using Coevery.Mvc.Filters;
 
 namespace Coevery.Core.Common.Services
@@ -30,9 +31,10 @@
                 return;
 
             var ctx = _workContextAccessor.GetContext();
-            var footer = ctx.Layout.Footer;
-            var resource = _autoLoadResourceProviders.SelectMany<IAutoLoadResourceProvider, dynamic>(x => x.GetResources(_shapeFactory));
-            footer.AddRange(resource);
+            var resources = _autoLoadResourceProviders.SelectMany<IAutoLoadResourceProvider, dynamic>(x => x.GetResources(_shapeFactory));
+            foreach (var o in resources) {
+                ctx.Layout.Footer.Add(o);
+            }
         }
 
         public void OnResultExecuted(ResultExecutedContext filterContext) {
diff --git a/src/Coevery.Web/Modules/Coevery.Common/Scripts/directives/jqGrid-directive.js b/src/Coevery.Web/Modules/Coevery.Common/Scripts/directives/jqGrid-directive.js
index 2db9e49..02612db 100644
--- a/src/Coevery.Web/Modules/Coevery.Common/Scripts/directives/jqGrid-directive.js
+++ b/src/Coevery.Web/Modules/Coevery.Common/Scripts/directives/jqGrid-directive.js
@@ -149,7 +149,7 @@
     }]);
 
     gridz.directive("agGrid", [
-        "$rootScope", "$compile", "logger", "$http", function ($rootScope, $compile, logger, $http) {
+        "$rootScope", "$compile", "logger", "$http", '$i18next', function ($rootScope, $compile, logger, $http, $i18next) {
             var link;
             link = function ($scope, $element, attrs, gridCtrl) {
                 var alias, initializeGrid, loadGrid;
@@ -181,6 +181,8 @@
                             pager = $(gridOptions.pager + '_center');
                             if (pager.find(".custom-pager").length === 0) {
                                 var pagerOption = {
+                                    prevText: $i18next('Prev'),
+                                    nextText: $i18next('Next'),
                                     items: $grid.getGridParam("records"),
                                     itemsOnPage: $grid.getGridParam("rowNum"),
                                     currentPage: $grid.getGridParam("page"),
diff --git a/src/Coevery.Web/Modules/Coevery.Common/Views/ClientBootstrapScript.cshtml b/src/Coevery.Web/Modules/Coevery.Common/Views/ClientBootstrapScript.cshtml
index c8e90ed..6c047d3 100644
--- a/src/Coevery.Web/Modules/Coevery.Common/Views/ClientBootstrapScript.cshtml
+++ b/src/Coevery.Web/Modules/Coevery.Common/Views/ClientBootstrapScript.cshtml
@@ -20,7 +20,14 @@
             //Now load code.
             require(['@Url.Content("~/Modules/Coevery.Common/scripts/app/main.js")']);
         }());
-        //]]>
+    //]]>
+
+    angular.module('jm.i18next').config(['$i18nextProvider', function ($i18nextProvider) {
+        var resources = {
+            dev: { translation: { } }
+        };
+        $i18nextProvider.options = { resStore: resources };
+    }]);
     var coevery = angular.module('coevery', ['ng', 'ngResource', 'agt.couchPotato', 'ui.router', 'ui.utils',
         '@layoutDirectiveName', 'coevery.grid', 'coevery.picklist', 'angular-underscore', 'ui.bootstrap', 'jm.i18next',
         'coevery.common', 'coevery.wizard', 'coevery.Busy', 'coevery.dependency'@if(Model.IsFrontEnd){<text>, 'coevery.filter'</text>}]);
diff --git a/src/Coevery.Web/Modules/Coevery.Common/Views/Common.JavascriptLocalizationResource.cshtml b/src/Coevery.Web/Modules/Coevery.Common/Views/Common.JavascriptLocalizationResource.cshtml
index 2ce48f2..93a1f74 100644
--- a/src/Coevery.Web/Modules/Coevery.Common/Views/Common.JavascriptLocalizationResource.cshtml
+++ b/src/Coevery.Web/Modules/Coevery.Common/Views/Common.JavascriptLocalizationResource.cshtml
@@ -1,17 +1,19 @@
-@{
-    var deleteConfirm = T("Delete Confirm");
-    var s = "";
-    s.ToCharArray();
+
+@using (Script.Foot()) {
+    <script>
+      
+        angular.module('jm.i18next').config(['$i18nextProvider', function ($i18nextProvider) {
+            var translations = {
+                'Delete Confirm': '@T("Delete Confirm")',
+                'No': '@T("No")',
+                'Yes': '@T("Yes")'
+            };
+            var resources = {
+                dev: { translation: translations }
+            };
+            $.extend(true, $i18nextProvider.options, { resStore: resources });
+        }]);
+
+    </script>
 }
 
-<script>
-    (function() {
-        var additionalResources = {
-            'Delete Confirm': '@T("Delete Confirm")',
-            'No': '@T("No")',
-            'Yes': '@T("Yes")'
-        };
-        i18n.addResourceBundle('dev', 'translation', additionalResources);
-    })();
-
-</script>
\ No newline at end of file
diff --git a/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/Detail.cshtml b/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/Detail.cshtml
index cca0ae0..ddbba72 100644
--- a/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/Detail.cshtml
+++ b/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/Detail.cshtml
@@ -12,7 +12,7 @@
             <button class="btn btn-small" data-ng-click="publish()">
                 Publish
             </button>
-            <button type="button" class="btn btn-small" co-delete-button confirm-message="You really want to delete this entity?" delete-action="delete(@Model.Id)">
+            <button type="button" class="btn btn-small" co-delete-button data-confirm-message="@T("You really want to delete this entity?") delete-action="delete(@Model.Id)">
                 <i class="icon-remove"></i>&nbsp;Delete
             </button>
             <button type="button" data-ng-disabled="isPublished=='False'"
diff --git a/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/List.cshtml b/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/List.cshtml
index 46fabc9..5a5cc43 100644
--- a/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/List.cshtml
+++ b/src/Coevery.Web/Modules/Coevery.Entities/Views/SystemAdmin/List.cshtml
@@ -18,7 +18,7 @@
                 <button class="btn btn-small" data-ng-click="publish()" ng-disabled="selectedItems.length > 1">
                     Publish
                 </button>
-                <button class="btn btn-small" co-delete-button confirm-message="You really want to delete this entity?" delete-action="delete()">
+                <button class="btn btn-small" co-delete-button confirm-message="@T("You really want to delete this entity?")" delete-action="delete()">
                     <i class="icon-remove"></i>&nbsp;Delete
                 </button>
             </div>
diff --git a/src/Coevery.Web/Modules/Coevery.Projections/Coevery.Projections.csproj b/src/Coevery.Web/Modules/Coevery.Projections/Coevery.Projections.csproj
index c18b7e3..f9b323f 100644
--- a/src/Coevery.Web/Modules/Coevery.Projections/Coevery.Projections.csproj
+++ b/src/Coevery.Web/Modules/Coevery.Projections/Coevery.Projections.csproj
@@ -234,6 +234,7 @@
     <Compile Include="Services\IQueryService.cs" />
     <Compile Include="Services\ISortCriteriaProvider.cs" />
     <Compile Include="Services\ISortService.cs" />
+    <Compile Include="Services\JavascriptLocalizationResourceProvider.cs" />
     <Compile Include="Services\LayoutProvider.cs" />
     <Compile Include="Services\ProjectionManager.cs" />
     <Compile Include="Services\ProjectionService.cs" />
@@ -392,6 +393,9 @@
   <ItemGroup>
     <Content Include="Views\jqGrid.Script.cshtml" />
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="Views\Projection.JavascriptLocalizationResource.cshtml" />
+  </ItemGroup>
   <PropertyGroup>
     <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
     <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
diff --git a/src/Coevery.Web/Modules/Coevery.Projections/Services/JavascriptLocalizationResourceProvider.cs b/src/Coevery.Web/Modules/Coevery.Projections/Services/JavascriptLocalizationResourceProvider.cs
new file mode 100644
index 0000000..9deaa1a
--- /dev/null
+++ b/src/Coevery.Web/Modules/Coevery.Projections/Services/JavascriptLocalizationResourceProvider.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Coevery.Core.Common.Services;
+
+namespace Coevery.Projections.Services {
+    public class JavascriptLocalizationResourceProvider : IAutoLoadResourceProvider {
+        public IEnumerable<dynamic> GetResources(dynamic shapeHelper) {
+            yield return shapeHelper.Projection_JavascriptLocalizationResource();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Coevery.Web/Modules/Coevery.Projections/Views/Parts/ListView.Buttons.cshtml b/src/Coevery.Web/Modules/Coevery.Projections/Views/Parts/ListView.Buttons.cshtml
index 71504c2..1068df8 100644
--- a/src/Coevery.Web/Modules/Coevery.Projections/Views/Parts/ListView.Buttons.cshtml
+++ b/src/Coevery.Web/Modules/Coevery.Projections/Views/Parts/ListView.Buttons.cshtml
@@ -8,7 +8,7 @@
     <button class="btn btn-small" data-ng-click="edit(selectedItems[0])" data-ng-disabled="selectedItems.length > 1">
         <i class="icon-edit"></i>&nbsp;@T("Edit")
     </button>
-    <button class="btn btn-small" co-delete-button confirm-message="You really want to delete this entity?" delete-action="delete()">
+    <button class="btn btn-small" co-delete-button confirm-message="@T("You really want to delete this entity?") delete-action="delete()">
         <i class="icon-remove"></i>&nbsp;@T("Delete")
     </button>
 </div>
\ No newline at end of file
diff --git a/src/Coevery.Web/Modules/Coevery.Projections/Views/Projection.JavascriptLocalizationResource.cshtml b/src/Coevery.Web/Modules/Coevery.Projections/Views/Projection.JavascriptLocalizationResource.cshtml
new file mode 100644
index 0000000..19f4f11
--- /dev/null
+++ b/src/Coevery.Web/Modules/Coevery.Projections/Views/Projection.JavascriptLocalizationResource.cshtml
@@ -0,0 +1,20 @@
+
+@using (Script.Foot()) {
+    <script>
+      
+        angular.module('jm.i18next').config(['$i18nextProvider', function ($i18nextProvider) {
+            var translations = {
+                'Prev': '@T("Prev")',
+                'Next': '@T("Next")'
+            };
+            var resources = {
+                dev: { translation: translations }
+            };
+            
+            debugger;
+            $.extend(true, $i18nextProvider.options, { resStore: resources });
+        }]);
+
+    </script>
+}
+
diff --git a/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/culturecontroller.js b/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/culturecontroller.js
index f050a3d..65566aa 100644
--- a/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/culturecontroller.js
+++ b/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/culturecontroller.js
@@ -1,5 +1,5 @@
 'use strict';
-define(['core/app/detourService', 'Modules/Coevery.Translations/Scripts/services/columnDefinitionService'], function (detour) {
+define(['core/app/detourService'], function (detour) {
     detour.registerController([
       'TranslationCultureCtrl',
       ['$rootScope', '$scope', 'logger', '$state', '$stateParams', '$i18next',
@@ -8,7 +8,7 @@
 
               $scope.FetchDefinitionViews = function () {
                   var metadataColumnDefs = [
-                      { name: 'Path', label: $i18next('Path'), hidden: true },
+                      { name: 'Path', label: $i18next('Path'), hidden: true, key: true },
                       { name: 'Module', label: $i18next('Module'), formatoptions: { hasView: true } },
                       { name: 'Total', label: $i18next('Total') },
                       { name: 'Translated', label: $i18next('Translated') },
diff --git a/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/listcontroller.js b/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/listcontroller.js
index cff671d..aecd3c6 100644
--- a/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/listcontroller.js
+++ b/src/Coevery.Web/Modules/Coevery.Translations/Scripts/controllers/listcontroller.js
@@ -7,7 +7,7 @@
 
           $scope.FetchDefinitionViews = function() {
               var columnDefs = [
-                  { name: 'Culture', label: $i18next('Culture'), hidden: true },
+                  { name: 'Culture', label: $i18next('Culture'), hidden: true, key: true },
                   {
                       name: 'CultureDisplay',
                       label: $i18next('Culture'),