@rxap/ngx-localize 16.0.1-dev.0 → 16.1.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/esm2022/index.mjs +3 -1
- package/esm2022/lib/i18n.service.mjs +36 -0
- package/esm2022/lib/language-selector.service.mjs +30 -0
- package/fesm2022/rxap-ngx-localize.mjs +61 -2
- package/fesm2022/rxap-ngx-localize.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/i18n.service.d.ts +12 -0
- package/lib/language-selector.service.d.ts +14 -0
- package/package.json +4 -2
- package/theme.css +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [16.1.0-dev.0](https://gitlab.com/rxap/packages/compare/@rxap/ngx-localize@16.0.1-dev.0...@rxap/ngx-localize@16.1.0-dev.0) (2023-09-19)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- add language utility services ([96e6785](https://gitlab.com/rxap/packages/commit/96e67855bfcb27f274393526d1ab81f6d7c2f24a))
|
|
11
|
+
|
|
6
12
|
## 16.0.1-dev.0 (2023-09-18)
|
|
7
13
|
|
|
8
14
|
**Note:** Version bump only for package @rxap/ngx-localize
|
package/README.md
CHANGED
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
// region
|
|
2
|
+
export * from './lib/i18n.service';
|
|
2
3
|
export * from './lib/language-interceptor';
|
|
4
|
+
export * from './lib/language-selector.service';
|
|
3
5
|
// endregion
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xvY2FsaXplL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJlZ2lvbiBcbmV4cG9ydCAqIGZyb20gJy4vbGliL2kxOG4uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYW5ndWFnZS1pbnRlcmNlcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYW5ndWFnZS1zZWxlY3Rvci5zZXJ2aWNlJztcbi8vIGVuZHJlZ2lvblxuIl19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Inject, Injectable, LOCALE_ID, } from '@angular/core';
|
|
2
|
+
import { UserSettingsLanguageService } from '@rxap/ngx-user';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@rxap/ngx-user";
|
|
5
|
+
export class I18nService {
|
|
6
|
+
constructor(localId, userSettingsLanguageService) {
|
|
7
|
+
this.localId = localId;
|
|
8
|
+
this.userSettingsLanguageService = userSettingsLanguageService;
|
|
9
|
+
this.currentLanguage = this.localId.replace(/-[A-Z]+$/, '');
|
|
10
|
+
}
|
|
11
|
+
async setLanguage(language) {
|
|
12
|
+
await this.userSettingsLanguageService.setLanguage(language);
|
|
13
|
+
this.redirect(language);
|
|
14
|
+
}
|
|
15
|
+
redirect(next, current = this.currentLanguage) {
|
|
16
|
+
if (current === next) {
|
|
17
|
+
console.warn('[I18nService] redirect not required - language unchanged');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const redirectUrl = location.origin +
|
|
21
|
+
location.pathname.replace(new RegExp(`^/${current}`), `/${next}`) +
|
|
22
|
+
location.search;
|
|
23
|
+
console.log('[I18nService] redirect to: ' + redirectUrl);
|
|
24
|
+
location.replace(redirectUrl);
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, deps: [{ token: LOCALE_ID }, { token: i1.UserSettingsLanguageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{ providedIn: 'root' }]
|
|
32
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
33
|
+
type: Inject,
|
|
34
|
+
args: [LOCALE_ID]
|
|
35
|
+
}] }, { type: i1.UserSettingsLanguageService }]; } });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sb2NhbGl6ZS9zcmMvbGliL2kxOG4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3RCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUVtQixPQUFlLEVBQ2YsMkJBQXdEO1FBRHhELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQTZCO1FBRXpFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWdCO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBWSxFQUFFLFVBQWtCLElBQUksQ0FBQyxlQUFlO1FBQ2xFLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDekUsT0FBTztTQUNSO1FBQ0QsTUFBTSxXQUFXLEdBQ2YsUUFBUSxDQUFDLE1BQU07WUFDZixRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFNLE9BQVEsRUFBRSxDQUFDLEVBQUUsSUFBSyxJQUFLLEVBQUUsQ0FBQztZQUNyRSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQTVCVSxXQUFXLGtCQUtaLFNBQVM7a0hBTFIsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTTdCLE1BQU07MkJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgTE9DQUxFX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJTZXR0aW5nc0xhbmd1YWdlU2VydmljZSB9IGZyb20gJ0ByeGFwL25neC11c2VyJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJMThuU2VydmljZSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxJZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclNldHRpbmdzTGFuZ3VhZ2VTZXJ2aWNlOiBVc2VyU2V0dGluZ3NMYW5ndWFnZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gdGhpcy5sb2NhbElkLnJlcGxhY2UoLy1bQS1aXSskLywgJycpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLnVzZXJTZXR0aW5nc0xhbmd1YWdlU2VydmljZS5zZXRMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgdGhpcy5yZWRpcmVjdChsYW5ndWFnZSk7XG4gIH1cblxuICBwdWJsaWMgcmVkaXJlY3QobmV4dDogc3RyaW5nLCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgIGlmIChjdXJyZW50ID09PSBuZXh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tJMThuU2VydmljZV0gcmVkaXJlY3Qgbm90IHJlcXVpcmVkIC0gbGFuZ3VhZ2UgdW5jaGFuZ2VkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZGlyZWN0VXJsID1cbiAgICAgIGxvY2F0aW9uLm9yaWdpbiArXG4gICAgICBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vJHsgY3VycmVudCB9YCksIGAvJHsgbmV4dCB9YCkgK1xuICAgICAgbG9jYXRpb24uc2VhcmNoO1xuICAgIGNvbnNvbGUubG9nKCdbSTE4blNlcnZpY2VdIHJlZGlyZWN0IHRvOiAnICsgcmVkaXJlY3RVcmwpO1xuICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RVcmwpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { ConfigService } from '@rxap/config';
|
|
3
|
+
import { I18nService } from './i18n.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@rxap/config";
|
|
6
|
+
import * as i2 from "./i18n.service";
|
|
7
|
+
export class LanguageSelectorService {
|
|
8
|
+
constructor(config, i18nService) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.i18nService = i18nService;
|
|
11
|
+
this.languages = this.config.get('i18n.languages') ?? {};
|
|
12
|
+
this.defaultLanguage =
|
|
13
|
+
this.config.get('i18n.defaultLanguage') ??
|
|
14
|
+
Object.keys(this.languages)[0] ??
|
|
15
|
+
'en';
|
|
16
|
+
this.selectedLanguage = this.i18nService.currentLanguage;
|
|
17
|
+
}
|
|
18
|
+
async setLanguage(language) {
|
|
19
|
+
if (language !== this.i18nService.currentLanguage) {
|
|
20
|
+
await this.i18nService.setLanguage(language);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, deps: [{ token: i1.ConfigService }, { token: i2.I18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
24
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, providedIn: 'root' }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, decorators: [{
|
|
27
|
+
type: Injectable,
|
|
28
|
+
args: [{ providedIn: 'root' }]
|
|
29
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.I18nService }]; } });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbG9jYWxpemUvc3JjL2xpYi9sYW5ndWFnZS1zZWxlY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHN0MsTUFBTSxPQUFPLHVCQUF1QjtJQUtsQyxZQUNtQixNQUFxQixFQUNyQixXQUF3QjtRQUR4QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXpDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQU0sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWdCO1FBQ3ZDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFO1lBQ2pELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDOzhHQXJCVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQURWLE1BQU07OzJGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4vaTE4bi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMYW5ndWFnZVNlbGVjdG9yU2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBsYW5ndWFnZXM6IGFueTtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmxhbmd1YWdlcyA9IHRoaXMuY29uZmlnLmdldDxhbnk+KCdpMThuLmxhbmd1YWdlcycpID8/IHt9O1xuICAgIHRoaXMuZGVmYXVsdExhbmd1YWdlID1cbiAgICAgIHRoaXMuY29uZmlnLmdldCgnaTE4bi5kZWZhdWx0TGFuZ3VhZ2UnKSA/P1xuICAgICAgT2JqZWN0LmtleXModGhpcy5sYW5ndWFnZXMpWzBdID8/XG4gICAgICAnZW4nO1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IHRoaXMuaTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBpZiAobGFuZ3VhZ2UgIT09IHRoaXMuaTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlKSB7XG4gICAgICBhd2FpdCB0aGlzLmkxOG5TZXJ2aWNlLnNldExhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
@@ -1,4 +1,39 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { LOCALE_ID, Injectable, Inject, inject } from '@angular/core';
|
|
3
|
+
import * as i1 from '@rxap/ngx-user';
|
|
4
|
+
import * as i1$1 from '@rxap/config';
|
|
5
|
+
|
|
6
|
+
class I18nService {
|
|
7
|
+
constructor(localId, userSettingsLanguageService) {
|
|
8
|
+
this.localId = localId;
|
|
9
|
+
this.userSettingsLanguageService = userSettingsLanguageService;
|
|
10
|
+
this.currentLanguage = this.localId.replace(/-[A-Z]+$/, '');
|
|
11
|
+
}
|
|
12
|
+
async setLanguage(language) {
|
|
13
|
+
await this.userSettingsLanguageService.setLanguage(language);
|
|
14
|
+
this.redirect(language);
|
|
15
|
+
}
|
|
16
|
+
redirect(next, current = this.currentLanguage) {
|
|
17
|
+
if (current === next) {
|
|
18
|
+
console.warn('[I18nService] redirect not required - language unchanged');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const redirectUrl = location.origin +
|
|
22
|
+
location.pathname.replace(new RegExp(`^/${current}`), `/${next}`) +
|
|
23
|
+
location.search;
|
|
24
|
+
console.log('[I18nService] redirect to: ' + redirectUrl);
|
|
25
|
+
location.replace(redirectUrl);
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, deps: [{ token: LOCALE_ID }, { token: i1.UserSettingsLanguageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, decorators: [{
|
|
31
|
+
type: Injectable,
|
|
32
|
+
args: [{ providedIn: 'root' }]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
34
|
+
type: Inject,
|
|
35
|
+
args: [LOCALE_ID]
|
|
36
|
+
}] }, { type: i1.UserSettingsLanguageService }]; } });
|
|
2
37
|
|
|
3
38
|
function LanguageInterceptor(request, next) {
|
|
4
39
|
const localId = inject(LOCALE_ID, { optional: true });
|
|
@@ -10,6 +45,30 @@ function LanguageInterceptor(request, next) {
|
|
|
10
45
|
return next(request);
|
|
11
46
|
}
|
|
12
47
|
|
|
48
|
+
class LanguageSelectorService {
|
|
49
|
+
constructor(config, i18nService) {
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.i18nService = i18nService;
|
|
52
|
+
this.languages = this.config.get('i18n.languages') ?? {};
|
|
53
|
+
this.defaultLanguage =
|
|
54
|
+
this.config.get('i18n.defaultLanguage') ??
|
|
55
|
+
Object.keys(this.languages)[0] ??
|
|
56
|
+
'en';
|
|
57
|
+
this.selectedLanguage = this.i18nService.currentLanguage;
|
|
58
|
+
}
|
|
59
|
+
async setLanguage(language) {
|
|
60
|
+
if (language !== this.i18nService.currentLanguage) {
|
|
61
|
+
await this.i18nService.setLanguage(language);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, deps: [{ token: i1$1.ConfigService }, { token: I18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
65
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, providedIn: 'root' }); }
|
|
66
|
+
}
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, decorators: [{
|
|
68
|
+
type: Injectable,
|
|
69
|
+
args: [{ providedIn: 'root' }]
|
|
70
|
+
}], ctorParameters: function () { return [{ type: i1$1.ConfigService }, { type: I18nService }]; } });
|
|
71
|
+
|
|
13
72
|
// region
|
|
14
73
|
// endregion
|
|
15
74
|
|
|
@@ -17,5 +76,5 @@ function LanguageInterceptor(request, next) {
|
|
|
17
76
|
* Generated bundle index. Do not edit.
|
|
18
77
|
*/
|
|
19
78
|
|
|
20
|
-
export { LanguageInterceptor };
|
|
79
|
+
export { I18nService, LanguageInterceptor, LanguageSelectorService };
|
|
21
80
|
//# sourceMappingURL=rxap-ngx-localize.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rxap-ngx-localize.mjs","sources":["../../../../../packages/angular/localize/src/lib/language-interceptor.ts","../../../../../packages/angular/localize/src/index.ts","../../../../../packages/angular/localize/src/rxap-ngx-localize.ts"],"sourcesContent":["import {\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {\n inject,\n LOCALE_ID,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport function LanguageInterceptor(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n\n const localId = inject(LOCALE_ID, { optional: true });\n\n if (localId) {\n request = request.clone({\n headers: request.headers.set('Accept-Language', localId),\n });\n }\n\n return next(request);\n\n}\n","// region \nexport * from './lib/language-interceptor';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"rxap-ngx-localize.mjs","sources":["../../../../../packages/angular/localize/src/lib/i18n.service.ts","../../../../../packages/angular/localize/src/lib/language-interceptor.ts","../../../../../packages/angular/localize/src/lib/language-selector.service.ts","../../../../../packages/angular/localize/src/index.ts","../../../../../packages/angular/localize/src/rxap-ngx-localize.ts"],"sourcesContent":["import {\n Inject,\n Injectable,\n LOCALE_ID,\n} from '@angular/core';\nimport { UserSettingsLanguageService } from '@rxap/ngx-user';\n\n@Injectable({ providedIn: 'root' })\nexport class I18nService {\n\n public readonly currentLanguage: string;\n\n constructor(\n @Inject(LOCALE_ID)\n private readonly localId: string,\n private readonly userSettingsLanguageService: UserSettingsLanguageService,\n ) {\n this.currentLanguage = this.localId.replace(/-[A-Z]+$/, '');\n }\n\n public async setLanguage(language: string) {\n await this.userSettingsLanguageService.setLanguage(language);\n this.redirect(language);\n }\n\n public redirect(next: string, current: string = this.currentLanguage) {\n if (current === next) {\n console.warn('[I18nService] redirect not required - language unchanged');\n return;\n }\n const redirectUrl =\n location.origin +\n location.pathname.replace(new RegExp(`^/${ current }`), `/${ next }`) +\n location.search;\n console.log('[I18nService] redirect to: ' + redirectUrl);\n location.replace(redirectUrl);\n }\n\n}\n","import {\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {\n inject,\n LOCALE_ID,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport function LanguageInterceptor(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n\n const localId = inject(LOCALE_ID, { optional: true });\n\n if (localId) {\n request = request.clone({\n headers: request.headers.set('Accept-Language', localId),\n });\n }\n\n return next(request);\n\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from '@rxap/config';\nimport { I18nService } from './i18n.service';\n\n@Injectable({ providedIn: 'root' })\nexport class LanguageSelectorService {\n public readonly languages: any;\n public readonly defaultLanguage: string;\n public selectedLanguage: string;\n\n constructor(\n private readonly config: ConfigService,\n private readonly i18nService: I18nService,\n ) {\n this.languages = this.config.get<any>('i18n.languages') ?? {};\n this.defaultLanguage =\n this.config.get('i18n.defaultLanguage') ??\n Object.keys(this.languages)[0] ??\n 'en';\n this.selectedLanguage = this.i18nService.currentLanguage;\n }\n\n public async setLanguage(language: string) {\n if (language !== this.i18nService.currentLanguage) {\n await this.i18nService.setLanguage(language);\n }\n }\n\n}\n","// region \nexport * from './lib/i18n.service';\nexport * from './lib/language-interceptor';\nexport * from './lib/language-selector.service';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.I18nService"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { UserSettingsLanguageService } from '@rxap/ngx-user';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class I18nService {
|
|
4
|
+
private readonly localId;
|
|
5
|
+
private readonly userSettingsLanguageService;
|
|
6
|
+
readonly currentLanguage: string;
|
|
7
|
+
constructor(localId: string, userSettingsLanguageService: UserSettingsLanguageService);
|
|
8
|
+
setLanguage(language: string): Promise<void>;
|
|
9
|
+
redirect(next: string, current?: string): void;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<I18nService, never>;
|
|
11
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<I18nService>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ConfigService } from '@rxap/config';
|
|
2
|
+
import { I18nService } from './i18n.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class LanguageSelectorService {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly i18nService;
|
|
7
|
+
readonly languages: any;
|
|
8
|
+
readonly defaultLanguage: string;
|
|
9
|
+
selectedLanguage: string;
|
|
10
|
+
constructor(config: ConfigService, i18nService: I18nService);
|
|
11
|
+
setLanguage(language: string): Promise<void>;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LanguageSelectorService, never>;
|
|
13
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LanguageSelectorService>;
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "16.0
|
|
2
|
+
"version": "16.1.0-dev.0",
|
|
3
3
|
"name": "@rxap/ngx-localize",
|
|
4
4
|
"license": "GPL-3.0-or-later",
|
|
5
5
|
"dependencies": {
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"@angular/common": "^16.1.4",
|
|
10
10
|
"@angular/core": "^16.1.4",
|
|
11
|
+
"@rxap/config": "*",
|
|
12
|
+
"@rxap/ngx-user": "*",
|
|
11
13
|
"rxjs": "^7.8.0"
|
|
12
14
|
},
|
|
13
15
|
"author": {
|
|
@@ -36,7 +38,7 @@
|
|
|
36
38
|
"directory": "packages/angular/localize"
|
|
37
39
|
},
|
|
38
40
|
"sideEffects": false,
|
|
39
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "f1bb2d6598d105370781998f8905bf87c4d61dea",
|
|
40
42
|
"module": "fesm2022/rxap-ngx-localize.mjs",
|
|
41
43
|
"typings": "index.d.ts",
|
|
42
44
|
"exports": {
|
package/theme.css
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.contents{display:contents}.hidden{display:none}.w-full{width:100%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-4{gap:1rem}.gap-8{gap:2rem}.p-10{padding:2.5rem}.capitalize{text-transform:capitalize}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.invert{--tw-invert:invert(100%)}.filter,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
|