@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 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
@@ -17,5 +17,5 @@ yarn add @rxap/ngx-localize
17
17
  ```
18
18
  **Install peer dependencies:**
19
19
  ```bash
20
- yarn add @angular/common@^16.1.4 @angular/core@^16.1.4 rxjs@^7.8.0
20
+ yarn add @angular/common@^16.1.4 @angular/core@^16.1.4 @rxap/config@* @rxap/ngx-user@* rxjs@^7.8.0
21
21
  ```
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL2xvY2FsaXplL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVnaW9uIFxuZXhwb3J0ICogZnJvbSAnLi9saWIvbGFuZ3VhZ2UtaW50ZXJjZXB0b3InO1xuLy8gZW5kcmVnaW9uXG4iXX0=
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 { inject, LOCALE_ID } from '@angular/core';
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":";;AAWgB,SAAA,mBAAmB,CACjC,OAA6B,EAC7B,IAAmB,EAAA;AAGnB,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtD,IAAA,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACzD,SAAA,CAAC,CAAC;AACJ,KAAA;AAED,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AAEvB;;AC1BA;AAEA;;ACFA;;AAEG;;;;"}
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":";;;;;MAQa,WAAW,CAAA;IAItB,WAEmB,CAAA,OAAe,EACf,2BAAwD,EAAA;QADxD,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QACf,IAA2B,CAAA,2BAAA,GAA3B,2BAA2B,CAA6B;AAEzE,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;KAC7D;IAEM,MAAM,WAAW,CAAC,QAAgB,EAAA;QACvC,MAAM,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACzB;AAEM,IAAA,QAAQ,CAAC,IAAY,EAAE,OAAkB,GAAA,IAAI,CAAC,eAAe,EAAA;QAClE,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACzE,OAAO;AACR,SAAA;AACD,QAAA,MAAM,WAAW,GACf,QAAQ,CAAC,MAAM;AACf,YAAA,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAM,EAAA,EAAA,OAAQ,EAAE,CAAC,EAAE,CAAK,CAAA,EAAA,IAAK,EAAE,CAAC;YACrE,QAAQ,CAAC,MAAM,CAAC;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,WAAW,CAAC,CAAC;AACzD,QAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC/B;AA5BU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,kBAKZ,SAAS,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AALR,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;0BAM7B,MAAM;2BAAC,SAAS,CAAA;;;ACFL,SAAA,mBAAmB,CACjC,OAA6B,EAC7B,IAAmB,EAAA;AAGnB,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtD,IAAA,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACzD,SAAA,CAAC,CAAC;AACJ,KAAA;AAED,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AAEvB;;MCrBa,uBAAuB,CAAA;IAKlC,WACmB,CAAA,MAAqB,EACrB,WAAwB,EAAA;QADxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;QACrB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAEzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC;QACP,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;KAC1D;IAEM,MAAM,WAAW,CAAC,QAAgB,EAAA;AACvC,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;YACjD,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC9C,SAAA;KACF;8GArBU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACJlC;AAIA;;ACJA;;AAEG;;;;"}
package/index.d.ts CHANGED
@@ -1 +1,3 @@
1
+ export * from './lib/i18n.service';
1
2
  export * from './lib/language-interceptor';
3
+ export * from './lib/language-selector.service';
@@ -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.1-dev.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": "76268b3e76dda1e11cc5fefead91c88f56d50b99",
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)}