|
|
|
@ -155,33 +155,45 @@ export class ConfigState {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const keys = key.split('::') as string[];
|
|
|
|
|
const selector = createSelector([ConfigState], (state: Config.State) => {
|
|
|
|
|
if (!state.localization) return defaultValue || key;
|
|
|
|
|
|
|
|
|
|
const defaultResourceName = snq(() => state.environment.localization.defaultResourceName);
|
|
|
|
|
if (keys[0] === '') {
|
|
|
|
|
if (!defaultResourceName) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`Please check your environment. May you forget set defaultResourceName?
|
|
|
|
|
Here is the example:
|
|
|
|
|
{ production: false,
|
|
|
|
|
localization: {
|
|
|
|
|
defaultResourceName: 'MyProjectName'
|
|
|
|
|
}
|
|
|
|
|
}`,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
const selector = createSelector([ConfigState], (state: Config.State): string => {
|
|
|
|
|
const warn = (message: string) => {
|
|
|
|
|
if (!state.environment.production) console.warn(message);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
keys[0] = defaultResourceName;
|
|
|
|
|
if (keys.length < 2) {
|
|
|
|
|
warn('The localization source separator (::) not found.');
|
|
|
|
|
return key as string;
|
|
|
|
|
}
|
|
|
|
|
if (!state.localization) return defaultValue || keys[1];
|
|
|
|
|
|
|
|
|
|
let localization = (keys as any).reduce((acc, val) => {
|
|
|
|
|
if (acc) {
|
|
|
|
|
return acc[val];
|
|
|
|
|
}
|
|
|
|
|
const sourceName =
|
|
|
|
|
keys[0] ||
|
|
|
|
|
snq(() => state.environment.localization.defaultResourceName) ||
|
|
|
|
|
state.localization.defaultResourceName;
|
|
|
|
|
const sourceKey = keys[1];
|
|
|
|
|
|
|
|
|
|
return undefined;
|
|
|
|
|
}, state.localization.values);
|
|
|
|
|
if (sourceName === '_') {
|
|
|
|
|
return sourceKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!sourceName) {
|
|
|
|
|
warn(
|
|
|
|
|
'Localization source name is not specified and the defaultResourceName was not defined!',
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return sourceKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const source = state.localization.values[sourceName];
|
|
|
|
|
if (!source) {
|
|
|
|
|
warn('Could not find localization source: ' + sourceName);
|
|
|
|
|
return sourceKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let localization = source[sourceKey];
|
|
|
|
|
if (typeof localization === 'undefined') {
|
|
|
|
|
return sourceKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interpolateParams = interpolateParams.filter(params => params != null);
|
|
|
|
|
if (localization && interpolateParams && interpolateParams.length) {
|
|
|
|
@ -191,7 +203,7 @@ export class ConfigState {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (typeof localization !== 'string') localization = '';
|
|
|
|
|
return localization || defaultValue || key;
|
|
|
|
|
return localization || defaultValue || (key as string);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return selector;
|
|
|
|
|