tera-system-ui 0.0.81 → 0.0.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/button/Button.d.ts +2 -2
- package/dist/components/button/Button.js +1 -1
- package/dist/components/checkbox/Checkbox.svelte +2 -1
- package/dist/components/icons/IconArrowBigRightFilled.svelte +1 -1
- package/dist/components/icons/IconArrowBigRightFilled.svelte.d.ts +1 -1
- package/dist/components/icons/IconBook.svelte +1 -1
- package/dist/components/icons/IconBook.svelte.d.ts +1 -1
- package/dist/components/icons/IconBookmarkPlus.svelte +1 -1
- package/dist/components/icons/IconBookmarkPlus.svelte.d.ts +1 -1
- package/dist/components/icons/IconCalculator.svelte +1 -1
- package/dist/components/icons/IconCalculator.svelte.d.ts +1 -1
- package/dist/components/icons/IconCheck.svelte +1 -1
- package/dist/components/icons/IconCheck.svelte.d.ts +1 -1
- package/dist/components/icons/IconChevronDown.svelte +1 -1
- package/dist/components/icons/IconChevronDown.svelte.d.ts +1 -1
- package/dist/components/icons/IconCoin.svelte +1 -1
- package/dist/components/icons/IconCoin.svelte.d.ts +1 -1
- package/dist/components/icons/IconCoinConvert.svelte +0 -1
- package/dist/components/icons/IconCopy.svelte +1 -1
- package/dist/components/icons/IconCopy.svelte.d.ts +1 -1
- package/dist/components/icons/IconCopyCheckFilled.svelte +1 -1
- package/dist/components/icons/IconCopyCheckFilled.svelte.d.ts +1 -1
- package/dist/components/icons/IconHamburger.svelte +1 -1
- package/dist/components/icons/IconLanguage.svelte +1 -1
- package/dist/components/icons/IconLanguage.svelte.d.ts +1 -1
- package/dist/components/icons/IconLoader2.svelte +1 -1
- package/dist/components/icons/IconLoader2.svelte.d.ts +1 -1
- package/dist/components/icons/IconLogout.svelte +1 -1
- package/dist/components/icons/IconLogout.svelte.d.ts +1 -1
- package/dist/components/icons/IconMoon.svelte +1 -1
- package/dist/components/icons/IconPointFilled.svelte +1 -1
- package/dist/components/icons/IconPointFilled.svelte.d.ts +1 -1
- package/dist/components/icons/IconSearch.svelte +1 -1
- package/dist/components/icons/IconSearch.svelte.d.ts +1 -1
- package/dist/components/icons/IconSettings.svelte +1 -1
- package/dist/components/icons/IconSettings.svelte.d.ts +1 -1
- package/dist/components/icons/IconSun.svelte +1 -1
- package/dist/components/icons/IconSwitchHorizontal.svelte +1 -1
- package/dist/components/icons/IconSwitchHorizontal.svelte.d.ts +1 -1
- package/dist/components/icons/IconSwitchVertical.svelte +1 -1
- package/dist/components/icons/IconSwitchVertical.svelte.d.ts +1 -1
- package/dist/components/icons/IconTransform.svelte +1 -1
- package/dist/components/icons/IconTransform.svelte.d.ts +1 -1
- package/dist/components/icons/IconX.svelte +1 -1
- package/dist/components/icons/IconX.svelte.d.ts +1 -1
- package/dist/components/icons/package.json +14 -0
- package/dist/components/icons/update-icon-import.d.ts +1 -0
- package/dist/components/icons/update-icon-import.js +30 -0
- package/dist/components/language-picker-button/LanguagePickerButton.svelte +2 -2
- package/dist/tera-i18n/dev-tools/translator/gpt-translator-i18n-message.js +69 -31
- package/dist/tera-i18n/dev-tools/translator/index.js +1 -0
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/de.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/en.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/es.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/fr.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/it.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/ja.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/ko.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/pt.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/ru.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/vi.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/zh-CN.json +13 -4
- package/dist/tera-i18n/projects/tera-converter/messages/de.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/en.json +3 -2
- package/dist/tera-i18n/projects/tera-converter/messages/es.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/fr.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/it.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/ja.json +3 -2
- package/dist/tera-i18n/projects/tera-converter/messages/ko.json +3 -2
- package/dist/tera-i18n/projects/tera-converter/messages/pt.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/ru.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/vi.json +40 -39
- package/dist/tera-i18n/projects/tera-converter/messages/zh-CN.json +3 -2
- package/dist/tera-i18n/projects/tera-tools/messages/ar.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/bg.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/bn.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ca.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/cs.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/da.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/de.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/el.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/en.json +96 -0
- package/dist/tera-i18n/projects/tera-tools/messages/es.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/fi.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/fr.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/he.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/hi.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/hu.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/id.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/it.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ja.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ko.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/lt.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/lv.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ms.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/nl.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/no.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/pl.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/pt.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ro.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ru.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/sk.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/sl.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/sq.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/sr.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/sv.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/sw.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/ta.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/te.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/th.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/tl.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/tr.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/uk.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/vi.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/zh-CN.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/messages/zh-TW.json +70 -0
- package/dist/tera-i18n/projects/tera-tools/project.inlang/project_id +1 -0
- package/dist/tera-i18n/projects/tera-tools/project.inlang/settings.json +61 -0
- package/dist/tera-i18n/projects/tera-tools/supported-language.d.ts +1 -0
- package/dist/tera-i18n/projects/tera-tools/supported-language.js +45 -0
- package/package.json +3 -2
|
@@ -19,7 +19,7 @@ export declare const styles: import("tailwind-variants").TVReturnType<{
|
|
|
19
19
|
dangerous: {
|
|
20
20
|
true: string;
|
|
21
21
|
};
|
|
22
|
-
}, undefined, "relative font-medium overflow-clip rounded inline-flex items-center justify-center !leading-[0.1rem] [&>svg]:stroke-icon
|
|
22
|
+
}, undefined, "relative font-medium overflow-clip rounded inline-flex items-center justify-center !leading-[0.1rem] [&>svg]:stroke-icon duration-element-react select-none focus-visible:ring-2 outline-none", import("tailwind-variants/dist/config").TVConfig<{
|
|
23
23
|
variant: {
|
|
24
24
|
primary: string;
|
|
25
25
|
secondary: string;
|
|
@@ -99,7 +99,7 @@ export declare const styles: import("tailwind-variants").TVReturnType<{
|
|
|
99
99
|
dangerous: {
|
|
100
100
|
true: string;
|
|
101
101
|
};
|
|
102
|
-
}, undefined, "relative font-medium overflow-clip rounded inline-flex items-center justify-center !leading-[0.1rem] [&>svg]:stroke-icon
|
|
102
|
+
}, undefined, "relative font-medium overflow-clip rounded inline-flex items-center justify-center !leading-[0.1rem] [&>svg]:stroke-icon duration-element-react select-none focus-visible:ring-2 outline-none", import("tailwind-variants/dist/config").TVConfig<{
|
|
103
103
|
variant: {
|
|
104
104
|
primary: string;
|
|
105
105
|
secondary: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tv } from "tailwind-variants";
|
|
2
2
|
export const styles = tv({
|
|
3
|
-
base: 'relative font-medium overflow-clip rounded inline-flex items-center justify-center !leading-[0.1rem] [&>svg]:stroke-icon
|
|
3
|
+
base: 'relative font-medium overflow-clip rounded inline-flex items-center justify-center !leading-[0.1rem] [&>svg]:stroke-icon duration-element-react select-none focus-visible:ring-2 outline-none',
|
|
4
4
|
variants: {
|
|
5
5
|
variant: {
|
|
6
6
|
primary: 'bg-primary-700 text-neutral-1 border border-primary-700 hover:bg-primary-800 focus:ring-primary-token-9 [&:after]:bg-black',
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { Checkbox as CheckboxPrimitive, type WithoutChildrenOrChild } from "bits-ui";
|
|
3
3
|
import { cn } from "../../utils";
|
|
4
|
-
import
|
|
4
|
+
import IconCheck from "@tabler/icons-svelte/icons/check";
|
|
5
|
+
import IconMinus from "@tabler/icons-svelte/icons/minus";
|
|
5
6
|
|
|
6
7
|
let {
|
|
7
8
|
ref = $bindable(null),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import {type IconsProps, styles} from "./Icons";
|
|
3
|
-
import
|
|
3
|
+
import IconArrowBigRightFilled from "@tabler/icons-svelte/icons/arrow-big-right-filled";
|
|
4
4
|
|
|
5
5
|
let {children, ...props}: IconsProps = $props();
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconArrowBigRightFilled from "@tabler/icons-svelte/icons/arrow-big-right-filled";
|
|
3
3
|
declare const IconArrowBigRightFilled: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconArrowBigRightFilled;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconBookmarkPlus from "@tabler/icons-svelte/icons/bookmark-plus";
|
|
3
3
|
declare const IconBookmarkPlus: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconBookmarkPlus;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconCalculator from "@tabler/icons-svelte/icons/calculator";
|
|
3
3
|
declare const IconCalculator: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconCalculator;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconChevronDown from "@tabler/icons-svelte/icons/chevron-down";
|
|
3
3
|
declare const IconChevronDown: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconChevronDown;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconCopyCheckFilled from "@tabler/icons-svelte/icons/copy-check-filled";
|
|
3
3
|
declare const IconCopyCheckFilled: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconCopyCheckFilled;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconLanguage from "@tabler/icons-svelte/icons/language";
|
|
3
3
|
declare const IconLanguage: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconLanguage;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconPointFilled from "@tabler/icons-svelte/icons/point-filled";
|
|
3
3
|
declare const IconPointFilled: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconPointFilled;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconSettings from "@tabler/icons-svelte/icons/settings";
|
|
3
3
|
declare const IconSettings: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconSettings;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import {type IconsProps, styles} from "./Icons";
|
|
3
|
-
import
|
|
3
|
+
import IconSwitchHorizontal from "@tabler/icons-svelte/icons/switch-horizontal";
|
|
4
4
|
|
|
5
5
|
let {children, ...props}: IconsProps = $props();
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconSwitchHorizontal from "@tabler/icons-svelte/icons/switch-horizontal";
|
|
3
3
|
declare const IconSwitchHorizontal: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconSwitchHorizontal;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconSwitchVertical from "@tabler/icons-svelte/icons/switch-vertical";
|
|
3
3
|
declare const IconSwitchVertical: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconSwitchVertical;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type IconsProps } from "./Icons";
|
|
2
|
-
import
|
|
2
|
+
import IconTransform from "@tabler/icons-svelte/icons/transform";
|
|
3
3
|
declare const IconTransform: import("svelte").Component<IconsProps, {}, "">;
|
|
4
4
|
export default IconTransform;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "icons",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://gitlab.com/tera-research/tera-clients/tera-clients-libs/tera-system-ui.git"
|
|
12
|
+
},
|
|
13
|
+
"private": true
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
function getSvelteFiles(dir) {
|
|
4
|
+
let results = [];
|
|
5
|
+
const list = fs.readdirSync(dir);
|
|
6
|
+
list.forEach((file) => {
|
|
7
|
+
const filePath = path.join(dir, file);
|
|
8
|
+
const stat = fs.statSync(filePath);
|
|
9
|
+
if (stat && stat.isDirectory()) {
|
|
10
|
+
results = results.concat(getSvelteFiles(filePath));
|
|
11
|
+
}
|
|
12
|
+
else if (file.endsWith('.svelte')) {
|
|
13
|
+
results.push(filePath);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
return results;
|
|
17
|
+
}
|
|
18
|
+
// Example usage:
|
|
19
|
+
const svelteFiles = getSvelteFiles('./');
|
|
20
|
+
svelteFiles.forEach((file) => {
|
|
21
|
+
let content = fs.readFileSync(file, 'utf8');
|
|
22
|
+
// Perform your content modifications here
|
|
23
|
+
// Example: Replace 'IconCopy' with 'IconCopyNew'
|
|
24
|
+
// content = content.replace(/IconCopy/g, 'IconCopyNew');
|
|
25
|
+
content = content.replace(/import\s+\{\s*(\w+)\s*\}\s+from\s+['"]@tabler\/icons-svelte['"];/g, (match, p1) => {
|
|
26
|
+
const iconName = p1.replace(/([A-Z])/g, '-$1').toLowerCase().slice(1);
|
|
27
|
+
return `import ${p1} from "@tabler/icons-svelte/icons/${iconName}";`;
|
|
28
|
+
});
|
|
29
|
+
fs.writeFileSync(file, content, 'utf8');
|
|
30
|
+
});
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
<button onclick={() => {open = true}}
|
|
45
45
|
class="h-8 flex items-center bg-neutral-token-4 text-neutral-token-9 rounded-full ps-2 pe-1 hover:bg-neutral-token-5 transition-all duration-element-react">
|
|
46
46
|
<IconLanguage class="size-icon-xs"/>
|
|
47
|
-
<img class="size-6 flag-img" src={getFlagUrl(currentLangItem?.flag)} alt={currentLangItem?.flag}>
|
|
47
|
+
<img class="size-6 flag-img" loading="lazy" src={getFlagUrl(currentLangItem?.flag)} alt={currentLangItem?.flag}>
|
|
48
48
|
</button>
|
|
49
49
|
|
|
50
|
-
<Dialog bind:open={open} class="text-neutral-token-13" size="auto"
|
|
50
|
+
<Dialog bind:open={open} class="text-neutral-token-13" size="auto">
|
|
51
51
|
{#snippet header()}
|
|
52
52
|
{m.text_select_language()}
|
|
53
53
|
{/snippet}
|
|
@@ -3,6 +3,7 @@ import { OpenAI } from 'openai';
|
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import dotenv from "dotenv";
|
|
5
5
|
import { SupportedLanguage as TeraConverterSupportedLangauge } from '../../projects/tera-converter/supported-language';
|
|
6
|
+
import { SupportedLanguage as TeraToolsSupportedLangauge } from '../../projects/tera-tools/supported-language';
|
|
6
7
|
import { SupportedLanguage as TeraCalculatorSupportedLangauge } from '../../projects/tera-calculator/supported-language';
|
|
7
8
|
import { getLanguagesData } from "../../projects/common/all-language-data";
|
|
8
9
|
dotenv.config({ override: true, path: './.env.local' });
|
|
@@ -10,17 +11,25 @@ let openAiKey = process.env.OPENAI_API_KEY;
|
|
|
10
11
|
if (!openAiKey) {
|
|
11
12
|
throw new Error("Missing OpenAI API key");
|
|
12
13
|
}
|
|
14
|
+
function getMonthNameByNumberAndLang(monthNumber, langCode) {
|
|
15
|
+
const date = new Date(2020, monthNumber - 1, 1); // Create a date object with the given month number
|
|
16
|
+
const formatter = new Intl.DateTimeFormat(langCode, { month: 'long' });
|
|
17
|
+
return formatter.format(date);
|
|
18
|
+
}
|
|
13
19
|
// Directory
|
|
14
20
|
// - en
|
|
15
21
|
// - content.md
|
|
16
22
|
// - vi
|
|
17
23
|
// - content.md
|
|
18
|
-
async function translateContentDirectory(directory, sourceLanguage, outputLanguage) {
|
|
24
|
+
async function translateContentDirectory(directory, sourceLanguage, outputLanguage, translateKeys) {
|
|
19
25
|
if (!fs.existsSync(directory)) {
|
|
20
26
|
throw new Error("Directory not found.");
|
|
21
27
|
}
|
|
22
28
|
let messageContent = fs.readFileSync(`${directory}/${sourceLanguage}.json`, "utf8");
|
|
23
29
|
let sourceMessageObject = JSON.parse(messageContent);
|
|
30
|
+
if (translateKeys && translateKeys.length > 0) {
|
|
31
|
+
sourceMessageObject = Object.fromEntries(Object.entries(sourceMessageObject).filter(([key]) => translateKeys.includes(key)));
|
|
32
|
+
}
|
|
24
33
|
const openai = new OpenAI();
|
|
25
34
|
for (let language of outputLanguage) {
|
|
26
35
|
if (language.code === sourceLanguage) {
|
|
@@ -38,44 +47,72 @@ async function translateContentDirectory(directory, sourceLanguage, outputLangua
|
|
|
38
47
|
systemPrompt = systemPrompt.replaceAll("{languageCode}", language.code);
|
|
39
48
|
}
|
|
40
49
|
let outputContentFile = `${outputDir}/${language.code}.json`;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
50
|
+
let oldMessageContent = fs.readFileSync(`${outputContentFile}`, "utf8");
|
|
51
|
+
let oldMessageJson = oldMessageContent ? JSON.parse(oldMessageContent) : {};
|
|
52
|
+
console.log('Translating metadata for language', language);
|
|
53
|
+
const response = await openai.chat.completions.create({
|
|
54
|
+
messages: [
|
|
55
|
+
{
|
|
56
|
+
role: "system",
|
|
57
|
+
content: systemPrompt
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
role: "user",
|
|
61
|
+
content: messageContent,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
model: "gpt-4o",
|
|
65
|
+
max_tokens: 16384,
|
|
66
|
+
});
|
|
67
|
+
let message = response.choices[0].message;
|
|
68
|
+
let translated = message.content;
|
|
69
|
+
let newTranslatedJson = JSON.parse(translated);
|
|
70
|
+
let orderedJson = {};
|
|
71
|
+
// merge old message with new message
|
|
72
|
+
for (let key of Object.keys(oldMessageJson)) {
|
|
73
|
+
if (oldMessageJson.hasOwnProperty(key)) {
|
|
74
|
+
orderedJson[key] = oldMessageJson[key];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Ensure the JSON object has the same keys and in the same order as the sourceMessageObject
|
|
78
|
+
for (let key of Object.keys(sourceMessageObject)) {
|
|
79
|
+
if (newTranslatedJson.hasOwnProperty(key)) {
|
|
80
|
+
orderedJson[key] = newTranslatedJson[key];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Translate month by using native js Intl.DateTimeFormat
|
|
84
|
+
for (let key in orderedJson) {
|
|
85
|
+
if (orderedJson.hasOwnProperty(key) && /^text_month_\d+$/.test(key)) {
|
|
86
|
+
const monthNumber = parseInt(key.split("_")[2]);
|
|
87
|
+
orderedJson[key] = getMonthNameByNumberAndLang(monthNumber, language.code);
|
|
66
88
|
}
|
|
67
|
-
fs.writeFileSync(outputContentFile, JSON.stringify(orderedJson, null, 4), 'utf8');
|
|
68
|
-
fs.writeFileSync(outputContentFile, JSON.stringify(json, null, 4), 'utf8');
|
|
69
89
|
}
|
|
90
|
+
fs.writeFileSync(outputContentFile, JSON.stringify(orderedJson, null, 4), 'utf8');
|
|
70
91
|
}
|
|
71
92
|
}
|
|
72
93
|
async function translateConverterMessage() {
|
|
73
94
|
// generate translated message for tera-converter
|
|
74
95
|
let tasks = getLanguagesData(TeraConverterSupportedLangauge)
|
|
96
|
+
// .slice(0, 1)
|
|
75
97
|
.map(language => {
|
|
76
98
|
let directory = "../../projects/tera-converter/messages";
|
|
77
99
|
console.log('Translate', language, directory);
|
|
78
|
-
return translateContentDirectory(directory, "en", [language]
|
|
100
|
+
return translateContentDirectory(directory, "en", [language], [
|
|
101
|
+
"text_seo_title_for_conversion_pair"
|
|
102
|
+
]);
|
|
103
|
+
});
|
|
104
|
+
await Promise.all(tasks);
|
|
105
|
+
}
|
|
106
|
+
async function translateTeraToolsMessage() {
|
|
107
|
+
// generate translated message for tera-tools
|
|
108
|
+
let tasks = getLanguagesData(TeraToolsSupportedLangauge)
|
|
109
|
+
// .slice(0, 1)
|
|
110
|
+
.map(language => {
|
|
111
|
+
let directory = "../../projects/tera-tools/messages";
|
|
112
|
+
console.log('Translate', language, directory);
|
|
113
|
+
return translateContentDirectory(directory, "en", [language], [
|
|
114
|
+
"text_observance_on_date",
|
|
115
|
+
]);
|
|
79
116
|
});
|
|
80
117
|
await Promise.all(tasks);
|
|
81
118
|
}
|
|
@@ -85,9 +122,10 @@ async function translateCalculatorMessages() {
|
|
|
85
122
|
.map(language => {
|
|
86
123
|
let directory = "../../projects/tera-calculator/messages";
|
|
87
124
|
console.log('Translate', language, directory);
|
|
88
|
-
return translateContentDirectory(directory, "en", [language]);
|
|
125
|
+
return translateContentDirectory(directory, "en", [language], []);
|
|
89
126
|
});
|
|
90
127
|
await Promise.all(tasks);
|
|
91
128
|
}
|
|
92
129
|
// translateConverterMessage().then()
|
|
93
|
-
|
|
130
|
+
translateTeraToolsMessage().then();
|
|
131
|
+
// translateCalculatorMessages().then()
|