mirror of
https://github.com/frappe/books.git
synced 2024-11-10 07:40:55 +00:00
9424b131be
- utils is frontend safe
87 lines
1.6 KiB
JavaScript
87 lines
1.6 KiB
JavaScript
import {
|
|
getIndexFormat,
|
|
getIndexList,
|
|
getSnippets,
|
|
getWhitespaceSanitized,
|
|
} from '../../scripts/helpers';
|
|
import { ValueError } from './errors';
|
|
|
|
class TranslationString {
|
|
constructor(...args) {
|
|
this.args = args;
|
|
}
|
|
|
|
get s() {
|
|
return this.toString();
|
|
}
|
|
|
|
ctx(context) {
|
|
this.context = context;
|
|
return this;
|
|
}
|
|
|
|
#formatArg(arg) {
|
|
return arg ?? '';
|
|
}
|
|
|
|
#translate() {
|
|
let indexFormat = getIndexFormat(this.args[0]);
|
|
indexFormat = getWhitespaceSanitized(indexFormat);
|
|
|
|
const translatedIndexFormat =
|
|
this.languageMap[indexFormat]?.translation ?? indexFormat;
|
|
|
|
this.argList = getIndexList(translatedIndexFormat).map(
|
|
(i) => this.argList[i]
|
|
);
|
|
this.strList = getSnippets(translatedIndexFormat);
|
|
}
|
|
|
|
#stitch() {
|
|
if (!(this.args[0] instanceof Array)) {
|
|
throw new ValueError(
|
|
`invalid args passed to TranslationString ${
|
|
this.args
|
|
} of type ${typeof this.args[0]}`
|
|
);
|
|
}
|
|
|
|
this.strList = this.args[0];
|
|
this.argList = this.args.slice(1);
|
|
|
|
if (this.languageMap) {
|
|
this.#translate();
|
|
}
|
|
|
|
return this.strList
|
|
.map((s, i) => s + this.#formatArg(this.argList[i]))
|
|
.join('')
|
|
.replace(/\s+/g, ' ')
|
|
.trim();
|
|
}
|
|
|
|
toString() {
|
|
return this.#stitch();
|
|
}
|
|
|
|
toJSON() {
|
|
return this.#stitch();
|
|
}
|
|
|
|
valueOf() {
|
|
return this.#stitch();
|
|
}
|
|
}
|
|
|
|
export function T(...args) {
|
|
return new TranslationString(...args);
|
|
}
|
|
|
|
export function t(...args) {
|
|
return new TranslationString(...args).s;
|
|
}
|
|
|
|
export function setLanguageMapOnTranslationString(languageMap) {
|
|
TranslationString.prototype.languageMap = languageMap;
|
|
}
|