Угловой перевод и форматирование даты: как перевести название месяца?

В моем приложении я использую angular-translate

https://github.com/angular-translate/angular-translate

за перевод моего контента.

А также, на мой взгляд, у меня есть такой форматировщик даты:

{{article.CreatedAt | date:'dd MMM yyyy':'UTC'}}

но когда я устанавливаю польский, русский (или любой другой язык, кроме английского) - мои названия месяцев все еще на английском языке.

Как я могу их перевести (было бы здорово, если бы это можно было сделать без импульса и других плагинов...)?


person brabertaser19    schedule 22.12.2015    source источник
comment
попробуйте этот планкр из похожего поста plnkr.co/edit/AFpj79M1C6vOewSWLX8J   -  person Jared    schedule 23.12.2015
comment
@ Джаред will be great, if this is doneable without momentum and other plugins. второе: у меня нет календаря пользовательского интерфейса...   -  person brabertaser19    schedule 23.12.2015
comment
Они используют i18n и ngLocale, я не думаю, что вам нужен импульс. Посмотрите на файл ng-fr-ca.js.   -  person Jared    schedule 23.12.2015
comment
Я думаю, что ваш вопрос является дубликатом stackoverflow.com/questions /29937780/   -  person Jared    schedule 23.12.2015
comment
Вы загрузили локаль для используемых языков? Они содержат переводы, которые вы ищете. github.com/angular/angular.js/tree/master/src/ ngLocale   -  person Jared    schedule 23.12.2015
comment
@ Джаред, я загрузил все эти места. Но затем он переводит названия месяцев в зависимости от языка браузера. И это неправильно. Он должен быть переведен из-за настроек языка angular-translate.   -  person brabertaser19    schedule 23.12.2015
comment
Похоже, вам нужно использовать угловую динамическую локаль, чтобы вы могли установить локаль во время выполнения. Вы не можете установить его во время выполнения с помощью ngLocale.   -  person Jared    schedule 23.12.2015
comment
FWIW angular-translate НЕ переводит какие-либо настройки даты или времени, для этого вы должны использовать ngLocale или angular-dynamic-locale. В вашем случае вы ДОЛЖНЫ использовать последний, angular-dynamic-locale, для достижения своей цели. Насколько мне известно, другого пути нет. Ссылка: github.com/lgalfaso/angular-dynamic-locale   -  person Jared    schedule 23.12.2015
comment
@Джаред, хорошо, спасибо, я попробую...   -  person brabertaser19    schedule 23.12.2015
comment
Это stackoverflow.com/questions/29937780/ что ты ищешь?   -  person Tome Pejoski    schedule 29.12.2015
comment
@tomepejo нет! это не   -  person brabertaser19    schedule 30.12.2015
comment
Вы должны взглянуть на эту проблему GitHub: github.com/angular/ angular.js/tree/master/src/ngLocale   -  person Avijit Gupta    schedule 01.01.2016


Ответы (2)


Для динамического изменения локали приложения вам потребуется angular-dynamic-locale, а также другие файлы локали. (английский идет с angular) из ngLocale.

Здесь работает плункер.

Вам нужно поймать события перевода, так как мы хотим изменить локаль при смене языка. Поэтому для этой цели я использовал событие $translateChangeSuccess, чтобы установить выбранный язык в качестве новой локали.

$rootScope.$on('$translateChangeSuccess', function (event, data) {
    tmhDynamicLocale.set(data.language);
});

Вот список всех событий $translate.

person Poyraz Yilmaz    schedule 30.12.2015

Вам не нужна внешняя библиотека, в угловом формате даты и числа переводятся с помощью angular-i18n: https://docs.angularjs.org/guide/i18n

Например, чтобы получить дату на русском языке, просто включите файл локали после angular:

<script src="angular.js"></script>
<script src="angular-locale_ru-ru.js"></script>

Конечно, это не будет динамическим, вы можете управлять им на стороне сервера или найти другой трюк.

чтобы получить его от беседки, используйте

$ bower install angular-i18n

см. Где файлы AngularJS I18n?

person pdem    schedule 04.01.2016
comment
нет... в моем случае это плохая идея (потому что мне нужно видеть название месяца без точки, с заглавной буквы и т.д...) - person brabertaser19; 11.01.2016
comment
Если это точка из формата, вы можете указать свой собственный: из документации: 'longDate': эквивалентно 'MMMM d, y' для локали en_US (например, 3 сентября 2010 г.), поэтому используйте 'MMMM', чтобы иметь полный месяц название. Возможно, я не понимаю ваших потребностей, и этого недостаточно, в этом случае вы можете создать свой собственный перевод, вдохновленный исходным кодом библиотек angular: используйте $provide.value($locale, { DATETIME_FORMATS: { AMPMS: [ AM, PM ], ДЕНЬ: [ dimanche, lundi, mardi, mercredi, jeudi, vendredi, Samedi ... - person pdem; 11.01.2016