diff --git a/packages/platform/src/i18n.ts b/packages/platform/src/i18n.ts index d6a4261405..b59fb3c78a 100644 --- a/packages/platform/src/i18n.ts +++ b/packages/platform/src/i18n.ts @@ -33,7 +33,7 @@ type Messages = Record> const loaders = new Map() const translations = new Map() const cache = new Map() - +const englishTranslationsForMissing = new Map() /** * @public * @param plugin - @@ -91,9 +91,23 @@ async function getTranslation (id: _IdInfo, locale: string): Promise)?.[id.name] - : (messages[id.name] as IntlString) + if (id.kind !== undefined) { + if ((messages[id.kind] as Record)?.[id.name] !== undefined) { + return (messages[id.kind] as Record)?.[id.name] + } else { + let eng = englishTranslationsForMissing.get(id.component) + if (eng === undefined) { + eng = await loadTranslationsForComponent(id.component, 'en') + englishTranslationsForMissing.set(id.component, eng) + } + if (eng instanceof Status) { + return eng + } + return (eng[id.kind] as Record)?.[id.name] + } + } else { + return messages[id.name] as IntlString + } } catch (err) { const status = unknownError(err) await setPlatformStatus(status) diff --git a/packages/text-editor/lang/ru.json b/packages/text-editor/lang/ru.json index 4b467aca70..a5ea77edd5 100644 --- a/packages/text-editor/lang/ru.json +++ b/packages/text-editor/lang/ru.json @@ -51,6 +51,6 @@ "Unset": "Убрать", "Image": "Изображение", "SeparatorLine": "Разделительная линия", - "TodoList": "Action item" + "TodoList": "Действие" } } diff --git a/packages/text-editor/src/components/CollaborativeTextEditor.svelte b/packages/text-editor/src/components/CollaborativeTextEditor.svelte index 77e4b7bca6..70bf31b572 100644 --- a/packages/text-editor/src/components/CollaborativeTextEditor.svelte +++ b/packages/text-editor/src/components/CollaborativeTextEditor.svelte @@ -167,6 +167,15 @@ let placeHolderStr: string = '' $: ph = translate(placeholder, {}, $themeStore.language).then((r) => { + if (editor !== undefined && placeHolderStr !== r) { + const placeholderIndex = editor.extensionManager.extensions.findIndex( + (extension) => extension.name === 'placeholder' + ) + if (placeholderIndex !== -1) { + editor.extensionManager.extensions[placeholderIndex].options.placeholder = r + editor.view.dispatch(editor.state.tr) + } + } placeHolderStr = r }) diff --git a/packages/text-editor/src/components/TextEditor.svelte b/packages/text-editor/src/components/TextEditor.svelte index c313868300..3d5e05e616 100644 --- a/packages/text-editor/src/components/TextEditor.svelte +++ b/packages/text-editor/src/components/TextEditor.svelte @@ -55,6 +55,15 @@ let placeHolderStr: string = '' $: ph = translate(placeholder, {}, $themeStore.language).then((r) => { + if (editor !== undefined && placeHolderStr !== r) { + const placeholderIndex = editor.extensionManager.extensions.findIndex( + (extension) => extension.name === 'placeholder' + ) + if (placeholderIndex !== -1) { + editor.extensionManager.extensions[placeholderIndex].options.placeholder = r + editor.view.dispatch(editor.state.tr) + } + } placeHolderStr = r }) diff --git a/packages/ui/src/components/DropdownPopup.svelte b/packages/ui/src/components/DropdownPopup.svelte index 97279d993d..3a30442b6e 100644 --- a/packages/ui/src/components/DropdownPopup.svelte +++ b/packages/ui/src/components/DropdownPopup.svelte @@ -29,10 +29,10 @@ export let withSearch: boolean = true let search: string = '' - let phTraslate: string = '' + let phTranslate: string = '' $: if (placeholder) { translate(placeholder, {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) } const dispatch = createEventDispatcher() @@ -82,7 +82,7 @@ bind:this={searchInput} type="text" bind:value={search} - placeholder={phTraslate} + placeholder={phTranslate} on:input={(ev) => {}} on:change /> diff --git a/packages/ui/src/components/EditBox.svelte b/packages/ui/src/components/EditBox.svelte index 2e9748b5bd..aec98278c3 100644 --- a/packages/ui/src/components/EditBox.svelte +++ b/packages/ui/src/components/EditBox.svelte @@ -44,7 +44,7 @@ const dispatch = createEventDispatcher() let input: HTMLInputElement - let phTraslate: string = '' + let phTranslate: string = '' $: { if ( @@ -57,7 +57,7 @@ } } $: void translate(placeholder, placeholderParam ?? {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) function handleInput (): void { @@ -143,7 +143,7 @@ bind:this={input} type="Password" bind:value - placeholder={phTraslate} + placeholder={phTranslate} on:input={handleInput} on:change on:keydown @@ -160,7 +160,7 @@ type="number" class="number" bind:value - placeholder={phTraslate} + placeholder={phTranslate} on:input={handleInput} on:change on:keydown @@ -176,7 +176,7 @@ bind:this={input} type="text" bind:value - placeholder={phTraslate} + placeholder={phTranslate} on:input={handleInput} on:change on:keydown diff --git a/packages/ui/src/components/NumberInput.svelte b/packages/ui/src/components/NumberInput.svelte index e8163b331b..d5df823ef4 100644 --- a/packages/ui/src/components/NumberInput.svelte +++ b/packages/ui/src/components/NumberInput.svelte @@ -41,7 +41,7 @@ let text: HTMLElement let input: HTMLInputElement let style: string - let phTraslate: string = '' + let phTranslate: string = '' let parentWidth: number | undefined $: { @@ -59,7 +59,7 @@ } $: style = `max-width: ${maxWidth || (parentWidth ? `${parentWidth}px` : 'max-content')};` $: translate(placeholder, placeholderParam ?? {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) function computeSize (t: HTMLInputElement | EventTarget | null) { @@ -68,7 +68,7 @@ } const target = t as HTMLInputElement const value = target.value - text.innerHTML = (value === '' ? phTraslate : value) + text.innerHTML = (value === '' ? phTranslate : value) .replaceAll(' ', ' ') .replaceAll('<', '<') .replaceAll('>', '>') @@ -139,7 +139,7 @@ type="number" class="number" bind:value - placeholder={phTraslate} + placeholder={phTranslate} {style} on:input={(ev) => { if (ev.target) { diff --git a/packages/ui/src/components/PlainTextEditor.svelte b/packages/ui/src/components/PlainTextEditor.svelte index f5cd09934a..398b5c03b4 100644 --- a/packages/ui/src/components/PlainTextEditor.svelte +++ b/packages/ui/src/components/PlainTextEditor.svelte @@ -27,10 +27,10 @@ export let disabled: boolean = false let input: HTMLTextAreaElement - let phTraslate: string = '' + let phTranslate: string = '' $: void translate(placeholder, placeholderParam ?? {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) onMount(() => { @@ -62,7 +62,7 @@ bind:value bind:this={input} {disabled} - placeholder={phTraslate} + placeholder={phTranslate} on:keydown on:change on:keydown diff --git a/packages/ui/src/components/TextArea.svelte b/packages/ui/src/components/TextArea.svelte index f5e0a97e60..ba7a57caf2 100644 --- a/packages/ui/src/components/TextArea.svelte +++ b/packages/ui/src/components/TextArea.svelte @@ -30,10 +30,10 @@ export let disabled: boolean = false let input: HTMLTextAreaElement - let phTraslate: string = '' + let phTranslate: string = '' $: translate(placeholder, placeholderParam ?? {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) export function focus () { @@ -47,7 +47,7 @@ bind:value bind:this={input} {disabled} - placeholder={phTraslate} + placeholder={phTranslate} on:keydown on:change on:keydown diff --git a/plugins/calendar-resources/src/components/AddParticipant.svelte b/plugins/calendar-resources/src/components/AddParticipant.svelte index 219fabab4b..a472becba2 100644 --- a/plugins/calendar-resources/src/components/AddParticipant.svelte +++ b/plugins/calendar-resources/src/components/AddParticipant.svelte @@ -40,12 +40,12 @@ let text: HTMLElement let input: HTMLInputElement let style: string - let phTraslate: string = '' + let phTranslate: string = '' let parentWidth: number | undefined $: style = `max-width: ${maxWidth || (parentWidth ? `${parentWidth}px` : 'max-content')};` $: translate(placeholder, {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) function computeSize (t: HTMLInputElement | EventTarget | null) { @@ -54,7 +54,7 @@ } const target = t as HTMLInputElement const value = target.value - text.innerHTML = (value === '' ? phTraslate : value) + text.innerHTML = (value === '' ? phTranslate : value) .replaceAll(' ', ' ') .replaceAll('<', '<') .replaceAll('>', '>') @@ -201,7 +201,7 @@ bind:this={input} type="text" bind:value - placeholder={phTraslate} + placeholder={phTranslate} {style} on:input={(ev) => { computeSize(ev.target) diff --git a/plugins/contact-resources/src/components/ChannelEditor.svelte b/plugins/contact-resources/src/components/ChannelEditor.svelte index 66f94ebbc7..33c6c6d26c 100644 --- a/plugins/contact-resources/src/components/ChannelEditor.svelte +++ b/plugins/contact-resources/src/components/ChannelEditor.svelte @@ -46,11 +46,11 @@ const dispatch = createEventDispatcher() let input: HTMLInputElement - let phTraslate: string - $: translate(placeholder, {}, $themeStore.language).then((tr) => (phTraslate = tr)) + let phTranslate: string + $: translate(placeholder, {}, $themeStore.language).then((tr) => (phTranslate = tr)) let label: IntlString = plugin.string.CopyToClipboard - let lTraslate: string - $: translate(label, {}, $themeStore.language).then((tr) => (lTraslate = tr)) + let lTranslate: string + $: translate(label, {}, $themeStore.language).then((tr) => (lTranslate = tr)) let show: boolean = false const copyChannel = (): void => { @@ -98,13 +98,13 @@ {#if editable}
-
+
{ if (ev.key === 'Enter') { @@ -181,7 +181,7 @@ class:show class:copied={label === view.string.Copied} class:cursor-pointer={openable} - data-tooltip={lTraslate} + data-tooltip={lTranslate} on:click={() => { if (openable) { dispatch('update', 'open') diff --git a/plugins/controlled-documents-resources/src/components/document/editors/DescriptionEditor.svelte b/plugins/controlled-documents-resources/src/components/document/editors/DescriptionEditor.svelte index 2660cc6e6e..24cd72946e 100644 --- a/plugins/controlled-documents-resources/src/components/document/editors/DescriptionEditor.svelte +++ b/plugins/controlled-documents-resources/src/components/document/editors/DescriptionEditor.svelte @@ -26,10 +26,10 @@ export let disabled: boolean = false let input: HTMLElement - let phTraslate: string = '' + let phTranslate: string = '' $: translate(placeholder, placeholderParam ?? {}).then((res) => { - phTraslate = res + phTranslate = res }) afterUpdate(() => { @@ -50,7 +50,7 @@ rows="1" bind:value bind:this={input} - placeholder={phTraslate} + placeholder={phTranslate} {disabled} on:keydown on:change diff --git a/plugins/tags-resources/src/components/TagsCategoryPopup.svelte b/plugins/tags-resources/src/components/TagsCategoryPopup.svelte index 6b03c34575..46fcb81956 100644 --- a/plugins/tags-resources/src/components/TagsCategoryPopup.svelte +++ b/plugins/tags-resources/src/components/TagsCategoryPopup.svelte @@ -45,10 +45,10 @@ const dispatch = createEventDispatcher() const query = createQuery() - let phTraslate: string = '' + let phTranslate: string = '' $: if (placeholder) { translate(placeholder, {}, $themeStore.language).then((res) => { - phTraslate = res + phTranslate = res }) } @@ -116,7 +116,7 @@ bind:this={searchElement} type="text" bind:value={search} - placeholder={phTraslate} + placeholder={phTranslate} style="width: 100%;" on:change />