Ionic: Как да накарам Angular Translate js да работи с филтъра за търсене при промяна на езика?

Проблемът е решен. Решението е редактирано в този въпрос. Благодаря ти "praszyk".

Не мога да накарам Angular Translate да работи с филтъра за търсене. Когато езикът е английски, елементите от списъка могат да се търсят на английски, както обикновено. Но когато езикът е на Bangla, елементите все още могат да се търсят на английски, но не и на Bangla. Има ли някакво решение?

Преглед

<ion-list>
            <ion-item>
              <label class="item item-input">
                <i class="icon ion-search placeholder-icon"></i>
                <input type="text" ng-model="input.filterUser" placeholder="Search">
              </label>
            </ion-item>
              <ion-item class="item-avatar" ng-repeat="user in groups | filter:input.filterUser">
                <img src="{{user.avatar}}">           
                <h2>{{user.name | translate}}</h2>
                <p>{{user.fullname}}
                  {{user.email}}</p>       
              </ion-item>        
          </ion-list>

Контролер

.controller('CreditCtrl', function($scope, $ionicConfig, $translate) {

  $scope.input = {};  
  $scope.groups = [
  {
  index: 1,
  index_start_at: 56,
  name:  "Bnd_Nilgiri",
  surname: "Hayes",
  fullname: "Grace Beatty",
  email: "[email protected]",
  bool: false,
  avatar: "img/ionic.png"
  },
  {
  index: 2,
  index_start_at: 57,
  name: "Bnd_Nilachal",
  surname: "Shayes",
  fullname: "Srace Beatty",
  email: "[email protected]",
  bool: false,
  avatar: "img/ionic.png"
  }
];



 angular.forEach($scope.groups, function(user, index){
      $translate(user.name, {user: user}).then(function(translated){
        $scope.groups[index].name = translated;
      });
    });

})

Доставчик на преводи

.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider, $translateProvider) {

 $translateProvider.translations('en', {
    Bnd_Nilgiri : 'Nilgiri Tourspot',
    Bnd_Nilachal : 'Nilachal Tourspot',
    Bnd_Bogalake : 'Bogalake Tourspot',    
  });
  $translateProvider.translations('de', {
    // Bandarban Tour Spots

    Bnd_Nilgiri : 'নিলগিরি ট্যুর স্পট',
    Bnd_Nilachal : 'নিলাচল ট্যুর স্পট',
    Bnd_Bogalake : 'বগালেক ট্যুর স্পট',
  });
  $translateProvider.preferredLanguage('en');

person Shuvo Habib    schedule 28.09.2015    source източник


Отговори (1)


Това е така, защото вашият | translate филтър се прилага след ъгловия филтър.

Единственото възможно решение би било масивът groups да се преведе предварително. Ще трябва да използвате услугата $translate във вашия контролер, преди да я приложите към променливата groups:

var en_translations =  {
    Bnd_Nilgiri : 'Nilgiri Tourspot',
    Bnd_Nilachal : 'Nilachal Tourspot',
    Bnd_Bogalake : 'Bogalake Tourspot',    
}

var de_translations = {
    Bnd_Nilgiri : 'নিলগিরি ট্যুর স্পট',
    Bnd_Nilachal : 'নিলাচল ট্যুর স্পট',
    Bnd_Bogalake : 'বগালেক ট্যুর স্পট',
};


var app = angular.module('myApp', ['pascalprecht.translate']);

app.config(['$translateProvider', function ($translateProvider) {
  // add translation table
  $translateProvider
    .translations('en', en_translations)
    .translations('de', de_translations)
    .preferredLanguage('de');
}]);

app.controller('Ctrl', ['$scope', '$translate', function ($scope, $translate) {
  // expose translation via `$translate` service
  $scope.groups =  [
    {
      index: 1,
      index_start_at: 56,
      name:  "Bnd_Nilgiri",
      surname: "Hayes",
      fullname: "Grace Beatty",
      email: "[email protected]",
      bool: false,
      avatar: "img/ionic.png"
    },
    {
      index: 2,
      index_start_at: 57,
      name: "Bnd_Nilachal",
      surname: "Shayes",
      fullname: "Srace Beatty",
      email: "[email protected]",
      bool: false,
      avatar: "img/ionic.png"
    }
  ];
  angular.forEach($scope.groups, function(user, index){
    $translate(user.name, {user: user}).then(function(translated){
      $scope.groups[index].name = translated;
    });
  });

}]);

Не съм тествал кода, но това е начинът да се търкаля тук, който си представям. По принцип filter:input.filterUser работи с масива $scope.groups, който все още не е преведен, така че трябва да го преведете, преди да се осъществи ng-repeat.

РЕДАКТИРАНЕ: Направих plunkr тук, за да покажа кода по-горе: http://plnkr.co/edit/sVgUIlFxfs6pDsdR2ydQ

person Pascal Raszyk    schedule 28.09.2015
comment
Благодаря ти praszyk, че отдели време и отговори на въпроса ми. Моят контролер е като кода на въпроса, току-що редактирах. Моля те, погледни. - person Shuvo Habib; 28.09.2015
comment
Можете ли да публикувате части от вашия обект за превод? - person Pascal Raszyk; 28.09.2015
comment
1 минута . Пак редактирам въпроса. Благодаря предварително. - person Shuvo Habib; 28.09.2015
comment
Съжалявам за късния отговор. Благодаря ти много. Работи. - person Shuvo Habib; 09.10.2015