poe-svelte-ui-lib 1.51.0 → 1.52.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/README.md +1 -1
- package/dist/locales/i18n.d.ts +1 -1
- package/dist/locales/i18n.js +2 -2
- package/dist/locales/index.d.ts +3 -0
- package/dist/locales/index.js +6 -0
- package/dist/locales/localize.d.ts +1 -1
- package/dist/locales/localize.js +1 -1
- package/dist/locales/translations.d.ts +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -110,7 +110,7 @@ npm install poe-svelte-ui-lib
|
|
|
110
110
|
|
|
111
111
|
**README компонента** (`src/lib/<Компонент>/README.md`, вкладка «Инфо» витрины) — развёрнутая документация для разработчика. Первые разделы повторяют описание (i) и не должны ему противоречить, дальше идут разработческие: `## Назначение` (плюс заметка о размерах) → `## Пакет данных` (плюс `### Протокол устройства` / пример кода прошивки) → `## Ключи` (таблица «Ключ / Описание», те же формулировки, что в (i)) → `## Особенности` (поведение, ограничения) → `## Пропсы` (таблица «Название / Тип / По умолчанию / Описание», колбэки — `### Колбэки`) → `## Примеры` (Svelte) → `## Конструктор свойств (<Компонент>Props.svelte)` → `## Внутреннее устройство`.
|
|
112
112
|
|
|
113
|
-
**Языки — единственный источник в библиотеке.** Список языков — `LANGUAGES` в `locales/languages.ts`: код, название и флаг (SVG-строка), без Svelte — годится и для серверного кода. **Новый язык — одна запись в `LANGUAGES`**: переключатели языка во всех приложениях (`LOCALES`), колонки окна «Тексты и переводы», многоязычные тексты GUI и словари подхватывают его сами; пока перевода нет — показывается текст языка по умолчанию (`DEFAULT_LANGUAGE`, `ru`). Словари (`Translations`) — строки-объекты по кодам `{ ru: "…", en: "…", zh: "…" }`: обязателен только язык по умолчанию, порядок не важен; недостающие переводы показывает `findMissingTranslations(словарь)`. `locales/i18n.ts` — текущий язык `Language`/`setLanguage` (неизвестный код не применяется, выбор сохраняется в `localStorage` `AppLanguage`), `restoreLanguage()` (сохранённый или язык браузера; стартовое значение всегда язык по умолчанию — серверный рендер совпадает с гидратацией, поэтому SSR-приложения вызывают его в `onMount` корневого layout, SPA — при старте), `LOCALES` (с флагом `flag`) и механизм перевода `createTranslator(словарь)`. Код вне компонентов берёт текущий язык через `getLanguage()` (например, для заголовка `Accept-Language`), ключ хранилища и язык по умолчанию в приложениях не повторяются; серверный код переводит функцией `translate(словарь, язык, ключ)` на язык запроса, разобранный `resolveLanguage(Accept-Language)`. Приложения (DevCloud, WebApp, терминал) свой список языков, хранилище и функцию перевода не держат: берут их из библиотеки и строят свой `$T` из своего словаря — `export const T = createTranslator(translations)`. Одно `setLanguage` переключает и компоненты библиотеки, и приложение. Многоязычные тексты GUI распознаются по виду ключей (коды языков), поэтому данные с языком, убранным из списка, не ломаются.
|
|
113
|
+
**Языки — единственный источник в библиотеке.** Список языков — `LANGUAGES` в `locales/languages.ts`: код, название и флаг (SVG-строка), без Svelte — годится и для серверного кода. **Новый язык — одна запись в `LANGUAGES`**: переключатели языка во всех приложениях (`LOCALES`), колонки окна «Тексты и переводы», многоязычные тексты GUI и словари подхватывают его сами; пока перевода нет — показывается текст языка по умолчанию (`DEFAULT_LANGUAGE`, `ru`). Словари (`Translations`) — строки-объекты по кодам `{ ru: "…", en: "…", zh: "…" }`: обязателен только язык по умолчанию, порядок не важен; недостающие переводы показывает `findMissingTranslations(словарь)`. `locales/i18n.ts` — текущий язык `Language`/`setLanguage` (неизвестный код не применяется, выбор сохраняется в `localStorage` `AppLanguage`), `restoreLanguage()` (сохранённый или язык браузера; стартовое значение всегда язык по умолчанию — серверный рендер совпадает с гидратацией, поэтому SSR-приложения вызывают его в `onMount` корневого layout, SPA — при старте), `LOCALES` (с флагом `flag`) и механизм перевода `createTranslator(словарь)`. Код вне компонентов берёт текущий язык через `getLanguage()` (например, для заголовка `Accept-Language`), ключ хранилища и язык по умолчанию в приложениях не повторяются; серверный код переводит функцией `translate(словарь, язык, ключ)` на язык запроса, разобранный `resolveLanguage(Accept-Language)`. Серверный код, который Node запускает без Vite (например WebSocket-сервер облака через `tsx`), импортирует языки и перевод из `poe-svelte-ui-lib/locales` — корень пакета экспортируется только для Svelte (условие `svelte`) и тянет компоненты, Node его не загрузит. Приложения (DevCloud, WebApp, терминал) свой список языков, хранилище и функцию перевода не держат: берут их из библиотеки и строят свой `$T` из своего словаря — `export const T = createTranslator(translations)`. Одно `setLanguage` переключает и компоненты библиотеки, и приложение. Многоязычные тексты GUI распознаются по виду ключей (коды языков), поэтому данные с языком, убранным из списка, не ломаются.
|
|
114
114
|
|
|
115
115
|
**Языки (ru/en/zh) — два слоя:**
|
|
116
116
|
|
package/dist/locales/i18n.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Readable } from "svelte/store";
|
|
2
|
-
import { type LanguageCode, type Translations } from "./languages";
|
|
2
|
+
import { type LanguageCode, type Translations } from "./languages.js";
|
|
3
3
|
export declare const Language: import("svelte/store").Writable<string>;
|
|
4
4
|
export declare const getLanguage: () => LanguageCode;
|
|
5
5
|
export declare function restoreLanguage(): void;
|
package/dist/locales/i18n.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { derived, get, writable } from "svelte/store";
|
|
2
|
-
import translations from "./translations";
|
|
3
|
-
import { DEFAULT_LANGUAGE, LANGUAGES, isLanguageCode, resolveLanguage } from "./languages";
|
|
2
|
+
import translations from "./translations.js";
|
|
3
|
+
import { DEFAULT_LANGUAGE, LANGUAGES, isLanguageCode, resolveLanguage } from "./languages.js";
|
|
4
4
|
/* Язык и механизм перевода — общие для библиотеки и приложений: приложение берёт отсюда Language/setLanguage/LOCALES и строит свой $T
|
|
5
5
|
из своего словаря через createTranslator (см. README «Языки»); переключение языка одним setLanguage меняет и компоненты, и приложение */
|
|
6
6
|
/*
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/* $lib/locales/index.ts */
|
|
2
|
+
/* Языки и механизм перевода без Svelte-компонентов — точка входа "poe-svelte-ui-lib/locales" для серверного кода, который Node запускает без Vite
|
|
3
|
+
(tsx: WebSocket-сервер облака); импорты с расширением .js, чтобы их разрешал сам Node */
|
|
4
|
+
export * from "./languages.js";
|
|
5
|
+
export * from "./i18n.js";
|
|
6
|
+
export * from "./localize.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type LanguageCode } from "./languages";
|
|
1
|
+
import { type LanguageCode } from "./languages.js";
|
|
2
2
|
export type LocalizedText = string | Partial<Record<LanguageCode, string>>;
|
|
3
3
|
export declare const isLocalizedText: (value: unknown) => value is Partial<Record<LanguageCode, string>>;
|
|
4
4
|
export declare const localizeText: (value: LocalizedText | undefined, lang: string) => string;
|
package/dist/locales/localize.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* $lib/locales/localize.ts */
|
|
2
2
|
/* Многоязычные тексты, введённые в конструкторе: строка (язык по умолчанию) или объект по кодам языков { ru, en, zh, ... };
|
|
3
3
|
язык по умолчанию (DEFAULT_LANGUAGE) — основной и запасной; набор и порядок языков — LANGUAGES (languages.ts) */
|
|
4
|
-
import { DEFAULT_LANGUAGE, LANGUAGE_CODES } from "./languages";
|
|
4
|
+
import { DEFAULT_LANGUAGE, LANGUAGE_CODES } from "./languages.js";
|
|
5
5
|
/* Ключ многоязычного текста: код языка из LANGUAGES или похожий на код (ru, en, pt-BR) — данные с языком, убранным из списка, не ломаются */
|
|
6
6
|
const LANGUAGE_KEY = /^[a-z]{2,3}(-[A-Z]{2})?$/;
|
|
7
7
|
/* Поля свойств, которые считаются текстом для пользователя — их показывает и правит окно «Тексты и переводы» (TextsEditor) */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "poe-svelte-ui-lib",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.52.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/Oleg-Perevyshin/ElementsUI.git"
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"types": "./dist/index.d.ts",
|
|
25
25
|
"svelte": "./dist/index.js"
|
|
26
26
|
},
|
|
27
|
+
"./locales": {
|
|
28
|
+
"types": "./dist/locales/index.d.ts",
|
|
29
|
+
"default": "./dist/locales/index.js"
|
|
30
|
+
},
|
|
27
31
|
"./theme.css": "./dist/theme.css"
|
|
28
32
|
},
|
|
29
33
|
"files": [
|