Сценарий ввода для i18n в приложении с угловым выражением

Я хотел бы использовать i18n и i10n в своем приложении Angular. Если бы я правильно понял, я мог бы добавить скрипт в свой index.html и изменения в отношении языка будут меняться "на лету". Я тестировал его, и он работает, когда я вручную добавил скрипт и обновил страницу.

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

app.controller('appController', ['$scope', '$route', 'UserTopBarWidget', 
 function($scope, $route, UserTopBarWidgetService){

 $scope.topBarWidget = UserTopBarWidget;
 $scope.topBarWidget.loadTopBarWidget();

 }
}]);

В этом файле я просто загружаю созданный UserTopBarWidget сервис под названием UserTopBarWidget. UserTopBarWidget:

app.service('UserTopBarWidgetService', function($http){
 this.loadTopBarWidget = function(){
 //loading something
};


this.loadPortugueseLanguage = function(){
 var locale = "pt-pt";
 $.getScript("https://code.angularjs.org/1.2.16/i18n/angular-locale_" + locale + ".js");
}
});

У меня есть страница html, называемая index.html и вставляю в нее мои html файлы:

index.html:

Введенный html:

<button type="button" id="searchButton" ng-click="topBarWidget.loadPortugueseLanguage()">Portugese</button>

<h2>{{date | date: 'fullDate' }}</h2>
<h2>{{money | currency}}</h2>

Ответ:

Tuesday, June 10, 2014
$500.00

Я бы хотел посмотреть на португальском. Что я делаю не так?

2 ответа

Вопрос

В чистом угловом режиме нет возможности динамически менять локаль, вы можете сделать это только на уровне начальной загрузки, но есть несколько проектов, которые реализуют эту функциональность. Это особенно хорошо ИМХО

https://github.com/lgalfaso/angular-dynamic-locale


На самом деле есть два возможных решения вашей проблемы.

Один из них - использовать угло -динамическую локаль, как уже объяснил @maurycy. Это не самое чистое решение, о котором я могу думать, но это лучше, чем ничего.

Другое возможное решение состоит в том, чтобы создать свой собственный, используя, например, другую специализированную библиотеку i18n, например iLib. Зачем вам это делать? Ну, встроенные функции AngularJS i18n не позволяют обрабатывать другие календари, часовые пояса и проценты форматирования. Это серьезные недостатки. Тот факт, что вы не можете переопределить язык форматирования на основе профиля пользователя (или можете, но забыл о кешировании веб-сайтов), является другим.

Я рекомендую использовать пользовательское решение на основе iLib (я рекомендовал Globalize, но после недавних изменений кажется немного бесполезным) в сочетании с угловым переводом для перевода пользовательского интерфейса и встроенной угловой локали для обработки множественных форм (на момент написания angular-translate не справляется с этим особенно хорошо).

licensed under cc by-sa 3.0 with attribution.