如何角度转换控制器函数对象

时间:2016-05-20 00:27:49

标签: angularjs angular-translate

我找不到如何翻译函数内部对象的示例,仅用于翻译html内容的示例。 功能内部是需要翻译的系统按钮标签。我提供了实际的en.json和th.json文件来显示需要翻译的内容。我找不到像这个函数那样翻译非html对象的angular-translate的例子。我设法让翻译工作在我的应用程序的所有其他方面,但不是这个功能。文档http://angular-translate.github.io/docs/#/guide/03_using-translate-service没有提供适合我的代码的好例子。我见过其他人问这个类型的问题,只是指向文档(即https://github.com/angular-translate/angular-translate/issues/1466)。

en.json

{
  "CHOOSE_IMAGE": "Choose image source",
  "CAMERA": "Camera",
  "LIBRARY": "Library",
  "CANCEL": "Cancel"
}

th.json

{
  "CHOOSE_IMAGE": "เลือกที่มาของภาพ",
  "CAMERA": "กล้อง",
  "LIBRARY": "คลังรูปภาพี่ี",
  "CANCEL": "ยกเลิก"
}

feedback.controller.js

...
            function getImageSource() {
                var deferred = $q.defer();

                $ionicActionSheet.show({
                    buttons: [
                        { text: 'CAMERA' },
                        { text: 'LIBRARY' }
                    ],
                    titleText: 'CHOOSE_IMAGE',
                    cancelText: 'CANCEL',
                    cancel: function () {
                        deferred.reject();
                    },
                    buttonClicked: function (index) {
                        if (index === 0) {
                            deferred.resolve(Camera.PictureSourceType.CAMERA);
                        } else {
                            deferred.resolve(Camera.PictureSourceType.PHOTOLIBRARY);
                        }
                        return true;
                    }
                });

                return deferred.promise;
            }
...

2 个答案:

答案 0 :(得分:0)

嗯,显然所有必要的信息都在文档中。但是,让我做你的工作..

您必须在控制器中注入$translate服务。假设您已经加载了翻译,最方便的翻译标签的方法是使用$translate.instant()方法。它做了什么?

根据文档http://angular-translate.github.io/docs/#/api/pascalprecht.translate。$翻译它:

  

立即从加载的翻译的内部状态返回翻译。除了任何承诺处理之外,所有关于当前语言的规则,甚至是后备语言的首选语言都将被使用。如果找不到语言,将在后台调用异步加载。

所以你的代码应该是这样的:

<强> feedback.controller.js

...
        function getImageSource() {
            var deferred = $q.defer();

            $ionicActionSheet.show({
                buttons: [
                    { text: $translate.instant('CAMERA') },
                    { text: $translate.instant('LIBRARY') }
                ],
                titleText: $translate.instant('CHOOSE_IMAGE'),
                cancelText: $translate.instant('CANCEL'),
                cancel: function () {
                    deferred.reject();
                },
                buttonClicked: function (index) {
                    if (index === 0) {
                        deferred.resolve(Camera.PictureSourceType.CAMERA);
                    } else {
                        deferred.resolve(Camera.PictureSourceType.PHOTOLIBRARY);
                    }
                    return true;
                }
            });

            return deferred.promise;
        }
...

或者您可以使用异步加载:

<强> feedback.controller.js

....
        $translate(['CAMERA', 
                    'LIBRARY',
                    'CHOOSE_IMAGE',
                    'CANCEL']).then(function (translations) {

        $ionicActionSheet.show({
            buttons: [
                { text: $translate.instant('CAMERA') },
                { text: $translate.instant('LIBRARY') }
            ],

....

希望它有所帮助。

答案 1 :(得分:0)

使用过滤功能

.controller(["$filter",....],function($filter,....){
var translateFilter=$filter("translate");
...
buttons: [
                        { text: translateFilter('CAMERA') },
                        { text: translateFilter('LIBRARY') }
                    ]
...

})

或翻译尚未加载

.controller(["$q","$translate",....],function($q,$translate,....){
var translateFilter=$filter("translate");

$q.all({
CAMERA:$translate('CAMERA'),
LIBRARY:$translate('CAMERA')
}).then(function(translations){
...
buttons: [
                        { text: translations.CAMERA },
                        { text: translations.LIBRARY }
                    ]
...
})
})