Skip to content

Commit a370cb7

Browse files
Dump translations by domain as modules to use with AssetMapper
1 parent fed00e2 commit a370cb7

23 files changed

+1363
-226
lines changed

src/Translator/assets/dist/translator.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export type LocaleOf<M> = M extends Message<TranslationsType, infer Locale> ? Lo
1111
export type ParametersOf<M, D extends DomainType> = M extends Message<infer Translations, LocaleType> ? Translations[D] extends {
1212
parameters: infer Parameters;
1313
} ? Parameters : never : never;
14+
export type RegisteredTranslationsType = Record<DomainType, Record<LocaleType, Record<string, string>>>;
1415
export interface Message<Translations extends TranslationsType, Locale extends LocaleType> {
1516
id: string;
1617
translations: {
@@ -24,3 +25,4 @@ export declare function getLocale(): LocaleType;
2425
export declare function setLocaleFallbacks(localeFallbacks: Record<LocaleType, LocaleType>): void;
2526
export declare function getLocaleFallbacks(): Record<LocaleType, LocaleType>;
2627
export declare function trans<M extends Message<TranslationsType, LocaleType>, D extends DomainsOf<M>, P extends ParametersOf<M, D>>(...args: P extends NoParametersType ? [message: M, parameters?: P, domain?: RemoveIntlIcuSuffix<D>, locale?: LocaleOf<M>] : [message: M, parameters: P, domain?: RemoveIntlIcuSuffix<D>, locale?: LocaleOf<M>]): string;
28+
export declare function registerDomain(domainTranslations: RegisteredTranslationsType): void;

src/Translator/assets/dist/translator_controller.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ function getPluralizationRule(number, locale) {
190190

191191
let _locale = null;
192192
let _localeFallbacks = {};
193+
let _registeredTranslations = {};
193194
function setLocale(locale) {
194195
_locale = locale;
195196
}
@@ -212,6 +213,9 @@ function trans(message, parameters = {}, domain = 'messages', locale = null) {
212213
if (typeof locale === 'undefined' || null === locale) {
213214
locale = getLocale();
214215
}
216+
if (typeof message === 'string') {
217+
message = getRegisteredMessage(message, domain);
218+
}
215219
if (typeof message.translations === 'undefined') {
216220
return message.id;
217221
}
@@ -242,5 +246,27 @@ function trans(message, parameters = {}, domain = 'messages', locale = null) {
242246
}
243247
return message.id;
244248
}
249+
function registerDomain(domainTranslations) {
250+
for (const [domainName, translationsByLocale] of Object.entries(domainTranslations)) {
251+
_registeredTranslations[domainName] = translationsByLocale;
252+
}
253+
}
254+
function getRegisteredMessage(key, domain) {
255+
var _a;
256+
var _b;
257+
let message = { id: key, translations: {} };
258+
for (const domainName of [domain, domain + '+intl-icu']) {
259+
if (typeof _registeredTranslations[domainName] === 'undefined') {
260+
continue;
261+
}
262+
for (const [locale, translations] of Object.entries(_registeredTranslations[domainName])) {
263+
if (typeof translations[key] !== 'undefined') {
264+
(_a = (_b = message.translations)[domainName]) !== null && _a !== void 0 ? _a : (_b[domainName] = {});
265+
message.translations[domainName][locale] = translations[key];
266+
}
267+
}
268+
}
269+
return message;
270+
}
245271

246-
export { getLocale, getLocaleFallbacks, setLocale, setLocaleFallbacks, trans };
272+
export { getLocale, getLocaleFallbacks, registerDomain, setLocale, setLocaleFallbacks, trans };

src/Translator/assets/src/translator.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export type ParametersOf<M, D extends DomainType> = M extends Message<infer Tran
2525
: never
2626
: never;
2727

28+
export type RegisteredTranslationsType = Record<DomainType, Record<LocaleType, Record<string, string>>>;
29+
2830
// eslint-disable-next-line @typescript-eslint/no-unused-vars
2931
export interface Message<Translations extends TranslationsType, Locale extends LocaleType> {
3032
id: string;
@@ -41,6 +43,8 @@ import { format } from './formatters/formatter';
4143
let _locale: LocaleType | null = null;
4244
let _localeFallbacks: Record<LocaleType, LocaleType> = {};
4345

46+
let _registeredTranslations: RegisteredTranslationsType = {};
47+
4448
export function setLocale(locale: LocaleType | null) {
4549
_locale = locale;
4650
}
@@ -113,7 +117,7 @@ export function trans<
113117
: [message: M, parameters: P, domain?: RemoveIntlIcuSuffix<D>, locale?: LocaleOf<M>]
114118
): string;
115119
export function trans<
116-
M extends Message<TranslationsType, LocaleType>,
120+
M extends Message<TranslationsType, LocaleType> | string,
117121
D extends DomainsOf<M>,
118122
P extends ParametersOf<M, D>
119123
>(
@@ -130,6 +134,10 @@ export function trans<
130134
locale = getLocale() as LocaleOf<M>;
131135
}
132136

137+
if (typeof message === 'string') {
138+
message = getRegisteredMessage(message, domain);
139+
}
140+
133141
if (typeof message.translations === 'undefined') {
134142
return message.id;
135143
}
@@ -166,3 +174,29 @@ export function trans<
166174

167175
return message.id;
168176
}
177+
178+
export function registerDomain(domainTranslations: RegisteredTranslationsType) {
179+
for (const [domainName, translationsByLocale] of Object.entries(domainTranslations)) {
180+
_registeredTranslations[domainName] = translationsByLocale;
181+
}
182+
}
183+
184+
function getRegisteredMessage(key: string, domain: string): Message<TranslationsType, LocaleType>
185+
{
186+
let message: Message<TranslationsType, LocaleType> = {id: key, translations: {}};
187+
188+
for (const domainName of [domain, domain+'+intl-icu']) {
189+
if (typeof _registeredTranslations[domainName] === 'undefined') {
190+
continue;
191+
}
192+
193+
for (const [locale, translations] of Object.entries(_registeredTranslations[domainName])) {
194+
if (typeof translations[key] !== 'undefined') {
195+
message.translations[domainName] ??= {};
196+
message.translations[domainName][locale] = translations[key];
197+
}
198+
}
199+
}
200+
201+
return message;
202+
}

0 commit comments

Comments
 (0)