Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mololab
GitHub Repository: mololab/json-translator
Path: blob/master/src/modules/helpers.ts
235 views
1
import { default_value, translation_value_limit } from '../utils/micro';
2
import { LanguageMapping } from './languages';
3
import { TranslationModule, TranslationModules } from './modules';
4
5
export function safeValueTransition(value: string) {
6
const value_safety: ValueSafety = valueIsSafe(value);
7
8
if (value_safety.is_safe === true) {
9
return value;
10
}
11
12
switch (value_safety.type) {
13
case nonSafeTypes.null:
14
case nonSafeTypes.undefined:
15
case nonSafeTypes.empty:
16
value = default_value;
17
break;
18
case nonSafeTypes.long:
19
value = value.substring(0, translation_value_limit);
20
break;
21
}
22
23
return value;
24
}
25
26
function valueIsSafe(value: string): ValueSafety {
27
let result: ValueSafety = {
28
is_safe: true,
29
type: undefined,
30
};
31
32
if (value === undefined) {
33
result.is_safe = false;
34
result['type'] = nonSafeTypes.undefined;
35
36
return result;
37
}
38
39
if (value === null) {
40
result.is_safe = false;
41
result['type'] = nonSafeTypes.null;
42
43
return result;
44
}
45
46
if (value.length >= translation_value_limit) {
47
result.is_safe = false;
48
result['type'] = nonSafeTypes.long;
49
50
return result;
51
}
52
53
if (value === '') {
54
result.is_safe = false;
55
result['type'] = nonSafeTypes.empty;
56
57
return result;
58
}
59
60
return result;
61
}
62
63
interface ValueSafety {
64
is_safe: boolean;
65
type: nonSafeTypes | undefined;
66
}
67
68
enum nonSafeTypes {
69
'long',
70
'undefined',
71
'null',
72
'empty',
73
}
74
75
export function translationModuleKeys(): string[] {
76
return Object.keys(TranslationModules);
77
}
78
79
export function getTranslationModuleByKey(key: string): TranslationModule {
80
return TranslationModules[key];
81
}
82
83
export function getLanguageKeyFromValue(
84
value: string,
85
languages: Record<string, string>
86
): string | undefined {
87
return Object.keys(languages).find(key => languages[key] === value);
88
}
89
90
export function getLanguageValues(languages: Record<string, string>): string[] {
91
return Object.values(languages);
92
}
93
94
export function getLanguageVariant(
95
source: string,
96
sourceValue: string,
97
destination: string
98
): string | undefined {
99
let destinationValue: string | undefined = undefined;
100
101
for (let key of Object.keys(LanguageMapping)) {
102
if (
103
LanguageMapping[key].includes(source) &&
104
getTranslationModuleByKey(source).languages[key] === sourceValue &&
105
LanguageMapping[key].includes(destination)
106
) {
107
destinationValue = getTranslationModuleByKey(destination).languages[key];
108
break;
109
}
110
}
111
112
return destinationValue;
113
}
114
115