Словник
Документ "Словник" відповідає за управління процесом інтернаціоналізації предметних областей. Кожна предметна область може мати різні типи словників. Кожний словник може відповідати декільком мовам перекладу.
Архітектура
При необхідності створення локалізацій, необхідно створити документ "Словник" з вказанням мови перекладу та опису структури словника перекладу. У випадку, якщо потрібно працювати з групою мов перекладу, слід створити відповідну структуру для кожної мови перекладу.
Документ "Словник" або група документів "Словник" повинні бути зареєстровані в документі "Реєстр" предметної області, який в свою чергу, має бути зареєстрований в відповідному сервісі включеному до бізнес-схеми. Це гарантує, що при запуску ядра обчислень будуть завантажені всі ресурси перекладу.
При використанні локалізації для взаємодії між різними системами оптимальним підходом є включення не лише тексту перекладу, але й коду відповіді у відповідь на запит. Це дозволяє іншій стороні взаємодії правильно ідентифікувати тип відповіді.
Склад
Словник відображає структуру даних з можливістю нескінченного вкладення, що дозволяє ефективно групувати фрази перекладу за їх сенсовим з наченням. Цей підхід сприяє зручному організуванню та управлінню функціональністю системи, забезпечуючи швидкий доступ до необхідного функціоналу. Крім того, він дозволяє чітко відокремлювати один переклад від іншого та одні структури даних від інших.
type Dictionary = {
[key: string]: string | Dictionary;
};
type DictStructure<
L extends string | string[] = string | string[],
D extends Dictionary = Dictionary
> = (language: L, dictionary: D) => D
де:
- Типи:
DictStructure
- тип структури словника перекладу.Structure
- тип структури перекладу, яка повинна бути зареєстрована в точці входу прикладної області.L
- тип мови перекладу.D
- тип структури словника перекладу, який дорівнюєDictionary
.
Реалізація
import { setDictionary } from '@x-fiber/proton';
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
- реаліза ція словника перекладу з привʼязкою до конкретної групи мов перекладу.
Реєстрація
Щоб успішно використовувати словники мови перекладу, кожен з документів "Словник" повинен бути зареєстрований в документі
"Реєстр" предметної області. Наприклад для предметної області - агрегат "Користувачі", необхідно в опис документів
функції setRegistry
для встановлення посилання на словники та інші компоненти модуля:
- Випадок з одним типом мови перекладу:
import { setRegistry } from '@x-fiber/proton';
import { BusUsersAggDictUa } from './BusUsers.agg.dict.ua';
export const BusUsersAggRegistry = setRegistry<'BusUsersAgg'>('BusUsersAgg', {
dictionaries: BusUsersAggDictUa,
// ... other documents
});
- Випадок декількох мов перекладу:
import { setRegistry } from '@x-fiber/proton';
import { BusUsersAggDictUa } from './BusUsers.agg.dict.ua';
import { BusUsersAggDictEn } from './BusUsers.agg.dict.en';
import { BusUsersAggDictSp } from './BusUsers.agg.dict.sp';
export const BusUsersAggRegistry = setRegistry<'BusUsersAgg'>('BusUsersAgg', {
dictionaries: [BusUsersAggDictUa, BusUsersAggDictEn, BusUsersAggDictSp],
// ... other documents
});