1

ПОЛОЖЕНИЕ:AngularJs: Как перевести объект даты?

Я использую angular-translate для моего приложения, и он прекрасно работает.

Единственное, чего не хватает, это перевести объект даты. В приложении есть повестка дня, в которой также отображаются названия дней («EEEE»).

Эти имена являются английскими, и я не знаю, как я могу их перевести на другие языки.

КОД:

Это простой вид отображения объекта дата в 'EEEE':

<span class="day">{{ day | date : 'EEEE'}}</span> 

В результате получается нечто вроде

среда - четверг - и т.д. ..

Это пример того, как я использую угловое преобразование Сланец в других частях приложения:

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

ВОПРОС:

Как я могу перевести объект даты?

Есть простой способ сделать это?

спасибо!

ответ

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> 
+0

Я нашел в документации много хороших форматов HTTP://momentjs.com/docs/#/displaying/format/, но не нашел, как именно я могу попробовать ПЕРЕВОДИТЬ имя дня – johnnyfittizio

0

Вы можете сделать это с (например, для французского):

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

Угловой имеет модуль под названием ngLocale (щелкните ссылку для исходного кода).

Если вы предоставите соответствующий файл локали, он будет автоматически переводить целый ряд вещей в встроенных угловых фильтров, таких как дата, валюта, время и т.д.

Я использую угловой переводить в сочетании с 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()); 
    }); 
} 
0

Я попытался угловой момент. Есть много удивительных форматов для даты, но не нашел, как на самом деле перевести формат даты «EEEE». Я посмотрел два дня на возможные решения, но не нашел никаких реальных.

Мне нужно быстрое решение, поэтому я сделал директиву. Это громоздкое решение, но по крайней мере сейчас работает. Ждем лучших решений.

Если у вас есть какие-либо вопросы, я обязательно проверю ваш ответ.

Вот код с комментариями:

ВЗГЛЯД:

<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; 
       } 
      } 
     }); 
    } 
} 
}); 
Смежные вопросы