1

在我的 AngularJS 应用程序中,我使用 angular translate 来实现国际化。

但它不适用于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>
4

1 回答 1

1

您不需要查看范围,translation-texts它们提供的属性仅在构建 dom 期间有效。您可以通过在每次更改语言时重建选择来使用技巧。

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);
    });

一个工作的 plunker https://embed.plnkr.co/2psHUD/

于 2017-08-02T03:14:03.647 回答