Словник
Словники призначені для створення локалізації та інтернаціоналізації предметних областей. Предметна область може
включати один словник або групу словників. Кожний словник визначає мову перекладу та опису переклади цієї мови перекладу.
При створенні групи словників необхідно в них використовувати єдиний тип словника перекладу предметної області. Таким
чином при описі структури нового словника - TypeScript
вимагатиме опису усіх полів перекладу.
Архітектура
Першочергово "Словник" або група "Словників" повинна бути зареєстрована в точці входу предметної області, яка повинна бути зареєстрована в відповідному сервісі. При запуску програми веб-клієнта відбудеться завантаження бізнес-схеми в ядро відображень, формуючи знімок бізнес-схеми. В разі використання представлень на сторінці з якою взаємодіє користувач, та використання в цьому представленні словників перекладу здійснить ряд звернень до бізнес-схеми для отримання необхідних пе рекладів.
При створені загальних графічних компонентів такий як навігаційні панелі, Footer
, Header
тощо може виникнути
потреба в інтернаціоналізації також, в такому разі бізнес-схема, при описі сервісу надає окрему загальну структуру
словників, які можуть бути використані по всій протяжності веб-клієнта без залежності до відповідної предметної області.
Склад
Словник відображає структуру даних з можливістю нескінченного вкладе ння, що дозволяє ефективно групувати фрази перекладу за їх сенсовим значенням. Цей підхід сприяє зручному організуванню та управлінню функціональністю системи, забезпечуючи швидкий доступ до необхідного функціоналу. Крім того, він дозволяє чітко відокремлювати один переклад від іншого та одні структури даних від інших.
type Dictionary = {
[key: string]: string | Dictionary;
};
type Structure<
L extends string | string[] = string | string[],
D extends Dictionary = Dictionary
> = (language: L, dictionary: D) => D
де:
- Типи:
Dictionary
- тип структури словника перекладу.Structure
- тип структури перекладу, яка повинна бути зареєстрована в точці входу предметної області.L
- тип мови перекладу.D
- тип структури словника перекладу, який дорівнюєDictionary
.
Реалізація
import { setDictionary } from '@x-fiber/display';
type Languages = 'en' | 'en-EN' | 'sp' | 'sp-SP' | 'ua' | 'ua-UA';
type Dictionary = {
BusUsers: {
USER_LIST_EMPTY: string;
USER_NOT_FOUND: string;
};
};
export const BusUsersAggDictEn = setDictionary<Languages, Dictionary>(['en', 'en-EN'], {
BusUsers: {
USER_LIST_EMPTY: 'User list is empty.',
USER_NOT_FOUND: 'User not found.'
},
});
де:
- Типи:
Languages
- тип мови / мов перекладу.Dictionary
- структура словника перекладу
- Структури:
setDictionary
- вбудована функція в ядро відображень, яка диктує структуру заповнення словника перекладу.BusUsersAggDictEn
- реалізація словника перекладу з привʼязкою до конкретної групи мов перекладу.
Реєстрація
Для використання ресурсів перекладу необхідно зареєструвати документи або групу документів "Словник" в точці входу в предметну область pointer
.
Наприклад, для модуля BusUsersAgg
, необхідно використовувати функцію setPointer
для створення опису точки входу,
та зареєструвати в цій структурі документ "Словник".
- Реєстрація одного словника перекладу:
import { setPointer } from "@x-fiber/display";
import { BusUsersAggDictUa } from "./BusUsers.agg.dict.ua";
type BusDomains = 'BusUsersAgg' | 'BusUsersAuthSpec'
export const BusUsersAggPointer = setPointer<BusDomains>("BusUsersAgg", {
dictionaries: BusUsersAggDictUa,
// ... other documents
});
- Реєстрація групи словників перекладу:
import { setPointer } from "@x-fiber/display";
import { BusUsersAggDictUa } from "./BusUsers.agg.dict.ua";
import { BusUsersAggDictEn } from "./BusUsers.agg.dict.en";
import { BusUsersAggDictSp } from "./BusUsers.agg.dict.sp";
type BusDomains = 'BusUsersAgg' | 'BusUsersAuthSpec'
export const BusUsersAggPointer = setPointer<BusDomains>("BusUsersAgg", {
dictionaries: [BusUsersAggDictUa, BusUsersAggDictEn, BusUsersAggDictSp],
// ... other documents
});