AngularJs:如何翻译日期对象?

时间:2016-06-10 08:57:18

标签: javascript angularjs date ionic-framework angular-translate

情况:

我正在为我的应用程序使用angular-translate,它运行正常。

唯一缺少的是翻译日期对象。 在应用程序中,有一个日程表还显示了日期的名称(' EEEE')。

这些名字是英文的,我不知道如何用其他语言翻译它们。

代码:

这是在“EEEE':

中显示日期对象的简单视图
<span class="day">{{ day | date : 'EEEE'}}</span>

结果类似于

周三 - 周四 - 等..

这是我在应用程序其他部分使用angular-translate的示例:

<span class="input-label" ng-bind-html="'EMAIL' | translate"></span>
<span class="input-label" ng-bind-html="'PASSWORD' | translate"></span>

问题:

我如何翻译日期对象?

有一种简单的方法可以做到吗?

非常感谢!

4 个答案:

答案 0 :(得分:2)

您可以将moment.js与翻译结合使用。还有angular version

首先,您需要将文件添加到html文件中:

<script src="moment/moment.js"></script>
<script src="moment/locale/fr.js"></script>
<script src="moment/locale/de.js"></script>
<script src="angular-moment.js"></script>

然后你需要配置语言环境:

angular.module('core', ['angularMoment']).config(config);

config.$inject = ['moment'];

function config(moment) {
    moment.changeLocale('fr');
}

然后你就可以使用角度矩了:

<span>{{day |amDateFormat:'dddd'}}</span>

答案 1 :(得分:1)

你可以用(例如法语):

<span>{{date.toLocaleDateString("fr-FR",{weekday: "long"})}}</span>

答案 2 :(得分:1)

Angular有一个名为ngLocale的模块(点击源代码链接)。

如果您提供相关的区域设置文件,它将自动翻译内置Angular过滤器中的所有内容,例如日期,货币,时间等。

我使用angular-translate和tmhDynamicLocale结合使用。

我使用此块配置动态区域设置:

function appConfigBlock(tmhDynamicLocaleProvider) {
  //this needs to point to wherever you put angulars locale files.
  tmhDynamicLocaleProvider.localeLocationPattern('common/thirdparty/locale/angular-locale-{{locale}}.js');
}

并使用此块检测更改

function appRunBlock($rootScope, tmhDynamicLocale, $translate){
  $rootScope.$on('$translateChangeSuccess', function () {
    tmhDynamicLocale.set($translate.use());
  });
}

答案 3 :(得分:1)

我尝试了角度瞬间。有许多令人敬畏的日期格式,但没有找到如何实际翻译日期格式&#39; EEEE&#39;。 我看了两天可能的解决方案,但没有找到任何实际解决方案。

我需要一个快速的解决方案,所以我做了一个指令。 这是一个麻烦的解决方案,但至少目前是有效的。 期待更好的解决方案。

如果你有任何我会检查你的答案是否正确。

以下是带注释的代码:

观点:

<div translate-date-object>
    <span class="day">{{ day | date : 'EEEE'}}</span>
</div>

指令:

.directive('translateDateObject', function($timeout) {
return {
    controller: function ($scope) {
        return {};
    },
    requires: 'translateDateObject',
    link: function(scope, element, attrs, thisController) {

        $timeout(function() {

            thisController.html = element[0].innerHTML;

            // CLEAN THE STRING TO GET A CLEAN NAME DAY
            var content_temp1 = thisController.html.replace('<span class="day ng-binding">','');
            var content_temp2 = content_temp1.replace('</span>','').toLowerCase();

            var day_name = '';

            for (var i = 0, len = content_temp2.length; i < len; i++) 
            {
                // CHECK IF IS A CHAR
                if (content_temp2[i].match(/[a-z]/i)) 
                {
                    day_name += content_temp2[i];
                }
            }

            // CHECK THE ACTIVE LANGUAGE
            if (localStorage['language_code'] == 'tr') 
            {
                // ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
                switch(day_name) 
                {
                    case 'monday':
                        element.html('<span class="day">Pazartesi</span>');
                    break;
                    case 'tuesday':
                        element.html('<span class="day">Salı</span>');
                    break;
                    case 'wednesday':
                        element.html('<span class="day">Çarsamba</span>');
                    break;
                    case 'thursday':
                        element.html('<span class="day">Persembe</span>');
                    break;
                    case 'friday':
                        element.html('<span class="day">Cuma</span>');
                    break;
                    case 'saturday':
                        element.html('<span class="day">Cumartesi</span>');
                    break;
                    case 'sunday':
                        element.html('<span class="day">Pazar</span>');
                    break;  
                }
            }
        });
    }
}
});