【问题标题】:How to angular-translate controller function objects如何角度平移控制器功能对象
【发布时间】:2016-05-20 14:22:31
【问题描述】:

我找不到如何翻译函数内部对象的示例,只有翻译 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;
            }
...

【问题讨论】:

    标签: angularjs angular-translate


    【解决方案1】:

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

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

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

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

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

    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') }
                ],
    
    ....
    

    希望对你有帮助。

    【讨论】:

    • "您必须在控制器中注入 $translate 服务。假设您已经加载了翻译,最方便的翻译标签的方法是使用 $translate.instant() 方法。"这就是我所缺少的。谢谢!
    【解决方案2】:

    使用过滤功能

    .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 }
                        ]
    ...
    })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多