<!DOCTYPE html>
<html ng-app="myApp">
<head>
<link data-require="jasmine@2.2.1" data-semver="2.2.1" rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.css" />
<script data-require="jasmine@2.2.1" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.js"></script>
<script data-require="jasmine@2.2.1" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine-html.js"></script>
<script data-require="jasmine@2.2.1" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/boot.js"></script>
<script data-require="angular.js@1.4.8" data-semver="1.4.8" src="https://code.angularjs.org/1.4.8/angular.js"></script>
<script data-require="angular-route@1.4.8" data-semver="1.4.8" src="https://code.angularjs.org/1.4.8/angular-route.js"></script>
<script data-require="angular-translate@2.6.0" data-semver="2.6.0" src="https://cdn.rawgit.com/angular-translate/bower-angular-translate/2.6.0/angular-translate.js"></script>
<script data-require="angular-translate-loader-partial@2.0.1" data-semver="2.0.1" src="https://rawgit.com/PascalPrecht/bower-angular-translate-loader-partial/master/angular-translate-loader-partial.js"></script>
<script data-require="angular-mocks@1.4.3" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular-mocks.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
<script src="view1mod.js"></script>
<script src="view2mod.js"></script>
<script src="view1.spec.js"></script>
<title translate="">WELCOME</title>
</head>
<body>
<div ng-view=""></div>
<a href="#/view1">{{ 'VIEW' | translate:'{ value: 1 }' }}</a>
<br />
<a href="#/view2">{{ 'VIEW' | translate:'{ value: 2 }' }}</a>
</body>
</html>
// Code goes here
(function() {
var app = angular.module('myApp', [
'ngRoute',
'pascalprecht.translate',
'myApp.view1',
'myApp.view2'
]);
app.config(['$httpProvider', '$routeProvider', '$translateProvider', '$translatePartialLoaderProvider',
function($httpProvider, $routeProvider, $translateProvider, $translatePartialLoaderProvider) {
// default route
$routeProvider.otherwise({
redirectTo: '/view1'
});
// process translation output to ensure no malicious scripts get injected
$translateProvider.useSanitizeValueStrategy('escape');
$translatePartialLoaderProvider.addPart('home');
$translateProvider.useLoader('$translatePartialLoader', {
urlTemplate: '{part}-{lang}.json'
});
$translateProvider.preferredLanguage('en');
}
]);
app.run(function ($rootScope, $translate) {
$rootScope.$on('$translatePartialLoaderStructureChanged', function () {
$translate.refresh();
});
});
})();
/* Styles go here */
<h1 translate>VIEW1TITLE</h1>
<p>{{dt}}</p>
<h1 translate>VIEW2TITLE</h1>
{
"WELCOME":"Welcome",
"VIEW":"View {{value}}"
}
{
"WELCOME":"Bem-vindo",
"VIEW":"Vista {{value}}"
}
{
"VIEW1TITLE":"View 1 Title"
}
{
"VIEW1TITLE":"Título da Vista 1"
}
(function() {
var view1mod = angular.module('myApp.view1', ['ngRoute']);
view1mod.config(['$routeProvider', '$translatePartialLoaderProvider', function($routeProvider, $translatePartialLoaderProvider) {
$routeProvider.when('/view1', {
templateUrl: 'view1.html',
controller: 'View1Controller'
});
$translatePartialLoaderProvider.addPart('view1');
}]);
view1mod.controller('View1Controller', function($scope) {
$scope.dt = new Date();
});
})();
(function() {
"use strict";
var view2mod = angular.module('myApp.view2', ['ngRoute']);
view2mod.config(['$routeProvider', '$translatePartialLoaderProvider', function($routeProvider, $translatePartialLoaderProvider) {
$routeProvider.when('/view2', {
templateUrl: 'view2.html',
controller: 'View2Controller'
});
$translatePartialLoaderProvider.addPart('view2');
}]);
view2mod.controller('View2Controller', function($scope){
});
})();
{
"VIEW2TITLE":"View 2 Title"
}
{
"VIEWTITLE":"Título da Vista 2"
}
'use strict';
describe('myApp view1 module', function() {
beforeEach(module('myApp.view1'), function($provide, $translateProvider) {
$provide.factory('customLoader', function($q) {
return function() {
var deferred = $q.defer();
deferred.resolve({});
return deferred.promise;
};
});
$translateProvider.useLoader('customLoader');
});
describe('view1 controller', function() {
var scope, ctrl, $httpBackend;
beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
$httpBackend = _$httpBackend_;
scope = $rootScope.$new();
ctrl = $controller('View1Controller', {
$scope: scope
});
}));
it('should be defined', function() {
//spec body
expect(ctrl).toBeDefined();
});
});
});