Как использовать угловой перевод на ng-dropdown-multiselect
В моем приложении AngularJS я использовал угловой перевод для реализации интернационализации.
Но это не работает с ng-dropdown-multiselect
тексты.
Я пытался связать перевод-текст с переменными $scope и применить $scope.$ Watch для ожидания изменений, но это тоже не сработало.
Кто-то знает, как сделать это на нескольких языках?
<div
ng-dropdown-multiselect=""
options="myModelOptions"
selected-model="mySelectedItem"
extra-settings="mySettings"
translation-texts="{
'checkAll': myScopeVariable.selectAll,
'uncheckAll': myScopeVariable.selectNone,
'buttonDefaultText': myScopeVariable.selectZero,
'selectionCount': myScopeVariable.selectCount,
'dynamicButtonTextSuffix': myScopeVariable.selectSufix
}">
</div>
1 ответ
Вам не нужно смотреть область, translation-texts
Атрибуты, которые они предоставили, работают только при строительстве дома. Вы можете использовать хитрость, перестраивая выбор каждый раз, когда вы меняете язык.
1- Добавление условия для отображения выбора, для этого примера ng-if="!unready"
, И использовать translate
фильтровать напрямую.
<div ng-if="!unready" ng-dropdown-multiselect="" options="cars" selected-model="selectedCar" extra-settings="mySettings" translation-texts="{
'checkAll': ('selectAll' | translate),
'uncheckAll': ('selectNone' | translate),
'buttonDefaultText': ('selectZero' | translate),
'selectionCount': ('selectCount' | translate),
'dynamicButtonTextSuffix': ('selectSufix' | translate)
}">
</div>
2 - поймать обнаружение изменения языка, если кнопка, изменяющая его, находится не в том же контроллере, и установите переменную так, чтобы она не отображала выбор, добавив небольшой тайм-аут, чтобы отобразить его снова, чтобы выбор был повторно обработан.
$rootScope.$on('$translateChangeSuccess', function(event, current, previous) {
// Language has changed
$scope.unready = true;
$timeout(function() {
$scope.unready = false;
}, 10);
});
Работающий поршень https://embed.plnkr.co/2psHUD/