diff --git a/.npmignore b/.npmignore
index 5c582af..a4f4ded 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,8 +1,8 @@
-/angular2-translator/*
-!/angular2-translator/*.ts
-/angular2-translator.*
-!/angular2-translator.ts
-!/angular2-translator.d.ts
+/src/*
+!/src/*.ts
+/index.*
+!/index.ts
+!/index.d.ts
/coverage/
/typings/
diff --git a/README.md b/README.md
index 3cf8f0a..1d3d22e 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,7 @@ It supports interpolation so you can:
### Refer to other translations
By referring to other translations you can make it easy to have everywhere the same text without copy and paste.
+
```json
{
"GREETING": "Hello {{name}}!",
@@ -54,6 +55,7 @@ translations (to make the files readable and better structured).
## How to use
Simple basic usage:
+
```ts
import {Component} from "angular2/core";
import {TranslateService, TranslatePipe, TranslateComponent} from "angular2-translator";
@@ -70,17 +72,69 @@ export class AppComponent {
}
}
```
+
To learn more have a look at [the documentation](https://tflori.github.io/angular2-translator/).
## How to install
### Via npm
+
First you need to install the package. The easiest way is to install it via npm:
+
```bash
npm install --save angular2-translator
```
-Then you need to tell systemjs where to load angular2-translator:
+### Manually
+
+You also can clone the repository and symlink the project folder or what ever:
+
+```bash
+git clone https://github.com/tflori/angular2-translator.git
+ln -s angular2-translator MyApp/libs/angular2-translator
+```
+
+> You should know what you do and don't follow this guide for installation.
+
+## How to use
+
+You have to set up your `NgModule` to import the `TranslatorModule` and may be configure it:
+
+```ts
+import { BrowserModule } from '@angular/platform-browser';
+import { NgModule } from '@angular/core';
+import { TranslateConfig, TranslatorModule } from "angular2-translator";
+
+import { AppComponent } from './app.component';
+
+export function translateConfigFactory() {
+ return new TranslateConfig({
+ defaultLang: "de",
+ providedLangs: [ "de", "en" ],
+ detectLanguageOnStart: false
+ });
+}
+
+@NgModule({
+ declarations: [
+ AppComponent
+ ],
+ imports: [
+ BrowserModule,
+ TranslatorModule,
+ ],
+ providers: [
+ { provide: TranslateConfig, useFactory: translateConfigFactory},
+ ],
+ bootstrap: [AppComponent]
+})
+export class AppModule { }
+```
+
+### Using SystemJs
+
+When you are using SystemJs you need to configure where to load angular2-translator:
+
```js
System.config({
map: {
@@ -89,31 +143,8 @@ System.config({
});
```
-Or you load the file directly:
+Or load the file directly:
+
```html
```
-
-Now you have to set up your NgModule to use the `TranslatorModule` and may be configure it:
-```ts
-import {TranslateConfig, TranslatorModule} from "angular2-translator";
-
-@NgModule({
- imports: [ TranslatorModule ],
- providers: [
- { provide: TranslateConfig, useValue: new TranslateConfig({
- defaultLang: "de",
- providedLangs: [ "de", "en" ],
- })},
- ]
-})
-export class AppModule {}
-```
-
-### Manually
-You also can clone the repository and symlink the project folder or what ever:
-```bash
-git clone https://gitlab.w00tserver.org:617/tflori/angular2-translator
-ln -s angular2-translator MyApp/libs/angular2-translator
-```
-> You should know what you do and don't follow this guide for installation.
diff --git a/bundle.js b/bundle.js
index 1828363..c58e28f 100644
--- a/bundle.js
+++ b/bundle.js
@@ -27,7 +27,7 @@ var builder = new Builder({
});
builder
- .buildStatic('angular2-translator', path.resolve(__dirname, 'bundles/', name + '.js'), {
+ .buildStatic('index', path.resolve(__dirname, 'bundles/', name + '.js'), {
format: 'umd',
minify: true,
sourceMaps: true,
diff --git a/bundles/angular2-translator.js b/bundles/angular2-translator.js
index 47199a3..c98bdb7 100644
--- a/bundles/angular2-translator.js
+++ b/bundles/angular2-translator.js
@@ -1,2 +1,2 @@
-!function(a){function b(a){Object.defineProperty(this,a,{enumerable:!0,get:function(){return this[o][a]}})}function c(a){var b;if(a&&a.__esModule){b={};for(var c in a)Object.hasOwnProperty.call(a,c)&&(b[c]=a[c]);b.__useDefault&&delete b.__useDefault,b.__esModule=!0}else{if("[object Module]"===Object.prototype.toString.call(a)||"undefined"!=typeof System&&System.isModule&&System.isModule(a))return a;b={default:a,__useDefault:!0}}return new d(b)}function d(a){Object.defineProperty(this,o,{value:a}),Object.keys(a).forEach(b,this)}function e(a){return"@node/"===a.substr(0,6)?m(a,c(p(a.substr(6))),{}):n[a]}function f(a){var b=e(a);if(!b)throw new Error('Module "'+a+'" expected, but not contained in build.');if(b.module)return b.module;var c=b.linkRecord;return g(b,c),l(b,c,[]),b.module}function g(a,b){if(!b.depLoads){b.declare&&h(a,b),b.depLoads=[];for(var c=0;c1)for(var l=1;l=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g}),e=b&&b.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},f=b&&b.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(b,"__esModule",{value:!0});var g=a("c"),h=a("d"),i=function(){function a(a){var b=this;this.translation="",this._params={},this._translate=a,a.languageChanged.subscribe(function(){b._startTranslation()})}return Object.defineProperty(a.prototype,"key",{set:function(a){this._key=a,this._startTranslation()},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"params",{set:function(a){if("object"!=typeof a)return void this._translate.logHandler.error("Params have to be an object");this._params=a,this._startTranslation()},enumerable:!0,configurable:!0}),a.prototype._startTranslation=function(){var a=this;this._key&&this._translate.translate(this._key,this._params).then(function(b){return a.translation=String(b)})},a}();d([h.Input("translate"),e("design:type",String),e("design:paramtypes",[String])],i.prototype,"key",null),d([h.Input("translateParams"),e("design:type",Object),e("design:paramtypes",[Object])],i.prototype,"params",null),i=d([h.Component({selector:"[translate]",template:"{{translation}}"}),f(0,h.Inject(g.TranslateService)),e("design:paramtypes",[g.TranslateService])],i),b.TranslateComponent=i}),$__System.registerDynamic("e",["f","d","10"],!0,function(a,b,c){"use strict";var d=(this||self,b&&b.__extends||function(){var a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])};return function(b,c){function d(){this.constructor=b}a(b,c),b.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}}()),e=b&&b.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},f=b&&b.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},g=b&&b.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(b,"__esModule",{value:!0});var h=a("f"),i=a("d"),j=a("10"),k=function(){function a(a,b){this.path="i18n/",this.extension=".json",a&&(this.path=a.replace(/\/+$/,"")+"/"),b&&(this.extension=b)}return a}();b.TranslateLoaderJsonConfig=k;var l=function(a){function b(b,c){var d=a.call(this)||this;return d._http=b,d._config=c,d}return d(b,a),b.prototype.load=function(a){var b=this;return new Promise(function(c,d){var e=b._config.path+a+b._config.extension;b._http.get(e).subscribe(function(a){if(200===a.status){var e={};b.flattenTranslations(e,a.json()),c(e)}else d("StatusCode: "+a.status)},function(a){d(a.message)})})},b.prototype.flattenTranslations=function(a,b,c){void 0===c&&(c="");for(var d in b)Array.isArray(b[d])?a[c+d]=b[d].filter(function(a){return"string"==typeof a}).join(""):"object"==typeof b[d]?this.flattenTranslations(a,b[d],c+d+"."):"string"==typeof b[d]&&(a[c+d]=b[d])},b}(h.TranslateLoader);l=e([i.Injectable(),g(0,i.Inject(j.Http)),g(1,i.Inject(k)),f("design:paramtypes",[j.Http,k])],l),b.TranslateLoaderJson=l}),$__System.registerDynamic("11",["c","d"],!0,function($__require,exports,module){"use strict";var global=this||self,GLOBAL=global,__decorate=exports&&exports.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},__metadata=exports&&exports.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},__param=exports&&exports.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(exports,"__esModule",{value:!0});var TranslateService_1=$__require("c"),core_1=$__require("d"),TranslatePipe=TranslatePipe_1=function(){function TranslatePipe(a){var b=this;this._translation="",this._translate=a,a.languageChanged.subscribe(function(){b._startTranslation()})}return TranslatePipe._parseParams=function(arg){try{var o=eval("("+arg+")");if("object"==typeof o)return o}catch(a){}return{}},TranslatePipe.prototype.transform=function(a,b){void 0===b&&(b=[]);var c={};return b[0]&&("string"==typeof b[0]?(c=TranslatePipe_1._parseParams(b[0]),Object.keys(c).length||this._translate.logHandler.error("'"+b[0]+"' could not be parsed to object")):"object"==typeof b[0]&&(c=b[0])),this._translated&&this._promise&&(this._translated.key!==a||JSON.stringify(this._translated.params)!==JSON.stringify(c))&&(this._promise=null),this._promise||(this._translated={key:a,params:c},this._startTranslation()),this._translation},TranslatePipe.prototype._startTranslation=function(){var a=this;this._translated&&this._translated.key&&(this._promise=this._translate.translate(this._translated.key,this._translated.params),this._promise.then(function(b){return a._translation=String(b)}))},TranslatePipe}();TranslatePipe=TranslatePipe_1=__decorate([core_1.Pipe({name:"translate",pure:!1}),__param(0,core_1.Inject(TranslateService_1.TranslateService)),__metadata("design:paramtypes",[TranslateService_1.TranslateService])],TranslatePipe),exports.TranslatePipe=TranslatePipe;var TranslatePipe_1}),$__System.registerDynamic("12",[],!0,function(a,b,c){"use strict";this||self;Object.defineProperty(b,"__esModule",{value:!0});var d=function(){function a(b){var c=b.defaultLang,d=void 0===c?"en":c,e=b.providedLangs,f=void 0===e?["en"]:e,g=b.detectLanguageOnStart,h=void 0===g||g;this.defaultLang=f.indexOf(d)>-1?d:f[0],this.providedLangs=f,this.detectLanguageOnStart=h,this.navigatorLanguages=function(){var b=a.navigator;return b.languages instanceof Array?Array.prototype.slice.call(b.languages):"string"==typeof b.languages?[String(b.languages)]:"string"==typeof b.language?[b.language]:[]}()}return a.prototype.langProvided=function(a,b){void 0===b&&(b=!1);var c,d=!1,e=function(a){var b=/^([A-Za-z]{2})(?:[\.\-_\/]?([A-Za-z]{2}))?$/;return a.match(b)?a.replace(b,function(a,b,c){return void 0===c&&(c=""),b=b.toLowerCase(),c=c.toUpperCase(),c?b+"-"+c:b}):""},f=this.providedLangs.map(e);return a=e(a),0===a.length?d:(c=f.indexOf(a),c>-1?d=this.providedLangs[c]:b||(a=a.substr(0,2),c=f.indexOf(a),c>-1?d=this.providedLangs[c]:(c=f.map(function(a){return a.substr(0,2)}).indexOf(a),c>-1&&(d=this.providedLangs[c]))),d)},a}();d.navigator=window&&window.navigator?window.navigator:{},b.TranslateConfig=d}),$__System.registerDynamic("f",[],!0,function(a,b,c){"use strict";this||self;Object.defineProperty(b,"__esModule",{value:!0});var d=function(){function a(){}return a}();b.TranslateLoader=d}),$__System.registerDynamic("c",["12","f","d","13","14"],!0,function($__require,exports,module){"use strict";var global=this||self,GLOBAL=global,__decorate=exports&&exports.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},__metadata=exports&&exports.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},__param=exports&&exports.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(exports,"__esModule",{value:!0});var TranslateConfig_1=$__require("12"),TranslateLoader_1=$__require("f"),core_1=$__require("d"),Observable_1=$__require("13");$__require("14"),exports.TranslateLogHandler={debug:function(){},error:function(a){return console&&console.error&&console.error(a)},info:function(){}};var TranslateService=function(){function TranslateService(a,b,c){var d=this;if(this._loadedLangs={},this._translations={},this._config=a,this._loader=b,this.logHandler=c,this._lang=a.defaultLang,a.detectLanguageOnStart){var e=this.detectLang(a.navigatorLanguages);e&&(this._lang=String(e),c.info("Language "+e+" got detected"))}this.languageChanged=new Observable_1.Observable(function(a){return d._languageChangedObserver=a}).share()}return Object.defineProperty(TranslateService.prototype,"lang",{get:function(){return this._lang},set:function(a){var b=this._config.langProvided(a,!0);if("string"==typeof b)return this._lang=b,this.logHandler.info("Language changed to "+b),void(this._languageChangedObserver&&this._languageChangedObserver.next(this._lang));throw new Error("Language not provided")},enumerable:!0,configurable:!0}),TranslateService.prototype.detectLang=function(a){var b,c=!1;for(b=0;b0)return this.logHandler.error("Parse error only first parameter can be passed as params in '"+a+"'"),"";j="wait_getter"}break;case"read_param_key":if(b[e].match(/[A-Za-z0-9_]/))g+=b[e];else if("="===b[e])j="wait_getter";else if(","===b[e])l(!1),j="wait_param";else{if(!b[e].match(/\s/))return this._referencedError(a,"character","comma, equal sign or end",e);j="param_key_readed"}break;case"param_key_readed":if(b[e].match(/\s/));else if("="===b[e])j="wait_getter";else{if(","!==b[e])return this._referencedError(a,"character","comma, equal sign or end",e);l(!1),j="wait_param"}break;case"wait_getter":if(b[e].match(/\s/));else{if(!b[e].match(/[A-Za-z0-9_]/))return this._referencedError(a,"character","getter",e);j="read_getter",h=b[e]}break;case"read_getter":if(b[e].match(/[A-Za-z0-9_.]/))h+=b[e];else if(b[e].match(/\s/))j="getter_readed";else{if(","!==b[e])return this._referencedError(a,"character","comma or end",e);l(),j="wait_param"}break;case"getter_readed":if(b[e].match(/\s/));else{if(","!==b[e])return this._referencedError(a,"character","comma or end",e);l(),j="wait_param"}}switch(j){case"param_key_readed":case"read_param_key":l(!1);break;case"getter_readed":case"read_getter":l();break;case"wait_key":return this._referencedError(a,"end","key");case"wait_param":return this._referencedError(a,"end","parameter");case"wait_getter":return this._referencedError(a,"end","getter")}return String(this.instant(f,k,d))},TranslateService}();TranslateService=__decorate([core_1.Injectable(),__param(0,core_1.Inject(TranslateConfig_1.TranslateConfig)),__param(1,core_1.Inject(TranslateLoader_1.TranslateLoader)),__param(2,core_1.Inject(exports.TranslateLogHandler)),__metadata("design:paramtypes",[TranslateConfig_1.TranslateConfig,TranslateLoader_1.TranslateLoader,Object])],TranslateService),exports.TranslateService=TranslateService}),$__System.registerDynamic("a",["b","12","f","e","11","c","d","10"],!0,function(a,b,c){"use strict";function d(a){for(var c in a)b.hasOwnProperty(c)||(b[c]=a[c])}var e=(this||self,b&&b.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g});Object.defineProperty(b,"__esModule",{value:!0});var f=a("b"),g=a("12"),h=a("f"),i=a("e"),j=a("11"),k=a("c"),l=a("d"),m=a("10");d(a("c")),d(a("11")),d(a("b")),d(a("12")),d(a("f")),d(a("e"));var n=function(){function a(){}return a}();n=e([l.NgModule({declarations:[j.TranslatePipe,f.TranslateComponent],exports:[j.TranslatePipe,f.TranslateComponent],imports:[m.HttpModule],providers:[{provide:g.TranslateConfig,useValue:new g.TranslateConfig({})},{provide:i.TranslateLoaderJsonConfig,useValue:new i.TranslateLoaderJsonConfig},{provide:h.TranslateLoader,useClass:i.TranslateLoaderJson},{provide:k.TranslateLogHandler,useValue:k.TranslateLogHandler},k.TranslateService]})],n),b.TranslatorModule=n,b.TRANSLATE_PROVIDERS=[{provide:g.TranslateConfig,useValue:new g.TranslateConfig({})},{provide:i.TranslateLoaderJsonConfig,useValue:new i.TranslateLoaderJsonConfig},{provide:h.TranslateLoader,useClass:i.TranslateLoaderJson},{provide:k.TranslateLogHandler,useValue:k.TranslateLogHandler},k.TranslateService]})})(function(a){if("function"==typeof define&&define.amd)define(["@angular/core","@angular/http","rxjs/Observable","rxjs/add/operator/share"],a);else{if("object"!=typeof module||!module.exports||"function"!=typeof require)throw new Error("Module must be loaded as AMD or CommonJS");module.exports=a(require("@angular/core"),require("@angular/http"),require("rxjs/Observable"),require("rxjs/add/operator/share"))}});
+!function(a){function b(a){Object.defineProperty(this,a,{enumerable:!0,get:function(){return this[o][a]}})}function c(a){var b;if(a&&a.__esModule){b={};for(var c in a)Object.hasOwnProperty.call(a,c)&&(b[c]=a[c]);b.__useDefault&&delete b.__useDefault,b.__esModule=!0}else{if("[object Module]"===Object.prototype.toString.call(a)||"undefined"!=typeof System&&System.isModule&&System.isModule(a))return a;b={default:a,__useDefault:!0}}return new d(b)}function d(a){Object.defineProperty(this,o,{value:a}),Object.keys(a).forEach(b,this)}function e(a){return"@node/"===a.substr(0,6)?m(a,c(p(a.substr(6))),{}):n[a]}function f(a){var b=e(a);if(!b)throw new Error('Module "'+a+'" expected, but not contained in build.');if(b.module)return b.module;var c=b.linkRecord;return g(b,c),l(b,c,[]),b.module}function g(a,b){if(!b.depLoads){b.declare&&h(a,b),b.depLoads=[];for(var c=0;c1)for(var l=1;l=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g}),e=b&&b.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},f=b&&b.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(b,"__esModule",{value:!0});var g=a("c"),h=a("d"),i=function(){function a(a){var b=this;this.translation="",this._params={},this._translate=a,a.languageChanged.subscribe(function(){b._startTranslation()})}return Object.defineProperty(a.prototype,"key",{set:function(a){this._key=a,this._startTranslation()},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"params",{set:function(a){if("object"!=typeof a)return void this._translate.logHandler.error("Params have to be an object");this._params=a,this._startTranslation()},enumerable:!0,configurable:!0}),a.prototype._startTranslation=function(){var a=this;this._key&&this._translate.translate(this._key,this._params).then(function(b){return a.translation=String(b)})},a}();d([h.Input("translate"),e("design:type",String),e("design:paramtypes",[String])],i.prototype,"key",null),d([h.Input("translateParams"),e("design:type",Object),e("design:paramtypes",[Object])],i.prototype,"params",null),i=d([h.Component({selector:"[translate]",template:"{{translation}}"}),f(0,h.Inject(g.TranslateService)),e("design:paramtypes",[g.TranslateService])],i),b.TranslateComponent=i}),$__System.registerDynamic("e",["f","d","10"],!0,function(a,b,c){"use strict";var d=(this||self,b&&b.__extends||function(){var a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])};return function(b,c){function d(){this.constructor=b}a(b,c),b.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}}()),e=b&&b.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},f=b&&b.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},g=b&&b.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(b,"__esModule",{value:!0});var h=a("f"),i=a("d"),j=a("10"),k=function(){function a(a,b){this.path="assets/i18n/",this.extension=".json",a&&(this.path=a.replace(/\/+$/,"")+"/"),b&&(this.extension=b)}return a}();b.TranslateLoaderJsonConfig=k;var l=function(a){function b(b,c){var d=a.call(this)||this;return d._http=b,d._config=c,d}return d(b,a),b.prototype.load=function(a){var b=this;return new Promise(function(c,d){var e=b._config.path+a+b._config.extension;b._http.get(e).subscribe(function(a){if(200===a.status){var e={};b.flattenTranslations(e,a.json()),c(e)}else d("StatusCode: "+a.status)},function(a){d(a.message)})})},b.prototype.flattenTranslations=function(a,b,c){void 0===c&&(c="");for(var d in b)Array.isArray(b[d])?a[c+d]=b[d].filter(function(a){return"string"==typeof a}).join(""):"object"==typeof b[d]?this.flattenTranslations(a,b[d],c+d+"."):"string"==typeof b[d]&&(a[c+d]=b[d])},b}(h.TranslateLoader);l=e([i.Injectable(),g(0,i.Inject(j.Http)),g(1,i.Inject(k)),f("design:paramtypes",[j.Http,k])],l),b.TranslateLoaderJson=l}),$__System.registerDynamic("11",["c","d"],!0,function($__require,exports,module){"use strict";var global=this||self,GLOBAL=global,__decorate=exports&&exports.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},__metadata=exports&&exports.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},__param=exports&&exports.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(exports,"__esModule",{value:!0});var TranslateService_1=$__require("c"),core_1=$__require("d"),TranslatePipe=TranslatePipe_1=function(){function TranslatePipe(a){var b=this;this._translation="",this._translate=a,a.languageChanged.subscribe(function(){b._startTranslation()})}return TranslatePipe._parseParams=function(arg){try{var o=eval("("+arg+")");if("object"==typeof o)return o}catch(a){}return{}},TranslatePipe.prototype.transform=function(a,b){void 0===b&&(b=[]);var c={};return b[0]&&("string"==typeof b[0]?(c=TranslatePipe_1._parseParams(b[0]),Object.keys(c).length||this._translate.logHandler.error("'"+b[0]+"' could not be parsed to object")):"object"==typeof b[0]&&(c=b[0])),this._translated&&this._promise&&(this._translated.key!==a||JSON.stringify(this._translated.params)!==JSON.stringify(c))&&(this._promise=null),this._promise||(this._translated={key:a,params:c},this._startTranslation()),this._translation},TranslatePipe.prototype._startTranslation=function(){var a=this;this._translated&&this._translated.key&&(this._promise=this._translate.translate(this._translated.key,this._translated.params),this._promise.then(function(b){return a._translation=String(b)}))},TranslatePipe}();TranslatePipe=TranslatePipe_1=__decorate([core_1.Pipe({name:"translate",pure:!1}),__param(0,core_1.Inject(TranslateService_1.TranslateService)),__metadata("design:paramtypes",[TranslateService_1.TranslateService])],TranslatePipe),exports.TranslatePipe=TranslatePipe;var TranslatePipe_1}),$__System.registerDynamic("12",[],!0,function(a,b,c){"use strict";this||self;Object.defineProperty(b,"__esModule",{value:!0});var d=function(){function a(b){var c=b.defaultLang,d=void 0===c?"en":c,e=b.providedLangs,f=void 0===e?["en"]:e,g=b.detectLanguageOnStart,h=void 0===g||g;this.defaultLang=f.indexOf(d)>-1?d:f[0],this.providedLangs=f,this.detectLanguageOnStart=h,this.navigatorLanguages=function(){var b=a.navigator;return b.languages instanceof Array?Array.prototype.slice.call(b.languages):"string"==typeof b.languages?[String(b.languages)]:"string"==typeof b.language?[b.language]:[]}()}return a.prototype.langProvided=function(a,b){void 0===b&&(b=!1);var c,d=!1,e=function(a){var b=/^([A-Za-z]{2})(?:[\.\-_\/]?([A-Za-z]{2}))?$/;return a.match(b)?a.replace(b,function(a,b,c){return void 0===c&&(c=""),b=b.toLowerCase(),c=c.toUpperCase(),c?b+"-"+c:b}):""},f=this.providedLangs.map(e);return a=e(a),0===a.length?d:(c=f.indexOf(a),c>-1?d=this.providedLangs[c]:b||(a=a.substr(0,2),c=f.indexOf(a),c>-1?d=this.providedLangs[c]:(c=f.map(function(a){return a.substr(0,2)}).indexOf(a),c>-1&&(d=this.providedLangs[c]))),d)},a}();d.navigator=window&&window.navigator?window.navigator:{},b.TranslateConfig=d}),$__System.registerDynamic("f",[],!0,function(a,b,c){"use strict";this||self;Object.defineProperty(b,"__esModule",{value:!0});var d=function(){function a(){}return a}();b.TranslateLoader=d}),$__System.registerDynamic("c",["12","f","d","13","14"],!0,function($__require,exports,module){"use strict";var global=this||self,GLOBAL=global,__decorate=exports&&exports.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},__metadata=exports&&exports.__metadata||function(a,b){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(a,b)},__param=exports&&exports.__param||function(a,b){return function(c,d){b(c,d,a)}};Object.defineProperty(exports,"__esModule",{value:!0});var TranslateConfig_1=$__require("12"),TranslateLoader_1=$__require("f"),core_1=$__require("d"),Observable_1=$__require("13");$__require("14"),exports.TranslateLogHandler={debug:function(){},error:function(a){return console&&console.error&&console.error(a)},info:function(){}};var TranslateService=function(){function TranslateService(a,b,c){var d=this;if(this._loadedLangs={},this._translations={},this._config=a,this._loader=b,this.logHandler=c,this._lang=a.defaultLang,a.detectLanguageOnStart){var e=this.detectLang(a.navigatorLanguages);e&&(this._lang=String(e),c.info("Language "+e+" got detected"))}this.languageChanged=new Observable_1.Observable(function(a){return d._languageChangedObserver=a}).share()}return Object.defineProperty(TranslateService.prototype,"lang",{get:function(){return this._lang},set:function(a){var b=this._config.langProvided(a,!0);if("string"==typeof b)return this._lang=b,this.logHandler.info("Language changed to "+b),void(this._languageChangedObserver&&this._languageChangedObserver.next(this._lang));throw new Error("Language not provided")},enumerable:!0,configurable:!0}),TranslateService.prototype.detectLang=function(a){var b,c=!1;for(b=0;b0)return this.logHandler.error("Parse error only first parameter can be passed as params in '"+a+"'"),"";j="wait_getter"}break;case"read_param_key":if(b[e].match(/[A-Za-z0-9_]/))g+=b[e];else if("="===b[e])j="wait_getter";else if(","===b[e])l(!1),j="wait_param";else{if(!b[e].match(/\s/))return this._referencedError(a,"character","comma, equal sign or end",e);j="param_key_readed"}break;case"param_key_readed":if(b[e].match(/\s/));else if("="===b[e])j="wait_getter";else{if(","!==b[e])return this._referencedError(a,"character","comma, equal sign or end",e);l(!1),j="wait_param"}break;case"wait_getter":if(b[e].match(/\s/));else{if(!b[e].match(/[A-Za-z0-9_]/))return this._referencedError(a,"character","getter",e);j="read_getter",h=b[e]}break;case"read_getter":if(b[e].match(/[A-Za-z0-9_.]/))h+=b[e];else if(b[e].match(/\s/))j="getter_readed";else{if(","!==b[e])return this._referencedError(a,"character","comma or end",e);l(),j="wait_param"}break;case"getter_readed":if(b[e].match(/\s/));else{if(","!==b[e])return this._referencedError(a,"character","comma or end",e);l(),j="wait_param"}}switch(j){case"param_key_readed":case"read_param_key":l(!1);break;case"getter_readed":case"read_getter":l();break;case"wait_key":return this._referencedError(a,"end","key");case"wait_param":return this._referencedError(a,"end","parameter");case"wait_getter":return this._referencedError(a,"end","getter")}return String(this.instant(f,k,d))},TranslateService}();TranslateService=__decorate([core_1.Injectable(),__param(0,core_1.Inject(TranslateConfig_1.TranslateConfig)),__param(1,core_1.Inject(TranslateLoader_1.TranslateLoader)),__param(2,core_1.Inject(exports.TranslateLogHandler)),__metadata("design:paramtypes",[TranslateConfig_1.TranslateConfig,TranslateLoader_1.TranslateLoader,Object])],TranslateService),exports.TranslateService=TranslateService}),$__System.registerDynamic("15",["b","12","f","e","11","c","d","10"],!0,function(a,b,c){"use strict";var d=(this||self,b&&b.__decorate||function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g});Object.defineProperty(b,"__esModule",{value:!0});var e=a("b"),f=a("12"),g=a("f"),h=a("e"),i=a("11"),j=a("c"),k=a("d"),l=a("10"),m=function(){function a(){}return a}();m=d([k.NgModule({declarations:[i.TranslatePipe,e.TranslateComponent],exports:[i.TranslatePipe,e.TranslateComponent],imports:[l.HttpModule],providers:[{provide:f.TranslateConfig,useValue:new f.TranslateConfig({})},{provide:h.TranslateLoaderJsonConfig,useValue:new h.TranslateLoaderJsonConfig},{provide:g.TranslateLoader,useClass:h.TranslateLoaderJson},{provide:j.TranslateLogHandler,useValue:j.TranslateLogHandler},j.TranslateService]})],m),b.TranslatorModule=m,b.TRANSLATE_PROVIDERS=[{provide:f.TranslateConfig,useValue:new f.TranslateConfig({})},{provide:h.TranslateLoaderJsonConfig,useValue:new h.TranslateLoaderJsonConfig},{provide:g.TranslateLoader,useClass:h.TranslateLoaderJson},{provide:j.TranslateLogHandler,useValue:j.TranslateLogHandler},j.TranslateService]}),$__System.registerDynamic("a",["c","11","b","12","f","e","15"],!0,function(a,b,c){"use strict";function d(a){for(var c in a)b.hasOwnProperty(c)||(b[c]=a[c])}this||self;Object.defineProperty(b,"__esModule",{value:!0}),d(a("c")),d(a("11")),d(a("b")),d(a("12")),d(a("f")),d(a("e")),d(a("15"))})})(function(a){if("function"==typeof define&&define.amd)define(["@angular/core","@angular/http","rxjs/Observable","rxjs/add/operator/share"],a);else{if("object"!=typeof module||!module.exports||"function"!=typeof require)throw new Error("Module must be loaded as AMD or CommonJS");module.exports=a(require("@angular/core"),require("@angular/http"),require("rxjs/Observable"),require("rxjs/add/operator/share"))}});
//# sourceMappingURL=angular2-translator.js.map
\ No newline at end of file
diff --git a/docs/TranslateConfig.md b/docs/TranslateConfig.md
index d730448..bcd5071 100644
--- a/docs/TranslateConfig.md
+++ b/docs/TranslateConfig.md
@@ -22,7 +22,7 @@ new TranslateConfig({
| defaultLang | string | `'en'` | Defines the default language to be used if no language got set and language detection is disabled or does not detect a language. |
| providedLangs | string[] | `['en']` | Defines a list of the languages that are supported from you. The provided languages has to match your file names. To make language detection work you should use the ISO format 639-1 (e.g. 'en') or the IETF language tag (e.g. 'de-AT'). You don't have to use "-" and don't have to care about case sensitive. A language 'en/us' will also match a browser language en-US and vise versa - but the file has to be *path*\*en/us\**extension* then. |
| detectLanguageOnStart | string | `true` | Defines whether the language should be detected by navigator.language(s) when TranslateService got initialized or not. |
-| navigatorLanguages | string[] | - | Holds an array of languages the browser accepts. Mostly it is exactly `navigator.languages` but for browsers that only define `navigator.language` it is `[navigator.language]`. If nothing is defined by the browser it is simply an empty array. |
+| navigatorLanguages | string[] | - | Holds an array of languages the browser accepts. Mostly it is exactly `navigator.languages` but for browsers that does not define `navigator.languages` it is one of `navigator.language`, `navigator.browserLanguage` or `navigator.userLanguage`. |
## The Methods
@@ -56,17 +56,32 @@ expect(translateConfig.langProvided('en-US')).toBe('EN/usa');
This example shows how you usually use the TranslateConfig class:
```ts
-import {TranslateConfig, TranslatorModule} from "angular2-translator";
+import { BrowserModule } from '@angular/platform-browser';
+import { NgModule } from '@angular/core';
+import { TranslateConfig, TranslatorModule } from "angular2-translator";
-@NgModule({
- imports: [ TranslatorModule ],
- providers: [
- { provide: TranslateConfig, useValue: new TranslateConfig({
+import { AppComponent } from './app.component';
+
+export function translateConfigFactory() {
+ return new TranslateConfig({
defaultLang: "de",
providedLangs: [ "de", "en" ],
detectLanguageOnStart: false
- })},
- ]
+ });
+}
+
+@NgModule({
+ declarations: [
+ AppComponent
+ ],
+ imports: [
+ BrowserModule,
+ TranslatorModule,
+ ],
+ providers: [
+ { provide: TranslateConfig, useFactory: translateConfigFactory},
+ ],
+ bootstrap: [AppComponent]
})
-export class AppModule {}
+export class AppModule { }
```
diff --git a/docs/TranslateLoader.md b/docs/TranslateLoader.md
index 92039b4..3d0c715 100644
--- a/docs/TranslateLoader.md
+++ b/docs/TranslateLoader.md
@@ -36,7 +36,7 @@ import {TranslateLoader} from "angular2-translator";
@Injectable()
export class TranslateLoaderStatic extends TranslateLoader {
- private translations:object = {
+ private translations:Object = {
en: {
"HELLO WORLD": "Hello World!"
},
@@ -68,20 +68,34 @@ To use this loader in your application you have to provide it for your applicati
bootstrap can look like:
```ts
-import {TranslateConfig, TranslateLoader, TranslatorModule} from "angular2-translator";
+import { BrowserModule } from '@angular/platform-browser';
+import { NgModule } from '@angular/core';
+import { TranslateConfig, TranslateLoader, TranslatorModule } from "angular2-translator";
-import {TranslateLoaderStatic} from "./TranslateLoaderStatic";
+import { AppComponent } from './app.component';
+import { TranslateLoaderStatic } from "./TranslateLoaderStatic"
+
+export function translateConfigFactory() {
+ return new TranslateConfig({
+ defaultLang: "ru",
+ providedLangs: [ "de", "en", "fr", "ru" ],
+ detectLanguageOnStart: false
+ });
+}
@NgModule({
- imports: [ TranslatorModule ],
- providers: [
- { provide: TranslateConfig, useValue: new TranslateConfig({
- defaultLang: "de",
- providedLangs: [ "de", "en", "fr", "ru" ],
- detectLanguageOnStart: false
- })},
- { provide: TranslateLoader, useClass: TranslateLoaderStatic },
- ]
+ declarations: [
+ AppComponent
+ ],
+ imports: [
+ BrowserModule,
+ TranslatorModule,
+ ],
+ providers: [
+ { provide: TranslateConfig, useFactory: translateConfigFactory },
+ { provide: TranslateLoader, useClass: TranslateLoaderStatic },
+ ],
+ bootstrap: [AppComponent]
})
-export class AppModule {}
+export class AppModule { }
```
diff --git a/docs/TranslateLoaderJson.md b/docs/TranslateLoaderJson.md
index 441f4fa..9b295cf 100644
--- a/docs/TranslateLoaderJson.md
+++ b/docs/TranslateLoaderJson.md
@@ -71,7 +71,10 @@ class TranslateLoaderJsonConfig {
}
```
-Default values are `path = 'i18n'` and `extension = '.json'` .
+Default values are `path = 'assets/i18n'` and `extension = '.json'` .
+
+> **CAUTION:** the default values changed from version 1.4. Before the default path was `i18n` - so you either change
+> this in your config or move the files.
### Example with customized path and extension:
Directory structure:
@@ -90,12 +93,28 @@ Directory structure:
main.ts:
```ts
-import {TranslateLoaderJsonConfig, TranslatorModule} from "angular2-translator";
+import { BrowserModule } from '@angular/platform-browser';
+import { NgModule } from '@angular/core';
+import { TranslateLoaderJsonConfig, TranslatorModule } from "angular2-translator";
+
+import { AppComponent } from './app.component';
+
+export function translateLoaderConfigFactory() {
+ return new TranslateLoaderJsonConfig('app/localization', '-lang.json')
+}
@NgModule({
- imports: [ TranslatorModule ],
- providers: [
- { provide: TranslateLoaderJsonConfig, useValue: new TranslateLoaderJsonConfig('app/localization', '-lang.json') },
- ]
+ declarations: [
+ AppComponent
+ ],
+ imports: [
+ BrowserModule,
+ TranslatorModule,
+ ],
+ providers: [
+ { provide: TranslateLoaderJsonConfig, useFactory: translateLoaderConfigFactory },
+ ],
+ bootstrap: [AppComponent]
})
+export class AppModule { }
```
diff --git a/docs/TranslateLogHandler.md b/docs/TranslateLogHandler.md
index b39e09a..89bbd42 100644
--- a/docs/TranslateLogHandler.md
+++ b/docs/TranslateLogHandler.md
@@ -11,13 +11,46 @@ implements this interface uses console.error() to log errors. The other two func
## Declartion
```ts
-interface TranslateLogHandler {
+export interface ITranslateLogHandler {
error(message:string):void;
info(message:string):void;
debug(message:string):void;
}
```
+The default TranslateLogHandler is:
+
+```ts
+export const TranslateLogHandler = {
+ debug: () => {},
+ error: (message) => console && console.error && console.error(message),
+ info: () => {},
+};
+```
+
+To overwrite this you can just write this in your app module:
+ ```ts
+import {TranslateLogHandler, ITranslateLogHandler, TranslatorModule} from "angular2-translator";
+
+export function translateLogFactory() {
+ return {
+ debug: () => {},
+ error: (message) => console && console.error && console.error(message),
+ info: () => {},
+ };
+}
+
+@NgModule({
+ imports: [ TranslatorModule ],
+ providers: [
+ { provide: TranslateLogHandler, useFactory: translateLogFactory},
+ ]
+})
+export class AppModule {}
+```
+
+> Unfortunately this leads to an error message for `ng serve` and `ng build`. Here is [the bug report](https://github.com/angular/angular/issues/15287).
+
## Error messages
Currently there are just 4 error messages:
diff --git a/docs/index.md b/docs/index.md
index 67e29dd..b1c2ba5 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -24,9 +24,9 @@ It supports interpolation so you can:
- calculate in your translations
`"ANSWER":"The answer is {{7*6}}"`
- pluralize in your translations
- `"MESSAGES":"You have {{count}} new message{{count != 1 ? 's' : ''}}`
+ `"MESSAGES":"You have {{count}} new message{{count != 1 ? 's' : ''}}"`
- execute functions in your translations
- `"LAST_LOGIN":"Your last login was on {{lastLogin.format('MM/DD/YYYY')}}`
+ `"LAST_LOGIN":"Your last login was on {{lastLogin.format('MM/DD/YYYY')}}"`
{% endraw %}
### Refer to other translations
@@ -75,54 +75,77 @@ export class AppComponent {
## How to install
### Via npm
+
First you need to install the package. The easiest way is to install it via npm:
```bash
npm install --save angular2-translator
```
-Then you need to tell systemjs where to load angular2-translator:
+### Manually
-```js
-System.config({
- map: {
- 'angular2-translator': 'npm:angular2-translator/bundles/angular2-translator.js'
- }
-});
-```
-
-Or you load the file directly:
+You also can clone the repository and symlink the project folder or what ever:
-```html
-
+```bash
+git clone https://github.com/tflori/angular2-translator.git
+ln -s angular2-translator MyApp/libs/angular2-translator
```
-Now you have to set up your NgModule to use the `TranslatorModule` and may be configure it:
+> You should know what you do and don't follow this guide for installation.
+
+## How to use
+
+You have to set up your `NgModule` to import the `TranslatorModule` and may be configure it:
```ts
-import {TranslateConfig, TranslatorModule} from "angular2-translator";
+import { BrowserModule } from '@angular/platform-browser';
+import { NgModule } from '@angular/core';
+import { TranslateConfig, TranslatorModule } from "angular2-translator";
-@NgModule({
- imports: [ TranslatorModule ],
- providers: [
- { provide: TranslateConfig, useValue: new TranslateConfig({
+import { AppComponent } from './app.component';
+
+export function translateConfigFactory() {
+ return new TranslateConfig({
defaultLang: "de",
providedLangs: [ "de", "en" ],
- })},
- ]
+ detectLanguageOnStart: false
+ });
+}
+
+@NgModule({
+ declarations: [
+ AppComponent
+ ],
+ imports: [
+ BrowserModule,
+ TranslatorModule,
+ ],
+ providers: [
+ { provide: TranslateConfig, useFactory: translateConfigFactory},
+ ],
+ bootstrap: [AppComponent]
})
-export class AppModule {}
+export class AppModule { }
```
-### Manually
-You also can clone the repository and symlink the project folder or what ever:
+### Using SystemJs
-```bash
-git clone https://gitlab.w00tserver.org:617/tflori/angular2-translator
-ln -s angular2-translator MyApp/libs/angular2-translator
+When you are using SystemJs you need to configure where to load angular2-translator:
+
+```js
+System.config({
+ map: {
+ 'angular2-translator': 'npm:angular2-translator/bundles/angular2-translator.js'
+ }
+});
+```
+
+Or load the file directly:
+
+```html
+
```
-> You should know what you do and don't follow this guide for installation.
## The Classes
diff --git a/index.ts b/index.ts
new file mode 100644
index 0000000..debd143
--- /dev/null
+++ b/index.ts
@@ -0,0 +1,7 @@
+export * from "./src/TranslateService";
+export * from "./src/TranslatePipe";
+export * from "./src/TranslateComponent";
+export * from "./src/TranslateConfig";
+export * from "./src/TranslateLoader";
+export * from "./src/TranslateLoaderJson";
+export * from "./src/TranslatorModule";
diff --git a/karma.conf.js b/karma.conf.js
index 61374cc..12138ed 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -29,8 +29,8 @@ module.exports = function (config) {
{pattern: 'node_modules/@angular/**/*.js', included: false, watched: false},
// sources
- { pattern: 'angular2-translator.js', included: false, watched: true},
- { pattern: 'angular2-translator/**/*.js', included: false, watched: true},
+ { pattern: 'index.js', included: false, watched: false},
+ { pattern: 'src/**/*.js', included: false, watched: true},
// helper
{ pattern: 'tests/helper/**/*.js', included: false, watched: true},
@@ -47,8 +47,7 @@ module.exports = function (config) {
],
preprocessors: {
- 'angular2-translator.js': 'coverage',
- 'angular2-translator/**/*.js': 'coverage'
+ 'src/**/*.js': 'coverage'
},
reporters: [
diff --git a/package.json b/package.json
index 39660f2..9e79e29 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "angular2-translator",
- "version": "1.3.4",
+ "version": "1.4.0-beta1",
"description": "A translate-service, translate-pipe and translate-component for angular2",
"repository": {
"type": "git",
@@ -37,9 +37,9 @@
"url": "https://github.com/tflori/angular2-translator/issues"
},
"typescript": {
- "main": "./angular2-translator.ts"
+ "main": "./index.ts"
},
- "typings": "./angular2-translator.d.ts",
+ "typings": "./index.d.ts",
"homepage": "https://github.com/tflori/angular2-translator",
"peerDependencies": {
"@angular/common": "2.*",
diff --git a/angular2-translator/TranslateComponent.ts b/src/TranslateComponent.ts
similarity index 100%
rename from angular2-translator/TranslateComponent.ts
rename to src/TranslateComponent.ts
diff --git a/angular2-translator/TranslateConfig.ts b/src/TranslateConfig.ts
similarity index 90%
rename from angular2-translator/TranslateConfig.ts
rename to src/TranslateConfig.ts
index adc29e0..0a22a2f 100644
--- a/angular2-translator/TranslateConfig.ts
+++ b/src/TranslateConfig.ts
@@ -23,12 +23,15 @@ export class TranslateConfig {
if (navigator.languages instanceof Array) {
return Array.prototype.slice.call(navigator.languages);
- } else if (typeof navigator.languages === "string") {
- return [String(navigator.languages)];
- } else if (typeof navigator.language === "string") {
- return [navigator.language];
} else {
- return [];
+ return [
+ navigator.languages ||
+ navigator.language ||
+ navigator.browserLanguage ||
+ navigator.userLanguage,
+ ].filter((v) => {
+ return typeof v === "string";
+ });
}
})();
}
diff --git a/angular2-translator/TranslateLoader.ts b/src/TranslateLoader.ts
similarity index 100%
rename from angular2-translator/TranslateLoader.ts
rename to src/TranslateLoader.ts
diff --git a/angular2-translator/TranslateLoaderJson.ts b/src/TranslateLoaderJson.ts
similarity index 98%
rename from angular2-translator/TranslateLoaderJson.ts
rename to src/TranslateLoaderJson.ts
index 7f7cdbf..230fede 100644
--- a/angular2-translator/TranslateLoaderJson.ts
+++ b/src/TranslateLoaderJson.ts
@@ -3,7 +3,7 @@ import {Inject, Injectable} from "@angular/core";
import {Http} from "@angular/http";
export class TranslateLoaderJsonConfig {
- public path: string = "i18n/";
+ public path: string = "assets/i18n/";
public extension: string = ".json";
// @todo maybe we will change it to a destructed parameter like we did for TranslateConfig
diff --git a/angular2-translator/TranslatePipe.ts b/src/TranslatePipe.ts
similarity index 100%
rename from angular2-translator/TranslatePipe.ts
rename to src/TranslatePipe.ts
diff --git a/angular2-translator/TranslateService.ts b/src/TranslateService.ts
similarity index 100%
rename from angular2-translator/TranslateService.ts
rename to src/TranslateService.ts
diff --git a/angular2-translator.ts b/src/TranslatorModule.ts
similarity index 72%
rename from angular2-translator.ts
rename to src/TranslatorModule.ts
index e8fc1fb..a9e0249 100644
--- a/angular2-translator.ts
+++ b/src/TranslatorModule.ts
@@ -1,20 +1,13 @@
-import {TranslateComponent} from "./angular2-translator/TranslateComponent";
-import {TranslateConfig} from "./angular2-translator/TranslateConfig";
-import {TranslateLoader} from "./angular2-translator/TranslateLoader";
-import {TranslateLoaderJson, TranslateLoaderJsonConfig} from "./angular2-translator/TranslateLoaderJson";
-import {TranslatePipe} from "./angular2-translator/TranslatePipe";
-import {TranslateLogHandler, TranslateService} from "./angular2-translator/TranslateService";
+import {TranslateComponent} from "./TranslateComponent";
+import {TranslateConfig} from "./TranslateConfig";
+import {TranslateLoader} from "./TranslateLoader";
+import {TranslateLoaderJson, TranslateLoaderJsonConfig} from "./TranslateLoaderJson";
+import {TranslatePipe} from "./TranslatePipe";
+import {TranslateLogHandler, TranslateService} from "./TranslateService";
import {NgModule} from "@angular/core";
import {HttpModule} from "@angular/http";
-export * from "./angular2-translator/TranslateService";
-export * from "./angular2-translator/TranslatePipe";
-export * from "./angular2-translator/TranslateComponent";
-export * from "./angular2-translator/TranslateConfig";
-export * from "./angular2-translator/TranslateLoader";
-export * from "./angular2-translator/TranslateLoaderJson";
-
@NgModule({
declarations: [
TranslatePipe,
diff --git a/tests/TranslateComponent.spec.ts b/tests/TranslateComponent.spec.ts
index 248049e..b66fa86 100644
--- a/tests/TranslateComponent.spec.ts
+++ b/tests/TranslateComponent.spec.ts
@@ -5,7 +5,7 @@ import {
TranslateLoader,
TranslateLogHandler,
TranslateService,
-} from "../angular2-translator";
+} from "../index";
import {JasmineHelper} from "./helper/JasmineHelper";
import {TranslateLoaderMock} from "./helper/TranslateLoaderMock";
diff --git a/tests/TranslateConfig.spec.ts b/tests/TranslateConfig.spec.ts
index 6da8449..41a39f2 100644
--- a/tests/TranslateConfig.spec.ts
+++ b/tests/TranslateConfig.spec.ts
@@ -1,4 +1,4 @@
-import {TranslateConfig} from "../angular2-translator/TranslateConfig";
+import {TranslateConfig} from "../index";
describe("TranslateConfig", function() {
it("is defined", function() {
diff --git a/tests/TranslateLoader.spec.ts b/tests/TranslateLoader.spec.ts
index 1820bec..990d63c 100644
--- a/tests/TranslateLoader.spec.ts
+++ b/tests/TranslateLoader.spec.ts
@@ -1,4 +1,4 @@
-import {TranslateLoader} from "../angular2-translator/TranslateLoader";
+import {TranslateLoader} from "../index";
describe("TranslateLoader", function() {
it("is defined", function() {
diff --git a/tests/TranslateLoaderJson.spec.ts b/tests/TranslateLoaderJson.spec.ts
index 167f3df..ffc3cc4 100644
--- a/tests/TranslateLoaderJson.spec.ts
+++ b/tests/TranslateLoaderJson.spec.ts
@@ -1,7 +1,7 @@
import {
TranslateLoaderJson,
TranslateLoaderJsonConfig,
-} from "../angular2-translator";
+} from "../index";
import {JasmineHelper} from "./helper/JasmineHelper";
import {PromiseMatcher} from "./helper/promise-matcher";
@@ -27,7 +27,7 @@ describe("TranslateLoaderJsonConfig", function () {
it("defines default path and extension", function () {
let config = new TranslateLoaderJsonConfig();
- expect(config.path).toBe("i18n/");
+ expect(config.path).toBe("assets/i18n/");
expect(config.extension).toBe(".json");
});
@@ -101,7 +101,7 @@ describe("TranslateLoaderJson", function () {
expect(backend.createConnection).toHaveBeenCalled();
let request = JasmineHelper.calls(backend.createConnection).mostRecent().args[0];
- expect(request.url).toBe("i18n/en.json");
+ expect(request.url).toBe("assets/i18n/en.json");
expect(request.method).toBe(RequestMethod.Get);
});
diff --git a/tests/TranslatePipe.spec.ts b/tests/TranslatePipe.spec.ts
index 061c288..26b97b8 100644
--- a/tests/TranslatePipe.spec.ts
+++ b/tests/TranslatePipe.spec.ts
@@ -5,7 +5,7 @@ import {
TranslateLogHandler,
TranslatePipe,
TranslateService,
-} from "../angular2-translator";
+} from "../index";
import {JasmineHelper} from "./helper/JasmineHelper";
import {TranslateLoaderMock} from "./helper/TranslateLoaderMock";
diff --git a/tests/TranslateService.spec.ts b/tests/TranslateService.spec.ts
index ca202c2..dc93bfb 100644
--- a/tests/TranslateService.spec.ts
+++ b/tests/TranslateService.spec.ts
@@ -4,7 +4,7 @@ import {
TranslateLogHandler,
TranslateService,
TranslatorModule,
-} from "../angular2-translator";
+} from "../index";
import {JasmineHelper} from "./helper/JasmineHelper";
import {JasminePromise, PromiseMatcher} from "./helper/promise-matcher";
diff --git a/tests/helper/TranslateLoaderMock.ts b/tests/helper/TranslateLoaderMock.ts
index 86ac18f..fe2bed5 100644
--- a/tests/helper/TranslateLoaderMock.ts
+++ b/tests/helper/TranslateLoaderMock.ts
@@ -1,4 +1,4 @@
-import {TranslateLoader} from "../../angular2-translator/TranslateLoader";
+import {TranslateLoader} from "../../src/TranslateLoader";
export class TranslateLoaderMock extends TranslateLoader {
private _provided: Object = {};