diff --git a/package.json b/package.json
index a9989b0e5..fe07e6e69 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,8 @@
"build": "ionic-app-scripts build",
"lint": "ionic-app-scripts lint",
"ionic:build": "ionic-app-scripts build",
- "ionic:serve": "ionic-app-scripts serve"
+ "ionic:serve": "ionic-app-scripts serve",
+ "extract": "ngx-translate-extract --input ./src --output ./src/assets/i18n/app.pot --clean --sort --format pot"
},
"dependencies": {
"@angular/common": "4.1.3",
@@ -20,16 +21,18 @@
"@angular/platform-browser": "4.1.3",
"@angular/platform-browser-dynamic": "4.1.3",
"@angular/tsc-wrapped": "^4.3.2",
+ "@biesbjerg/ngx-translate-po-http-loader": "^1.0.1",
"@ionic-native/core": "3.12.1",
"@ionic-native/splash-screen": "3.12.1",
"@ionic-native/status-bar": "3.12.1",
"@ionic/storage": "2.0.1",
- "@nsalaun/ng-logger": "^2.0.1",
"autoprefixer": "^7.1.2",
- "ionic-angular": "3.5.3",
+ "@ngx-translate/core": "^6.0.1",
+ "@nsalaun/ng-logger": "2.0.1",
+ "ajv": "^5.2.2",
+ "ionic-angular": "3.6.0",
"ionicons": "3.0.0",
- "lodash": "^4.17.4",
- "pre-commit": "^1.2.2",
+ "lodash": "4.17.4",
"rxjs": "5.4.0",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.12"
@@ -46,7 +49,9 @@
"@types/lodash": "^4.14.71",
"@types/node": "^8.0.19",
"codecov": "^2.2.0",
+ "@biesbjerg/ngx-translate-extract": "^2.3.2",
"ionic": "3.6.0",
+ "pre-commit": "^1.2.2",
"jasmine-core": "^2.6.4",
"jasmine-spec-reporter": "^4.1.1",
"karma": "^1.7.0",
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 93b7bd2b3..d8317a01e 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -5,6 +5,7 @@ import { SplashScreen } from '@ionic-native/splash-screen';
import { Logger } from '@nsalaun/ng-logger';
import { AppProvider } from '../providers/app/app';
+import { TranslateService } from '@ngx-translate/core';
import { TabsPage } from '../pages/tabs/tabs';
@@ -19,7 +20,8 @@ export class Copay {
statusBar: StatusBar,
splashScreen: SplashScreen,
log: Logger,
- app: AppProvider
+ app: AppProvider,
+ translate: TranslateService
) {
platform.ready().then(() => {
app.getName().subscribe((name) => {
@@ -37,6 +39,9 @@ export class Copay {
statusBar.styleDefault();
splashScreen.hide();
}
+
+ translate.setDefaultLang('en');
+ translate.use(platform.lang());
});
}
}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 266733251..a3f3bdfb3 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,8 +1,10 @@
-import { NgModule, ErrorHandler, isDevMode } from '@angular/core';
+import { NgModule, ErrorHandler } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
-import { HttpModule } from '@angular/http';
+import { HttpModule, Http } from '@angular/http';
import { NgLoggerModule, Level } from '@nsalaun/ng-logger';
+import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
+import { TranslatePoHttpLoader } from '@biesbjerg/ngx-translate-po-http-loader';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { Copay } from './app.component';
@@ -24,10 +26,8 @@ import { StorageProvider } from '../providers/storage/storage';
import { AppProvider } from '../providers/app/app';
import { PlatformProvider } from '../providers/platform/platform';
-// Set different log level depending on environment.
-const LOG_LEVEL = Level.LOG;
-if (isDevMode()) {
- const LOG_LEVEL = Level.ERROR;
+export function createTranslateLoader(http: Http) {
+ return new TranslatePoHttpLoader(http, './assets/i18n/', '.po');
}
@NgModule({
@@ -44,7 +44,14 @@ if (isDevMode()) {
imports: [
BrowserModule,
HttpModule,
- NgLoggerModule.forRoot(LOG_LEVEL),
+ NgLoggerModule.forRoot(Level.LOG),
+ TranslateModule.forRoot({
+ loader: {
+ provide: TranslateLoader,
+ useFactory: (createTranslateLoader),
+ deps: [Http]
+ }
+ }),
IonicModule.forRoot(Copay)
],
bootstrap: [IonicApp],
diff --git a/src/assets/i18n/app.pot b/src/assets/i18n/app.pot
new file mode 100644
index 000000000..9dbbab552
--- /dev/null
+++ b/src/assets/i18n/app.pot
@@ -0,0 +1,17 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Home"
+msgstr ""
+
+msgid "Receive"
+msgstr ""
+
+msgid "Send"
+msgstr ""
+
+msgid "Setting"
+msgstr ""
\ No newline at end of file
diff --git a/src/assets/i18n/en.mo b/src/assets/i18n/en.mo
new file mode 100644
index 000000000..52852c9d5
Binary files /dev/null and b/src/assets/i18n/en.mo differ
diff --git a/src/assets/i18n/en.po b/src/assets/i18n/en.po
new file mode 100644
index 000000000..c3f8d9ac0
--- /dev/null
+++ b/src/assets/i18n/en.po
@@ -0,0 +1,25 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"X-Generator: Poedit 2.0.3\n"
+"Last-Translator: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: en\n"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "Receive"
+msgstr "Receive"
+
+msgid "Send"
+msgstr "Send"
+
+msgid "Setting"
+msgstr "Setting"
diff --git a/src/assets/i18n/es.mo b/src/assets/i18n/es.mo
new file mode 100644
index 000000000..944da2672
Binary files /dev/null and b/src/assets/i18n/es.mo differ
diff --git a/src/assets/i18n/es.po b/src/assets/i18n/es.po
new file mode 100644
index 000000000..ac6acb48a
--- /dev/null
+++ b/src/assets/i18n/es.po
@@ -0,0 +1,25 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"X-Generator: Poedit 2.0.3\n"
+"Last-Translator: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: es\n"
+
+msgid "Home"
+msgstr "Inicio"
+
+msgid "Receive"
+msgstr "Recibir"
+
+msgid "Send"
+msgstr "Enviar"
+
+msgid "Setting"
+msgstr "ConfiguraciĆ³n"
diff --git a/src/pages/setting/setting.html b/src/pages/setting/setting.html
index f1cc276a7..d48c36de9 100644
--- a/src/pages/setting/setting.html
+++ b/src/pages/setting/setting.html
@@ -20,6 +20,16 @@
Notification
+
+
+
+ Language
+
+
+ English
+ Spanish
+
+
diff --git a/src/pages/setting/setting.ts b/src/pages/setting/setting.ts
index d05aa2608..223add837 100644
--- a/src/pages/setting/setting.ts
+++ b/src/pages/setting/setting.ts
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { AppProvider } from '../../providers/app/app';
+import { TranslateService } from '@ngx-translate/core';
import { AboutPage } from '../about/about';
@@ -10,15 +11,18 @@ import { AboutPage } from '../about/about';
templateUrl: 'setting.html',
})
export class SettingPage {
+ language: string;
appName: string;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
- public app: AppProvider
+ public app: AppProvider,
+ public i18n: TranslateService,
) {
app.getName().subscribe((data) => {
this.appName = data;
+ this.language = i18n.currentLang;
});
}
diff --git a/src/pages/tabs/tabs.html b/src/pages/tabs/tabs.html
index a682cef33..7d7e56024 100644
--- a/src/pages/tabs/tabs.html
+++ b/src/pages/tabs/tabs.html
@@ -1,6 +1,6 @@
-
-
-
-
+
+
+
+