解决了这个问题。在此问题中编辑了解决方案。谢谢你" praszyk"。
我无法让Angular Translate与搜索过滤器配合使用。当语言为英语时,列表项可以用英语搜索。但是当语言在孟加拉时,这些项目仍然可以用英语搜索,但不能用于孟加拉语。有没有解决方案?
查看
<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: "francis@livingston.es",
bool: false,
avatar: "img/ionic.png"
},
{
index: 2,
index_start_at: 57,
name: "Bnd_Nilachal",
surname: "Shayes",
fullname: "Srace Beatty",
email: "shuvo@livingston.es",
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');
答案 0 :(得分: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: "francis@livingston.es",
bool: false,
avatar: "img/ionic.png"
},
{
index: 2,
index_start_at: 57,
name: "Bnd_Nilachal",
surname: "Shayes",
fullname: "Srace Beatty",
email: "shuvo@livingston.es",
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