Skip to content

Commit 295c006

Browse files
Add global domains filters for translation dump + add "by-domain" translation dumper
1 parent fed00e2 commit 295c006

18 files changed

+1175
-106
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,13 @@ export interface Message<Translations extends TranslationsType, Locale extends L
1919
};
2020
};
2121
}
22+
export interface DomainMessages {
23+
[id: string]: Message<TranslationsType, LocaleType>;
24+
}
2225
export declare function setLocale(locale: LocaleType | null): void;
2326
export declare function getLocale(): LocaleType;
2427
export declare function setLocaleFallbacks(localeFallbacks: Record<LocaleType, LocaleType>): void;
2528
export declare function getLocaleFallbacks(): Record<LocaleType, LocaleType>;
2629
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;
30+
export declare function registerDomain(domain: DomainMessages): void;
31+
export declare function resetRegisteredDomains(): void;

src/Translator/assets/dist/translator_controller.js

Lines changed: 37 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,12 @@ 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+
}
219+
if (typeof message !== 'object') {
220+
return message;
221+
}
215222
if (typeof message.translations === 'undefined') {
216223
return message.id;
217224
}
@@ -242,5 +249,34 @@ function trans(message, parameters = {}, domain = 'messages', locale = null) {
242249
}
243250
return message.id;
244251
}
252+
function registerDomain(domain) {
253+
for (const [id, message] of Object.entries(domain)) {
254+
if (typeof _registeredTranslations[id] === 'undefined') {
255+
_registeredTranslations[id] = message;
256+
continue;
257+
}
258+
let domainName = Object.keys(message.translations)[0];
259+
if (typeof _registeredTranslations[id].translations[domainName] === 'undefined') {
260+
_registeredTranslations[id].translations[domainName] = message.translations[domainName];
261+
continue;
262+
}
263+
throw new Error(`The domain "${domainName}" has already been registered for the message "${id}".`);
264+
}
265+
}
266+
function resetRegisteredDomains() {
267+
_registeredTranslations = {};
268+
}
269+
function getRegisteredMessage(key, domain) {
270+
if (typeof _registeredTranslations[key] === 'undefined') {
271+
return key;
272+
}
273+
if (typeof _registeredTranslations[key]['translations'][domain + "+intl-icu"] !== 'undefined') {
274+
domain = domain + "+intl-icu";
275+
}
276+
if (typeof _registeredTranslations[key]['translations'][domain] === 'undefined') {
277+
return key;
278+
}
279+
return _registeredTranslations[key];
280+
}
245281

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

src/Translator/assets/src/translator.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,16 @@ export interface Message<Translations extends TranslationsType, Locale extends L
3535
};
3636
}
3737

38+
export interface DomainMessages {
39+
[id: string]: Message<TranslationsType, LocaleType>;
40+
}
41+
3842
import { formatIntl } from './formatters/intl-formatter';
3943
import { format } from './formatters/formatter';
4044

4145
let _locale: LocaleType | null = null;
4246
let _localeFallbacks: Record<LocaleType, LocaleType> = {};
47+
let _registeredTranslations: DomainMessages = {};
4348

4449
export function setLocale(locale: LocaleType | null) {
4550
_locale = locale;
@@ -113,7 +118,7 @@ export function trans<
113118
: [message: M, parameters: P, domain?: RemoveIntlIcuSuffix<D>, locale?: LocaleOf<M>]
114119
): string;
115120
export function trans<
116-
M extends Message<TranslationsType, LocaleType>,
121+
M extends Message<TranslationsType, LocaleType>|string,
117122
D extends DomainsOf<M>,
118123
P extends ParametersOf<M, D>
119124
>(
@@ -130,6 +135,14 @@ export function trans<
130135
locale = getLocale() as LocaleOf<M>;
131136
}
132137

138+
if (typeof message === 'string') {
139+
message = getRegisteredMessage(message, domain);
140+
}
141+
142+
if (typeof message !== 'object') {
143+
return message;
144+
}
145+
133146
if (typeof message.translations === 'undefined') {
134147
return message.id;
135148
}
@@ -166,3 +179,37 @@ export function trans<
166179

167180
return message.id;
168181
}
182+
183+
184+
export function registerDomain(domain: DomainMessages): void {
185+
for (const [id, message] of Object.entries(domain)) {
186+
if (typeof _registeredTranslations[id] === 'undefined') {
187+
_registeredTranslations[id] = message;
188+
continue;
189+
}
190+
let domainName = Object.keys(message.translations)[0];
191+
if (typeof _registeredTranslations[id].translations[domainName] === 'undefined') {
192+
_registeredTranslations[id].translations[domainName] = message.translations[domainName];
193+
continue;
194+
}
195+
throw new Error(`The domain "${domainName}" has already been registered for the message "${id}".`);
196+
}
197+
}
198+
199+
export function resetRegisteredDomains(): void {
200+
_registeredTranslations = {};
201+
}
202+
203+
function getRegisteredMessage(key: string, domain: DomainType): Message<TranslationsType, LocaleType>|string
204+
{
205+
if (typeof _registeredTranslations[key] === 'undefined') {
206+
return key;
207+
}
208+
if (typeof _registeredTranslations[key]['translations'][domain+"+intl-icu"] !== 'undefined') {
209+
domain = domain+"+intl-icu";
210+
}
211+
if (typeof _registeredTranslations[key]['translations'][domain] === 'undefined') {
212+
return key;
213+
}
214+
return _registeredTranslations[key];
215+
}

0 commit comments

Comments
 (0)