57 lines
No EOL
1.7 KiB
TypeScript
57 lines
No EOL
1.7 KiB
TypeScript
import {DesugaringStep} from "./Conversion";
|
|
import {Utils} from "../../../Utils";
|
|
import Translations from "../../../UI/i18n/Translations";
|
|
|
|
export class AddContextToTranslations<T> extends DesugaringStep<T> {
|
|
private readonly _prefix: string;
|
|
|
|
constructor(prefix = "") {
|
|
super("Adds a '_context' to every object that is probably a translation", ["_context"], "AddContextToTranslation");
|
|
this._prefix = prefix;
|
|
}
|
|
|
|
/**
|
|
* const theme = {
|
|
* layers: [
|
|
* {
|
|
* builtin: ["abc"],
|
|
* override: {
|
|
* title:{
|
|
* en: "Some title"
|
|
* }
|
|
* }
|
|
* }
|
|
* ]
|
|
* }
|
|
* const rewritten = new AddContextToTranslations<any>("prefix:").convert(theme, "context").result
|
|
* const expected = {
|
|
* layers: [
|
|
* {
|
|
* builtin: ["abc"],
|
|
* override: {
|
|
* title:{
|
|
* _context: "prefix:context.layers.0.override.title"
|
|
* en: "Some title"
|
|
* }
|
|
* }
|
|
* }
|
|
* ]
|
|
* }
|
|
* rewritten // => expected
|
|
*/
|
|
convert(json: T, context: string): { result: T; errors?: string[]; warnings?: string[]; information?: string[] } {
|
|
|
|
const result = Utils.WalkJson(json, (leaf, path) => {
|
|
if (typeof leaf === "object") {
|
|
return {...leaf, _context: this._prefix + context + "." + path.join(".")}
|
|
} else {
|
|
return leaf
|
|
}
|
|
}, obj => obj !== undefined && obj !== null && Translations.isProbablyATranslation(obj))
|
|
|
|
return {
|
|
result
|
|
};
|
|
}
|
|
|
|
} |