fix(i18n): route dirty-guard and html-editor strings through TranslateService
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
window.confirm/window.prompt calls in projectEditorDirtyGuard and MarketplaceHtmlEditorComponent, and the hardcoded Preview/Code toggle label in its template, bypassed the app's translation pipeline. Add builder.confirmLeaveUnsaved, promptLinkUrl, promptImageUrl, htmlEditorCode and htmlEditorPreview keys (en/ru/hy), resolve them via TranslateService.t() before passing to confirm/prompt, and use TranslatePipe for the toggle button label.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
@for (item of toolbar; track item.id) {
|
||||
<button type="button" (click)="runCommand(item)">{{ item.label }}</button>
|
||||
}
|
||||
<button type="button" (click)="toggleCode()">{{ showCode() ? 'Preview' : 'Code' }}</button>
|
||||
<button type="button" (click)="toggleCode()">{{ (showCode() ? 'builder.htmlEditorPreview' : 'builder.htmlEditorCode') | translate }}</button>
|
||||
</div>
|
||||
|
||||
<textarea
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild, signal } from '@angular/core';
|
||||
import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild, inject, signal } from '@angular/core';
|
||||
import { TranslateService } from '../../../../i18n/translate.service';
|
||||
import { TranslatePipe } from '../../../../i18n/translate.pipe';
|
||||
|
||||
export interface HtmlEditorToolbarCommand {
|
||||
id: string;
|
||||
@@ -23,12 +25,14 @@ export const HTML_EDITOR_TOOLBAR: HtmlEditorToolbarCommand[] = [
|
||||
@Component({
|
||||
selector: 'app-marketplace-html-editor',
|
||||
standalone: true,
|
||||
imports: [],
|
||||
imports: [TranslatePipe],
|
||||
templateUrl: './marketplace-html-editor.component.html',
|
||||
styleUrls: ['./marketplace-html-editor.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush
|
||||
})
|
||||
export class MarketplaceHtmlEditorComponent implements OnChanges, AfterViewInit {
|
||||
private readonly translate = inject(TranslateService);
|
||||
|
||||
@Input() html = '';
|
||||
@Output() htmlChange = new EventEmitter<string>();
|
||||
@ViewChild('surface', { static: true }) surface!: ElementRef<HTMLDivElement>;
|
||||
@@ -58,13 +62,13 @@ export class MarketplaceHtmlEditorComponent implements OnChanges, AfterViewInit
|
||||
runCommand(item: HtmlEditorToolbarCommand): void {
|
||||
this.surface.nativeElement.focus();
|
||||
if (item.command === 'createLink') {
|
||||
const url = window.prompt('URL');
|
||||
const url = window.prompt(this.translate.t('builder.promptLinkUrl'));
|
||||
if (!url) {
|
||||
return;
|
||||
}
|
||||
document.execCommand('createLink', false, url);
|
||||
} else if (item.command === 'insertImage') {
|
||||
const url = window.prompt('Image URL');
|
||||
const url = window.prompt(this.translate.t('builder.promptImageUrl'));
|
||||
if (!url) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2,11 +2,13 @@ import { inject } from '@angular/core';
|
||||
import { CanDeactivateFn } from '@angular/router';
|
||||
import { ProjectEditorFacade } from '../facade/project-editor.facade';
|
||||
import { ProjectEditorPageComponent } from '../pages/project-editor-page.component';
|
||||
import { TranslateService } from '../../../i18n/translate.service';
|
||||
|
||||
export const projectEditorDirtyGuard: CanDeactivateFn<ProjectEditorPageComponent> = () => {
|
||||
const facade = inject(ProjectEditorFacade);
|
||||
if (!facade.dirty()) {
|
||||
return true;
|
||||
}
|
||||
return window.confirm('You have unsaved changes. Leave anyway?');
|
||||
const translate = inject(TranslateService);
|
||||
return window.confirm(translate.t('builder.confirmLeaveUnsaved'));
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user