Skip to content

Commit d0b0305

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

24 files changed

+3385
-3175
lines changed

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

Lines changed: 3 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,5 @@ 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;
29+
export declare function resetRegisteredDomains(): void;

src/Translator/assets/dist/translator_controller.js

Lines changed: 31 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,31 @@ 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+
if (typeof _registeredTranslations[domainName] !== 'undefined') {
252+
throw new Error(`The domain "${domainName}" has already been registered.`);
253+
}
254+
_registeredTranslations[domainName] = translationsByLocale;
255+
}
256+
}
257+
function resetRegisteredDomains() {
258+
_registeredTranslations = {};
259+
}
260+
function getRegisteredMessage(key, domain) {
261+
let message = { id: key, translations: {} };
262+
for (const domainName of [domain, domain + '+intl-icu']) {
263+
if (typeof _registeredTranslations[domainName] === 'undefined') {
264+
continue;
265+
}
266+
message.translations[domainName] = {};
267+
for (const [locale, translations] of Object.entries(_registeredTranslations[domainName])) {
268+
if (typeof translations[key] !== 'undefined') {
269+
message.translations[domainName][locale] = translations[key];
270+
}
271+
}
272+
}
273+
return message;
274+
}
245275

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

src/Translator/assets/src/translator.ts

Lines changed: 41 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,35 @@ 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+
if (typeof _registeredTranslations[domainName] !== 'undefined') {
181+
throw new Error(`The domain "${domainName}" has already been registered.`);
182+
}
183+
_registeredTranslations[domainName] = translationsByLocale;
184+
}
185+
}
186+
export function resetRegisteredDomains() {
187+
_registeredTranslations = {};
188+
}
189+
190+
function getRegisteredMessage(key: string, domain: string): Message<TranslationsType, LocaleType>
191+
{
192+
let message: Message<TranslationsType, LocaleType> = {id: key, translations: {}};
193+
194+
for (const domainName of [domain, domain+'+intl-icu']) {
195+
if (typeof _registeredTranslations[domainName] === 'undefined') {
196+
continue;
197+
}
198+
199+
message.translations[domainName] = {};
200+
for (const [locale, translations] of Object.entries(_registeredTranslations[domainName])) {
201+
if (typeof translations[key] !== 'undefined') {
202+
message.translations[domainName][locale] = translations[key];
203+
}
204+
}
205+
}
206+
207+
return message;
208+
}

0 commit comments

Comments
 (0)